--- /dev/null
+loaders\dos\loadros kernel\kimage.bin %1 %2 %3 %4\r
--- /dev/null
+
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 675 Mass Ave, Cambridge, MA 02139, USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+\f
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+\f
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+\f
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+\f
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+\f
+ Appendix: How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
+
+ 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.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19yy name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
--- /dev/null
+This file attempts to document the functions made publically available by\r
+the various subsystems.\r
+\r
+* Formatted I/O operations *\r
+\r
+NAME: int vsprintf(char *buf, const char *fmt, va_list args)\r
+NAME: int sprintf(char* buf, const char* fmt, ...)\r
+WHERE: internal/kernel.h\r
+FUNCTION: The same as the standard c library versions\r
+\r
+* PIO operations *\r
+\r
+NAME: in[b/w/l](port)\r
+WHERE: internal/io.h\r
+FUNCTION: Read an IO port of the specified size (byte/word or long)\r
+RETURNS: The value read\r
+\r
+NAME: out[b/w/l](port,val)\r
+WHERE: internal/io.h\r
+FUNCTION: Write an IO port of the specified size (byte/word or long)\r
+\r
+NAME: in_p[b/w/l](port)\r
+WHERE: internal/io.h\r
+FUNCTION: Read an IO port of the specified size (byte/word or long) with\r
+ a pause\r
+RETURNS: The value read\r
+\r
+NAME: out_p[b/w/l](port,val)\r
+WHERE: internal/io.h\r
+FUNCTION: Write an IO port of the specified size (byte/word or long) with\r
+ a pause\r
+\r
+* Bit operations *\r
+\r
+NAME: int set_bit(int nr, void* addr)\r
+NAME: int clear_bit(int nr, void* addr)\r
+NAME: int change_bit(int nr, void* addr)\r
+WHERE: internal/bitops.h>\r
+FUNCTION: Operate on a bit in the word pointed to by addr\r
+RETURN: 0 if the bit was cleared before the operations\r
+ non-zero otherwise\r
+\r
+* Debugging functions *\r
+\r
+NAME: DPRINT(fmt,....)\r
+WHERE: internal/debug.h\r
+FUNCTION: Outputs a string to the console if NDEBUG isn't defined before\r
+including internal/debug.h, a NOP otherwise\r
+ARGUMENTS: The same as printf\r
+\r
+NAME: printk\r
+WHERE: internal/kernel.h\r
+FUNCTION: Outputs a string to the console\r
+ARGUMENTS: The same as printf\r
+\r
+* Memory managment functions *\r
+\r
+NAME: unsigned int physical_to_linear(unsigned int paddr)\r
+WHERE: hal/page.h\r
+FUNCTION: Converts a physical address to a linear one\r
+RECEIVES:\r
+ paddr = the physical address to convert\r
+RETURNS: A virtual address where the memory at that physical address can be \r
+accessed\r
+\r
+NAME: void* ExAllocatePool(unsigned int size, unsigned int type = 0);\r
+WHERE: internal/pool.h\r
+FUNCTION: Allocates a block of memory\r
+RECEIVES:\r
+ size = the size of the block to allocate\r
+ type = will be whether to allocate pagable memory\r
+RETURNS: The address of the block\r
+NOTE: This isn't interrupt safe\r
+\r
+NAME: void ExFreePool(void* block)\r
+WHERE: internal/pool.h\r
+FUNCTION: Frees a block of memory\r
+\r
+NAME: void free_page(unsigned int physical_base, unsigned int nr = 1)\r
+WHERE: internal/mm.h\r
+FUNCTION: Adds a continuous range of physical memory to the free list\r
+\r
+NAME: unsigned int get_free_page(void)\r
+WHERE: internal/mm.h\r
+FUNCTION: Gets a free page\r
+RETURNS: Its physical address\r
+\r
+NAME: unsigned int get_page_physical_address(unsigned int vaddr)\r
+WHERE: internal/mm.h\r
+FUNCTION: Gets the physical address of a page\r
+\r
+NAME: void mark_page_not_writable(unsigned int vaddr)\r
+WHERE: internal/mm.h\r
+FUNCTION: Prevent writing the page\r
+\r
+* DMA functions *\r
+\r
+NAME: unsigned int get_dma_page(unsigned int max_address)\r
+WHERE: internal/mm.h\r
+FUNCTION: Gets a page with a restricted physical address i.e. suitable for\r
+ dma\r
+RETURNS: The physical address of the page\r
+\r
+NAME: void disable_dma(unsigned int dmanr)\r
+WHERE: internal/dma.h\r
+FUNCTION: Disables the specified dma channel\r
+\r
+NAME: void enable_dma(unsigned int dmanr)\r
+WHERE: internal/dma.h\r
+FUNCTION: Enables the specified dma channel\r
+\r
+NAME: void clear_dma_ff(unsigned int dmanr)\r
+WHERE: internal/dma.h\r
+FUNCTION: Clear the dma flip-flop\r
+\r
+NAME: void set_dma_mode(unsigned int dmanr, char mode)\r
+WHERE: internal/dma.h\r
+FUNCTION: Sets the type of dma transfer\r
+\r
+NAME: void set_dma_page(unsigned int dmanr, char pagenr)\r
+WHERE: internal/dma.h\r
+FUNCTION: Set only the page register bits of the transfer address\r
+\r
+NAME: void set_dma_addr(unsigned int dmanr, unsigned int a)\r
+WHERE: internal/dma.h\r
+FUNCTION: Set the transfer address for dma\r
+NOTE: Assumes flip-flop is clear\r
+\r
+NAME: void set_dma_count(unsigned int dmanr, unsigned int count)\r
+WHERE: internal/dma.h\r
+FUNCTION: Sets the size of the transfer\r
+ARGUMENTS:\r
+ count = the number of bytes to transfer\r
+NOTE: Count must be even for channels 5-7\r
+\r
+NAME: int get_dma_residue(unsigned int dmanr)\r
+WHERE: internal/dma.h\r
+FUNCTION: Gets the residue remaining after a dma transfer on the channel\r
+\r
+\r
--- /dev/null
+* Kernel bugs not fixed
+
--- /dev/null
+Kernel Development FAQ (for v0.0.7)\r
+\r
+This attempts to answer some of the common questions people developing for\r
+the kernel might want to ask (or at least what I think they should ask).\r
+Obviously I can only detail those parts which I have written so other\r
+developers please fill in the gaps.\r
+\r
+Q: What is this, what are you people, what's going on\r
+A: This is the ReactOS, an operating system intended as a clone of windows\r
+NT. See the project website (http://www.sid-dis.com/reactos/) for more details.\r
+\r
+Q: Why ReactOS\r
+A: To condemn Bill Gates to penury.\r
+\r
+Q: What do I need to compile the kernel\r
+A: DJGPP, get it from http://www.delorie.com/djgpp\r
+\r
+Q: How do I compile the kernel\r
+A: Unpack the zip. It is important not to install the kernel in the same\r
+directory as a previous version, this has caused a bit of confusion in the \r
+past. Edit the makefile in the top level directory, in particular select the\r
+correct host to build from. Then run make in the top directory\r
+\r
+Q: What files are created when I make the kernel\r
+A: The following files are created in the kernel directory\r
+ kimage = the kernel as a coff executable\r
+ kimage.bin = the kernel as a raw binary image\r
+ kernel.sym = a list of the kernel symbols\r
+\r
+Q: How do I load the kernel\r
+A: Run the boot.bat batch file.\r
+\r
+Q: Does it boot from disk\r
+A: Not at the moment.\r
+\r
+Q: When I run the kernel it crashes\r
+A: The kernel (at the moment) can only be loaded from a clean system. That\r
+is one without EMM386 or any version of windows loaded. A quick way to\r
+ensure this (if you have windows 95) is to set the program to run in msdos\r
+mode and specify an empty config.sys and autoexec.bat. See the windows help\r
+for more information.\r
+\r
+If you do that and the problem persists then contact the kernel team\r
+(ros-kernel@sid-dis.com) as it is probably a bug in the kernel \r
+\r
+Q6: How do I load a module with the kernel\r
+A: Add the names of any modules to be loaded to the command line of boot.bat.\r
+\r
+Q7: I want to add code to the kernel, how do I get it to be compiled\r
+A: You will need to edit the Makefile in kernel directory. There should be\r
+a statement like this \r
+\r
+ OBJECTS = hal/head.o hal/exp.o kernel/vsprintf.o \\r
+ ....\r
+ kernel/irqhand.o hal/page.o mm/virtual.o kernel/error.o \\r
+ kernel/exports.o kernel/module.o\r
+\r
+Add the name of the object file (the file produced when your code is\r
+compiled) to the end of the statement (in this case after kernel/module.o).\r
+If you need to go onto a new line then add a slash to the end of the\r
+previous line. It is also very important to use an editor which preserves\r
+tabs.\r
+\r
+Q8: I want to add code to the kernel, how do I make it official\r
+A: Contact the kernel mailing list ros-kernel@sid-dis.com or our coordinator\r
+dwinkley@whitworth.edu. If it is for a specific section then the kernel\r
+website (http://www.geocities.com/SiliconValley/Peaks/1957) has a list of\r
+those working on individual areas, you might what to contact one of them\r
+instead.\r
+\r
+Q9: What header files should I use\r
+A: Don't include the usual DJGPP headers like stdio.h unless you are using\r
+something compiler based like stdargs.h. To use the DJGPP headers requires\r
+linking with libc which is useless in kernel mode.\r
+\r
+All the header files are in the top-level include directory which is laid\r
+out like this\r
+ include = general win32 api declarations\r
+ include/internal = private kernel headers\r
+ include/internal/hal = HAL headers\r
+ include/ddk = header files with declarations for modules\r
+\r
+There should be a file called api.txt which documents all of the functions\r
+(and which header files they need).\r
+\r
+Q11: I want to export my function for modules to use, how do I do that\r
+A: Add the function to the list in kernel/exports.lst, then remake the\r
+kernel. Note the function must be declared as extern "C".\r
+\r
+Q12: I want to make my functions part of the kernel interface to user mode,\r
+A: That section isn't finished yet, though it will probably mean adding a\r
+pointer to the function and the size of its parameters to a internal table\r
+somewhere.\r
+\r
+Q14: I want to write a module, what are the guidelines\r
+A: See modules.txt in this directory\r
+\r
+Q15: I want to write an ISR (interrupt service routine)\r
+A: See irq.txt in this directory\r
+\r
+Q16: I want to use DMA\r
+A: Firstly this answer covers only DMA via the dma chips *not*\r
+busmaster DMA.\r
+\r
+To program the dma chip use the functions in internal/dma.h (look in api.txt\r
+for details). PC DMA can only go to memory with a physical address below\r
+1mb (or 16mb on some systems), use the get_dma_page to allocate this kind\r
+of memory.\r
+\r
+Q17: You haven't answered my question\r
+A: Send your questions to ros-kernel@sid-dis.com\r
+\r
+\r
+- David Welch (welch@mcmail.com)\r
--- /dev/null
+This document describes the implementation of the memory managment
+
+
+* ReactOS memory map
+
+0x00000000 - 0xc0000000 = User memory
+0xc0000000 - 0xd0000000 = Kernel memory
+0xd0000000 - 0xffffffff = Identify map of physical memory
+
+*
--- /dev/null
+\r
+ PORTABLE EXECUTABLE FORMAT\r
+\r
+ Author: Micheal J. O'Leary\r
+\r
+\r
+ Preface\r
+ \r
+ This document was edited and released by Microsoft Developer\r
+ Support. It describes the binary portable executable format for NT.\r
+ The information is provided at this point because we feel it will\r
+ make the work of application development easier. Unfortunately, the\r
+ information in this document may change before the final release of\r
+ Windows NT. Microsoft is NOT committing to stay with these formats\r
+ by releasing this document. Questions or follow-ups for any of the\r
+ information presented here should be posted to CompuServe MSWIN32\r
+ forum, section 6.\r
+ --Steve Firebaugh\r
+ Microsoft Developer Support\r
+ \r
+ \r
+\r
+Contents\r
+\r
+ 1. Overview\r
+\r
+ 2. PE Header\r
+\r
+ 3. Object Table\r
+\r
+ 4. Image Pages\r
+\r
+ 5. Exports\r
+ 5.1 Export Directory Table\r
+ 5.2 Export Address Table\r
+ 5.3 Export Name Table Pointers\r
+ 5.4 Export Ordinal Table\r
+ 5.5 Export Name Table\r
+\r
+ 6. Imports\r
+ 6.1 Import Directory Table\r
+ 6.2 Import Lookup Table\r
+ 6.3 Hint-Name Table\r
+ 6.4 Import Address Table\r
+\r
+ 7. Thread Local Storage\r
+ 7.1 Thread Local Storage Directory Table\r
+ 7.2 Thread Local Storage CallBack Table\r
+\r
+ 8. Resources\r
+ 8.1 Resource Directory Table\r
+ 8.2 Resource Example\r
+\r
+ 9. Fixup Table\r
+ 9.1 Fixup Block\r
+\r
+ 10. Debug Information\r
+ 10.1 Debug Directory\r
+\r
+\r
+\r
+1. Overview\r
+\r
+ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿ <ÄÄ¿ <ÄÄÄÄÄ Base of Image Header\r
+ ³ DOS 2 Compatible ³ ³\r
+ ³ EXE Header ³ ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³\r
+ ³ unused ³ ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³\r
+ ³ OEM Identifier ³ ³\r
+ ³ OEM Info ³ ³\r
+ ³ ³ ³ DOS 2.0 Section\r
+ ³ Offset to ³ ³ (for DOS compatibility only)\r
+ ³ PE Header ³ ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ ³\r
+ ³ DOS 2.0 Stub ³ ³\r
+ ³ Program & ³ ³\r
+ ³ Reloc. Table ³ ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ <ÄÄÙ\r
+ ³ unused ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´ <ÄÄÄÄÄÄÄÄÄ Aligned on 8 byte boundary\r
+ ³ PE Header ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ Object Table ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ Image Pages ³\r
+ ³ import info ³\r
+ ³ export info ³\r
+ ³ fixup info ³\r
+ ³ resource info³\r
+ ³ debug info ³\r
+ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ\r
+ \r
+Figure 1. A typical 32-bit Portable EXE File Layout\r
+\r
+\r
+\r
+2. PE Header\r
+\r
+ \r
+ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄ¿\r
+ ³ SIGNATURE BYTES ³ CPU TYPE ³ # OBJECTS ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ TIME/DATE STAMP ³ RESERVED ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ RESERVED ³ NT HDR SIZE³ FLAGS ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÂÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ RESERVED ³LMAJOR³LMINOR³ RESERVED ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÁÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ RESERVED ³ RESERVED ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ ENTRYPOINT RVA ³ RESERVED ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ RESERVED ³ IMAGE BASE ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ OBJECT ALIGN ³ FILE ALIGN ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ OS MAJOR ³ OS MINOR ³USER MAJOR ³USER MINOR ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ SUBSYS MAJOR³ SUBSYS MINOR³ RESERVED ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ IMAGE SIZE ³ HEADER SIZE ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ FILE CHECKSUM ³ SUBSYSTEM ³ DLL FLAGS ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ STACK RESERVE SIZE ³ STACK COMMIT SIZE ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ HEAP RESERVE SIZE ³ HEAP COMMIT SIZE ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ RESERVED ³ # INTERESTING RVA/SIZES ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ EXPORT TABLE RVA ³ TOTAL EXPORT DATA SIZE ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ IMPORT TABLE RVA ³ TOTAL IMPORT DATA SIZE ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ RESOURCE TABLE RVA ³ TOTAL RESOURCE DATA SIZE ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ EXCEPTION TABLE RVA ³ TOTAL EXCEPTION DATA SIZE³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ SECURITY TABLE RVA ³ TOTAL SECURITY DATA SIZE ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ FIXUP TABLE RVA ³ TOTAL FIXUP DATA SIZE ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ DEBUG TABLE RVA ³ TOTAL DEBUG DIRECTORIES ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ IMAGE DESCRIPTION RVA ³ TOTAL DESCRIPTION SIZE ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ MACHINE SPECIFIC RVA ³ MACHINE SPECIFIC SIZE ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ THREAD LOCAL STORAGE RVA ³ TOTAL TLS SIZE ³\r
+ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ\r
+ \r
+Figure 2. PE Header\r
+\r
+Notes:\r
+\r
+ o A VA is a virtual address that is already biased by the Image\r
+ Base found in the PE Header. A RVA is a virtual address that is\r
+ relative to the Image Base.\r
+ \r
+ o An RVA in the PE Header which has a value of zero indicates the\r
+ field isn't used.\r
+ \r
+ o Image pages are aligned and zero padded to a File Align\r
+ boundary. The bases of all other tables and structures must be\r
+ aligned on DWORD (4 byte) boundary. Thus, all VA's and RVA's\r
+ must be on a 32 bit boundary. All table and structure fields\r
+ must be aligned on their "natural" boundaries, with the possible\r
+ exception of the Debug Info.\r
+ \r
+SIGNATURE BYTES = DB * 4.\r
+Current value is "PE/0/0". Thats PE followed by two zeros (nulls).\r
+\r
+CPU TYPE = DW CPU Type.\r
+This field specifies the type of CPU compatibility required by this\r
+image to run. The values are:\r
+\r
+ o 0000h __unknown\r
+ \r
+ o 014Ch __80386\r
+ \r
+ o 014Dh __80486\r
+ \r
+ o 014Eh __80586\r
+ \r
+ o 0162h __MIPS Mark I (R2000, R3000)\r
+ \r
+ o 0163h __MIPS Mark II (R6000)\r
+ \r
+ o 0166h __MIPS Mark III (R4000)\r
+ \r
+# OBJECTS = DW Number of object entries.\r
+This field specifies the number of entries in the Object Table.\r
+\r
+TIME/DATE STAMP = DD Used to store the time and date the file was\r
+created or modified by the linker.\r
+\r
+NT HDR SIZE = DW This is the number of remaining bytes in the NT\r
+header that follow the FLAGS field.\r
+\r
+FLAGS = DW Flag bits for the image.\r
+The flag bits have the following definitons:\r
+\r
+ o 0000h __Program image.\r
+ \r
+ o 0002h __Image is executable.\r
+ If this bit isn't set, then it indicates that either errors\r
+ where detected at link time or that the image is being\r
+ incrementally linked and therefore can't be loaded.\r
+ \r
+ o 0200h __Fixed.\r
+ Indicates that if the image can't be loaded at the Image Base,\r
+ then don't load it.\r
+ \r
+ o 2000h __Library image.\r
+ \r
+LMAJOR/LMINOR = DB Linker major/minor version number.\r
+\r
+ENTRYPOINT RVA = DD Entrypoint relative virtual address.\r
+The address is relative to the Image Base. The address is the\r
+starting address for program images and the library initialization\r
+and library termination address for library images.\r
+\r
+IMAGE BASE = DD The virtual base of the image.\r
+This will be the virtual address of the first byte of the file (Dos\r
+Header). This must be a multiple of 64K.\r
+\r
+OBJECT ALIGN = DD The alignment of the objects. This must be a power\r
+of 2 between 512 and 256M inclusive. The default is 64K.\r
+\r
+FILE ALIGN = DD Alignment factor used to align image pages. The\r
+alignment factor (in bytes) used to align the base of the image pages\r
+and to determine the granularity of per-object trailing zero pad.\r
+Larger alignment factors will cost more file space; smaller alignment\r
+factors will impact demand load performance, perhaps significantly.\r
+Of the two, wasting file space is preferable. This value should be a\r
+power of 2 between 512 and 64K inclusive.\r
+\r
+OS MAJOR/MINOR = DW OS version number required to run this image.\r
+\r
+USER MAJOR/MINOR # = DW User major/minor version number.\r
+This is useful for differentiating between revisions of\r
+images/dynamic linked libraries. The values are specified at link\r
+time by the user.\r
+\r
+SUBSYS MAJOR/MINOR # = DW Subsystem major/minor version number.\r
+\r
+IMAGE SIZE = DD The virtual size (in bytes) of the image.\r
+This includes all headers. The total image size must be a multiple\r
+of Object Align.\r
+\r
+HEADER SIZE = DD Total header size.\r
+The combined size of the Dos Header, PE Header and Object Table.\r
+\r
+FILE CHECKSUM = DD Checksum for entire file. Set to 0 by the linker.\r
+\r
+SUBSYSTEM = DW NT Subsystem required to run this image.\r
+The values are:\r
+\r
+ o 0000h __Unknown\r
+ \r
+ o 0001h __Native\r
+ \r
+ o 0002h __Windows GUI\r
+ \r
+ o 0003h __Windows Character\r
+ \r
+ o 0005h __OS/2 Character\r
+ \r
+ o 0007h __Posix Character\r
+ \r
+DLL FLAGS = DW Indicates special loader requirements.\r
+This flag has the following bit values:\r
+\r
+ o 0001h __Per-Process Library Initialization.\r
+ \r
+ o 0002h __Per-Process Library Termination.\r
+ \r
+ o 0004h __Per-Thread Library Initialization.\r
+ \r
+ o 0008h __Per-Thread Library Termination.\r
+ \r
+All other bits are reserved for future use and should be set to zero.\r
+\r
+STACK RESERVE SIZE = DD Stack size needed for image.\r
+The memory is reserved, but only the STACK COMMIT SIZE is committed.\r
+The next page of the stack is a 'guarded page'. When the application\r
+hits the guarded page, the guarded page becomes valid, and the next\r
+page becomes the guarded page. This continues until the RESERVE SIZE\r
+is reached.\r
+\r
+STACK COMMIT SIZE = DD Stack commit size.\r
+\r
+HEAP RESERVE SIZE = DD Size of local heap to reserve.\r
+\r
+HEAP COMMIT SIZE = DD Amount to commit in local heap.\r
+\r
+# INTERESTING VA/SIZES = DD Indicates the size of the VA/SIZE array\r
+that follows.\r
+\r
+EXPORT TABLE RVA = DD Relative Virtual Address of the Export Table.\r
+This address is relative to the Image Base.\r
+\r
+IMPORT TABLE RVA = DD Relative Virtual Address of the Import Table.\r
+This address is relative to the Image Base.\r
+\r
+RESOURCE TABLE RVA = DD Relative Virtual Address of the Resource\r
+Table. This address is relative to the Image Base.\r
+\r
+EXCEPTION TABLE RVA = DD Relative Virtual Address of the Exception\r
+Table. This address is relative to the Image Base.\r
+\r
+SECURITY TABLE RVA = DD Relative Virtual Address of the Security\r
+Table. This address is relative to the Image Base.\r
+\r
+FIXUP TABLE RVA = DD Relative Virtual Address of the Fixup Table.\r
+This address is relative to the Image Base.\r
+\r
+DEBUG TABLE RVA = DD Relative Virtual Address of the Debug Table.\r
+This address is relative to the Image Base.\r
+\r
+IMAGE DESCRIPTION RVA = DD Relative Virtual Address of the\r
+description string specified in the module definiton file.\r
+\r
+MACHINE SPECIFIC RVA = DD Relative Virtual Address of a machine\r
+specific value. This address is relative to the Image Base.\r
+\r
+TOTAL EXPORT DATA SIZE = DD Total size of the export data.\r
+\r
+TOTAL IMPORT DATA SIZE = DD Total size of the import data.\r
+\r
+TOTAL RESOURCE DATA SIZE = DD Total size of the resource data.\r
+\r
+TOTAL EXCEPTION DATA SIZE = DD Total size of the exception data.\r
+\r
+TOTAL SECURITY DATA SIZE = DD Total size of the security data.\r
+\r
+TOTAL FIXUP DATA SIZE = DD Total size of the fixup data.\r
+\r
+TOTAL DEBUG DIRECTORIES = DD Total number of debug directories.\r
+\r
+TOTAL DESCRIPTION SIZE = DD Total size of the description data.\r
+\r
+MACHINE SPECIFIC SIZE = DD A machine specific value.\r
+\r
+\r
+\r
+3. Object Table\r
+\r
+The number of entries in the Object Table is given by the # Objects\r
+field in the PE Header. Entries in the Object Table are numbered\r
+starting from one. The object table immediately follows the PE\r
+Header. The code and data memory object entries are in the order\r
+chosen by the linker. The virtual addresses for objects must be\r
+assigned by the linker such that they are in ascending order and\r
+adjacent, and must be a multiple of Object Align in the PE header.\r
+\r
+Each Object Table entry has the following format:\r
+\r
+ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿\r
+ ³ OBJECT NAME ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ VIRTUAL SIZE ³ RVA ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ PHYSICAL SIZE ³ PHYSICAL OFFSET ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ RESERVED ³ RESERVED ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ RESERVED ³ OBJECT FLAGS ³\r
+ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ\r
+ \r
+Figure 3. Object Table\r
+\r
+OBJECT NAME = DB * 8 Object name. This is an eight-byte null-padded\r
+ASCII string representing the object name.\r
+\r
+VIRTUAL SIZE = DD Virtual memory size. The size of the object that\r
+will be allocated when the object is loaded. Any difference between\r
+PHYSICAL SIZE and VIRTUAL SIZE is zero filled.\r
+\r
+RVA = DD Relative Virtual Address. The virtual address the object is\r
+currently relocated to, relative to the Image Base. Each Object's\r
+virtual address space consumes a multiple of Object Align (power of 2\r
+between 512 and 256M inclusive. Default is 64K), and immediately\r
+follows the previous Object in the virtual address space (the virtual\r
+address space for a image must be dense).\r
+\r
+PHYSICAL SIZE = DD Physical file size of initialized data. The size\r
+of the initialized data in the file for the object. The physical\r
+size must be a multiple of the File Align field in the PE Header, and\r
+must be less than or equal to the Virtual Size.\r
+\r
+PHYSICAL OFFSET = DD Physical offset for object's first page. This\r
+offset is relative to beginning of the EXE file, and is aligned on a\r
+multiple of the File Align field in the PE Header. The offset is\r
+used as a seek value.\r
+\r
+OBJECT FLAGS = DD Flag bits for the object. The object flag bits\r
+have the following definitions:\r
+\r
+ o 000000020h __Code object.\r
+ \r
+ o 000000040h __Initialized data object.\r
+ \r
+ o 000000080h __Uninitialized data object.\r
+ \r
+ o 040000000h __Object must not be cached.\r
+ \r
+ o 080000000h __Object is not pageable.\r
+ \r
+ o 100000000h __Object is shared.\r
+ \r
+ o 200000000h __Executable object.\r
+ \r
+ o 400000000h __Readable object.\r
+ \r
+ o 800000000h __Writeable object.\r
+ \r
+All other bits are reserved for future use and should be set to zero.\r
+\r
+4. Image Pages\r
+\r
+The Image Pages section contains all initialized data for all\r
+objects. The seek offset for the first page in each object is\r
+specified in the object table and is aligned on a File Align\r
+boundary. The objects are ordered by the RVA. Every object begins\r
+on a multiple of Object Align.\r
+\r
+\r
+\r
+5. Exports\r
+\r
+A typical file layout for the export information follows:\r
+\r
+ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿\r
+ ³ DIRECTORY TABLE ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ ADDRESS TABLE ³\r
+ ³ ³\r
+ ³ ³\r
+ ³ ³\r
+ ³ ³\r
+ ³ ³\r
+ ³ ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ NAME PTR TABLE ³\r
+ ³ ³\r
+ ³ ³\r
+ ³ ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ ORDINAL TABLE ³\r
+ ³ ³\r
+ ³ ³\r
+ ³ ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ NAME STRINGS ³\r
+ ³ ³\r
+ ³ ³\r
+ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ\r
+ \r
+Figure 4. Export File Layout\r
+\r
+5.1 Export Directory Table\r
+\r
+The export information begins with the Export Directory Table which\r
+describes the remainder of the export information. The Export\r
+Directory Table contains address information that is used to resolve\r
+fixup references to the entry points within this image.\r
+\r
+ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿\r
+ ³ EXPORT FLAGS ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ TIME/DATE STAMP ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ MAJOR VERSION ³ MINOR VERSION ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ NAME RVA ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ ORDINAL BASE ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ # EAT ENTRIES ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ # NAME PTRS ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ ADDRESS TABLE RVA ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ NAME PTR TABLE RVA ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ ORDINAL TABLE RVA ³\r
+ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ\r
+ \r
+Figure 5. Export Directory Table Entry\r
+\r
+EXPORT FLAGS = DD Currently set to zero.\r
+\r
+TIME/DATE STAMP = DD Time/Date the export data was created.\r
+\r
+MAJOR/MINOR VERSION = DW A user settable major/minor version number.\r
+\r
+NAME RVA = DD Relative Virtual Address of the Dll asciiz Name.\r
+This is the address relative to the Image Base.\r
+\r
+ORDINAL BASE = DD First valid exported ordinal.\r
+This field specifies the starting ordinal number for the export\r
+address table for this image. Normally set to 1.\r
+\r
+# EAT ENTRIES = DD Indicates number of entries in the Export Address\r
+Table.\r
+\r
+# NAME PTRS = DD This indicates the number of entries in the Name Ptr\r
+Table (and parallel Ordinal Table).\r
+\r
+ADDRESS TABLE RVA = DD Relative Virtual Address of the Export Address\r
+Table.\r
+This address is relative to the Image Base.\r
+\r
+NAME TABLE RVA = DD Relative Virtual Address of the Export Name Table\r
+Pointers.\r
+This address is relative to the beginning of the Image Base. This\r
+table is an array of RVA's with # NAMES entries.\r
+\r
+ORDINAL TABLE RVA = DD Relative Virtual Address of Export Ordinals\r
+Table Entry.\r
+This address is relative to the beginning of the Image Base.\r
+\r
+5.2 Export Address Table\r
+\r
+The Export Address Table contains the address of exported entrypoints\r
+and exported data and absolutes. An ordinal number is used to index\r
+the Export Address Table. The ORDINAL BASE must be subracted from the\r
+ordinal number before indexing into this table.\r
+\r
+Export Address Table entry formats are described below:\r
+\r
+ ÚÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄ¿\r
+ ³ EXPORTED RVA ³\r
+ ÀÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÙ\r
+ \r
+Figure 6. Export Address Table Entry\r
+\r
+EXPORTED RVA = DD Export address.\r
+This field contains the relative virtual address of the exported\r
+entry (relative to the Image Base).\r
+\r
+5.3 Export Name Table Pointers\r
+\r
+The export name table pointers array contains address into the Export\r
+Name Table. The pointers are 32-bits each, and are relative to the\r
+Image Base. The pointers are ordered lexically to allow binary\r
+searches.\r
+\r
+5.4 Export Ordinal Table\r
+\r
+The Export Name Table Pointers and the Export Ordinal Table form two\r
+parallel arrays, separated to allow natural field alignment. The\r
+export ordinal table array contains the Export Address Table ordinal\r
+numbers associated with the named export referenced by corresponding\r
+Export Name Table Pointers.\r
+\r
+The ordinals are 16-bits each, and already include the Ordinal Base\r
+stored in the Export Directory Table.\r
+\r
+5.5 Export Name Table\r
+\r
+The export name table contains optional ASCII names for exported\r
+entries in the image. These tables are used with the array of Export\r
+Name Table Pointers and the array of Export Ordinals to translate a\r
+procedure name string into an ordinal number by searching for a\r
+matching name string. The ordinal number is used to locate the entry\r
+point information in the export address table.\r
+\r
+Import references by name require the Export Name Table Pointers\r
+table to be binary searched to find the matching name, then the\r
+corresponding Export Ordinal Table is known to contain the entry\r
+point ordinal number. Import references by ordinal number provide\r
+the fastest lookup since searching the name table is not required.\r
+\r
+Each name table entry has the following format:\r
+\r
+ ÚÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄ¿\r
+ ³ ASCII STRING ::: :::::::: '\0' ³\r
+ ÀÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÙ\r
+ \r
+Figure 7. Export Name Table Entry\r
+\r
+ASCII STRING = DB ASCII String.\r
+The string is case sensitive and is terminated by a null byte.\r
+\r
+\r
+\r
+6. Imports\r
+\r
+A typical file layout for the import information follows:\r
+\r
+ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿\r
+ ³ DIRECTORY TABLE ³\r
+ ³ ³\r
+ ³ ³\r
+ ³ ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ NULL DIR ENTRY ³\r
+ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ\r
+ \r
+ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿\r
+ ³ DLL1 LOOKUP TABLE ³\r
+ ³ ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ NULL ³\r
+ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ\r
+ \r
+ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿\r
+ ³ DLL2 LOOKUP TABLE ³\r
+ ³ ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ NULL ³\r
+ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ\r
+ \r
+ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿\r
+ ³ Dll3 LOOKUP TABLE ³\r
+ ³ ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ NULL ³\r
+ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ\r
+ \r
+ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿\r
+ ³ HINT-NAME TABLE ³\r
+ ³ ³\r
+ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ\r
+ \r
+ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿\r
+ ³ DLL1 ADDRESS TABLE ³\r
+ ³ ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ NULL ³\r
+ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ\r
+ \r
+ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿\r
+ ³ DLL2 ADDRESS TABLE ³\r
+ ³ ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ NULL ³\r
+ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ\r
+ \r
+ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿\r
+ ³ DLL3 ADDRESS TABLE ³\r
+ ³ ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ NULL ³\r
+ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ\r
+ \r
+Figure 8. Import File Layout\r
+\r
+6.1 Import Directory Table\r
+\r
+The import information begins with the Import Directory Table which\r
+describes the remainder of the import information. The Import\r
+Directory Table contains address information that is used to resolve\r
+fixup references to the entry points within a DLL image. The import\r
+directory table consists of an array of Import Directory Entries, one\r
+entry for each DLL this image references. The last directory entry is\r
+empty (NULL) which indicates the end of the directory table.\r
+\r
+An Import Directory Entry has the following format:\r
+\r
+ ÚÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄ¿\r
+ ³ IMPORT FLAGS ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ TIME/DATE STAMP ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ MAJOR VERSION ³ MINOR VERSION ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ NAME RVA ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ IMPORT LOOKUP TABLE RVA ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ IMPORT ADDRESS TABLE RVA ³\r
+ ÀÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÙ\r
+ \r
+Figure 9. Import Directory Entry\r
+\r
+IMPORT FLAGS = DD Currently set to zero.\r
+\r
+TIME/DATE STAMP = DD Time/Date the import data was pre-snapped or\r
+zero if not pre-snapped.\r
+\r
+MAJOR/MINOR VERSION = DW The major/minor version number of the dll\r
+being referenced.\r
+\r
+NAME RVA = DD Relative Virtual Address of the Dll asciiz Name.\r
+This is the address relative to the Image Base.\r
+\r
+IMPORT LOOKUP TABLE RVA = DD This field contains the address of the\r
+start of the import lookup table for this image. The address is\r
+relative to the beginning of the Image Base.\r
+\r
+IMPORT ADDRESS TABLE RVA = DD This field contains the address of the\r
+start of the import addresses for this image. The address is\r
+relative to the beginning of the Image Base.\r
+\r
+6.2 Import Lookup Table\r
+\r
+The Import Lookup Table is an array of ordinal or hint/name RVA's for\r
+each DLL. The last entry is empty (NULL) which indicates the end of\r
+the table.\r
+\r
+The last element is empty.\r
+\r
+ 3 0\r
+ 1\r
+ ÚÄÒÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄ¿\r
+ ³0º ORDINAL#/HINT-NAME TABLE RVA ³\r
+ ÀÄÐÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÙ\r
+ \r
+Figure 10. Import Address Table Format\r
+\r
+ORDINAL/HINT-NAME TABLE RVA = 31-bits (mask = 7fffffffh) Ordinal\r
+Number or Name Table RVA.\r
+If the import is by ordinal, this field contains a 31 bit ordinal\r
+number. If the import is by name, this field contains a 31 bit\r
+address relative to the Image Base to the Hint-Name Table.\r
+\r
+O = 1-bit (mask = 80000000h) Import by ordinal flag.\r
+\r
+ o 00000000h __Import by name.\r
+ \r
+ o 80000000h __Import by ordinal.\r
+ \r
+6.3 Hint-Name Table\r
+\r
+The Hint-Name Table format follows:\r
+\r
+ ÚÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄ¿\r
+ ³ HINT ³ ASCII STRING |||³\r
+ ÃÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄ´\r
+ ³|||||||||||||||||³ '\0' PAD ³\r
+ ÀÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÙ\r
+ \r
+ \r
+ The PAD field is optional.\r
+ \r
+Figure 11. Import Hint-Name Table\r
+\r
+HINT = DW Hint into Export Name Table Pointers.\r
+The hint value is used to index the Export Name Table Pointers array,\r
+allowing faster by-name imports. If the hint is incorrect, then a\r
+binary search is performed on the Export Name Ptr Table.\r
+\r
+ASCII STRING = DB ASCII String.\r
+The string is case sensitive and is terminated by a null byte.\r
+\r
+PAD = DB Zero pad byte.\r
+A trailing zero pad byte appears after the trailing null byte if\r
+necessary to align the next entry on an even boundary.\r
+\r
+The loader overwrites the import address table when loading the image\r
+with the 32-bit address of the import.\r
+\r
+\r
+\r
+6.4 Import Address Table\r
+\r
+The Import Address Table is an array of addresses of the imported\r
+routines for each DLL. The last entry is empty (NULL) which indicates\r
+the end of the table.\r
+\r
+7. Thread Local Storage\r
+\r
+Thread local storage is a special contiguous block of data. Each\r
+thread will gets its own block upon creation of the thread.\r
+\r
+The file layout for thread local storage follows:\r
+ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿\r
+ ³ DIRECTORY TABLE ³\r
+ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ\r
+ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿\r
+ ³ TLS DATA ³\r
+ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ\r
+ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿\r
+ ³ INDEX VARIABLE ³\r
+ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ\r
+ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿\r
+ ³ CALLBACK ADDRESSES ³\r
+ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ\r
+\r
+Figure 12. Thread Local Storage Layout\r
+\r
+7.1 Thread Local Storage Directory Table\r
+\r
+The Thread Local Storage Directory Table contains address information\r
+that is used to describe the rest of TLS.\r
+\r
+The Thread Local Storage Directory Table has the following format:\r
+\r
+ ÚÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄ¿\r
+ ³ START DATA BLOCK VA ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ END DATA BLOCK VA ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ INDEX VA ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ CALLBACK TABLE VA ³\r
+ ÀÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÙ\r
+ \r
+Figure 13. Thread Local Storage Directory Table\r
+\r
+START DATA BLOCK VA = DD Virtual Address of the start of the thread\r
+local storage data block.\r
+\r
+END DATA BLOCK VA = DD Virtual Address of the end of the thread local\r
+storage data block.\r
+\r
+INDEX VA = DD Virtual Address of the index variable used to access\r
+the thread local storage data block.\r
+\r
+CALLBACK TABLE VA = DD Virtual Address of the callback table.\r
+\r
+7.2 Thread Local Storage CallBack Table\r
+\r
+The Thread Local Storage Callbacks is an array of Virtual Address of\r
+functions to be called by the loader after thread creation and thread\r
+termination. The last entry is empty (NULL) which indicates the end\r
+of the table.\r
+\r
+The Thread Local Storage CallBack Table has the following format:\r
+\r
+ ÚÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄ¿\r
+ ³ FUNCTION1 VA ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ FUNCTION2 VA ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ NULL ³\r
+ ÀÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÙ\r
+ \r
+Figure 14. Thread Local Storage CallBack Table\r
+\r
+8. Resources\r
+\r
+Resources are indexed by a multiple level binary-sorted tree\r
+structure. The overall design can incorporate 2**31 levels, however,\r
+NT uses only three: the highest is TYPE, then NAME, then LANGUAGE.\r
+\r
+A typical file layout for the resource information follows:\r
+ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿\r
+ ³ RESOURCE DIRECTORY ³\r
+ ³ ³\r
+ ³ ³\r
+ ³ ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ RESOURCE DATA ³\r
+ ³ ³\r
+ ³ ³\r
+ ³ ³\r
+ ³ ³\r
+ ³ ³\r
+ ³ ³\r
+ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ\r
+ \r
+Figure 15. Resource File Layout\r
+\r
+\r
+The Resource directory is made up of the following tables:\r
+\r
+\r
+\r
+8.1 Resource Directory Table\r
+ÚÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄ¿\r
+³ RESOURCE FLAGS ³\r
+ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+³ TIME/DATE STAMP ³\r
+ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+³ MAJOR VERSION ³ MINOR VERSION ³\r
+ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+³ # NAME ENTRY ³ # ID ENTRY ³\r
+ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+³ RESOURCE DIR ENTRIES ³\r
+ÀÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÙ\r
+\r
+Figure 16. Resource Table Entry\r
+\r
+\r
+RESOURCE FLAGS = DD Currently set to zero.\r
+\r
+TIME/DATE STAMP = DD Time/Date the resource data was created by the\r
+resource compiler.\r
+\r
+MAJOR/MINOR VERSION = DW A user settable major/minor version number.\r
+\r
+# NAME ENTRY = DW The number of name entries.\r
+This field contains the number of entries at the beginning of the\r
+array of directory entries which have actual string names associated\r
+with them.\r
+\r
+# ID ENTRY = DW The number of ID integer entries.\r
+This field contains the number of 32-bit integer IDs as their names\r
+in the array of directory entries.\r
+\r
+The resource directory is followed by a variable length array of\r
+directory entries. # NAME ENTRY is the number of entries at the\r
+beginning of the array that have actual names associated with each\r
+entry. The entires are in ascending order, case insensitive strings.\r
+# ID ENTRY identifies the number of entries that have 32-bit integer\r
+IDs as their name. These entries are also sorted in ascending order.\r
+\r
+This structure allows fast lookup by either name or number, but for\r
+any given resource entry only one form of lookup is supported, not\r
+both. This is consistent with the syntax of the .RC file and the .RES\r
+file.\r
+\r
+\r
+\r
+The array of directory entries have the following format:\r
+ 3 0\r
+ 1\r
+ÚÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄ¿\r
+³ NAME RVA/INTEGER ID ³\r
+ÃÄÒÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+³Eº DATA ENTRY RVA/SUBDIR RVA ³\r
+ÀÄÐÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÙ\r
+\r
+Figure 17. Resource Directory Entry\r
+\r
+\r
+INTERGER ID = DD ID.\r
+This field contains a integer ID field to identify a resource.\r
+\r
+NAME RVA = DD Name RVA address.\r
+This field contains a 31-bit address relative to the beginning of the\r
+Image Base to a Resource Directory String Entry.\r
+\r
+E = 1-bit (mask 80000000h) Unescape bit.\r
+This bit is zero for unescaped Resource Data Entries.\r
+\r
+DATA RVA = 31-bits (mask 7fffffffh) Data entry address.\r
+This field contains a 31-bit address relative to the beginning of the\r
+Image Base to a Resource Data Entry.\r
+\r
+E = 1-bit (mask 80000000h) Escape bit.\r
+This bit is 1 for escaped Subdirectory Entry.\r
+\r
+DATA RVA = 31-bits (mask 7fffffffh) Directory entries.\r
+This field contains a 31-bit address relative to the beginning of the\r
+Image Base to Subdirectory Entry.\r
+\r
+\r
+\r
+Each resource directory string entry has the following format:\r
+ÚÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄ¿\r
+³ LENGTH ³ UNICODE STRING ³\r
+ÃÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄ´\r
+³ ³\r
+ÀÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÙ\r
+\r
+Figure 18. Resource Directory String Entry\r
+\r
+\r
+LENGTH = DW Length of string.\r
+\r
+UNICODE STRING = DW UNICODE String.\r
+\r
+All of these string objects are stored together after the last\r
+resource directory entry and before the first resource data object.\r
+This minimizes the impact of these variable length objects on the\r
+alignment of the fixed size directory entry objects. The length needs\r
+to be word aligned.\r
+\r
+\r
+\r
+Each Resource Data Entry has the following format:\r
+\r
+ ÚÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄ¿\r
+ ³ DATA RVA ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ SIZE ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ CODEPAGE ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ RESERVED ³\r
+ ÀÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÙ\r
+ \r
+Figure 19. Resource Data Entry\r
+\r
+\r
+\r
+DATA RVA = DD Address of Resource Data.\r
+This field contains 32-bit virtaul address of the resource data\r
+(relative to the Image Base).\r
+\r
+SIZE = DD Size of Resource Data.\r
+This field contains the size of the resource data for this resource.\r
+\r
+CODEPAGE = DD Codepage.\r
+\r
+RESERVED = DD Reserved - must be zero.\r
+\r
+Each resource data entry describes a leaf node in the resource\r
+directory tree. It contains an address which is relative to the\r
+beginning of Image Base, a size field that gives the number of bytes\r
+of data at that address, a CodePage that should be used when decoding\r
+code point values within the resource data. Typically for new\r
+applications the code page would be the unicode code page.\r
+\r
+\r
+\r
+8.2 Resource Example\r
+\r
+The following is an example for an app. which wants to use the following data\r
+as resources:\r
+\r
+ TypeId# NameId# Language ID Resource Data\r
+ 00000001 00000001 0 00010001\r
+ 00000001 00000001 1 10010001\r
+ 00000001 00000002 0 00010002\r
+ 00000001 00000003 0 00010003\r
+ 00000002 00000001 0 00020001\r
+ 00000002 00000002 0 00020002\r
+ 00000002 00000003 0 00020003\r
+ 00000002 00000004 0 00020004\r
+ 00000009 00000001 0 00090001\r
+ 00000009 00000009 0 00090009\r
+ 00000009 00000009 1 10090009\r
+ 00000009 00000009 2 20090009\r
+\r
+Then the Resource Directory in the Portable format looks like:\r
+Offset Data\r
+0000: 00000000 00000000 00000000 00030000 (3 entries in this directory)\r
+0010: 00000001 80000028 (TypeId #1, Subdirectory at offset 0x28)\r
+0018: 00000002 80000050 (TypeId #2, Subdirectory at offset 0x50)\r
+0020: 00000009 80000080 (TypeId #9, Subdirectory at offset 0x80)\r
+0028: 00000000 00000000 00000000 00030000 (3 entries in this directory)\r
+0038: 00000001 800000A0 (NameId #1, Subdirectory at offset 0xA0)\r
+0040: 00000002 00000108 (NameId #2, data desc at offset 0x108)\r
+0048: 00000003 00000118 (NameId #3, data desc at offset 0x118)\r
+0050: 00000000 00000000 00000000 00040000 (4 entries in this directory)\r
+0060: 00000001 00000128 (NameId #1, data desc at offset 0x128)\r
+0068: 00000002 00000138 (NameId #2, data desc at offset 0x138)\r
+0070: 00000003 00000148 (NameId #3, data desc at offset 0x148)\r
+0078: 00000004 00000158 (NameId #4, data desc at offset 0x158)\r
+0080: 00000000 00000000 00000000 00020000 (2 entries in this directory)\r
+0090: 00000001 00000168 (NameId #1, data desc at offset 0x168)\r
+0098: 00000009 800000C0 (NameId #9, Subdirectory at offset 0xC0)\r
+00A0: 00000000 00000000 00000000 00020000 (2 entries in this directory)\r
+00B0: 00000000 000000E8 (Language ID 0, data desc at offset 0xE8\r
+00B8: 00000001 000000F8 (Language ID 1, data desc at offset 0xF8\r
+00C0: 00000000 00000000 00000000 00030000 (3 entries in this directory)\r
+00D0: 00000001 00000178 (Language ID 0, data desc at offset 0x178\r
+00D8: 00000001 00000188 (Language ID 1, data desc at offset 0x188\r
+00E0: 00000001 00000198 (Language ID 2, data desc at offset 0x198\r
+\r
+00E8: 000001A8 (At offset 0x1A8, for TypeId #1, NameId #1, Language id #0\r
+ 00000004 (4 bytes of data)\r
+ 00000000 (codepage)\r
+ 00000000 (reserved)\r
+00F8: 000001AC (At offset 0x1AC, for TypeId #1, NameId #1, Language id #1\r
+ 00000004 (4 bytes of data)\r
+ 00000000 (codepage)\r
+ 00000000 (reserved)\r
+0108: 000001B0 (At offset 0x1B0, for TypeId #1, NameId #2,\r
+ 00000004 (4 bytes of data)\r
+ 00000000 (codepage)\r
+ 00000000 (reserved)\r
+0118: 000001B4 (At offset 0x1B4, for TypeId #1, NameId #3,\r
+ 00000004 (4 bytes of data)\r
+ 00000000 (codepage)\r
+ 00000000 (reserved)\r
+0128: 000001B8 (At offset 0x1B8, for TypeId #2, NameId #1,\r
+ 00000004 (4 bytes of data)\r
+ 00000000 (codepage)\r
+ 00000000 (reserved)\r
+0138: 000001BC (At offset 0x1BC, for TypeId #2, NameId #2,\r
+ 00000004 (4 bytes of data)\r
+ 00000000 (codepage)\r
+ 00000000 (reserved)\r
+0148: 000001C0 (At offset 0x1C0, for TypeId #2, NameId #3,\r
+ 00000004 (4 bytes of data)\r
+ 00000000 (codepage)\r
+ 00000000 (reserved)\r
+0158: 000001C4 (At offset 0x1C4, for TypeId #2, NameId #4,\r
+ 00000004 (4 bytes of data)\r
+ 00000000 (codepage)\r
+ 00000000 (reserved)\r
+0168: 000001C8 (At offset 0x1C8, for TypeId #9, NameId #1,\r
+ 00000004 (4 bytes of data)\r
+ 00000000 (codepage)\r
+ 00000000 (reserved)\r
+0178: 000001CC (At offset 0x1CC, for TypeId #9, NameId #9, Language id #0\r
+ 00000004 (4 bytes of data)\r
+ 00000000 (codepage)\r
+ 00000000 (reserved)\r
+0188: 000001D0 (At offset 0x1D0, for TypeId #9, NameId #9, Language id #1\r
+ 00000004 (4 bytes of data)\r
+ 00000000 (codepage)\r
+ 00000000 (reserved)\r
+0198: 000001D4 (At offset 0x1D4, for TypeId #9, NameId #9, Language id #2\r
+ 00000004 (4 bytes of data)\r
+ 00000000 (codepage)\r
+ 00000000 (reserved)\r
+\r
+And the data for the resources will look like:\r
+01A8: 00010001\r
+01AC: 10010001\r
+01B0: 00010002\r
+01B4: 00010003\r
+01B8: 00020001\r
+01BC: 00020002\r
+01C0: 00020003\r
+01C4: 00020004\r
+01C8: 00090001\r
+01CC: 00090009\r
+01D0: 10090009\r
+01D4: 20090009\r
+\r
+\r
+9. Fixup Table\r
+\r
+The Fixup Table contains entries for all fixups in the image. The\r
+Total Fixup Data Size in the PE Header is the number of bytes in the\r
+fixup table. The fixup table is broken into blocks of fixups. Each\r
+block represents the fixups for a 4K page.\r
+\r
+Fixups that are resolved by the linker do not need to be processed by\r
+the loader, unless the load image can't be loaded at the Image Base\r
+specified in the PE Header.\r
+\r
+9.1 Fixup Block\r
+\r
+Fixup blocks have the following format:\r
+\r
+ ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿\r
+ ³ PAGE RVA ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ BLOCK SIZE ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ TYPE/OFFSET ³ TYPE/OFFSET ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ TYPE/OFFSET ³ ... ³\r
+ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÙ\r
+ \r
+Figure 20. Fixup Block Format\r
+\r
+To apply a fixup, a delta needs to be calculated. The 32-bit delta\r
+is the difference between the preferred base, and the base where the\r
+image is actually loaded. If the image is loaded at its preferred\r
+base, the delta would be zero, and thus the fixups would not have to\r
+be applied. Each block must start on a DWORD boundary. The ABSOLUTE\r
+fixup type can be used to pad a block.\r
+\r
+PAGE RVA = DD Page RVA. The image base plus the page rva is added to\r
+each offset to create the virtual address of where the fixup needs to\r
+be applied.\r
+\r
+BLOCK SIZE = DD Number of bytes in the fixup block. This includes the\r
+PAGE RVA and SIZE fields.\r
+\r
+TYPE/OFFSET is defined as:\r
+\r
+ 1 1 0\r
+ 5 1\r
+ ÚÄÄÄÄÒÄÄÄÄÄÄÄÄÄÄÄÄ¿\r
+ ³TYPEº OFFSET ³\r
+ ÀÄÄÄÄÐÄÄÄÄÄÄÄÄÄÄÄÄÙ\r
+Figure 21. Fixup Record Format\r
+\r
+TYPE = 4-bit fixup type. This value has the following definitions:\r
+\r
+ o 0h __ABSOLUTE. This is a NOP. The fixup is skipped.\r
+ \r
+ o 1h __HIGH. Add the high 16-bits of the delta to the 16-bit field\r
+ at Offset. The 16-bit field represents the high value of a 32-\r
+ bit word.\r
+ \r
+ o 2h __LOW. Add the low 16-bits of the delta to the 16-bit field\r
+ at Offset. The 16-bit field represents the low half value of a\r
+ 32-bit word. This fixup will only be emitted for a RISC machine\r
+ when the image Object Align isn't the default of 64K.\r
+ \r
+ o 3h __HIGHLOW. Apply the 32-bit delta to the 32-bit field at\r
+ Offset.\r
+ \r
+ o 4h __HIGHADJUST. This fixup requires a full 32-bit value. The\r
+ high 16-bits is located at Offset, and the low 16-bits is\r
+ located in the next Offset array element (this array element is\r
+ included in the SIZE field). The two need to be combined into a\r
+ signed variable. Add the 32-bit delta. Then add 0x8000 and\r
+ store the high 16-bits of the signed variable to the 16-bit\r
+ field at Offset.\r
+ \r
+ o 5h __MIPSJMPADDR.\r
+ \r
+All other values are reserved.\r
+\r
+\r
+\r
+10. Debug Information\r
+\r
+The debug information is defined by the debugger and is not\r
+controlled by the portable EXE format or linker. The only data\r
+defined by the portable EXE format is the Debug Directory Table.\r
+\r
+10.1 Debug Directory\r
+\r
+The debug directory table consists of one or more entries that have\r
+the following format:\r
+\r
+ ÚÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄ¿\r
+ ³ DEBUG FLAGS ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ TIME/DATE STAMP ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ MAJOR VERSION ³ MINOR VERSION ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ DEBUG TYPE ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ DATA SIZE ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ DATA RVA ³\r
+ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´\r
+ ³ DATA SEEK ³\r
+ ÀÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÙ\r
+ \r
+Figure 22. Debug Directory Entry\r
+\r
+DEBUG FLAGS = DD Set to zero for now.\r
+\r
+TIME/DATE STAMP = DD Time/Date the debug data was created.\r
+\r
+MAJOR/MINOR VERSION = DW Version stamp.\r
+This stamp can be used to determine the version of the debug data.\r
+\r
+DEBUG TYPE = DD Format type.\r
+To support multiple debuggers, this field determines the format of\r
+the debug information. This value has the following definitions:\r
+\r
+ o 0001h __Image contains COFF symbolics.\r
+ \r
+ o 0001h __Image contains CodeView symbolics.\r
+ \r
+ o 0001h __Image contains FPO symbolics.\r
+ \r
+DATA SIZE = DD The number of bytes in the debug data. This is the\r
+size of the actual debug data and does not include the debug\r
+directory.\r
+\r
+DATA RVA = DD The relative virtual address of the debug data. This\r
+address is relative to the beginning of the Image Base.\r
+\r
+DATA SEEK = DD The seek value from the beginning of the file to the\r
+debug data.\r
+\r
+If the image contains more than one type of debug information, then\r
+the next debug directory will immediately follow the first debug\r
+directory.\r
--- /dev/null
+This contains documentation describing the internals of the various kernel
+subsystems and a few other useful bits of information.
--- /dev/null
+** Introduction
+
+This attempts to document the ReactOS irq handling. As of v0.0.8 this has
+changed to be more nt like, I will attempt to summarize the new
+implementation for those unavailable with nt device driver writing. Note,
+ReactOS doesn't have an exact implementation but the omissions are, except
+where noted, not user visible.
+
+** Steps in grabbing an irq vector
+
+* Call HalConnectInterrupt
+
+PROTOTYPE:
+
+ULONG HalGetInterruptVector(INTERFACE_TYPE InterfaceType,
+ ULONG BusNumber,
+ ULONG BusInterruptLevel,
+ ULONG BusInterruptVector,
+ OUT PKIRQL Irql,
+ OUT PKAFFINITY Affinity)
+
+PURPOSE:
+
+Translates a bus dependant interrupt vector to a system vector
+
+ARGUMENTS:
+
+ InterfaceType = Type of bus to which the device to receive interrupts
+ from is connected to. Currently only 'Internal' is
+ recognized
+ BusNumber = Number of the bus the device is connected to
+ (currently ignored)
+ BusInterruptLevel = Bus specific interrupt level (currently ignored)
+ BusInterruptVector = Bus specific vector. Currently this is the same
+ as the normal vector (09 is the keyboard vector
+ for example)
+ Irql = On return contains the DIRQL for the vector
+ Affinity = On return contains the affinity mask for the vector
+ (currently unimplemented)
+
+RETURNS:
+ The system mapped vector
+
+* Call IoConnectInterrupt
+
+PROTOTYPE:
+
+NTSTATUS IoConnectInterrupt(OUT PKINTERRUPT* InterruptObject,
+ PKSERVICE_ROUTINE ServiceRoutine,
+ PVOID ServiceContext,
+ PKSPIN_LOCK SpinLock,
+ ULONG Vector,
+ KIRQL Irql,
+ KIRQL SynchronizeIrql,
+ KINTERRUPT_MODE InterruptMode,
+ BOOLEAN ShareVector,
+ KAFFINITY ProcessorEnableMask,
+ BOOLEAN FloatingSave)
+
+PURPOSE:
+
+Connect a service routine to an interrupt vector
+
+ARGUMENTS:
+
+ InterruptObject = Points to an object describes the interrupt on
+ return
+ ServiceRoutine = Function to be called when the device interrupts
+ ServiceContext = Parameters to be passed to the service routine
+ SpinLock = Should be NULL
+ Vector = System mapped vector returned from HalGetInterruptVector
+ Irql = DIRQL returned from HalGetInterruptVector
+ SynchronizeIrql = Should be the same as Irql
+ InterruptMode = Device interrupt type (currently ignored)
+ ShareVector = True if the interrupt vector can shared
+ ProcessorEnableMask = Currently ignored
+ FloatingSave = Should be false
+
+RETURNS: Status
+
+* Sample code for snarfing an interrupt vector
+
+
+ void grab_my_irq()
+ {
+ ULONG MappedIrq;
+ KIRQL Dirql;
+ KAFFINITY Affinity;
+ PKINTERRUPT IrqObject;
+
+ MappedIrq = HalGetInterruptVector(Internal,
+ 0,
+ 0,
+ MY_VECTOR,
+ &Dirql,
+ &Affinity);
+ IoConnectInterrupt(&IrqObject,
+ my_irq_service_routine,
+ my_context,
+ NULL,
+ MappedIrq,
+ Dirql,
+ Dirql,
+ 0,
+ FALSE, // Not sharable
+ Affinity,
+ FALSE);
+ }
+
+** Designing an interrupt service routine
+
+An interrupt service routine should have the following prototype
+
+ BOOLEAN my_irq_service_routine(PKINTERRUPT Interrupt,
+ PVOID ServiceContext);
+
+ARGUMENTS:
+
+ Interrupt = The same as the object returned from the
+ IoConnectInterrupt
+ ServiceContext = A user defined parameters
+ (passed to IoConnectInterrupt)
+
+RETURNS:
+
+ True if it handled the interrupt, false if it should be passed onto
+ other devices sharing the same vector
+
+NOTES:
+
+ While an isr is executing all devices of a lower or equal priority
+ can't interrupt. For this reason it is important that an isr
+ should complete in a short an interval as possible. The set of
+ routines an isr can call is also restricted.
+
--- /dev/null
+This document describes the state of a uniprocessor PC at each of the IRQ
+levels supported by the ReactOS kernel
+
+PASSIVE_LEVEL: IF bit clear in the processor flags
+ All irqs umasked at the PIC
+
+APC_LEVEL: Unknown
+WAKE_LEVEL: Unknown
+
+DISPATCH_LEVEL: IF bit clear in the processor flags
+ All irqs umasked at the PIC
+ Thread dispatching disabled
+
+DIRQL (Device specific IRQ level):
+ IF bit clear in the processor flags
+ Device's irq and all lower priority irqs masked at the PIC
+ Thread dispatching disabled
+
+HIGH_LEVEL: IF bit set in the processor flags
+ All irqs masked at the PIC
+ Thread dispatching disabled
--- /dev/null
+** Introduction
+
+This is (an incomplete) guide to writing device drivers (and other kernel
+extensions) for ReactOS.
+
+** Setting up the build environment
+
+Create a new subdirectory in the modules directory and copy one of the
+existing module makefiles into it. Customize the makefile to compile the
+source files for the module. Note: generally it is not necessary to specify
+the compiler or compiler flags to use.
+
+** Initializing a module
+
+On loading the kernel will call the module function
+
+PROTOTYPE:
+
+ NTSTATUS ModuleEntry(PDRIVER_OBJECT DriverObject,
+ PUNICODE_STRING RegistryPath)
+
+PURPOSE:
+
+ Initializing the module
+
+ARGUMENTS:
+
+ DriverObject = Pointer to an object describing the driver
+ RegistryPath = Currently NULL
+
+RETURNS:
+
+ STATUS_SUCCESS = If the module initialized successfully
--- /dev/null
+* Kernel things implemented [exceptions in brackets]
+
+Spinlocks [Uniprocessor only]
+IRQ levels [Not APC_LEVEL or WAKE_LEVEL, uniprocessor only]
+ISRs [Partial, uniprocessor only]
+Timers [Untested]
+DPCs [Untested]
+Objects [Partial]
+Namespace [Partial]
+Handle tables [One process only]
+Threads [Some initial work]
+RTL list functions [All except sequenced lists]
+Zones [Untested]
+Memory pool [Working but semantics partially incompatiable]
+Device objects [Some but no support for layering]
+IRP [Partial]
+Memory sections [Partial, no file mappings]
+PCI interface [Probes but no support]
+CreateFile API [Device only]
+ReadFile/WriteFile API [Device only]
+MDL functions [Untested]
+
+* Kernel things unimplemented (partial)
+
+Add support for source level debugging to Bochs
+Support for remote debugging
+Process managment
+Dispatcher objects (Mutex, Semaphore etc)
+Investigate user and kernel mode APCs
+Asynchronous I/O
+Optimization
--- /dev/null
+subject wstring.zip
+author Boudewijn Dekker
+date 06-06-98
+
+
+I wrote some inline wide character string functions. It are modified version
+of the ones in string.h. I added four more function nl stricmp, strnicmp,
+wcsicmp, and wcsnicmp. These are the case insensitive variants of
+strcmp, strncmp and wcscmp, wcsncmp. I tested all the functions but I
+would urge anyone to tested again. I removed an extern specifier
+__wcstok and strtok cause I it caused an compilation error when
+using strtok or wcstok. Please could someone see if this correct.
+I also used these string functions in lstring api functions.
+
+
+Boudewijn Dekker
\ No newline at end of file
--- /dev/null
+/*
+ ASCIIFunctions.h
+
+ Declarations for all the Win32 ASCII Functions
+
+ Copyright (C) 1996 Free Software Foundation, Inc.
+
+ Author: Scott Christley <scottc@net-community.com>
+
+ This file is part of the Windows32 API Library.
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 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
+ Library General Public License for more details.
+
+ If you are interested in a warranty or support for this source code,
+ contact Scott Christley <scottc@net-community.com> for more information.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this library; see the file COPYING.LIB.
+ If not, write to the Free Software Foundation,
+ 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+*/
+
+#ifndef _GNU_H_WINDOWS32_ASCIIFUNCTIONS
+#define _GNU_H_WINDOWS32_ASCIIFUNCTIONS
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+WINBOOL
+STDCALL
+GetBinaryTypeA(
+ LPCSTR lpApplicationName,
+ LPDWORD lpBinaryType
+ );
+
+DWORD
+STDCALL
+GetShortPathNameA(
+ LPCSTR lpszLongPath,
+ LPSTR lpszShortPath,
+ DWORD cchBuffer
+ );
+
+LPSTR
+STDCALL
+GetEnvironmentStringsA(
+ VOID
+ );
+
+WINBOOL
+STDCALL
+FreeEnvironmentStringsA(
+ LPSTR
+ );
+
+DWORD
+STDCALL
+FormatMessageA(
+ DWORD dwFlags,
+ LPCVOID lpSource,
+ DWORD dwMessageId,
+ DWORD dwLanguageId,
+ LPSTR lpBuffer,
+ DWORD nSize,
+ va_list *Arguments
+ );
+
+HANDLE
+STDCALL
+CreateMailslotA(
+ LPCSTR lpName,
+ DWORD nMaxMessageSize,
+ DWORD lReadTimeout,
+ LPSECURITY_ATTRIBUTES lpSecurityAttributes
+ );
+
+int
+STDCALL
+lstrcmpA(
+ LPCSTR lpString1,
+ LPCSTR lpString2
+ );
+
+int
+STDCALL
+lstrcmpiA(
+ LPCSTR lpString1,
+ LPCSTR lpString2
+ );
+
+LPSTR
+STDCALL
+lstrcpynA(
+ LPSTR lpString1,
+ LPCSTR lpString2,
+ int iMaxLength
+ );
+
+LPSTR
+STDCALL
+lstrcpyA(
+ LPSTR lpString1,
+ LPCSTR lpString2
+ );
+
+LPSTR
+STDCALL
+lstrcatA(
+ LPSTR lpString1,
+ LPCSTR lpString2
+ );
+
+int
+STDCALL
+lstrlenA(
+ LPCSTR lpString
+ );
+
+HANDLE
+STDCALL
+CreateMutexA(
+ LPSECURITY_ATTRIBUTES lpMutexAttributes,
+ WINBOOL bInitialOwner,
+ LPCSTR lpName
+ );
+
+HANDLE
+STDCALL
+OpenMutexA(
+ DWORD dwDesiredAccess,
+ WINBOOL bInheritHandle,
+ LPCSTR lpName
+ );
+
+HANDLE
+STDCALL
+CreateEventA(
+ LPSECURITY_ATTRIBUTES lpEventAttributes,
+ WINBOOL bManualReset,
+ WINBOOL bInitialState,
+ LPCSTR lpName
+ );
+
+HANDLE
+STDCALL
+OpenEventA(
+ DWORD dwDesiredAccess,
+ WINBOOL bInheritHandle,
+ LPCSTR lpName
+ );
+
+HANDLE
+STDCALL
+CreateSemaphoreA(
+ LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,
+ LONG lInitialCount,
+ LONG lMaximumCount,
+ LPCSTR lpName
+ );
+
+HANDLE
+STDCALL
+OpenSemaphoreA(
+ DWORD dwDesiredAccess,
+ WINBOOL bInheritHandle,
+ LPCSTR lpName
+ );
+
+HANDLE
+STDCALL
+CreateFileMappingA(
+ HANDLE hFile,
+ LPSECURITY_ATTRIBUTES lpFileMappingAttributes,
+ DWORD flProtect,
+ DWORD dwMaximumSizeHigh,
+ DWORD dwMaximumSizeLow,
+ LPCSTR lpName
+ );
+
+HANDLE
+STDCALL
+OpenFileMappingA(
+ DWORD dwDesiredAccess,
+ WINBOOL bInheritHandle,
+ LPCSTR lpName
+ );
+
+DWORD
+STDCALL
+GetLogicalDriveStringsA(
+ DWORD nBufferLength,
+ LPSTR lpBuffer
+ );
+
+HINSTANCE
+STDCALL
+LoadLibraryA(
+ LPCSTR lpLibFileName
+ );
+
+HINSTANCE
+STDCALL
+LoadLibraryExA(
+ LPCSTR lpLibFileName,
+ HANDLE hFile,
+ DWORD dwFlags
+ );
+
+DWORD
+STDCALL
+GetModuleFileNameA(
+ HINSTANCE hModule,
+ LPSTR lpFilename,
+ DWORD nSize
+ );
+
+HMODULE
+STDCALL
+GetModuleHandleA(
+ LPCSTR lpModuleName
+ );
+
+VOID
+STDCALL
+FatalAppExitA(
+ UINT uAction,
+ LPCSTR lpMessageText
+ );
+
+LPSTR
+STDCALL
+GetCommandLineA(
+ VOID
+ );
+
+DWORD
+STDCALL
+GetEnvironmentVariableA(
+ LPCSTR lpName,
+ LPSTR lpBuffer,
+ DWORD nSize
+ );
+
+WINBOOL
+STDCALL
+SetEnvironmentVariableA(
+ LPCSTR lpName,
+ LPCSTR lpValue
+ );
+
+DWORD
+STDCALL
+ExpandEnvironmentStringsA(
+ LPCSTR lpSrc,
+ LPSTR lpDst,
+ DWORD nSize
+ );
+
+VOID
+STDCALL
+OutputDebugStringA(
+ LPCSTR lpOutputString
+ );
+
+HRSRC
+STDCALL
+FindResourceA(
+ HINSTANCE hModule,
+ LPCSTR lpName,
+ LPCSTR lpType
+ );
+
+HRSRC
+STDCALL
+FindResourceExA(
+ HINSTANCE hModule,
+ LPCSTR lpType,
+ LPCSTR lpName,
+ WORD wLanguage
+ );
+
+WINBOOL
+STDCALL
+EnumResourceTypesA(
+ HINSTANCE hModule,
+ ENUMRESTYPEPROC lpEnumFunc,
+ LONG lParam
+ );
+
+WINBOOL
+STDCALL
+EnumResourceNamesA(
+ HINSTANCE hModule,
+ LPCSTR lpType,
+ ENUMRESNAMEPROC lpEnumFunc,
+ LONG lParam
+ );
+
+WINBOOL
+STDCALL
+EnumResourceLanguagesA(
+ HINSTANCE hModule,
+ LPCSTR lpType,
+ LPCSTR lpName,
+ ENUMRESLANGPROC lpEnumFunc,
+ LONG lParam
+ );
+
+HANDLE
+STDCALL
+BeginUpdateResourceA(
+ LPCSTR pFileName,
+ WINBOOL bDeleteExistingResources
+ );
+
+WINBOOL
+STDCALL
+UpdateResourceA(
+ HANDLE hUpdate,
+ LPCSTR lpType,
+ LPCSTR lpName,
+ WORD wLanguage,
+ LPVOID lpData,
+ DWORD cbData
+ );
+
+WINBOOL
+STDCALL
+EndUpdateResourceA(
+ HANDLE hUpdate,
+ WINBOOL fDiscard
+ );
+
+ATOM
+STDCALL
+GlobalAddAtomA(
+ LPCSTR lpString
+ );
+
+ATOM
+STDCALL
+GlobalFindAtomA(
+ LPCSTR lpString
+ );
+
+UINT
+STDCALL
+GlobalGetAtomNameA(
+ ATOM nAtom,
+ LPSTR lpBuffer,
+ int nSize
+ );
+
+ATOM
+STDCALL
+AddAtomA(
+ LPCSTR lpString
+ );
+
+ATOM
+STDCALL
+FindAtomA(
+ LPCSTR lpString
+ );
+
+UINT
+STDCALL
+GetAtomNameA(
+ ATOM nAtom,
+ LPSTR lpBuffer,
+ int nSize
+ );
+
+UINT
+STDCALL
+GetProfileIntA(
+ LPCSTR lpAppName,
+ LPCSTR lpKeyName,
+ INT nDefault
+ );
+
+DWORD
+STDCALL
+GetProfileStringA(
+ LPCSTR lpAppName,
+ LPCSTR lpKeyName,
+ LPCSTR lpDefault,
+ LPSTR lpReturnedString,
+ DWORD nSize
+ );
+
+WINBOOL
+STDCALL
+WriteProfileStringA(
+ LPCSTR lpAppName,
+ LPCSTR lpKeyName,
+ LPCSTR lpString
+ );
+
+DWORD
+STDCALL
+GetProfileSectionA(
+ LPCSTR lpAppName,
+ LPSTR lpReturnedString,
+ DWORD nSize
+ );
+
+WINBOOL
+STDCALL
+WriteProfileSectionA(
+ LPCSTR lpAppName,
+ LPCSTR lpString
+ );
+
+UINT
+STDCALL
+GetPrivateProfileIntA(
+ LPCSTR lpAppName,
+ LPCSTR lpKeyName,
+ INT nDefault,
+ LPCSTR lpFileName
+ );
+
+DWORD
+STDCALL
+GetPrivateProfileStringA(
+ LPCSTR lpAppName,
+ LPCSTR lpKeyName,
+ LPCSTR lpDefault,
+ LPSTR lpReturnedString,
+ DWORD nSize,
+ LPCSTR lpFileName
+ );
+
+WINBOOL
+STDCALL
+WritePrivateProfileStringA(
+ LPCSTR lpAppName,
+ LPCSTR lpKeyName,
+ LPCSTR lpString,
+ LPCSTR lpFileName
+ );
+
+DWORD
+STDCALL
+GetPrivateProfileSectionA(
+ LPCSTR lpAppName,
+ LPSTR lpReturnedString,
+ DWORD nSize,
+ LPCSTR lpFileName
+ );
+
+WINBOOL
+STDCALL
+WritePrivateProfileSectionA(
+ LPCSTR lpAppName,
+ LPCSTR lpString,
+ LPCSTR lpFileName
+ );
+
+UINT
+STDCALL
+GetDriveTypeA(
+ LPCSTR lpRootPathName
+ );
+
+UINT
+STDCALL
+GetSystemDirectoryA(
+ LPSTR lpBuffer,
+ UINT uSize
+ );
+
+DWORD
+STDCALL
+GetTempPathA(
+ DWORD nBufferLength,
+ LPSTR lpBuffer
+ );
+
+UINT
+STDCALL
+GetTempFileNameA(
+ LPCSTR lpPathName,
+ LPCSTR lpPrefixString,
+ UINT uUnique,
+ LPSTR lpTempFileName
+ );
+
+UINT
+STDCALL
+GetWindowsDirectoryA(
+ LPSTR lpBuffer,
+ UINT uSize
+ );
+
+WINBOOL
+STDCALL
+SetCurrentDirectoryA(
+ LPCSTR lpPathName
+ );
+
+DWORD
+STDCALL
+GetCurrentDirectoryA(
+ DWORD nBufferLength,
+ LPSTR lpBuffer
+ );
+
+WINBOOL
+STDCALL
+GetDiskFreeSpaceA(
+ LPCSTR lpRootPathName,
+ LPDWORD lpSectorsPerCluster,
+ LPDWORD lpBytesPerSector,
+ LPDWORD lpNumberOfFreeClusters,
+ LPDWORD lpTotalNumberOfClusters
+ );
+
+WINBOOL
+STDCALL
+CreateDirectoryA(
+ LPCSTR lpPathName,
+ LPSECURITY_ATTRIBUTES lpSecurityAttributes
+ );
+
+WINBOOL
+STDCALL
+CreateDirectoryExA(
+ LPCSTR lpTemplateDirectory,
+ LPCSTR lpNewDirectory,
+ LPSECURITY_ATTRIBUTES lpSecurityAttributes
+ );
+
+WINBOOL
+STDCALL
+RemoveDirectoryA(
+ LPCSTR lpPathName
+ );
+
+DWORD
+STDCALL
+GetFullPathNameA(
+ LPCSTR lpFileName,
+ DWORD nBufferLength,
+ LPSTR lpBuffer,
+ LPSTR *lpFilePart
+ );
+
+WINBOOL
+STDCALL
+DefineDosDeviceA(
+ DWORD dwFlags,
+ LPCSTR lpDeviceName,
+ LPCSTR lpTargetPath
+ );
+
+DWORD
+STDCALL
+QueryDosDeviceA(
+ LPCSTR lpDeviceName,
+ LPSTR lpTargetPath,
+ DWORD ucchMax
+ );
+
+HANDLE
+STDCALL
+CreateFileA(
+ LPCSTR lpFileName,
+ DWORD dwDesiredAccess,
+ DWORD dwShareMode,
+ LPSECURITY_ATTRIBUTES lpSecurityAttributes,
+ DWORD dwCreationDisposition,
+ DWORD dwFlagsAndAttributes,
+ HANDLE hTemplateFile
+ );
+
+WINBOOL
+STDCALL
+SetFileAttributesA(
+ LPCSTR lpFileName,
+ DWORD dwFileAttributes
+ );
+
+DWORD
+STDCALL
+GetFileAttributesA(
+ LPCSTR lpFileName
+ );
+
+DWORD
+STDCALL
+GetCompressedFileSizeA(
+ LPCSTR lpFileName,
+ LPDWORD lpFileSizeHigh
+ );
+
+WINBOOL
+STDCALL
+DeleteFileA(
+ LPCSTR lpFileName
+ );
+
+DWORD
+STDCALL
+SearchPathA(
+ LPCSTR lpPath,
+ LPCSTR lpFileName,
+ LPCSTR lpExtension,
+ DWORD nBufferLength,
+ LPSTR lpBuffer,
+ LPSTR *lpFilePart
+ );
+
+WINBOOL
+STDCALL
+CopyFileA(
+ LPCSTR lpExistingFileName,
+ LPCSTR lpNewFileName,
+ WINBOOL bFailIfExists
+ );
+
+WINBOOL
+STDCALL
+MoveFileA(
+ LPCSTR lpExistingFileName,
+ LPCSTR lpNewFileName
+ );
+
+WINBOOL
+STDCALL
+MoveFileExA(
+ LPCSTR lpExistingFileName,
+ LPCSTR lpNewFileName,
+ DWORD dwFlags
+ );
+
+HANDLE
+STDCALL
+CreateNamedPipeA(
+ LPCSTR lpName,
+ DWORD dwOpenMode,
+ DWORD dwPipeMode,
+ DWORD nMaxInstances,
+ DWORD nOutBufferSize,
+ DWORD nInBufferSize,
+ DWORD nDefaultTimeOut,
+ LPSECURITY_ATTRIBUTES lpSecurityAttributes
+ );
+
+WINBOOL
+STDCALL
+GetNamedPipeHandleStateA(
+ HANDLE hNamedPipe,
+ LPDWORD lpState,
+ LPDWORD lpCurInstances,
+ LPDWORD lpMaxCollectionCount,
+ LPDWORD lpCollectDataTimeout,
+ LPSTR lpUserName,
+ DWORD nMaxUserNameSize
+ );
+
+WINBOOL
+STDCALL
+CallNamedPipeA(
+ LPCSTR lpNamedPipeName,
+ LPVOID lpInBuffer,
+ DWORD nInBufferSize,
+ LPVOID lpOutBuffer,
+ DWORD nOutBufferSize,
+ LPDWORD lpBytesRead,
+ DWORD nTimeOut
+ );
+
+WINBOOL
+STDCALL
+WaitNamedPipeA(
+ LPCSTR lpNamedPipeName,
+ DWORD nTimeOut
+ );
+
+WINBOOL
+STDCALL
+SetVolumeLabelA(
+ LPCSTR lpRootPathName,
+ LPCSTR lpVolumeName
+ );
+
+WINBOOL
+STDCALL
+GetVolumeInformationA(
+ LPCSTR lpRootPathName,
+ LPSTR lpVolumeNameBuffer,
+ DWORD nVolumeNameSize,
+ LPDWORD lpVolumeSerialNumber,
+ LPDWORD lpMaximumComponentLength,
+ LPDWORD lpFileSystemFlags,
+ LPSTR lpFileSystemNameBuffer,
+ DWORD nFileSystemNameSize
+ );
+
+WINBOOL
+STDCALL
+ClearEventLogA (
+ HANDLE hEventLog,
+ LPCSTR lpBackupFileName
+ );
+
+WINBOOL
+STDCALL
+BackupEventLogA (
+ HANDLE hEventLog,
+ LPCSTR lpBackupFileName
+ );
+
+HANDLE
+STDCALL
+OpenEventLogA (
+ LPCSTR lpUNCServerName,
+ LPCSTR lpSourceName
+ );
+
+HANDLE
+STDCALL
+RegisterEventSourceA (
+ LPCSTR lpUNCServerName,
+ LPCSTR lpSourceName
+ );
+
+HANDLE
+STDCALL
+OpenBackupEventLogA (
+ LPCSTR lpUNCServerName,
+ LPCSTR lpFileName
+ );
+
+WINBOOL
+STDCALL
+ReadEventLogA (
+ HANDLE hEventLog,
+ DWORD dwReadFlags,
+ DWORD dwRecordOffset,
+ LPVOID lpBuffer,
+ DWORD nNumberOfBytesToRead,
+ DWORD *pnBytesRead,
+ DWORD *pnMinNumberOfBytesNeeded
+ );
+
+WINBOOL
+STDCALL
+ReportEventA (
+ HANDLE hEventLog,
+ WORD wType,
+ WORD wCategory,
+ DWORD dwEventID,
+ PSID lpUserSid,
+ WORD wNumStrings,
+ DWORD dwDataSize,
+ LPCSTR *lpStrings,
+ LPVOID lpRawData
+ );
+
+WINBOOL
+STDCALL
+AccessCheckAndAuditAlarmA (
+ LPCSTR SubsystemName,
+ LPVOID HandleId,
+ LPSTR ObjectTypeName,
+ LPSTR ObjectName,
+ PSECURITY_DESCRIPTOR SecurityDescriptor,
+ DWORD DesiredAccess,
+ PGENERIC_MAPPING GenericMapping,
+ WINBOOL ObjectCreation,
+ LPDWORD GrantedAccess,
+ LPBOOL AccessStatus,
+ LPBOOL pfGenerateOnClose
+ );
+
+WINBOOL
+STDCALL
+ObjectOpenAuditAlarmA (
+ LPCSTR SubsystemName,
+ LPVOID HandleId,
+ LPSTR ObjectTypeName,
+ LPSTR ObjectName,
+ PSECURITY_DESCRIPTOR pSecurityDescriptor,
+ HANDLE ClientToken,
+ DWORD DesiredAccess,
+ DWORD GrantedAccess,
+ PPRIVILEGE_SET Privileges,
+ WINBOOL ObjectCreation,
+ WINBOOL AccessGranted,
+ LPBOOL GenerateOnClose
+ );
+
+WINBOOL
+STDCALL
+ObjectPrivilegeAuditAlarmA (
+ LPCSTR SubsystemName,
+ LPVOID HandleId,
+ HANDLE ClientToken,
+ DWORD DesiredAccess,
+ PPRIVILEGE_SET Privileges,
+ WINBOOL AccessGranted
+ );
+
+WINBOOL
+STDCALL
+ObjectCloseAuditAlarmA (
+ LPCSTR SubsystemName,
+ LPVOID HandleId,
+ WINBOOL GenerateOnClose
+ );
+
+WINBOOL
+STDCALL
+PrivilegedServiceAuditAlarmA (
+ LPCSTR SubsystemName,
+ LPCSTR ServiceName,
+ HANDLE ClientToken,
+ PPRIVILEGE_SET Privileges,
+ WINBOOL AccessGranted
+ );
+
+WINBOOL
+STDCALL
+SetFileSecurityA (
+ LPCSTR lpFileName,
+ SECURITY_INFORMATION SecurityInformation,
+ PSECURITY_DESCRIPTOR pSecurityDescriptor
+ );
+
+WINBOOL
+STDCALL
+GetFileSecurityA (
+ LPCSTR lpFileName,
+ SECURITY_INFORMATION RequestedInformation,
+ PSECURITY_DESCRIPTOR pSecurityDescriptor,
+ DWORD nLength,
+ LPDWORD lpnLengthNeeded
+ );
+
+HANDLE
+STDCALL
+FindFirstChangeNotificationA(
+ LPCSTR lpPathName,
+ WINBOOL bWatchSubtree,
+ DWORD dwNotifyFilter
+ );
+
+WINBOOL
+STDCALL
+IsBadStringPtrA(
+ LPCSTR lpsz,
+ UINT ucchMax
+ );
+
+WINBOOL
+STDCALL
+LookupAccountSidA(
+ LPCSTR lpSystemName,
+ PSID Sid,
+ LPSTR Name,
+ LPDWORD cbName,
+ LPSTR ReferencedDomainName,
+ LPDWORD cbReferencedDomainName,
+ PSID_NAME_USE peUse
+ );
+
+WINBOOL
+STDCALL
+LookupAccountNameA(
+ LPCSTR lpSystemName,
+ LPCSTR lpAccountName,
+ PSID Sid,
+ LPDWORD cbSid,
+ LPSTR ReferencedDomainName,
+ LPDWORD cbReferencedDomainName,
+ PSID_NAME_USE peUse
+ );
+
+WINBOOL
+STDCALL
+LookupPrivilegeValueA(
+ LPCSTR lpSystemName,
+ LPCSTR lpName,
+ PLUID lpLuid
+ );
+
+WINBOOL
+STDCALL
+LookupPrivilegeNameA(
+ LPCSTR lpSystemName,
+ PLUID lpLuid,
+ LPSTR lpName,
+ LPDWORD cbName
+ );
+
+WINBOOL
+STDCALL
+LookupPrivilegeDisplayNameA(
+ LPCSTR lpSystemName,
+ LPCSTR lpName,
+ LPSTR lpDisplayName,
+ LPDWORD cbDisplayName,
+ LPDWORD lpLanguageId
+ );
+
+WINBOOL
+STDCALL
+BuildCommDCBA(
+ LPCSTR lpDef,
+ LPDCB lpDCB
+ );
+
+WINBOOL
+STDCALL
+BuildCommDCBAndTimeoutsA(
+ LPCSTR lpDef,
+ LPDCB lpDCB,
+ LPCOMMTIMEOUTS lpCommTimeouts
+ );
+
+WINBOOL
+STDCALL
+CommConfigDialogA(
+ LPCSTR lpszName,
+ HWND hWnd,
+ LPCOMMCONFIG lpCC
+ );
+
+WINBOOL
+STDCALL
+GetDefaultCommConfigA(
+ LPCSTR lpszName,
+ LPCOMMCONFIG lpCC,
+ LPDWORD lpdwSize
+ );
+
+WINBOOL
+STDCALL
+SetDefaultCommConfigA(
+ LPCSTR lpszName,
+ LPCOMMCONFIG lpCC,
+ DWORD dwSize
+ );
+
+WINBOOL
+STDCALL
+GetComputerNameA (
+ LPSTR lpBuffer,
+ LPDWORD nSize
+ );
+
+WINBOOL
+STDCALL
+SetComputerNameA (
+ LPCSTR lpComputerName
+ );
+
+WINBOOL
+STDCALL
+GetUserNameA (
+ LPSTR lpBuffer,
+ LPDWORD nSize
+ );
+
+int
+STDCALL
+wvsprintfA(
+ LPSTR,
+ LPCSTR,
+ va_list arglist);
+
+int
+CDECL
+wsprintfA(LPSTR, LPCSTR, ...);
+
+HKL
+STDCALL
+LoadKeyboardLayoutA(
+ LPCSTR pwszKLID,
+ UINT Flags);
+
+WINBOOL
+STDCALL
+GetKeyboardLayoutNameA(
+ LPSTR pwszKLID);
+
+HDESK
+STDCALL
+CreateDesktopA(
+ LPSTR lpszDesktop,
+ LPSTR lpszDevice,
+ LPDEVMODE pDevmode,
+ DWORD dwFlags,
+ DWORD dwDesiredAccess,
+ LPSECURITY_ATTRIBUTES lpsa);
+
+HDESK
+STDCALL
+OpenDesktopA(
+ LPSTR lpszDesktop,
+ DWORD dwFlags,
+ WINBOOL fInherit,
+ DWORD dwDesiredAccess);
+
+WINBOOL
+STDCALL
+EnumDesktopsA(
+ HWINSTA hwinsta,
+ DESKTOPENUMPROC lpEnumFunc,
+ LPARAM lParam);
+
+HWINSTA
+STDCALL
+CreateWindowStationA(
+ LPSTR lpwinsta,
+ DWORD dwReserved,
+ DWORD dwDesiredAccess,
+ LPSECURITY_ATTRIBUTES lpsa);
+
+HWINSTA
+STDCALL
+OpenWindowStationA(
+ LPSTR lpszWinSta,
+ WINBOOL fInherit,
+ DWORD dwDesiredAccess);
+
+WINBOOL
+STDCALL
+EnumWindowStationsA(
+ ENUMWINDOWSTATIONPROC lpEnumFunc,
+ LPARAM lParam);
+
+WINBOOL
+STDCALL
+GetUserObjectInformationA(
+ HANDLE hObj,
+ int nIndex,
+ PVOID pvInfo,
+ DWORD nLength,
+ LPDWORD lpnLengthNeeded);
+
+WINBOOL
+STDCALL
+SetUserObjectInformationA(
+ HANDLE hObj,
+ int nIndex,
+ PVOID pvInfo,
+ DWORD nLength);
+
+UINT
+STDCALL
+RegisterWindowMessageA(
+ LPCSTR lpString);
+
+WINBOOL
+STDCALL
+GetMessageA(
+ LPMSG lpMsg,
+ HWND hWnd ,
+ UINT wMsgFilterMin,
+ UINT wMsgFilterMax);
+
+LONG
+STDCALL
+DispatchMessageA(
+ CONST MSG *lpMsg);
+
+WINBOOL
+STDCALL
+PeekMessageA(
+ LPMSG lpMsg,
+ HWND hWnd ,
+ UINT wMsgFilterMin,
+ UINT wMsgFilterMax,
+ UINT wRemoveMsg);
+
+LRESULT
+STDCALL
+SendMessageA(
+ HWND hWnd,
+ UINT Msg,
+ WPARAM wParam,
+ LPARAM lParam);
+
+LRESULT
+STDCALL
+SendMessageTimeoutA(
+ HWND hWnd,
+ UINT Msg,
+ WPARAM wParam,
+ LPARAM lParam,
+ UINT fuFlags,
+ UINT uTimeout,
+ LPDWORD lpdwResult);
+
+WINBOOL
+STDCALL
+SendNotifyMessageA(
+ HWND hWnd,
+ UINT Msg,
+ WPARAM wParam,
+ LPARAM lParam);
+
+WINBOOL
+STDCALL
+SendMessageCallbackA(
+ HWND hWnd,
+ UINT Msg,
+ WPARAM wParam,
+ LPARAM lParam,
+ SENDASYNCPROC lpResultCallBack,
+ DWORD dwData);
+
+WINBOOL
+STDCALL
+PostMessageA(
+ HWND hWnd,
+ UINT Msg,
+ WPARAM wParam,
+ LPARAM lParam);
+
+WINBOOL
+STDCALL
+PostThreadMessageA(
+ DWORD idThread,
+ UINT Msg,
+ WPARAM wParam,
+ LPARAM lParam);
+
+LRESULT
+STDCALL
+DefWindowProcA(
+ HWND hWnd,
+ UINT Msg,
+ WPARAM wParam,
+ LPARAM lParam);
+
+LRESULT
+STDCALL
+CallWindowProcA(
+ WNDPROC lpPrevWndFunc,
+ HWND hWnd,
+ UINT Msg,
+ WPARAM wParam,
+ LPARAM lParam);
+
+ATOM
+STDCALL
+RegisterClassA(
+ CONST WNDCLASS *lpWndClass);
+
+WINBOOL
+STDCALL
+UnregisterClassA(
+ LPCSTR lpClassName,
+ HINSTANCE hInstance);
+
+WINBOOL
+STDCALL
+GetClassInfoA(
+ HINSTANCE hInstance ,
+ LPCSTR lpClassName,
+ LPWNDCLASS lpWndClass);
+
+ATOM
+STDCALL
+RegisterClassExA(CONST WNDCLASSEX *);
+
+WINBOOL
+STDCALL
+GetClassInfoExA(HINSTANCE, LPCSTR, LPWNDCLASSEX);
+
+HWND
+STDCALL
+CreateWindowExA(
+ DWORD dwExStyle,
+ LPCSTR lpClassName,
+ LPCSTR lpWindowName,
+ DWORD dwStyle,
+ int X,
+ int Y,
+ int nWidth,
+ int nHeight,
+ HWND hWndParent ,
+ HMENU hMenu,
+ HINSTANCE hInstance,
+ LPVOID lpParam);
+
+HWND
+STDCALL
+CreateDialogParamA(
+ HINSTANCE hInstance,
+ LPCSTR lpTemplateName,
+ HWND hWndParent ,
+ DLGPROC lpDialogFunc,
+ LPARAM dwInitParam);
+
+HWND
+STDCALL
+CreateDialogIndirectParamA(
+ HINSTANCE hInstance,
+ LPCDLGTEMPLATE lpTemplate,
+ HWND hWndParent,
+ DLGPROC lpDialogFunc,
+ LPARAM dwInitParam);
+
+int
+STDCALL
+DialogBoxParamA(
+ HINSTANCE hInstance,
+ LPCSTR lpTemplateName,
+ HWND hWndParent ,
+ DLGPROC lpDialogFunc,
+ LPARAM dwInitParam);
+
+int
+STDCALL
+DialogBoxIndirectParamA(
+ HINSTANCE hInstance,
+ LPCDLGTEMPLATE hDialogTemplate,
+ HWND hWndParent ,
+ DLGPROC lpDialogFunc,
+ LPARAM dwInitParam);
+
+WINBOOL
+STDCALL
+SetDlgItemTextA(
+ HWND hDlg,
+ int nIDDlgItem,
+ LPCSTR lpString);
+
+UINT
+STDCALL
+GetDlgItemTextA(
+ HWND hDlg,
+ int nIDDlgItem,
+ LPSTR lpString,
+ int nMaxCount);
+
+LONG
+STDCALL
+SendDlgItemMessageA(
+ HWND hDlg,
+ int nIDDlgItem,
+ UINT Msg,
+ WPARAM wParam,
+ LPARAM lParam);
+
+LRESULT
+STDCALL
+DefDlgProcA(
+ HWND hDlg,
+ UINT Msg,
+ WPARAM wParam,
+ LPARAM lParam);
+
+WINBOOL
+STDCALL
+CallMsgFilterA(
+ LPMSG lpMsg,
+ int nCode);
+
+UINT
+STDCALL
+RegisterClipboardFormatA(
+ LPCSTR lpszFormat);
+
+int
+STDCALL
+GetClipboardFormatNameA(
+ UINT format,
+ LPSTR lpszFormatName,
+ int cchMaxCount);
+
+WINBOOL
+STDCALL
+CharToOemA(
+ LPCSTR lpszSrc,
+ LPSTR lpszDst);
+
+WINBOOL
+STDCALL
+OemToCharA(
+ LPCSTR lpszSrc,
+ LPSTR lpszDst);
+
+WINBOOL
+STDCALL
+CharToOemBuffA(
+ LPCSTR lpszSrc,
+ LPSTR lpszDst,
+ DWORD cchDstLength);
+
+WINBOOL
+STDCALL
+OemToCharBuffA(
+ LPCSTR lpszSrc,
+ LPSTR lpszDst,
+ DWORD cchDstLength);
+
+LPSTR
+STDCALL
+CharUpperA(
+ LPSTR lpsz);
+
+DWORD
+STDCALL
+CharUpperBuffA(
+ LPSTR lpsz,
+ DWORD cchLength);
+
+LPSTR
+STDCALL
+CharLowerA(
+ LPSTR lpsz);
+
+DWORD
+STDCALL
+CharLowerBuffA(
+ LPSTR lpsz,
+ DWORD cchLength);
+
+LPSTR
+STDCALL
+CharNextA(
+ LPCSTR lpsz);
+
+LPSTR
+STDCALL
+CharPrevA(
+ LPCSTR lpszStart,
+ LPCSTR lpszCurrent);
+
+WINBOOL
+STDCALL
+IsCharAlphaA(
+ CHAR ch);
+
+WINBOOL
+STDCALL
+IsCharAlphaNumericA(
+ CHAR ch);
+
+WINBOOL
+STDCALL
+IsCharUpperA(
+ CHAR ch);
+
+WINBOOL
+STDCALL
+IsCharLowerA(
+ CHAR ch);
+
+int
+STDCALL
+GetKeyNameTextA(
+ LONG lParam,
+ LPSTR lpString,
+ int nSize
+ );
+
+SHORT
+STDCALL
+VkKeyScanA(
+ CHAR ch);
+
+SHORT
+STDCALL VkKeyScanExA(
+ CHAR ch,
+ HKL dwhkl);
+
+UINT
+STDCALL
+MapVirtualKeyA(
+ UINT uCode,
+ UINT uMapType);
+
+UINT
+STDCALL
+MapVirtualKeyExA(
+ UINT uCode,
+ UINT uMapType,
+ HKL dwhkl);
+
+HACCEL
+STDCALL
+LoadAcceleratorsA(
+ HINSTANCE hInstance,
+ LPCSTR lpTableName);
+
+HACCEL
+STDCALL
+CreateAcceleratorTableA(
+ LPACCEL, int);
+
+int
+STDCALL
+CopyAcceleratorTableA(
+ HACCEL hAccelSrc,
+ LPACCEL lpAccelDst,
+ int cAccelEntries);
+
+int
+STDCALL
+TranslateAcceleratorA(
+ HWND hWnd,
+ HACCEL hAccTable,
+ LPMSG lpMsg);
+
+HMENU
+STDCALL
+LoadMenuA(
+ HINSTANCE hInstance,
+ LPCSTR lpMenuName);
+
+HMENU
+STDCALL
+LoadMenuIndirectA(
+ CONST MENUTEMPLATE *lpMenuTemplate);
+
+WINBOOL
+STDCALL
+ChangeMenuA(
+ HMENU hMenu,
+ UINT cmd,
+ LPCSTR lpszNewItem,
+ UINT cmdInsert,
+ UINT flags);
+
+int
+STDCALL
+GetMenuStringA(
+ HMENU hMenu,
+ UINT uIDItem,
+ LPSTR lpString,
+ int nMaxCount,
+ UINT uFlag);
+
+WINBOOL
+STDCALL
+InsertMenuA(
+ HMENU hMenu,
+ UINT uPosition,
+ UINT uFlags,
+ UINT uIDNewItem,
+ LPCSTR lpNewItem
+ );
+
+WINBOOL
+STDCALL
+AppendMenuA(
+ HMENU hMenu,
+ UINT uFlags,
+ UINT uIDNewItem,
+ LPCSTR lpNewItem
+ );
+
+WINBOOL
+STDCALL
+ModifyMenuA(
+ HMENU hMnu,
+ UINT uPosition,
+ UINT uFlags,
+ UINT uIDNewItem,
+ LPCSTR lpNewItem
+ );
+
+WINBOOL
+STDCALL
+InsertMenuItemA(
+ HMENU,
+ UINT,
+ WINBOOL,
+ LPCMENUITEMINFO
+ );
+
+WINBOOL
+STDCALL
+GetMenuItemInfoA(
+ HMENU,
+ UINT,
+ WINBOOL,
+ LPMENUITEMINFO
+ );
+
+WINBOOL
+STDCALL
+SetMenuItemInfoA(
+ HMENU,
+ UINT,
+ WINBOOL,
+ LPCMENUITEMINFO
+ );
+
+int
+STDCALL
+DrawTextA(
+ HDC hDC,
+ LPCSTR lpString,
+ int nCount,
+ LPRECT lpRect,
+ UINT uFormat);
+
+int
+STDCALL
+DrawTextExA(HDC, LPSTR, int, LPRECT, UINT, LPDRAWTEXTPARAMS);
+
+WINBOOL
+STDCALL
+GrayStringA(
+ HDC hDC,
+ HBRUSH hBrush,
+ GRAYSTRINGPROC lpOutputFunc,
+ LPARAM lpData,
+ int nCount,
+ int X,
+ int Y,
+ int nWidth,
+ int nHeight);
+
+WINBOOL
+STDCALL
+DrawStateA(HDC, HBRUSH, DRAWSTATEPROC, LPARAM, WPARAM, int, int, int, int, UINT);
+
+LONG
+STDCALL
+TabbedTextOutA(
+ HDC hDC,
+ int X,
+ int Y,
+ LPCSTR lpString,
+ int nCount,
+ int nTabPositions,
+ LPINT lpnTabStopPositions,
+ int nTabOrigin);
+
+DWORD
+STDCALL
+GetTabbedTextExtentA(
+ HDC hDC,
+ LPCSTR lpString,
+ int nCount,
+ int nTabPositions,
+ LPINT lpnTabStopPositions);
+
+WINBOOL
+STDCALL
+SetPropA(
+ HWND hWnd,
+ LPCSTR lpString,
+ HANDLE hData);
+
+HANDLE
+STDCALL
+GetPropA(
+ HWND hWnd,
+ LPCSTR lpString);
+
+HANDLE
+STDCALL
+RemovePropA(
+ HWND hWnd,
+ LPCSTR lpString);
+
+int
+STDCALL
+EnumPropsExA(
+ HWND hWnd,
+ PROPENUMPROCEX lpEnumFunc,
+ LPARAM lParam);
+
+int
+STDCALL
+EnumPropsA(
+ HWND hWnd,
+ PROPENUMPROC lpEnumFunc);
+
+WINBOOL
+STDCALL
+SetWindowTextA(
+ HWND hWnd,
+ LPCSTR lpString);
+
+int
+STDCALL
+GetWindowTextA(
+ HWND hWnd,
+ LPSTR lpString,
+ int nMaxCount);
+
+int
+STDCALL
+GetWindowTextLengthA(
+ HWND hWnd);
+
+int
+STDCALL
+MessageBoxA(
+ HWND hWnd ,
+ LPCSTR lpText,
+ LPCSTR lpCaption,
+ UINT uType);
+
+int
+STDCALL
+MessageBoxExA(
+ HWND hWnd ,
+ LPCSTR lpText,
+ LPCSTR lpCaption,
+ UINT uType,
+ WORD wLanguageId);
+
+int
+STDCALL
+MessageBoxIndirectA(LPMSGBOXPARAMS);
+
+LONG
+STDCALL
+GetWindowLongA(
+ HWND hWnd,
+ int nIndex);
+
+LONG
+STDCALL
+SetWindowLongA(
+ HWND hWnd,
+ int nIndex,
+ LONG dwNewLong);
+
+DWORD
+STDCALL
+GetClassLongA(
+ HWND hWnd,
+ int nIndex);
+
+DWORD
+STDCALL
+SetClassLongA(
+ HWND hWnd,
+ int nIndex,
+ LONG dwNewLong);
+
+HWND
+STDCALL
+FindWindowA(
+ LPCSTR lpClassName ,
+ LPCSTR lpWindowName);
+
+HWND
+STDCALL
+FindWindowExA(HWND, HWND, LPCSTR, LPCSTR);
+
+int
+STDCALL
+GetClassNameA(
+ HWND hWnd,
+ LPSTR lpClassName,
+ int nMaxCount);
+
+HHOOK
+STDCALL
+SetWindowsHookExA(
+ int idHook,
+ HOOKPROC lpfn,
+ HINSTANCE hmod,
+ DWORD dwThreadId);
+
+HBITMAP
+STDCALL
+LoadBitmapA(
+ HINSTANCE hInstance,
+ LPCSTR lpBitmapName);
+
+HCURSOR
+STDCALL
+LoadCursorA(
+ HINSTANCE hInstance,
+ LPCSTR lpCursorName);
+
+HCURSOR
+STDCALL
+LoadCursorFromFileA(
+ LPCSTR lpFileName);
+
+HICON
+STDCALL
+LoadIconA(
+ HINSTANCE hInstance,
+ LPCSTR lpIconName);
+
+HANDLE
+STDCALL
+LoadImageA(
+ HINSTANCE,
+ LPCSTR,
+ UINT,
+ int,
+ int,
+ UINT);
+
+int
+STDCALL
+LoadStringA(
+ HINSTANCE hInstance,
+ UINT uID,
+ LPSTR lpBuffer,
+ int nBufferMax);
+
+WINBOOL
+STDCALL
+IsDialogMessageA(
+ HWND hDlg,
+ LPMSG lpMsg);
+
+int
+STDCALL
+DlgDirListA(
+ HWND hDlg,
+ LPSTR lpPathSpec,
+ int nIDListBox,
+ int nIDStaticPath,
+ UINT uFileType);
+
+WINBOOL
+STDCALL
+DlgDirSelectExA(
+ HWND hDlg,
+ LPSTR lpString,
+ int nCount,
+ int nIDListBox);
+
+int
+STDCALL
+DlgDirListComboBoxA(
+ HWND hDlg,
+ LPSTR lpPathSpec,
+ int nIDComboBox,
+ int nIDStaticPath,
+ UINT uFiletype);
+
+WINBOOL
+STDCALL
+DlgDirSelectComboBoxExA(
+ HWND hDlg,
+ LPSTR lpString,
+ int nCount,
+ int nIDComboBox);
+
+LRESULT
+STDCALL
+DefFrameProcA(
+ HWND hWnd,
+ HWND hWndMDIClient ,
+ UINT uMsg,
+ WPARAM wParam,
+ LPARAM lParam);
+
+LRESULT
+STDCALL
+DefMDIChildProcA(
+ HWND hWnd,
+ UINT uMsg,
+ WPARAM wParam,
+ LPARAM lParam);
+
+HWND
+STDCALL
+CreateMDIWindowA(
+ LPSTR lpClassName,
+ LPSTR lpWindowName,
+ DWORD dwStyle,
+ int X,
+ int Y,
+ int nWidth,
+ int nHeight,
+ HWND hWndParent,
+ HINSTANCE hInstance,
+ LPARAM lParam
+ );
+
+WINBOOL
+STDCALL
+WinHelpA(
+ HWND hWndMain,
+ LPCSTR lpszHelp,
+ UINT uCommand,
+ DWORD dwData
+ );
+
+LONG
+STDCALL
+ChangeDisplaySettingsA(
+ LPDEVMODE lpDevMode,
+ DWORD dwFlags);
+
+WINBOOL
+STDCALL
+EnumDisplaySettingsA(
+ LPCSTR lpszDeviceName,
+ DWORD iModeNum,
+ LPDEVMODE lpDevMode);
+
+WINBOOL
+STDCALL
+SystemParametersInfoA(
+ UINT uiAction,
+ UINT uiParam,
+ PVOID pvParam,
+ UINT fWinIni);
+
+int
+STDCALL
+AddFontResourceA(LPCSTR);
+
+HMETAFILE
+STDCALL
+CopyMetaFileA(HMETAFILE, LPCSTR);
+
+HFONT
+STDCALL
+CreateFontIndirectA(CONST LOGFONT *);
+
+HDC
+STDCALL
+CreateICA(LPCSTR, LPCSTR , LPCSTR , CONST DEVMODE *);
+
+HDC
+STDCALL
+CreateMetaFileA(LPCSTR);
+
+WINBOOL
+STDCALL
+CreateScalableFontResourceA(DWORD, LPCSTR, LPCSTR, LPCSTR);
+
+int
+STDCALL
+DeviceCapabilitiesA(LPCSTR, LPCSTR, WORD,
+ LPSTR, CONST DEVMODE *);
+
+int
+STDCALL
+EnumFontFamiliesExA(HDC, LPLOGFONT, FONTENUMEXPROC, LPARAM,DWORD);
+
+int
+STDCALL
+EnumFontFamiliesA(HDC, LPCSTR, FONTENUMPROC, LPARAM);
+
+int
+STDCALL
+EnumFontsA(HDC, LPCSTR, ENUMFONTSPROC, LPARAM);
+
+WINBOOL
+STDCALL
+GetCharWidthA(HDC, UINT, UINT, LPINT);
+
+WINBOOL
+STDCALL
+GetCharWidth32A(HDC, UINT, UINT, LPINT);
+
+WINBOOL
+STDCALL
+GetCharWidthFloatA(HDC, UINT, UINT, PFLOAT);
+
+WINBOOL
+STDCALL
+GetCharABCWidthsA(HDC, UINT, UINT, LPABC);
+
+WINBOOL
+STDCALL
+GetCharABCWidthsFloatA(HDC, UINT, UINT, LPABCFLOAT);
+DWORD
+STDCALL
+GetGlyphOutlineA(HDC, UINT, UINT, LPGLYPHMETRICS, DWORD, LPVOID, CONST MAT2 *);
+
+HMETAFILE
+STDCALL
+GetMetaFileA(LPCSTR);
+
+UINT
+STDCALL
+GetOutlineTextMetricsA(HDC, UINT, LPOUTLINETEXTMETRIC);
+
+WINBOOL
+STDCALL
+GetTextExtentPointA(
+ HDC,
+ LPCSTR,
+ int,
+ LPSIZE
+ );
+
+WINBOOL
+STDCALL
+GetTextExtentPoint32A(
+ HDC,
+ LPCSTR,
+ int,
+ LPSIZE
+ );
+
+WINBOOL
+STDCALL
+GetTextExtentExPointA(
+ HDC,
+ LPCSTR,
+ int,
+ int,
+ LPINT,
+ LPINT,
+ LPSIZE
+ );
+
+DWORD
+STDCALL
+GetCharacterPlacementA(HDC, LPCSTR, int, int, LPGCP_RESULTS, DWORD);
+
+HDC
+STDCALL
+ResetDCA(HDC, CONST DEVMODE *);
+
+WINBOOL
+STDCALL
+RemoveFontResourceA(LPCSTR);
+
+HENHMETAFILE
+STDCALL
+CopyEnhMetaFileA(HENHMETAFILE, LPCSTR);
+
+HDC
+STDCALL
+CreateEnhMetaFileA(HDC, LPCSTR, CONST RECT *, LPCSTR);
+
+HENHMETAFILE
+STDCALL
+GetEnhMetaFileA(LPCSTR);
+
+UINT
+STDCALL
+GetEnhMetaFileDescriptionA(HENHMETAFILE, UINT, LPSTR );
+
+WINBOOL
+STDCALL
+GetTextMetricsA(HDC, LPTEXTMETRIC);
+
+int
+STDCALL
+StartDocA(HDC, CONST DOCINFO *);
+
+int
+STDCALL
+GetObjectA(HGDIOBJ, int, LPVOID);
+
+WINBOOL
+STDCALL
+TextOutA(HDC, int, int, LPCSTR, int);
+
+WINBOOL
+STDCALL
+ExtTextOutA(HDC, int, int, UINT, CONST RECT *,LPCSTR, UINT, CONST INT *);
+
+WINBOOL
+STDCALL
+PolyTextOutA(HDC, CONST POLYTEXT *, int);
+
+int
+STDCALL
+GetTextFaceA(HDC, int, LPSTR);
+
+DWORD
+STDCALL
+GetKerningPairsA(HDC, DWORD, LPKERNINGPAIR);
+
+HCOLORSPACE
+STDCALL
+CreateColorSpaceA(LPLOGCOLORSPACE);
+
+WINBOOL
+STDCALL
+GetLogColorSpaceA(HCOLORSPACE,LPLOGCOLORSPACE,DWORD);
+
+WINBOOL
+STDCALL
+GetICMProfileA(HDC,DWORD,LPSTR);
+
+WINBOOL
+STDCALL
+SetICMProfileA(HDC,LPSTR);
+
+WINBOOL
+STDCALL
+UpdateICMRegKeyA(DWORD, DWORD, LPSTR, UINT);
+
+int
+STDCALL
+EnumICMProfilesA(HDC,ICMENUMPROC,LPARAM);
+
+int
+STDCALL
+PropertySheetA(LPCPROPSHEETHEADER lppsph);
+
+HIMAGELIST
+STDCALL
+ImageList_LoadImageA(HINSTANCE hi, LPCSTR lpbmp, int cx, int cGrow, COLORREF crMask, UINT uType, UINT uFlags);
+
+HWND
+STDCALL
+CreateStatusWindowA(LONG style, LPCSTR lpszText, HWND hwndParent, UINT wID);
+
+void
+STDCALL
+DrawStatusTextA(HDC hDC, LPRECT lprc, LPCSTR pszText, UINT uFlags);
+
+WINBOOL
+STDCALL
+GetOpenFileNameA(LPOPENFILENAME);
+
+WINBOOL
+STDCALL
+GetSaveFileNameA(LPOPENFILENAME);
+
+short
+STDCALL
+GetFileTitleA(LPCSTR, LPSTR, WORD);
+
+WINBOOL
+STDCALL
+ChooseColorA(LPCHOOSECOLOR);
+
+HWND
+STDCALL
+FindTextA(LPFINDREPLACE);
+
+HWND
+STDCALL
+ReplaceTextA(LPFINDREPLACE);
+
+WINBOOL
+STDCALL
+ChooseFontA(LPCHOOSEFONT);
+
+WINBOOL
+STDCALL
+PrintDlgA(LPPRINTDLG);
+
+WINBOOL
+STDCALL
+PageSetupDlgA( LPPAGESETUPDLG );
+
+WINBOOL
+STDCALL
+CreateProcessA(
+ LPCSTR lpApplicationName,
+ LPSTR lpCommandLine,
+ LPSECURITY_ATTRIBUTES lpProcessAttributes,
+ LPSECURITY_ATTRIBUTES lpThreadAttributes,
+ WINBOOL bInheritHandles,
+ DWORD dwCreationFlags,
+ LPVOID lpEnvironment,
+ LPCSTR lpCurrentDirectory,
+ LPSTARTUPINFO lpStartupInfo,
+ LPPROCESS_INFORMATION lpProcessInformation
+ );
+
+VOID
+STDCALL
+GetStartupInfoA(
+ LPSTARTUPINFO lpStartupInfo
+ );
+
+HANDLE
+STDCALL
+FindFirstFileA(
+ LPCSTR lpFileName,
+ LPWIN32_FIND_DATA lpFindFileData
+ );
+
+WINBOOL
+STDCALL
+FindNextFileA(
+ HANDLE hFindFile,
+ LPWIN32_FIND_DATA lpFindFileData
+ );
+
+WINBOOL
+STDCALL
+GetVersionExA(
+ LPOSVERSIONINFO lpVersionInformation
+ );
+
+#define CreateWindowA(lpClassName, lpWindowName, dwStyle, x, y,\
+nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam)\
+CreateWindowExA(0L, lpClassName, lpWindowName, dwStyle, x, y,\
+nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam)
+
+#define CreateDialogA(hInstance, lpName, hWndParent, lpDialogFunc) \
+CreateDialogParamA(hInstance, lpName, hWndParent, lpDialogFunc, 0L)
+
+#define CreateDialogIndirectA(hInstance, lpTemplate, hWndParent, lpDialogFunc) \
+CreateDialogIndirectParamA(hInstance, lpTemplate, hWndParent, lpDialogFunc, 0L)
+
+#define DialogBoxA(hInstance, lpTemplate, hWndParent, lpDialogFunc) \
+DialogBoxParamA(hInstance, lpTemplate, hWndParent, lpDialogFunc, 0L)
+
+#define DialogBoxIndirectA(hInstance, lpTemplate, hWndParent, lpDialogFunc) \
+DialogBoxIndirectParamA(hInstance, lpTemplate, hWndParent, lpDialogFunc, 0L)
+
+HDC
+STDCALL
+CreateDCA(LPCSTR, LPCSTR , LPCSTR , CONST DEVMODE *);
+
+DWORD
+STDCALL
+VerInstallFileA(
+ DWORD uFlags,
+ LPSTR szSrcFileName,
+ LPSTR szDestFileName,
+ LPSTR szSrcDir,
+ LPSTR szDestDir,
+ LPSTR szCurDir,
+ LPSTR szTmpFile,
+ PUINT lpuTmpFileLen
+ );
+
+DWORD
+STDCALL
+GetFileVersionInfoSizeA(
+ LPSTR lptstrFilename,
+ LPDWORD lpdwHandle
+ );
+
+WINBOOL
+STDCALL
+GetFileVersionInfoA(
+ LPSTR lptstrFilename,
+ DWORD dwHandle,
+ DWORD dwLen,
+ LPVOID lpData
+ );
+
+DWORD
+STDCALL
+VerLanguageNameA(
+ DWORD wLang,
+ LPSTR szLang,
+ DWORD nSize
+ );
+
+WINBOOL
+STDCALL
+VerQueryValueA(
+ const LPVOID pBlock,
+ LPSTR lpSubBlock,
+ LPVOID * lplpBuffer,
+ PUINT puLen
+ );
+
+DWORD
+STDCALL
+VerFindFileA(
+ DWORD uFlags,
+ LPSTR szFileName,
+ LPSTR szWinDir,
+ LPSTR szAppDir,
+ LPSTR szCurDir,
+ PUINT lpuCurDirLen,
+ LPSTR szDestDir,
+ PUINT lpuDestDirLen
+ );
+
+LONG
+STDCALL
+RegConnectRegistryA (
+ LPSTR lpMachineName,
+ HKEY hKey,
+ PHKEY phkResult
+ );
+
+LONG
+STDCALL
+RegCreateKeyA (
+ HKEY hKey,
+ LPCSTR lpSubKey,
+ PHKEY phkResult
+ );
+
+LONG
+STDCALL
+RegCreateKeyExA (
+ HKEY hKey,
+ LPCSTR lpSubKey,
+ DWORD Reserved,
+ LPSTR lpClass,
+ DWORD dwOptions,
+ REGSAM samDesired,
+ LPSECURITY_ATTRIBUTES lpSecurityAttributes,
+ PHKEY phkResult,
+ LPDWORD lpdwDisposition
+ );
+
+LONG
+STDCALL
+RegDeleteKeyA (
+ HKEY hKey,
+ LPCSTR lpSubKey
+ );
+
+LONG
+STDCALL
+RegDeleteValueA (
+ HKEY hKey,
+ LPCSTR lpValueName
+ );
+
+LONG
+STDCALL
+RegEnumKeyA (
+ HKEY hKey,
+ DWORD dwIndex,
+ LPSTR lpName,
+ DWORD cbName
+ );
+
+LONG
+STDCALL
+RegEnumKeyExA (
+ HKEY hKey,
+ DWORD dwIndex,
+ LPSTR lpName,
+ LPDWORD lpcbName,
+ LPDWORD lpReserved,
+ LPSTR lpClass,
+ LPDWORD lpcbClass,
+ PFILETIME lpftLastWriteTime
+ );
+
+LONG
+STDCALL
+RegEnumValueA (
+ HKEY hKey,
+ DWORD dwIndex,
+ LPSTR lpValueName,
+ LPDWORD lpcbValueName,
+ LPDWORD lpReserved,
+ LPDWORD lpType,
+ LPBYTE lpData,
+ LPDWORD lpcbData
+ );
+
+LONG
+STDCALL
+RegLoadKeyA (
+ HKEY hKey,
+ LPCSTR lpSubKey,
+ LPCSTR lpFile
+ );
+
+LONG
+STDCALL
+RegOpenKeyA (
+ HKEY hKey,
+ LPCSTR lpSubKey,
+ PHKEY phkResult
+ );
+
+LONG
+STDCALL
+RegOpenKeyExA (
+ HKEY hKey,
+ LPCSTR lpSubKey,
+ DWORD ulOptions,
+ REGSAM samDesired,
+ PHKEY phkResult
+ );
+
+LONG
+STDCALL
+RegQueryInfoKeyA (
+ HKEY hKey,
+ LPSTR lpClass,
+ LPDWORD lpcbClass,
+ LPDWORD lpReserved,
+ LPDWORD lpcSubKeys,
+ LPDWORD lpcbMaxSubKeyLen,
+ LPDWORD lpcbMaxClassLen,
+ LPDWORD lpcValues,
+ LPDWORD lpcbMaxValueNameLen,
+ LPDWORD lpcbMaxValueLen,
+ LPDWORD lpcbSecurityDescriptor,
+ PFILETIME lpftLastWriteTime
+ );
+
+LONG
+STDCALL
+RegQueryValueA (
+ HKEY hKey,
+ LPCSTR lpSubKey,
+ LPSTR lpValue,
+ PLONG lpcbValue
+ );
+
+LONG
+STDCALL
+RegQueryMultipleValuesA (
+ HKEY hKey,
+ PVALENT val_list,
+ DWORD num_vals,
+ LPSTR lpValueBuf,
+ LPDWORD ldwTotsize
+ );
+
+LONG
+STDCALL
+RegQueryValueExA (
+ HKEY hKey,
+ LPCSTR lpValueName,
+ LPDWORD lpReserved,
+ LPDWORD lpType,
+ LPBYTE lpData,
+ LPDWORD lpcbData
+ );
+
+LONG
+STDCALL
+RegReplaceKeyA (
+ HKEY hKey,
+ LPCSTR lpSubKey,
+ LPCSTR lpNewFile,
+ LPCSTR lpOldFile
+ );
+
+LONG
+STDCALL
+RegRestoreKeyA (
+ HKEY hKey,
+ LPCSTR lpFile,
+ DWORD dwFlags
+ );
+
+LONG
+STDCALL
+RegSaveKeyA (
+ HKEY hKey,
+ LPCSTR lpFile,
+ LPSECURITY_ATTRIBUTES lpSecurityAttributes
+ );
+
+LONG
+STDCALL
+RegSetValueA (
+ HKEY hKey,
+ LPCSTR lpSubKey,
+ DWORD dwType,
+ LPCSTR lpData,
+ DWORD cbData
+ );
+
+LONG
+STDCALL
+RegSetValueExA (
+ HKEY hKey,
+ LPCSTR lpValueName,
+ DWORD Reserved,
+ DWORD dwType,
+ CONST BYTE* lpData,
+ DWORD cbData
+ );
+
+LONG
+STDCALL
+RegUnLoadKeyA (
+ HKEY hKey,
+ LPCSTR lpSubKey
+ );
+
+WINBOOL
+STDCALL
+InitiateSystemShutdownA(
+ LPSTR lpMachineName,
+ LPSTR lpMessage,
+ DWORD dwTimeout,
+ WINBOOL bForceAppsClosed,
+ WINBOOL bRebootAfterShutdown
+ );
+
+WINBOOL
+STDCALL
+AbortSystemShutdownA(
+ LPSTR lpMachineName
+ );
+
+int
+STDCALL
+CompareStringA(
+ LCID Locale,
+ DWORD dwCmpFlags,
+ LPCSTR lpString1,
+ int cchCount1,
+ LPCSTR lpString2,
+ int cchCount2);
+
+int
+STDCALL
+LCMapStringA(
+ LCID Locale,
+ DWORD dwMapFlags,
+ LPCSTR lpSrcStr,
+ int cchSrc,
+ LPSTR lpDestStr,
+ int cchDest);
+
+int
+STDCALL
+GetLocaleInfoA(
+ LCID Locale,
+ LCTYPE LCType,
+ LPSTR lpLCData,
+ int cchData);
+
+WINBOOL
+STDCALL
+SetLocaleInfoA(
+ LCID Locale,
+ LCTYPE LCType,
+ LPCSTR lpLCData);
+
+int
+STDCALL
+GetTimeFormatA(
+ LCID Locale,
+ DWORD dwFlags,
+ CONST SYSTEMTIME *lpTime,
+ LPCSTR lpFormat,
+ LPSTR lpTimeStr,
+ int cchTime);
+
+int
+STDCALL
+GetDateFormatA(
+ LCID Locale,
+ DWORD dwFlags,
+ CONST SYSTEMTIME *lpDate,
+ LPCSTR lpFormat,
+ LPSTR lpDateStr,
+ int cchDate);
+
+int
+STDCALL
+GetNumberFormatA(
+ LCID Locale,
+ DWORD dwFlags,
+ LPCSTR lpValue,
+ CONST NUMBERFMT *lpFormat,
+ LPSTR lpNumberStr,
+ int cchNumber);
+
+int
+STDCALL
+GetCurrencyFormatA(
+ LCID Locale,
+ DWORD dwFlags,
+ LPCSTR lpValue,
+ CONST CURRENCYFMT *lpFormat,
+ LPSTR lpCurrencyStr,
+ int cchCurrency);
+
+WINBOOL
+STDCALL
+EnumCalendarInfoA(
+ CALINFO_ENUMPROC lpCalInfoEnumProc,
+ LCID Locale,
+ CALID Calendar,
+ CALTYPE CalType);
+
+WINBOOL
+STDCALL
+EnumTimeFormatsA(
+ TIMEFMT_ENUMPROC lpTimeFmtEnumProc,
+ LCID Locale,
+ DWORD dwFlags);
+
+WINBOOL
+STDCALL
+EnumDateFormatsA(
+ DATEFMT_ENUMPROC lpDateFmtEnumProc,
+ LCID Locale,
+ DWORD dwFlags);
+
+WINBOOL
+STDCALL
+GetStringTypeExA(
+ LCID Locale,
+ DWORD dwInfoType,
+ LPCSTR lpSrcStr,
+ int cchSrc,
+ LPWORD lpCharType);
+
+WINBOOL
+STDCALL
+GetStringTypeA(
+ LCID Locale,
+ DWORD dwInfoType,
+ LPCSTR lpSrcStr,
+ int cchSrc,
+ LPWORD lpCharType);
+
+
+int
+STDCALL
+FoldStringA(
+ DWORD dwMapFlags,
+ LPCSTR lpSrcStr,
+ int cchSrc,
+ LPSTR lpDestStr,
+ int cchDest);
+
+WINBOOL
+STDCALL
+EnumSystemLocalesA(
+ LOCALE_ENUMPROC lpLocaleEnumProc,
+ DWORD dwFlags);
+
+WINBOOL
+STDCALL
+EnumSystemCodePagesA(
+ CODEPAGE_ENUMPROC lpCodePageEnumProc,
+ DWORD dwFlags);
+
+WINBOOL
+STDCALL
+PeekConsoleInputA(
+ HANDLE hConsoleInput,
+ PINPUT_RECORD lpBuffer,
+ DWORD nLength,
+ LPDWORD lpNumberOfEventsRead
+ );
+
+WINBOOL
+STDCALL
+ReadConsoleInputA(
+ HANDLE hConsoleInput,
+ PINPUT_RECORD lpBuffer,
+ DWORD nLength,
+ LPDWORD lpNumberOfEventsRead
+ );
+
+WINBOOL
+STDCALL
+WriteConsoleInputA(
+ HANDLE hConsoleInput,
+ CONST INPUT_RECORD *lpBuffer,
+ DWORD nLength,
+ LPDWORD lpNumberOfEventsWritten
+ );
+
+WINBOOL
+STDCALL
+ReadConsoleOutputA(
+ HANDLE hConsoleOutput,
+ PCHAR_INFO lpBuffer,
+ COORD dwBufferSize,
+ COORD dwBufferCoord,
+ PSMALL_RECT lpReadRegion
+ );
+
+WINBOOL
+STDCALL
+WriteConsoleOutputA(
+ HANDLE hConsoleOutput,
+ CONST CHAR_INFO *lpBuffer,
+ COORD dwBufferSize,
+ COORD dwBufferCoord,
+ PSMALL_RECT lpWriteRegion
+ );
+
+WINBOOL
+STDCALL
+ReadConsoleOutputCharacterA(
+ HANDLE hConsoleOutput,
+ LPSTR lpCharacter,
+ DWORD nLength,
+ COORD dwReadCoord,
+ LPDWORD lpNumberOfCharsRead
+ );
+
+WINBOOL
+STDCALL
+WriteConsoleOutputCharacterA(
+ HANDLE hConsoleOutput,
+ LPCSTR lpCharacter,
+ DWORD nLength,
+ COORD dwWriteCoord,
+ LPDWORD lpNumberOfCharsWritten
+ );
+
+WINBOOL
+STDCALL
+FillConsoleOutputCharacterA(
+ HANDLE hConsoleOutput,
+ CHAR cCharacter,
+ DWORD nLength,
+ COORD dwWriteCoord,
+ LPDWORD lpNumberOfCharsWritten
+ );
+
+WINBOOL
+STDCALL
+ScrollConsoleScreenBufferA(
+ HANDLE hConsoleOutput,
+ CONST SMALL_RECT *lpScrollRectangle,
+ CONST SMALL_RECT *lpClipRectangle,
+ COORD dwDestinationOrigin,
+ CONST CHAR_INFO *lpFill
+ );
+
+DWORD
+STDCALL
+GetConsoleTitleA(
+ LPSTR lpConsoleTitle,
+ DWORD nSize
+ );
+
+WINBOOL
+STDCALL
+SetConsoleTitleA(
+ LPCSTR lpConsoleTitle
+ );
+
+WINBOOL
+STDCALL
+ReadConsoleA(
+ HANDLE hConsoleInput,
+ LPVOID lpBuffer,
+ DWORD nNumberOfCharsToRead,
+ LPDWORD lpNumberOfCharsRead,
+ LPVOID lpReserved
+ );
+
+WINBOOL
+STDCALL
+WriteConsoleA(
+ HANDLE hConsoleOutput,
+ CONST VOID *lpBuffer,
+ DWORD nNumberOfCharsToWrite,
+ LPDWORD lpNumberOfCharsWritten,
+ LPVOID lpReserved
+ );
+
+DWORD STDCALL
+WNetAddConnectionA(
+ LPCSTR lpRemoteName,
+ LPCSTR lpPassword,
+ LPCSTR lpLocalName
+ );
+
+DWORD STDCALL
+WNetAddConnection2A(
+ LPNETRESOURCE lpNetResource,
+ LPCSTR lpPassword,
+ LPCSTR lpUserName,
+ DWORD dwFlags
+ );
+
+DWORD STDCALL
+WNetAddConnection3A(
+ HWND hwndOwner,
+ LPNETRESOURCE lpNetResource,
+ LPCSTR lpPassword,
+ LPCSTR lpUserName,
+ DWORD dwFlags
+ );
+
+DWORD STDCALL
+WNetCancelConnectionA(
+ LPCSTR lpName,
+ WINBOOL fForce
+ );
+
+DWORD STDCALL
+WNetCancelConnection2A(
+ LPCSTR lpName,
+ DWORD dwFlags,
+ WINBOOL fForce
+ );
+
+DWORD STDCALL
+WNetGetConnectionA(
+ LPCSTR lpLocalName,
+ LPSTR lpRemoteName,
+ LPDWORD lpnLength
+ );
+
+DWORD STDCALL
+WNetUseConnectionA(
+ HWND hwndOwner,
+ LPNETRESOURCE lpNetResource,
+ LPCSTR lpUserID,
+ LPCSTR lpPassword,
+ DWORD dwFlags,
+ LPSTR lpAccessName,
+ LPDWORD lpBufferSize,
+ LPDWORD lpResult
+ );
+
+DWORD STDCALL
+WNetSetConnectionA(
+ LPCSTR lpName,
+ DWORD dwProperties,
+ LPVOID pvValues
+ );
+
+DWORD STDCALL
+WNetConnectionDialog1A(
+ LPCONNECTDLGSTRUCT lpConnDlgStruct
+ );
+
+DWORD STDCALL
+WNetDisconnectDialog1A(
+ LPDISCDLGSTRUCT lpConnDlgStruct
+ );
+
+DWORD STDCALL
+WNetOpenEnumA(
+ DWORD dwScope,
+ DWORD dwType,
+ DWORD dwUsage,
+ LPNETRESOURCE lpNetResource,
+ LPHANDLE lphEnum
+ );
+
+DWORD STDCALL
+WNetEnumResourceA(
+ HANDLE hEnum,
+ LPDWORD lpcCount,
+ LPVOID lpBuffer,
+ LPDWORD lpBufferSize
+ );
+
+DWORD STDCALL
+WNetGetUniversalNameA(
+ LPCSTR lpLocalPath,
+ DWORD dwInfoLevel,
+ LPVOID lpBuffer,
+ LPDWORD lpBufferSize
+ );
+
+DWORD STDCALL
+WNetGetUserA(
+ LPCSTR lpName,
+ LPSTR lpUserName,
+ LPDWORD lpnLength
+ );
+
+DWORD STDCALL
+WNetGetProviderNameA(
+ DWORD dwNetType,
+ LPSTR lpProviderName,
+ LPDWORD lpBufferSize
+ );
+
+DWORD STDCALL
+WNetGetNetworkInformationA(
+ LPCSTR lpProvider,
+ LPNETINFOSTRUCT lpNetInfoStruct
+ );
+
+DWORD STDCALL
+WNetGetLastErrorA(
+ LPDWORD lpError,
+ LPSTR lpErrorBuf,
+ DWORD nErrorBufSize,
+ LPSTR lpNameBuf,
+ DWORD nNameBufSize
+ );
+
+DWORD STDCALL
+MultinetGetConnectionPerformanceA(
+ LPNETRESOURCE lpNetResource,
+ LPNETCONNECTINFOSTRUCT lpNetConnectInfoStruct
+ );
+
+WINBOOL
+STDCALL
+ChangeServiceConfigA(
+ SC_HANDLE hService,
+ DWORD dwServiceType,
+ DWORD dwStartType,
+ DWORD dwErrorControl,
+ LPCSTR lpBinaryPathName,
+ LPCSTR lpLoadOrderGroup,
+ LPDWORD lpdwTagId,
+ LPCSTR lpDependencies,
+ LPCSTR lpServiceStartName,
+ LPCSTR lpPassword,
+ LPCSTR lpDisplayName
+ );
+
+SC_HANDLE
+STDCALL
+CreateServiceA(
+ SC_HANDLE hSCManager,
+ LPCSTR lpServiceName,
+ LPCSTR lpDisplayName,
+ DWORD dwDesiredAccess,
+ DWORD dwServiceType,
+ DWORD dwStartType,
+ DWORD dwErrorControl,
+ LPCSTR lpBinaryPathName,
+ LPCSTR lpLoadOrderGroup,
+ LPDWORD lpdwTagId,
+ LPCSTR lpDependencies,
+ LPCSTR lpServiceStartName,
+ LPCSTR lpPassword
+ );
+
+WINBOOL
+STDCALL
+EnumDependentServicesA(
+ SC_HANDLE hService,
+ DWORD dwServiceState,
+ LPENUM_SERVICE_STATUS lpServices,
+ DWORD cbBufSize,
+ LPDWORD pcbBytesNeeded,
+ LPDWORD lpServicesReturned
+ );
+
+WINBOOL
+STDCALL
+EnumServicesStatusA(
+ SC_HANDLE hSCManager,
+ DWORD dwServiceType,
+ DWORD dwServiceState,
+ LPENUM_SERVICE_STATUS lpServices,
+ DWORD cbBufSize,
+ LPDWORD pcbBytesNeeded,
+ LPDWORD lpServicesReturned,
+ LPDWORD lpResumeHandle
+ );
+
+WINBOOL
+STDCALL
+GetServiceKeyNameA(
+ SC_HANDLE hSCManager,
+ LPCSTR lpDisplayName,
+ LPSTR lpServiceName,
+ LPDWORD lpcchBuffer
+ );
+
+WINBOOL
+STDCALL
+GetServiceDisplayNameA(
+ SC_HANDLE hSCManager,
+ LPCSTR lpServiceName,
+ LPSTR lpDisplayName,
+ LPDWORD lpcchBuffer
+ );
+
+SC_HANDLE
+STDCALL
+OpenSCManagerA(
+ LPCSTR lpMachineName,
+ LPCSTR lpDatabaseName,
+ DWORD dwDesiredAccess
+ );
+
+SC_HANDLE
+STDCALL
+OpenServiceA(
+ SC_HANDLE hSCManager,
+ LPCSTR lpServiceName,
+ DWORD dwDesiredAccess
+ );
+
+WINBOOL
+STDCALL
+QueryServiceConfigA(
+ SC_HANDLE hService,
+ LPQUERY_SERVICE_CONFIG lpServiceConfig,
+ DWORD cbBufSize,
+ LPDWORD pcbBytesNeeded
+ );
+
+WINBOOL
+STDCALL
+QueryServiceLockStatusA(
+ SC_HANDLE hSCManager,
+ LPQUERY_SERVICE_LOCK_STATUS lpLockStatus,
+ DWORD cbBufSize,
+ LPDWORD pcbBytesNeeded
+ );
+
+SERVICE_STATUS_HANDLE
+STDCALL
+RegisterServiceCtrlHandlerA(
+ LPCSTR lpServiceName,
+ LPHANDLER_FUNCTION lpHandlerProc
+ );
+
+WINBOOL
+STDCALL
+StartServiceCtrlDispatcherA(
+ LPSERVICE_TABLE_ENTRY lpServiceStartTable
+ );
+
+WINBOOL
+STDCALL
+StartServiceA(
+ SC_HANDLE hService,
+ DWORD dwNumServiceArgs,
+ LPCSTR *lpServiceArgVectors
+ );
+
+/* Extensions to OpenGL */
+
+WINBOOL STDCALL
+wglUseFontBitmapsA(HDC, DWORD, DWORD, DWORD);
+
+WINBOOL STDCALL
+wglUseFontOutlinesA(HDC, DWORD, DWORD, DWORD, FLOAT,
+ FLOAT, int, LPGLYPHMETRICSFLOAT);
+
+/* ------------------------------------- */
+/* From shellapi.h in old Cygnus headers */
+
+unsigned int WINAPI
+DragQueryFileA(HDROP, unsigned int, char *, unsigned int);
+
+HICON WINAPI
+ExtractAssociatedIconA (HINSTANCE, char *, WORD *);
+
+HICON WINAPI
+ExtractIconA (HINSTANCE, const char *, unsigned int);
+
+HINSTANCE WINAPI
+FindExecutableA (const char *, const char *, char *);
+
+int WINAPI
+ShellAboutA (HWND, const char *, const char *, HICON);
+
+HINSTANCE WINAPI
+ShellExecuteA (HWND, const char *, const char *, char *, const char *, int);
+
+/* end of stuff from shellapi.h in old Cygnus headers */
+/* -------------------------------------------------- */
+/* From ddeml.h in old Cygnus headers */
+
+HSZ WINAPI
+DdeCreateStringHandleA (DWORD, char *, int);
+
+UINT WINAPI
+DdeInitializeA (DWORD *, CALLB, DWORD, DWORD);
+
+DWORD WINAPI
+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, STARTUPINFO*, PROCESS_INFORMATION*);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* _GNU_H_WINDOWS32_ASCIIFUNCTIONS */
--- /dev/null
+/* \r
+ Base.h\r
+\r
+ Base definitions\r
+\r
+ Copyright (C) 1996, 1997 Free Software Foundation, Inc.\r
+\r
+ Author: Scott Christley <scottc@net-community.com>\r
+\r
+ This file is part of the Windows32 API Library.\r
+\r
+ This library is free software; you can redistribute it and/or\r
+ modify it under the terms of the GNU Library General Public\r
+ License as published by the Free Software Foundation; either\r
+ version 2 of the License, or (at your option) any later version.\r
+ \r
+ This library is distributed in the hope that it will be useful,\r
+ but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\r
+ Library General Public License for more details.\r
+\r
+ If you are interested in a warranty or support for this source code,\r
+ contact Scott Christley <scottc@net-community.com> for more information.\r
+ \r
+ You should have received a copy of the GNU Library General Public\r
+ License along with this library; see the file COPYING.LIB.\r
+ If not, write to the Free Software Foundation, \r
+ 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.\r
+*/ \r
+\r
+#ifndef _GNU_H_WINDOWS32_BASE\r
+#define _GNU_H_WINDOWS32_BASE\r
+\r
+#ifdef __cplusplus\r
+extern "C" {\r
+#endif /* __cplusplus */\r
+\r
+#ifndef NULL\r
+#ifdef __cplusplus\r
+#define NULL (0)\r
+#else\r
+#define NULL ((void *)0)\r
+#endif\r
+#endif /* !NULL */\r
+\r
+#define FALSE 0\r
+#define TRUE 1\r
+\r
+#ifndef RC_INVOKED\r
+\r
+/* typedef ACMDRIVERENUMCB;\r
+typedef ACMDRIVERPROC;\r
+typedef ACMFILERCHOOSEHOOKPROC;\r
+typedef ACMFILTERENUMCB;\r
+typedef ACMFILTERTAGENUMCB;\r
+typedef ACMFORMATCHOOSEHOOKPROC;\r
+typedef ACMFORMATENUMCB;\r
+typedef ACMFORMATTAGENUMCB;\r
+typedef APPLET_PROC;\r
+*/\r
+typedef unsigned short ATOM;\r
+/* Changed from BOOL to WINBOOL to avoid Objective-C conflict */\r
+typedef int WINBOOL;\r
+typedef unsigned char BOOLEAN;\r
+typedef unsigned char BYTE;\r
+typedef unsigned long CALTYPE;\r
+typedef unsigned long CALID;\r
+typedef char CCHAR;\r
+typedef unsigned long COLORREF;\r
+#define CONST const\r
+\r
+/* Check VOID before defining CHAR, SHORT, and LONG */\r
+#ifndef VOID\r
+#define VOID void\r
+typedef char CHAR;\r
+typedef short SHORT;\r
+typedef long LONG;\r
+#endif\r
+\r
+/*\r
+typedef CTRYID;\r
+typedef DLGPROC;\r
+*/\r
+typedef unsigned int DWORD; /* was unsigned long */\r
+typedef double DWORDLONG, *PDWORDLONG;\r
+/*\r
+typedef EDITWORDBREAKPROC;\r
+typedef ENHMFENUMPROC;\r
+typedef ENUMRESLANGPROC;\r
+typedef ENUMRESNAMEPROC;\r
+typedef ENUMRESTYPEPROC;\r
+*/\r
+typedef float FLOAT;\r
+/* typedef GLOBALHANDLE; */\r
+typedef void *HANDLE;\r
+typedef HANDLE HACCEL;\r
+typedef HANDLE HBITMAP;\r
+typedef HANDLE HBRUSH;\r
+typedef HANDLE HCOLORSPACE;\r
+typedef HANDLE HCONV;\r
+typedef HANDLE HCONVLIST;\r
+typedef HANDLE HCURSOR;\r
+typedef HANDLE HDBC;\r
+typedef HANDLE HDC;\r
+typedef HANDLE HDDEDATA;\r
+typedef HANDLE HDESK;\r
+typedef HANDLE HDROP;\r
+typedef HANDLE HDWP;\r
+typedef HANDLE HENHMETAFILE;\r
+typedef HANDLE HENV;\r
+typedef int HFILE;\r
+typedef HANDLE HFONT;\r
+typedef HANDLE HGDIOBJ;\r
+typedef HANDLE HGLOBAL;\r
+typedef HANDLE HGLRC;\r
+typedef HANDLE HHOOK;\r
+typedef HANDLE HICON;\r
+typedef HANDLE HIMAGELIST;\r
+typedef HANDLE HINSTANCE;\r
+typedef HANDLE HKEY, *PHKEY;\r
+typedef HANDLE HKL;\r
+typedef HANDLE HLOCAL;\r
+typedef HANDLE HMENU;\r
+typedef HANDLE HMETAFILE;\r
+typedef HANDLE HMODULE;\r
+typedef HANDLE HPALETTE;\r
+typedef HANDLE HPEN;\r
+typedef HANDLE HRASCONN;\r
+typedef long HRESULT;\r
+typedef HANDLE HRGN;\r
+typedef HANDLE HRSRC;\r
+typedef HANDLE HSTMT;\r
+typedef HANDLE HSZ;\r
+typedef HANDLE HWINSTA;\r
+typedef HANDLE HWND;\r
+typedef int INT;\r
+typedef unsigned short LANGID;\r
+typedef DWORD LCID;\r
+typedef DWORD LCTYPE;\r
+/* typedef LOCALHANDLE */\r
+typedef double LONGLONG, *PLONGLONG;\r
+typedef unsigned short *LP;\r
+typedef long LPARAM;\r
+typedef WINBOOL *LPBOOL;\r
+typedef BYTE *LPBYTE;\r
+typedef CONST CHAR *LPCCH;\r
+typedef CHAR *LPCH;\r
+typedef COLORREF *LPCOLORREF;\r
+typedef const char *LPCSTR;\r
+typedef char* PCSZ;\r
+ \r
+#ifdef UNICODE\r
+typedef const unsigned short *LPCTSTR;\r
+#else\r
+typedef const char *LPCTSTR;\r
+#endif /* UNICODE */\r
+\r
+typedef const unsigned short *LPCWCH;\r
+typedef const unsigned short *LPCWSTR;\r
+typedef DWORD *LPDWORD;\r
+/* typedef LPFRHOOKPROC; */\r
+typedef HANDLE *LPHANDLE;\r
+/* typedef LPHANDLER_FUNCTION; */\r
+typedef int *LPINT;\r
+typedef long *LPLONG;\r
+typedef char *LPSTR;\r
+\r
+#ifdef UNICODE\r
+typedef unsigned short *LPTCH;\r
+typedef unsigned short *LPTSTR;\r
+#else\r
+typedef char *LPTCH;\r
+typedef char *LPTSTR;\r
+#endif /* UNICODE */\r
+\r
+typedef long LRESULT;\r
+typedef void *LPVOID;\r
+typedef const void *LPCVOID;\r
+typedef unsigned short *LPWCH;\r
+typedef unsigned short *LPWORD;\r
+typedef unsigned short *LPWSTR;\r
+typedef unsigned short *PWSTR;\r
+/* typedef NPSTR; */\r
+typedef unsigned short *NWPSTR;\r
+typedef WINBOOL *PWINBOOL;\r
+typedef BYTE *PBOOLEAN;\r
+typedef BYTE *PBYTE;\r
+typedef const CHAR *PCCH;\r
+typedef CHAR *PCH;\r
+typedef CHAR *PCHAR;\r
+typedef const char *PCSTR;\r
+typedef const unsigned short *PCWCH;\r
+typedef const unsigned short *PCWSTR;\r
+typedef DWORD *PDWORD;\r
+typedef float *PFLOAT;\r
+typedef HANDLE *PHANDLE;\r
+/* typedef PHKEY; */\r
+typedef int *PINT;\r
+/* typedef LCID *PLCID; */\r
+typedef long *PLONG;\r
+typedef short *PSHORT;\r
+/* typedef PSID; */\r
+typedef char *PSTR;\r
+typedef char *PSZ;\r
+\r
+#ifdef UNICODE\r
+typedef unsigned short *PTBYTE;\r
+typedef unsigned short *PTCH;\r
+typedef unsigned short *PTCHAR;\r
+typedef unsigned short *PTSTR;\r
+#else\r
+typedef unsigned char *PTBYTE;\r
+typedef char *PTCH;\r
+typedef char *PTCHAR;\r
+typedef char *PTSTR;\r
+#endif /* UNICODE */\r
+\r
+typedef unsigned char *PUCHAR;\r
+typedef unsigned int *PUINT;\r
+typedef unsigned long *PULONG;\r
+typedef unsigned short *PUSHORT;\r
+typedef void *PVOID;\r
+typedef unsigned short *PWCH;\r
+typedef unsigned short *PWCHAR;\r
+typedef unsigned short *PWORD;\r
+/*\r
+typedef PWSTR;\r
+typedef REGSAM;\r
+*/\r
+\r
+typedef short RETCODE;\r
+\r
+typedef HANDLE SC_HANDLE;\r
+typedef LPVOID SC_LOCK;\r
+typedef SC_HANDLE *LPSC_HANDLE;\r
+typedef DWORD SERVICE_STATUS_HANDLE;\r
+/* typedef SPHANDLE; */\r
+\r
+#ifdef UNICODE\r
+typedef unsigned short TBYTE;\r
+typedef unsigned short TCHAR;\r
+typedef unsigned short BCHAR;\r
+#else\r
+typedef unsigned char TBYTE;\r
+typedef char TCHAR;\r
+typedef BYTE BCHAR;\r
+#endif /* UNICODE */\r
+\r
+typedef unsigned char UCHAR;\r
+typedef unsigned int UINT;\r
+typedef unsigned long ULONG;\r
+typedef unsigned short USHORT;\r
+typedef unsigned short WCHAR;\r
+typedef unsigned short WORD;\r
+typedef unsigned int WPARAM;\r
+/* typedef YIELDPROC; */\r
+\r
+/* Only use __stdcall under WIN32 compiler */\r
+#ifdef i386\r
+#define STDCALL __attribute__ ((stdcall))\r
+#define CDECL __attribute((cdecl))\r
+#define CALLBACK WINAPI\r
+#define PASCAL WINAPI\r
+#else\r
+#define STDCALL\r
+#define CDECL\r
+#define CALLBACK\r
+#define PASCAL\r
+#endif\r
+#define WINAPI STDCALL\r
+#define APIENTRY STDCALL\r
+#define WINGDIAPI\r
+\r
+#define _export\r
+\r
+/*\r
+ Enumerations\r
+*/\r
+typedef enum _ACL_INFORMATION_CLASS {\r
+ AclRevisionInformation = 1, \r
+ AclSizeInformation \r
+} ACL_INFORMATION_CLASS; \r
+ \r
+typedef enum _MEDIA_TYPE { \r
+ Unknown, \r
+ F5_1Pt2_512, \r
+ F3_1Pt44_512, \r
+ F3_2Pt88_512, \r
+ F3_20Pt8_512, \r
+ F3_720_512, \r
+ F5_360_512, \r
+ F5_320_512, \r
+ F5_320_1024, \r
+ F5_180_512, \r
+ F5_160_512, \r
+ RemovableMedia, \r
+ FixedMedia \r
+} MEDIA_TYPE; \r
+ \r
+#define RASCS_DONE 0x2000\r
+#define RASCS_PAUSED 0x1000\r
+typedef enum _RASCONNSTATE { \r
+ RASCS_OpenPort = 0, \r
+ RASCS_PortOpened, \r
+ RASCS_ConnectDevice, \r
+ RASCS_DeviceConnected, \r
+ RASCS_AllDevicesConnected, \r
+ RASCS_Authenticate, \r
+ RASCS_AuthNotify, \r
+ RASCS_AuthRetry, \r
+ RASCS_AuthCallback, \r
+ RASCS_AuthChangePassword, \r
+ RASCS_AuthProject, \r
+ RASCS_AuthLinkSpeed, \r
+ RASCS_AuthAck, \r
+ RASCS_ReAuthenticate, \r
+ RASCS_Authenticated, \r
+ RASCS_PrepareForCallback, \r
+ RASCS_WaitForModemReset, \r
+ RASCS_WaitForCallback,\r
+ RASCS_Projected, \r
+ \r
+ RASCS_StartAuthentication, \r
+ RASCS_CallbackComplete, \r
+ RASCS_LogonNetwork, \r
+ \r
+ RASCS_Interactive = RASCS_PAUSED, \r
+ RASCS_RetryAuthentication, \r
+ RASCS_CallbackSetByCaller, \r
+ RASCS_PasswordExpired, \r
+ \r
+ RASCS_Connected = RASCS_DONE, \r
+ RASCS_Disconnected \r
+} RASCONNSTATE ; \r
+ \r
+typedef enum _RASPROJECTION { \r
+ RASP_Amb = 0x10000, \r
+ RASP_PppNbf = 0x803F, \r
+ RASP_PppIpx = 0x802B, \r
+ RASP_PppIp = 0x8021 \r
+} RASPROJECTION ; \r
+ \r
+typedef enum _SECURITY_IMPERSONATION_LEVEL {\r
+ SecurityAnonymous, \r
+ SecurityIdentification, \r
+ SecurityImpersonation, \r
+ SecurityDelegation \r
+} SECURITY_IMPERSONATION_LEVEL; \r
+ \r
+typedef enum _SID_NAME_USE { \r
+ SidTypeUser = 1, \r
+ SidTypeGroup, \r
+ SidTypeDomain, \r
+ SidTypeAlias, \r
+ SidTypeWellKnownGroup, \r
+ SidTypeDeletedAccount, \r
+ SidTypeInvalid, \r
+ SidTypeUnknown \r
+} SID_NAME_USE, *PSID_NAME_USE; \r
+ \r
+typedef enum _TOKEN_INFORMATION_CLASS {\r
+ TokenUser = 1, \r
+ TokenGroups, \r
+ TokenPrivileges, \r
+ TokenOwner, \r
+ TokenPrimaryGroup, \r
+ TokenDefaultDacl, \r
+ TokenSource, \r
+ TokenType, \r
+ TokenImpersonationLevel, \r
+ TokenStatistics \r
+} TOKEN_INFORMATION_CLASS; \r
+ \r
+typedef enum tagTOKEN_TYPE {\r
+ TokenPrimary = 1, \r
+ TokenImpersonation \r
+} TOKEN_TYPE; \r
+ \r
+#endif /* ! defined (RC_INVOKED) */\r
+\r
+/*\r
+ Macros\r
+*/\r
+#define FORWARD_WM_NOTIFY(hwnd, idFrom, pnmhdr, fn) (void)(fn)((hwnd), WM_NOTIFY, (WPARAM)(int)(id), (LPARAM)(NMHDR FAR*)(pnmhdr)) \r
+\r
+#define GetBValue(rgb) ((BYTE) ((rgb) >> 16)) \r
+#define GetGValue(rgb) ((BYTE) (((WORD) (rgb)) >> 8)) \r
+#define GetRValue(rgb) ((BYTE) (rgb)) \r
+#define RGB(r, g ,b) ((DWORD) (((BYTE) (r) | ((WORD) (g) << 8)) | (((DWORD) (BYTE) (b)) << 16))) \r
+\r
+#define HANDLE_WM_NOTIFY(hwnd, wParam, lParam, fn) (fn)((hwnd), (int)(wParam), (NMHDR FAR*)(lParam)) \r
+\r
+#define HIBYTE(w) ((BYTE) (((WORD) (w) >> 8) & 0xFF)) \r
+#define HIWORD(l) ((WORD) (((DWORD) (l) >> 16) & 0xFFFF)) \r
+#define LOBYTE(w) ((BYTE) (w)) \r
+#define LOWORD(l) ((WORD) (l)) \r
+#define MAKELONG(a, b) ((LONG) (((WORD) (a)) | ((DWORD) ((WORD) (b))) << 16)) \r
+#define MAKEWORD(a, b) ((WORD) (((BYTE) (a)) | ((WORD) ((BYTE) (b))) << 8)) \r
+\r
+/* original Cygnus headers also had the following defined: */\r
+#define SEXT_HIWORD(l) ((((int)l) >> 16))\r
+#define ZEXT_HIWORD(l) ((((unsigned int)l) >> 16))\r
+#define SEXT_LOWORD(l) ((int)(short)l)\r
+\r
+#define INDEXTOOVERLAYMASK(i) ((i) << 8) \r
+#define INDEXTOSTATEIMAGEMASK(i) ((i) << 12) \r
+\r
+#define MAKEINTATOM(i) (LPTSTR) ((DWORD) ((WORD) (i))) \r
+#define MAKEINTRESOURCE(i) (LPTSTR) ((DWORD) ((WORD) (i)))\r
+\r
+#define MAKELANGID(p, s) ((((WORD) (s)) << 10) | (WORD) (p)) \r
+#define PRIMARYLANGID(lgid) ((WORD )(lgid) & 0x3ff) \r
+#define SUBLANGID(lgid) ((WORD )(lgid) >> 10) \r
+\r
+#define LANGIDFROMLCID(lcid) ((WORD) (lcid)) \r
+#define SORTIDFROMLCID(lcid) ((WORD )((((DWORD)(lcid)) & 0x000FFFFF) >> 16)) \r
+#define MAKELCID(lgid, srtid) ((DWORD)((((DWORD)((WORD)(srtid))) << 16) | ((DWORD)((WORD)(lgid))))) \r
+#define MAKELPARAM(l, h) ((LPARAM) MAKELONG(l, h)) \r
+#define MAKELRESULT(l, h) ((LRESULT) MAKELONG(l, h)) \r
+#define MAKEPOINTS(l) (*((POINTS FAR *) & (l))) \r
+#define MAKEROP4(fore,back) (DWORD)((((back) << 8) & 0xFF000000) | (fore)) \r
+#define MAKEWPARAM(l, h) ((WPARAM) MAKELONG(l, h)) \r
+\r
+#ifndef max\r
+#define max(a, b) (((a) > (b)) ? (a) : (b)) \r
+#endif\r
+\r
+#ifndef min\r
+#define min(a, b) (((a) < (b)) ? (a) : (b)) \r
+#endif\r
+\r
+#define PALETTEINDEX(i) ((COLORREF) (0x01000000 | (DWORD) (WORD) (i))) \r
+#define PALETTERGB(r, g, b) (0x02000000 | RGB(r, g, b)) \r
+#define POINTSTOPOINT(pt, pts) {(pt).x = (SHORT) LOWORD(pts); (pt).y = (SHORT) HIWORD(pts);} \r
+#define POINTTOPOINTS(pt) (MAKELONG((short) ((pt).x), (short) ((pt).y))) \r
+\r
+#define INDEXTOOVERLAYMASK(i) ((i) << 8) \r
+#define INDEXTOSTATEIMAGEMASK(i) ((i) << 12) \r
+\r
+#ifdef UNICODE\r
+#define TEXT(quote) L##quote \r
+#else\r
+#define TEXT(quote) quote\r
+#endif\r
+\r
+#ifndef RC_INVOKED\r
+\r
+/*\r
+ Definitions for callback procedures\r
+*/\r
+typedef int CALLBACK (*BFFCALLBACK) (HWND, UINT, LPARAM, LPARAM);\r
+typedef UINT CALLBACK (*LPCCHOOKPROC) (HWND, UINT, WPARAM, LPARAM);\r
+typedef UINT CALLBACK (*LPCFHOOKPROC) (HWND, UINT, WPARAM, LPARAM);\r
+typedef DWORD CALLBACK (*PTHREAD_START_ROUTINE) (LPVOID);\r
+typedef PTHREAD_START_ROUTINE LPTHREAD_START_ROUTINE;\r
+typedef DWORD CALLBACK (*EDITSTREAMCALLBACK) (DWORD, LPBYTE, LONG, LONG);\r
+typedef UINT CALLBACK (*LPFRHOOKPROC) (HWND, UINT, WPARAM, LPARAM);\r
+typedef UINT CALLBACK (*LPOFNHOOKPROC) (HWND, UINT, WPARAM, LPARAM);\r
+typedef UINT CALLBACK (*LPPRINTHOOKPROC) (HWND, UINT, WPARAM, LPARAM);\r
+typedef UINT CALLBACK (*LPSETUPHOOKPROC) (HWND, UINT, WPARAM, LPARAM);\r
+typedef WINBOOL CALLBACK (*DLGPROC) (HWND, UINT, WPARAM, LPARAM);\r
+typedef int CALLBACK (*PFNPROPSHEETCALLBACK) (HWND, UINT, LPARAM);\r
+typedef VOID CALLBACK (*LPSERVICE_MAIN_FUNCTION) (DWORD, LPTSTR);\r
+typedef int CALLBACK (*PFNTVCOMPARE) (LPARAM, LPARAM, LPARAM);\r
+typedef LRESULT CALLBACK (*WNDPROC) (HWND, UINT, WPARAM, LPARAM);\r
+typedef int CALLBACK (*FARPROC)(void);\r
+typedef FARPROC PROC;\r
+typedef WINBOOL CALLBACK (*ENUMRESTYPEPROC) (HANDLE, LPTSTR, LONG);\r
+typedef WINBOOL CALLBACK (*ENUMRESNAMEPROC) (HANDLE, LPCTSTR, LPTSTR, LONG);\r
+typedef WINBOOL CALLBACK (*ENUMRESLANGPROC) (HANDLE, LPCTSTR, LPCTSTR, WORD, LONG);\r
+typedef FARPROC DESKTOPENUMPROC;\r
+typedef WINBOOL CALLBACK (*ENUMWINDOWSPROC) (HWND, LPARAM);\r
+typedef WINBOOL CALLBACK (*ENUMWINDOWSTATIONPROC) (LPTSTR, LPARAM);\r
+typedef VOID CALLBACK (*SENDASYNCPROC) (HWND, UINT, DWORD, LRESULT);\r
+typedef VOID CALLBACK (*TIMERPROC) (HWND, UINT, UINT, DWORD);\r
+typedef FARPROC GRAYSTRINGPROC;\r
+typedef WINBOOL CALLBACK (*DRAWSTATEPROC) (HDC, LPARAM, WPARAM, int, int);\r
+typedef WINBOOL CALLBACK (*PROPENUMPROCEX) (HWND, LPCTSTR, HANDLE, DWORD);\r
+typedef WINBOOL CALLBACK (*PROPENUMPROC) (HWND, LPCTSTR, HANDLE);\r
+typedef LRESULT CALLBACK (*HOOKPROC) (int, WPARAM, LPARAM);\r
+typedef VOID CALLBACK (*ENUMOBJECTSPROC) (LPVOID, LPARAM);\r
+typedef VOID CALLBACK (*LINEDDAPROC) (int, int, LPARAM);\r
+typedef WINBOOL CALLBACK (*ABORTPROC) (HDC, int);\r
+typedef UINT CALLBACK (*LPPAGEPAINTHOOK) (HWND, UINT, WPARAM, LPARAM );\r
+typedef UINT CALLBACK (*LPPAGESETUPHOOK) (HWND, UINT, WPARAM, LPARAM );\r
+typedef int CALLBACK (*ICMENUMPROC) (LPTSTR, LPARAM);\r
+typedef LONG (*EDITWORDBREAKPROCEX) (char *, LONG, BYTE, INT);\r
+typedef int CALLBACK (*PFNLVCOMPARE) (LPARAM, LPARAM, LPARAM);\r
+typedef WINBOOL CALLBACK (*LOCALE_ENUMPROC) (LPTSTR);\r
+typedef WINBOOL CALLBACK (*CODEPAGE_ENUMPROC) (LPTSTR);\r
+typedef WINBOOL CALLBACK (*DATEFMT_ENUMPROC) (LPTSTR);\r
+typedef WINBOOL CALLBACK (*TIMEFMT_ENUMPROC) (LPTSTR);\r
+typedef WINBOOL CALLBACK (*CALINFO_ENUMPROC) (LPTSTR);\r
+typedef WINBOOL CALLBACK (*PHANDLER_ROUTINE) (DWORD);\r
+typedef WINBOOL CALLBACK (*LPHANDLER_FUNCTION) (DWORD);\r
+typedef UINT CALLBACK (*PFNGETPROFILEPATH) (LPCTSTR, LPSTR, UINT);\r
+typedef UINT CALLBACK (*PFNRECONCILEPROFILE) (LPCTSTR, LPCTSTR, DWORD);\r
+typedef WINBOOL CALLBACK (*PFNPROCESSPOLICIES) (HWND, LPCTSTR, LPCTSTR, LPCTSTR, DWORD);\r
+\r
+#define SECURITY_NULL_SID_AUTHORITY {0,0,0,0,0,0}\r
+#define SECURITY_WORLD_SID_AUTHORITY {0,0,0,0,0,1}\r
+#define SECURITY_LOCAL_SID_AUTHORITY {0,0,0,0,0,2}\r
+#define SECURITY_CREATOR_SID_AUTHORITY {0,0,0,0,0,3}\r
+#define SECURITY_NON_UNIQUE_AUTHORITY {0,0,0,0,0,4}\r
+#define SECURITY_NT_AUTHORITY {0,0,0,0,0,5}\r
+\r
+#define SE_CREATE_TOKEN_NAME TEXT("SeCreateTokenPrivilege")\r
+#define SE_ASSIGNPRIMARYTOKEN_NAME TEXT("SeAssignPrimaryTokenPrivilege")\r
+#define SE_LOCK_MEMORY_NAME TEXT("SeLockMemoryPrivilege")\r
+#define SE_INCREASE_QUOTA_NAME TEXT("SeIncreaseQuotaPrivilege")\r
+#define SE_UNSOLICITED_INPUT_NAME TEXT("SeUnsolicitedInputPrivilege")\r
+#define SE_MACHINE_ACCOUNT_NAME TEXT("SeMachineAccountPrivilege")\r
+#define SE_TCB_NAME TEXT("SeTcbPrivilege")\r
+#define SE_SECURITY_NAME TEXT("SeSecurityPrivilege")\r
+#define SE_TAKE_OWNERSHIP_NAME TEXT("SeTakeOwnershipPrivilege")\r
+#define SE_LOAD_DRIVER_NAME TEXT("SeLoadDriverPrivilege")\r
+#define SE_SYSTEM_PROFILE_NAME TEXT("SeSystemProfilePrivilege")\r
+#define SE_SYSTEMTIME_NAME TEXT("SeSystemtimePrivilege")\r
+#define SE_PROF_SINGLE_PROCESS_NAME TEXT("SeProfileSingleProcessPrivilege")\r
+#define SE_INC_BASE_PRIORITY_NAME TEXT("SeIncreaseBasePriorityPrivilege")\r
+#define SE_CREATE_PAGEFILE_NAME TEXT("SeCreatePagefilePrivilege")\r
+#define SE_CREATE_PERMANENT_NAME TEXT("SeCreatePermanentPrivilege")\r
+#define SE_BACKUP_NAME TEXT("SeBackupPrivilege")\r
+#define SE_RESTORE_NAME TEXT("SeRestorePrivilege")\r
+#define SE_SHUTDOWN_NAME TEXT("SeShutdownPrivilege")\r
+#define SE_DEBUG_NAME TEXT("SeDebugPrivilege")\r
+#define SE_AUDIT_NAME TEXT("SeAuditPrivilege")\r
+#define SE_SYSTEM_ENVIRONMENT_NAME TEXT("SeSystemEnvironmentPrivilege")\r
+#define SE_CHANGE_NOTIFY_NAME TEXT("SeChangeNotifyPrivilege")\r
+#define SE_REMOTE_SHUTDOWN_NAME TEXT("SeRemoteShutdownPrivilege")\r
+\r
+#define SERVICES_ACTIVE_DATABASEW L"ServicesActive"\r
+#define SERVICES_FAILED_DATABASEW L"ServicesFailed"\r
+#define SERVICES_ACTIVE_DATABASEA "ServicesActive"\r
+#define SERVICES_FAILED_DATABASEA "ServicesFailed"\r
+#define SC_GROUP_IDENTIFIERW L'+'\r
+#define SC_GROUP_IDENTIFIERA '+'\r
+\r
+#ifdef UNICODE\r
+#define SERVICES_ACTIVE_DATABASE SERVICES_ACTIVE_DATABASEW\r
+#define SERVICES_FAILED_DATABASE SERVICES_FAILED_DATABASEW\r
+#define SC_GROUP_IDENTIFIER SC_GROUP_IDENTIFIERW\r
+#else \r
+#define SERVICES_ACTIVE_DATABASE SERVICES_ACTIVE_DATABASEA\r
+#define SERVICES_FAILED_DATABASE SERVICES_FAILED_DATABASEA\r
+#define SC_GROUP_IDENTIFIER SC_GROUP_IDENTIFIERA\r
+#endif /* UNICODE */\r
+\r
+/* ---------------------------------- */\r
+/* From ddeml.h in old Cygnus headers */\r
+\r
+typedef void (*CALLB) (void);\r
+typedef CALLB PFNCALLBACK;\r
+\r
+typedef WINBOOL SECURITY_CONTEXT_TRACKING_MODE;\r
+\r
+/* End of stuff from ddeml.h in old Cygnus headers */\r
+/* ----------------------------------------------- */\r
+\r
+typedef FARPROC WNDENUMPROC;\r
+typedef FARPROC ENHMFENUMPROC;\r
+typedef DWORD CCSTYLE, *PCCSTYLE, *LPCCSTYLE;\r
+typedef DWORD CCSTYLEFLAGA, *PCCSTYLEFLAGA, *LPCCSTYLEFLAGA;\r
+#define DECLARE_HANDLE(s) typedef HANDLE s\r
+\r
+#endif /* ! defined (RC_INVOKED) */\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif /* __cplusplus */\r
+\r
+#endif /* _GNU_H_WINDOWS32_BASE */\r
--- /dev/null
+/* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */\r
+#ifndef __dj_include_coff_h_\r
+#define __dj_include_coff_h_\r
+\r
+#ifdef __cplusplus\r
+extern "C" {\r
+#endif\r
+\r
+//#ifndef __dj_ENFORCE_ANSI_FREESTANDING\r
+\r
+//#ifndef __STRICT_ANSI__\r
+\r
+//#ifndef _POSIX_SOURCE\r
+\r
+/*** coff information for Intel 386/486. */\r
+\r
+/********************** FILE HEADER **********************/\r
+\r
+struct external_filehdr {\r
+ unsigned short f_magic; /* magic number */\r
+ unsigned short f_nscns; /* number of sections */\r
+ unsigned long f_timdat; /* time & date stamp */\r
+ unsigned long f_symptr; /* file pointer to symtab */\r
+ unsigned long f_nsyms; /* number of symtab entries */\r
+ unsigned short f_opthdr; /* sizeof(optional hdr) */\r
+ unsigned short f_flags; /* flags */\r
+};\r
+\r
+\r
+/* Bits for f_flags:\r
+ * F_RELFLG relocation info stripped from file\r
+ * F_EXEC file is executable (no unresolved external references)\r
+ * F_LNNO line numbers stripped from file\r
+ * F_LSYMS local symbols stripped from file\r
+ * F_AR32WR file has byte ordering of an AR32WR machine (e.g. vax)\r
+ */\r
+\r
+#define F_RELFLG (0x0001)\r
+#define F_EXEC (0x0002)\r
+#define F_LNNO (0x0004)\r
+#define F_LSYMS (0x0008)\r
+\r
+\r
+\r
+#define I386MAGIC 0x14c\r
+#define I386AIXMAGIC 0x175\r
+#define I386BADMAG(x) (((x).f_magic!=I386MAGIC) && (x).f_magic!=I386AIXMAGIC)\r
+\r
+\r
+#define FILHDR struct external_filehdr\r
+#define FILHSZ sizeof(FILHDR)\r
+\r
+\r
+/********************** AOUT "OPTIONAL HEADER" **********************/\r
+\r
+\r
+typedef struct \r
+{\r
+ unsigned short magic; /* type of file */\r
+ unsigned short vstamp; /* version stamp */\r
+ unsigned long tsize; /* text size in bytes, padded to FW bdry*/\r
+ unsigned long dsize; /* initialized data " " */\r
+ unsigned long bsize; /* uninitialized data " " */\r
+ unsigned long entry; /* entry pt. */\r
+ unsigned long text_start; /* base of text used for this file */\r
+ unsigned long data_start; /* base of data used for this file */\r
+}\r
+AOUTHDR;\r
+\r
+\r
+typedef struct gnu_aout {\r
+ unsigned long info;\r
+ unsigned long tsize;\r
+ unsigned long dsize;\r
+ unsigned long bsize;\r
+ unsigned long symsize;\r
+ unsigned long entry;\r
+ unsigned long txrel;\r
+ unsigned long dtrel;\r
+ } GNU_AOUT;\r
+\r
+#define AOUTSZ (sizeof(AOUTHDR))\r
+\r
+#define OMAGIC 0404 /* object files, eg as output */\r
+#define ZMAGIC 0413 /* demand load format, eg normal ld output */\r
+#define STMAGIC 0401 /* target shlib */\r
+#define SHMAGIC 0443 /* host shlib */\r
+\r
+\r
+/********************** SECTION HEADER **********************/\r
+\r
+\r
+struct external_scnhdr {\r
+ char s_name[8]; /* section name */\r
+ unsigned long s_paddr; /* physical address, aliased s_nlib */\r
+ unsigned long s_vaddr; /* virtual address */\r
+ unsigned long s_size; /* section size */\r
+ unsigned long s_scnptr; /* file ptr to raw data for section */\r
+ unsigned long s_relptr; /* file ptr to relocation */\r
+ unsigned long s_lnnoptr; /* file ptr to line numbers */\r
+ unsigned short s_nreloc; /* number of relocation entries */\r
+ unsigned short s_nlnno; /* number of line number entries*/\r
+ unsigned long s_flags; /* flags */\r
+};\r
+\r
+#define SCNHDR struct external_scnhdr\r
+#define SCNHSZ sizeof(SCNHDR)\r
+\r
+/*\r
+ * names of "special" sections\r
+ */\r
+#define _TEXT ".text"\r
+#define _DATA ".data"\r
+#define _BSS ".bss"\r
+#define _COMMENT ".comment"\r
+#define _LIB ".lib"\r
+\r
+/*\r
+ * s_flags "type"\r
+ */\r
+#define STYP_TEXT (0x0020) /* section contains text only */\r
+#define STYP_DATA (0x0040) /* section contains data only */\r
+#define STYP_BSS (0x0080) /* section contains bss only */\r
+\r
+/********************** LINE NUMBERS **********************/\r
+\r
+/* 1 line number entry for every "breakpointable" source line in a section.\r
+ * Line numbers are grouped on a per function basis; first entry in a function\r
+ * grouping will have l_lnno = 0 and in place of physical address will be the\r
+ * symbol table index of the function name.\r
+ */\r
+struct external_lineno {\r
+ union {\r
+ unsigned long l_symndx __attribute__((packed)); /* function name symbol index, iff l_lnno == 0 */\r
+ unsigned long l_paddr __attribute__((packed)); /* (physical) address of line number */\r
+ } l_addr;\r
+ unsigned short l_lnno; /* line number */\r
+};\r
+\r
+\r
+#define LINENO struct external_lineno\r
+#define LINESZ sizeof(LINENO)\r
+\r
+\r
+/********************** SYMBOLS **********************/\r
+\r
+#define E_SYMNMLEN 8 /* # characters in a symbol name */\r
+#define E_FILNMLEN 14 /* # characters in a file name */\r
+#define E_DIMNUM 4 /* # array dimensions in auxiliary entry */\r
+\r
+struct external_syment \r
+{\r
+ union {\r
+ char e_name[E_SYMNMLEN];\r
+ struct {\r
+ unsigned long e_zeroes __attribute__((packed));\r
+ unsigned long e_offset __attribute__((packed));\r
+ } e;\r
+ } e;\r
+ unsigned long e_value __attribute__((packed));\r
+ short e_scnum;\r
+ unsigned short e_type;\r
+ unsigned char e_sclass;\r
+ unsigned char e_numaux;\r
+};\r
+\r
+#define N_BTMASK (0xf)\r
+#define N_TMASK (0x30)\r
+#define N_BTSHFT (4)\r
+#define N_TSHIFT (2)\r
+ \r
+union external_auxent {\r
+ struct {\r
+ unsigned long x_tagndx __attribute__((packed)); /* str, un, or enum tag indx */\r
+ union {\r
+ struct {\r
+ unsigned short x_lnno; /* declaration line number */\r
+ unsigned short x_size; /* str/union/array size */\r
+ } x_lnsz;\r
+ unsigned long x_fsize __attribute__((packed)); /* size of function */\r
+ } x_misc;\r
+ union {\r
+ struct { /* if ISFCN, tag, or .bb */\r
+ unsigned long x_lnnoptr __attribute__((packed)); /* ptr to fcn line # */\r
+ unsigned long x_endndx __attribute__((packed)); /* entry ndx past block end */\r
+ } x_fcn;\r
+ struct { /* if ISARY, up to 4 dimen. */\r
+ unsigned short x_dimen[E_DIMNUM];\r
+ } x_ary;\r
+ } x_fcnary;\r
+ unsigned short x_tvndx; /* tv index */\r
+ } x_sym;\r
+\r
+ union {\r
+ char x_fname[E_FILNMLEN];\r
+ struct {\r
+ unsigned long x_zeroes __attribute__((packed));\r
+ unsigned long x_offset __attribute__((packed));\r
+ } x_n;\r
+ } x_file;\r
+\r
+ struct {\r
+ unsigned long x_scnlen __attribute__((packed)); /* section length */\r
+ unsigned short x_nreloc; /* # relocation entries */\r
+ unsigned short x_nlinno; /* # line numbers */\r
+ } x_scn;\r
+\r
+ struct {\r
+ unsigned long x_tvfill __attribute__((packed)); /* tv fill value */\r
+ unsigned short x_tvlen; /* length of .tv */\r
+ unsigned short x_tvran[2]; /* tv range */\r
+ } x_tv; /* info about .tv section (in auxent of symbol .tv)) */\r
+\r
+\r
+};\r
+\r
+#define SYMENT struct external_syment\r
+#define SYMESZ sizeof(SYMENT)\r
+#define AUXENT union external_auxent\r
+#define AUXESZ sizeof(AUXENT)\r
+\r
+\r
+# define _ETEXT "etext"\r
+\r
+\r
+/* Relocatable symbols have number of the section in which they are defined,\r
+ or one of the following: */\r
+\r
+#define N_UNDEF ((short)0) /* undefined symbol */\r
+#define N_ABS ((short)-1) /* value of symbol is absolute */\r
+#define N_DEBUG ((short)-2) /* debugging symbol -- value is meaningless */\r
+#define N_TV ((short)-3) /* indicates symbol needs preload transfer vector */\r
+#define P_TV ((short)-4) /* indicates symbol needs postload transfer vector*/\r
+\r
+/*\r
+ * Type of a symbol, in low N bits of the word\r
+ */\r
+#define T_NULL 0\r
+#define T_VOID 1 /* function argument (only used by compiler) */\r
+#define T_CHAR 2 /* character */\r
+#define T_SHORT 3 /* short integer */\r
+#define T_INT 4 /* integer */\r
+#define T_LONG 5 /* long integer */\r
+#define T_FLOAT 6 /* floating point */\r
+#define T_DOUBLE 7 /* double word */\r
+#define T_STRUCT 8 /* structure */\r
+#define T_UNION 9 /* union */\r
+#define T_ENUM 10 /* enumeration */\r
+#define T_MOE 11 /* member of enumeration*/\r
+#define T_UCHAR 12 /* unsigned character */\r
+#define T_USHORT 13 /* unsigned short */\r
+#define T_UINT 14 /* unsigned integer */\r
+#define T_ULONG 15 /* unsigned long */\r
+#define T_LNGDBL 16 /* long double */\r
+\r
+/*\r
+ * derived types, in n_type\r
+*/\r
+#define DT_NON (0) /* no derived type */\r
+#define DT_PTR (1) /* pointer */\r
+#define DT_FCN (2) /* function */\r
+#define DT_ARY (3) /* array */\r
+\r
+#define BTYPE(x) ((x) & N_BTMASK)\r
+\r
+#define ISPTR(x) (((x) & N_TMASK) == (DT_PTR << N_BTSHFT))\r
+#define ISFCN(x) (((x) & N_TMASK) == (DT_FCN << N_BTSHFT))\r
+#define ISARY(x) (((x) & N_TMASK) == (DT_ARY << N_BTSHFT))\r
+#define ISTAG(x) ((x)==C_STRTAG||(x)==C_UNTAG||(x)==C_ENTAG)\r
+#define DECREF(x) ((((x)>>N_TSHIFT)&~N_BTMASK)|((x)&N_BTMASK))\r
+\r
+/********************** STORAGE CLASSES **********************/\r
+\r
+/* This used to be defined as -1, but now n_sclass is unsigned. */\r
+#define C_EFCN 0xff /* physical end of function */\r
+#define C_NULL 0\r
+#define C_AUTO 1 /* automatic variable */\r
+#define C_EXT 2 /* external symbol */\r
+#define C_STAT 3 /* static */\r
+#define C_REG 4 /* register variable */\r
+#define C_EXTDEF 5 /* external definition */\r
+#define C_LABEL 6 /* label */\r
+#define C_ULABEL 7 /* undefined label */\r
+#define C_MOS 8 /* member of structure */\r
+#define C_ARG 9 /* function argument */\r
+#define C_STRTAG 10 /* structure tag */\r
+#define C_MOU 11 /* member of union */\r
+#define C_UNTAG 12 /* union tag */\r
+#define C_TPDEF 13 /* type definition */\r
+#define C_USTATIC 14 /* undefined static */\r
+#define C_ENTAG 15 /* enumeration tag */\r
+#define C_MOE 16 /* member of enumeration */\r
+#define C_REGPARM 17 /* register parameter */\r
+#define C_FIELD 18 /* bit field */\r
+#define C_AUTOARG 19 /* auto argument */\r
+#define C_LASTENT 20 /* dummy entry (end of block) */\r
+#define C_BLOCK 100 /* ".bb" or ".eb" */\r
+#define C_FCN 101 /* ".bf" or ".ef" */\r
+#define C_EOS 102 /* end of structure */\r
+#define C_FILE 103 /* file name */\r
+#define C_LINE 104 /* line # reformatted as symbol table entry */\r
+#define C_ALIAS 105 /* duplicate tag */\r
+#define C_HIDDEN 106 /* ext symbol in dmert public lib */\r
+\r
+/********************** RELOCATION DIRECTIVES **********************/\r
+\r
+\r
+\r
+struct external_reloc {\r
+ unsigned long r_vaddr __attribute__((packed));\r
+ unsigned long r_symndx __attribute__((packed));\r
+ unsigned short r_type;\r
+};\r
+\r
+\r
+#define RELOC struct external_reloc\r
+#define RELSZ sizeof(RELOC)\r
+\r
+#define RELOC_REL32 20 /* 32-bit PC-relative address */\r
+#define RELOC_ADDR32 6 /* 32-bit absolute address */\r
+\r
+#define DEFAULT_DATA_SECTION_ALIGNMENT 4\r
+#define DEFAULT_BSS_SECTION_ALIGNMENT 4\r
+#define DEFAULT_TEXT_SECTION_ALIGNMENT 4\r
+/* For new sections we havn't heard of before */\r
+#define DEFAULT_SECTION_ALIGNMENT 4\r
+\r
+//#endif /* !_POSIX_SOURCE */\r
+//#endif /* !__STRICT_ANSI__ */\r
+//#endif /* !__dj_ENFORCE_ANSI_FREESTANDING */\r
+\r
+#ifndef __dj_ENFORCE_FUNCTION_CALLS\r
+#endif /* !__dj_ENFORCE_FUNCTION_CALLS */\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif\r
+\r
+#endif /* !__dj_include_coff_h_ */\r
--- /dev/null
+
+// registry key structures
+
+
+typedef struct _KEY_BASIC_INFORMATION {
+ LARGE_INTEGER LastWriteTime;
+ ULONG TitleIndex;
+ ULONG NameLength;
+ WCHAR Name[1]; // variable size
+} KEY_BASIC_INFORMATION, *PKEY_BASIC_INFORMATION;
+
+typedef struct _KEY_NODE_INFORMATION {
+ LARGE_INTEGER LastWriteTime;
+ ULONG TitleIndex;
+ ULONG ClassOffset;
+ ULONG ClassLength;
+ ULONG NameLength;
+ WCHAR Name[1]; // variable size
+} KEY_NODE_INFORMATION, *PKEY_NODE_INFORMATION;
+
+typedef struct _KEY_FULL_INFORMATION {
+ LARGE_INTEGER LastWriteTime;
+ ULONG TitleIndex;
+ ULONG ClassOffset;
+ ULONG ClassLength;
+ ULONG SubKeys;
+ ULONG MaxNameLen;
+ ULONG MaxClassLen;
+ ULONG Values;
+ ULONG MaxValueNameLen;
+ ULONG MaxValueDataLen;
+ WCHAR Class[1]; // variable size
+} KEY_FULL_INFORMATION, *PKEY_FULL_INFORMATION;
+
+
+typedef struct _KEY_WRITE_TIME_INFORMATION {
+ LARGE_INTEGER LastWriteTime;
+} KEY_WRITE_TIME_INFORMATION, *PKEY_WRITE_TIME_INFORMATION;
+
+
+// key query value structures
+
+typedef struct _KEY_VALUE_BASIC_INFORMATION {
+ ULONG TitleIndex;
+ ULONG Type;
+ ULONG NameLength;
+ WCHAR Name[1]; // variable size
+} KEY_VALUE_BASIC_INFORMATION, *PKEY_VALUE_BASIC_INFORMATION;
+
+typedef struct _KEY_VALUE_FULL_INFORMATION {
+ ULONG TitleIndex;
+ ULONG Type;
+ ULONG DataOffset;
+ ULONG DataLength;
+ ULONG NameLength;
+ WCHAR Name[1]; // variable size
+} KEY_VALUE_FULL_INFORMATION, *PKEY_VALUE_FULL_INFORMATION;
+
+typedef struct _KEY_VALUE_PARTIAL_INFORMATION {
+ ULONG TitleIndex;
+ ULONG Type;
+ ULONG DataLength;
+ UCHAR Data[1]; // variable size
+} KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION;
+
+typedef struct _KEY_VALUE_ENTRY {
+ PUNICODE_STRING ValueName;
+ ULONG DataLength;
+ ULONG DataOffset;
+ ULONG Type;
+} KEY_VALUE_ENTRY, *PKEY_VALUE_ENTRY;
+
--- /dev/null
+/* GENERAL DEFINITIONS ****************************************************/\r
+\r
+#include <internal/hal/irq.h>\r
+\r
+\r
+\r
+/*\r
+ * PURPOSE: Number of a thread priority levels\r
+ */\r
+#define NR_PRIORITY_LEVELS (32)\r
+\r
+/*\r
+ * PURPOSE: Type of queue to insert a work item in\r
+ */\r
+enum\r
+{\r
+ CriticalWorkQueue,\r
+ DelayedWorkQueue,\r
+ HyperCriticalWorkQueue,\r
+};\r
+\r
+/*\r
+ * Types of memory to allocate\r
+ */\r
+enum\r
+{\r
+ NonPagedPool,\r
+ NonPagedPoolMustSucceed,\r
+ NonPagedPoolCacheAligned,\r
+ NonPagedPoolCacheAlignedMustS,\r
+ PagedPool,\r
+ PagedPoolCacheAligned,\r
+};\r
+\r
+/*\r
+ * PURPOSE: Irp flags\r
+ */\r
+enum\r
+{\r
+ /*\r
+ * Read any data from the actual backing media\r
+ */\r
+ IRP_NOCACHE,\r
+ \r
+ /*\r
+ * The I/O operation is performing paging\r
+ */\r
+ IRP_PAGING_IO,\r
+ \r
+ /*\r
+ * The IRP is for a mount operation\r
+ */\r
+ IRP_MOUNT_COMPLETION,\r
+ \r
+ /*\r
+ * The API expects synchronous behaviour\r
+ */\r
+ IRP_SYNCHRONOUS_API,\r
+ \r
+ /*\r
+ * The IRP is associated with a larger operation\r
+ */\r
+ IRP_ASSOCIATED_IRP,\r
+ \r
+ /*\r
+ * The AssociatedIrp.SystemBuffer field is valid\r
+ */\r
+ IRP_BUFFERED_IO,\r
+ \r
+ /*\r
+ * The system buffer was allocated from pool and should be deallocated \r
+ * by the I/O manager\r
+ */\r
+ IRP_DEALLOCATE_BUFFER,\r
+ \r
+ /*\r
+ * The IRP is for an input operation\r
+ */\r
+ IRP_INPUT_OPERATION,\r
+ \r
+ /*\r
+ * The paging operation should complete synchronously \r
+ */\r
+ IRP_SYNCHRONOUS_PAGING_IO,\r
+ \r
+ /*\r
+ * The IRP represents a filesystem create operation\r
+ */\r
+ IRP_CREATE_OPERATION,\r
+ \r
+ /*\r
+ * The IRP represents a filesystem read operation\r
+ */\r
+ IRP_READ_OPERATION,\r
+ \r
+ /*\r
+ * The IRP represents a filesystem write operation\r
+ */\r
+ IRP_WRITE_OPERATION,\r
+ \r
+ /*\r
+ * The IRP represents a filesystem close operation\r
+ */\r
+ IRP_CLOSE_OPERATION,\r
+ \r
+ /*\r
+ * Asynchronous behavior is advised but not required\r
+ */\r
+ IRP_DEFER_IO_COMPLETION,\r
+};\r
+\r
+/*\r
+ * I/O operation flags\r
+ */\r
+enum\r
+{\r
+ /*\r
+ * Force an access check even if opened in kernel mode\r
+ */\r
+ SL_FORCE_ACCESS_CHECK,\r
+ \r
+ /*\r
+ * The file being opened is a paging file\r
+ */\r
+ SL_OPEN_PAGING_FILE,\r
+ \r
+ SL_OPEN_TARGET_DIRECTORY,\r
+ \r
+ SL_CASE_SENSITIVE,\r
+ \r
+ SL_KEY_SPECIFIED,\r
+ \r
+ SL_OVERRIDE_VERIFY_VOLUME,\r
+ \r
+ SL_WRITE_THROUGH,\r
+ \r
+ SL_FT_SEQUENTIAL_WRITE,\r
+ \r
+ SL_FAIL_IMMEDIATELY,\r
+ \r
+ SL_EXCLUSIVE_LOCK,\r
+ \r
+ SL_RESTART_SCAN,\r
+ \r
+ SL_RETURN_SINGLE_ENTRY,\r
+ \r
+ SL_INDEX_SPECIFIED,\r
+ \r
+ SL_WATCH_TREE,\r
+ \r
+ SL_ALLOW_RAW_MOUNT, \r
+};\r
+\r
+/*\r
+ * Possible flags for the device object flags\r
+ */\r
+enum\r
+{\r
+ DO_BUFFERED_IO = 0x1,\r
+ DO_DIRECT_IO = 0x2,\r
+};\r
+\r
+/*\r
+ * Possible status codes\r
+ * FIXME: These may not be the actual values used by NT\r
+ */\r
+enum\r
+{\r
+ STATUS_SUCCESS,\r
+ STATUS_INSUFFICIENT_RESOURCES,\r
+ STATUS_OBJECT_NAME_EXISTS,\r
+ STATUS_OBJECT_NAME_COLLISION,\r
+// STATUS_DATATYPE_MISALIGNMENT,\r
+ STATUS_CTL_FILE_NOT_SUPPORTED,\r
+// STATUS_ACCESS_VIOLATION,\r
+ STATUS_PORT_ALREADY_SET,\r
+ STATUS_SECTION_NOT_IMAGE,\r
+ STATUS_BAD_WORKING_SET_LIMIT,\r
+ STATUS_INCOMPATIBLE_FILE_MAP,\r
+ STATUS_HANDLE_NOT_WAITABLE,\r
+ STATUS_PORT_DISCONNECTED,\r
+ STATUS_NOT_LOCKED,\r
+ STATUS_NOT_MAPPED_VIEW,\r
+ STATUS_UNABLE_TO_FREE_VM,\r
+ STATUS_UNABLE_TO_DELETE_SECTION,\r
+ STATUS_MORE_PROCESSING_REQUIRED,\r
+ STATUS_INVALID_CID,\r
+ STATUS_BAD_INITIAL_STACK,\r
+ STATUS_INVALID_VOLUME_LABEL,\r
+ STATUS_SECTION_NOT_EXTENDED,\r
+ STATUS_NOT_MAPPED_DATA,\r
+ STATUS_INFO_LENGTH_MISMATCH,\r
+ STATUS_INVALID_INFO_CLASS,\r
+ STATUS_SUSPEND_COUNT_EXCEEDED,\r
+ STATUS_NOTIFY_ENUM_DIR,\r
+ STATUS_REGISTRY_RECOVERED,\r
+ STATUS_REGISTRY_IO_FAILED,\r
+ STATUS_KEY_DELETED,\r
+ STATUS_NO_LOG_SPACE,\r
+ STATUS_KEY_HAS_CHILDREN,\r
+ STATUS_CHILD_MUST_BE_VOLATILE,\r
+ STATUS_REGISTRY_CORRUPT,\r
+ STATUS_DLL_NOT_FOUND,\r
+ STATUS_DLL_INIT_FAILED,\r
+ STATUS_ORDINAL_NOT_FOUND,\r
+ STATUS_ENTRYPOINT_NOT_FOUND,\r
+// STATUS_PENDING,\r
+ STATUS_MORE_ENTRIES,\r
+// STATUS_INTEGER_OVERFLOW,\r
+ STATUS_BUFFER_OVERFLOW,\r
+ STATUS_NO_MORE_FILES,\r
+ STATUS_NO_INHERITANCE,\r
+ STATUS_NO_MORE_EAS,\r
+ STATUS_NO_MORE_ENTRIES,\r
+ STATUS_GUIDS_EXHAUSTED,\r
+ STATUS_AGENTS_EXHAUSTED,\r
+ STATUS_UNSUCCESSFUL,\r
+ STATUS_NOT_IMPLEMENTED,\r
+ STATUS_ILLEGAL_FUNCTION,\r
+// STATUS_IN_PAGE_ERROR,\r
+ STATUS_PAGEFILE_QUOTA,\r
+ STATUS_COMMITMENT_LIMIT,\r
+ STATUS_SECTION_TOO_BIG,\r
+ RPC_NT_SS_IN_NULL_CONTEXT,\r
+ RPC_NT_INVALID_BINDING,\r
+// STATUS_INVALID_HANDLE,\r
+ STATUS_OBJECT_FILE_MISMATCH,\r
+ STATUS_FILE_CLOSED,\r
+ STATUS_INVALID_PORT_HANDLE,\r
+ STATUS_NOT_COMMITTED,\r
+ STATUS_INVALID_PARAMETER,\r
+ STATUS_INVALID_PARAMETER_1,\r
+ STATUS_INVALID_PARAMETER_2,\r
+ STATUS_INVALID_PARAMETER_3,\r
+ STATUS_INVALID_PARAMETER_4,\r
+ STATUS_INVALID_PARAMETER_5,\r
+ STATUS_INVALID_PARAMETER_6,\r
+ STATUS_INVALID_PARAMETER_7,\r
+ STATUS_INVALID_PARAMETER_8,\r
+ STATUS_INVALID_PARAMETER_9,\r
+ STATUS_INVALID_PARAMETER_10,\r
+ STATUS_INVALID_PARAMETER_11,\r
+ STATUS_INVALID_PARAMETER_12,\r
+ STATUS_INVALID_PARAMETER_MAX,\r
+ STATUS_INVALID_PAGE_PROTECTION,\r
+ STATUS_RESOURCE_DATA_NOT_FOUND,\r
+ STATUS_RESOURCE_TYPE_NOT_FOUND,\r
+ STATUS_RESOURCE_NAME_NOT_FOUND,\r
+ STATUS_RESOURCE_LANG_NOT_FOUND,\r
+ STATUS_NO_SUCH_DEVICE,\r
+ STATUS_NO_SUCH_FILE,\r
+ STATUS_INVALID_DEVICE_REQUEST,\r
+ STATUS_END_OF_FILE,\r
+ STATUS_FILE_FORCED_CLOSED,\r
+ STATUS_WRONG_VOLUME,\r
+ STATUS_NO_MEDIA,\r
+ STATUS_NO_MEDIA_IN_DEVICE,\r
+ STATUS_NONEXISTENT_SECTOR,\r
+ STATUS_WORKING_SET_QUOTA,\r
+// STATUS_NO_MEMORY,\r
+ STATUS_CONFLICTING_ADDRESS,\r
+ STATUS_INVALID_SYSTEM_SERVICE,\r
+ STATUS_THREAD_IS_TERMINATING,\r
+ STATUS_PROCESS_IS_TERMINATING,\r
+ STATUS_INVALID_LOCK_SEQUENCE,\r
+ STATUS_INVALID_VIEW_SIZE,\r
+ STATUS_ALREADY_COMMITTED,\r
+ STATUS_ACCESS_DENIED,\r
+ STATUS_FILE_IS_A_DIRECTORY,\r
+ STATUS_CANNOT_DELETE,\r
+ STATUS_INVALID_COMPUTER_NAME,\r
+ STATUS_FILE_DELETED,\r
+ STATUS_DELETE_PENDING,\r
+ STATUS_PORT_CONNECTION_REFUSED,\r
+ STATUS_NO_SUCH_PRIVILEGE,\r
+ STATUS_PRIVILEGE_NOT_HELD,\r
+ STATUS_CANNOT_IMPERSONATE,\r
+ STATUS_LOGON_FAILURE,\r
+ STATUS_ACCOUNT_RESTRICTION,\r
+ STATUS_INVALID_LOGON_HOURS,\r
+ STATUS_INVALID_WORKSTATION,\r
+ STATUS_BUFFER_TOO_SMALL,\r
+ STATUS_UNABLE_TO_DECOMMIT_VM,\r
+ STATUS_DISK_CORRUPT_ERROR,\r
+ STATUS_OBJECT_NAME_INVALID,\r
+ STATUS_OBJECT_NAME_NOT_FOUND,\r
+// STATUS_OBJECT_NAME_COLLISION,\r
+ STATUS_OBJECT_PATH_INVALID,\r
+ STATUS_OBJECT_PATH_NOT_FOUND,\r
+ STATUS_DFS_EXIT_PATH_FOUND,\r
+ STATUS_OBJECT_PATH_SYNTAX_BAD,\r
+ STATUS_DATA_OVERRUN,\r
+ STATUS_DATA_LATE_ERROR,\r
+ STATUS_DATA_ERROR,\r
+ STATUS_CRC_ERROR,\r
+ STATUS_SHARING_VIOLATION,\r
+ STATUS_QUOTA_EXCEEDED,\r
+ STATUS_MUTANT_NOT_OWNED,\r
+ STATUS_SEMAPHORE_LIMIT_EXCEEDED,\r
+ STATUS_DISK_FULL,\r
+ STATUS_LOCK_NOT_GRANTED,\r
+};\r
+\r
+/*\r
+ * Possible device types\r
+ */\r
+enum\r
+{\r
+ /*\r
+ * Standard define types\r
+ */\r
+ FILE_DEVICE_BEEP,\r
+ FILE_DEVICE_CDROM,\r
+ FILE_DEVICE_CONTROLLER,\r
+ FILE_DEVICE_DISK,\r
+ FILE_DEVICE_INPORT_PORT,\r
+ FILE_DEVICE_KEYBOARD,\r
+ FILE_DEVICE_MIDI_IN,\r
+ FILE_DEVICE_MIDI_OUT,\r
+ FILE_DEVICE_MOUSE,\r
+ FILE_DEVICE_NULL,\r
+ FILE_DEVICE_PARALLEL_PORT,\r
+ FILE_DEVICE_PRINTER,\r
+ FILE_DEVICE_SCANNER,\r
+ FILE_DEVICE_SERIAL_MOUSE_PORT,\r
+ FILE_DEVICE_SERIAL_PORT,\r
+ FILE_DEVICE_SCREEN,\r
+ FILE_DEVICE_TAPE,\r
+ FILE_DEVICE_UNKNOWN,\r
+ FILE_DEVICE_VIDEO,\r
+ FILE_DEVICE_VIRTUAL_DISK,\r
+ FILE_DEVICE_WAVE_IN,\r
+ FILE_DEVICE_WAVE_OUT,\r
+ FILE_DEVICE_8042_PORT,\r
+ \r
+ /*\r
+ * Values beyond this are reserved for ISVs\r
+ */\r
+ FILE_DEVICE_FIRST_FREE = 32768\r
+};\r
+\r
+\r
+\r
+/*\r
+ * Possible device characteristics\r
+ */\r
+enum\r
+{\r
+ FILE_REMOVABLE_MEDIA = 0x1,\r
+ FILE_READ_ONLY_DEVICE = 0x2,\r
+ FILE_FLOPPY_DISKETTE = 0x4,\r
+ FILE_WRITE_ONCE_MEDIA = 0x8,\r
+ FILE_REMOTE_DEVICE = 0x10,\r
+};\r
+\r
+/*\r
+ * PURPOSE: Bus types\r
+ */\r
+enum\r
+{\r
+ Internal,\r
+ Isa,\r
+ MicroChannel,\r
+ TurboChannel,\r
+ PCIBus,\r
+ MaximumInterfaceType,\r
+};\r
+ \r
+/*\r
+ * This is a list of bug check types (not MS's)\r
+ */\r
+enum\r
+{\r
+ KBUG_NONE,\r
+ KBUG_ORPHANED_IRP,\r
+ KBUG_IO_STACK_OVERFLOW,\r
+ KBUG_OUT_OF_MEMORY,\r
+ KBUG_POOL_FREE_LIST_CORRUPT,\r
+ \r
+ /*\r
+ * These are well known but the actual value is unknown\r
+ */\r
+ NO_PAGES_AVAILABLE,\r
+ \r
+ /*\r
+ * These are well known (MS) bug types\r
+ * (Reference: NT Insider 1997 - http://www.osr.com)\r
+ */\r
+ IRQL_NOT_LESS_OR_EQUAL = 0xa,\r
+ KMODE_EXCEPTION_NOT_HANDLED = 0x1e,\r
+ UNEXPECTED_KERNEL_MODE_TRAP = 0x7f,\r
+ PAGE_FAULT_IN_NON_PAGED_AREA = 0x50,\r
+};\r
+\r
+/*\r
+ * PURPOSE: Object attributes\r
+ */\r
+enum\r
+{\r
+ OBJ_INHERIT = 0x1,\r
+ OBJ_PERMANENT = 0x2,\r
+ OBJ_EXCLUSIVE = 0x4,\r
+ OBJ_CASE_INSENSITIVE = 0x8,\r
+ OBJ_OPENIF = 0x10,\r
+};\r
+\r
+/*\r
+ * PURPOSE: DPC priorities\r
+ */\r
+enum\r
+{\r
+ High,\r
+ Medium,\r
+ Low,\r
+};\r
+\r
+/*\r
+ * PURPOSE: Timer types\r
+ */\r
+enum\r
+ {\r
+ NotificationTimer,\r
+ SynchronizationTimer, \r
+ };\r
+ \r
+/*\r
+ * PURPOSE: Some drivers use these\r
+ */\r
+#define IN\r
+#define OUT\r
+#define OPTIONAL\r
+\r
+/*\r
+ * PURPOSE: Power IRP minor function numbers\r
+ */\r
+enum\r
+{\r
+ IRP_MN_QUERY_POWER,\r
+ IRP_MN_SET_POWER,\r
+ IRP_MN_WAIT_WAKE,\r
+ IRP_MN_QUERY_CAPABILITIES,\r
+ IRP_MN_POWER_SEQUENCE,\r
+};\r
+\r
+/*\r
+ * FIXME: These are not in the correct order\r
+ */\r
+enum\r
+{ \r
+ IRP_MJ_CREATE,\r
+ IRP_MJ_CREATE_NAMED_PIPE,\r
+ IRP_MJ_CLOSE,\r
+ IRP_MJ_READ,\r
+ IRP_MJ_WRITE,\r
+ IRP_MJ_QUERY_INFORMATION,\r
+ IRP_MJ_SET_INFORMATION,\r
+ IRP_MJ_QUERY_EA,\r
+ IRP_MJ_SET_EA,\r
+ IRP_MJ_FLUSH_BUFFERS,\r
+ IRP_MJ_QUERY_VOLUME_INFORMATION,\r
+ IRP_MJ_SET_VOLUME_INFORMATION,\r
+ IRP_MJ_DIRECTORY_CONTROL,\r
+ IRP_MJ_FILE_SYSTEM_CONTROL, \r
+ IRP_MJ_DEVICE_CONTROL,\r
+ IRP_MJ_INTERNAL_DEVICE_CONTROL,\r
+ IRP_MJ_SHUTDOWN,\r
+ IRP_MJ_LOCK_CONTROL,\r
+ IRP_MJ_CLEANUP,\r
+ IRP_MJ_CREATE_MAILSLOT,\r
+ IRP_MJ_QUERY_SECURITY,\r
+ IRP_MJ_SET_SECURITY,\r
+ IRP_MJ_QUERY_POWER,\r
+ IRP_MJ_SET_POWER,\r
+ IRP_MJ_DEVICE_CHANGE,\r
+ IRP_MJ_QUERY_QUOTA,\r
+ IRP_MJ_SET_QUOTA,\r
+ IRP_MJ_PNP_POWER,\r
+ IRP_MJ_MAXIMUM_FUNCTION,\r
+};\r
+\r
+/*\r
+ * PURPOSE: Used all over\r
+ */\r
+enum\r
+{\r
+ KernelMode,\r
+ UserMode,\r
+};\r
+ \r
+/*\r
+ * PURPOSE: Arguments to MmProbeAndLockPages\r
+ */\r
+enum\r
+{\r
+ IoReadAccess,\r
+ IoWriteAccess,\r
+ IoModifyAccess,\r
+};\r
+\r
+#define MAXIMUM_VOLUME_LABEL_LENGTH (32)\r
+\r
+/*\r
+ * IRQ levels\r
+ */\r
+enum\r
+{\r
+ PASSIVE_LEVEL,\r
+ \r
+ /*\r
+ * Which order for these (only DISPATCH_LEVEL is important for now)\r
+ */\r
+ APC_LEVEL,\r
+ DISPATCH_LEVEL,\r
+ \r
+ /*\r
+ * Above here are device specific IRQ levels\r
+ */\r
+ FIRST_DEVICE_SPECIFIC_LEVEL,\r
+ HIGH_LEVEL = FIRST_DEVICE_SPECIFIC_LEVEL + NR_DEVICE_SPECIFIC_LEVELS,\r
+};\r
+ \r
--- /dev/null
+/* EXECUTIVE ROUTINES ******************************************************/
+
+//VOID ExAcquireFastMutex(PFAST_MUTEX FastMutex);
+
+
+/*
+ * FUNCTION: Releases previously allocated memory
+ * ARGUMENTS:
+ * block = block to free
+ */
+VOID ExFreePool(PVOID block);
+
+/*
+ * FUNCTION: Allocates memory from the nonpaged pool
+ * ARGUMENTS:
+ * size = minimum size of the block to be allocated
+ * PoolType = the type of memory to use for the block (ignored)
+ * RETURNS:
+ * the address of the block if it succeeds
+ */
+PVOID ExAllocatePool(POOL_TYPE PoolType, ULONG size);
+
+VOID ExInterlockedRemoveEntryList(PLIST_ENTRY ListHead, PLIST_ENTRY Entry,
+ PKSPIN_LOCK Lock);
+VOID RemoveEntryFromList(PLIST_ENTRY ListHead, PLIST_ENTRY Entry);
+PLIST_ENTRY ExInterlockedRemoveHeadList(PLIST_ENTRY Head, PKSPIN_LOCK Lock);
+
+PLIST_ENTRY ExInterlockedInsertTailList(PLIST_ENTRY ListHead,
+ PLIST_ENTRY ListEntry,
+ PKSPIN_LOCK Lock);
+
+PLIST_ENTRY ExInterlockedInsertHeadList(PLIST_ENTRY ListHead,
+ PLIST_ENTRY ListEntry,
+ PKSPIN_LOCK Lock);
+
--- /dev/null
+typedef struct _ZONE_HEADER
+{
+ SINGLE_LIST_ENTRY FreeList;
+ SINGLE_LIST_ENTRY SegmentList;
+ ULONG BlockSize;
+ ULONG TotalSegmentSize;
+} ZONE_HEADER, *PZONE_HEADER;
+
+typedef struct _ZONE_SEGMENT
+{
+ SINGLE_LIST_ENTRY Entry;
+ ULONG size;
+} ZONE_SEGMENT, *PZONE_SEGMENT;
+
+typedef struct _ZONE_ENTRY
+{
+ SINGLE_LIST_ENTRY Entry;
+} ZONE_ENTRY, *PZONE_ENTRY;
--- /dev/null
+/* IO MANAGER ***************************************************************/
+
+/*
+ * FUNCTION: Registers the driver with WMI
+ * ARGUMENTS:
+ * DeviceObject = Device to register
+ * Action = Action to take
+ * RETURNS: Status (?)
+ */
+//NTSTATUS IoWMIRegistrationControl(DeviceObject, WMIREGACTION Action);
+
+/*
+ * FUNCTION: Synchronizes cancelable-state transistions for IRPs in a
+ * multiprocessor-safe way
+ * ARGUMENTS:
+ * Irpl = Variable to store the current IRQ level
+ */
+VOID IoAcquireCancelSpinLock(PKIRQL Irpl);
+
+typedef IO_ALLOCATION_ACTION (*PDRIVER_CONTROL)(PDEVICE_OBJECT DeviceObject,
+ PIRP irp,
+ PVOID MapRegisterBase,
+ PVOID Context);
+
+/*
+ * FUNCTION: Allocates an adaptor object for a DMA operation on the target
+ * device
+ * ARGUMENTS:
+ * Adaptor = Adapter channel or busmaster adapter to be allocated
+ * DeviceObject = Target device for DMA
+ * NumberOfMapRegisters = Number of map registers
+ * ExecutionRoutine = Routine to be called when the adaptor is
+ * available
+ * Context = driver defined contex that will be passed to the
+ * execution routine
+ * RETURNS: Success or failure code
+ */
+NTSTATUS IoAllocateAdapterChannel(PADAPTER_OBJECT AdaperObject,
+ PDEVICE_OBJECT DeviceObject,
+ ULONG NumberOfMapRegisters,
+ PDRIVER_CONTROL ExecutionRoutine,
+ PVOID Context);
+
+/*
+ * FUNCTION: Sets up a call to a driver supplied controller object as
+ * soon as it is available
+ * ARGUMENTS:
+ * ControllerObject = Driver created controller object
+ * DeviceObject = target device
+ * ExecutionObject = Routine to be called
+ * Context = Driver determined context to be based to the routine
+ */
+VOID IoAllocateController(PCONTROLLER_OBJECT ControllerObject,
+ PDEVICE_OBJECT DeviceObject,
+ PDRIVER_CONTROL ExecutionRoutine,
+ PVOID Context);
+
+/*
+ * FUNCTION: Allocates an error log packet
+ * ARGUMENTS:
+ * IoObject = Object which found the error
+ * EntrySize = Size in bytes of the packet to be allocated
+ * RETURNS: On success a pointer to the allocated packet
+ * On failure returns NULL
+ */
+PVOID IoAllocateErrorLogEntry(PVOID IoObject, UCHAR EntrySize);
+
+/*
+ * FUNCTION: Allocates an IRP
+ * ARGUMENTS:
+ * StackSize = number of stack locations to allocate
+ * ChargeQuota = Who knows
+ * RETURNS: On success the allocated IRP
+ * On failure NULL
+ */
+PIRP IoAllocateIrp(CCHAR StackSize, BOOLEAN ChargeQuota);
+
+/*
+ * FUNCTION: Allocates an MDL large enough to map the supplied buffer
+ * ARGUMENTS:
+ * VirtualAddress = base virtual address of the buffer to be mapped
+ * Length = length of the buffer to be mapped
+ * SecondaryBuffer = Whether the buffer is primary or secondary
+ * ChargeQuota = Charge non-paged pool quota to current thread
+ * Irp = Optional irp to be associated with the MDL
+ * RETURNS: On the success the allocated MDL
+ * On failure NULL
+ */
+PMDL IoAllocateMdl(PVOID VirtualAddress, ULONG Length,
+ BOOLEAN SecondaryBuffer, BOOLEAN ChargeQuota,
+ PIRP Irp);
+
+/*
+ * FUNCTION: Creates a symbolic link between the ARC name of a physical
+ * device and the name of the corresponding device object
+ * ARGUMENTS:
+ * ArcName = ARC name of the device
+ * DeviceName = Name of the device object
+ */
+VOID IoAssignArcName(PUNICODE_STRING ArcName, PUNICODE_STRING DeviceName);
+
+enum
+{
+ IO_NO_INCREMENT,
+};
+
+/*
+ * FUNCTION: Takes a list of requested hardware resources and allocates them
+ * ARGUMENTS:
+ * RegisterPath =
+ * DriverClassName =
+ * DriverObject = Driver object passed to the DriverEntry routine
+ * DeviceObject =
+ * RequestedResources = List of resources
+ * RETURNS:
+ */
+NTSTATUS IoAssignResources(PUNICODE_STRING RegistryPath,
+ PUNICODE_STRING DriverClassName,
+ PDRIVER_OBJECT DriverObject,
+ PDEVICE_OBJECT DeviceObject,
+ PIO_RESOURCE_REQUIREMENTS_LIST RequestedResources,
+ PCM_RESOURCE_LIST* AllocatedResources);
+
+/*
+ * FUNCTION: Attaches the callers device object to a named target device
+ * ARGUMENTS:
+ * SourceDevice = caller's device
+ * TargetDevice = Name of the target device
+ * AttachedDevice = Caller allocated storage. On return contains
+ * a pointer to the target device
+ * RETURNS: Success or failure code
+ */
+NTSTATUS IoAttachDevice(PDEVICE_OBJECT SourceDevice,
+ PUNICODE_STRING TargetDevice,
+ PDEVICE_OBJECT* AttachedDevice);
+
+/*
+ * FUNCTION: Obsolete
+ * ARGUMENTS:
+ * SourceDevice = device to attach
+ * TargetDevice = device to be attached to
+ * RETURNS: Success or failure code
+ */
+NTSTATUS IoAttachDeviceByPointer(PDEVICE_OBJECT SourceDevice,
+ PDEVICE_OBJECT TargetDevice);
+
+/*
+ * FUNCTION: Attaches the callers device to the highest device in the chain
+ * ARGUMENTS:
+ * SourceDevice = caller's device
+ * TargetDevice = Device to attach
+ * RETURNS: On success the previously highest device
+ * On failure NULL
+ */
+PDEVICE_OBJECT IoAttachDeviceToDeviceStack(PDEVICE_OBJECT SourceDevice,
+ PDEVICE_OBJECT TargetDevice);
+
+/*
+ * FUNCTION: Builds a irp to be sent to lower level drivers
+ * ARGUMENTS:
+ * MajorFunction = Major function code to be set in the IRP
+ * DeviceObject = Next lower device object
+ * Buffer = Buffer (only required for some major function codes)
+ * Length = Length in bytes of the buffer
+ * StartingOffset = Starting offset on the target device
+ * IoStatusBlock = Storage for status about the operation (optional)
+ * RETURNS: On success the IRP allocated
+ * On failure NULL
+ */
+PIRP IoBuildAsynchronousFsdRequest(ULONG MajorFunction,
+ PDEVICE_OBJECT DeviceObject,
+ PVOID Buffer,
+ ULONG Length,
+ PLARGE_INTEGER StartingOffset,
+ PIO_STATUS_BLOCK IoStatusBlock);
+
+/*
+ * FUNCTION: Allocates and sets up an IRP for a device control request
+ * ARGUMENTS:
+ * IoControlCode = Type of request
+ * DeviceObject = Target device
+ * InputBuffer = Optional input buffer to the driver
+ * InputBufferLength = Length of the input buffer
+ * OutputBuffer = Optional output buffer
+ * OutputBufferLength = Length of the output buffer
+ * InternalDeviceIoControl = TRUE if the request is internal
+ * Event = Initialized event for the caller to wait for the request
+ * to be completed
+ * IoStatusBlock = I/O status block to be set when the request is
+ * completed
+ * RETURNS: Returns the IRP created
+ */
+PIRP IoBuildDeviceIoControlRequest(ULONG IoControlCode,
+ PDEVICE_OBJECT DeviceObject,
+ PVOID InputBuffer,
+ ULONG InputBufferLength,
+ PVOID OutputBuffer,
+ ULONG OutputBufferLength,
+ BOOLEAN InternalDeviceIoControl,
+ PKEVENT Event,
+ PIO_STATUS_BLOCK IoStatusBlock);
+
+
+VOID IoBuildPartialMdl(PMDL SourceMdl,
+ PMDL TargetMdl,
+ PVOID VirtualAddress,
+ ULONG Length);
+
+PIRP IoBuildSynchronousFsdRequest(ULONG MajorFunction,
+ PDEVICE_OBJECT DeviceObject,
+ PVOID Buffer,
+ ULONG Length,
+ PLARGE_INTEGER StartingOffset,
+ PKEVENT Event,
+ PIO_STATUS_BLOCK IoStatusBlock);
+
+/*
+ * FUNCTION: Sends an irp to the next lower driver
+ */
+NTSTATUS IoCallDriver(PDEVICE_OBJECT DeviceObject, PIRP irp);
+
+BOOLEAN IoCancelIrp(PIRP Irp);
+
+NTSTATUS IoCheckShareAccess(ACCESS_MASK DesiredAccess,
+ ULONG DesiredShareAccess,
+ PFILE_OBJECT FileObject,
+// PSHARE_ACCESS ShareAccess,
+ BOOLEAN Update);
+
+/*
+ * FUNCTION: Indicates the caller has finished all processing for a given
+ * I/O request and is returning the given IRP to the I/O manager
+ * ARGUMENTS:
+ * Irp = Irp to be cancelled
+ * PriorityBoost = Increment by which to boost the priority of the
+ * thread making the request
+ */
+VOID IoCompleteRequest(PIRP Irp, CCHAR PriorityBoost);
+
+NTSTATUS IoConnectInterrupt(PKINTERRUPT* InterruptObject,
+ PKSERVICE_ROUTINE ServiceRoutine,
+ PVOID ServiceContext,
+ PKSPIN_LOCK SpinLock,
+ ULONG Vector,
+ KIRQL Irql,
+ KIRQL SynchronizeIrql,
+ KINTERRUPT_MODE InterruptMode,
+ BOOLEAN ShareVector,
+ KAFFINITY ProcessorEnableMask,
+ BOOLEAN FloatingSave);
+
+PCONTROLLER_OBJECT IoCreateController(ULONG Size);
+
+/*
+ * FUNCTION: Allocates memory for and intializes a device object for use for
+ * a driver
+ * ARGUMENTS:
+ * DriverObject : Driver object passed by iomgr when the driver was
+ * loaded
+ * DeviceExtensionSize : Number of bytes for the device extension
+ * DeviceName : Unicode name of device
+ * DeviceType : Device type
+ * DeviceCharacteristics : Bit mask of device characteristics
+ * Exclusive : True if only one thread can access the device at a
+ * time
+ * RETURNS:
+ * Success or failure
+ * DeviceObject : Contains a pointer to allocated device object
+ * if the call succeeded
+ * NOTES: See the DDK documentation for more information
+ */
+NTSTATUS IoCreateDevice(PDRIVER_OBJECT DriverObject,
+ ULONG DeviceExtensionSize,
+ PUNICODE_STRING DeviceName,
+ DEVICE_TYPE DeviceType,
+ ULONG DeviceCharacteristics,
+ BOOLEAN Exclusive,
+ PDEVICE_OBJECT* DeviceObject);
+
+
+PKEVENT IoCreateNotificationEvent(PUNICODE_STRING EventName,
+ PHANDLE EventHandle);
+
+NTSTATUS IoCreateSymbolicLink(PUNICODE_STRING SymbolicLinkName,
+ PUNICODE_STRING DeviceName);
+
+PKEVENT IoCreateSynchronizationEvent(PUNICODE_STRING EventName,
+ PHANDLE EventHandle);
+
+NTSTATUS IoCreateUnprotectedSymbolicLink(PUNICODE_STRING SymbolicLinkName,
+ PUNICODE_STRING DeviceName);
+
+
+VOID IoDeassignArcName(PUNICODE_STRING ArcName);
+
+VOID IoDeleteController(PCONTROLLER_OBJECT ControllerObject);
+
+VOID IoDeleteDevice(PDEVICE_OBJECT DeviceObject);
+
+NTSTATUS IoDeleteSymbolicLink(PUNICODE_STRING SymbolicLinkName);
+
+VOID IoDetachDevice(PDEVICE_OBJECT TargetDevice);
+
+VOID IoDisconnectInterrupt(PKINTERRUPT InterruptObject);
+
+BOOLEAN IoFlushAdapterBuffers(PADAPTER_OBJECT AdapterObject,
+ PMDL Mdl,
+ PVOID MapRegisterBase,
+ PVOID CurrentVa,
+ ULONG Length,
+ BOOLEAN WriteToDevice);
+
+VOID IoFreeAdapterChannel(PADAPTER_OBJECT AdapterObject);
+VOID IoFreeController(PCONTROLLER_OBJECT ControllerObject);
+VOID IoFreeIrp(PIRP Irp);
+VOID IoFreeMapRegisters(PADAPTER_OBJECT AdapterObject,
+ PVOID MapRegisterBase,
+ ULONG NumberOfMapRegisters);
+VOID IoFreeMdl(PMDL Mdl);
+PCONFIGURATION_INFORMATION IoGetConfigurationInformation(VOID);
+
+
+/*
+ * FUNCTION: Returns a pointer to the callers stack location in the irp
+ */
+PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(IRP* irp);
+
+PEPROCESS IoGetCurrentProcess(VOID);
+
+NTSTATUS IoGetDeviceObjectPointer(PUNICODE_STRING ObjectName,
+ ACCESS_MASK DesiredAccess,
+ PFILE_OBJECT* FileObject,
+ PDEVICE_OBJECT* DeviceObject);
+
+PDEVICE_OBJECT IoGetDeviceToVerify(PETHREAD Thread);
+
+PGENERIC_MAPPING IoGetFileObjectGenericMapping(VOID);
+
+ULONG IoGetFunctionCodeFromCtlCode(ULONG ControlCode);
+
+PVOID IoGetInitialStack(VOID);
+
+/*
+ * FUNCTION:
+ */
+PIO_STACK_LOCATION IoGetNextIrpStackLocation(IRP* irp);
+
+PDEVICE_OBJECT IoGetRelatedDeviceObject(PFILE_OBJECT FileObject);
+
+VOID IoInitializeDpcRequest(PDEVICE_OBJECT DeviceObject,
+ PIO_DPC_ROUTINE DpcRoutine);
+
+/*
+ * FUNCTION: Initalizes an irp allocated by the caller
+ * ARGUMENTS:
+ * Irp = IRP to initalize
+ * PacketSize = Size in bytes of the IRP
+ * StackSize = Number of stack locations in the IRP
+ */
+VOID IoInitializeIrp(PIRP Irp, USHORT PacketSize, CCHAR StackSize);
+
+NTSTATUS IoInitializeTimer(PDEVICE_OBJECT DeviceObject,
+ PIO_TIMER_ROUTINE TimerRoutine,
+ PVOID Context);
+
+BOOLEAN IoIsErrorUserInduced(NTSTATUS Status);
+
+BOOLEAN IoIsTotalDeviceFailure(NTSTATUS Status);
+
+PIRP IoMakeAssociatedIrp(PIRP Irp, CCHAR StackSize);
+
+PHYSICAL_ADDRESS IoMapTransfer(PADAPTER_OBJECT AdapterObject,
+ PMDL Mdl,
+ PVOID MapRegisterBase,
+ PVOID CurrentVa,
+ PULONG Length,
+ BOOLEAN WriteToDevice);
+
+/*
+ * FUNCTION: Marks an IRP as pending
+ * ARGUMENTS:
+ * Irp = Irp to mark
+ * NOTE: If a driver doesn't complete the irp in its dispatch routine it
+ * must mark it pending otherwise the I/O manager will complete it on
+ * return from the dispatch routine.
+ */
+VOID IoMarkIrpPending(PIRP Irp);
+
+NTSTATUS IoQueryDeviceDescription(PINTERFACE_TYPE BusType,
+ PULONG BusNumber,
+ PCONFIGURATION_TYPE ControllerType,
+ PULONG ControllerNumber,
+ PCONFIGURATION_TYPE PeripheralType,
+ PULONG PeripheralNumber,
+ PIO_QUERY_DEVICE_ROUTINE CalloutRoutine,
+ PVOID Context);
+
+VOID IoRaiseHardError(PIRP Irp, PVPB Vpb, PDEVICE_OBJECT RealDeviceObject);
+
+BOOLEAN IoRaiseHardInformationalError(NTSTATUS ErrorStatus,
+ PUNICODE_STRING String,
+ PKTHREAD Thread);
+
+NTSTATUS IoReadPartitionTable(PDEVICE_OBJECT DeviceObject,
+ ULONG SectorSize,
+ BOOLEAN ReturnedRecognizedPartitions,
+ struct _DRIVER_LAYOUT_INFORMATION** PBuffer);
+
+VOID IoRegisterDriverReinitialization(PDRIVER_OBJECT DriverObject,
+ PDRIVER_REINITIALIZE ReinitRoutine,
+ PVOID Context);
+
+NTSTATUS IoRegisterShutdownNotification(PDEVICE_OBJECT DeviceObject);
+
+VOID IoReleaseCancelSpinLock(KIRQL Irql);
+
+VOID IoRemoveShareAccess(PFILE_OBJECT FileObject,
+ PSHARE_ACCESS ShareAccess);
+
+NTSTATUS IoReportResourceUsage(PUNICODE_STRING DriverClassName,
+ PDRIVER_OBJECT DriverObject,
+ PCM_RESOURCE_LIST DriverList,
+ ULONG DriverListSize,
+ PDEVICE_OBJECT DeviceObject,
+ PCM_RESOURCE_LIST DeviceList,
+ ULONG DeviceListSize,
+ BOOLEAN OverrideConflict,
+ PBOOLEAN ConflictDetected);
+
+VOID IoRequestDpc(PDEVICE_OBJECT DeviceObject,
+ PIRP Irp,
+ PVOID Context);
+
+PDRIVER_CANCEL IoSetCancelRoutine(PIRP Irp, PDRIVER_CANCEL CancelRoutine);
+
+VOID IoSetCompletionRoutine(PIRP Irp,
+ PIO_COMPLETION_ROUTINE CompletionRoutine,
+ PVOID Context,
+ BOOLEAN InvokeOnSuccess,
+ BOOLEAN InvokeOnError,
+ BOOLEAN InvokeOnCancel);
+
+VOID IoSetHardErrorOrVerifyDevice(PIRP Irp, PDEVICE_OBJECT DeviceObject);
+
+VOID IoSetNextIrpStackLocation(PIRP Irp);
+
+NTSTATUS IoSetPartitionInformation(PDEVICE_OBJECT DeviceObject,
+ ULONG SectorSize,
+ ULONG PartitionNumber,
+ ULONG PartitionType);
+
+VOID IoSetShareAccess(ACCESS_MASK DesiredAccess,
+ ULONG DesiredShareAccess,
+ PFILE_OBJECT FileObject,
+ PSHARE_ACCESS ShareAccess);
+
+/*
+ * FUNCTION: Determines the size of an IRP
+ * ARGUMENTS:
+ * StackSize = number of stack locations in the IRP
+ * RETURNS: The size of the IRP in bytes
+ */
+USHORT IoSizeOfIrp(CCHAR StackSize);
+
+/*
+ * FUNCTION: Dequeues the next IRP from the device's associated queue and
+ * calls its StartIo routine
+ * ARGUMENTS:
+ * DeviceObject = Device object
+ * Cancelable = True if IRPs in the queue can be cancelled
+ */
+VOID IoStartNextPacket(PDEVICE_OBJECT DeviceObject, BOOLEAN Cancelable);
+
+VOID IoStartNextPacketByKey(PDEVICE_OBJECT DeviceObject,
+ BOOLEAN Cancelable,
+ ULONG Key);
+
+/*
+ * FUNCTION: Calls the drivers StartIO routine with the IRP or queues it if
+ * the device is busy
+ * ARGUMENTS:
+ * DeviceObject = Device to pass the IRP to
+ * Irp = Irp to be processed
+ * Key = Optional value for where to insert the IRP
+ * CancelFunction = Entry point for a driver supplied cancel function
+ */
+VOID IoStartPacket(PDEVICE_OBJECT DeviceObject, PIRP Irp, PULONG Key,
+ PDRIVER_CANCEL CancelFunction);
+
+VOID IoStartTimer(PDEVICE_OBJECT DeviceObject);
+
+VOID IoStopTimer(PDEVICE_OBJECT DeviceObject);
+
+VOID IoUnregisterShutdownNotification(PDEVICE_OBJECT DeviceObject);
+
+VOID IoUpdateShareAccess(PFILE_OBJECT FileObject, PSHARE_ACCESS ShareAccess);
+
+VOID IoWriteErrorLogEntry(PVOID ElEntry);
+
+NTSTATUS IoWritePartitionTable(PDEVICE_OBJECT DeviceObject,
+ ULONG SectorSize,
+ ULONG SectorsPerTrack,
+ ULONG NumberOfHeads,
+ struct _DRIVE_LAYOUT_INFORMATION* PBuffer);
--- /dev/null
+/*
+ *
+ */
+
+#ifndef __INCLUDE_DDK_IOTYPES_H
+#define __INCLUDE_DDK_IOTYPES_H
+
+/*
+ * These are referenced before they can be fully defined
+ */
+struct _DRIVER_OBJECT;
+struct _FILE_OBJECT;
+struct _DEVICE_OBJECT;
+struct _IRP;
+struct _IO_STATUS_BLOCK;
+
+/* SIMPLE TYPES *************************************************************/
+
+typedef ULONG INTERFACE_TYPE;
+typedef INTERFACE_TYPE* PINTERFACE_TYPE;
+typedef ULONG CONFIGURATION_TYPE;
+typedef CONFIGURATION_TYPE* PCONFIGURATION_TYPE;
+
+/*
+ * FIXME: Definition needed
+ */
+typedef struct _SHARE_ACCESS
+{
+} SHARE_ACCESS, *PSHARE_ACCESS;
+
+/* FUNCTION TYPES ************************************************************/
+
+typedef VOID (*PDRIVER_REINITIALIZE)(struct _DRIVER_OBJECT* DriverObject,
+ PVOID Context,
+ ULONG Count);
+
+typedef NTSTATUS (*PIO_QUERY_DEVICE_ROUTINE)(PVOID Context,
+ PUNICODE_STRING Pathname,
+ INTERFACE_TYPE BusType,
+ ULONG BusNumber,
+ PKEY_VALUE_FULL_INFORMATION* BI,
+ CONFIGURATION_TYPE ControllerType,
+ ULONG ControllerNumber,
+ PKEY_VALUE_FULL_INFORMATION* CI,
+ CONFIGURATION_TYPE PeripheralType,
+ ULONG PeripheralNumber,
+ PKEY_VALUE_FULL_INFORMATION* PI);
+
+typedef NTSTATUS (*PIO_COMPLETION_ROUTINE)(struct _DEVICE_OBJECT* DeviceObject,
+ struct _IRP* Irp,
+ PVOID Context);
+
+typedef VOID (*PIO_APC_ROUTINE) (PVOID ApcContext,
+ struct _IO_STATUS_BLOCK* IoStatusBlock,
+ ULONG Reserved);
+
+
+/* STRUCTURE TYPES ***********************************************************/
+
+/*
+ * PURPOSE: Special timer associated with each device
+ */
+typedef struct _IO_TIMER
+{
+} IO_TIMER, PIO_TIMER;
+
+
+/*
+ * PURPOSE: IRP stack location
+ */
+typedef struct _IO_STACK_LOCATION
+{
+ /*
+ * Type of request
+ */
+ UCHAR MajorFunction;
+
+ /*
+ * Further information about request type
+ */
+ UCHAR MinorFunction;
+
+ /*
+ *
+ */
+ UCHAR Flags;
+
+ /*
+ * FUNCTION: Various flags including for the io completion routine
+ */
+ UCHAR Control;
+
+ /*
+ * Parameters for request
+ */
+ union
+ {
+ struct
+ {
+ /*
+ * Number of bytes to be transferrred
+ */
+ ULONG Length;
+
+ /*
+ * Possibly used to sort incoming request (to be documented)
+ */
+ ULONG Key;
+
+ /*
+ * Optional starting offset for read
+ */
+ LARGE_INTEGER ByteOffset;
+ } Read;
+ struct
+ {
+ ULONG Length;
+ ULONG Key;
+ LARGE_INTEGER ByteOffset;
+ } Write;
+ struct
+ {
+ ULONG OutputBufferLength;
+ ULONG InputBufferLength;
+ ULONG IoControlCode;
+ PVOID Type3InputBuffer;
+ } DeviceIoControl;
+
+ } Parameters;
+
+ /*
+ * PURPOSE: Completion routine
+ * NOTE: If this is the nth stack location (where the 1st is passed to the
+ * highest level driver) then this is the completion routine set by
+ * the (n-1)th driver
+ */
+ PIO_COMPLETION_ROUTINE CompletionRoutine;
+ PVOID CompletionContext;
+ BOOLEAN InvokeOnSuccess;
+ BOOLEAN InvokeOnError;
+ BOOLEAN InvokeOnCancel;
+
+ /*
+ * Driver created device object representing the target device
+ */
+ struct _DEVICE_OBJECT* DeviceObject;
+
+ /*
+ * File object (if any) associated with DeviceObject
+ */
+ struct _FILE_OBJECT* FileObject;
+} IO_STACK_LOCATION, *PIO_STACK_LOCATION;
+
+typedef struct _IO_STATUS_BLOCK
+{
+ /*
+ * Is the completion status
+ */
+ NTSTATUS Status;
+
+ /*
+ * Is a request dependant value
+ */
+ ULONG Information;
+} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
+
+/*
+ * Driver entry point declaration
+ */
+typedef NTSTATUS (*PDRIVER_INITIALIZE)(struct _DRIVER_OBJECT* DriverObject,
+ PUNICODE_STRING RegistryPath);
+
+/*
+ * Driver cancel declaration
+ */
+typedef NTSTATUS (*PDRIVER_CANCEL)(struct _DRIVER_OBJECT* DriverObject,
+ PUNICODE_STRING RegistryPath);
+
+typedef struct _IRP
+{
+ PMDL MdlAddress;
+ ULONG Flags;
+ union
+ {
+ struct _IRP* MasterIrp;
+ LONG IrpCount;
+ PVOID SystemBuffer;
+ } AssociatedIrp;
+ LIST_ENTRY ThreadListEntry;
+ IO_STATUS_BLOCK IoStatus;
+ KPROCESSOR_MODE RequestorMode;
+ BOOLEAN PendingReturned;
+ BOOLEAN Cancel;
+ KIRQL CancelIrql;
+ PDRIVER_CANCEL CancelRoutine;
+ PVOID UserBuffer;
+ PVOID ApcEnvironment;
+ ULONG AllocationFlags;
+ PIO_STATUS_BLOCK UserIosb;
+ PKEVENT UserEvent;
+ union
+ {
+ struct
+ {
+ PIO_APC_ROUTINE UserApcRoutine;
+ PVOID UserApcContext;
+ } AsynchronousParameters;
+ LARGE_INTEGER AllocationSize;
+ } Overlay;
+ union
+ {
+ struct
+ {
+ KDEVICE_QUEUE_ENTRY DeviceQueueEntry;
+// PETHREAD Thread;
+ PVOID Thread;
+ PCHAR AuxiliaryBuffer;
+ LIST_ENTRY ListEntry;
+ struct _IO_STACK_LOCATION* CurrentStackLocation;
+// PFILE_OBJECT OriginalFileObject;
+ PVOID OriginalFileObject;
+ } Overlay;
+ KAPC Apc;
+ ULONG CompletionKey;
+ } Tail;
+ ULONG CurrentLocation;
+ IO_STACK_LOCATION Stack[1];
+} IRP, *PIRP;
+
+
+typedef struct _VPB
+{
+ CSHORT Type;
+ CSHORT Size;
+ USHORT Flags;
+ USHORT VolumeLabelLength;
+ struct _DEVICE_OBJECT* DeviceObject;
+ struct _DEVICE_OBJECT* RealDevice;
+ ULONG SerialNumber;
+ ULONG ReferenceCount;
+ WCHAR VolumeLabel[MAXIMUM_VOLUME_LABEL_LENGTH / sizeof(WCHAR)];
+} VPB, *PVPB;
+
+
+typedef struct _DEVICE_OBJECT
+{
+ CSHORT Type;
+ CSHORT Size;
+ LONG ReferenceCount;
+ struct _DRIVER_OBJECT* DriverObject;
+ struct _DEVICE_OBJECT* NextDevice;
+ struct _DEVICE_OBJECT* AttachedDevice;
+ struct _IRP* CurrentIrp;
+ PIO_TIMER Timer;
+ ULONG Flags;
+ ULONG Characteristics;
+ PVPB Vpb;
+ PVOID DeviceExtension;
+ DEVICE_TYPE DeviceType;
+ CCHAR StackSize;
+ union
+ {
+ LIST_ENTRY ListHead;
+ WAIT_CONTEXT_BLOCK Wcb;
+ } Queue;
+ ULONG AlignmentRequirement;
+ KDEVICE_QUEUE DeviceQueue;
+ KDPC Dpc;
+ ULONG ActiveThreadCount;
+ PSECURITY_DESCRIPTOR SecurityDescriptor;
+ KEVENT DeviceLock;
+ USHORT SectorSize;
+ USHORT Spare1;
+ struct _DEVOBJ_EXTENSION* DeviceObjectExtension;
+ PVOID Reserved;
+} DEVICE_OBJECT, *PDEVICE_OBJECT;
+
+/*
+ * Dispatch routine type declaration
+ */
+typedef NTSTATUS (*PDRIVER_DISPATCH)(struct _DEVICE_OBJECT*, IRP*);
+
+/*
+ * Fast i/o routine type declaration
+ */
+typedef NTSTATUS (*PFAST_IO_DISPATCH)(struct _DEVICE_OBJECT*, IRP*);
+
+/*
+ * Dispatch routine type declaration
+ */
+typedef NTSTATUS (*PDRIVER_STARTIO)(struct _DEVICE_OBJECT*, IRP*);
+
+/*
+ * Dispatch routine type declaration
+ */
+typedef NTSTATUS (*PDRIVER_UNLOAD)(struct _DRIVER_OBJECT*);
+
+typedef struct _DRIVER_EXTENSION
+{
+ struct _DRIVER_OBJECT* DriverObject;
+ PDRIVER_ADD_DEVICE AddDevice;
+ ULONG Count;
+ UNICODE_STRING ServiceKeyName;
+} DRIVER_EXTENSION, *PDRIVER_EXTENSION;
+
+typedef struct _DRIVER_OBJECT
+{
+ /*
+ * PURPOSE: Magic values for debugging
+ */
+ CSHORT Type;
+ CSHORT Size;
+ PDEVICE_OBJECT DeviceObject;
+ ULONG Flags;
+ PVOID DriverStart;
+ ULONG DriverSize;
+ PVOID DriverSection;
+ PDRIVER_EXTENSION DriverExtension;
+ UNICODE_STRING DriverName;
+ PUNICODE_STRING HardwareDatabase;
+ PFAST_IO_DISPATCH FastIoDispatch;
+ PDRIVER_INITIALIZE DriverInit;
+ PDRIVER_STARTIO DriverStartIo;
+ PDRIVER_UNLOAD DriverUnload;
+ PDRIVER_DISPATCH MajorFunction[IRP_MJ_MAXIMUM_FUNCTION + 1];
+} DRIVER_OBJECT, *PDRIVER_OBJECT;
+
+
+
+
+typedef struct _FILE_OBJECT
+{
+ PDEVICE_OBJECT DeviceObject;
+ PVOID FsContext;
+} FILE_OBJECT, *PFILE_OBJECT;
+
+typedef struct _CONFIGURATION_INFORMATION
+{
+ ULONG DiskCount;
+ ULONG FloppyCount;
+ ULONG CDRomCount;
+ ULONG TapeCount;
+ ULONG ScsiPortCount;
+ ULONG SerialCount;
+ ULONG ParallelCount;
+ BOOLEAN AtDiskPrimaryAddressClaimed;
+ BOOLEAN AtDiskSecondaryAddressClaimed;
+} CONFIGURATION_INFORMATION, *PCONFIGURATION_INFORMATION;
+
+typedef VOID (*PIO_DPC_ROUTINE)(PKDPC Dpc,
+ PDEVICE_OBJECT DeviceObject,
+ PIRP Irp,
+ PVOID Context);
+
+typedef VOID (*PIO_TIMER_ROUTINE)(PDEVICE_OBJECT DeviceObject,
+ PVOID Context);
+
+#if PKEY_VALUE_FULL_INFORMATION_DEFINED
+typedef NTSTATUS (*PIO_QUERY_DEVICE_ROUTINE)(PVOID Context,
+ PUNICODE_STRING PathName,
+ INTERFACE_TYPE BusType,
+ ULONG BusNumber,
+ PKEY_VALUE_FULL_INFORMATION* BusKey,
+ CONFIGURATION_TYPE ControllerType,
+ ULONG ControllerNumber,
+ PKEY_VALUE_FULL_INFORMATION* CtrlKey,
+ CONFIGURATION_TYPE PeripheralType,
+ ULONG PeripheralNumber,
+ PKEY_VALUE_FULL_INFORMATION* PrphKey);
+#endif
+
+#if WINDOWS_STRUCTS_DOESNT_ALREADY_DEFINE_THIS
+typedef struct _PARTITION_INFORMATION
+{
+ LARGE_INTEGER StartingOffset;
+ LARGE_INTEGER PartitionLength;
+ ULONG HiddenSectors;
+ ULONG PartitionNumber;
+ UCHAR PartitionType;
+ BOOLEAN BootIndicator;
+ BOOLEAN RecognizedPartition;
+ BOOLEAN RewritePartition;
+} PARTITION_INFORMATION, *PPARTITION_INFORMATION;
+#endif
+
+typedef struct _DRIVER_LAYOUT_INFORMATION
+{
+ ULONG PartitionCount;
+ ULONG Signature;
+ PARTITION_INFORMATION PartitionEntry[1];
+} DRIVER_LAYOUT_INFORMATION, *PDRIVER_LAYOUT_INFORMATION;
+
+#endif __INCLUDE_DDK_IOTYPES_H
--- /dev/null
+/* KERNEL FUNCTIONS ********************************************************/
+
+VOID KeAcquireSpinLock(PKSPIN_LOCK SpinLock, PKIRQL OldIrql);
+VOID KeAcquireSpinLockAtDpcLevel(PKSPIN_LOCK SpinLock);
+BOOLEAN KeCancelTimer(PKTIMER Timer);
+VOID KeClearEvent(PKEVENT Event);
+NTSTATUS KeDelayExecutionThread(KPROCESSOR_MODE WaitMode,
+ BOOLEAN Alertable,
+ PLARGE_INTEGER Internal);
+BOOLEAN KeDeregisterBugCheckCallback(PKBUGCHECK_CALLBACK_RECORD
+ CallbackRecord);
+VOID KeEnterCriticalRegion(VOID);
+VOID KeFlushIoBuffers(PMDL Mdl, BOOLEAN ReadOperation, BOOLEAN DmaOperation);
+KIRQL KeGetCurrentIrql(VOID);
+ULONG KeGetCurrentProcessorNumber(VOID);
+ULONG KeGetDcacheFillSize(VOID);
+VOID KeInitializeCallbackRecord(PKBUGCHECK_CALLBACK_RECORD CallbackRecord);
+VOID KeInitializeDeviceQueue(PKDEVICE_QUEUE DeviceQueue);
+VOID KeInitializeDpc(PKDPC Dpc, PKDEFERRED_ROUTINE DeferredRoutine,
+ PVOID DeferredContext);
+VOID KeInitializeEvent(PKEVENT Event, EVENT_TYPE Type, BOOLEAN State);
+VOID KeInitializeMutex(PKMUTEX Mutex, ULONG Level);
+VOID KeInitializeSemaphore(PKSEMAPHORE Semaphore, LONG Count, LONG Limit);
+VOID KeInitializeTimer(PKTIMER Timer);
+VOID KeInitializeTimerEx(PKTIMER Timer, TIMER_TYPE Type);
+BOOLEAN KeInsertByKeyDeviceQueue(PKDEVICE_QUEUE DeviceQueue,
+ PKDEVICE_QUEUE_ENTRY DeviceQueueEntry,
+ ULONG SortKey);
+BOOLEAN KeInsertDeviceQueue(PKDEVICE_QUEUE DeviceQueue,
+ PKDEVICE_QUEUE_ENTRY DeviceQueueEntry);
+BOOLEAN KeInsertQueueDpc(PKDPC Dpc, PVOID SystemArgument1,
+ PVOID SystemArgument2);
+VOID KeLeaveCriticalRegion(VOID);
+VOID KeLowerIrql(KIRQL NewIrql);
+LARGE_INTEGER KeQueryPerformanceCounter(PLARGE_INTEGER PerformanceFrequency);
+VOID KeQuerySystemTime(PLARGE_INTEGER CurrentTime);
+VOID KeQueryTickCount(PLARGE_INTEGER TickCount);
+ULONG KeQueryTimeIncrement(VOID);
+VOID KeRaiseIrql(KIRQL NewIrql, PKIRQL OldIrql);
+LONG KeReadStateEvent(PKEVENT Event);
+LONG KeReadStateMutex(PKMUTEX Mutex);
+LONG KeReadStateSemaphore(PKSEMAPHORE Semaphore);
+BOOLEAN KeReadStateTimer(PKTIMER Timer);
+BOOLEAN KeRegisterBugCheckCallback(PKBUGCHECK_CALLBACK_RECORD CallbackRecord,
+ PKBUGCHECK_CALLBACK_ROUTINE CallbackRoutine,
+ PVOID Buffer,
+ ULONG Length,
+ PUCHAR Component);
+LONG KeReleaseMutex(PKMUTEX Mutex, BOOLEAN Wait);
+LONG KeReleaseSemaphore(PKSEMAPHORE Semaphore, KPRIORITY Increment,
+ LONG Adjustment, BOOLEAN Wait);
+VOID KeReleaseSpinLock(PKSPIN_LOCK Spinlock, KIRQL NewIrql);
+VOID KeReleaseSpinLockFromDpcLevel(PKSPIN_LOCK Spinlock);
+PKDEVICE_QUEUE_ENTRY KeRemoveByKeyDeviceQueue(PKDEVICE_QUEUE DeviceQueue,
+ ULONG SortKey);
+PKDEVICE_QUEUE_ENTRY KeRemoveDeviceQueue(PKDEVICE_QUEUE DeviceQueue);
+BOOLEAN KeRemoveEntryDeviceQueue(PKDEVICE_QUEUE DeviceQueue,
+ PKDEVICE_QUEUE_ENTRY DeviceQueueEntry);
+BOOLEAN KeRemoveQueueDpc(PKDPC Dpc);
+LONG KeResetEvent(PKEVENT Event);
+LONG KeSetBasePriorityThread(PKTHREAD Thread, LONG Increment);
+LONG KeSetEvent(PKEVENT Event, KPRIORITY Increment, BOOLEAN Wait);
+KPRIORITY KeSetPriorityThread(PKTHREAD Thread, KPRIORITY Priority);
+BOOLEAN KeSetTimer(PKTIMER Timer, LARGE_INTEGER DueTime, PKDPC Dpc);
+BOOLEAN KeSetTimerEx(PKTIMER Timer, LARGE_INTEGER DueTime, LONG Period,
+ PKDPC Dpc);
+VOID KeStallExecutionProcessor(ULONG MicroSeconds);
+BOOLEAN KeSynchronizeExecution(PKINTERRUPT Interrupt,
+ PKSYNCHRONIZE_ROUTINE SynchronizeRoutine,
+ PVOID SynchronizeContext);
+NTSTATUS KeWaitForMultipleObjects(ULONG Count,
+ PVOID Object[],
+ WAIT_TYPE WaitType,
+ KWAIT_REASON WaitReason,
+ KPROCESSOR_MODE WaitMode,
+ BOOLEAN Alertable,
+ PLARGE_INTEGER Timeout,
+ PKWAIT_BLOCK WaitBlockArray);
+NTSTATUS KeWaitForMutexObject(PKMUTEX Mutex, KWAIT_REASON WaitReason,
+ KPROCESSOR_MODE WaitMode, BOOLEAN Alertable,
+ PLARGE_INTEGER Timeout);
+NTSTATUS KeWaitForSingleObject(PVOID Object, KWAIT_REASON WaitReason,
+ KPROCESSOR_MODE WaitMode,
+ BOOLEAN Alertable, PLARGE_INTEGER Timeout);
+
+/*
+ * FUNCTION: Initializes a spinlock
+ * ARGUMENTS:
+ * SpinLock = Spinlock to initialize
+ */
+VOID KeInitializeSpinLock(PKSPIN_LOCK SpinLock);
+
+/*
+ * FUNCTION: Sets the current irql without altering the current processor
+ * state
+ * ARGUMENTS:
+ * newlvl = IRQ level to set
+ * NOTE: This is for internal use only
+ */
+VOID KeSetCurrentIrql(KIRQL newlvl);
+
+
+/*
+ * 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
+ * BugCheckParameter[1-4] = Additional information about bug
+ * RETURNS: Doesn't
+ */
+VOID KeBugCheckEx(ULONG BugCheckCode,
+ ULONG BugCheckParameter1,
+ ULONG BugCheckParameter2,
+ ULONG BugCheckParameter3,
+ ULONG BugCheckParameter4);
+
+/*
+ * 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
+ */
+VOID KeBugCheck(ULONG BugCheckCode);
--- /dev/null
+typedef LONG KPRIORITY;
+
+typedef VOID (*PKBUGCHECK_CALLBACK_ROUTINE)(PVOID Buffer, ULONG Length);
+typedef BOOLEAN (*PKSYNCHRONIZE_ROUTINE)(PVOID SynchronizeContext);
+
+typedef struct
+{
+} KBUGCHECK_CALLBACK_RECORD, *PKBUGCHECK_CALLBACK_RECORD;
+
+typedef struct
+{
+} KMUTEX, *PKMUTEX;
+
+typedef struct
+{
+} KSEMAPHORE, *PKSEMAPHORE;
+
+typedef struct
+{
+} KTHREAD, *PKTHREAD;
+
+
+/*
+ * PURPOSE: Included in every object that a thread can wait on
+ */
+typedef struct
+{
+ /*
+ * PURPOSE: True if the object is signaling a change of state
+ */
+ BOOLEAN signaled;
+
+ /*
+ * PURPOSE: Head of the queue of threads waiting on this object
+ */
+ LIST_ENTRY wait_queue_head;
+
+ /*
+ * PURPOSE: True if all the threads waiting should be woken when the
+ * object changes state
+ */
+ BOOLEAN wake_all;
+
+} DISPATCHER_HEADER, *PDISPATCHER_HEADER;
+
+
+/*
+ * PURPOSE: Describes an event
+ */
+typedef struct _KEVENT
+{
+ /*
+ * PURPOSE: So we can use the general wait routine
+ */
+ DISPATCHER_HEADER hdr;
+
+ /*
+ * PURPOSE: Type of event, notification or synchronization
+ */
+ EVENT_TYPE type;
+} KEVENT, *PKEVENT;
+
+
+typedef struct _KSPIN_LOCK
+{
+ KIRQL irql;
+} KSPIN_LOCK, *PKSPIN_LOCK;
+
+typedef struct
+{
+} KAPC;
+
+typedef struct
+{
+} UNICODE_STRING;
+
+typedef VOID (*PDRIVER_ADD_DEVICE)(VOID);
+
+struct _KDPC;
+
+/*
+ * PURPOSE: Defines a delayed procedure call routine
+ * NOTE:
+ * Dpc = The associated DPC object
+ * DeferredContext = Driver defined context for the DPC
+ * SystemArgument[1-2] = Undocumented.
+ *
+ */
+typedef VOID (*PKDEFERRED_ROUTINE)(struct _KDPC* Dpc, PVOID DeferredContext,
+ PVOID SystemArgument1, PVOID SystemArgument2);
+
+typedef struct _KDPC
+/*
+ * PURPOSE: Defines a delayed procedure call object
+ */
+{
+ /*
+ * PURPOSE: Magic value to check this is the current object type
+ */
+ SHORT Type;
+
+ /*
+ * PURPOSE: Target processor or zero if untargetted
+ */
+ UCHAR Number;
+
+ /*
+ * PURPOSE: Indication of desired latency before exection
+ */
+ UCHAR Importance;
+
+ LIST_ENTRY DpcListEntry;
+ PKDEFERRED_ROUTINE DeferredRoutine;
+ PVOID DeferredContext;
+ PVOID SystemArgument1;
+ PVOID SystemArgument2;
+
+ /*
+ * PURPOSE: If non-zero then already in queue
+ */
+ PULONG Lock;
+
+} KDPC, *PKDPC;
+
+
+typedef struct _KDEVICE_QUEUE
+{
+ LIST_ENTRY ListHead;
+ BOOLEAN Busy;
+ KSPIN_LOCK Lock;
+} KDEVICE_QUEUE, *PKDEVICE_QUEUE;
+
+typedef struct _KDEVICE_QUEUE_ENTRY
+{
+ LIST_ENTRY Entry;
+ ULONG Key;
+} KDEVICE_QUEUE_ENTRY, *PKDEVICE_QUEUE_ENTRY;
+
+typedef struct _WAIT_CONTEXT_BLOCK
+{
+} WAIT_CONTEXT_BLOCK, *PWAIT_CONTEXT_BLOCK;
--- /dev/null
+/* MEMORY MANAGMENT ******************************************************/
+
+/*
+ * FUNCTION: Determines if the given virtual address is page aligned
+ */
+#define IS_PAGE_ALIGNED(Va) (((ULONG)Va)&0xfff)
+
+/*
+ * PURPOSE: Returns the byte offset of a field within a structure
+ */
+#define FIELD_OFFSET(Type,Field) (LONG)(&(((Type *)(0))->Field))
+
+/*
+ * PURPOSE: Returns the base address structure if the caller knows the
+ * address of a field within the structure
+ * ARGUMENTS:
+ * Address = address of the field
+ * Type = Type of the whole structure
+ * Field = Name of the field whose address is none
+ */
+#define CONTAINING_RECORD(Address,Type,Field) (Type *)(((LONG)Address) - FIELD_OFFSET(Type,Field))
+
+/*
+ * FUNCTION: Returns the number of pages spanned by an address range
+ * ARGUMENTS:
+ * Va = start of range
+ * Size = Size of range
+ * RETURNS: The number of pages
+ */
+#define ADDRESS_AND_SIZE_TO_SPAN_PAGES(Va, Size)
+
+/*
+ * FUNCTION: Returns FALSE is the pointer is NULL, TRUE otherwise
+ */
+#define ARGUMENT_PRESENT(arg) ((arg)!=NULL)
+
+/*
+ * FUNCTION: Returns the byte offset of the address within its page
+ */
+#define BYTE_OFFSET(va) (((ULONG)va)%PAGESIZE)
+
+/*
+ * FUNCTION: Takes a count in bytes and returns the number of pages
+ * required to hold it
+ */
+#define BYTES_TO_PAGES(size) (?)
+
+/*
+ * FUNCTION: Allocates a range of physically contiguous cache aligned
+ * memory from the non-paged pool
+ * ARGUMENTS:
+ * NumberOfBytes = Size of the memory block to allocate
+ * HighestAcceptableAddress = Highest address valid for the caller
+ * RETURNS: The virtual address of the memory block on success
+ * NULL on error
+ */
+PVOID MmAllocateContiguousMemory(ULONG NumberOfBytes,
+ PHYSICAL_ADDRESS HighestAcceptableAddress);
+
+/*
+ * FUNCTION: Allocates a virtual address range of noncached and cache
+ * aligned memory
+ * ARGUMENTS:
+ * NumberOfBytes = Size of region to allocate
+ * RETURNS: The base address of the range on success
+ * NULL on failure
+ */
+PVOID MmAllocateNonCachedMemory(ULONG NumberOfBytes);
+
+/*
+ * FUNCTION: Fills in the corresponding physical page array for a given MDL
+ * for a buffer in nonpaged system space
+ * ARGUMENTS:
+ * MemoryDescriptorList = MDL to fill
+ */
+VOID MmBuildMdlForNonPagedPool(PMDL MemoryDescriptorList);
+
+/*
+ * FUNCTION: Allocates and initializes an MDL
+ * ARGUMENTS:
+ * MemoryDescriptorList = Optional caller allocated MDL to initalize
+ * Base = Base virtual address for buffer
+ * Length = Length in bytes of the buffer
+ * RETURNS: A pointer to the initalized MDL
+ */
+PMDL MmCreateMdl(PMDL MemoryDescriptorList, PVOID Base, ULONG Length);
+
+/*
+ * FUNCTION: Releases a range of physically contiguous memory allocated
+ * with MmAllocateContiguousMemory
+ * ARGUMENTS:
+ * BaseAddress = Vritual address of the memory to be freed
+ */
+VOID MmFreeContiguousMemory(PVOID BaseAddress);
+
+/*
+ * FUNCTION: Releases a range of noncached memory allocated with
+ * MmAllocateNonCachedMemory
+ * ARGUMENTS:
+ * BaseAddress = Virtual address to be freed
+ * NumberOfBytes = size of the region to be freed
+ */
+VOID MmFreeNonCachedMemory(PVOID BaseAddress, ULONG NumberOfBytes);
+
+/*
+ * FUNCTION: Returns the length in bytes of a buffer described by an MDL
+ * ARGUMENTS:
+ * Mdl = the mdl
+ * RETURNS: Size of the buffer
+ */
+ULONG MmGetMdlByteCount(PMDL Mdl);
+
+/*
+ * FUNCTION: Returns the byte offset within a page of the buffer described
+ * by an MDL
+ * ARGUMENTS:
+ * Mdl = the mdl
+ * RETURNS: The offset in bytes
+ */
+ULONG MmGetMdlByteOffset(PMDL Mdl);
+
+/*
+ * FUNCTION: Returns the initial virtual address for a buffer described
+ * by an MDL
+ * ARGUMENTS:
+ * Mdl = the mdl
+ * RETURNS: The initial virtual address
+ */
+PVOID MmGetMdlVirtualAddress(PMDL Mdl);
+
+/*
+ * FUNCTION: Returns the physical address corresponding to a given valid
+ * virtual address
+ * ARGUMENTS:
+ * BaseAddress = the virtual address
+ * RETURNS: The physical address
+ */
+PHYSICAL_ADDRESS MmGetPhysicalAddress(PVOID BaseAddress);
+
+/*
+ * FUNCTION: Maps the physical pages described by an MDL into system space
+ * ARGUMENTS:
+ * Mdl = mdl
+ * RETURNS: The base system address for the mapped buffer
+ */
+PVOID MmGetSystemAddressForMdl(PMDL Mdl);
+
+/*
+ * FUNCTION: Initalizes an mdl
+ * ARGUMENTS:
+ * MemoryDescriptorList = MDL to be initalized
+ * BaseVa = Base virtual address of the buffer
+ * Length = Length in bytes of the buffer
+ */
+VOID MmInitalizeMdl(PMDL MemoryDescriptorList, PVOID BaseVa, ULONG Length);
+
+/*
+ * FUNCTION: Checks whether an address is valid for read/write
+ * ARGUMENTS:
+ * VirtualAddress = address to be check
+ * RETURNS: TRUE if an access would be valid
+ */
+BOOLEAN MmIsAddressValid(PVOID VirtualAddress);
+
+/*
+ * FUNCTION: Checks if the current platform is a workstation or a server
+ * RETURNS: If the system is a server returns true
+ * NOTE: Drivers can use this as an estimate of the likely resources
+ * available
+ */
+BOOLEAN MmIsThisAnAsSystem(VOID);
+
+/*
+ * FUNCTION: Locks a section of the driver's code into memory
+ * ARGUMENTS:
+ * AddressWithinSection = Any address in the region
+ * RETURNS: A handle to the region
+ */
+PVOID MmLockPagableCodeSection(PVOID AddressWithinSection);
+
+/*
+ * FUNCTION: Locks a section of the driver's data into memory
+ * ARGUMENTS:
+ * AddressWithinSection = Any address in the region
+ * RETURNS: A handle to the region
+ */
+PVOID MmLockPagableDataSection(PVOID AddressWithinSection);
+
+/*
+ * FUNCTION: Locks a section of memory
+ * ARGUMENTS:
+ * ImageSectionHandle = handle returned from MmLockPagableCodeSection
+ * or MmLockPagableDataSection
+ */
+VOID MmLockPagableSectionByHandle(PVOID ImageSectionHandle);
+
+/*
+ * FUNCTION: Maps a physical memory range into system space
+ * ARGUMENTS:
+ * PhysicalAddress = First physical address to map
+ * NumberOfBytes = Number of bytes to map
+ * CacheEnable = TRUE if the range can be cached
+ * RETURNS: The base virtual address which maps the region
+ */
+PVOID MmMapIoSpace(PHYSICAL_ADDRESS PhysicalAddress, ULONG NumberOfBytes,
+ BOOLEAN CacheEnable);
+
+/*
+ * FUNCTION: Maps the pages described by a given MDL
+ * ARGUMENTS:
+ * MemoryDescriptorList = MDL updated by MmProbeAndLockPages
+ * AccessMode = Access mode in which to map the MDL
+ * RETURNS: The base virtual address which maps the buffer
+ */
+PVOID MmMapLockedPages(PMDL MemoryDescriptorList, KPROCESSOR_MODE AccessMode);
+
+/*
+ * FUNCTION: Makes the whole driver pageable
+ * ARGUMENTS:
+ * AddressWithinSection = Any address within the driver
+ */
+VOID MmPageEntireDriver(PVOID AddressWithinSection);
+
+/*
+ * FUNCTION: Resets the pageable status of a driver's sections to their
+ * compile time settings
+ * ARGUMENTS:
+ * AddressWithinSection = Any address within the driver
+ */
+VOID MmResetDriverPaging(PVOID AddressWithinSection);
+
+/*
+ * FUNCTION: Reinitializes a caller-allocated MDL
+ * ARGUMENTS:
+ * Mdl = Points to the MDL that will be reused
+ */
+VOID MmPrepareMdlForReuse(PMDL Mdl);
+
+/*
+ * FUNCTION: Probes the specified pages, makes them resident and locks
+ * the physical pages mapped by the virtual address range
+ * ARGUMENTS:
+ * MemoryDescriptorList = MDL which supplies the virtual address,
+ * byte offset and length
+ * AccessMode = Access mode with which to probe the arguments
+ * Operation = Types of operation for which the pages should be
+ * probed
+ */
+VOID MmProbeAndLockPages(PMDL MemoryDescriptorList,
+ KPROCESSOR_MODE AccessMode,
+ LOCK_OPERATION Operation);
+
+/*
+ * FUNCTION: Returns an estimate of the amount of memory in the system
+ * RETURNS: Either MmSmallSystem, MmMediumSystem or MmLargeSystem
+ */
+MM_SYSTEM_SIZE MmQuerySystemSize(VOID);
+
+/*
+ * FUNCTION: Returns the number of bytes to allocate for an MDL
+ * describing a given address range
+ * ARGUMENTS:
+ * Base = Base virtual address for the region
+ * Length = size in bytes of the region
+ * RETURNS: The number of bytes required for the MDL
+ */
+ULONG MmSizeOfMdl(PVOID Base, ULONG Length);
+
+/*
+ * FUNCTION: Unlocks the physical pages described by a given MDL
+ * ARGUMENTS:
+ * Mdl = Mdl to unlock
+ */
+VOID MmUnlockPages(PMDL Mdl);
+
+/*
+ * FUNCTION: Releases a section of driver code or data previously locked into
+ * memory
+ * ARGUMENTS:
+ * ImageSectionHandle = Handle for the locked section
+ */
+VOID MmUnlockPagableImageSection(PVOID ImageSectionHandle);
+
+VOID MmUnmapIoSpace(PVOID BaseAddress, ULONG NumberOfBytes);
+VOID MmUnmapLockedPages(PVOID BaseAddress, PMDL MemoryDescriptorList);
--- /dev/null
+typedef struct _MDL
+/*
+ * PURPOSE: Describes a user buffer passed to a system API
+ */
+{
+ /*
+ * Base address of the buffer in user mode
+ */
+ PVOID Base;
+
+ /*
+ * Length of the buffer in bytes
+ */
+ ULONG Length;
+
+ /*
+ * System address of buffer or NULL if not mapped
+ */
+ PVOID SysBase;
+
+ /*
+ * Below this is a variable length list of page physical address
+ */
+} MDL, *PMDL;
--- /dev/null
+/*\r
+ * COPYRIGHT: See COPYING in the top level directory\r
+ * PROJECT: ReactOS kernel\r
+ * FILE: include/ddk/ntddk.h\r
+ * PURPOSE: Interface definitions for drivers\r
+ * PROGRAMMER: David Welch (welch@mcmail.com)\r
+ * UPDATE HISTORY:\r
+ * 15/05/98: Created\r
+ */\r
+\r
+#ifndef __NTDDK_H\r
+#define __NTDDK_H\r
+\r
+#ifdef __cplusplus\r
+extern "C"\r
+{\r
+#endif\r
+\r
+/* INCLUDES ***************************************************************/\r
+\r
+#include <windows.h>\r
+#include <internal/hal/page.h>\r
+\r
+#include <ddk/defines.h>\r
+#include <ddk/types.h>\r
+#include <ddk/structs.h>\r
+#include <internal/hal/ddk.h>\r
+#include <ddk/rtl.h>\r
+#include <ddk/zw.h>\r
+#include <ddk/exfuncs.h>\r
+#include <ddk/mmfuncs.h>\r
+#include <ddk/kefuncs.h>\r
+#include <ddk/iofuncs.h> \r
+#include <ddk/psfuncs.h>\r
+ \r
+#ifdef __cplusplus\r
+};\r
+#endif\r
+\r
+#endif /* __NTDDK_H */\r
+\r
--- /dev/null
+/* OBJECT MANAGER ************************************************************/
+
+/*
+ * FUNCTION: Decrements the object's reference count and performs retention
+ * checks
+ * ARGUMENTS:
+ * Object = Object's body
+ */
+VOID ObDeferenceObject(PVOID Object);
+
+/*
+ * FUNCTION: Performs access validation on an object handle and if access
+ * is granted returns a pointer to the object's body
+ * ARGUMENTS:
+ * Handle = Handle to the object
+ * DesiredAccess = Desired access to the object
+ * ObjectType (OPTIONAL) = Pointer to the object's type definition
+ * AccessMode = Access mode to use for the check
+ * Object (OUT) = Caller supplied storage for a pointer to the object's
+ * body
+ * HandleInformation (OUT) = Points to a structure which receives
+ * information about the handle
+ * RETURNS: Status
+ */
+NTSTATUS ObReferenceObjectByHandle(HANDLE Handle,
+ ACCESS_MASK DesiredAccess,
+ POBJECT_TYPE ObjectType,
+ KPROCESSOR_MODE AccessMode,
+ PVOID* Object,
+ POBJECT_HANDLE_INFORMATION HandleInfo);
+
+/*
+ * FUNCTION: Increments the reference count for a given object
+ * ARGUMENTS:
+ * Object = Points to the body of the object
+ * AccessMode = Requested access to the object
+ * ObjectType = Pointer to the object's type definition
+ * AccessMode = Access mode to use for the security check
+ * RETURNS: Status
+ */
+NTSTATUS ObReferenceObjectByPointer(PVOID Object,
+ ACCESS_MASK DesiredAccess,
+ POBJECT_TYPE ObjectType,
+ KPROCESSOR_MODE AccessMode);
--- /dev/null
+struct _DIRECTORY_OBJECT;
+
+typedef struct _OBJECT_HANDLE_INFORMATION {
+ ULONG HandleAttributes;
+ ACCESS_MASK GrantedAccess;
+} OBJECT_HANDLE_INFORMATION, *POBJECT_HANDLE_INFORMATION;
+
+struct _OBJECT;
+
+typedef struct _OBJECT_TYPE
+{
+ /*
+ * PURPOSE: Name of the type
+ */
+ LPCSTR 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: Dumps the object
+ * NOTE: To be defined
+ */
+ VOID (*Dump)(VOID);
+
+ /*
+ * PURPOSE: Opens the object
+ * NOTE: To be defined
+ */
+ VOID (*Open)(VOID);
+
+ /*
+ * PURPOSE: Called to close an object if OkayToClose returns true
+ */
+ VOID (*Close)(VOID);
+
+ /*
+ * PURPOSE: Called to close an object if OkayToClose returns true
+ */
+ VOID (*Delete)(VOID);
+
+ /*
+ * PURPOSE: Called when an open attempts to open a file apparently
+ * residing within the object
+ */
+ VOID (*Parse)(VOID);
+
+ /*
+ */
+ VOID (*Security)(VOID);
+
+ /*
+ */
+ VOID (*QueryName)(VOID);
+
+ /*
+ * PURPOSE: Called when a process asks to close the object
+ */
+ VOID (*OkayToClose)(VOID);
+
+} OBJECT_TYPE, *POBJECT_TYPE;
+
+
+typedef struct _OBJECT
+/*
+ * PURPOSE: Header for every object managed by the object manager
+ */
+{
+ /*
+ * PURPOSE: Name of this entry
+ */
+ LPCSTR name;
+
+ /*
+ * PURPOSE: Our entry in our parents list of subdirectory
+ */
+ LIST_ENTRY entry;
+
+ /*
+ * PURPOSE: Number of non-handle references to this object
+ */
+ ULONG RefCount;
+
+ /*
+ * PURPOSE: Number of handles opened to this object
+ */
+ ULONG HandleCount;
+
+ /*
+ * 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;
+
+/*
+ * PURPOSE: Defines an object
+ */
+typedef struct _OBJECT_ATTRIBUTES
+{
+ ULONG Length;
+
+ /*
+ * PURPOSE: Attributes of the object
+ */
+ ULONG Attributes;
+
+ //SECURITY_DESCRIPTOR SecurityDescriptor
+ //SecurityQualityOfService
+
+ struct _DIRECTORY_OBJECT* parent;
+ char* name;
+ char* path;
+
+} OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES;
--- /dev/null
+
+
+typedef NTSTATUS (*PKSTART_ROUTINE)(PVOID StartContext);
+
+/*
+ * FUNCTION: Creates a thread which executes in kernel mode
+ * ARGUMENTS:
+ * ThreadHandle (OUT) = Caller supplied storage for the returned thread
+ * handle
+ * DesiredAccess = Requested access to the thread
+ * ObjectAttributes = Object attributes (optional)
+ * ProcessHandle = Handle of process thread will run in
+ * NULL to use system process
+ * ClientId (OUT) = Caller supplied storage for the returned client id
+ * of the thread (optional)
+ * StartRoutine = Entry point for the thread
+ * StartContext = Argument supplied to the thread when it begins
+ * execution
+ * RETURNS: Success or failure status
+ */
+NTSTATUS PsCreateSystemThread(PHANDLE ThreadHandle,
+ ACCESS_MASK DesiredAccess,
+ POBJECT_ATTRIBUTES ObjectAttributes,
+ HANDLE ProcessHandle,
+ PCLIENT_ID ClientId,
+ PKSTART_ROUTINE StartRoutine,
+ PVOID StartContext);
--- /dev/null
+#ifndef __INCLUDE_DDK_PSTYPES_H
+#define __INCLUDE_DDK_PSTYPES_H
+
+#include <kernel32/heap.h>
+
+typedef struct _CLIENT_ID
+{
+ HANDLE UniqueProcess;
+ HANDLE UniqueThread;
+} CLIENT_ID, *PCLIENT_ID;
+
+//typedef void* HEAP;
+typedef void* HANDLE_TABLE;
+typedef void* ATOMTABLE;
+
+typedef struct _pPebInfo {
+ LPWSTR lpCommandLine;
+ DWORD cb;
+ HANDLE hStdInput; //18
+ HANDLE hStdput;
+ HANDLE hStdError;
+ LPWSTR lpEnvironment;
+ DWORD dwX;
+ DWORD dwY;
+ DWORD dwXSize;
+ DWORD dwYSize;
+ DWORD dwXCountChars;
+ DWORD dwYCountChars;
+ DWORD dwFillAttribute;
+ DWORD dwFlags;
+ DWORD wShowWindow;
+ LPTSTR lpTitle;
+ LPTSTR lpDesktop;
+ LPTSTR reserved;
+ DWORD cbReserved2;
+ LPTSTR lpReserved1;
+} PEBINFO;
+
+typedef struct _NT_PEB
+{
+
+ LONG ImageBaseAddress;
+ DWORD nActiveStdHandle;
+ void *HeapIndex;
+ DWORD dwTlsBits[2]; // tls in use bits
+ WORD NumberOfProcessors;
+ WORD NtGlobalFlag;
+ DWORD dwCriticalSectionTime;
+ DWORD dwHeapReserve;
+ DWORD dwHeapCommit;
+ DWORD dwHeapDecommitFreeBlockThreshold;
+ DWORD dwNumberOfHeaps;
+ DWORD dwMaxiumNumberOfHeaps;
+ PEBINFO *pPebInfo;
+ HEAP *pProcessHeap;
+ HANDLE_TABLE htGDISharedHandleTable;
+ ATOMTABLE LocalAtomTable;
+ CRITICAL_SECTION *pCriticalSection;
+ WORD wMajorVersion;
+ WORD wMinorVersion;
+ WORD wBuildNumber;
+ WORD wPlatformId;
+} NT_PEB;
+
+typedef NT_PEB *PPEB;
+
+
+
+typedef struct _NT_TIB {
+ struct _EXCEPTION_REGISTRATION_RECORD *ExceptionList;
+ PVOID StackBase;
+ PVOID StackLimit;
+ PVOID SubSystemTib;
+ union {
+ PVOID FiberData;
+ ULONG Version;
+ } s;
+ PVOID ArbitraryUserPointer;
+ struct _NT_TIB *Self;
+} NT_TIB, *PNT_TIB;
+
+typedef struct _NT_TEB
+{
+
+ NT_TIB Tib;
+ DWORD dwProcessId;
+ DWORD dwThreadId;
+ HANDLE hRPC;
+ NT_PEB *pPeb;
+ DWORD dwErrCode;
+ WORD nMutexCount;
+ LCID Locale;
+ //HQUEUE MessageQueue
+ DWORD dwTlsIndex ;
+ LPVOID TlsData[512];
+
+
+} NT_TEB;
+
+
+typedef NT_TEB *PINITIAL_TEB;
+
+typedef struct _EPROCESS
+{
+} EPROCESS, *PEPROCESS;
+
+typedef struct _ETHREAD
+{
+} ETHREAD, *PETHREAD;
+
+#endif /* __INCLUDE_DDK_PSTYPES_H */
--- /dev/null
+/*
+ *
+ */
+
+#ifndef __DDK_RTL_H
+#define __DDK_RTL_H
+
+typedef struct _TIME_FIELDS
+{
+ CSHORT Year;
+ CSHORT Month;
+ CSHORT Day;
+ CSHORT Hour;
+ CSHORT Minute;
+ CSHORT Second;
+ CSHORT Milliseconds;
+ CSHORT Weekday;
+} TIME_FIELDS, *PTIME_FIELDS;
+
+/*
+ * PURPOSE: Flags for RtlQueryRegistryValues
+ */
+enum
+{
+ RTL_QUERY_REGISTRY_SUBKEY,
+ RTL_QUERY_REGISTRY_TOPKEY,
+ RTL_QUERY_REGISTRY_REQUIRED,
+ RTL_QUERY_REGISTRY_NOVALUE,
+ RTL_QUERY_REGISTRY_NOEXPAND,
+ RTL_QUERY_REGISTRY_DIRECT,
+ RTL_QUERY_REGISTRY_DELETE,
+};
+
+typedef NTSTATUS (*PRTL_QUERY_REGISTRY_ROUTINE)(PWSTR ValueName,
+ ULONG ValueType,
+ PVOID ValueData,
+ ULONG ValueLength,
+ PVOID Context,
+ PVOID EntryContext);
+
+typedef struct _RTL_QUERY_REGISTRY_TABLE
+{
+ PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine;
+ ULONG Flags;
+ PWSTR Name;
+ PVOID EntryContext;
+ ULONG DefaultType;
+ PVOID DefaultData;
+ ULONG DefaultLength;
+} RTL_QUERY_REGISTRY_TABLE, *PRTL_QUERY_REGISTRY_TABLE;
+
+/*
+ * PURPOSE: Used with RtlCheckRegistryKey, RtlCreateRegistryKey,
+ * RtlDeleteRegistryKey
+ */
+enum
+{
+ RTL_REGISTRY_ABSOLUTE,
+ RTL_REGISTRY_SERVICES,
+ RTL_REGISTRY_CONTROL,
+ RTL_REGISTRY_WINDOWS_NT,
+ RTL_REGISTRY_DEVICEMAP,
+ RTL_REGISTRY_USER,
+ RTL_REGISTRY_OPTIONAL,
+ RTL_REGISTRY_VALUE,
+};
+
+/*
+ * FUNCTION: Sets up a parameter of type OBJECT_ATTRIBUTES for a
+ * subsequent call to ZwCreateXXX or ZwOpenXXX
+ * ARGUMENTS:
+ * InitializedAttributes (OUT) = Caller supplied storage for the
+ * object attributes
+ * ObjectName = Full path name for object
+ * Attributes = Attributes for the object
+ * RootDirectory = Where the object should be placed or NULL
+ * SecurityDescriptor = Ignored
+ */
+VOID InitializeObjectAttributes(POBJECT_ATTRIBUTES InitializedAttributes,
+ PUNICODE_STRING ObjectName,
+ ULONG Attributes,
+ HANDLE RootDirectory,
+ PSECURITY_DESCRIPTOR SecurityDescriptor);
+
+VOID InitializeListHead(PLIST_ENTRY ListHead);
+VOID InsertHeadList(PLIST_ENTRY ListHead, PLIST_ENTRY Entry);
+VOID InsertTailList(PLIST_ENTRY ListHead, PLIST_ENTRY Entry);
+BOOLEAN IsListEmpty(PLIST_ENTRY ListHead);
+PSINGLE_LIST_ENTRY PopEntryList(PSINGLE_LIST_ENTRY ListHead);
+VOID PushEntryList(PSINGLE_LIST_ENTRY ListHead, PSINGLE_LIST_ENTRY Entry);
+VOID RemoveEntryList(PLIST_ENTRY Entry);
+PLIST_ENTRY RemoveHeadList(PLIST_ENTRY ListHead);
+PLIST_ENTRY RemoveTailList(PLIST_ENTRY ListHead);
+ULONG RtlAnsiStringToUnicodeSize(PANSI_STRING AnsiString);
+NTSTATUS RtlAnsiStringToUnicodeString(PUNICODE_STRING DestinationString,
+ PANSI_STRING SourceString,
+ BOOLEAN AllocateDestinationString);
+NTSTATUS RtlAppendUnicodeStringToString(PUNICODE_STRING Destination,
+ PUNICODE_STRING Source);
+NTSTATUS RtlAppendUnicodeToString(PUNICODE_STRING Destination,
+ PWSTR Source);
+NTSTATUS RtlCharToInteger(PCSZ String, ULONG Base, PULONG Value);
+NTSTATUS RtlCheckRegistryKey(ULONG RelativeTo, PWSTR Path);
+ULONG RtlCompareMemory(PVOID Source1, PVOID Source2, ULONG Length);
+LONG RtlCompareString(PSTRING String1, PSTRING String2,
+ BOOLEAN CaseInsensitive);
+LONG RtlCompareUnicodeString(PUNICODE_STRING String1,
+ PUNICODE_STRING String2,
+ BOOLEAN BaseInsensitive);
+LARGE_INTEGER RtlConvertLongToLargeInteger(LONG SignedInteger);
+LARGE_INTEGER RtlConvertUlongToLargeInteger(ULONG UnsignedInteger);
+VOID RtlCopyBytes(PVOID Destination, CONST VOID* Source, ULONG Length);
+VOID RtlCopyMemory(VOID* Destination, VOID* Source, ULONG Length);
+VOID RtlCopyString(PSTRING DestinationString, PSTRING SourceString);
+VOID RtlCopyUnicodeString(PUNICODE_STRING DestinationString,
+ PUNICODE_STRING SourceString);
+NTSTATUS RtlCreateRegistryKey(ULONG RelativeTo,
+ PWSTR Path);
+NTSTATUS RtlCreateSecurityDescriptor(PSECURITY_DESCRIPTOR SecurityDescriptor,
+ ULONG Revision);
+NTSTATUS RtlDeleteRegistryValue(ULONG RelativeTo,
+ PWSTR Path,
+ PWSTR ValueName);
+LARGE_INTEGER RtlEnlargedIntegerMultiply(LONG Multiplicand,
+ LONG Multiplier);
+ULONG RtlEnlargedUnsignedDivide(ULARGE_INTEGER Dividend,
+ ULONG Divisor,
+ PULONG Remainder);
+LARGE_INTEGER RtlEnlargedUnsignedMultiply(ULONG Multiplicand,
+ ULONG Multiplier);
+BOOLEAN RtlEqualString(PSTRING String1,
+ PSTRING String2,
+ BOOLEAN CaseInSensitive);
+BOOLEAN RtlEqualUnicodeString(PUNICODE_STRING String1,
+ PUNICODE_STRING String2,
+ BOOLEAN CaseInSensitive);
+LARGE_INTEGER RtlExtendedIntegerMultiply(LARGE_INTEGER Multiplicand,
+ LONG Multiplier);
+LARGE_INTEGER RtlExtendedLargeIntegerDivide(LARGE_INTEGER Dividend,
+ ULONG Divisor,
+ PULONG Remainder);
+LARGE_INTEGER RtlExtendedMagicDivide(LARGE_INTEGER Dividend,
+ LARGE_INTEGER MagicDivisor,
+ CCHAR ShiftCount);
+VOID RtlFillMemory(PVOID Destination, ULONG Length, UCHAR Fill);
+VOID RtlFreeAnsiString(PANSI_STRING AnsiString);
+VOID RtlFreeUnicodeString(PUNICODE_STRING UnicodeString);
+VOID RtlInitAnsiString(PANSI_STRING DestinationString,
+ PCSZ SourceString);
+VOID RtlInitString(PSTRING DestinationString, PCSZ SourceString);
+VOID RtlInitUnicodeString(PUNICODE_STRING DestinationString,
+ PCWSTR SourceString);
+NTSTATUS RtlIntegerToUnicodeString(ULONG Value,
+ ULONG Base,
+ PUNICODE_STRING String);
+LARGE_INTEGER RtlLargeIntegerAdd(LARGE_INTEGER Addend1,
+ LARGE_INTEGER Addend2);
+VOID RtlLargeIntegerAnd(PLARGE_INTEGER Result,
+ LARGE_INTEGER Source,
+ LARGE_INTEGER Mask);
+
+/* MISSING FUNCTIONS GO HERE */
+
+ULONG RtlLengthSecurityDescriptor(PSECURITY_DESCRIPTOR SecurityDescriptor);
+VOID RtlMoveMemory(PVOID Destination, CONST VOID* Source, ULONG Length);
+NTSTATUS RtlQueryRegistryValues(ULONG RelativeTo,
+ PWSTR Path,
+ PRTL_QUERY_REGISTRY_TABLE QueryTable,
+ PVOID Context, PVOID Environment);
+VOID RtlRetrieveUlong(PULONG DestinationAddress,
+ PULONG SourceAddress);
+VOID RtlRetrieveUshort(PUSHORT DestinationAddress,
+ PUSHORT SourceAddress);
+NTSTATUS RtlSetDaclSecurityDescriptor(PSECURITY_DESCRIPTOR SecurityDescriptor,
+ BOOLEAN DaclPresent,
+ PACL Dacl,
+ BOOLEAN DaclDefaulted);
+VOID RtlStoreLong(PULONG Address, ULONG Value);
+VOID RtlStoreUshort(PUSHORT Address, USHORT Value);
+BOOLEAN RtlTimeFieldsToTime(PTIME_FIELDS TimeFields, PLARGE_INTEGER Time);
+VOID RtlTimeToTimeFields(PLARGE_INTEGER Time, PTIME_FIELDS TimeFields);
+
+
+#endif /* __DDK_RTL_H */
--- /dev/null
+/* SYSTEM STRUCTURES ******************************************************/\r
+\r
+#include <internal/hal/hal.h>\r
+#include <ddk/cfgtypes.h>\r
+#include <ddk/ketypes.h>\r
+#include <ddk/obtypes.h>\r
+#include <ddk/mmtypes.h>\r
+#include <ddk/iotypes.h>\r
+#include <ddk/extypes.h>\r
+#include <ddk/pstypes.h>\r
+\r
+/*\r
+ * PURPOSE: Thread object\r
+ */\r
+typedef struct \r
+{\r
+ CSHORT Type;\r
+ CSHORT Size;\r
+ \r
+ /*\r
+ * PURPOSE: Entry in the linked list of threads\r
+ */\r
+ LIST_ENTRY Entry;\r
+ \r
+ /*\r
+ * PURPOSE: Current state of the thread\r
+ */\r
+ ULONG State;\r
+ \r
+ /*\r
+ * PURPOSE: Priority modifier of the thread\r
+ */\r
+ ULONG Priority;\r
+ \r
+ /*\r
+ * PURPOSE: Pointer to our parent process\r
+ */\r
+// PEPROCESS Parent;\r
+ \r
+ /*\r
+ * PURPOSE: Handle of our parent process\r
+ */\r
+ HANDLE ParentHandle;\r
+ \r
+ /*\r
+ * PURPOSE: Not currently used \r
+ */\r
+ ULONG AffinityMask;\r
+ \r
+ /*\r
+ * PURPOSE: Saved thread context\r
+ */\r
+ hal_thread_state context;\r
+ \r
+} THREAD_OBJECT, *PTHREAD_OBJECT;\r
+\r
+\r
+\r
+/*\r
+ * PURPOSE: Object describing the wait a thread is currently performing\r
+ */\r
+typedef struct\r
+{\r
+ /*\r
+ * PURPOSE: Pointer to the waiting thread\r
+ */\r
+ PTHREAD_OBJECT thread;\r
+ \r
+ /*\r
+ * PURPOSE: Entry in the wait queue for the object being waited on\r
+ */\r
+ LIST_ENTRY Entry;\r
+ \r
+ /*\r
+ * PURPOSE: Pointer to the object being waited on\r
+ */\r
+ DISPATCHER_HEADER* wait_object;\r
+ \r
+} KWAIT_BLOCK, *PKWAIT_BLOCK;\r
+ \r
+typedef struct _ADAPTER_OBJECT\r
+{\r
+} ADAPTER_OBJECT, *PADAPTER_OBJECT;\r
+\r
+typedef struct _CONTROLLER_OBJECT\r
+{\r
+ PVOID ControllerExtension; \r
+} CONTROLLER_OBJECT, *PCONTROLLER_OBJECT;\r
+ \r
+typedef struct _STRING\r
+{\r
+ /*\r
+ * Length in bytes of the string stored in buffer\r
+ */\r
+ USHORT Length;\r
+ \r
+ /*\r
+ * Maximum length of the string \r
+ */\r
+ USHORT MaximumLength;\r
+ \r
+ /*\r
+ * String\r
+ */\r
+ PCHAR Buffer;\r
+} STRING, *PSTRING;\r
+\r
+typedef struct _ANSI_STRING\r
+{\r
+ /*\r
+ * Length in bytes of the string stored in buffer\r
+ */\r
+ USHORT Length;\r
+ \r
+ /*\r
+ * Maximum length of the string \r
+ */\r
+ USHORT MaximumLength;\r
+ \r
+ /*\r
+ * String\r
+ */\r
+ PCHAR Buffer;\r
+} ANSI_STRING, *PANSI_STRING;\r
+\r
+typedef struct _KTIMER\r
+{\r
+ /*\r
+ * Pointers to maintain the linked list of activated timers\r
+ */\r
+ LIST_ENTRY entry;\r
+ \r
+ /*\r
+ * Absolute expiration time in system time units\r
+ */\r
+ unsigned long long expire_time;\r
+\r
+ /*\r
+ * Optional dpc associated with the timer \r
+ */\r
+ PKDPC dpc;\r
+ \r
+ /*\r
+ * True if the timer is signaled\r
+ */\r
+ BOOLEAN signaled;\r
+ \r
+ /*\r
+ * True if the timer is in the system timer queue\r
+ */\r
+ BOOLEAN running;\r
+ \r
+ /*\r
+ * Type of the timer either Notification or Synchronization\r
+ */\r
+ TIMER_TYPE type;\r
+ \r
+ /*\r
+ * Period of the timer in milliseconds (zero if once-only)\r
+ */\r
+ ULONG period;\r
+ \r
+} KTIMER, *PKTIMER;\r
+\r
+\r
+\r
+\r
+typedef struct _IO_RESOURCE_DESCRIPTOR\r
+{\r
+ UCHAR Option;\r
+ UCHAR Type;\r
+ UCHAR SharedDisposition;\r
+ \r
+ /*\r
+ * Reserved for system use\r
+ */\r
+ UCHAR Spare1; \r
+ \r
+ USHORT Flags;\r
+ \r
+ /*\r
+ * Reserved for system use\r
+ */\r
+ UCHAR Spare2;\r
+ \r
+ union\r
+ {\r
+ struct\r
+ {\r
+ ULONG Length;\r
+ ULONG Alignment;\r
+ PHYSICAL_ADDRESS MinimumAddress;\r
+ PHYSICAL_ADDRESS MaximumAddress;\r
+ } Port;\r
+ struct\r
+ {\r
+ ULONG Length;\r
+ ULONG Alignment;\r
+ PHYSICAL_ADDRESS MinimumAddress;\r
+ PHYSICAL_ADDRESS MaximumAddress;\r
+ } Memory;\r
+ struct\r
+ { \r
+ ULONG MinimumVector;\r
+ ULONG MaximumVector;\r
+ } Interrupt;\r
+ struct\r
+ {\r
+ ULONG MinimumChannel;\r
+ ULONG MaximumChannel;\r
+ } Dma;\r
+ } u; \r
+} IO_RESOURCE_DESCRIPTOR, *PIO_RESOURCE_DESCRIPTOR;\r
+\r
+typedef struct _IO_RESOURCE_LIST\r
+{\r
+ USHORT Version;\r
+ USHORT Revision;\r
+ ULONG Count;\r
+ IO_RESOURCE_DESCRIPTOR Descriptors[1];\r
+} IO_RESOURCE_LIST, *PIO_RESOURCE_LIST;\r
+\r
+typedef struct _IO_RESOURCES_REQUIREMENTS_LIST\r
+{\r
+ /*\r
+ * List size in bytes\r
+ */\r
+ ULONG ListSize;\r
+ \r
+ /*\r
+ * System defined enum for the bus\r
+ */\r
+ INTERFACE_TYPE InterfaceType;\r
+ \r
+ ULONG BusNumber;\r
+ ULONG SlotNumber;\r
+ ULONG Reserved[3];\r
+ ULONG AlternativeLists;\r
+ IO_RESOURCE_LIST List[1]; \r
+} IO_RESOURCES_REQUIREMENTS_LIST, *PIO_RESOURCE_REQUIREMENTS_LIST;\r
+\r
+typedef struct\r
+{\r
+ UCHAR Type;\r
+ UCHAR ShareDisposition;\r
+ USHORT Flags;\r
+ union\r
+ {\r
+ struct\r
+ {\r
+ PHYSICAL_ADDRESS Start;\r
+ ULONG Length;\r
+ } Port;\r
+ struct\r
+ {\r
+ ULONG Level;\r
+ ULONG Vector;\r
+ ULONG Affinity;\r
+ } Interrupt;\r
+ struct\r
+ {\r
+ PHYSICAL_ADDRESS Start;\r
+ ULONG Length;\r
+ } Memory;\r
+ struct\r
+ {\r
+ ULONG Channel;\r
+ ULONG Port;\r
+ ULONG Reserved1;\r
+ } Dma;\r
+ struct\r
+ {\r
+ ULONG DataSize;\r
+ ULONG Reserved1;\r
+ ULONG Reserved2;\r
+ } DeviceSpecificData;\r
+ } u;\r
+} CM_PARTIAL_RESOURCE_DESCRIPTOR, *PCM_PARTIAL_RESOURCE_DESCRIPTOR;\r
+\r
+typedef struct\r
+{\r
+ USHORT Version;\r
+ USHORT Revision;\r
+ ULONG Count;\r
+ CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors[1];\r
+} CM_PARTIAL_RESOURCE_LIST;\r
+\r
+typedef struct\r
+{\r
+ INTERFACE_TYPE InterfaceType;\r
+ ULONG BusNumber;\r
+ CM_PARTIAL_RESOURCE_LIST PartialResourceList;\r
+} CM_FULL_RESOURCE_DESCRIPTOR;\r
+\r
+typedef struct\r
+{\r
+ ULONG Count;\r
+ CM_FULL_RESOURCE_DESCRIPTOR List[1];\r
+} CM_RESOURCE_LIST, *PCM_RESOURCE_LIST;\r
+\r
+struct _KINTERRUPT;\r
+\r
+typedef BOOLEAN (*PKSERVICE_ROUTINE)(struct _KINTERRUPT* Interrupt, \r
+ PVOID ServiceContext);\r
+\r
+typedef struct _KINTERRUPT\r
+{\r
+ ULONG Vector;\r
+ KAFFINITY ProcessorEnableMask;\r
+ PKSPIN_LOCK IrqLock;\r
+ BOOLEAN Shareable;\r
+ BOOLEAN FloatingSave;\r
+ PKSERVICE_ROUTINE ServiceRoutine;\r
+ PVOID ServiceContext;\r
+ LIST_ENTRY Entry;\r
+ KIRQL SynchLevel;\r
+} KINTERRUPT, *PKINTERRUPT;\r
+\r
--- /dev/null
+#ifndef __DDK_TYPES_H
+#define __DDK_TYPES_H
+
+// these should be moved to a file like ntdef.h
+
+typedef const int CINT;
+
+
+typedef ULONG KAFFINITY;
+typedef KAFFINITY *PKAFFINITY;
+
+//typedef LONG KPRIORITY;
+
+typedef LONG NTSTATUS;
+
+typedef ULONG DEVICE_TYPE;
+
+
+
+
+
+enum
+{
+ DIRECTORY_QUERY,
+ DIRECTORY_TRAVERSE,
+ DIRECTORY_CREATE_OBJECT,
+ DIRECTORY_CREATE_SUBDIRECTORY,
+ DIRECTORY_ALL_ACCESS,
+};
+
+typedef unsigned long long ULONGLONG;
+
+/*
+ * General type for status information
+ */
+//typedef LONG NTSTATUS;
+
+/*
+ * Unicode string type
+ * FIXME: Real unicode please
+ */
+typedef char* PUNICODE_STRING;
+
+#if REAL_UNICODE
+typedef struct _UNICODE_STRING
+{
+ USHORT Length;
+ USHORT MaximumLength;
+ PWSTR Buffer;
+} UNICODE_STRING, *PUNICODE_STRING;
+#endif
+
+typedef enum _SECTION_INHERIT {
+ ViewShare = 1,
+ ViewUnmap = 2
+} SECTION_INHERIT;
+
+/*
+ * Various other types (all quite pointless)
+ */
+//typedef ULONG DEVICE_TYPE;
+typedef ULONG KPROCESSOR_MODE;
+typedef ULONG KIRQL;
+typedef KIRQL* PKIRQL;
+typedef ULONG IO_ALLOCATION_ACTION;
+//typedef ULONG INTERFACE_TYPE;
+typedef ULONG POOL_TYPE;
+typedef ULONG TIMER_TYPE;
+typedef ULONG MM_SYSTEM_SIZE;
+typedef ULONG LOCK_OPERATION;
+typedef ULONG KEY_INFORMATION_CLASS;
+typedef ULONG FILE_INFORMATION_CLASS;
+typedef ULONG KEY_VALUE_INFORMATION_CLASS;
+//typedef ULONG SECTION_INHERIT;
+typedef ULONG EVENT_TYPE;
+//typedef ULONG KAFFINITY;
+//typedef KAFFINITY* PKAFFINITY;
+typedef ULONG PHYSICAL_ADDRESS;
+typedef PHYSICAL_ADDRESS* PPHYSICAL_ADDRESS;
+typedef ULONG WAIT_TYPE;
+typedef ULONG KWAIT_REASON;
+typedef ULONG KINTERRUPT_MODE;
+typedef USHORT CSHORT;
+
+#endif
--- /dev/null
+/*\r
+ * COPYRIGHT: See COPYING in the top level directory\r
+ * PROJECT: ReactOS kernel\r
+ * PURPOSE: System call definitions\r
+ * FILE: include/ddk/zw.h\r
+ * REVISION HISTORY: \r
+ * ??/??/??: First few functions (David Welch)\r
+ * ??/??/??: Complete implementation by Boudewijn Dekker\r
+ * 13/07/98: Reorganised things a bit (David Welch)\r
+ */\r
+\r
+#ifndef __DDK_ZW_H\r
+#define __DDK_ZW_H\r
+\r
+#include <windows.h>\r
+\r
+/*\r
+ * FUNCTION: Closes an object handle\r
+ * ARGUMENTS:\r
+ * Handle = Handle to the object\r
+ * RETURNS: Status\r
+ */\r
+NTSTATUS ZwClose(HANDLE Handle);\r
+\r
+/*\r
+ * FUNCTION: Creates or opens a directory object, which is a container for\r
+ * other objects\r
+ * ARGUMENTS:\r
+ * DirectoryHandle (OUT) = Points to a variable which stores the\r
+ * handle for the directory on success\r
+ * DesiredAccess = Type of access the caller requires to the directory\r
+ * ObjectAttributes = Structures specifing the object attributes,\r
+ * initialized with InitializeObjectAttributes\r
+ * RETURNS: Status \r
+ */\r
+NTSTATUS ZwCreateDirectoryObject(PHANDLE DirectoryHandle,\r
+ ACCESS_MASK DesiredAccess,\r
+ POBJECT_ATTRIBUTES ObjectAttributes);\r
+\r
+/*\r
+ * FUNCTION: Creates or opens a registry key\r
+ * ARGUMENTS:\r
+ * KeyHandle (OUT) = Points to a variable which stores the handle\r
+ * for the key on success\r
+ * DesiredAccess = Access desired by the caller to the key \r
+ * ObjectAttributes = Initialized object attributes for the key\r
+ * TitleIndex = Who knows?\r
+ * Class = Object class of the key?\r
+ * CreateOptions = Options for the key creation\r
+ * Disposition (OUT) = Points to a variable which a status value\r
+ * indicating whether a new key was created\r
+ * RETURNS: Status\r
+ */\r
+NTSTATUS ZwCreateKey(PHANDLE KeyHandle, ACCESS_MASK DesiredAccess,\r
+ POBJECT_ATTRIBUTES ObjectAttributes,\r
+ ULONG TitleIndex, PUNICODE_STRING Class,\r
+ ULONG CreateOptions, PULONG Disposition);\r
+\r
+/*\r
+ * FUNCTION: Deletes a registry key\r
+ * ARGUMENTS:\r
+ * KeyHandle = Handle of the key\r
+ * RETURNS: Status\r
+ */\r
+NTSTATUS ZwDeleteKey(HANDLE KeyHandle);\r
+\r
+/*\r
+ * FUNCTION: Returns information about the subkeys of an open key\r
+ * ARGUMENTS:\r
+ * KeyHandle = Handle of the key whose subkeys are to enumerated\r
+ * Index = zero based index of the subkey for which information is\r
+ * request\r
+ * KeyInformationClass = Type of information returned\r
+ * KeyInformation (OUT) = Caller allocated buffer for the information\r
+ * about the key\r
+ * Length = Length in bytes of the KeyInformation buffer\r
+ * ResultLength (OUT) = Caller allocated storage which holds\r
+ * the number of bytes of information retrieved\r
+ * on return\r
+ * RETURNS: Status\r
+ */\r
+NTSTATUS ZwEnumerateKey(HANDLE KeyHandle, ULONG Index, \r
+ KEY_INFORMATION_CLASS KeyInformationClass,\r
+ PVOID KeyInformation, ULONG Length, \r
+ PULONG ResultLength);\r
+\r
+/*\r
+ * FUNCTION: Returns information about the value entries of an open key\r
+ * ARGUMENTS:\r
+ * KeyHandle = Handle of the key whose value entries are to enumerated\r
+ * Index = zero based index of the subkey for which information is\r
+ * request\r
+ * KeyInformationClass = Type of information returned\r
+ * KeyInformation (OUT) = Caller allocated buffer for the information\r
+ * about the key\r
+ * Length = Length in bytes of the KeyInformation buffer\r
+ * ResultLength (OUT) = Caller allocated storage which holds\r
+ * the number of bytes of information retrieved\r
+ * on return\r
+ * RETURNS: Status\r
+ */\r
+NTSTATUS ZwEnumerateValueKey(HANDLE KeyHandle, ULONG Index, \r
+ KEY_VALUE_INFORMATION_CLASS KeyInformationClass,\r
+ PVOID KeyInformation, ULONG Length, \r
+ PULONG ResultLength);\r
+\r
+\r
+/*\r
+ * FUNCTION: Forces a registry key to be committed to disk\r
+ * ARGUMENTS:\r
+ * KeyHandle = Handle of the key to be written to disk\r
+ * RETURNS: Status\r
+ */\r
+NTSTATUS ZwFlushKey(HANDLE KeyHandle);\r
+\r
+/*\r
+ * FUNCTION: Changes the attributes of an object to temporary\r
+ * ARGUMENTS:\r
+ * Handle = Handle for the object\r
+ * RETURNS: Status\r
+ */\r
+NTSTATUS ZwMakeTemporaryObject(HANDLE Handle);\r
+\r
+/*\r
+ * FUNCTION: Maps a view of a section into the virtual address space of a \r
+ * process\r
+ * ARGUMENTS:\r
+ * SectionHandle = Handle of the section\r
+ * ProcessHandle = Handle of the process\r
+ * BaseAddress = Desired base address (or NULL) on entry\r
+ * Actual base address of the view on exit\r
+ * ZeroBits = Number of high order address bits that must be zero\r
+ * CommitSize = Size in bytes of the initially committed section of \r
+ * the view \r
+ * SectionOffset = Offset in bytes from the beginning of the section\r
+ * to the beginning of the view\r
+ * ViewSize = Desired length of map (or zero to map all) on entry\r
+ * Actual length mapped on exit\r
+ * InheritDisposition = Specified how the view is to be shared with\r
+ * child processes\r
+ * AllocateType = Type of allocation for the pages\r
+ * Protect = Protection for the committed region of the view\r
+ * RETURNS: Status\r
+ */\r
+NTSTATUS ZwMapViewOfSection(HANDLE SectionHandle,\r
+ HANDLE ProcessHandle,\r
+ PVOID* BaseAddress,\r
+ ULONG ZeroBits,\r
+ ULONG CommitSize,\r
+ PLARGE_INTEGER SectionOffset,\r
+ PULONG ViewSize,\r
+ SECTION_INHERIT InheritDisposition,\r
+ ULONG AllocationType,\r
+ ULONG Protect);\r
+\r
+/*\r
+ * FUNCTION: Opens an existing key in the registry\r
+ * ARGUMENTS:\r
+ * KeyHandle (OUT) = Caller supplied storage for the resulting handle\r
+ * DesiredAccess = Requested access to the key\r
+ * ObjectAttribute = Initialized attributes for the object\r
+ * RETURNS: Status\r
+ */\r
+NTSTATUS ZwOpenKey(PHANDLE KeyHandle, ACCESS_MASK DesiredAccess,\r
+ POBJECT_ATTRIBUTES ObjectAttributes);\r
+\r
+/*\r
+ * FUNCTION: Opens an existing section object\r
+ * ARGUMENTS:\r
+ * KeyHandle (OUT) = Caller supplied storage for the resulting handle\r
+ * DesiredAccess = Requested access to the key\r
+ * ObjectAttribute = Initialized attributes for the object\r
+ * RETURNS: Status\r
+ */\r
+NTSTATUS ZwOpenSection(PHANDLE KeyHandle, ACCESS_MASK DesiredAccess,\r
+ POBJECT_ATTRIBUTES ObjectAttributes);\r
+\r
+/*\r
+ * FUNCTION: Returns information about an open file\r
+ * ARGUMENTS:\r
+ * FileHandle = Handle of the file to be queried\r
+ * IoStatusBlock (OUT) = Caller supplied storage for the result\r
+ * FileInformation (OUT) = Caller supplied storage for the file\r
+ * information\r
+ * Length = Length in bytes of the buffer for file information\r
+ * FileInformationClass = Type of information to be returned\r
+ * RETURNS: Status\r
+ */\r
+NTSTATUS ZwQueryInformationFile(HANDLE FileHandle,\r
+ PIO_STATUS_BLOCK IoStatusBlock,\r
+ PVOID FileInformation,\r
+ ULONG Length,\r
+ FILE_INFORMATION_CLASS FileInformationClass);\r
+\r
+#ifndef _NTNATIVE\r
+#define _NTNATIVE\r
+\r
+#ifdef __cplusplus\r
+extern "C" {\r
+#endif /* __cplusplus */\r
+\r
+#include <kernel32/heap.h>\r
+ \r
+#if KERNEL_SUPPORTS_OBJECT_ATTRIBUTES_CORRECTLY\r
+typedef struct _OBJECT_ATTRIBUTES {\r
+ ULONG Length;\r
+ HANDLE RootDirectory;\r
+ PUNICODE_STRING ObjectName;\r
+ ULONG Attributes;\r
+ SECURITY_DESCRIPTOR *SecurityDescriptor; \r
+ SECURITY_QUALITY_OF_SERVICE *SecurityQualityOfService; \r
+} OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES;\r
+#endif\r
+ \r
+#if IOTYPES_DIDNT_DECLARE_THIS\r
+typedef struct _IO_STATUS_BLOCK {\r
+ NTSTATUS Status;\r
+ ULONG Information;\r
+} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;\r
+#endif\r
+\r
+\r
+//typedef LARGE_INTEGER *PLARGE_INTEGER;\r
+\r
+//\r
+\r
+#define NtCurrentProcess() ( (HANDLE) 0xFFFFFFFF )\r
+#define NtCurrentThread() ( (HANDLE) 0xFFFFFFFE )\r
+\r
+\r
+\r
+// event access mask\r
+\r
+#define EVENT_READ_ACCESS 0x0001\r
+#define EVENT_WRITE_ACCESS 0x0002\r
+\r
+\r
+//process query / set information class\r
+\r
+#define ProcessBasicInformation 0\r
+#define ProcessQuotaLimits 1\r
+#define ProcessIoCounters 2\r
+#define ProcessVmCounters 3\r
+#define ProcessTimes 4\r
+#define ProcessBasePriority 5\r
+#define ProcessRaisePriority 6\r
+#define ProcessDebugPort 7\r
+#define ProcessExceptionPort 8\r
+#define ProcessAccessToken 9\r
+#define ProcessLdtInformation 10\r
+#define ProcessLdtSize 11\r
+#define ProcessDefaultHardErrorMode 12\r
+#define ProcessIoPortHandlers 13\r
+#define ProcessPooledUsageAndLimits 14\r
+#define ProcessWorkingSetWatch 15\r
+#define ProcessUserModeIOPL 16\r
+#define ProcessEnableAlignmentFaultFixup 17\r
+#define ProcessPriorityClass 18\r
+#define ProcessWx86Information 19\r
+#define ProcessHandleCount 20\r
+#define ProcessAffinityMask 21\r
+#define MaxProcessInfoClass 22\r
+\r
+// thread query / set information class\r
+\r
+#define ThreadBasicInformation 0\r
+#define ThreadTimes 1\r
+#define ThreadPriority 2\r
+#define ThreadBasePriority 3\r
+#define ThreadAffinityMask 4\r
+#define ThreadImpersonationToken 5\r
+#define ThreadDescriptorTableEntry 6\r
+#define ThreadEnableAlignmentFaultFixup 7\r
+#define ThreadEventPair 8\r
+#define ThreadQuerySetWin32StartAddress 9\r
+#define ThreadZeroTlsCell 10\r
+#define ThreadPerformanceCount 11\r
+#define ThreadAmILastThread 12\r
+#define ThreadIdealProcessor 13\r
+#define ThreadPriorityBoost 14\r
+#define MaxThreadInfoClass 15\r
+\r
+\r
+// key query information class\r
+\r
+#define KeyBasicInformation 0\r
+#define KeyNodeInformation 1\r
+#define KeyFullInformation 2\r
+\r
+\r
+// key set information class\r
+\r
+#define KeyWriteTimeInformation 0\r
+\r
+// key value information class\r
+\r
+#define KeyValueBasicInformation 0\r
+#define KeyValueFullInformation 1\r
+#define KeyValuePartialInformation 2\r
+\r
+// object handle information\r
+\r
+#define HandleBasicInformation 4\r
+\r
+// system information\r
+\r
+#define SystemTimeAdjustmentInformation 28\r
+\r
+\r
+// file information\r
+\r
+\r
+#define FileDirectoryInformation 1\r
+#define FileFullDirectoryInformation 2\r
+#define FileBothDirectoryInformation 3\r
+#define FileBasicInformation 4\r
+#define FileStandardInformation 5\r
+#define FileInternalInformation 6\r
+#define FileEaInformation 7\r
+#define FileAccessInformation 8\r
+#define FileNameInformation 9\r
+#define FileRenameInformation 10\r
+#define FileLinkInformation 11\r
+#define FileNamesInformation 12\r
+#define FileDispositionInformation 13\r
+#define FilePositionInformation 14\r
+#define FileFullEaInformation 15\r
+#define FileModeInformation 16\r
+#define FileAlignmentInformation 17\r
+#define FileAllInformation 18\r
+#define FileAllocationInformation 19\r
+#define FileEndOfFileInformation 20\r
+#define FileAlternateNameInformation 21\r
+#define FileStreamInformation 22\r
+#define FilePipeInformation 23\r
+#define FilePipeLocalInformation 24\r
+#define FilePipeRemoteInformation 25\r
+#define FileMailslotQueryInformation 26\r
+#define FileMailslotSetInformation 27\r
+#define FileCompressionInformation 28\r
+#define FileCopyOnWriteInformation 29\r
+#define FileCompletionInformation 30\r
+#define FileMoveClusterInformation 31\r
+#define FileOleClassIdInformation 32\r
+#define FileOleStateBitsInformation 33\r
+#define FileNetworkOpenInformation 34\r
+#define FileObjectIdInformation 35\r
+#define FileOleAllInformation 36\r
+#define FileOleDirectoryInformation 37\r
+#define FileContentIndexInformation 38\r
+#define FileInheritContentIndexInformation 39\r
+#define FileOleInformation 40\r
+#define FileMaximumInformation 41\r
+\r
+\r
+\r
+//file system information class values\r
+\r
+\r
+\r
+#define FileFsVolumeInformation 1\r
+#define FileFsLabelInformation 2\r
+#define FileFsSizeInformation 3\r
+#define FileFsDeviceInformation 4\r
+#define FileFsAttributeInformation 5\r
+#define FileFsControlInformation 6\r
+#define FileFsQuotaQueryInformation 7\r
+#define FileFsQuotaSetInformation 8\r
+#define FileFsMaximumInformation 9\r
+\r
+// wait type\r
+\r
+#define WaitAll 0\r
+#define WaitAny 1\r
+ \r
+ \r
+// key restore flags\r
+\r
+#define REG_WHOLE_HIVE_VOLATILE (0x00000001L) \r
+#define REG_REFRESH_HIVE (0x00000002L) \r
+\r
+\r
+#define OBJ_NAME_PATH_SEPARATOR ((WCHAR)L'\\')\r
+\r
+// object type access rights\r
+\r
+#define OBJECT_TYPE_CREATE (0x0001)\r
+#define OBJECT_TYPE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)\r
+\r
+\r
+// directory access rights\r
+\r
+#define DIRECTORY_QUERY (0x0001)\r
+#define DIRECTORY_TRAVERSE (0x0002)\r
+#define DIRECTORY_CREATE_OBJECT (0x0004)\r
+#define DIRECTORY_CREATE_SUBDIRECTORY (0x0008)\r
+\r
+#define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF)\r
+\r
+// symbolic link access rights\r
+\r
+#define SYMBOLIC_LINK_QUERY (0x0001)\r
+#define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)\r
+ \r
+typedef struct _PROCESS_WS_WATCH_INFORMATION {\r
+ PVOID FaultingPc;\r
+ PVOID FaultingVa;\r
+} PROCESS_WS_WATCH_INFORMATION, *PPROCESS_WS_WATCH_INFORMATION;\r
+\r
+typedef struct _PROCESS_BASIC_INFORMATION {\r
+ NTSTATUS ExitStatus;\r
+ PPEB PebBaseAddress;\r
+ KAFFINITY AffinityMask;\r
+ KPRIORITY BasePriority;\r
+ ULONG UniqueProcessId;\r
+ ULONG InheritedFromUniqueProcessId;\r
+} PROCESS_BASIC_INFORMATION, *PPROCESS_BASIC_INFORMATION;\r
+\r
+typedef struct _QUOTA_LIMITS {\r
+ ULONG PagedPoolLimit;\r
+ ULONG NonPagedPoolLimit;\r
+ ULONG MinimumWorkingSetSize;\r
+ ULONG MaximumWorkingSetSize;\r
+ ULONG PagefileLimit;\r
+ LARGE_INTEGER TimeLimit;\r
+} QUOTA_LIMITS, *PQUOTA_LIMITS;\r
+\r
+typedef struct _IO_COUNTERS {\r
+ ULONG ReadOperationCount;\r
+ ULONG WriteOperationCount;\r
+ ULONG OtherOperationCount;\r
+ LARGE_INTEGER ReadTransferCount;\r
+ LARGE_INTEGER WriteTransferCount;\r
+ LARGE_INTEGER OtherTransferCount;\r
+} IO_COUNTERS, *PIO_COUNTERS;\r
+\r
+\r
+typedef struct _VM_COUNTERS {\r
+ ULONG PeakVirtualSize;\r
+ ULONG VirtualSize;\r
+ ULONG PageFaultCount;\r
+ ULONG PeakWorkingSetSize;\r
+ ULONG WorkingSetSize;\r
+ ULONG QuotaPeakPagedPoolUsage;\r
+ ULONG QuotaPagedPoolUsage;\r
+ ULONG QuotaPeakNonPagedPoolUsage;\r
+ ULONG QuotaNonPagedPoolUsage;\r
+ ULONG PagefileUsage;\r
+ ULONG PeakPagefileUsage;\r
+} VM_COUNTERS, *PVM_COUNTERS;\r
+\r
+\r
+typedef struct _POOLED_USAGE_AND_LIMITS {\r
+ ULONG PeakPagedPoolUsage;\r
+ ULONG PagedPoolUsage;\r
+ ULONG PagedPoolLimit;\r
+ ULONG PeakNonPagedPoolUsage;\r
+ ULONG NonPagedPoolUsage;\r
+ ULONG NonPagedPoolLimit;\r
+ ULONG PeakPagefileUsage;\r
+ ULONG PagefileUsage;\r
+ ULONG PagefileLimit;\r
+} POOLED_USAGE_AND_LIMITS, *PPOOLED_USAGE_AND_LIMITS;\r
+\r
+\r
+typedef struct _PROCESS_ACCESS_TOKEN {\r
+ HANDLE Token;\r
+ HANDLE Thread;\r
+\r
+} PROCESS_ACCESS_TOKEN, *PPROCESS_ACCESS_TOKEN;\r
+\r
+typedef struct _KERNEL_USER_TIMES {\r
+ LARGE_INTEGER CreateTime;\r
+ LARGE_INTEGER ExitTime;\r
+ LARGE_INTEGER KernelTime;\r
+ LARGE_INTEGER UserTime;\r
+} KERNEL_USER_TIMES;\r
+typedef KERNEL_USER_TIMES *PKERNEL_USER_TIMES;\r
+\r
+// exception structures\r
+\r
+\r
+#define TEB_EXCEPTION_FRAME(pcontext) ((PEXCEPTION_FRAME)((TEB *)GET_SEL_BASE((pcontext)->SegFs))->except)\r
+\r
+ \r
+typedef struct _OBJECT_NAME_INFORMATION { \r
+ UNICODE_STRING Name; \r
+} OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION; \r
+\r
+\r
+// section information \r
+\r
+\r
+// handle information \r
+\r
+//#define HANDLE_FLAG_INHERIT 0x00000001 \r
+//#define HANDLE_FLAG_PROTECT_FROM_CLOSE 0x00000002 \r
+\r
+\r
+typedef struct _HANDLE_INFO \r
+{\r
+ BOOL bInheritHanlde;\r
+ BOOL bProtectFromClose;\r
+} HANDLE_INFO;\r
+typedef HANDLE_INFO *PHANDLE_INFO;\r
+\r
+\r
+\r
+typedef struct _SYSTEM_TIME_ADJUSTMENT\r
+{\r
+ DWORD dwTimeAdjustment; \r
+ BOOL bTimeAdjustmentDisabled;\r
+} SYSTEM_TIME_ADJUSTMENT, *PSYSTEM_TIME_ADJUSTMENT;\r
+ \r
+\r
+// file information\r
+\r
+// asynchorneous procedure call \r
+\r
+\r
+typedef struct _FILE_BASIC_INFORMATION { \r
+ LARGE_INTEGER CreationTime; \r
+ LARGE_INTEGER LastAccessTime; \r
+ LARGE_INTEGER LastWriteTime; \r
+ LARGE_INTEGER ChangeTime; \r
+ ULONG FileAttributes; \r
+} FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION; \r
+ \r
+typedef struct _FILE_STANDARD_INFORMATION { \r
+ LARGE_INTEGER AllocationSize; \r
+ LARGE_INTEGER EndOfFile; \r
+ ULONG NumberOfLinks; \r
+ BOOLEAN DeletePending; \r
+ BOOLEAN Directory; \r
+} FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION; \r
+ \r
+typedef struct _FILE_POSITION_INFORMATION { \r
+ LARGE_INTEGER CurrentByteOffset; \r
+} FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION; \r
+ \r
+typedef struct _FILE_ALIGNMENT_INFORMATION { \r
+ ULONG AlignmentRequirement; \r
+} FILE_ALIGNMENT_INFORMATION, *PFILE_ALIGNMENT_INFORMATION; \r
+ \r
+typedef struct _FILE_DISPOSITION_INFORMATION { \r
+ BOOLEAN DeleteFile; \r
+} FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION; \r
+ \r
+typedef struct _FILE_END_OF_FILE_INFORMATION { \r
+ LARGE_INTEGER EndOfFile; \r
+} FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION; \r
+ \r
+\r
+typedef struct _FILE_FULL_EA_INFORMATION {\r
+ ULONG NextEntryOffset;\r
+ UCHAR Flags;\r
+ UCHAR EaNameLength;\r
+ USHORT EaValueLength;\r
+ CHAR EaName[1];\r
+} FILE_FULL_EA_INFORMATION;\r
+typedef FILE_FULL_EA_INFORMATION *PFILE_FULL_EA_INFORMATION; \r
+\r
+\r
+\r
+// file system information structures\r
+\r
+typedef struct _FILE_FS_DEVICE_INFORMATION { \r
+ DEVICE_TYPE DeviceType; \r
+ ULONG Characteristics; \r
+} FILE_FS_DEVICE_INFORMATION;\r
+typedef FILE_FS_DEVICE_INFORMATION *PFILE_FS_DEVICE_INFORMATION; \r
+\r
+\r
+// timer apc routine [ possible incompatible with ms winnt ]\r
+\r
+typedef\r
+VOID\r
+(*PTIMERAPCROUTINE) (\r
+ PVOID Argument,\r
+ PVOID Context\r
+ );\r
+\r
+// shutdown action [ possible incompatible with ms winnt ]\r
+// this might be parameter to specify how to shutdown\r
+typedef\r
+VOID\r
+(*SHUTDOWN_ACTION) (\r
+ VOID\r
+ );\r
+\r
+ //NtAcceptConnectPort\r
+ //NtAccessCheck\r
+ //NtAccessCheckAndAuditAlarm\r
+\r
+NTSTATUS\r
+STDCALL\r
+NtAddAtom(\r
+ IN PUNICODE_STRING pString\r
+ );\r
+ \r
+ //NtAdjustGroupsToken\r
+ //NtAdjustPrivilegesToken\r
+ //NtAlertResumeThread\r
+ //NtAlertThread\r
+ //NtAllocateLocallyUniqueId\r
+ //NtAllocateUuids\r
+\r
+\r
+NTSTATUS\r
+STDCALL\r
+NtAllocateVirtualMemory( \r
+ IN HANDLE hProcess,\r
+ OUT LPVOID lpAddress,\r
+ IN ULONG uWillThingAbThis,\r
+ IN DWORD dwSize,\r
+ IN DWORD flAllocationType, \r
+ IN DWORD flProtect\r
+ );\r
+\r
+// NtCallbackReturn\r
+// NtCancelIoFile\r
+\r
+NTSTATUS\r
+STDCALL\r
+NtCancelTimer(\r
+ IN HANDLE TimerHandle,\r
+ IN BOOL Resume\r
+ );\r
+\r
+NTSTATUS\r
+STDCALL\r
+NtClearEvent( \r
+ IN HANDLE EventHandle \r
+ );\r
+\r
+\r
+NTSTATUS\r
+STDCALL\r
+NtClose(\r
+ IN HANDLE Handle\r
+ );\r
+\r
+// NtCloseObjectAuditAlarm\r
+// NtCompleteConnectPort\r
+// NtConnectPort\r
+\r
+NTSTATUS\r
+STDCALL\r
+NtContinue(\r
+ IN PCONTEXT Context\r
+ );\r
+\r
+//NtCreateChannel\r
+\r
+\r
+NTSTATUS\r
+STDCALL\r
+NtCreateDirectoryObject(\r
+ OUT PHANDLE DirectoryHandle,\r
+ IN ACCESS_MASK DesiredAccess,\r
+ IN POBJECT_ATTRIBUTES ObjectAttributes\r
+ );\r
+\r
+NTSTATUS\r
+STDCALL\r
+NtCreateEvent(\r
+ OUT PHANDLE FileHandle,\r
+ IN ACCESS_MASK DesiredAccess,\r
+ IN POBJECT_ATTRIBUTES ObjectAttributes,\r
+ IN BOOL ManualReset,\r
+ IN BOOL InitialState\r
+ );\r
+//NtCreateEventPair\r
+\r
+ \r
+NTSTATUS \r
+STDCALL \r
+NtCreateFile( \r
+ OUT PHANDLE FileHandle, \r
+ IN ACCESS_MASK DesiredAccess, \r
+ IN POBJECT_ATTRIBUTES ObjectAttributes, \r
+ OUT PIO_STATUS_BLOCK IoStatusBlock, \r
+ IN PLARGE_INTEGER AllocationSize OPTIONAL, \r
+ IN ULONG FileAttributes, \r
+ IN ULONG ShareAccess, \r
+ IN ULONG CreateDisposition, \r
+ IN ULONG CreateOptions, \r
+ IN PVOID EaBuffer OPTIONAL, \r
+ IN ULONG EaLength \r
+ ); \r
+\r
+// NtCreateIoCompletion\r
+\r
+NTSTATUS\r
+STDCALL\r
+NtCreateKey(\r
+ OUT PHANDLE KeyHandle,\r
+ IN ACCESS_MASK DesiredAccess,\r
+ IN POBJECT_ATTRIBUTES ObjectAttributes,\r
+ IN ULONG TitleIndex,\r
+ IN PUNICODE_STRING Class OPTIONAL,\r
+ IN ULONG CreateOptions,\r
+ IN PULONG Disposition OPTIONAL\r
+ );\r
+// NtCreateMailslotFile\r
+//-- NtCreateMutant\r
+//-- NtCreateNamedPipeFile\r
+//-- NtCreatePagingFile\r
+//-- NtCreatePort\r
+ \r
+NTSTATUS \r
+STDCALL \r
+NtCreateProcess(\r
+ OUT PHANDLE ProcessHandle,\r
+ IN ACCESS_MASK DesiredAccess,\r
+ IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,\r
+ IN HANDLE ParentProcess,\r
+ IN BOOLEAN InheritObjectTable,\r
+ IN HANDLE SectionHandle OPTIONAL,\r
+ IN HANDLE DebugPort OPTIONAL,\r
+ IN HANDLE ExceptionPort OPTIONAL\r
+ );\r
+// NtCreateProfile\r
+\r
+NTSTATUS\r
+STDCALL\r
+NtCreateSection( \r
+ OUT PHANDLE SectionHandle, \r
+ IN ACCESS_MASK DesiredAccess,\r
+ IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, \r
+ IN PLARGE_INTEGER MaximumSize OPTIONAL, \r
+ IN ULONG SectionPageProtection OPTIONAL,\r
+ IN ULONG AllocationAttributes,\r
+ IN HANDLE FileHandle OPTIONAL\r
+ );\r
+\r
+NTSTATUS\r
+STDCALL\r
+NtCreateSemaphore(\r
+ OUT PHANDLE SemaphoreHandle,\r
+ IN ACCESS_MASK DesiredAccess,\r
+ IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,\r
+ IN ULONG InitialCount,\r
+ IN ULONG MaximumCount\r
+ );\r
+// NtCreateSymbolicLinkObject\r
+\r
+NTSTATUS\r
+STDCALL \r
+NtCreateThread(\r
+ OUT PHANDLE ThreadHandle,\r
+ IN ACCESS_MASK DesiredAccess,\r
+ IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,\r
+ IN HANDLE ProcessHandle,\r
+ IN PCLIENT_ID ClientId,\r
+ IN PCONTEXT ThreadContext,\r
+ IN PINITIAL_TEB InitialTeb,\r
+ IN BOOLEAN CreateSuspended\r
+ );\r
+\r
+NTSTATUS\r
+STDCALL \r
+NtCreateTimer(\r
+ OUT PHANDLE TimerHandle,\r
+ IN ACCESS_MASK DesiredAccess,\r
+ IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,\r
+ IN LONG ManualReset \r
+ );\r
+//-- NtCreateToken\r
+\r
+NT_TEB\r
+STDCALL \r
+NtCurrentTeb(\r
+ VOID\r
+ );\r
+\r
+NTSTATUS\r
+STDCALL\r
+NtDelayExecution(\r
+ IN BOOL Alertable,\r
+ IN PLARGE_INTEGER Interval\r
+ );\r
+\r
+\r
+NTSTATUS\r
+STDCALL\r
+NtDeleteAtom(\r
+ IN ATOM Atom\r
+ );\r
+\r
+\r
+NTSTATUS\r
+STDCALL\r
+NtDeleteFile(\r
+ IN HANDLE FileHandle\r
+ );\r
+\r
+\r
+NTSTATUS\r
+STDCALL\r
+NtDeleteKey(\r
+ IN HANDLE KeyHandle\r
+ );\r
+// NtDeleteObjectAuditAlarm\r
+// NtDeleteValueKey\r
+// NtDeviceIoControlFile\r
+\r
+NTSTATUS\r
+STDCALL\r
+NtDisplayString(\r
+ IN PUNICODE_STRING DisplayString\r
+ );\r
+\r
+NTSTATUS\r
+STDCALL\r
+NtDuplicateObject(\r
+ IN HANDLE SourceProcessHandle,\r
+ IN PHANDLE SourceHandle,\r
+ IN HANDLE TargetProcessHandle,\r
+ OUT PHANDLE TargetHandle,\r
+ IN ULONG dwDesiredAccess,\r
+ IN ULONG InheritHandle\r
+ );\r
+// NtDuplicateToken\r
+\r
+NTSTATUS\r
+STDCALL\r
+NtEnumerateKey(\r
+ IN HANDLE KeyHandle,\r
+ IN ULONG Index,\r
+ IN CINT KeyInformationClass,\r
+ OUT PVOID KeyInformation,\r
+ IN ULONG Length,\r
+ OUT PULONG ResultLength\r
+ );\r
+\r
+NTSTATUS\r
+STDCALL\r
+NtEnumerateValueKey(\r
+ IN HANDLE KeyHandle,\r
+ IN ULONG Index,\r
+ IN CINT KeyValueInformationClass,\r
+ OUT PVOID KeyValueInformation,\r
+ IN ULONG Length,\r
+ OUT PULONG ResultLength\r
+ );\r
+ //NtExtendSection\r
+\r
+ATOM\r
+STDCALL\r
+NtFindAtom(\r
+ IN PUNICODE_STRING AtomString\r
+ );\r
+\r
+NTSTATUS\r
+STDCALL\r
+NtFlushBuffersFile(\r
+ IN HANDLE FileHandle\r
+ );\r
+\r
+NTSTATUS\r
+STDCALL\r
+NtFlushInstructionCache(\r
+ IN HANDLE ProcessHandle,\r
+ IN PVOID BaseAddress,\r
+ IN UINT Size\r
+ );\r
+\r
+NTSTATUS\r
+STDCALL\r
+NtFlushKey(\r
+ IN HANDLE KeyHandle\r
+ );\r
+\r
+/*\r
+ * FIXME: Is the return type correct? (David Welch)\r
+ */\r
+NTSTATUS\r
+STDCALL\r
+NtFlushVirtualMemory(\r
+ IN HANDLE ProcessHandle,\r
+ IN VOID *BaseAddress,\r
+ IN ULONG NumberOfBytesToFlush,\r
+ IN PULONG NumberOfBytesFlushed\r
+ );\r
+\r
+VOID\r
+STDCALL \r
+NtFlushWriteBuffer ( \r
+ VOID \r
+ ); \r
+\r
+NTSTATUS\r
+STDCALL\r
+NtFreeVirtualMemory(\r
+ IN PHANDLE hProcess,\r
+ IN LPVOID lpAddress, // address of region of committed pages \r
+ IN DWORD dwSize, // size of region \r
+ IN DWORD dwFreeType\r
+ ); \r
+//-- NtFsControlFile\r
+\r
+NTSTATUS\r
+STDCALL \r
+NtGetContextThread(\r
+ IN HANDLE ThreadHandle, \r
+ OUT PCONTEXT Context\r
+ );\r
+// NtGetPlugPlayEvent\r
+// NtGetTickCount\r
+// NtImpersonateClientOfPort\r
+// NtImpersonateThread\r
+// NtInitializeRegistry\r
+// NtListenChannel\r
+// NtListenPort\r
+\r
+NTSTATUS\r
+STDCALL \r
+NtLoadDriver(\r
+ IN PUNICODE_STRING DriverServiceName\r
+ );\r
+\r
+ //NtLoadKey2\r
+ //NtLoadKey\r
+ //NtLockFile\r
+ //NtLockVirtualMemory\r
+\r
+NTSTATUS\r
+STDCALL\r
+NtMakeTemporaryObject(\r
+ OUT HANDLE Handle\r
+ );\r
+\r
+NTSTATUS\r
+STDCALL\r
+NtMapViewOfSection(\r
+ IN HANDLE SectionHandle,\r
+ IN HANDLE ProcessHandle,\r
+ IN OUT PVOID *BaseAddress,\r
+ IN ULONG ZeroBits,\r
+ IN ULONG CommitSize,\r
+ IN OUT PLARGE_INTEGER SectionOffset OPTIONAL,\r
+ IN OUT PULONG ViewSize,\r
+ IN SECTION_INHERIT InheritDisposition,\r
+ IN ULONG AllocationType,\r
+ IN ULONG Protect\r
+ );\r
+\r
+// NtNotifyChangeDirectoryFile\r
+// NtNotifyChangeKey\r
+// NtOpenChannel\r
+ \r
+NTSTATUS\r
+STDCALL\r
+NtOpenDirectoryObject(\r
+ OUT PHANDLE DirectoryHandle,\r
+ IN ACCESS_MASK DesiredAccess,\r
+ IN POBJECT_ATTRIBUTES ObjectAttributes\r
+ );\r
+ \r
+NTSTATUS\r
+STDCALL\r
+NtOpenEvent( \r
+ OUT PHANDLE EventHandle,\r
+ IN ACCESS_MASK DesiredAccess,\r
+ IN POBJECT_ATTRIBUTES ObjectAttributes\r
+ );\r
+// NtOpenEventPair\r
+ \r
+NTSTATUS\r
+STDCALL\r
+NtOpenFile(\r
+ OUT PHANDLE FileHandle,\r
+ IN ACCESS_MASK DesiredAccess,\r
+ IN POBJECT_ATTRIBUTES ObjectAttributes,\r
+ OUT PIO_STATUS_BLOCK IoStatusBlock, \r
+ IN ULONG ShareAccess, \r
+ IN ULONG FileAttributes \r
+ );\r
+// NtOpenIoCompletion\r
+\r
+NTSTATUS\r
+STDCALL\r
+NtOpenKey(\r
+ OUT PHANDLE KeyHandle,\r
+ IN ACCESS_MASK DesiredAccess,\r
+ IN POBJECT_ATTRIBUTES ObjectAttributes\r
+ );\r
+// NtOpenMutant\r
+// NtOpenObjectAuditAlarm\r
+NTSTATUS NtOpenProcess (\r
+ OUT PHANDLE ProcessHandle,\r
+ IN ACCESS_MASK DesiredAccess,\r
+ IN POBJECT_ATTRIBUTES ObjectAttributes,\r
+ IN PCLIENT_ID ClientId\r
+ ); \r
+\r
+// NtOpenProcessToken\r
+\r
+NTSTATUS\r
+STDCALL\r
+NtOpenSection(\r
+ OUT PHANDLE SectionHandle,\r
+ IN ACCESS_MASK DesiredAccess,\r
+ IN POBJECT_ATTRIBUTES ObjectAttributes\r
+ );\r
+// NtOpenSemaphore\r
+NTSTATUS\r
+STDCALL\r
+NtOpenSymbolicLinkObject(\r
+ OUT PHANDLE SymbolicLinkHandle,\r
+ IN ACCESS_MASK DesiredAccess,\r
+ IN POBJECT_ATTRIBUTES ObjectAttributes\r
+ );\r
+\r
+NTSTATUS\r
+STDCALL\r
+NtOpenThread(\r
+ OUT PHANDLE ThreadHandle,\r
+ IN ACCESS_MASK DesiredAccess,\r
+ IN POBJECT_ATTRIBUTES ObjectAttributes\r
+ );\r
+//NtOpenThreadToken\r
+\r
+NTSTATUS\r
+STDCALL\r
+NtOpenTimer(\r
+ OUT PHANDLE TimerHandle,\r
+ IN ACCESS_MASK DesiredAccess,\r
+ IN POBJECT_ATTRIBUTES ObjectAttributes\r
+ );\r
+// NtPlugPlayControl\r
+// NtPrivilegeCheck\r
+// NtPrivilegeObjectAuditAlarm\r
+// NtPrivilegedServiceAuditAlarm\r
+// NtProtectVirtualMemory\r
+ \r
+NTSTATUS \r
+STDCALL \r
+NtPulseEvent(\r
+ IN HANDLE EventHandle,\r
+ IN BOOL Unknown OPTIONAL\r
+ );\r
+// NtQueryAttributesFile\r
+// NtQueryDefaultLocale\r
+// NtQueryDirectoryFile\r
+ \r
+NTSTATUS \r
+STDCALL \r
+NtQueryDirectoryObject(\r
+ IN HANDLE DirectoryHandle,\r
+ OUT PIO_STATUS_BLOCK IoStatusBlock,\r
+ IN PLARGE_INTEGER AllocationSize OPTIONAL, \r
+ IN ULONG FileAttributes, \r
+ IN ULONG ShareAccess, \r
+ IN PVOID Buffer , \r
+ IN ULONG Length\r
+ );\r
+\r
+NTSTATUS\r
+STDCALL\r
+NtQueryEaFile(\r
+ IN HANDLE FileHandle,\r
+ OUT PIO_STATUS_BLOCK IoStatusBlock,\r
+ IN PVOID EaBuffer ,\r
+ IN ULONG EaLength,\r
+ ULONG Unknown1 ,\r
+ ULONG Unknown2 ,\r
+ ULONG Unknown3 ,\r
+ ULONG Unknown4 ,\r
+ IN CINT FileInformationClass\r
+ );\r
+//-- NtQueryEvent\r
+//-- NtQueryFullAttributesFile\r
+//-- NtQueryInformationAtom\r
+\r
+NTSTATUS\r
+STDCALL\r
+NtQueryInformationFile(\r
+ IN HANDLE FileHandle,\r
+ OUT PIO_STATUS_BLOCK IoStatusBlock,\r
+ OUT PVOID FileInformation,\r
+ IN ULONG Length,\r
+ IN CINT FileInformationClass\r
+ );\r
+//NtQueryInformationPort\r
+\r
+/*\r
+ProcessWorkingSetWatch PROCESS_WS_WATCH_INFORMATION \r
+ProcessBasicInfo PROCESS_BASIC_INFORMATION\r
+ProcessQuotaLimits QUOTA_LIMITS\r
+ProcessPooledQuotaLimits QUOTA_LIMITS\r
+ProcessIoCounters IO_COUNTERS\r
+ProcessVmCounters VM_COUNTERS\r
+ProcessPooledUsageAndLimits POOLED_USAGE_AND_LIMITS\r
+ProcessTimes KERNEL_USER_TIMES\r
+*/\r
+\r
+\r
+\r
+NTSTATUS\r
+STDCALL\r
+NtQueryInformationProcess(\r
+ IN HANDLE ProcessHandle,\r
+ IN CINT ProcessInformationClass,\r
+ OUT PVOID ProcessInformation,\r
+ IN ULONG ProcessInformationLength,\r
+ OUT PULONG ReturnLength \r
+ );\r
+\r
+/*\r
+ThreadTimes KERNEL_USER_TIMES\r
+*/\r
+\r
+NTSTATUS\r
+STDCALL\r
+NtQueryInformationThread(\r
+ IN HANDLE ThreadHandle,\r
+ IN CINT ThreadInformationClass,\r
+ OUT PVOID ThreadInformation,\r
+ IN ULONG ThreadInformationLength,\r
+ OUT PULONG ReturnLength \r
+ );\r
+// NtQueryInformationToken\r
+// NtQueryIntervalProfile\r
+// NtQueryIoCompletion\r
+\r
+NTSTATUS\r
+STDCALL\r
+NtQueryKey(\r
+ IN HANDLE KeyHandle,\r
+ IN CINT KeyInformationClass,\r
+ OUT PVOID KeyInformation,\r
+ IN ULONG Length,\r
+ OUT PULONG ResultLength \r
+ );\r
+//-- NtQueryMultipleValueKey\r
+//-- NtQueryMutant\r
+\r
+NTSTATUS\r
+STDCALL\r
+NtQueryObject(\r
+ IN HANDLE ObjectHandle,\r
+ IN CINT HandleInformationClass,\r
+ OUT PHANDLE_INFO HandleInfo,\r
+ IN ULONG Length,\r
+ OUT PULONG ResultLength);\r
+ //NtQueryOleDirectoryFile\r
+\r
+NTSTATUS\r
+STDCALL\r
+NtQueryPerformanceCounter(\r
+ IN PULONG Count,\r
+ IN PULONG Frequency\r
+ );\r
+\r
+// NtQuerySection\r
+//-- NtQuerySecurityObject\r
+//-- NtQuerySemaphore\r
+\r
+NTSTATUS\r
+STDCALL\r
+NtQuerySymbolicLinkObject(\r
+ IN HANDLE SymbolicLinkHandle, \r
+ OUT PUNICODE_STRING TargetName, /* target device name */\r
+ IN PULONG Length\r
+ ); \r
+//-- NtQuerySystemEnvironmentValue\r
+NTSTATUS\r
+STDCALL\r
+NtQuerySystemInformation(\r
+ IN CINT SystemInformationClass,\r
+ OUT PVOID SystemInformation,\r
+ IN ULONG SystemInformationLength\r
+ );\r
+\r
+NTSTATUS\r
+STDCALL\r
+NtQuerySystemTime (\r
+ OUT PLARGE_INTEGER CurrentTime\r
+ );\r
+//-- NtQueryTimer\r
+//-- NtQueryTimerResolution\r
+\r
+NTSTATUS\r
+STDCALL\r
+NtQueryValueKey(\r
+ IN HANDLE KeyHandle,\r
+ IN PUNICODE_STRING ValueName,\r
+ IN CINT KeyValueInformationClass,\r
+ OUT PVOID KeyValueInformation,\r
+ IN ULONG Length,\r
+ OUT PULONG ResultLength\r
+ );\r
+//-- NtQueryVirtualMemory\r
+\r
+NTSTATUS\r
+STDCALL\r
+NtQueryVolumeInformationFile(\r
+ IN HANDLE FileHandle,\r
+ OUT PIO_STATUS_BLOCK IoStatusBlock,\r
+ OUT PVOID VolumeInformation,\r
+ IN ULONG Length,\r
+ IN CINT FSInformationClass // dont know\r
+ );\r
+// NtQueueApcThread\r
+\r
+NTSTATUS\r
+STDCALL\r
+NtRaiseException(\r
+ IN PEXCEPTION_RECORD ExceptionRecord,\r
+ IN PCONTEXT CONTEXT,\r
+ IN BOOL bUnknown OPTIONAL\r
+ );\r
+\r
+NTSTATUS\r
+STDCALL\r
+NtRaiseHardError(\r
+ IN OUT ULONG Unknown1,\r
+ IN OUT ULONG Unknown2,\r
+ IN OUT PVOID Unknow3,\r
+ IN OUT ULONG Unknow4,\r
+ IN PEXCEPTION_RECORD ExceptionRecord\r
+ );\r
+\r
+\r
+NTSTATUS\r
+STDCALL\r
+NtReadFile(\r
+ IN HANDLE FileHandle,\r
+ IN HANDLE Event OPTIONAL,\r
+ IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,\r
+ IN PVOID ApcContext OPTIONAL,\r
+ OUT PIO_STATUS_BLOCK IoStatusBlock,\r
+ OUT PVOID Buffer,\r
+ IN ULONG Length,\r
+ IN PLARGE_INTEGER ByteOffset ,\r
+ IN PULONG Key OPTIONAL \r
+ );\r
+NTSTATUS \r
+NtReadFileScatter( \r
+ IN HANDLE FileHandle, \r
+ IN HANDLE Event OPTIONAL, \r
+ IN PIO_APC_ROUTINE UserApcRoutine OPTIONAL, \r
+ IN PVOID UserApcContext OPTIONAL, \r
+ OUT PIO_STATUS_BLOCK UserIosb , \r
+ IN LARGE_INTEGER BufferDescription[], \r
+ IN ULONG BufferLength, \r
+ IN PLARGE_INTEGER ByteOffset, \r
+ IN PULONG Key OPTIONAL \r
+ ); \r
+\r
+//NtReadRequestData\r
+\r
+NTSTATUS\r
+STDCALL\r
+NtReadVirtualMemory( \r
+ IN HANDLE ProcessHandle,\r
+ IN PVOID BaseAddress,\r
+ OUT PVOID Buffer,\r
+ IN DWORD nSize,\r
+ OUT PDWORD lpNumberOfBytesRead\r
+ ); \r
+ //--NtRegisterThreadTerminatePort\r
+ //--NtReleaseMutant\r
+\r
+NTSTATUS\r
+STDCALL\r
+NtReleaseSemaphore( \r
+ IN HANDLE SemaphoreHandle,\r
+ IN ULONG ReleaseCount,\r
+ IN PULONG PreviousCount\r
+ );\r
+ //NtRemoveIoCompletion\r
+ //NtReplaceKey\r
+ //NtReplyPort\r
+ //NtReplyWaitReceivePort\r
+ //NtReplyWaitReplyPort\r
+ //NtReplyWaitSendChannel\r
+ //NtRequestPort\r
+ //NtRequestWaitReplyPort\r
+ //--NtResetEvent\r
+ //NtRestoreKey\r
+\r
+NTSTATUS\r
+STDCALL\r
+NtResumeThread(\r
+ IN HANDLE ThreadHandle,\r
+ IN PCONTEXT Context\r
+ );\r
+ //NtSaveKey\r
+ //NtSendWaitReplyChannel\r
+ //NtSetContextChannel\r
+\r
+NTSTATUS\r
+STDCALL\r
+NtSetContextThread(\r
+ IN HANDLE ThreadHandle,\r
+ IN PCONTEXT Context\r
+ );\r
+ //--NtSetDefaultHardErrorPort\r
+ //--NtSetDefaultLocale\r
+ //--NtSetEaFile\r
+ //--NtSetEvent\r
+ //--NtSetHighEventPair\r
+ //--NtSetHighWaitLowEventPair\r
+ //--NtSetHighWaitLowThread\r
+\r
+\r
+NTSTATUS\r
+STDCALL\r
+NtSetInformationFile(\r
+ IN HANDLE FileHandle,\r
+ IN PIO_STATUS_BLOCK IoStatusBlock,\r
+ IN PVOID FileInformation,\r
+ IN ULONG Length,\r
+ IN CINT FileInformationClass\r
+ );\r
+\r
+//KeyWriteTimeInformation KEY_WRITE_TIME_INFORMATION\r
+\r
+NTSTATUS\r
+STDCALL\r
+NtSetInformationKey(\r
+ IN HANDLE KeyHandle,\r
+ IN CINT KeySetInformationClass,\r
+ IN PVOID KeyInformation,\r
+ IN ULONG KeyInformationLength\r
+ );\r
+NTSTATUS\r
+STDCALL\r
+NtSetInformationObject(\r
+ IN HANDLE ObjectHandle,\r
+ IN CINT HandleInformationClass,\r
+ IN PVOID HandleInfo,\r
+ IN ULONG Length \r
+ );\r
+/*\r
+\r
+ProcessQuotaLimits QUOTA_LIMITS\r
+ProcessAccessToken PROCESS_ACCESS_TOKEN\r
+\r
+*/\r
+\r
+NTSTATUS\r
+STDCALL\r
+NtSetInformationProcess(\r
+ IN HANDLE ProcessHandle,\r
+ IN CINT ProcessInformationClass,\r
+ IN PVOID ProcessInformation,\r
+ IN ULONG ProcessInformationLength\r
+ );\r
+\r
+NTSTATUS\r
+STDCALL\r
+NtSetInformationThread(\r
+ IN HANDLE ThreadHandle,\r
+ IN CINT ThreadInformationClass,\r
+ IN PVOID ThreadInformation,\r
+ IN ULONG ThreadInformationLength\r
+ );\r
+// NtSetInformationToken\r
+// NtSetIntervalProfile\r
+// NtSetIoCompletion\r
+// NtSetLdtEntries\r
+// NtSetLowEventPair\r
+// NtSetLowWaitHighEventPair\r
+// NtSetLowWaitHighThread\r
+// NtSetSecurityObject\r
+ //NtSetSystemEnvironmentValue\r
+/*\r
+SystemTimeAdjustmentInformation SYSTEM_TIME_ADJUSTMENT\r
+*/\r
+NTSTATUS\r
+STDCALL\r
+NtSetSystemInformation(\r
+ IN CINT SystemInformationClass,\r
+ IN PVOID SystemInformation,\r
+ IN ULONG SystemInformationLength\r
+ );\r
+ //NtSetSystemPowerState\r
+\r
+NTSTATUS\r
+STDCALL\r
+NtSetSystemTime(\r
+ IN PLARGE_INTEGER SystemTime,\r
+ IN BOOL Unknown OPTIONAL\r
+ );\r
+\r
+NTSTATUS\r
+STDCALL\r
+NtSetTimer(\r
+ IN HANDLE TimerHandle,\r
+ IN PLARGE_INTEGER DueTime,\r
+ IN PTIMERAPCROUTINE CompletionRoutine,\r
+ IN LPVOID ArgToCompletionRoutine,\r
+ IN BOOL Resume,\r
+ IN LONG Period\r
+ );\r
+// NtSetTimerResolution\r
+\r
+NTSTATUS\r
+STDCALL\r
+NtSetValueKey(\r
+ IN HANDLE KeyHandle,\r
+ IN PUNICODE_STRING ValueName,\r
+ IN ULONG TitleIndex ,\r
+ IN ULONG Type,\r
+ IN PVOID Data,\r
+ IN ULONG DataSize\r
+ );\r
+\r
+//-- NtSetVolumeInformationFile\r
+\r
+NTSTATUS \r
+STDCALL \r
+NtShutdownSystem(\r
+ IN SHUTDOWN_ACTION Action\r
+ );\r
+//-- NtSignalAndWaitForSingleObject\r
+// NtStartProfile\r
+// NtStopProfile\r
+ \r
+NTSTATUS \r
+STDCALL \r
+NtSuspendThread(\r
+ IN HANDLE ThreadHandle,\r
+ IN PULONG PreviousSuspendCount \r
+ );\r
+ //--NtSystemDebugControl\r
+ \r
+NTSTATUS \r
+STDCALL \r
+NtTerminateProcess(\r
+ IN HANDLE ProcessHandle ,\r
+ IN NTSTATUS ExitStatus\r
+ );\r
+\r
+NTSTATUS \r
+STDCALL \r
+NtTerminateThread(\r
+ IN HANDLE ThreadHandle ,\r
+ IN NTSTATUS ExitStatus\r
+ );\r
+\r
+ //--NtTestAlert\r
+\r
+NTSTATUS \r
+STDCALL\r
+NtUnloadDriver(\r
+ IN PUNICODE_STRING DriverServiceName\r
+ );\r
+\r
+ //--NtUnloadKey\r
+ //--NtUnlockFile\r
+ //--NtUnlockVirtualMemory\r
+\r
+NTSTATUS\r
+STDCALL\r
+NtUnmapViewOfSection(\r
+ IN HANDLE ProcessHandle,\r
+ IN PVOID BaseAddress\r
+ );\r
+ //NtVdmControl\r
+ //NtW32Call\r
+\r
+NTSTATUS\r
+STDCALL\r
+NtWaitForMultipleObjects (\r
+ IN ULONG Count,\r
+ IN PVOID Object[],\r
+ IN CINT WaitType,\r
+ IN BOOLEAN Alertable,\r
+ IN PLARGE_INTEGER Time \r
+ );\r
+\r
+NTSTATUS\r
+STDCALL\r
+NtWaitForSingleObject (\r
+ IN PVOID Object,\r
+ IN BOOLEAN Alertable,\r
+ IN PLARGE_INTEGER Time \r
+ );\r
+ //--NtWaitHighEventPair\r
+ //--NtWaitLowEventPair\r
+\r
+NTSTATUS\r
+STDCALL\r
+NtWriteFile(\r
+ IN HANDLE FileHandle,\r
+ IN HANDLE Event ,\r
+ IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,\r
+ IN PVOID ApcContext OPTIONAL,\r
+ OUT PIO_STATUS_BLOCK IoStatusBlock,\r
+ IN PVOID Buffer,\r
+ IN ULONG Length,\r
+ IN PLARGE_INTEGER ByteOffset ,\r
+ IN PULONG Key OPTIONAL\r
+ );\r
+\r
+NTSTATUS\r
+STDCALL NtWriteFileScatter( \r
+ IN HANDLE FileHandle, \r
+ IN HANDLE Event OPTIONAL, \r
+ IN PIO_APC_ROUTINE UserApcRoutine OPTIONAL, \r
+ IN PVOID UserApcContext OPTIONAL, \r
+ OUT PIO_STATUS_BLOCK UserIosb,\r
+ IN LARGE_INTEGER BufferDescription[], \r
+ IN ULONG BufferLength, \r
+ IN PLARGE_INTEGER ByteOffset, \r
+ IN PULONG Key OPTIONAL\r
+ ); \r
+\r
+ //NtWriteRequestData\r
+\r
+NTSTATUS\r
+STDCALL \r
+NtWriteVirtualMemory(\r
+ IN HANDLE ProcessHandle,\r
+ IN VOID *Buffer,\r
+ IN ULONG Size,\r
+ OUT PULONG NumberOfBytesWritten\r
+ );\r
+\r
+NTSTATUS\r
+STDCALL \r
+NtYieldExecution(\r
+ VOID\r
+ );\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif /* __cplusplus */\r
+\r
+#endif\r
+\r
+#endif /* __DDK_ZW_H */\r
--- /dev/null
+/*
+ Defines.h
+
+ Windows32 API definitions
+
+ Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+
+ Author: Scott Christley <scottc@net-community.com>
+
+ This file is part of the Windows32 API Library.
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 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
+ Library General Public License for more details.
+
+ If you are interested in a warranty or support for this source code,
+ contact Scott Christley <scottc@net-community.com> for more information.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this library; see the file COPYING.LIB.
+ If not, write to the Free Software Foundation,
+ 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+*/
+/* WARNING: This file is automatically generated. */
+
+#ifndef _GNU_H_WINDOWS32_DEFINES
+#define _GNU_H_WINDOWS32_DEFINES
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#define MAX_PATH (260)
+#define UNICODE_NULL ((WCHAR)0)
+#define LF_FACESIZE (32)
+#define LF_FULLFACESIZE (64)
+#define ELF_VENDOR_SIZE (4)
+#define SECURITY_STATIC_TRACKING (0)
+#define SECURITY_DYNAMIC_TRACKING (1)
+#define MAX_DEFAULTCHAR (2)
+#define MAX_LEADBYTES (12)
+#define EXCEPTION_MAXIMUM_PARAMETERS (15)
+#define CCHDEVICENAME (32)
+#define CCHFORMNAME (32)
+#define MENU_TEXT_LEN (40)
+#define MAX_LANA (254)
+#define NCBNAMSZ (16)
+#define NETBIOS_NAME_LEN (16)
+#define OFS_MAXPATHNAME (128)
+#define MAX_TAB_STOPS (32)
+#define ANYSIZE_ARRAY (1)
+#define RAS_MaxCallbackNumber (128)
+#define RAS_MaxDeviceName (128)
+#define RAS_MaxDeviceType (16)
+#define RAS_MaxEntryName (256)
+#define RAS_MaxIpAddress (15)
+#define RAS_MaxIpxAddress (21)
+#define RAS_MaxPhoneNumber (128)
+#define UNLEN (256)
+#define PWLEN (256)
+#define CNLEN (15)
+#define DNLEN (15)
+/* Unsigned types max */
+#define MAXDWORD (0xFFFFFFFF)
+#define MAXWORD (0xFFFF)
+#define MAXBYTE (0xFF)
+/* Signed types max/min */
+#define MINCHAR (0x80)
+#define MAXCHAR (0x7F)
+#define MINSHORT (0x8000)
+#define MAXSHORT (0x7FFF)
+#define MINLONG (0x80000000)
+#define MAXLONG (0x7FFFFFFF)
+
+/* _llseek */
+#define FILE_BEGIN (0)
+#define FILE_CURRENT (1)
+#define FILE_END (2)
+
+/* _lopen, LZOpenFile, OpenFile */
+#define OF_READ (0)
+#define OF_READWRITE (2)
+#define OF_WRITE (1)
+#define OF_SHARE_COMPAT (0)
+#define OF_SHARE_DENY_NONE (64)
+#define OF_SHARE_DENY_READ (48)
+#define OF_SHARE_DENY_WRITE (32)
+#define OF_SHARE_EXCLUSIVE (16)
+#define OF_CANCEL (2048)
+#define OF_CREATE (4096)
+#define OF_DELETE (512)
+#define OF_EXIST (16384)
+#define OF_PARSE (256)
+#define OF_PROMPT (8192)
+#define OF_REOPEN (32768)
+#define OF_VERIFY (1024)
+
+/* ActivateKeyboardLayout, LoadKeyboardLayout */
+#define HKL_NEXT (1)
+#define HKL_PREV (0)
+#define KLF_REORDER (8)
+#define KLF_UNLOADPREVIOUS (4)
+#define KLF_ACTIVATE (1)
+#define KLF_NOTELLSHELL (128)
+#define KLF_REPLACELANG (16)
+#define KLF_SUBSTITUTE_OK (2)
+
+/* AppendMenu */
+#define MF_BITMAP (0x4L)
+#define MF_DISABLED (0x2L)
+#define MF_ENABLED (0L)
+#define MF_GRAYED (0x1L)
+#define MF_HELP (0x4000L)
+#define MF_MENUBARBREAK (0x20L)
+#define MF_MENUBREAK (0x40L)
+#define MF_MOUSESELECT (0x8000L)
+#define MF_OWNERDRAW (0x100L)
+#define MF_POPUP (0x10L)
+#define MF_SEPARATOR (0x800L)
+#define MF_STRING (0L)
+#define MF_SYSMENU (0x2000L)
+#define MF_USECHECKBITMAPS (0x200L)
+
+/* Ternary Raster Operations - BitBlt */
+#define BLACKNESS 0x00000042
+#define NOTSRCERASE 0x001100A6
+#define NOTSRCCOPY 0x00330008
+#define SRCERASE 0x00440328
+#define DSTINVERT 0x00550009
+#define PATINVERT 0x005A0049
+#define SRCINVERT 0x00660046
+#define SRCAND 0x008800C6
+#define MERGEPAINT 0x00BB0226
+#define MERGECOPY 0x00C000CA
+#define SRCCOPY 0x00CC0020
+#define SRCPAINT 0x00EE0086
+#define PATCOPY 0x00F00021
+#define PATPAINT 0x00FB0A09
+#define WHITENESS 0x00FF0062
+
+/* Binary Raster Operations */
+#define R2_BLACK (1)
+#define R2_COPYPEN (13)
+#define R2_MASKNOTPEN (3)
+#define R2_MASKPEN (9)
+#define R2_MASKPENNOT (5)
+#define R2_MERGENOTPEN (12)
+#define R2_MERGEPEN (15)
+#define R2_MERGEPENNOT (14)
+#define R2_NOP (11)
+#define R2_NOT (6)
+#define R2_NOTCOPYPEN (4)
+#define R2_NOTMASKPEN (8)
+#define R2_NOTMERGEPEN (2)
+#define R2_NOTXORPEN (10)
+#define R2_WHITE (16)
+#define R2_XORPEN (7)
+
+/* BroadcastSystemMessage */
+#define BSF_FLUSHDISK (4)
+#define BSF_FORCEIFHUNG (32)
+#define BSF_IGNORECURRENTTASK (2)
+#define BSF_NOHANG (8)
+#define BSF_POSTMESSAGE (16)
+#define BSF_QUERY (1)
+#define BSM_ALLCOMPONENTS (0)
+#define BSM_APPLICATIONS (8)
+#define BSM_INSTALLABLEDRIVERS (4)
+#define BSM_NETDRIVER (2)
+#define BSM_VXDS (1)
+#define BROADCAST_QUERY_DENY (1112363332)
+
+/* BrowseCallbackProc */
+
+/* CallNamedPipe */
+#define NMPWAIT_NOWAIT (1)
+#define NMPWAIT_WAIT_FOREVER (-1)
+#define NMPWAIT_USE_DEFAULT_WAIT (0)
+
+/* CascadeWindows, TileWindows */
+#define MDITILE_SKIPDISABLED (2)
+#define MDITILE_HORIZONTAL (1)
+#define MDITILE_VERTICAL (0)
+
+/* CBTProc */
+#define HCBT_ACTIVATE (5)
+#define HCBT_CLICKSKIPPED (6)
+#define HCBT_CREATEWND (3)
+#define HCBT_DESTROYWND (4)
+#define HCBT_KEYSKIPPED (7)
+#define HCBT_MINMAX (1)
+#define HCBT_MOVESIZE (0)
+#define HCBT_QS (2)
+#define HCBT_SETFOCUS (9)
+#define HCBT_SYSCOMMAND (8)
+
+/* ChangeDisplaySettings */
+#define DM_BITSPERPEL (0x40000L)
+#define DM_PELSWIDTH (0x80000L)
+#define DM_PELSHEIGHT (0x100000L)
+#define DM_DISPLAYFLAGS (0x200000L)
+#define DM_DISPLAYFREQUENCY (0x400000L)
+#define CDS_UPDATEREGISTRY (1)
+#define CDS_TEST (2)
+#define DISP_CHANGE_SUCCESSFUL (0)
+#define DISP_CHANGE_RESTART (1)
+#define DISP_CHANGE_BADFLAGS (-4)
+#define DISP_CHANGE_FAILED (-1)
+#define DISP_CHANGE_BADMODE (-2)
+#define DISP_CHANGE_NOTUPDATED (-3)
+
+/* ChangeServiceConfig */
+#define SERVICE_NO_CHANGE (-1)
+#define SERVICE_WIN32_OWN_PROCESS (16)
+#define SERVICE_WIN32_SHARE_PROCESS (32)
+#define SERVICE_KERNEL_DRIVER (1)
+#define SERVICE_FILE_SYSTEM_DRIVER (2)
+#define SERVICE_INTERACTIVE_PROCESS (256)
+#define SERVICE_BOOT_START (0)
+#define SERVICE_SYSTEM_START (1)
+#define SERVICE_AUTO_START (2)
+#define SERVICE_DEMAND_START (3)
+#define SERVICE_DISABLED (4)
+
+/* SERVICE_STATUS structure */
+#define SERVICE_STOPPED (1)
+#define SERVICE_START_PENDING (2)
+#define SERVICE_STOP_PENDING (3)
+#define SERVICE_RUNNING (4)
+#define SERVICE_CONTINUE_PENDING (5)
+#define SERVICE_PAUSE_PENDING (6)
+#define SERVICE_PAUSED (7)
+#define SERVICE_ACCEPT_STOP (1)
+#define SERVICE_ACCEPT_PAUSE_CONTINUE (2)
+#define SERVICE_ACCEPT_SHUTDOWN (4)
+
+/* CheckDlgButton */
+#define BST_CHECKED (1)
+#define BST_INDETERMINATE (2)
+#define BST_UNCHECKED (0)
+#define BST_FOCUS (8)
+#define BST_PUSHED (4)
+
+/* CheckMenuItem, HiliteMenuItem */
+#define MF_BYCOMMAND (0L)
+#define MF_BYPOSITION (0x400L)
+#define MF_CHECKED (0x8L)
+#define MF_UNCHECKED (0L)
+#define MF_HILITE (0x80L)
+#define MF_UNHILITE (0L)
+
+/* ChildWindowFromPointEx */
+#define CWP_ALL (0)
+#define CWP_SKIPINVISIBLE (1)
+#define CWP_SKIPDISABLED (2)
+#define CWP_SKIPTRANSPARENT (4)
+
+/* ClearCommError */
+#define CE_BREAK (16)
+#define CE_DNS (2048)
+#define CE_FRAME (8)
+#define CE_IOE (1024)
+#define CE_MODE (32768)
+#define CE_OOP (4096)
+#define CE_OVERRUN (2)
+#define CE_PTO (512)
+#define CE_RXOVER (1)
+#define CE_RXPARITY (4)
+#define CE_TXFULL (256)
+
+/* ChooseMatchToTarget */
+
+/* CombineRgn */
+#define RGN_AND (1)
+#define RGN_COPY (5)
+#define RGN_DIFF (4)
+#define RGN_OR (2)
+#define RGN_XOR (3)
+#define NULLREGION (1)
+#define SIMPLEREGION (2)
+#define COMPLEXREGION (3)
+#define ERROR (0)
+
+/* CommonDlgExtendedError */
+#define CDERR_DIALOGFAILURE (0xffff)
+#define CDERR_FINDRESFAILURE (6)
+#define CDERR_INITIALIZATION (2)
+#define CDERR_LOADRESFAILURE (7)
+#define CDERR_LOADSTRFAILURE (5)
+#define CDERR_LOCKRESFAILURE (8)
+#define CDERR_MEMALLOCFAILURE (9)
+#define CDERR_MEMLOCKFAILURE (10)
+#define CDERR_NOHINSTANCE (4)
+#define CDERR_NOHOOK (11)
+#define CDERR_NOTEMPLATE (3)
+#define CDERR_REGISTERMSGFAIL (12)
+#define CDERR_STRUCTSIZE (1)
+#define PDERR_CREATEICFAILURE (0x1000 + 10)
+#define PDERR_DEFAULTDIFFERENT (0x1000 + 12)
+#define PDERR_DNDMMISMATCH (0x1000 + 9)
+#define PDERR_GETDEVMODEFAIL (0x1000 + 5)
+#define PDERR_INITFAILURE (0x1000 + 6)
+#define PDERR_LOADDRVFAILURE (0x1000 + 4)
+#define PDERR_NODEFAULTPRN (0x1000 + 8)
+#define PDERR_NODEVICES (0x1000 + 7)
+#define PDERR_PARSEFAILURE (0x1000 + 2)
+#define PDERR_PRINTERNOTFOUND (0x1000 + 11)
+#define PDERR_RETDEFFAILURE (0x1000 + 3)
+#define PDERR_SETUPFAILURE (0x1000 + 1)
+#define CFERR_MAXLESSTHANMIN (0x2000 + 2)
+#define CFERR_NOFONTS (0x2000 + 1)
+#define FNERR_BUFFERTOOSMALL (0x3000 + 3)
+#define FNERR_INVALIDFILENAME (0x3000 + 2)
+#define FNERR_SUBCLASSFAILURE (0x3000 + 1)
+#define FRERR_BUFFERLENGTHZERO (0x4000 + 1)
+
+/* CompareString, LCMapString */
+#define LOCALE_SYSTEM_DEFAULT (0x800L)
+#define LOCALE_USER_DEFAULT (0x400L)
+#define NORM_IGNORECASE (1)
+#define NORM_IGNOREKANATYPE (65536)
+#define NORM_IGNORENONSPACE (2)
+#define NORM_IGNORESYMBOLS (4)
+#define NORM_IGNOREWIDTH (131072)
+#define SORT_STRINGSORT (4096)
+#define LCMAP_BYTEREV (2048)
+#define LCMAP_FULLWIDTH (8388608)
+#define LCMAP_HALFWIDTH (4194304)
+#define LCMAP_HIRAGANA (1048576)
+#define LCMAP_KATAKANA (2097152)
+#define LCMAP_LOWERCASE (256)
+#define LCMAP_SORTKEY (1024)
+#define LCMAP_UPPERCASE (512)
+
+/* ContinueDebugEvent */
+#define DBG_CONTINUE (0x10002L)
+#define DBG_CONTROL_BREAK (0x40010008L)
+#define DBG_CONTROL_C (0x40010005L)
+#define DBG_EXCEPTION_NOT_HANDLED (0x80010001L)
+#define DBG_TERMINATE_THREAD (0x40010003L)
+#define DBG_TERMINATE_PROCESS (0x40010004L)
+
+/* ControlService */
+#define SERVICE_CONTROL_STOP (1)
+#define SERVICE_CONTROL_PAUSE (2)
+#define SERVICE_CONTROL_CONTINUE (3)
+#define SERVICE_CONTROL_INTERROGATE (4)
+#define SERVICE_CONTROL_SHUTDOWN (5)
+
+/* CopyImage, LoadImage */
+#define IMAGE_BITMAP (0)
+#define IMAGE_CURSOR (2)
+#define IMAGE_ENHMETAFILE (1)
+#define IMAGE_ICON (1)
+#define LR_COPYDELETEORG (8)
+#define LR_COPYRETURNORG (4)
+#define LR_MONOCHROME (1)
+#define LR_CREATEDIBSECTION (8192)
+#define LR_DEFAULTSIZE (64)
+
+/* CreateDesktop */
+#define DF_ALLOWOTHERACCOUNTHOOK (0x1L)
+#define DESKTOP_CREATEMENU (0x4L)
+#define DESKTOP_CREATEWINDOW (0x2L)
+#define DESKTOP_ENUMERATE (0x40L)
+#define DESKTOP_HOOKCONTROL (0x8L)
+#define DESKTOP_JOURNALPLAYBACK (0x20L)
+#define DESKTOP_JOURNALRECORD (0x10L)
+#define DESKTOP_READOBJECTS (0x1L)
+#define DESKTOP_SWITCHDESKTOP (0x100L)
+#define DESKTOP_WRITEOBJECTS (0x80L)
+#define WSF_VISIBLE (0x1L)
+
+/* CreateDIBitmap */
+#define CBM_INIT (0x4L)
+#define DIB_PAL_COLORS (1)
+#define DIB_RGB_COLORS (0)
+
+/* CreateFile, GetFileAttributes, SetFileAttributes */
+#define GENERIC_READ (0x80000000L)
+#define GENERIC_WRITE (0x40000000L)
+#define FILE_READ_DATA ( 0x0001 ) /* file & pipe */
+#define FILE_LIST_DIRECTORY ( 0x0001 ) /* directory */
+
+#define FILE_WRITE_DATA ( 0x0002 ) /* file & pipe */
+#define FILE_ADD_FILE ( 0x0002 ) /* directory */
+
+#define FILE_APPEND_DATA ( 0x0004 ) /* file */
+#define FILE_ADD_SUBDIRECTORY ( 0x0004 ) /* directory */
+#define FILE_CREATE_PIPE_INSTANCE ( 0x0004 ) /* named pipe */
+
+#define FILE_READ_EA ( 0x0008 ) /* file & directory */
+#define FILE_READ_PROPERTIES FILE_READ_EA
+
+#define FILE_WRITE_EA ( 0x0010 ) /* file & directory */
+#define FILE_WRITE_PROPERTIES FILE_WRITE_EA
+
+#define FILE_EXECUTE ( 0x0020 ) /* file */
+#define FILE_TRAVERSE ( 0x0020 ) /* directory */
+
+#define FILE_DELETE_CHILD ( 0x0040 ) /* directory */
+
+#define FILE_READ_ATTRIBUTES ( 0x0080 ) /* all */
+
+#define FILE_WRITE_ATTRIBUTES ( 0x0100 ) /* all */
+
+#define FILE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x1FF)
+
+#define FILE_GENERIC_READ (STANDARD_RIGHTS_READ |\
+ FILE_READ_DATA |\
+ FILE_READ_ATTRIBUTES |\
+ FILE_READ_EA |\
+ SYNCHRONIZE)
+
+
+#define FILE_GENERIC_WRITE (STANDARD_RIGHTS_WRITE |\
+ FILE_WRITE_DATA |\
+ FILE_WRITE_ATTRIBUTES |\
+ FILE_WRITE_EA |\
+ FILE_APPEND_DATA |\
+ SYNCHRONIZE)
+
+
+#define FILE_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE |\
+ FILE_READ_ATTRIBUTES |\
+ FILE_EXECUTE |\
+ SYNCHRONIZE)
+
+#define FILE_SHARE_DELETE (4)
+#define FILE_SHARE_READ (1)
+#define FILE_SHARE_WRITE (2)
+#define CONSOLE_TEXTMODE_BUFFER (1)
+#define CREATE_NEW (1)
+#define CREATE_ALWAYS (2)
+#define OPEN_EXISTING (3)
+#define OPEN_ALWAYS (4)
+#define TRUNCATE_EXISTING (5)
+#define FILE_ATTRIBUTE_ARCHIVE (32)
+#define FILE_ATTRIBUTE_COMPRESSED (2048)
+#define FILE_ATTRIBUTE_NORMAL (128)
+#define FILE_ATTRIBUTE_DIRECTORY (16)
+#define FILE_ATTRIBUTE_HIDDEN (2)
+#define FILE_ATTRIBUTE_READONLY (1)
+#define FILE_ATTRIBUTE_SYSTEM (4)
+#define FILE_ATTRIBUTE_TEMPORARY (256)
+#define FILE_FLAG_WRITE_THROUGH (2147483648)
+#define FILE_FLAG_OVERLAPPED (1073741824)
+#define FILE_FLAG_NO_BUFFERING (536870912)
+#define FILE_FLAG_RANDOM_ACCESS (268435456)
+#define FILE_FLAG_SEQUENTIAL_SCAN (134217728)
+#define FILE_FLAG_DELETE_ON_CLOSE (67108864)
+#define FILE_FLAG_BACKUP_SEMANTICS (33554432)
+#define FILE_FLAG_POSIX_SEMANTICS (16777216)
+#define SECURITY_ANONYMOUS (0)
+#define SECURITY_IDENTIFICATION (65536)
+#define SECURITY_IMPERSONATION (131072)
+#define SECURITY_DELEGATION (196608)
+#define SECURITY_CONTEXT_TRACKING (262144)
+#define SECURITY_EFFECTIVE_ONLY (524288)
+#define SECURITY_SQOS_PRESENT (1048576)
+
+/* CreateFileMapping, VirtualAlloc, VirtualFree, VirtualProtect */
+#define SEC_COMMIT (134217728)
+#define SEC_IMAGE (16777216)
+#define SEC_NOCACHE (268435456)
+#define SEC_RESERVE (67108864)
+#define PAGE_READONLY (2)
+#define PAGE_READWRITE (4)
+#define PAGE_WRITECOPY (8)
+#define PAGE_EXECUTE (16)
+#define PAGE_EXECUTE_READ (32)
+#define PAGE_EXECUTE_READWRITE (64)
+#define PAGE_EXECUTE_WRITECOPY (128)
+#define PAGE_GUARD (256)
+#define PAGE_NOACCESS (1)
+#define PAGE_NOCACHE (512)
+#define MEM_COMMIT (4096)
+#define MEM_FREE (65536)
+#define MEM_RESERVE (8192)
+#define MEM_IMAGE (16777216)
+#define MEM_MAPPED (262144)
+#define MEM_PRIVATE (131072)
+#define MEM_DECOMMIT (16384)
+#define MEM_RELEASE (32768)
+#define MEM_TOP_DOWN (1048576)
+#define EXCEPTION_GUARD_PAGE (0x80000001L)
+#define SECTION_EXTEND_SIZE (0x10)
+#define SECTION_MAP_READ (0x4)
+#define SECTION_MAP_WRITE (0x2)
+#define SECTION_QUERY (0x1)
+#define SECTION_ALL_ACCESS (0xf001fL)
+
+/* CreateFont */
+#define FW_DONTCARE (0)
+#define FW_THIN (100)
+#define FW_EXTRALIGHT (200)
+#define FW_LIGHT (300)
+#define FW_NORMAL (400)
+#define FW_REGULAR FW_NORMAL
+#define FW_MEDIUM (500)
+#define FW_SEMIBOLD (600)
+#define FW_BOLD (700)
+#define FW_EXTRABOLD (800)
+#define FW_HEAVY (900)
+#define ANSI_CHARSET (0)
+#define DEFAULT_CHARSET (1)
+#define SYMBOL_CHARSET (2)
+#define SHIFTJIS_CHARSET (128)
+#define HANGEUL_CHARSET (129)
+#define GB2312_CHARSET (134)
+#define CHINESEBIG5_CHARSET (136)
+#define GREEK_CHARSET (161)
+#define TURKISH_CHARSET (162)
+#define HEBREW_CHARSET (177)
+#define ARABIC_CHARSET (178)
+#define BALTIC_CHARSET (186)
+#define RUSSIAN_CHARSET (204)
+#define THAI_CHARSET (222)
+#define EASTEUROPE_CHARSET (238)
+#define OEM_CHARSET (255)
+#define OUT_DEFAULT_PRECIS (0)
+#define OUT_STRING_PRECIS (1)
+#define OUT_CHARACTER_PRECIS (2)
+#define OUT_STROKE_PRECIS (3)
+#define OUT_TT_PRECIS (4)
+#define OUT_DEVICE_PRECIS (5)
+#define OUT_RASTER_PRECIS (6)
+#define OUT_TT_ONLY_PRECIS (7)
+#define OUT_OUTLINE_PRECIS (8)
+#define CLIP_DEFAULT_PRECIS (0)
+#define CLIP_CHARACTER_PRECIS (1)
+#define CLIP_STROKE_PRECIS (2)
+#define CLIP_MASK (15)
+#define CLIP_LH_ANGLES (16)
+#define CLIP_TT_ALWAYS (32)
+#define CLIP_EMBEDDED (128)
+#define DEFAULT_QUALITY (0)
+#define DRAFT_QUALITY (1)
+#define PROOF_QUALITY (2)
+#define DEFAULT_PITCH (0)
+#define FIXED_PITCH (1)
+#define VARIABLE_PITCH (2)
+#define FF_DECORATIVE (80)
+#define FF_DONTCARE (0)
+#define FF_MODERN (48)
+#define FF_ROMAN (16)
+#define FF_SCRIPT (64)
+#define FF_SWISS (32)
+
+/* CreateHatchBrush */
+#define HS_BDIAGONAL (3)
+#define HS_CROSS (4)
+#define HS_DIAGCROSS (5)
+#define HS_FDIAGONAL (2)
+#define HS_HORIZONTAL (0)
+#define HS_VERTICAL (1)
+
+/* CreateIconFromResourceEx */
+#define LR_DEFAULTCOLOR (0)
+#define LR_LOADREALSIZE (128)
+#define LR_MONOCHROME (1)
+
+/* CreateMailslot, GetMailslotInfo */
+#define MAILSLOT_WAIT_FOREVER (0xffffffffL)
+#define MAILSLOT_NO_MESSAGE (0xffffffffL)
+
+/* CreateMappedBitmap */
+#define CMB_MASKED (2)
+
+/* CreateNamedPipe */
+#define PIPE_ACCESS_DUPLEX (3)
+#define PIPE_ACCESS_INBOUND (1)
+#define PIPE_ACCESS_OUTBOUND (2)
+#define WRITE_DAC (0x40000L)
+#define WRITE_OWNER (0x80000L)
+#define ACCESS_SYSTEM_SECURITY (0x1000000L)
+#define PIPE_TYPE_BYTE (0)
+#define PIPE_TYPE_MESSAGE (4)
+#define PIPE_READMODE_BYTE (0)
+#define PIPE_READMODE_MESSAGE (2)
+#define PIPE_WAIT (0)
+#define PIPE_NOWAIT (1)
+
+/* CreatePen, ExtCreatePen */
+#define PS_GEOMETRIC (65536)
+#define PS_COSMETIC (0)
+#define PS_ALTERNATE (8)
+#define PS_SOLID (0)
+#define PS_DASH (1)
+#define PS_DOT (2)
+#define PS_DASHDOT (3)
+#define PS_DASHDOTDOT (4)
+#define PS_NULL (5)
+#define PS_USERSTYLE (7)
+#define PS_INSIDEFRAME (6)
+#define PS_ENDCAP_ROUND (0)
+#define PS_ENDCAP_SQUARE (256)
+#define PS_ENDCAP_FLAT (512)
+#define PS_JOIN_BEVEL (4096)
+#define PS_JOIN_MITER (8192)
+#define PS_JOIN_ROUND (0)
+#define PS_STYLE_MASK (15)
+#define PS_ENDCAP_MASK (3840)
+#define PS_TYPE_MASK (983040)
+
+/* CreatePolygonRgn */
+#define ALTERNATE (1)
+#define WINDING (2)
+
+/* CreateProcess */
+#define CREATE_DEFAULT_ERROR_MODE (67108864)
+#define CREATE_NEW_CONSOLE (16)
+#define CREATE_NEW_PROCESS_GROUP (512)
+#define CREATE_SEPARATE_WOW_VDM (2048)
+#define CREATE_SUSPENDED (4)
+#define CREATE_UNICODE_ENVIRONMENT (1024)
+#define DEBUG_PROCESS (1)
+#define DEBUG_ONLY_THIS_PROCESS (2)
+#define DETACHED_PROCESS (8)
+#define HIGH_PRIORITY_CLASS (128)
+#define IDLE_PRIORITY_CLASS (64)
+#define NORMAL_PRIORITY_CLASS (32)
+#define REALTIME_PRIORITY_CLASS (256)
+
+/* CreateService */
+#define SERVICE_ALL_ACCESS (0xf01ffL)
+#define SERVICE_CHANGE_CONFIG (2)
+#define SERVICE_ENUMERATE_DEPENDENTS (8)
+#define SERVICE_INTERROGATE (128)
+#define SERVICE_PAUSE_CONTINUE (64)
+#define SERVICE_QUERY_CONFIG (1)
+#define SERVICE_QUERY_STATUS (4)
+#define SERVICE_START (16)
+#define SERVICE_STOP (32)
+#define SERVICE_USER_DEFINED_CONTROL (256)
+#define DELETE (0x10000L)
+#define READ_CONTROL (0x20000L)
+#define GENERIC_EXECUTE (0x20000000L)
+#define SERVICE_WIN32_OWN_PROCESS (16)
+#define SERVICE_WIN32_SHARE_PROCESS (32)
+#define SERVICE_KERNEL_DRIVER (1)
+#define SERVICE_FILE_SYSTEM_DRIVER (2)
+#define SERVICE_INTERACTIVE_PROCESS (256)
+#define SERVICE_BOOT_START (0)
+#define SERVICE_SYSTEM_START (1)
+#define SERVICE_AUTO_START (2)
+#define SERVICE_DEMAND_START (3)
+#define SERVICE_DISABLED (4)
+#define SERVICE_ERROR_IGNORE (0)
+#define SERVICE_ERROR_NORMAL (1)
+#define SERVICE_ERROR_SEVERE (2)
+#define SERVICE_ERROR_CRITICAL (3)
+
+/* CreateTapePartition, WriteTapemark */
+#define TAPE_FIXED_PARTITIONS (0L)
+#define TAPE_INITIATOR_PARTITIONS (0x2L)
+#define TAPE_SELECT_PARTITIONS (0x1L)
+#define TAPE_FILEMARKS (0x1L)
+#define TAPE_LONG_FILEMARKS (0x3L)
+#define TAPE_SETMARKS (0L)
+#define TAPE_SHORT_FILEMARKS (0x2L)
+
+/* CreateWindow */
+#define CW_USEDEFAULT (0x80000000)
+#define WS_BORDER (0x800000L)
+#define WS_CAPTION (0xc00000L)
+#define WS_CHILD (0x40000000L)
+#define WS_CHILDWINDOW (0x40000000L)
+#define WS_CLIPCHILDREN (0x2000000L)
+#define WS_CLIPSIBLINGS (0x4000000L)
+#define WS_DISABLED (0x8000000L)
+#define WS_DLGFRAME (0x400000L)
+#define WS_GROUP (0x20000L)
+#define WS_HSCROLL (0x100000L)
+#define WS_ICONIC (0x20000000L)
+#define WS_MAXIMIZE (0x1000000L)
+#define WS_MAXIMIZEBOX (0x10000L)
+#define WS_MINIMIZE (0x20000000L)
+#define WS_MINIMIZEBOX (0x20000L)
+#define WS_OVERLAPPED (0L)
+#define WS_OVERLAPPEDWINDOW (0xcf0000L)
+#define WS_POPUP (0x80000000L)
+#define WS_POPUPWINDOW (0x80880000L)
+#define WS_SIZEBOX (0x40000L)
+#define WS_SYSMENU (0x80000L)
+#define WS_TABSTOP (0x10000L)
+#define WS_THICKFRAME (0x40000L)
+#define WS_TILED (0L)
+#define WS_TILEDWINDOW (0xcf0000L)
+#define WS_VISIBLE (0x10000000L)
+#define WS_VSCROLL (0x200000L)
+#define MDIS_ALLCHILDSTYLES (0x1)
+#define BS_3STATE (0x5L)
+#define BS_AUTO3STATE (0x6L)
+#define BS_AUTOCHECKBOX (0x3L)
+#define BS_AUTORADIOBUTTON (0x9L)
+#define BS_BITMAP (0x80L)
+#define BS_BOTTOM (0x800L)
+#define BS_CENTER (0x300L)
+#define BS_CHECKBOX (0x2L)
+#define BS_DEFPUSHBUTTON (0x1L)
+#define BS_GROUPBOX (0x7L)
+#define BS_ICON (0x40L)
+#define BS_LEFT (0x100L)
+#define BS_LEFTTEXT (0x20L)
+#define BS_MULTILINE (0x2000L)
+#define BS_NOTIFY (0x4000L)
+#define BS_OWNERDRAW (0xbL)
+#define BS_PUSHBUTTON (0L)
+#define BS_PUSHLIKE (0x1000L)
+#define BS_RADIOBUTTON (0x4L)
+#define BS_RIGHT (0x200L)
+#define BS_RIGHTBUTTON (0x20L)
+#define BS_TEXT (0L)
+#define BS_TOP (0x400L)
+#define BS_USERBUTTON (0x8L)
+#define BS_VCENTER (0xc00L)
+#define CBS_AUTOHSCROLL (0x40L)
+#define CBS_DISABLENOSCROLL (0x800L)
+#define CBS_DROPDOWN (0x2L)
+#define CBS_DROPDOWNLIST (0x3L)
+#define CBS_HASSTRINGS (0x200L)
+#define CBS_LOWERCASE (0x4000L)
+#define CBS_NOINTEGRALHEIGHT (0x400L)
+#define CBS_OEMCONVERT (0x80L)
+#define CBS_OWNERDRAWFIXED (0x10L)
+#define CBS_OWNERDRAWVARIABLE (0x20L)
+#define CBS_SIMPLE (0x1L)
+#define CBS_SORT (0x100L)
+#define CBS_UPPERCASE (0x2000L)
+#define ES_AUTOHSCROLL (0x80L)
+#define ES_AUTOVSCROLL (0x40L)
+#define ES_CENTER (0x1L)
+#define ES_LEFT (0L)
+#define ES_LOWERCASE (0x10L)
+#define ES_MULTILINE (0x4L)
+#define ES_NOHIDESEL (0x100L)
+#define ES_NUMBER (0x2000L)
+#define ES_OEMCONVERT (0x400L)
+#define ES_PASSWORD (0x20L)
+#define ES_READONLY (0x800L)
+#define ES_RIGHT (0x2L)
+#define ES_UPPERCASE (0x8L)
+#define ES_WANTRETURN (0x1000L)
+#define LBS_DISABLENOSCROLL (0x1000L)
+#define LBS_EXTENDEDSEL (0x800L)
+#define LBS_HASSTRINGS (0x40L)
+#define LBS_MULTICOLUMN (0x200L)
+#define LBS_MULTIPLESEL (0x8L)
+#define LBS_NODATA (0x2000L)
+#define LBS_NOINTEGRALHEIGHT (0x100L)
+#define LBS_NOREDRAW (0x4L)
+#define LBS_NOSEL (0x4000L)
+#define LBS_NOTIFY (0x1L)
+#define LBS_OWNERDRAWFIXED (0x10L)
+#define LBS_OWNERDRAWVARIABLE (0x20L)
+#define LBS_SORT (0x2L)
+#define LBS_STANDARD (0xa00003L)
+#define LBS_USETABSTOPS (0x80L)
+#define LBS_WANTKEYBOARDINPUT (0x400L)
+#define SBS_BOTTOMALIGN (0x4L)
+#define SBS_HORZ (0L)
+#define SBS_LEFTALIGN (0x2L)
+#define SBS_RIGHTALIGN (0x4L)
+#define SBS_SIZEBOX (0x8L)
+#define SBS_SIZEBOXBOTTOMRIGHTALIGN (0x4L)
+#define SBS_SIZEBOXTOPLEFTALIGN (0x2L)
+#define SBS_SIZEGRIP (0x10L)
+#define SBS_TOPALIGN (0x2L)
+#define SBS_VERT (0x1L)
+#define SS_BITMAP (0xeL)
+#define SS_BLACKFRAME (0x7L)
+#define SS_BLACKRECT (0x4L)
+#define SS_CENTER (0x1L)
+#define SS_CENTERIMAGE (0x200L)
+#define SS_ENHMETAFILE (0xfL)
+#define SS_ETCHEDFRAME (0x12L)
+#define SS_ETCHEDHORZ (0x10L)
+#define SS_ETCHEDVERT (0x11L)
+#define SS_GRAYFRAME (0x8L)
+#define SS_GRAYRECT (0x5L)
+#define SS_ICON (0x3L)
+#define SS_LEFT (0L)
+#define SS_LEFTNOWORDWRAP (0xcL)
+#define SS_NOPREFIX (0x80L)
+#define SS_NOTIFY (0x100L)
+#define SS_OWNERDRAW (0xdL)
+#define SS_REALSIZEIMAGE (0x800L)
+#define SS_RIGHT (0x2L)
+#define SS_RIGHTJUST (0x400L)
+#define SS_SIMPLE (0xbL)
+#define SS_SUNKEN (0x1000L)
+#define SS_USERITEM (0xaL)
+#define SS_WHITEFRAME (0x9L)
+#define SS_WHITERECT (0x6L)
+#define DS_3DLOOK (0x4L)
+#define DS_ABSALIGN (0x1L)
+#define DS_CENTER (0x800L)
+#define DS_CENTERMOUSE (0x1000L)
+#define DS_CONTEXTHELP (0x2000L)
+#define DS_CONTROL (0x400L)
+#define DS_FIXEDSYS (0x8L)
+#define DS_LOCALEDIT (0x20L)
+#define DS_MODALFRAME (0x80L)
+#define DS_NOFAILCREATE (0x10L)
+#define DS_NOIDLEMSG (0x100L)
+#define DS_SETFONT (0x40L)
+#define DS_SETFOREGROUND (0x200L)
+#define DS_SYSMODAL (0x2L)
+
+/* CreateWindowEx */
+#define WS_EX_ACCEPTFILES (0x10L)
+#define WS_EX_APPWINDOW (0x40000L)
+#define WS_EX_CLIENTEDGE (0x200L)
+#define WS_EX_CONTEXTHELP (0x400L)
+#define WS_EX_CONTROLPARENT (0x10000L)
+#define WS_EX_DLGMODALFRAME (0x1L)
+#define WS_EX_LEFT (0L)
+#define WS_EX_LEFTSCROLLBAR (0x4000L)
+#define WS_EX_LTRREADING (0L)
+#define WS_EX_MDICHILD (0x40L)
+#define WS_EX_NOPARENTNOTIFY (0x4L)
+#define WS_EX_OVERLAPPEDWINDOW (0x300L)
+#define WS_EX_PALETTEWINDOW (0x188L)
+#define WS_EX_RIGHT (0x1000L)
+#define WS_EX_RIGHTSCROLLBAR (0L)
+#define WS_EX_RTLREADING (0x2000L)
+#define WS_EX_STATICEDGE (0x20000L)
+#define WS_EX_TOOLWINDOW (0x80L)
+#define WS_EX_TOPMOST (0x8L)
+#define WS_EX_TRANSPARENT (0x20L)
+#define WS_EX_WINDOWEDGE (0x100L)
+
+/* CreateWindowStation */
+#define WINSTA_ACCESSCLIPBOARD (0x4L)
+#define WINSTA_ACCESSGLOBALATOMS (0x20L)
+#define WINSTA_CREATEDESKTOP (0x8L)
+#define WINSTA_ENUMDESKTOPS (0x1L)
+#define WINSTA_ENUMERATE (0x100L)
+#define WINSTA_EXITWINDOWS (0x40L)
+#define WINSTA_READATTRIBUTES (0x2L)
+#define WINSTA_READSCREEN (0x200L)
+#define WINSTA_WRITEATTRIBUTES (0x10L)
+
+/* DdeCallback */
+
+/* DdeClientTransaction */
+
+/* DdeEnableCallback */
+
+/* DdeGetLastError */
+
+/* DdeInitialize */
+
+/* DdeNameService */
+
+/* DebugProc */
+#define WH_CALLWNDPROC (4)
+#define WH_CALLWNDPROCRET (12)
+#define WH_CBT (5)
+#define WH_DEBUG (9)
+#define WH_GETMESSAGE (3)
+#define WH_JOURNALPLAYBACK (1)
+#define WH_JOURNALRECORD (0)
+#define WH_KEYBOARD (2)
+#define WH_MOUSE (7)
+#define WH_MSGFILTER (-1)
+#define WH_SHELL (10)
+#define WH_SYSMSGFILTER (6)
+#define WH_MSGFILTER (-1)
+#define WH_FOREGROUNDIDLE (11)
+
+/* DefineDosDevice */
+#define DDD_RAW_TARGET_PATH (1)
+#define DDD_REMOVE_DEFINITION (2)
+#define DDD_EXACT_MATCH_ON_REMOVE (4)
+
+/* DeviceCapbilities */
+#define DC_BINNAMES (12)
+#define DC_BINS (6)
+#define DC_COPIES (18)
+#define DC_DRIVER (11)
+#define DC_DATATYPE_PRODUCED (21)
+#define DC_DUPLEX (7)
+#define DC_EMF_COMPLIANT (20)
+#define DC_ENUMRESOLUTIONS (13)
+#define DC_EXTRA (9)
+#define DC_FIELDS (1)
+#define DC_FILEDEPENDENCIES (14)
+#define DC_MAXEXTENT (5)
+#define DC_MINEXTENT (4)
+#define DC_ORIENTATION (17)
+#define DC_PAPERNAMES (16)
+#define DC_PAPERS (2)
+#define DC_PAPERSIZE (3)
+#define DC_SIZE (8)
+#define DC_TRUETYPE (15)
+#define DCTT_BITMAP (0x1L)
+#define DCTT_DOWNLOAD (0x2L)
+#define DCTT_SUBDEV (0x4L)
+#define DC_VERSION (10)
+#define DC_BINADJUST (19)
+#define DC_DATATYPE_PRODUCED (21)
+
+/* DeviceIoControl */
+
+/* DlgDirList */
+#define DDL_ARCHIVE (32)
+#define DDL_DIRECTORY (16)
+#define DDL_DRIVES (16384)
+#define DDL_EXCLUSIVE (32768)
+#define DDL_HIDDEN (2)
+#define DDL_READONLY (1)
+#define DDL_READWRITE (0)
+#define DDL_SYSTEM (4)
+#define DDL_POSTMSGS (8192)
+
+/* DllEntryPoint */
+#define DLL_PROCESS_ATTACH (1)
+#define DLL_THREAD_ATTACH (2)
+#define DLL_PROCESS_DETACH (0)
+#define DLL_THREAD_DETACH (3)
+
+/* DocumentProperties */
+#define DM_IN_BUFFER (8)
+#define DM_MODIFY (8)
+#define DM_IN_PROMPT (4)
+#define DM_PROMPT (4)
+#define DM_OUT_BUFFER (2)
+#define DM_COPY (2)
+#define DM_UPDATE (1)
+
+/* DrawAnimatedRects */
+#define IDANI_OPEN (1)
+#define IDANI_CLOSE (2)
+
+/* DrawCaption */
+#define DC_ACTIVE (1)
+#define DC_SMALLCAP (2)
+
+/* DrawEdge */
+#define BDR_RAISEDINNER (4)
+#define BDR_SUNKENINNER (8)
+#define BDR_RAISEDOUTER (1)
+#define BDR_SUNKENOUTER (1)
+#define EDGE_BUMP (9)
+#define EDGE_ETCHED (6)
+#define EDGE_RAISED (5)
+#define EDGE_SUNKEN (10)
+#define BF_ADJUST (8192)
+#define BF_BOTTOM (8)
+#define BF_BOTTOMLEFT (9)
+#define BF_BOTTOMRIGHT (12)
+#define BF_DIAGONAL (16)
+#define BF_DIAGONAL_ENDBOTTOMLEFT (25)
+#define BF_DIAGONAL_ENDBOTTOMRIGHT (28)
+#define BF_DIAGONAL_ENDTOPLEFT (19)
+#define BF_DIAGONAL_ENDTOPRIGHT (22)
+#define BF_FLAT (16384)
+#define BF_LEFT (1)
+#define BF_MIDDLE (2048)
+#define BF_MONO (32768)
+#define BF_RECT (15)
+#define BF_RIGHT (4)
+#define BF_SOFT (4096)
+#define BF_TOP (2)
+#define BF_TOPLEFT (3)
+#define BF_TOPRIGHT (6)
+
+/* DrawFrameControl */
+#define DFC_BUTTON (4)
+#define DFC_CAPTION (1)
+#define DFC_MENU (2)
+#define DFC_SCROLL (3)
+#define DFCS_BUTTON3STATE (8)
+#define DFCS_BUTTONCHECK (0)
+#define DFCS_BUTTONPUSH (16)
+#define DFCS_BUTTONRADIO (4)
+#define DFCS_BUTTONRADIOIMAGE (1)
+#define DFCS_BUTTONRADIOMASK (2)
+#define DFCS_CAPTIONCLOSE (0)
+#define DFCS_CAPTIONHELP (4)
+#define DFCS_CAPTIONMAX (2)
+#define DFCS_CAPTIONMIN (1)
+#define DFCS_CAPTIONRESTORE (3)
+#define DFCS_MENUARROW (0)
+#define DFCS_MENUBULLET (2)
+#define DFCS_MENUCHECK (1)
+#define DFCS_SCROLLCOMBOBOX (5)
+#define DFCS_SCROLLDOWN (1)
+#define DFCS_SCROLLLEFT (2)
+#define DFCS_SCROLLRIGHT (3)
+#define DFCS_SCROLLSIZEGRIP (8)
+#define DFCS_SCROLLUP (0)
+#define DFCS_ADJUSTRECT (8192)
+#define DFCS_CHECKED (1024)
+#define DFCS_FLAT (16384)
+#define DFCS_INACTIVE (256)
+#define DFCS_MONO (32768)
+#define DFCS_PUSHED (512)
+
+/* DrawIconEx */
+#define DI_COMPAT (4)
+#define DI_DEFAULTSIZE (8)
+#define DI_IMAGE (2)
+#define DI_MASK (1)
+#define DI_NORMAL (3)
+
+/* DrawState */
+#define DST_BITMAP (4)
+#define DST_COMPLEX (0)
+#define DST_ICON (3)
+#define DST_PREFIXTEXT (2)
+#define DST_TEXT (1)
+#define DSS_NORMAL (0)
+#define DSS_UNION (16)
+#define DSS_DISABLED (32)
+#define DSS_MONO (128)
+
+/* DrawStatusText */
+#define SBT_NOBORDERS (256)
+#define SBT_OWNERDRAW (4096)
+#define SBT_POPOUT (512)
+#define SBT_RTLREADING (1024)
+
+/* DrawText, DrawTextEx */
+#define DT_BOTTOM (8)
+#define DT_CALCRECT (1024)
+#define DT_CENTER (1)
+#define DT_EDITCONTROL (8192)
+#define DT_END_ELLIPSIS (32768)
+#define DT_PATH_ELLIPSIS (16384)
+#define DT_EXPANDTABS (64)
+#define DT_EXTERNALLEADING (512)
+#define DT_LEFT (0)
+#define DT_MODIFYSTRING (65536)
+#define DT_NOCLIP (256)
+#define DT_NOPREFIX (2048)
+#define DT_RIGHT (2)
+#define DT_RTLREADING (131072)
+#define DT_SINGLELINE (32)
+#define DT_TABSTOP (128)
+#define DT_TOP (0)
+#define DT_VCENTER (4)
+#define DT_WORDBREAK (16)
+#define DT_INTERNAL (4096)
+
+/* DuplicateHandle, MapViewOfFile */
+#define DUPLICATE_CLOSE_SOURCE (1)
+#define DUPLICATE_SAME_ACCESS (2)
+#define FILE_MAP_ALL_ACCESS (0xf001fL)
+#define FILE_MAP_READ (4)
+#define FILE_MAP_WRITE (2)
+#define FILE_MAP_COPY (1)
+#define MUTEX_ALL_ACCESS (0x1f0001L)
+#define MUTEX_MODIFY_STATE (1)
+#define SYNCHRONIZE (0x100000L)
+#define SEMAPHORE_ALL_ACCESS (0x1f0003L)
+#define SEMAPHORE_MODIFY_STATE (2)
+#define EVENT_ALL_ACCESS (0x1f0003L)
+#define EVENT_MODIFY_STATE (2)
+#define KEY_ALL_ACCESS (0xf003fL)
+#define KEY_CREATE_LINK (32)
+#define KEY_CREATE_SUB_KEY (4)
+#define KEY_ENUMERATE_SUB_KEYS (8)
+#define KEY_EXECUTE (0x20019L)
+#define KEY_NOTIFY (16)
+#define KEY_QUERY_VALUE (1)
+#define KEY_READ (0x20019L)
+#define KEY_SET_VALUE (2)
+#define KEY_WRITE (0x20006L)
+#define PROCESS_ALL_ACCESS (0x1f0fffL)
+#define PROCESS_CREATE_PROCESS (128)
+#define PROCESS_CREATE_THREAD (2)
+#define PROCESS_DUP_HANDLE (64)
+#define PROCESS_QUERY_INFORMATION (1024)
+#define PROCESS_SET_INFORMATION (512)
+#define PROCESS_TERMINATE (1)
+#define PROCESS_VM_OPERATION (8)
+#define PROCESS_VM_READ (16)
+#define PROCESS_VM_WRITE (32)
+#define THREAD_ALL_ACCESS (0x1f03ffL)
+#define THREAD_DIRECT_IMPERSONATION (512)
+#define THREAD_GET_CONTEXT (8)
+#define THREAD_IMPERSONATE (256)
+#define THREAD_QUERY_INFORMATION (64)
+#define THREAD_SET_CONTEXT (16)
+#define THREAD_SET_INFORMATION (32)
+#define THREAD_SET_THREAD_TOKEN (128)
+#define THREAD_SUSPEND_RESUME (2)
+#define THREAD_TERMINATE (1)
+
+/* EditWordBreakProc */
+#define WB_ISDELIMITER (2)
+#define WB_LEFT (0)
+#define WB_RIGHT (1)
+
+/* EnableScrollBar */
+#define SB_BOTH (3)
+#define SB_CTL (2)
+#define SB_HORZ (0)
+#define SB_VERT (1)
+#define ESB_DISABLE_BOTH (3)
+#define ESB_DISABLE_DOWN (2)
+#define ESB_DISABLE_LEFT (1)
+#define ESB_DISABLE_LTUP (1)
+#define ESB_DISABLE_RIGHT (2)
+#define ESB_DISABLE_RTDN (2)
+#define ESB_DISABLE_UP (1)
+#define ESB_ENABLE_BOTH (0)
+
+/* Scroll Bar notifications*/
+#define SB_LINEUP (0)
+#define SB_LINEDOWN (1)
+#define SB_LINELEFT (0)
+#define SB_LINERIGHT (1)
+#define SB_PAGEUP (2)
+#define SB_PAGEDOWN (3)
+#define SB_PAGELEFT (2)
+#define SB_PAGERIGHT (3)
+#define SB_THUMBPOSITION (4)
+#define SB_THUMBTRACK (5)
+#define SB_ENDSCROLL (8)
+#define SB_LEFT (6)
+#define SB_RIGHT (7)
+#define SB_BOTTOM (7)
+#define SB_TOP (6)
+
+/* EnumCalendarInfo */
+#define ENUM_ALL_CALENDARS (-1)
+
+/* EnumDateFormats */
+#define DATE_SHORTDATE (1)
+#define DATE_LONGDATE (2)
+
+/* EnumDependentServices */
+#define SERVICE_ACTIVE (1)
+#define SERVICE_INACTIVE (2)
+
+/* EnumFontFamExProc */
+#define DEVICE_FONTTYPE (2)
+#define RASTER_FONTTYPE (1)
+#define TRUETYPE_FONTTYPE (4)
+
+/* EnumObjects, GetCurrentObject, GetObjectType */
+#define OBJ_BRUSH (2)
+#define OBJ_PEN (1)
+#define OBJ_PAL (5)
+#define OBJ_FONT (6)
+#define OBJ_BITMAP (7)
+#define OBJ_EXTPEN (11)
+#define OBJ_REGION (8)
+#define OBJ_DC (3)
+#define OBJ_MEMDC (10)
+#define OBJ_METAFILE (9)
+#define OBJ_METADC (4)
+#define OBJ_ENHMETAFILE (13)
+#define OBJ_ENHMETADC (12)
+
+/* EnumPrinters */
+
+/* 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))
+
+/* EnumServicesStatus */
+#define SERVICE_WIN32 (48)
+#define SERVICE_DRIVER (11)
+
+/* EnumSystemCodePages */
+#define CP_INSTALLED (1)
+#define CP_SUPPORTED (2)
+
+/* EnumSystemLocales */
+#define LCID_INSTALLED (1)
+#define LCID_SUPPORTED (2)
+
+/* EraseTape */
+#define TAPE_ERASE_LONG (0x1L)
+#define TAPE_ERASE_SHORT (0L)
+
+/* Escape */
+#define SP_ERROR (-1)
+#define SP_OUTOFDISK (-4)
+#define SP_OUTOFMEMORY (-5)
+#define SP_USERABORT (-3)
+#define PHYSICALWIDTH (110)
+#define PHYSICALHEIGHT (111)
+#define PHYSICALOFFSETX (112)
+#define PHYSICALOFFSETY (113)
+#define SCALINGFACTORX (114)
+#define SCALINGFACTORY (115)
+#define QUERYESCSUPPORT (8)
+#define ABORTDOC (2)
+#define ENDDOC (11)
+#define GETPHYSPAGESIZE (12)
+#define GETPRINTINGOFFSET (13)
+#define GETSCALINGFACTOR (14)
+#define NEWFRAME (1)
+#define NEXTBAND (3)
+#define PASSTHROUGH (19)
+#define SETABORTPROC (9)
+#define STARTDOC (10)
+
+/* EscapeCommFunction */
+#define CLRDTR (6)
+#define CLRRTS (4)
+#define SETDTR (5)
+#define SETRTS (3)
+#define SETXOFF (1)
+#define SETXON (2)
+#define SETBREAK (8)
+#define CLRBREAK (9)
+
+/* ExitWindowsEx */
+#define EWX_FORCE (4)
+#define EWX_LOGOFF (0)
+#define EWX_POWEROFF (8)
+#define EWX_REBOOT (2)
+#define EWX_SHUTDOWN (1)
+
+/* ExtFloodFill */
+#define FLOODFILLBORDER (0)
+#define FLOODFILLSURFACE (1)
+
+/* ExtTextOut */
+#define ETO_CLIPPED (4)
+#define ETO_GLYPH_INDEX (16)
+#define ETO_OPAQUE (2)
+#define ETO_RTLREADING (128)
+
+/* FillConsoleOutputAttribute */
+#define FOREGROUND_BLUE (1)
+#define FOREGROUND_GREEN (2)
+#define FOREGROUND_RED (4)
+#define FOREGROUND_INTENSITY (8)
+#define BACKGROUND_BLUE (16)
+#define BACKGROUND_GREEN (32)
+#define BACKGROUND_RED (64)
+#define BACKGROUND_INTENSITY (128)
+
+/* FindFirstChangeNotification */
+#define FILE_NOTIFY_CHANGE_FILE_NAME (1)
+#define FILE_NOTIFY_CHANGE_DIR_NAME (2)
+#define FILE_NOTIFY_CHANGE_ATTRIBUTES (4)
+#define FILE_NOTIFY_CHANGE_SIZE (8)
+#define FILE_NOTIFY_CHANGE_LAST_WRITE (16)
+#define FILE_NOTIFY_CHANGE_SECURITY (256)
+
+/* FindFirstPrinterChangeNotification */
+
+/* FindNextPrinterNotification */
+
+/* FMExtensionProc */
+
+/* FoldString */
+#define MAP_FOLDCZONE (16)
+#define MAP_FOLDDIGITS (128)
+#define MAP_PRECOMPOSED (32)
+#define MAP_COMPOSITE (64)
+
+/* ForegroundIdleProc */
+#define HC_ACTION (0)
+
+/* FormatMessage */
+#define FORMAT_MESSAGE_ALLOCATE_BUFFER (256)
+#define FORMAT_MESSAGE_IGNORE_INSERTS (512)
+#define FORMAT_MESSAGE_FROM_STRING (1024)
+#define FORMAT_MESSAGE_FROM_HMODULE (2048)
+#define FORMAT_MESSAGE_FROM_SYSTEM (4096)
+#define FORMAT_MESSAGE_ARGUMENT_ARRAY (8192)
+#define FORMAT_MESSAGE_MAX_WIDTH_MASK (255)
+
+/* GdiComment */
+#define GDICOMMENT_WINDOWS_METAFILE (-2147483647)
+#define GDICOMMENT_BEGINGROUP (2)
+#define GDICOMMENT_ENDGROUP (3)
+#define GDICOMMENT_MULTIFORMATS (1073741828)
+#define GDICOMMENT_IDENTIFIER (1128875079)
+
+/* GenerateConsoleCtrlEvent, HandlerRoutine */
+#define CTRL_C_EVENT (0)
+#define CTRL_BREAK_EVENT (1)
+#define CTRL_CLOSE_EVENT (2)
+#define CTRL_LOGOFF_EVENT (5)
+#define CTRL_SHUTDOWN_EVENT (6)
+
+/* GetAddressByName */
+
+/* GetArcDirection */
+#define AD_COUNTERCLOCKWISE (1)
+#define AD_CLOCKWISE (2)
+
+/* GetBinaryTypes */
+#define SCS_32BIT_BINARY (0)
+#define SCS_DOS_BINARY (1)
+#define SCS_OS216_BINARY (5)
+#define SCS_PIF_BINARY (3)
+#define SCS_POSIX_BINARY (4)
+#define SCS_WOW_BINARY (2)
+
+/* GetBoundsRect, SetBoundsRect */
+#define DCB_DISABLE (8)
+#define DCB_ENABLE (4)
+#define DCB_RESET (1)
+#define DCB_SET (3)
+#define DCB_ACCUMULATE (2)
+
+/* GetCharacterPlacement, GetFontLanguageInfo */
+#define GCP_DBCS (1)
+#define GCP_ERROR (0x8000)
+#define GCP_CLASSIN (0x80000L)
+#define GCP_DIACRITIC (256)
+#define GCP_DISPLAYZWG (0x400000L)
+#define GCP_GLYPHSHAPE (16)
+#define GCP_JUSTIFY (0x10000L)
+#define GCP_JUSTIFYIN (0x200000L)
+#define GCP_KASHIDA (1024)
+#define GCP_LIGATE (32)
+#define GCP_MAXEXTENT (0x100000L)
+#define GCP_NEUTRALOVERRIDE (0x2000000L)
+#define GCP_NUMERICOVERRIDE (0x1000000L)
+#define GCP_NUMERICSLATIN (0x4000000L)
+#define GCP_NUMERICSLOCAL (0x8000000L)
+#define GCP_REORDER (2)
+#define GCP_SYMSWAPOFF (0x800000L)
+#define GCP_USEKERNING (8)
+#define FLI_GLYPHS (0x40000L)
+#define FLI_MASK (0x103b)
+
+/* GetClassLong, GetClassWord */
+#define GCW_ATOM (-32)
+#define GCL_CBCLSEXTRA (-20)
+#define GCL_CBWNDEXTRA (-18)
+#define GCL_HBRBACKGROUND (-10)
+#define GCL_HCURSOR (-12)
+#define GCL_HICON (-14)
+#define GCL_HICONSM (-34)
+#define GCL_HMODULE (-16)
+#define GCL_MENUNAME (-8)
+#define GCL_STYLE (-26)
+#define GCL_WNDPROC (-24)
+
+/* GetClipboardFormat, SetClipboardData */
+#define CF_BITMAP (2)
+#define CF_DIB (8)
+#define CF_PALETTE (9)
+#define CF_ENHMETAFILE (14)
+#define CF_METAFILEPICT (3)
+#define CF_OEMTEXT (7)
+#define CF_TEXT (1)
+#define CF_UNICODETEXT (13)
+#define CF_DIF (5)
+#define CF_DSPBITMAP (130)
+#define CF_DSPENHMETAFILE (142)
+#define CF_DSPMETAFILEPICT (131)
+#define CF_DSPTEXT (129)
+#define CF_GDIOBJFIRST (768)
+#define CF_GDIOBJLAST (1023)
+#define CF_HDROP (15)
+#define CF_LOCALE (16)
+#define CF_OWNERDISPLAY (128)
+#define CF_PENDATA (10)
+#define CF_PRIVATEFIRST (512)
+#define CF_PRIVATELAST (767)
+#define CF_RIFF (11)
+#define CF_SYLK (4)
+#define CF_WAVE (12)
+#define CF_TIFF (6)
+
+/* GetCommMask */
+#define EV_BREAK (64)
+#define EV_CTS (8)
+#define EV_DSR (16)
+#define EV_ERR (128)
+#define EV_EVENT1 (2048)
+#define EV_EVENT2 (4096)
+#define EV_PERR (512)
+#define EV_RING (256)
+#define EV_RLSD (32)
+#define EV_RX80FULL (1024)
+#define EV_RXCHAR (1)
+#define EV_RXFLAG (2)
+#define EV_TXEMPTY (4)
+
+/* GetCommModemStatus */
+#define MS_CTS_ON (0x10L)
+#define MS_DSR_ON (0x20L)
+#define MS_RING_ON (0x40L)
+#define MS_RLSD_ON (0x80L)
+
+/* GetComputerName */
+#define MAX_COMPUTERNAME_LENGTH (15)
+
+/* GetConsoleMode */
+#define ENABLE_LINE_INPUT (2)
+#define ENABLE_ECHO_INPUT (4)
+#define ENABLE_PROCESSED_INPUT (1)
+#define ENABLE_WINDOW_INPUT (8)
+#define ENABLE_MOUSE_INPUT (16)
+#define ENABLE_PROCESSED_OUTPUT (1)
+#define ENABLE_WRAP_AT_EOL_OUTPUT (2)
+
+/* GetCPInfo */
+#define CP_ACP (0)
+#define CP_MACCP (2)
+#define CP_OEMCP (1)
+
+/* GetDateFormat */
+#define DATE_SHORTDATE (1)
+#define DATE_LONGDATE (2)
+#define DATE_USE_ALT_CALENDAR (4)
+
+/* GetDCEx */
+#define DCX_WINDOW (0x1L)
+#define DCX_CACHE (0x2L)
+#define DCX_PARENTCLIP (0x20L)
+#define DCX_CLIPSIBLINGS (0x10L)
+#define DCX_CLIPCHILDREN (0x8L)
+#define DCX_NORESETATTRS (0x4L)
+#define DCX_LOCKWINDOWUPDATE (0x400L)
+#define DCX_EXCLUDERGN (0x40L)
+#define DCX_INTERSECTRGN (0x80L)
+#define DCX_VALIDATE (0x200000L)
+
+/* GetDeviceCaps */
+#define DRIVERVERSION (0)
+#define TECHNOLOGY (2)
+#define DT_PLOTTER (0)
+#define DT_RASDISPLAY (1)
+#define DT_RASPRINTER (2)
+#define DT_RASCAMERA (3)
+#define DT_CHARSTREAM (4)
+#define DT_METAFILE (5)
+#define DT_DISPFILE (6)
+#define HORZSIZE (4)
+#define VERTSIZE (6)
+#define HORZRES (8)
+#define VERTRES (10)
+#define LOGPIXELSX (88)
+#define LOGPIXELSY (90)
+#define BITSPIXEL (12)
+#define PLANES (14)
+#define NUMBRUSHES (16)
+#define NUMPENS (18)
+#define NUMFONTS (22)
+#define NUMCOLORS (24)
+#define ASPECTX (40)
+#define ASPECTY (42)
+#define ASPECTXY (44)
+#define PDEVICESIZE (26)
+#define CLIPCAPS (36)
+#define SIZEPALETTE (104)
+#define NUMRESERVED (106)
+#define COLORRES (108)
+#define PHYSICALWIDTH (110)
+#define PHYSICALHEIGHT (111)
+#define PHYSICALOFFSETX (112)
+#define PHYSICALOFFSETY (113)
+#define SCALINGFACTORX (114)
+#define SCALINGFACTORY (115)
+#define VREFRESH (116)
+#define DESKTOPHORZRES (118)
+#define DESKTOPVERTRES (117)
+#define BLTALIGNMENT (119)
+#define RASTERCAPS (38)
+#define RC_BANDING (2)
+#define RC_BITBLT (1)
+#define RC_BITMAP64 (8)
+#define RC_DI_BITMAP (128)
+#define RC_DIBTODEV (512)
+#define RC_FLOODFILL (4096)
+#define RC_GDI20_OUTPUT (16)
+#define RC_PALETTE (256)
+#define RC_SCALING (4)
+#define RC_STRETCHBLT (2048)
+#define RC_STRETCHDIB (8192)
+#define CURVECAPS (28)
+#define CC_NONE (0)
+#define CC_CIRCLES (1)
+#define CC_PIE (2)
+#define CC_CHORD (4)
+#define CC_ELLIPSES (8)
+#define CC_WIDE (16)
+#define CC_STYLED (32)
+#define CC_WIDESTYLED (64)
+#define CC_INTERIORS (128)
+#define CC_ROUNDRECT (256)
+#define LINECAPS (30)
+#define LC_NONE (0)
+#define LC_POLYLINE (2)
+#define LC_MARKER (4)
+#define LC_POLYMARKER (8)
+#define LC_WIDE (16)
+#define LC_STYLED (32)
+#define LC_WIDESTYLED (64)
+#define LC_INTERIORS (128)
+#define POLYGONALCAPS (32)
+#define PC_NONE (0)
+#define PC_POLYGON (1)
+#define PC_RECTANGLE (2)
+#define PC_WINDPOLYGON (4)
+#define PC_SCANLINE (8)
+#define PC_WIDE (16)
+#define PC_STYLED (32)
+#define PC_WIDESTYLED (64)
+#define PC_INTERIORS (128)
+#define TEXTCAPS (34)
+#define TC_OP_CHARACTER (1)
+#define TC_OP_STROKE (2)
+#define TC_CP_STROKE (4)
+#define TC_CR_90 (8)
+#define TC_CR_ANY (16)
+#define TC_SF_X_YINDEP (32)
+#define TC_SA_DOUBLE (64)
+#define TC_SA_INTEGER (128)
+#define TC_SA_CONTIN (256)
+#define TC_EA_DOUBLE (512)
+#define TC_IA_ABLE (1024)
+#define TC_UA_ABLE (2048)
+#define TC_SO_ABLE (4096)
+#define TC_RA_ABLE (8192)
+#define TC_VA_ABLE (16384)
+#define TC_RESERVED (32768)
+#define TC_SCROLLBLT (65536)
+#define PC_PATHS (512)
+
+/* GetDriveType */
+#define DRIVE_REMOVABLE (2)
+#define DRIVE_FIXED (3)
+#define DRIVE_REMOTE (4)
+#define DRIVE_CDROM (5)
+#define DRIVE_RAMDISK (6)
+#define DRIVE_UNKNOWN (0)
+#define DRIVE_NO_ROOT_DIR (1)
+
+/* GetExceptionCode */
+#define EXCEPTION_ACCESS_VIOLATION (0xc0000005L)
+#define EXCEPTION_BREAKPOINT (0x80000003L)
+#define EXCEPTION_DATATYPE_MISALIGNMENT (0x80000002L)
+#define EXCEPTION_SINGLE_STEP (0x80000004L)
+#define EXCEPTION_ARRAY_BOUNDS_EXCEEDED (0xc000008cL)
+#define EXCEPTION_FLT_DENORMAL_OPERAND (0xc000008dL)
+#define EXCEPTION_FLT_DIVIDE_BY_ZERO (0xc000008eL)
+#define EXCEPTION_FLT_INEXACT_RESULT (0xc000008fL)
+#define EXCEPTION_FLT_INVALID_OPERATION (0xc0000090L)
+#define EXCEPTION_FLT_OVERFLOW (0xc0000091L)
+#define EXCEPTION_FLT_STACK_CHECK (0xc0000092L)
+#define EXCEPTION_FLT_UNDERFLOW (0xc0000093L)
+#define EXCEPTION_INT_DIVIDE_BY_ZERO (0xc0000094L)
+#define EXCEPTION_INT_OVERFLOW (0xc0000095L)
+#define EXCEPTION_INVALID_HANDLE (0xc0000008L)
+#define EXCEPTION_PRIV_INSTRUCTION (0xc0000096L)
+#define EXCEPTION_NONCONTINUABLE_EXCEPTION (0xc0000025L)
+#define EXCEPTION_NONCONTINUABLE (0x1)
+#define EXCEPTION_STACK_OVERFLOW (0xc00000fdL)
+#define EXCEPTION_INVALID_DISPOSITION (0xc0000026L)
+
+/* GetFileType */
+#define FILE_TYPE_UNKNOWN (0)
+#define FILE_TYPE_DISK (1)
+#define FILE_TYPE_CHAR (2)
+#define FILE_TYPE_PIPE (3)
+
+/* GetGlyphOutline */
+#define GGO_BITMAP (1)
+#define GGO_NATIVE (2)
+#define GGO_METRICS (0)
+#define GGO_GRAY2_BITMAP (4)
+#define GGO_GRAY4_BITMAP (5)
+#define GGO_GRAY8_BITMAP (6)
+#define GDI_ERROR (0xffffffffL)
+
+/* GetGraphicsMode */
+#define GM_COMPATIBLE (1)
+#define GM_ADVANCED (2)
+
+/* GetHandleInformation */
+#define HANDLE_FLAG_INHERIT (1)
+#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))
+
+/* GetMapMode */
+#define MM_ANISOTROPIC (8)
+#define MM_HIENGLISH (5)
+#define MM_HIMETRIC (3)
+#define MM_ISOTROPIC (7)
+#define MM_LOENGLISH (4)
+#define MM_LOMETRIC (2)
+#define MM_TEXT (1)
+#define MM_TWIPS (6)
+
+/* GetMenuDefaultItem */
+#define GMDI_GOINTOPOPUPS (0x2L)
+#define GMDI_USEDISABLED (0x1L)
+
+/* PeekMessage */
+#define PM_NOREMOVE (0)
+#define PM_REMOVE (1)
+#define PM_NOYIELD (2)
+
+/* GetNamedPipeHandleState */
+#define PIPE_NOWAIT (1)
+#define PIPE_READMODE_MESSAGE (2)
+
+/* GetNamedPipeInfo */
+#define PIPE_CLIENT_END (0)
+#define PIPE_SERVER_END (1)
+#define PIPE_TYPE_MESSAGE (4)
+
+/* GetNextWindow, GetWindow */
+#define GW_HWNDNEXT (2)
+#define GW_HWNDPREV (3)
+#define GW_CHILD (5)
+#define GW_HWNDFIRST (0)
+#define GW_HWNDLAST (1)
+#define GW_OWNER (4)
+
+/* GetPath */
+#define PT_MOVETO (6)
+#define PT_LINETO (2)
+#define PT_BEZIERTO (4)
+#define PT_CLOSEFIGURE (1)
+
+/* GetProcessShutdownParameters */
+#define SHUTDOWN_NORETRY (1)
+
+/* GetQueueStatus */
+#define QS_ALLEVENTS (191)
+#define QS_ALLINPUT (255)
+#define QS_HOTKEY (128)
+#define QS_INPUT (7)
+#define QS_KEY (1)
+#define QS_MOUSE (6)
+#define QS_MOUSEBUTTON (4)
+#define QS_MOUSEMOVE (2)
+#define QS_PAINT (32)
+#define QS_POSTMESSAGE (8)
+#define QS_SENDMESSAGE (64)
+#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)
+
+/* GetStdHandle */
+#define STD_INPUT_HANDLE (DWORD)(-10)
+#define STD_OUTPUT_HANDLE (DWORD)(-11)
+#define STD_ERROR_HANDLE (DWORD)(-12)
+#define INVALID_HANDLE_VALUE ((HANDLE)-1)
+
+/* GetStockObject */
+#define BLACK_BRUSH (4)
+#define DKGRAY_BRUSH (3)
+#define GRAY_BRUSH (2)
+#define HOLLOW_BRUSH (5)
+#define LTGRAY_BRUSH (1)
+#define NULL_BRUSH (5)
+#define WHITE_BRUSH (0)
+#define BLACK_PEN (7)
+#define NULL_PEN (8)
+#define WHITE_PEN (6)
+#define ANSI_FIXED_FONT (11)
+#define ANSI_VAR_FONT (12)
+#define DEVICE_DEFAULT_FONT (14)
+#define DEFAULT_GUI_FONT (17)
+#define OEM_FIXED_FONT (10)
+#define SYSTEM_FONT (13)
+#define SYSTEM_FIXED_FONT (16)
+#define DEFAULT_PALETTE (15)
+
+/* GetStringTypeA */
+#define CT_CTYPE1 (1)
+#define CT_CTYPE2 (2)
+#define CT_CTYPE3 (4)
+#define C1_UPPER (1)
+#define C1_LOWER (2)
+#define C1_DIGIT (4)
+#define C1_SPACE (8)
+#define C1_PUNCT (16)
+#define C1_CNTRL (32)
+#define C1_BLANK (64)
+#define C1_XDIGIT (128)
+#define C1_ALPHA (256)
+#define C2_LEFTTORIGHT (1)
+#define C2_RIGHTTOLEFT (2)
+#define C2_EUROPENUMBER (3)
+#define C2_EUROPESEPARATOR (4)
+#define C2_EUROPETERMINATOR (5)
+#define C2_ARABICNUMBER (6)
+#define C2_COMMONSEPARATOR (7)
+#define C2_BLOCKSEPARATOR (8)
+#define C2_SEGMENTSEPARATOR (9)
+#define C2_WHITESPACE (10)
+#define C2_OTHERNEUTRAL (11)
+#define C2_NOTAPPLICABLE (0)
+#define C3_NONSPACING (1)
+#define C3_DIACRITIC (2)
+#define C3_VOWELMARK (4)
+#define C3_SYMBOL (8)
+#define C3_KATAKANA (16)
+#define C3_HIRAGANA (32)
+#define C3_HALFWIDTH (64)
+#define C3_FULLWIDTH (128)
+#define C3_IDEOGRAPH (256)
+#define C3_KASHIDA (512)
+#define C3_ALPHA (32768)
+#define C3_NOTAPPLICABLE (0)
+
+/* GetSysColor */
+#define COLOR_3DDKSHADOW (21)
+#define COLOR_3DFACE (15)
+#define COLOR_3DHILIGHT (20)
+#define COLOR_3DLIGHT (22)
+#define COLOR_BTNHILIGHT (20)
+#define COLOR_3DSHADOW (16)
+#define COLOR_ACTIVEBORDER (10)
+#define COLOR_ACTIVECAPTION (2)
+#define COLOR_APPWORKSPACE (12)
+#define COLOR_BACKGROUND (1)
+#define COLOR_DESKTOP (1)
+#define COLOR_BTNFACE (15)
+#define COLOR_BTNHIGHLIGHT (20)
+#define COLOR_BTNSHADOW (16)
+#define COLOR_BTNTEXT (18)
+#define COLOR_CAPTIONTEXT (9)
+#define COLOR_GRAYTEXT (17)
+#define COLOR_HIGHLIGHT (13)
+#define COLOR_HIGHLIGHTTEXT (14)
+#define COLOR_INACTIVEBORDER (11)
+#define COLOR_INACTIVECAPTION (3)
+#define COLOR_INACTIVECAPTIONTEXT (19)
+#define COLOR_INFOBK (24)
+#define COLOR_INFOTEXT (23)
+#define COLOR_MENU (4)
+#define COLOR_MENUTEXT (7)
+#define COLOR_SCROLLBAR (0)
+#define COLOR_WINDOW (5)
+#define COLOR_WINDOWFRAME (6)
+#define COLOR_WINDOWTEXT (8)
+
+/* GetSystemMetrics */
+#define SM_CYMIN (29)
+#define SM_CXMIN (28)
+#define SM_ARRANGE (56)
+#define SM_CLEANBOOT (67)
+/* The right value for SM_CEMETRICS for NT 3.5 is 75. For Windows 95
+ and NT 4.0, it is 76. The meaning is undocumented, anyhow. */
+#define SM_CMETRICS (76)
+#define SM_CMOUSEBUTTONS (43)
+#define SM_CXBORDER (5)
+#define SM_CYBORDER (6)
+#define SM_CXCURSOR (13)
+#define SM_CYCURSOR (14)
+#define SM_CXDLGFRAME (7)
+#define SM_CYDLGFRAME (8)
+#define SM_CXDOUBLECLK (36)
+#define SM_CYDOUBLECLK (37)
+#define SM_CXDRAG (68)
+#define SM_CYDRAG (69)
+#define SM_CXEDGE (45)
+#define SM_CYEDGE (46)
+#define SM_CXFIXEDFRAME (7)
+#define SM_CYFIXEDFRAME (8)
+#define SM_CXFRAME (32)
+#define SM_CYFRAME (33)
+#define SM_CXFULLSCREEN (16)
+#define SM_CYFULLSCREEN (17)
+#define SM_CXHSCROLL (21)
+#define SM_CYHSCROLL (3)
+#define SM_CXHTHUMB (10)
+#define SM_CXICON (11)
+#define SM_CYICON (12)
+#define SM_CXICONSPACING (38)
+#define SM_CYICONSPACING (39)
+#define SM_CXMAXIMIZED (61)
+#define SM_CYMAXIMIZED (62)
+#define SM_CXMAXTRACK (59)
+#define SM_CYMAXTRACK (60)
+#define SM_CXMENUCHECK (71)
+#define SM_CYMENUCHECK (72)
+#define SM_CXMENUSIZE (54)
+#define SM_CYMENUSIZE (55)
+#define SM_CXMINIMIZED (57)
+#define SM_CYMINIMIZED (58)
+#define SM_CXMINSPACING (47)
+#define SM_CYMINSPACING (48)
+#define SM_CXMINTRACK (34)
+#define SM_CYMINTRACK (35)
+#define SM_CXSCREEN (0)
+#define SM_CYSCREEN (1)
+#define SM_CXSIZE (30)
+#define SM_CYSIZE (31)
+#define SM_CXSIZEFRAME (32)
+#define SM_CYSIZEFRAME (33)
+#define SM_CXSMICON (49)
+#define SM_CYSMICON (50)
+#define SM_CXSMSIZE (52)
+#define SM_CYSMSIZE (53)
+#define SM_CXVSCROLL (2)
+#define SM_CYHSCROLL (3)
+#define SM_CXHSCROLL (21)
+#define SM_CYVSCROLL (20)
+#define SM_CYVTHUMB (9)
+#define SM_CYCAPTION (4)
+#define SM_CYKANJIWINDOW (18)
+#define SM_CYMENU (15)
+#define SM_CYSMCAPTION (51)
+#define SM_DBCSENABLED (42)
+#define SM_DEBUG (22)
+#define SM_MENUDROPALIGNMENT (40)
+#define SM_MIDEASTENABLED (74)
+#define SM_MOUSEPRESENT (19)
+#define SM_MOUSEWHEELPRESENT (75)
+#define SM_NETWORK (63)
+#define SM_PENWINDOWS (41)
+#define SM_SECURE (44)
+#define SM_SHOWSOUNDS (70)
+#define SM_SLOWMACHINE (73)
+#define SM_SWAPBUTTON (23)
+#define ARW_BOTTOMLEFT (0L)
+#define ARW_BOTTOMRIGHT (0x1L)
+#define ARW_HIDE (0x8L)
+#define ARW_TOPLEFT (0x2L)
+#define ARW_TOPRIGHT (0x3L)
+#define ARW_DOWN (0x4L)
+#define ARW_LEFT (0L)
+#define ARW_RIGHT (0L)
+#define ARW_UP (0x4L)
+
+/* GetSystemPaletteUse */
+#define SYSPAL_NOSTATIC (2)
+#define SYSPAL_STATIC (1)
+#define SYSPAL_ERROR (0)
+
+/* GetTapeParameters, SetTapeParameters */
+#define GET_TAPE_MEDIA_INFORMATION (0)
+#define GET_TAPE_DRIVE_INFORMATION (1)
+#define SET_TAPE_MEDIA_INFORMATION (0)
+#define SET_TAPE_DRIVE_INFORMATION (1)
+
+/* GetTapePosition */
+#define TAPE_ABSOLUTE_POSITION (0L)
+#define TAPE_LOGICAL_POSITION (0x1L)
+
+/* GetTextAlign */
+#define TA_BASELINE (24)
+#define TA_BOTTOM (8)
+#define TA_TOP (0)
+#define TA_CENTER (6)
+#define TA_LEFT (0)
+#define TA_RIGHT (2)
+#define TA_RTLREADING (256)
+#define TA_NOUPDATECP (0)
+#define TA_UPDATECP (1)
+#define VTA_BASELINE (24)
+#define VTA_CENTER (6)
+
+/* GetThreadPriority */
+#define THREAD_PRIORITY_ABOVE_NORMAL (1)
+#define THREAD_PRIORITY_BELOW_NORMAL (-1)
+#define THREAD_PRIORITY_HIGHEST (2)
+#define THREAD_PRIORITY_IDLE (-15)
+#define THREAD_PRIORITY_LOWEST (-2)
+#define THREAD_PRIORITY_NORMAL (0)
+#define THREAD_PRIORITY_TIME_CRITICAL (15)
+#define THREAD_PRIORITY_ERROR_RETURN (2147483647)
+#define TLS_MINIMUM_AVAILABLE (64)
+
+/* GetTimeFormat */
+#define TIME_NOMINUTESORSECONDS (1)
+#define TIME_NOSECONDS (2)
+#define TIME_NOTIMEMARKER (4)
+#define TIME_FORCE24HOURFORMAT (8)
+
+/* GetTimeZoneInformation */
+#define TIME_ZONE_ID_INVALID ((DWORD) -1)
+#define TIME_ZONE_ID_UNKNOWN (0)
+#define TIME_ZONE_ID_STANDARD (1)
+#define TIME_ZONE_ID_DAYLIGHT (2)
+
+/* GetUserObjectInformation */
+#define UOI_FLAGS (1)
+#define UOI_NAME (2)
+#define UOI_TYPE (3)
+
+/* GetVolumeInformation */
+#define FS_CASE_IS_PRESERVED (2)
+#define FS_CASE_SENSITIVE (1)
+#define FS_UNICODE_STORED_ON_DISK (4)
+#define FS_PERSISTENT_ACLS (8)
+#define FS_FILE_COMPRESSION (16)
+#define FS_VOL_IS_COMPRESSED (32768)
+
+/* GetWindowLong */
+#define GWL_EXSTYLE (-20)
+#define GWL_STYLE (-16)
+#define GWL_WNDPROC (-4)
+#define GWL_HINSTANCE (-6)
+#define GWL_HWNDPARENT (-8)
+#define GWL_ID (-12)
+#define GWL_USERDATA (-21)
+#define DWL_DLGPROC (4)
+#define DWL_MSGRESULT (0)
+#define DWL_USER (8)
+
+/* GlobalAlloc, GlobalFlags */
+#define GMEM_FIXED (0)
+#define GMEM_MOVEABLE (2)
+#define GPTR (64)
+#define GHND (66)
+#define GMEM_DDESHARE (8192)
+#define GMEM_DISCARDABLE (256)
+#define GMEM_LOWER (4096)
+#define GMEM_NOCOMPACT (16)
+#define GMEM_NODISCARD (32)
+#define GMEM_NOT_BANKED (4096)
+#define GMEM_NOTIFY (16384)
+#define GMEM_SHARE (8192)
+#define GMEM_ZEROINIT (64)
+#define GMEM_DISCARDED (16384)
+#define GMEM_INVALID_HANDLE (32768)
+#define GMEM_LOCKCOUNT (255)
+
+/* HeapAlloc, HeapReAlloc */
+#define HEAP_GENERATE_EXCEPTIONS (4)
+#define HEAP_NO_SERIALIZE (1)
+#define HEAP_ZERO_MEMORY (8)
+#define STATUS_NO_MEMORY (0xc0000017L)
+#define STATUS_ACCESS_VIOLATION (0xc0000005L)
+#define HEAP_REALLOC_IN_PLACE_ONLY (16)
+
+/* ImageList_Create */
+#define ILC_COLOR (0)
+#define ILC_COLOR4 (4)
+#define ILC_COLOR8 (8)
+#define ILC_COLOR16 (16)
+#define ILC_COLOR24 (24)
+#define ILC_COLOR32 (32)
+#define ILC_COLORDDB (254)
+#define ILC_MASK (1)
+#define ILC_PALETTE (2048)
+
+/* ImageList_Draw, ImageList_DrawEx */
+#define ILD_BLEND25 (2)
+#define ILD_BLEND50 (4)
+#define ILD_SELECTED (4)
+#define ILD_BLEND (4)
+#define ILD_FOCUS (2)
+#define ILD_MASK (16)
+#define ILD_NORMAL (0)
+#define ILD_TRANSPARENT (1)
+#define CLR_NONE (0xffffffffL)
+#define CLR_DEFAULT (0xff000000L)
+
+/* ImageList_LoadImage */
+#define LR_DEFAULTCOLOR (0)
+#define LR_LOADFROMFILE (16)
+#define LR_LOADMAP3DCOLORS (4096)
+#define LR_LOADTRANSPARENT (32)
+#define LR_MONOCHROME (1)
+
+/* ImmConfigureIME */
+#define IME_CONFIG_GENERAL (1)
+#define IME_CONFIG_REGISTERWORD (2)
+#define IME_CONFIG_SELECTDICTIONARY (3)
+
+/* ImmGetConversionList */
+#define GCL_CONVERSION (1)
+#define GCL_REVERSECONVERSION (2)
+#define GCL_REVERSE_LENGTH (3)
+
+/* ImmGetGuideLine */
+#define GGL_LEVEL (1)
+#define GGL_INDEX (2)
+#define GGL_STRING (3)
+#define GGL_PRIVATE (4)
+#define GL_LEVEL_ERROR (2)
+#define GL_LEVEL_FATAL (1)
+#define GL_LEVEL_INFORMATION (4)
+#define GL_LEVEL_NOGUIDELINE (0)
+#define GL_LEVEL_WARNING (3)
+#define GL_ID_CANNOTSAVE (17)
+#define GL_ID_NOCONVERT (32)
+#define GL_ID_NODICTIONARY (16)
+#define GL_ID_NOMODULE (1)
+#define GL_ID_READINGCONFLICT (35)
+#define GL_ID_TOOMANYSTROKE (34)
+#define GL_ID_TYPINGERROR (33)
+#define GL_ID_UNKNOWN (0)
+#define GL_ID_INPUTREADING (36)
+#define GL_ID_INPUTRADICAL (37)
+#define GL_ID_INPUTCODE (38)
+#define GL_ID_CHOOSECANDIDATE (40)
+#define GL_ID_REVERSECONVERSION (41)
+
+/* ImmGetProperty */
+#define IGP_PROPERTY (4)
+#define IGP_CONVERSION (8)
+#define IGP_SENTENCE (12)
+#define IGP_UI (16)
+#define IGP_SETCOMPSTR (20)
+#define IGP_SELECT (24)
+#define IME_PROP_AT_CARET (65536)
+#define IME_PROP_SPECIAL_UI (131072)
+#define IME_PROP_CANDLIST_START_FROM_1 (262144)
+#define IME_PROP_UNICODE (524288)
+#define UI_CAP_2700 (1)
+#define UI_CAP_ROT90 (2)
+#define UI_CAP_ROTANY (4)
+#define SCS_CAP_COMPSTR (1)
+#define SCS_CAP_MAKEREAD (2)
+#define SELECT_CAP_CONVERSION (1)
+#define SELECT_CAP_SENTENCE (2)
+
+/* ImmNotifyIME */
+#define NI_CHANGECANDIDATELIST (19)
+#define NI_CLOSECANDIDATE (17)
+#define NI_COMPOSITIONSTR (21)
+#define NI_OPENCANDIDATE (16)
+#define NI_SELECTCANDIDATESTR (18)
+#define NI_SETCANDIDATE_PAGESIZE (23)
+#define NI_SETCANDIDATE_PAGESTART (22)
+#define CPS_CANCEL (4)
+#define CPS_COMPLETE (1)
+#define CPS_CONVERT (2)
+#define CPS_REVERT (3)
+
+/* ImmSetCompositionString */
+#define SCS_SETSTR (9)
+#define SCS_CHANGEATTR (18)
+#define SCS_CHANGECLAUSE (36)
+
+/* ImmUnregisterWord */
+#define IME_REGWORD_STYLE_EUDC (1)
+#define IME_REGWORD_STYLE_USER_FIRST 0x80000000
+#define IME_REGWORD_STYLE_USER_LAST (-1)
+
+/* InitializeSecurityDescriptor */
+#define SECURITY_DESCRIPTOR_REVISION (1)
+
+/* IsTextUnicode */
+#define IS_TEXT_UNICODE_ASCII16 (1)
+#define IS_TEXT_UNICODE_REVERSE_ASCII16 (16)
+#define IS_TEXT_UNICODE_STATISTICS (2)
+#define IS_TEXT_UNICODE_REVERSE_STATISTICS (32)
+#define IS_TEXT_UNICODE_CONTROLS (4)
+#define IS_TEXT_UNICODE_REVERSE_CONTROLS (64)
+#define IS_TEXT_UNICODE_SIGNATURE (8)
+#define IS_TEXT_UNICODE_REVERSE_SIGNATURE (128)
+#define IS_TEXT_UNICODE_ILLEGAL_CHARS (256)
+#define IS_TEXT_UNICODE_ODD_LENGTH (512)
+#define IS_TEXT_UNICODE_NULL_BYTES (4096)
+#define IS_TEXT_UNICODE_UNICODE_MASK (15)
+#define IS_TEXT_UNICODE_REVERSE_MASK (240)
+#define IS_TEXT_UNICODE_NOT_UNICODE_MASK (3840)
+#define IS_TEXT_UNICODE_NOT_ASCII_MASK (61440)
+
+/* JournalPlaybackProc, KeyboardProc */
+#define HC_GETNEXT (1)
+#define HC_SKIP (2)
+#define HC_SYSMODALOFF (5)
+#define HC_SYSMODALON (4)
+#define HC_NOREMOVE (3)
+
+/* keybd_event */
+#define KEYEVENTF_EXTENDEDKEY (1)
+#define KEYEVENTF_KEYUP (2)
+
+/* LoadBitmap */
+#define OBM_BTNCORNERS (32758)
+#define OBM_BTSIZE (32761)
+#define OBM_CHECK (32760)
+#define OBM_CHECKBOXES (32759)
+#define OBM_CLOSE (32754)
+#define OBM_COMBO (32738)
+#define OBM_DNARROW (32752)
+#define OBM_DNARROWD (32742)
+#define OBM_DNARROWI (32736)
+#define OBM_LFARROW (32750)
+#define OBM_LFARROWI (32734)
+#define OBM_LFARROWD (32740)
+#define OBM_MNARROW (32739)
+#define OBM_OLD_CLOSE (32767)
+#define OBM_OLD_DNARROW (32764)
+#define OBM_OLD_LFARROW (32762)
+#define OBM_OLD_REDUCE (32757)
+#define OBM_OLD_RESTORE (32755)
+#define OBM_OLD_RGARROW (32763)
+#define OBM_OLD_UPARROW (32765)
+#define OBM_OLD_ZOOM (32756)
+#define OBM_REDUCE (32749)
+#define OBM_REDUCED (32746)
+#define OBM_RESTORE (32747)
+#define OBM_RESTORED (32744)
+#define OBM_RGARROW (32751)
+#define OBM_RGARROWD (32741)
+#define OBM_RGARROWI (32735)
+#define OBM_SIZE (32766)
+#define OBM_UPARROW (32753)
+#define OBM_UPARROWD (32743)
+#define OBM_UPARROWI (32737)
+#define OBM_ZOOM (32748)
+#define OBM_ZOOMD (32745)
+
+/* LoadLibraryEx */
+#define DONT_RESOLVE_DLL_REFERENCES (1)
+#define LOAD_LIBRARY_AS_DATAFILE (2)
+#define LOAD_WITH_ALTERED_SEARCH_PATH (8)
+
+/* LocalAlloc, LocalFlags */
+#define LPTR (64)
+#define LHND (66)
+#define NONZEROLHND (2)
+#define NONZEROLPTR (0)
+#define LMEM_NONZEROLHND (2)
+#define LMEM_NONZEROLPTR (0)
+#define LMEM_FIXED (0)
+#define LMEM_MOVEABLE (2)
+#define LMEM_NOCOMPACT (16)
+#define LMEM_NODISCARD (32)
+#define LMEM_ZEROINIT (64)
+#define LMEM_MODIFY (128)
+#define LMEM_LOCKCOUNT (255)
+#define LMEM_DISCARDABLE (3840)
+#define LMEM_DISCARDED (16384)
+#define LMEM_INVALID_HANDLE (32768)
+
+/* LockFileEx */
+#define LOCKFILE_FAIL_IMMEDIATELY (1)
+#define LOCKFILE_EXCLUSIVE_LOCK (2)
+
+/* LogonUser */
+
+/* LZCopy, LZInit, LZRead */
+
+/* MessageBeep, MessageBox */
+#define MB_USERICON (0x80L)
+#define MB_ICONASTERISK (0x40L)
+#define MB_ICONEXCLAMATION (0x30L)
+#define MB_ICONWARNING (0x30L)
+#define MB_ICONERROR (0x10L)
+#define MB_ICONHAND (0x10L)
+#define MB_ICONQUESTION (0x20L)
+#define MB_OK (0L)
+#define MB_ABORTRETRYIGNORE (0x2L)
+#define MB_APPLMODAL (0L)
+#define MB_DEFAULT_DESKTOP_ONLY (0x20000L)
+#define MB_HELP (0x4000L)
+#define MB_RIGHT (0x80000L)
+#define MB_RTLREADING (0x100000L)
+#define MB_TOPMOST (0x40000L)
+#define MB_DEFBUTTON1 (0L)
+#define MB_DEFBUTTON2 (0x100L)
+#define MB_DEFBUTTON3 (0x200L)
+#define MB_DEFBUTTON4 (0x300L)
+#define MB_ICONINFORMATION (0x40L)
+#define MB_ICONSTOP (0x10L)
+#define MB_OKCANCEL (0x1L)
+#define MB_RETRYCANCEL (0x5L)
+#define MB_SERVICE_NOTIFICATION (0x40000L)
+#define MB_SETFOREGROUND (0x10000L)
+#define MB_SYSTEMMODAL (0x1000L)
+#define MB_TASKMODAL (0x2000L)
+#define MB_YESNO (0x4L)
+#define MB_YESNOCANCEL (0x3L)
+#define IDABORT (3)
+#define IDCANCEL (2)
+#define IDCLOSE (8)
+#define IDHELP (9)
+#define IDIGNORE (5)
+#define IDNO (7)
+#define IDOK (1)
+#define IDRETRY (4)
+#define IDYES (6)
+
+/* MessageProc */
+#define MSGF_DIALOGBOX (0)
+#define MSGF_MENU (2)
+#define MSGF_NEXTWINDOW (6)
+#define MSGF_SCROLLBAR (5)
+#define MSGF_MAINLOOP (8)
+#define MSGF_USER (4096)
+
+/* ModifyWorldTransform */
+#define MWT_IDENTITY (1)
+#define MWT_LEFTMULTIPLY (2)
+#define MWT_RIGHTMULTIPLY (3)
+
+/* mouse_event */
+#define MOUSEEVENTF_ABSOLUTE (32768)
+#define MOUSEEVENTF_MOVE (1)
+#define MOUSEEVENTF_LEFTDOWN (2)
+#define MOUSEEVENTF_LEFTUP (4)
+#define MOUSEEVENTF_RIGHTDOWN (8)
+#define MOUSEEVENTF_RIGHTUP (16)
+#define MOUSEEVENTF_MIDDLEDOWN (32)
+#define MOUSEEVENTF_MIDDLEUP (64)
+
+/* MoveFileEx */
+#define MOVEFILE_REPLACE_EXISTING (1)
+#define MOVEFILE_COPY_ALLOWED (2)
+#define MOVEFILE_DELAY_UNTIL_REBOOT (4)
+
+/* MsgWaitForMultipleObjects, WaitForMultipleObjectsEx */
+#define WAIT_OBJECT_0 (0L)
+#define WAIT_ABANDONED_0 (0x80L)
+#define WAIT_TIMEOUT (0x102L)
+#define WAIT_IO_COMPLETION (0xc0L)
+#define WAIT_ABANDONED (0x80L)
+#define WAIT_FAILED (0xffffffffL)
+#define MAXIMUM_WAIT_OBJECTS (0x40)
+#define MAXIMUM_SUSPEND_COUNT (0x7f)
+
+/* MultiByteToWideChar */
+#define MB_PRECOMPOSED (1)
+#define MB_COMPOSITE (2)
+#define MB_ERR_INVALID_CHARS (8)
+#define MB_USEGLYPHCHARS (4)
+
+/* NDdeSetTrustedShare */
+
+/* NetAccessCheck */
+
+/* NetServerEnum */
+
+/* NetServiceControl */
+
+/* NetUserEnum */
+
+/* OpenProcessToken */
+#define TOKEN_ADJUST_DEFAULT (128)
+#define TOKEN_ADJUST_GROUPS (64)
+#define TOKEN_ADJUST_PRIVILEGES (32)
+#define TOKEN_ALL_ACCESS (0xf00ffL)
+#define TOKEN_ASSIGN_PRIMARY (1)
+#define TOKEN_DUPLICATE (2)
+#define TOKEN_EXECUTE (0x20000L)
+#define TOKEN_IMPERSONATE (4)
+#define TOKEN_QUERY (8)
+#define TOKEN_QUERY_SOURCE (16)
+#define TOKEN_READ (0x20008L)
+#define TOKEN_WRITE (0x200e0L)
+
+/* 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)
+
+/* PostMessage */
+#define HWND_BROADCAST ((HWND)0xFFFF)
+
+/* PrepareTape */
+#define TAPE_FORMAT (0x5L)
+#define TAPE_LOAD (0L)
+#define TAPE_LOCK (0x3L)
+#define TAPE_TENSION (0x2L)
+#define TAPE_UNLOAD (0x1L)
+#define TAPE_UNLOCK (0x4L)
+
+/* PropertySheet */
+#define IS_PSREBOOTSYSTEM (3)
+#define IS_PSRESTARTWINDOWS (2)
+
+/* PropSheetPageProc */
+#define PSPCB_CREATE (2)
+#define PSPCB_RELEASE (1)
+
+/* PurgeComm */
+#define PURGE_TXABORT (1)
+#define PURGE_RXABORT (2)
+#define PURGE_TXCLEAR (4)
+#define PURGE_RXCLEAR (8)
+
+/* QueryServiceObjectSecurity */
+#define OWNER_SECURITY_INFORMATION (0x1L)
+#define GROUP_SECURITY_INFORMATION (0x2L)
+#define DACL_SECURITY_INFORMATION (0x4L)
+#define SACL_SECURITY_INFORMATION (0x8L)
+
+/* ReadEventLog, ReportEvent */
+#define EVENTLOG_FORWARDS_READ (4)
+#define EVENTLOG_BACKWARDS_READ (8)
+#define EVENTLOG_SEEK_READ (2)
+#define EVENTLOG_SEQUENTIAL_READ (1)
+#define EVENTLOG_ERROR_TYPE (1)
+#define EVENTLOG_WARNING_TYPE (2)
+#define EVENTLOG_INFORMATION_TYPE (4)
+#define EVENTLOG_AUDIT_SUCCESS (8)
+#define EVENTLOG_AUDIT_FAILURE (16)
+
+/* RedrawWindow */
+#define RDW_ERASE (4)
+#define RDW_FRAME (1024)
+#define RDW_INTERNALPAINT (2)
+#define RDW_INVALIDATE (1)
+#define RDW_NOERASE (32)
+#define RDW_NOFRAME (2048)
+#define RDW_NOINTERNALPAINT (16)
+#define RDW_VALIDATE (8)
+#define RDW_ERASENOW (512)
+#define RDW_UPDATENOW (256)
+#define RDW_ALLCHILDREN (128)
+#define RDW_NOCHILDREN (64)
+
+/* RegCreateKey */
+#define HKEY_CLASSES_ROOT ((HKEY)0x80000000)
+#define HKEY_CURRENT_USER ((HKEY)0x80000001)
+#define HKEY_LOCAL_MACHINE ((HKEY)0x80000002)
+#define HKEY_USERS ((HKEY)0x80000003)
+#define HKEY_PERFORMANCE_DATA ((HKEY)0x80000004)
+#define HKEY_CURRENT_CONFIG ((HKEY)0x80000005)
+#define HKEY_DYN_DATA ((HKEY)0x00000006)
+
+/* RegCreateKeyEx */
+#define REG_OPTION_VOLATILE (0x1L)
+#define REG_OPTION_NON_VOLATILE (0L)
+#define REG_CREATED_NEW_KEY (0x1L)
+#define REG_OPENED_EXISTING_KEY (0x2L)
+
+/* RegEnumValue */
+#define REG_BINARY (3)
+#define REG_DWORD (4)
+#define REG_DWORD_LITTLE_ENDIAN (4)
+#define REG_DWORD_BIG_ENDIAN (5)
+#define REG_EXPAND_SZ (2)
+#define REG_FULL_RESOURCE_DESCRIPTOR (9)
+#define REG_LINK (6)
+#define REG_MULTI_SZ (7)
+#define REG_NONE (0)
+#define REG_RESOURCE_LIST (8)
+#define REG_RESOURCE_REQUIREMENTS_LIST (10)
+#define REG_SZ (1)
+
+/* RegisterHotKey */
+#define MOD_ALT (1)
+#define MOD_CONTROL (2)
+#define MOD_SHIFT (4)
+#define MOD_WIN (8)
+#define IDHOT_SNAPDESKTOP (-2)
+#define IDHOT_SNAPWINDOW (-1)
+
+/* RegNotifyChangeKeyValue */
+#define REG_NOTIFY_CHANGE_NAME (0x1L)
+#define REG_NOTIFY_CHANGE_ATTRIBUTES (0x2L)
+#define REG_NOTIFY_CHANGE_LAST_SET (0x4L)
+#define REG_NOTIFY_CHANGE_SECURITY (0x8L)
+
+/* ScrollWindowEx */
+#define SW_ERASE (4)
+#define SW_INVALIDATE (2)
+#define SW_SCROLLCHILDREN (1)
+
+/* SendMessageTimeout */
+#define SMTO_ABORTIFHUNG (2)
+#define SMTO_BLOCK (1)
+#define SMTO_NORMAL (0)
+
+/* SetBkMode */
+#define OPAQUE (2)
+#define TRANSPARENT (1)
+
+/* SetDebugErrorLevel */
+#define SLE_ERROR (1)
+#define SLE_MINORERROR (2)
+#define SLE_WARNING (3)
+
+/* SetErrorMode */
+#define SEM_FAILCRITICALERRORS (1)
+#define SEM_NOALIGNMENTFAULTEXCEPT (4)
+#define SEM_NOGPFAULTERRORBOX (2)
+#define SEM_NOOPENFILEERRORBOX (32768)
+
+/* SetICMMode */
+#define ICM_ON (2)
+#define ICM_OFF (1)
+#define ICM_QUERY (3)
+
+/* SetJob */
+
+/* Locale Information */
+#define LOCALE_ILANGUAGE (1)
+#define LOCALE_SLANGUAGE (2)
+#define LOCALE_SENGLANGUAGE (4097)
+#define LOCALE_SABBREVLANGNAME (3)
+#define LOCALE_SNATIVELANGNAME (4)
+#define LOCALE_ICOUNTRY (5)
+#define LOCALE_SCOUNTRY (6)
+#define LOCALE_SENGCOUNTRY (4098)
+#define LOCALE_SABBREVCTRYNAME (7)
+#define LOCALE_SNATIVECTRYNAME (8)
+#define LOCALE_IDEFAULTLANGUAGE (9)
+#define LOCALE_IDEFAULTCOUNTRY (10)
+#define LOCALE_IDEFAULTANSICODEPAGE (4100)
+#define LOCALE_IDEFAULTCODEPAGE (11)
+#define LOCALE_SLIST (12)
+#define LOCALE_IMEASURE (13)
+#define LOCALE_SDECIMAL (14)
+#define LOCALE_STHOUSAND (15)
+#define LOCALE_SGROUPING (16)
+#define LOCALE_IDIGITS (17)
+#define LOCALE_ILZERO (18)
+#define LOCALE_INEGNUMBER (4112)
+#define LOCALE_SCURRENCY (20)
+#define LOCALE_SMONDECIMALSEP (22)
+#define LOCALE_SMONTHOUSANDSEP (23)
+#define LOCALE_SMONGROUPING (24)
+#define LOCALE_ICURRDIGITS (25)
+#define LOCALE_ICURRENCY (27)
+#define LOCALE_INEGCURR (28)
+#define LOCALE_SDATE (29)
+#define LOCALE_STIME (30)
+#define LOCALE_STIMEFORMAT (4099)
+#define LOCALE_SSHORTDATE (31)
+#define LOCALE_SLONGDATE (32)
+#define LOCALE_IDATE (33)
+#define LOCALE_ILDATE (34)
+#define LOCALE_ITIME (35)
+#define LOCALE_ITLZERO (37)
+#define LOCALE_IDAYLZERO (38)
+#define LOCALE_IMONLZERO (39)
+#define LOCALE_S1159 (40)
+#define LOCALE_S2359 (41)
+#define LOCALE_ICALENDARTYPE (4105)
+#define LOCALE_IOPTIONALCALENDAR (4107)
+#define LOCALE_IFIRSTDAYOFWEEK (4108)
+#define LOCALE_IFIRSTWEEKOFYEAR (4109)
+#define LOCALE_SDAYNAME1 (42)
+#define LOCALE_SDAYNAME2 (43)
+#define LOCALE_SDAYNAME3 (44)
+#define LOCALE_SDAYNAME4 (45)
+#define LOCALE_SDAYNAME5 (46)
+#define LOCALE_SDAYNAME6 (47)
+#define LOCALE_SDAYNAME7 (48)
+#define LOCALE_SABBREVDAYNAME1 (49)
+#define LOCALE_SABBREVDAYNAME2 (50)
+#define LOCALE_SABBREVDAYNAME3 (51)
+#define LOCALE_SABBREVDAYNAME4 (52)
+#define LOCALE_SABBREVDAYNAME5 (53)
+#define LOCALE_SABBREVDAYNAME6 (54)
+#define LOCALE_SABBREVDAYNAME7 (55)
+#define LOCALE_SMONTHNAME1 (56)
+#define LOCALE_SMONTHNAME2 (57)
+#define LOCALE_SMONTHNAME3 (58)
+#define LOCALE_SMONTHNAME4 (59)
+#define LOCALE_SMONTHNAME5 (60)
+#define LOCALE_SMONTHNAME6 (61)
+#define LOCALE_SMONTHNAME7 (62)
+#define LOCALE_SMONTHNAME8 (63)
+#define LOCALE_SMONTHNAME9 (64)
+#define LOCALE_SMONTHNAME10 (65)
+#define LOCALE_SMONTHNAME11 (66)
+#define LOCALE_SMONTHNAME12 (67)
+#define LOCALE_SMONTHNAME13 (4110)
+#define LOCALE_SABBREVMONTHNAME1 (68)
+#define LOCALE_SABBREVMONTHNAME2 (69)
+#define LOCALE_SABBREVMONTHNAME3 (70)
+#define LOCALE_SABBREVMONTHNAME4 (71)
+#define LOCALE_SABBREVMONTHNAME5 (72)
+#define LOCALE_SABBREVMONTHNAME6 (73)
+#define LOCALE_SABBREVMONTHNAME7 (74)
+#define LOCALE_SABBREVMONTHNAME8 (75)
+#define LOCALE_SABBREVMONTHNAME9 (76)
+#define LOCALE_SABBREVMONTHNAME10 (77)
+#define LOCALE_SABBREVMONTHNAME11 (78)
+#define LOCALE_SABBREVMONTHNAME12 (79)
+#define LOCALE_SABBREVMONTHNAME13 (4111)
+#define LOCALE_SPOSITIVESIGN (80)
+#define LOCALE_SNEGATIVESIGN (81)
+#define LOCALE_IPOSSIGNPOSN (82)
+#define LOCALE_INEGSIGNPOSN (83)
+#define LOCALE_IPOSSYMPRECEDES (84)
+#define LOCALE_IPOSSEPBYSPACE (85)
+#define LOCALE_INEGSYMPRECEDES (86)
+#define LOCALE_INEGSEPBYSPACE (87)
+#define LOCALE_NOUSEROVERRIDE (0x80000000)
+
+/* Calendar Type Information */
+#define CAL_ICALINTVALUE (1)
+#define CAL_IYEAROFFSETRANGE (3)
+#define CAL_SABBREVDAYNAME1 (14)
+#define CAL_SABBREVDAYNAME2 (15)
+#define CAL_SABBREVDAYNAME3 (16)
+#define CAL_SABBREVDAYNAME4 (17)
+#define CAL_SABBREVDAYNAME5 (18)
+#define CAL_SABBREVDAYNAME6 (19)
+#define CAL_SABBREVDAYNAME7 (20)
+#define CAL_SABBREVMONTHNAME1 (34)
+#define CAL_SABBREVMONTHNAME2 (35)
+#define CAL_SABBREVMONTHNAME3 (36)
+#define CAL_SABBREVMONTHNAME4 (37)
+#define CAL_SABBREVMONTHNAME5 (38)
+#define CAL_SABBREVMONTHNAME6 (39)
+#define CAL_SABBREVMONTHNAME7 (40)
+#define CAL_SABBREVMONTHNAME8 (41)
+#define CAL_SABBREVMONTHNAME9 (42)
+#define CAL_SABBREVMONTHNAME10 (43)
+#define CAL_SABBREVMONTHNAME11 (44)
+#define CAL_SABBREVMONTHNAME12 (45)
+#define CAL_SABBREVMONTHNAME13 (46)
+#define CAL_SCALNAME (2)
+#define CAL_SDAYNAME1 (7)
+#define CAL_SDAYNAME2 (8)
+#define CAL_SDAYNAME3 (9)
+#define CAL_SDAYNAME4 (10)
+#define CAL_SDAYNAME5 (11)
+#define CAL_SDAYNAME6 (12)
+#define CAL_SDAYNAME7 (13)
+#define CAL_SERASTRING (4)
+#define CAL_SLONGDATE (6)
+#define CAL_SMONTHNAME1 (21)
+#define CAL_SMONTHNAME2 (22)
+#define CAL_SMONTHNAME3 (23)
+#define CAL_SMONTHNAME4 (24)
+#define CAL_SMONTHNAME5 (25)
+#define CAL_SMONTHNAME6 (26)
+#define CAL_SMONTHNAME7 (27)
+#define CAL_SMONTHNAME8 (28)
+#define CAL_SMONTHNAME9 (29)
+#define CAL_SMONTHNAME10 (30)
+#define CAL_SMONTHNAME11 (31)
+#define CAL_SMONTHNAME12 (32)
+#define CAL_SMONTHNAME13 (33)
+#define CAL_SSHORTDATE (5)
+
+/* SetProcessWorkingSetSize */
+#define PROCESS_SET_QUOTA (256)
+
+/* SetPrinter */
+
+/* SetService */
+
+/* SetStretchBltMode */
+#define BLACKONWHITE (1)
+#define COLORONCOLOR (3)
+#define HALFTONE (4)
+#define STRETCH_ANDSCANS (1)
+#define STRETCH_DELETESCANS (3)
+#define STRETCH_HALFTONE (4)
+#define STRETCH_ORSCANS (2)
+#define WHITEONBLACK (2)
+
+/* SetSystemCursor */
+#define OCR_NORMAL (32512)
+#define OCR_IBEAM (32513)
+#define OCR_WAIT (32514)
+#define OCR_CROSS (32515)
+#define OCR_UP (32516)
+#define OCR_SIZE (32640)
+#define OCR_ICON (32641)
+#define OCR_SIZENWSE (32642)
+#define OCR_SIZENESW (32643)
+#define OCR_SIZEWE (32644)
+#define OCR_SIZENS (32645)
+#define OCR_SIZEALL (32646)
+#define OCR_NO (32648)
+#define OCR_APPSTARTING (32650)
+
+/* SetTapePosition */
+#define TAPE_ABSOLUTE_BLOCK (0x1L)
+#define TAPE_LOGICAL_BLOCK (0x2L)
+#define TAPE_REWIND (0L)
+#define TAPE_SPACE_END_OF_DATA (0x4L)
+#define TAPE_SPACE_FILEMARKS (0x6L)
+#define TAPE_SPACE_RELATIVE_BLOCKS (0x5L)
+#define TAPE_SPACE_SEQUENTIAL_FMKS (0x7L)
+#define TAPE_SPACE_SEQUENTIAL_SMKS (0x9L)
+#define TAPE_SPACE_SETMARKS (0x8L)
+
+/* SetUnhandledExceptionFilter */
+#define EXCEPTION_EXECUTE_HANDLER (1)
+#define EXCEPTION_CONTINUE_EXECUTION (-1)
+#define EXCEPTION_CONTINUE_SEARCH (0)
+
+/* SetWindowPos, DeferWindowPos */
+#define HWND_BOTTOM ((HWND)1)
+#define HWND_NOTOPMOST ((HWND)-2)
+#define HWND_TOP ((HWND)0)
+#define HWND_TOPMOST ((HWND)-1)
+#define SWP_DRAWFRAME (32)
+#define SWP_FRAMECHANGED (32)
+#define SWP_HIDEWINDOW (128)
+#define SWP_NOACTIVATE (16)
+#define SWP_NOCOPYBITS (256)
+#define SWP_NOMOVE (2)
+#define SWP_NOSIZE (1)
+#define SWP_NOREDRAW (8)
+#define SWP_NOZORDER (4)
+#define SWP_SHOWWINDOW (64)
+#define SWP_NOOWNERZORDER (512)
+#define SWP_NOREPOSITION (512)
+#define SWP_NOSENDCHANGING (1024)
+
+/* SHAddToRecentDocs */
+
+/* SHAppBarMessage */
+
+/* SHChangeNotify */
+
+/* ShellProc */
+#define HSHELL_ACTIVATESHELLWINDOW (3)
+#define HSHELL_GETMINRECT (5)
+#define HSHELL_LANGUAGE (8)
+#define HSHELL_REDRAW (6)
+#define HSHELL_TASKMAN (7)
+#define HSHELL_WINDOWACTIVATED (4)
+#define HSHELL_WINDOWCREATED (1)
+#define HSHELL_WINDOWDESTROYED (2)
+
+/* SHGetFileInfo */
+
+/* SHGetSpecialFolderLocation */
+
+/* ShowWindow */
+#define SW_HIDE (0)
+#define SW_MAXIMIZE (3)
+#define SW_MINIMIZE (6)
+#define SW_NORMAL (1)
+#define SW_RESTORE (9)
+#define SW_SHOW (5)
+#define SW_SHOWDEFAULT (10)
+#define SW_SHOWMAXIMIZED (3)
+#define SW_SHOWMINIMIZED (2)
+#define SW_SHOWMINNOACTIVE (7)
+#define SW_SHOWNA (8)
+#define SW_SHOWNOACTIVATE (4)
+#define SW_SHOWNORMAL (1)
+#define WPF_RESTORETOMAXIMIZED (2)
+#define WPF_SETMINPOSITION (1)
+
+/* Sleep */
+#define INFINITE 0xFFFFFFFF
+
+/* SystemParametersInfo */
+#define SPI_GETACCESSTIMEOUT (60)
+#define SPI_GETANIMATION (72)
+#define SPI_GETBEEP (1)
+#define SPI_GETBORDER (5)
+#define SPI_GETDEFAULTINPUTLANG (89)
+#define SPI_GETDRAGFULLWINDOWS (38)
+#define SPI_GETFASTTASKSWITCH (35)
+#define SPI_GETFILTERKEYS (50)
+#define SPI_GETFONTSMOOTHING (74)
+#define SPI_GETGRIDGRANULARITY (18)
+#define SPI_GETHIGHCONTRAST (66)
+#define SPI_GETICONMETRICS (45)
+#define SPI_GETICONTITLELOGFONT (31)
+#define SPI_GETICONTITLEWRAP (25)
+#define SPI_GETKEYBOARDDELAY (22)
+#define SPI_GETKEYBOARDPREF (68)
+#define SPI_GETKEYBOARDSPEED (10)
+#define SPI_GETLOWPOWERACTIVE (83)
+#define SPI_GETLOWPOWERTIMEOUT (79)
+#define SPI_GETMENUDROPALIGNMENT (27)
+#define SPI_GETMINIMIZEDMETRICS (43)
+#define SPI_GETMOUSE (3)
+#define SPI_GETMOUSEKEYS (54)
+#define SPI_GETMOUSETRAILS (94)
+#define SPI_GETNONCLIENTMETRICS (41)
+#define SPI_GETPOWEROFFACTIVE (84)
+#define SPI_GETPOWEROFFTIMEOUT (80)
+#define SPI_GETSCREENREADER (70)
+#define SPI_GETSCREENSAVEACTIVE (16)
+#define SPI_GETSCREENSAVETIMEOUT (14)
+#define SPI_GETSERIALKEYS (62)
+#define SPI_GETSHOWSOUNDS (56)
+#define SPI_GETSOUNDSENTRY (64)
+#define SPI_GETSTICKYKEYS (58)
+#define SPI_GETTOGGLEKEYS (52)
+#define SPI_GETWINDOWSEXTENSION (92)
+#define SPI_GETWORKAREA (48)
+#define SPI_ICONHORIZONTALSPACING (13)
+#define SPI_ICONVERTICALSPACING (24)
+#define SPI_LANGDRIVER (12)
+#define SPI_SCREENSAVERRUNNING (97)
+#define SPI_SETACCESSTIMEOUT (61)
+#define SPI_SETANIMATION (73)
+#define SPI_SETBEEP (2)
+#define SPI_SETBORDER (6)
+#define SPI_SETDEFAULTINPUTLANG (90)
+#define SPI_SETDESKPATTERN (21)
+#define SPI_SETDESKWALLPAPER (20)
+#define SPI_SETDOUBLECLICKTIME (32)
+#define SPI_SETDOUBLECLKHEIGHT (30)
+#define SPI_SETDOUBLECLKWIDTH (29)
+#define SPI_SETDRAGFULLWINDOWS (37)
+#define SPI_SETDRAGHEIGHT (77)
+#define SPI_SETDRAGWIDTH (76)
+#define SPI_SETFASTTASKSWITCH (36)
+#define SPI_SETFILTERKEYS (51)
+#define SPI_SETFONTSMOOTHING (75)
+#define SPI_SETGRIDGRANULARITY (19)
+#define SPI_SETHANDHELD (78)
+#define SPI_SETHIGHCONTRAST (67)
+#define SPI_SETICONMETRICS (46)
+#define SPI_SETICONTITLELOGFONT (34)
+#define SPI_SETICONTITLEWRAP (26)
+#define SPI_SETKEYBOARDDELAY (23)
+#define SPI_SETKEYBOARDPREF (69)
+#define SPI_SETKEYBOARDSPEED (11)
+#define SPI_SETLANGTOGGLE (91)
+#define SPI_SETLOWPOWERACTIVE (85)
+#define SPI_SETLOWPOWERTIMEOUT (81)
+#define SPI_SETMENUDROPALIGNMENT (28)
+#define SPI_SETMINIMIZEDMETRICS (44)
+#define SPI_SETMOUSE (4)
+#define SPI_SETMOUSEBUTTONSWAP (33)
+#define SPI_SETMOUSEKEYS (55)
+#define SPI_SETMOUSETRAILS (93)
+#define SPI_SETNONCLIENTMETRICS (42)
+#define SPI_SETPENWINDOWS (49)
+#define SPI_SETPOWEROFFACTIVE (86)
+#define SPI_SETPOWEROFFTIMEOUT (82)
+#define SPI_SETSCREENREADER (71)
+#define SPI_SETSCREENSAVEACTIVE (17)
+#define SPI_SETSCREENSAVETIMEOUT (15)
+#define SPI_SETSERIALKEYS (63)
+#define SPI_SETSHOWSOUNDS (57)
+#define SPI_SETSOUNDSENTRY (65)
+#define SPI_SETSTICKYKEYS (59)
+#define SPI_SETTOGGLEKEYS (53)
+#define SPI_SETWORKAREA (47)
+#define SPIF_UPDATEINIFILE (1)
+#define SPIF_SENDWININICHANGE (2)
+#define SPIF_SENDCHANGE (2)
+
+/* TrackPopupMenu, TrackPopMenuEx */
+#define TPM_CENTERALIGN (0x4L)
+#define TPM_LEFTALIGN (0L)
+#define TPM_RIGHTALIGN (0x8L)
+#define TPM_LEFTBUTTON (0L)
+#define TPM_RIGHTBUTTON (0x2L)
+#define TPM_HORIZONTAL (0L)
+#define TPM_VERTICAL (0x40L)
+
+/* TranslateCharsetInfo */
+#define TCI_SRCCHARSET (1)
+#define TCI_SRCCODEPAGE (2)
+#define TCI_SRCFONTSIG (3)
+
+/* VerFindFile */
+#define VFFF_ISSHAREDFILE (1)
+#define VFF_CURNEDEST (1)
+#define VFF_FILEINUSE (2)
+#define VFF_BUFFTOOSMALL (4)
+
+/* VerInstallFile */
+#define VIFF_FORCEINSTALL (1)
+#define VIFF_DONTDELETEOLD (2)
+#define VIF_TEMPFILE (0x1L)
+#define VIF_MISMATCH (0x2L)
+#define VIF_SRCOLD (0x4L)
+#define VIF_DIFFLANG (0x8L)
+#define VIF_DIFFCODEPG (0x10L)
+#define VIF_DIFFTYPE (0x20L)
+#define VIF_WRITEPROT (0x40L)
+#define VIF_FILEINUSE (0x80L)
+#define VIF_OUTOFSPACE (0x100L)
+#define VIF_ACCESSVIOLATION (0x200L)
+#define VIF_SHARINGVIOLATION (0x400L)
+#define VIF_CANNOTCREATE (0x800L)
+#define VIF_CANNOTDELETE (0x1000L)
+#define VIF_CANNOTDELETECUR (0x4000L)
+#define VIF_CANNOTRENAME (0x2000L)
+#define VIF_OUTOFMEMORY (0x8000L)
+#define VIF_CANNOTREADSRC (0x10000L)
+#define VIF_CANNOTREADDST (0x20000L)
+#define VIF_BUFFTOOSMALL (0x40000L)
+
+/* WideCharToMultiByte */
+#define WC_COMPOSITECHECK (512)
+#define WC_DISCARDNS (16)
+#define WC_SEPCHARS (32)
+#define WC_DEFAULTCHAR (64)
+
+/* WinHelp */
+#define HELP_COMMAND (0x102L)
+#define HELP_CONTENTS (0x3L)
+#define HELP_CONTEXT (0x1L)
+#define HELP_CONTEXTPOPUP (0x8L)
+#define HELP_FORCEFILE (0x9L)
+#define HELP_HELPONHELP (0x4L)
+#define HELP_INDEX (0x3L)
+#define HELP_KEY (0x101L)
+#define HELP_MULTIKEY (0x201L)
+#define HELP_PARTIALKEY (0x105L)
+#define HELP_QUIT (0x2L)
+#define HELP_SETCONTENTS (0x5L)
+#define HELP_SETINDEX (0x5L)
+#define HELP_CONTEXTMENU (0xa)
+#define HELP_FINDER (0xb)
+#define HELP_WM_HELP (0xc)
+#define HELP_TCARD (0x8000)
+#define HELP_TCARD_DATA (0x10)
+#define HELP_TCARD_OTHER_CALLER (0x11)
+
+/* WNetAddConnectino2 */
+#define CONNECT_UPDATE_PROFILE (1)
+
+/* WNetConnectionDialog, WNetDisconnectDialog, WNetOpenEnum */
+#define RESOURCETYPE_DISK (1)
+#define RESOURCETYPE_PRINT (2)
+#define RESOURCETYPE_ANY (0)
+#define RESOURCE_CONNECTED (1)
+#define RESOURCE_GLOBALNET (2)
+#define RESOURCE_REMEMBERED (3)
+#define RESOURCEUSAGE_CONNECTABLE (1)
+#define RESOURCEUSAGE_CONTAINER (2)
+
+/* WNetGetResourceInformation, WNetGetResourceParent */
+#define WN_BAD_NETNAME (0x43L)
+#define WN_EXTENDED_ERROR (0x4b8L)
+#define WN_MORE_DATA (0xeaL)
+#define WN_NO_NETWORK (0x4c6L)
+#define WN_SUCCESS (0L)
+#define WN_ACCESS_DENIED (0x5L)
+#define WN_BAD_PROVIDER (0x4b4L)
+#define WN_NOT_AUTHENTICATED (0x4dcL)
+
+/* WNetGetUniversalName */
+#define UNIVERSAL_NAME_INFO_LEVEL (1)
+#define REMOTE_NAME_INFO_LEVEL (2)
+
+/* GetExitCodeThread */
+#define STILL_ACTIVE (0x103L)
+
+/* COMMPROP structure */
+#define SP_SERIALCOMM (0x1L)
+#define BAUD_075 (0x1L)
+#define BAUD_110 (0x2L)
+#define BAUD_134_5 (0x4L)
+#define BAUD_150 (0x8L)
+#define BAUD_300 (0x10L)
+#define BAUD_600 (0x20L)
+#define BAUD_1200 (0x40L)
+#define BAUD_1800 (0x80L)
+#define BAUD_2400 (0x100L)
+#define BAUD_4800 (0x200L)
+#define BAUD_7200 (0x400L)
+#define BAUD_9600 (0x800L)
+#define BAUD_14400 (0x1000L)
+#define BAUD_19200 (0x2000L)
+#define BAUD_38400 (0x4000L)
+#define BAUD_56K (0x8000L)
+#define BAUD_57600 (0x40000L)
+#define BAUD_115200 (0x20000L)
+#define BAUD_128K (0x10000L)
+#define BAUD_USER (0x10000000L)
+#define PST_FAX (0x21L)
+#define PST_LAT (0x101L)
+#define PST_MODEM (0x6L)
+#define PST_NETWORK_BRIDGE (0x100L)
+#define PST_PARALLELPORT (0x2L)
+#define PST_RS232 (0x1L)
+#define PST_RS422 (0x3L)
+#define PST_RS423 (0x4L)
+#define PST_RS449 (0x5L)
+#define PST_SCANNER (0x22L)
+#define PST_TCPIP_TELNET (0x102L)
+#define PST_UNSPECIFIED (0L)
+#define PST_X25 (0x103L)
+#define PCF_16BITMODE (0x200L)
+#define PCF_DTRDSR (0x1L)
+#define PCF_INTTIMEOUTS (0x80L)
+#define PCF_PARITY_CHECK (0x8L)
+#define PCF_RLSD (0x4L)
+#define PCF_RTSCTS (0x2L)
+#define PCF_SETXCHAR (0x20L)
+#define PCF_SPECIALCHARS (0x100L)
+#define PCF_TOTALTIMEOUTS (0x40L)
+#define PCF_XONXOFF (0x10L)
+#define SP_BAUD (0x2L)
+#define SP_DATABITS (0x4L)
+#define SP_HANDSHAKING (0x10L)
+#define SP_PARITY (0x1L)
+#define SP_PARITY_CHECK (0x20L)
+#define SP_RLSD (0x40L)
+#define SP_STOPBITS (0x8L)
+#define DATABITS_5 (1)
+#define DATABITS_6 (2)
+#define DATABITS_7 (4)
+#define DATABITS_8 (8)
+#define DATABITS_16 (16)
+#define DATABITS_16X (32)
+#define STOPBITS_10 (1)
+#define STOPBITS_15 (2)
+#define STOPBITS_20 (4)
+#define PARITY_NONE (256)
+#define PARITY_ODD (512)
+#define PARITY_EVEN (1024)
+#define PARITY_MARK (2048)
+#define PARITY_SPACE (4096)
+#define COMMPROP_INITIALIZED (0xe73cf52eL)
+
+/* DCB structure */
+#define CBR_110 (110)
+#define CBR_300 (300)
+#define CBR_600 (600)
+#define CBR_1200 (1200)
+#define CBR_2400 (2400)
+#define CBR_4800 (4800)
+#define CBR_9600 (9600)
+#define CBR_14400 (14400)
+#define CBR_19200 (19200)
+#define CBR_38400 (38400)
+#define CBR_56000 (56000)
+#define CBR_57600 (57600)
+#define CBR_115200 (115200)
+#define CBR_128000 (128000)
+#define CBR_256000 (256000)
+#define DTR_CONTROL_DISABLE (0)
+#define DTR_CONTROL_ENABLE (1)
+#define DTR_CONTROL_HANDSHAKE (2)
+#define RTS_CONTROL_DISABLE (0)
+#define RTS_CONTROL_ENABLE (1)
+#define RTS_CONTROL_HANDSHAKE (2)
+#define RTS_CONTROL_TOGGLE (3)
+#define EVENPARITY (2)
+#define MARKPARITY (3)
+#define NOPARITY (0)
+#define ODDPARITY (1)
+#define SPACEPARITY (4)
+#define ONESTOPBIT (0)
+#define ONE5STOPBITS (1)
+#define TWOSTOPBITS (2)
+
+/* Debugging events */
+#define CREATE_PROCESS_DEBUG_EVENT (3)
+#define CREATE_THREAD_DEBUG_EVENT (2)
+#define EXCEPTION_DEBUG_EVENT (1)
+#define EXIT_PROCESS_DEBUG_EVENT (5)
+#define EXIT_THREAD_DEBUG_EVENT (4)
+#define LOAD_DLL_DEBUG_EVENT (6)
+#define OUTPUT_DEBUG_STRING_EVENT (8)
+#define UNLOAD_DLL_DEBUG_EVENT (7)
+#define RIP_EVENT (9)
+
+/* PROCESS_HEAP_ENTRY structure */
+#define PROCESS_HEAP_REGION (1)
+#define PROCESS_HEAP_UNCOMMITTED_RANGE (2)
+#define PROCESS_HEAP_ENTRY_BUSY (4)
+#define PROCESS_HEAP_ENTRY_MOVEABLE (16)
+#define PROCESS_HEAP_ENTRY_DDESHARE (32)
+
+/* Win32s */
+#define HINSTANCE_ERROR (32)
+
+/* WIN32_STREAM_ID structure */
+#define BACKUP_DATA (1)
+#define BACKUP_EA_DATA (2)
+#define BACKUP_SECURITY_DATA (3)
+#define BACKUP_ALTERNATE_DATA (4)
+#define BACKUP_LINK (5)
+#define STREAM_MODIFIED_WHEN_READ (1)
+#define STREAM_CONTAINS_SECURITY (2)
+
+/* STARTUPINFO structure */
+#define STARTF_USESHOWWINDOW (1)
+#define STARTF_USEPOSITION (4)
+#define STARTF_USESIZE (2)
+#define STARTF_USECOUNTCHARS (8)
+#define STARTF_USEFILLATTRIBUTE (16)
+#define STARTF_RUNFULLSCREEN (32)
+#define STARTF_FORCEONFEEDBACK (64)
+#define STARTF_FORCEOFFFEEDBACK (128)
+#define STARTF_USESTDHANDLES (256)
+#define STARTF_USEHOTKEY (512)
+
+/* OSVERSIONINFO structure */
+#define VER_PLATFORM_WIN32s (0)
+#define VER_PLATFORM_WIN32_WINDOWS (1)
+#define VER_PLATFORM_WIN32_NT (2)
+
+/* PROPSHEETPAGE structure */
+#define MAXPROPPAGES (100)
+#define PSP_DEFAULT (0)
+#define PSP_DLGINDIRECT (1)
+#define PSP_HASHELP (32)
+#define PSP_USECALLBACK (128)
+#define PSP_USEHICON (2)
+#define PSP_USEICONID (4)
+#define PSP_USEREFPARENT (64)
+#define PSP_USETITLE (8)
+#define PSP_RTLREADING (16)
+
+/* PROPSHEETHEADER structure */
+#define PSH_DEFAULT (0)
+#define PSH_HASHELP (512)
+#define PSH_MODELESS (1024)
+#define PSH_NOAPPLYNOW (128)
+#define PSH_PROPSHEETPAGE (8)
+#define PSH_PROPTITLE (1)
+#define PSH_USECALLBACK (256)
+#define PSH_USEHICON (2)
+#define PSH_USEICONID (4)
+#define PSH_USEPSTARTPAGE (64)
+#define PSH_WIZARD (32)
+#define PSH_RTLREADING (2048)
+#define PSCB_INITIALIZED (1)
+#define PSCB_PRECREATE (2)
+
+/* PSN_APPLY message */
+#define PSNRET_NOERROR (0)
+#define PSNRET_INVALID_NOCHANGEPAGE (2)
+
+/* Property Sheet */
+#define PSBTN_APPLYNOW (4)
+#define PSBTN_BACK (0)
+#define PSBTN_CANCEL (5)
+#define PSBTN_FINISH (2)
+#define PSBTN_HELP (6)
+#define PSBTN_NEXT (1)
+#define PSBTN_OK (3)
+#define PSWIZB_BACK (1)
+#define PSWIZB_NEXT (2)
+#define PSWIZB_FINISH (4)
+#define PSWIZB_DISABLEDFINISH (8)
+#define ID_PSREBOOTSYSTEM (3)
+#define ID_PSRESTARTWINDOWS (2)
+#define WIZ_BODYCX (184)
+#define WIZ_BODYX (92)
+#define WIZ_CXBMP (80)
+#define WIZ_CXDLG (276)
+#define WIZ_CYDLG (140)
+
+/* VX_FIXEDFILEINFO structure */
+#define VS_FILE_INFO (MAKEINTRESOURCE(16))
+#define VS_VERSION_INFO (1)
+#define VS_FF_DEBUG (0x1L)
+#define VS_FF_INFOINFERRED (0x10L)
+#define VS_FF_PATCHED (0x4L)
+#define VS_FF_PRERELEASE (0x2L)
+#define VS_FF_PRIVATEBUILD (0x8L)
+#define VS_FF_SPECIALBUILD (0x20L)
+#define VOS_UNKNOWN (0L)
+#define VOS_DOS (0x10000L)
+#define VOS_OS216 (0x20000L)
+#define VOS_OS232 (0x30000L)
+#define VOS_NT (0x40000L)
+#define VOS_DOS_WINDOWS16 (0x10001L)
+#define VOS_DOS_WINDOWS32 (0x10004L)
+#define VOS_OS216_PM16 (0x20002L)
+#define VOS_OS232_PM32 (0x30003L)
+#define VOS_NT_WINDOWS32 (0x40004L)
+#define VFT_UNKNOWN (0L)
+#define VFT_APP (0x1L)
+#define VFT_DLL (0x2L)
+#define VFT_DRV (0x3L)
+#define VFT_FONT (0x4L)
+#define VFT_VXD (0x5L)
+#define VFT_STATIC_LIB (0x7L)
+#define VFT2_UNKNOWN (0L)
+#define VFT2_DRV_PRINTER (0x1L)
+#define VFT2_DRV_KEYBOARD (0x2L)
+#define VFT2_DRV_LANGUAGE (0x3L)
+#define VFT2_DRV_DISPLAY (0x4L)
+#define VFT2_DRV_MOUSE (0x5L)
+#define VFT2_DRV_NETWORK (0x6L)
+#define VFT2_DRV_SYSTEM (0x7L)
+#define VFT2_DRV_INSTALLABLE (0x8L)
+#define VFT2_DRV_SOUND (0x9L)
+#define VFT2_FONT_RASTER (0x1L)
+#define VFT2_FONT_VECTOR (0x2L)
+#define VFT2_FONT_TRUETYPE (0x3L)
+
+/* PANOSE structure */
+#define PAN_ANY (0)
+#define PAN_NO_FIT (1)
+#define PAN_FAMILY_TEXT_DISPLAY (2)
+#define PAN_FAMILY_SCRIPT (3)
+#define PAN_FAMILY_DECORATIVE (4)
+#define PAN_FAMILY_PICTORIAL (5)
+#define PAN_SERIF_COVE (2)
+#define PAN_SERIF_OBTUSE_COVE (3)
+#define PAN_SERIF_SQUARE_COVE (4)
+#define PAN_SERIF_OBTUSE_SQUARE_COVE (5)
+#define PAN_SERIF_SQUARE (6)
+#define PAN_SERIF_THIN (7)
+#define PAN_SERIF_BONE (8)
+#define PAN_SERIF_EXAGGERATED (9)
+#define PAN_SERIF_TRIANGLE (10)
+#define PAN_SERIF_NORMAL_SANS (11)
+#define PAN_SERIF_OBTUSE_SANS (12)
+#define PAN_SERIF_PERP_SANS (13)
+#define PAN_SERIF_FLARED (14)
+#define PAN_SERIF_ROUNDED (15)
+#define PAN_WEIGHT_VERY_LIGHT (2)
+#define PAN_WEIGHT_LIGHT (3)
+#define PAN_WEIGHT_THIN (4)
+#define PAN_WEIGHT_BOOK (5)
+#define PAN_WEIGHT_MEDIUM (6)
+#define PAN_WEIGHT_DEMI (7)
+#define PAN_WEIGHT_BOLD (8)
+#define PAN_WEIGHT_HEAVY (9)
+#define PAN_WEIGHT_BLACK (10)
+#define PAN_WEIGHT_NORD (11)
+#define PAN_PROP_OLD_STYLE (2)
+#define PAN_PROP_MODERN (3)
+#define PAN_PROP_EVEN_WIDTH (4)
+#define PAN_PROP_EXPANDED (5)
+#define PAN_PROP_CONDENSED (6)
+#define PAN_PROP_VERY_EXPANDED (7)
+#define PAN_PROP_VERY_CONDENSED (8)
+#define PAN_PROP_MONOSPACED (9)
+#define PAN_CONTRAST_NONE (2)
+#define PAN_CONTRAST_VERY_LOW (3)
+#define PAN_CONTRAST_LOW (4)
+#define PAN_CONTRAST_MEDIUM_LOW (5)
+#define PAN_CONTRAST_MEDIUM (6)
+#define PAN_CONTRAST_MEDIUM_HIGH (7)
+#define PAN_CONTRAST_HIGH (8)
+#define PAN_CONTRAST_VERY_HIGH (9)
+#define PAN_STROKE_GRADUAL_DIAG (2)
+#define PAN_STROKE_GRADUAL_TRAN (3)
+#define PAN_STROKE_GRADUAL_VERT (4)
+#define PAN_STROKE_GRADUAL_HORZ (5)
+#define PAN_STROKE_RAPID_VERT (6)
+#define PAN_STROKE_RAPID_HORZ (7)
+#define PAN_STROKE_INSTANT_VERT (8)
+#define PAN_STRAIGHT_ARMS_HORZ (2)
+#define PAN_STRAIGHT_ARMS_WEDGE (3)
+#define PAN_STRAIGHT_ARMS_VERT (4)
+#define PAN_STRAIGHT_ARMS_SINGLE_SERIF (5)
+#define PAN_STRAIGHT_ARMS_DOUBLE_SERIF (6)
+#define PAN_BENT_ARMS_HORZ (7)
+#define PAN_BENT_ARMS_VERT (9)
+#define PAN_BENT_ARMS_WEDGE (8)
+#define PAN_BENT_ARMS_SINGLE_SERIF (10)
+#define PAN_BENT_ARMS_DOUBLE_SERIF (11)
+#define PAN_LETT_NORMAL_CONTACT (2)
+#define PAN_LETT_NORMAL_WEIGHTED (3)
+#define PAN_LETT_NORMAL_BOXED (4)
+#define PAN_LETT_NORMAL_FLATTENED (5)
+#define PAN_LETT_NORMAL_ROUNDED (6)
+#define PAN_LETT_NORMAL_OFF_CENTER (7)
+#define PAN_LETT_NORMAL_SQUARE (8)
+#define PAN_LETT_OBLIQUE_CONTACT (9)
+#define PAN_LETT_OBLIQUE_WEIGHTED (10)
+#define PAN_LETT_OBLIQUE_BOXED (11)
+#define PAN_LETT_OBLIQUE_FLATTENED (12)
+#define PAN_LETT_OBLIQUE_ROUNDED (13)
+#define PAN_LETT_OBLIQUE_OFF_CENTER (14)
+#define PAN_LETT_OBLIQUE_SQUARE (15)
+#define PAN_MIDLINE_STANDARD_TRIMMED (2)
+#define PAN_MIDLINE_STANDARD_POINTED (3)
+#define PAN_MIDLINE_STANDARD_SERIFED (4)
+#define PAN_MIDLINE_HIGH_TRIMMED (5)
+#define PAN_MIDLINE_HIGH_POINTED (6)
+#define PAN_MIDLINE_HIGH_SERIFED (7)
+#define PAN_MIDLINE_CONSTANT_TRIMMED (8)
+#define PAN_MIDLINE_CONSTANT_POINTED (9)
+#define PAN_MIDLINE_CONSTANT_SERIFED (10)
+#define PAN_MIDLINE_LOW_TRIMMED (11)
+#define PAN_MIDLINE_LOW_POINTED (12)
+#define PAN_MIDLINE_LOW_SERIFED (13)
+#define PAN_XHEIGHT_CONSTANT_SMALL (2)
+#define PAN_XHEIGHT_CONSTANT_STD (3)
+#define PAN_XHEIGHT_CONSTANT_LARGE (4)
+#define PAN_XHEIGHT_DUCKING_SMALL (5)
+#define PAN_XHEIGHT_DUCKING_STD (6)
+#define PAN_XHEIGHT_DUCKING_LARGE (7)
+
+/* PALETTENTRY structure */
+#define PC_EXPLICIT (2)
+#define PC_NOCOLLAPSE (4)
+#define PC_RESERVED (1)
+
+/* LOGBRUSH structure */
+#define BS_DIBPATTERN (5)
+#define BS_DIBPATTERN8X8 (8)
+#define BS_DIBPATTERNPT (6)
+#define BS_HATCHED (2)
+#define BS_HOLLOW (1)
+#define BS_NULL (1)
+#define BS_PATTERN (3)
+#define BS_PATTERN8X8 (7)
+#define BS_SOLID (0)
+
+/* DEVMODE structure */
+#define DM_ORIENTATION (0x1L)
+#define DM_PAPERSIZE (0x2L)
+#define DM_PAPERLENGTH (0x4L)
+#define DM_PAPERWIDTH (0x8L)
+#define DM_SCALE (0x10L)
+#define DM_COPIES (0x100L)
+#define DM_DEFAULTSOURCE (0x200L)
+#define DM_PRINTQUALITY (0x400L)
+#define DM_COLOR (0x800L)
+#define DM_DUPLEX (0x1000L)
+#define DM_YRESOLUTION (0x2000L)
+#define DM_TTOPTION (0x4000L)
+#define DM_COLLATE (0x8000L)
+#define DM_FORMNAME (0x10000L)
+#define DM_LOGPIXELS (0x20000L)
+#define DM_BITSPERPEL (0x40000L)
+#define DM_PELSWIDTH (0x80000L)
+#define DM_PELSHEIGHT (0x100000L)
+#define DM_DISPLAYFLAGS (0x200000L)
+#define DM_DISPLAYFREQUENCY (0x400000L)
+#define DM_ICMMETHOD (0x800000L)
+#define DM_ICMINTENT (0x1000000L)
+#define DM_MEDIATYPE (0x2000000L)
+#define DM_DITHERTYPE (0x4000000L)
+#define DMORIENT_LANDSCAPE (2)
+#define DMORIENT_PORTRAIT (1)
+#define DMPAPER_LETTER (1)
+#define DMPAPER_LEGAL (5)
+#define DMPAPER_A4 (9)
+#define DMPAPER_CSHEET (24)
+#define DMPAPER_DSHEET (25)
+#define DMPAPER_ESHEET (26)
+#define DMPAPER_LETTERSMALL (2)
+#define DMPAPER_TABLOID (3)
+#define DMPAPER_LEDGER (4)
+#define DMPAPER_STATEMENT (6)
+#define DMPAPER_EXECUTIVE (7)
+#define DMPAPER_A3 (8)
+#define DMPAPER_A4SMALL (10)
+#define DMPAPER_A5 (11)
+#define DMPAPER_B4 (12)
+#define DMPAPER_B5 (13)
+#define DMPAPER_FOLIO (14)
+#define DMPAPER_QUARTO (15)
+#define DMPAPER_10X14 (16)
+#define DMPAPER_11X17 (17)
+#define DMPAPER_NOTE (18)
+#define DMPAPER_ENV_9 (19)
+#define DMPAPER_ENV_10 (20)
+#define DMPAPER_ENV_11 (21)
+#define DMPAPER_ENV_12 (22)
+#define DMPAPER_ENV_14 (23)
+#define DMPAPER_ENV_DL (27)
+#define DMPAPER_ENV_C5 (28)
+#define DMPAPER_ENV_C3 (29)
+#define DMPAPER_ENV_C4 (30)
+#define DMPAPER_ENV_C6 (31)
+#define DMPAPER_ENV_C65 (32)
+#define DMPAPER_ENV_B4 (33)
+#define DMPAPER_ENV_B5 (34)
+#define DMPAPER_ENV_B6 (35)
+#define DMPAPER_ENV_ITALY (36)
+#define DMPAPER_ENV_MONARCH (37)
+#define DMPAPER_ENV_PERSONAL (38)
+#define DMPAPER_FANFOLD_US (39)
+#define DMPAPER_FANFOLD_STD_GERMAN (40)
+#define DMPAPER_FANFOLD_LGL_GERMAN (41)
+#define DMRES_HIGH (-4)
+#define DMRES_MEDIUM (-3)
+#define DMRES_LOW (-2)
+#define DMRES_DRAFT (-1)
+#define DMCOLOR_COLOR (2)
+#define DMCOLOR_MONOCHROME (1)
+#define DMDUP_SIMPLEX (1)
+#define DMDUP_HORIZONTAL (3)
+#define DMDUP_VERTICAL (2)
+#define DMTT_BITMAP (1)
+#define DMTT_DOWNLOAD (2)
+#define DMTT_SUBDEV (3)
+#define DMCOLLATE_TRUE (1)
+#define DMCOLLATE_FALSE (0)
+#define DM_GRAYSCALE (1)
+#define DM_INTERLACED (2)
+#define DMICMMETHOD_NONE (1)
+#define DMICMMETHOD_SYSTEM (2)
+#define DMICMMETHOD_DRIVER (3)
+#define DMICMMETHOD_DEVICE (4)
+#define DMICMMETHOD_USER (256)
+#define DMICM_SATURATE (1)
+#define DMICM_CONTRAST (2)
+#define DMICM_COLORMETRIC (3)
+#define DMICM_USER (256)
+#define DMMEDIA_STANDARD (1)
+#define DMMEDIA_GLOSSY (3)
+#define DMMEDIA_TRANSPARENCY (2)
+#define DMMEDIA_USER (256)
+#define DMDITHER_NONE (1)
+#define DMDITHER_COARSE (2)
+#define DMDITHER_FINE (3)
+#define DMDITHER_LINEART (4)
+#define DMDITHER_GRAYSCALE (10)
+#define DMDITHER_USER (256)
+
+/* RGNDATAHEADER structure */
+#define RDH_RECTANGLES (1)
+
+/* TTPOLYGONHEADER structure */
+#define TT_POLYGON_TYPE (24)
+
+/* TTPOLYCURVE structure */
+#define TT_PRIM_LINE (1)
+#define TT_PRIM_QSPLINE (2)
+
+/* GCP_RESULTS structure */
+#define GCPCLASS_ARABIC (2)
+#define GCPCLASS_HEBREW (2)
+#define GCPCLASS_LATIN (1)
+#define GCPCLASS_LATINNUMBER (5)
+#define GCPCLASS_LOCALNUMBER (4)
+#define GCPCLASS_LATINNUMERICSEPARATOR (7)
+#define GCPCLASS_LATINNUMERICTERMINATOR (6)
+#define GCPCLASS_NEUTRAL (3)
+#define GCPCLASS_NUMERICSEPARATOR (8)
+#define GCPCLASS_PREBOUNDLTR (128)
+#define GCPCLASS_PREBOUNDRTL (64)
+#define GCPCLASS_POSTBOUNDLTR (32)
+#define GCPCLASS_POSTBOUNDRTL (16)
+#define GCPGLYPH_LINKBEFORE (32768)
+#define GCPGLYPH_LINKAFTER (16384)
+
+/* RASTERIZER_STATUS structure */
+#define TT_AVAILABLE (1)
+#define TT_ENABLED (2)
+
+/* COLORADJUSTMENT structure */
+#define CA_NEGATIVE (1)
+#define CA_LOG_FILTER (2)
+#define ILLUMINANT_DEVICE_DEFAULT (0)
+#define ILLUMINANT_A (1)
+#define ILLUMINANT_B (2)
+#define ILLUMINANT_C (3)
+#define ILLUMINANT_D50 (4)
+#define ILLUMINANT_D55 (5)
+#define ILLUMINANT_D65 (6)
+#define ILLUMINANT_D75 (7)
+#define ILLUMINANT_F2 (8)
+#define ILLUMINANT_TUNGSTEN (1)
+#define ILLUMINANT_DAYLIGHT (3)
+#define ILLUMINANT_FLUORESCENT (8)
+#define ILLUMINANT_NTSC (3)
+
+/* DOCINFO structure */
+#define DI_APPBANDING (1)
+
+/* EMRMETAHEADER structure */
+#define EMR_HEADER (1)
+#define ENHMETA_SIGNATURE (1179469088)
+
+/* RTF event masks */
+#define ENM_CHANGE (1)
+#define ENM_CORRECTTEXT (4194304)
+#define ENM_DROPFILES (1048576)
+#define ENM_KEYEVENTS (65536)
+#define ENM_MOUSEEVENTS (131072)
+#define ENM_PROTECTED (2097152)
+#define ENM_REQUESTRESIZE (262144)
+#define ENM_SCROLL (4)
+#define ENM_SELCHANGE (524288)
+#define ENM_UPDATE (2)
+#define ENM_NONE (0)
+
+/* RTF styles */
+#define ES_DISABLENOSCROLL (8192)
+#define ES_EX_NOCALLOLEINIT (16777216)
+#define ES_NOIME (524288)
+#define ES_SAVESEL (32768)
+#define ES_SELFIME (262144)
+#define ES_SUNKEN (16384)
+#define ES_VERTICAL (4194304)
+#define ES_SELECTIONBAR (16777216)
+
+/* EM_SETOPTIONS message */
+#define ECOOP_SET (1)
+#define ECOOP_OR (2)
+#define ECOOP_AND (3)
+#define ECOOP_XOR (4)
+#define ECO_AUTOWORDSELECTION (1)
+#define ECO_AUTOVSCROLL (64)
+#define ECO_AUTOHSCROLL (128)
+#define ECO_NOHIDESEL (256)
+#define ECO_READONLY (2048)
+#define ECO_WANTRETURN (4096)
+#define ECO_SAVESEL (32768)
+#define ECO_SELECTIONBAR (16777216)
+#define ECO_VERTICAL (4194304)
+
+/* EM_SETCHARFORMAT message */
+#define SCF_WORD (2)
+#define SCF_SELECTION (1)
+
+/* EM_STREAMOUT message */
+#define SF_TEXT (1)
+#define SF_RTF (2)
+#define SF_RTFNOOBJS (3)
+#define SF_TEXTIZED (4)
+#define SFF_SELECTION (32768)
+#define SFF_PLAINRTF (16384)
+
+/* EM_FINDWORDBREAK message */
+#define WB_CLASSIFY (3)
+#define WB_ISDELIMITER (2)
+#define WB_LEFT (0)
+#define WB_LEFTBREAK (6)
+#define WB_PREVBREAK (6)
+#define WB_MOVEWORDLEFT (4)
+#define WB_MOVEWORDPREV (4)
+#define WB_MOVEWORDRIGHT (5)
+#define WB_MOVEWORDNEXT (5)
+#define WB_RIGHT (1)
+#define WB_RIGHTBREAK (7)
+#define WB_NEXTBREAK (7)
+
+/* EM_GETPUNCTUATION message */
+#define PC_LEADING (2)
+#define PC_FOLLOWING (1)
+#define PC_DELIMITER (4)
+#define PC_OVERFLOW (3)
+
+/* EM_SETWORDWRAPMODE message */
+#define WBF_WORDWRAP (16)
+#define WBF_WORDBREAK (32)
+#define WBF_OVERFLOW (64)
+#define WBF_LEVEL1 (128)
+#define WBF_LEVEL2 (256)
+#define WBF_CUSTOM (512)
+#define WBF_BREAKAFTER (64)
+#define WBF_BREAKLINE (32)
+#define WBF_ISWHITE (16)
+
+/* CHARFORMAT structure */
+#define CFM_BOLD (1)
+#define CFM_COLOR (1073741824)
+#define CFM_FACE (536870912)
+#define CFM_ITALIC (2)
+#define CFM_OFFSET (268435456)
+#define CFM_PROTECTED (16)
+#define CFM_SIZE (0x80000000)
+#define CFM_STRIKEOUT (8)
+#define CFM_UNDERLINE (4)
+#define CFE_AUTOCOLOR (1073741824)
+#define CFE_BOLD (1)
+#define CFE_ITALIC (2)
+#define CFE_STRIKEOUT (8)
+#define CFE_UNDERLINE (4)
+#define CFE_PROTECTED (16)
+
+/* PARAFORMAT structure */
+#define PFM_ALIGNMENT (8)
+#define PFM_NUMBERING (32)
+#define PFM_OFFSET (4)
+#define PFM_OFFSETINDENT (0x80000000)
+#define PFM_RIGHTINDENT (2)
+#define PFM_STARTINDENT (1)
+#define PFM_TABSTOPS (16)
+#define PFN_BULLET (1)
+#define PFA_LEFT (1)
+#define PFA_RIGHT (2)
+#define PFA_CENTER (3)
+
+/* SELCHANGE structure */
+#define SEL_EMPTY (0)
+#define SEL_TEXT (1)
+#define SEL_OBJECT (2)
+#define SEL_MULTICHAR (4)
+#define SEL_MULTIOBJECT (8)
+
+/* RTF clipboard formats */
+#define CF_RTF "Rich Text Format"
+#define CF_RETEXTOBJ "RichEdit Text and Objects"
+
+/* DRAWITEMSTRUCT structure */
+#define ODT_BUTTON (4)
+#define ODT_COMBOBOX (3)
+#define ODT_LISTBOX (2)
+#define ODT_LISTVIEW (102)
+#define ODT_MENU (1)
+#define ODT_STATIC (5)
+#define ODT_TAB (101)
+#define ODT_HEADER (100)
+#define ODA_DRAWENTIRE (1)
+#define ODA_FOCUS (4)
+#define ODA_SELECT (2)
+#define ODS_CHECKED (8)
+#define ODS_COMBOBOXEDIT (4096)
+#define ODS_DEFAULT (32)
+#define ODS_DISABLED (4)
+#define ODS_FOCUS (16)
+#define ODS_GRAYED (2)
+#define ODS_SELECTED (1)
+
+/* Common control window classes */
+#define ANIMATE_CLASSW L"SysAnimate32"
+#define HOTKEY_CLASSW L"msctls_hotkey32"
+#define PROGRESS_CLASSW L"msctls_progress32"
+#define STATUSCLASSNAMEW L"msctls_statusbar32"
+#define TOOLBARCLASSNAMEW L"ToolbarWindow32"
+#define TOOLTIPS_CLASSW L"tooltips_class32"
+#define TRACKBAR_CLASSW L"msctls_trackbar32"
+#define UPDOWN_CLASSW L"msctls_updown32"
+#define WC_HEADERW L"SysHeader32"
+#define WC_LISTVIEWW L"SysListView32"
+#define WC_TABCONTROLW L"SysTabControl32"
+#define WC_TREEVIEWW L"SysTreeView32"
+
+/* Common control styles */
+#define CCS_ADJUSTABLE (0x20L)
+#define CCS_BOTTOM (0x3L)
+#define CCS_NODIVIDER (0x40L)
+#define CCS_NOMOVEY (0x2L)
+#define CCS_NOPARENTALIGN (0x8L)
+#define CCS_NORESIZE (0x4L)
+#define CCS_TOP (0x1L)
+#define ANIMATE_CLASSA "SysAnimate32"
+#define HOTKEY_CLASSA "msctls_hotkey32"
+#define PROGRESS_CLASSA "msctls_progress32"
+#define STATUSCLASSNAMEA "msctls_statusbar32"
+#define TOOLBARCLASSNAMEA "ToolbarWindow32"
+#define TOOLTIPS_CLASSA "tooltips_class32"
+#define TRACKBAR_CLASSA "msctls_trackbar32"
+#define UPDOWN_CLASSA "msctls_updown32"
+#define WC_HEADERA "SysHeader32"
+#define WC_LISTVIEWA "SysListView32"
+#define WC_TABCONTROLA "SysTabControl32"
+#define WC_TREEVIEWA "SysTreeView32"
+#ifdef UNICODE
+#define ANIMATE_CLASS ANIMATE_CLASSW
+#define HOTKEY_CLASS HOTKEY_CLASSW
+#define PROGRESS_CLASS PROGRESS_CLASSW
+#define STATUSCLASSNAME STATUSCLASSNAMEW
+#define TOOLBARCLASSNAME TOOLBARCLASSNAMEW
+#define TOOLTIPS_CLASS TOOLTIPS_CLASSW
+#define TRACKBAR_CLASS TRACKBAR_CLASSW
+#define UPDOWN_CLASS UPDOWN_CLASSW
+#define WC_HEADER WC_HEADERW
+#define WC_LISTVIEW WC_LISTVIEWW
+#define WC_TABCONTROL WC_TABCONTROLW
+#define WC_TREEVIEW WC_TREEVIEWW
+#else
+#define ANIMATE_CLASS ANIMATE_CLASSA
+#define HOTKEY_CLASS HOTKEY_CLASSA
+#define PROGRESS_CLASS PROGRESS_CLASSA
+#define STATUSCLASSNAME STATUSCLASSNAMEA
+#define TOOLBARCLASSNAME TOOLBARCLASSNAMEA
+#define TOOLTIPS_CLASS TOOLTIPS_CLASSA
+#define TRACKBAR_CLASS TRACKBAR_CLASSA
+#define UPDOWN_CLASS UPDOWN_CLASSA
+#define WC_HEADER WC_HEADERA
+#define WC_LISTVIEW WC_LISTVIEWA
+#define WC_TABCONTROL WC_TABCONTROLA
+#define WC_TREEVIEW WC_TREEVIEWA
+#endif /* UNICODE */
+
+/* Header control styles */
+#define HDS_BUTTONS (2)
+#define HDS_HIDDEN (8)
+#define HDS_HORZ (0)
+
+/* HD_ITEM structure */
+#define HDI_BITMAP (16)
+#define HDI_FORMAT (4)
+#define HDI_HEIGHT (1)
+#define HDI_LPARAM (8)
+#define HDI_TEXT (2)
+#define HDI_WIDTH (1)
+#define HDF_CENTER (2)
+#define HDF_LEFT (0)
+#define HDF_RIGHT (1)
+#define HDF_RTLREADING (4)
+#define HDF_BITMAP (8192)
+#define HDF_OWNERDRAW (32768)
+#define HDF_STRING (16384)
+#define HDF_JUSTIFYMASK (3)
+
+/* HD_HITTESTINFO structure */
+#define HHT_NOWHERE (1)
+#define HHT_ONDIVIDER (4)
+#define HHT_ONDIVOPEN (8)
+#define HHT_ONHEADER (2)
+#define HHT_TOLEFT (2048)
+#define HHT_TORIGHT (1024)
+
+/* TBADDBITMAP structure */
+#define HINST_COMMCTRL ((HINSTANCE)-1)
+#define IDB_STD_LARGE_COLOR (1)
+#define IDB_STD_SMALL_COLOR (0)
+#define IDB_VIEW_LARGE_COLOR (5)
+#define IDB_VIEW_SMALL_COLOR (4)
+#define STD_COPY (1)
+#define STD_CUT (0)
+#define STD_DELETE (5)
+#define STD_FILENEW (6)
+#define STD_FILEOPEN (7)
+#define STD_FILESAVE (8)
+#define STD_FIND (12)
+#define STD_HELP (11)
+#define STD_PASTE (2)
+#define STD_PRINT (14)
+#define STD_PRINTPRE (9)
+#define STD_PROPERTIES (10)
+#define STD_REDOW (4)
+#define STD_REPLACE (13)
+#define STD_UNDO (3)
+#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)
+
+/* Toolbar styles */
+#define TBSTYLE_ALTDRAG (1024)
+#define TBSTYLE_TOOLTIPS (256)
+#define TBSTYLE_WRAPABLE (512)
+#define TBSTYLE_BUTTON (0)
+#define TBSTYLE_CHECK (2)
+#define TBSTYLE_CHECKGROUP (6)
+#define TBSTYLE_GROUP (4)
+#define TBSTYLE_SEP (1)
+
+/* Toolbar states */
+#define TBSTATE_CHECKED (1)
+#define TBSTATE_ENABLED (4)
+#define TBSTATE_HIDDEN (8)
+#define TBSTATE_INDETERMINATE (16)
+#define TBSTATE_PRESSED (2)
+#define TBSTATE_WRAP (32)
+
+/* Tooltip styles */
+#define TTS_ALWAYSTIP (1)
+#define TTS_NOPREFIX (2)
+
+/* TOOLINFO structure */
+#define TTF_IDISHWND (1)
+#define TTF_CENTERTIP (2)
+#define TTF_RTLREADING (4)
+#define TTF_SUBCLASS (16)
+
+/* TTM_SETDELAYTIME message */
+#define TTDT_AUTOMATIC (0)
+#define TTDT_AUTOPOP (2)
+#define TTDT_INITIAL (3)
+#define TTDT_RESHOW (1)
+
+/* Status window */
+#define SBARS_SIZEGRIP (256)
+#define SBARS_SIZEGRIP (256)
+
+/* DL_DRAGGING message */
+#define DL_MOVECURSOR (3)
+#define DL_COPYCURSOR (2)
+#define DL_STOPCURSOR (1)
+
+/* Up-down control styles */
+#define UDS_ALIGNLEFT (8)
+#define UDS_ALIGNRIGHT (4)
+#define UDS_ARROWKEYS (32)
+#define UDS_AUTOBUDDY (16)
+#define UDS_HORZ (64)
+#define UDS_NOTHOUSANDS (128)
+#define UDS_SETBUDDYINT (2)
+#define UDS_WRAP (1)
+
+/* UDM_SETRANGE message */
+#define UD_MAXVAL (32767)
+#define UD_MINVAL (-32767)
+
+/* HKM_GETHOTKEY message */
+#define HOTKEYF_ALT (4)
+#define HOTKEYF_CONTROL (2)
+#define HOTKEYF_EXT (8)
+#define HOTKEYF_SHIFT (1)
+
+/* HKM_SETRULES message */
+#define HKCOMB_A (8)
+#define HKCOMB_C (4)
+#define HKCOMB_CA (64)
+#define HKCOMB_NONE (1)
+#define HKCOMB_S (2)
+#define HKCOMB_SA (32)
+#define HKCOMB_SC (16)
+#define HKCOMB_SCA (128)
+
+/* Trackbar styles */
+#define TBS_HORZ (0)
+#define TBS_VERT (2)
+#define TBS_AUTOTICKS (1)
+#define TBS_NOTICKS (16)
+#define TBS_TOP (4)
+#define TBS_BOTTOM (0)
+#define TBS_LEFT (4)
+#define TBS_RIGHT (0)
+#define TBS_BOTH (8)
+#define TBS_ENABLESELRANGE (32)
+#define TBS_FIXEDLENGTH (64)
+#define TBS_NOTHUMB (128)
+#define TB_BOTTOM (7)
+#define TB_ENDTRACK (8)
+#define TB_LINEDOWN (1)
+#define TB_LINEUP (0)
+#define TB_PAGEDOWN (3)
+#define TB_PAGEUP (2)
+#define TB_THUMBPOSITION (4)
+#define TB_THUMBTRACK (5)
+#define TB_TOP (6)
+
+/* List view styles */
+#define LVS_ALIGNLEFT (2048)
+#define LVS_ALIGNTOP (0)
+#define LVS_AUTOARRANGE (256)
+#define LVS_EDITLABELS (512)
+#define LVS_ICON (0)
+#define LVS_LIST (3)
+#define LVS_NOCOLUMNHEADER (16384)
+#define LVS_NOLABELWRAP (128)
+#define LVS_NOSCROLL (8192)
+#define LVS_NOSORTHEADER (32768)
+#define LVS_OWNERDRAWFIXED (1024)
+#define LVS_REPORT (1)
+#define LVS_SHAREIMAGELISTS (64)
+#define LVS_SHOWSELALWAYS (8)
+#define LVS_SINGLESEL (4)
+#define LVS_SMALLICON (2)
+#define LVS_SORTASCENDING (16)
+#define LVS_SORTDESCENDING (32)
+#define LVS_TYPESTYLEMASK (64512)
+#define LVSIL_NORMAL (0)
+#define LVSIL_SMALL (1)
+#define LVSIL_STATE (2)
+#define LVIS_CUT (4)
+#define LVIS_DROPHILITED (8)
+#define LVIS_FOCUSED (1)
+#define LVIS_SELECTED (2)
+#define LVIS_OVERLAYMASK (3840)
+#define LVIS_STATEIMAGEMASK (61440)
+#define LPSTR_TEXTCALLBACKW ((LPWSTR)-1L)
+#define LPSTR_TEXTCALLBACKA ((LPSTR)-1L)
+#ifdef UNICODE
+#define LPSTR_TEXTCALLBACK LPSTR_TEXTCALLBACKW
+#else
+#define LPSTR_TEXTCALLBACK LPSTR_TEXTCALLBACKA
+#endif /* UNICODE */
+
+/* LV_ITEM structure */
+#define LVIF_TEXT (1)
+#define LVIF_IMAGE (2)
+#define LVIF_PARAM (4)
+#define LVIF_STATE (8)
+#define LVIF_DI_SETITEM (4096)
+
+/* LVM_GETNEXTITEM structure */
+#define LVNI_ABOVE (256)
+#define LVNI_ALL (0)
+#define LVNI_BELOW (512)
+#define LVNI_TOLEFT (1024)
+#define LVNI_TORIGHT (2048)
+#define LVNI_CUT (4)
+#define LVNI_DROPHILITED (8)
+#define LVNI_FOCUSED (1)
+#define LVNI_SELECTED (2)
+
+/* LV_FINDINFO structure */
+#define LVFI_PARAM (1)
+#define LVFI_PARTIAL (8)
+#define LVFI_STRING (2)
+#define LVFI_WRAP (32)
+#define LVFI_NEARESTXY (64)
+
+/* LV_HITTESTINFO structure */
+#define LVHT_ABOVE (8)
+#define LVHT_BELOW (16)
+#define LVHT_NOWHERE (1)
+#define LVHT_ONITEMICON (2)
+#define LVHT_ONITEMLABEL (4)
+#define LVHT_ONITEMSTATEICON (8)
+#define LVHT_TOLEFT (64)
+#define LVHT_TORIGHT (32)
+
+/* LV_COLUMN structure */
+#define LVCF_FMT (1)
+#define LVCF_SUBITEM (8)
+#define LVCF_TEXT (4)
+#define LVCF_WIDTH (2)
+#define LVCFMT_CENTER (2)
+#define LVCFMT_LEFT (0)
+#define LVCFMT_RIGHT (1)
+
+/* ListView_GetItemRect */
+#define LVIR_BOUNDS (0)
+#define LVIR_ICON (1)
+#define LVIR_LABEL (2)
+#define LVIR_SELECTBOUNDS (3)
+
+/* LVM_ARRANGE message */
+#define LVA_ALIGNLEFT (1)
+#define LVA_ALIGNTOP (2)
+#define LVA_DEFAULT (0)
+#define LVA_SNAPTOGRID (5)
+
+/* LVM_SETCOLUMNWIDTH message */
+#define LVSCW_AUTOSIZE (-1)
+#define LVSCW_AUTOSIZE_USEHEADER (-2)
+
+/* Tree View styles */
+#define TVS_DISABLEDRAGDROP (16)
+#define TVS_EDITLABELS (8)
+#define TVS_HASBUTTONS (1)
+#define TVS_HASLINES (2)
+#define TVS_LINESATROOT (4)
+#define TVS_SHOWSELALWAYS (32)
+
+/* Tree View states */
+#define TVIS_BOLD (16)
+#define TVIS_CUT (4)
+#define TVIS_DROPHILITED (8)
+#define TVIS_EXPANDED (32)
+#define TVIS_EXPANDEDONCE (64)
+#define TVIS_FOCUSED (1)
+#define TVIS_OVERLAYMASK (3840)
+#define TVIS_SELECTED (2)
+#define TVIS_STATEIMAGEMASK (61440)
+#define TVIS_USERMASK (61440)
+
+/* TV_ITEM structure */
+#define TVIF_CHILDREN (64)
+#define TVIF_HANDLE (16)
+#define TVIF_IMAGE (2)
+#define TVIF_PARAM (4)
+#define TVIF_SELECTEDIMAGE (32)
+#define TVIF_STATE (8)
+#define TVIF_TEXT (1)
+#define I_CHILDRENCALLBACK (-1)
+#define I_IMAGECALLBACK (-1)
+
+/* TV_INSERTSTRUCT structure */
+#define TVI_ROOT ((HTREEITEM)0xFFFF0000)
+#define TVI_FIRST ((HTREEITEM)0xFFFF0001)
+#define TVI_LAST ((HTREEITEM)0xFFFF0002)
+#define TVI_SORT ((HTREEITEM)0xFFFF0003)
+
+/* TV_HITTESTINFO structure */
+#define TVHT_ABOVE (256)
+#define TVHT_BELOW (512)
+#define TVHT_NOWHERE (1)
+#define TVHT_ONITEM (70)
+#define TVHT_ONITEMBUTTON (16)
+#define TVHT_ONITEMICON (2)
+#define TVHT_ONITEMINDENT (8)
+#define TVHT_ONITEMLABEL (4)
+#define TVHT_ONITEMRIGHT (32)
+#define TVHT_ONITEMSTATEICON (64)
+#define TVHT_TOLEFT (2048)
+#define TVHT_TORIGHT (1024)
+
+/* TVM_EXPAND message */
+#define TVE_COLLAPSE (1)
+#define TVE_COLLAPSERESET (32768)
+#define TVE_EXPAND (2)
+#define TVE_TOGGLE (3)
+
+/* TVM_GETIMAGELIST message */
+#define TVSIL_NORMAL (0)
+#define TVSIL_STATE (2)
+
+/* TVM_GETNEXTITEM message */
+#define TVGN_CARET (9)
+#define TVGN_CHILD (4)
+#define TVGN_DROPHILITE (8)
+#define TVGN_FIRSTVISIBLE (5)
+#define TVGN_NEXT (1)
+#define TVGN_NEXTVISIBLE (6)
+#define TVGN_PARENT (3)
+#define TVGN_PREVIOUS (2)
+#define TVGN_PREVIOUSVISIBLE (7)
+#define TVGN_ROOT (0)
+
+/* TVN_SELCHANGED message */
+#define TVC_BYKEYBOARD (2)
+#define TVC_BYMOUSE (1)
+#define TVC_UNKNOWN (0)
+
+/* Tab control styles */
+#define TCS_BUTTONS (256)
+#define TCS_FIXEDWIDTH (1024)
+#define TCS_FOCUSNEVER (32768)
+#define TCS_FOCUSONBUTTONDOWN (4096)
+#define TCS_FORCEICONLEFT (16)
+#define TCS_FORCELABELLEFT (32)
+#define TCS_MULTILINE (512)
+#define TCS_OWNERDRAWFIXED (8192)
+#define TCS_RAGGEDRIGHT (2048)
+#define TCS_RIGHTJUSTIFY (0)
+#define TCS_SINGLELINE (0)
+#define TCS_TABS (0)
+#define TCS_TOOLTIPS (16384)
+
+/* TC_ITEM structure */
+#define TCIF_TEXT (1)
+#define TCIF_IMAGE (2)
+#define TCIF_PARAM (8)
+#define TCIF_RTLREADING (4)
+
+/* TC_HITTESTINFO structure */
+#define TCHT_NOWHERE (1)
+#define TCHT_ONITEM (6)
+#define TCHT_ONITEMICON (2)
+#define TCHT_ONITEMLABEL (4)
+
+/* Animation control styles */
+#define ACS_AUTOPLAY (4)
+#define ACS_CENTER (1)
+#define ACS_TRANSPARENT (2)
+
+/* MODEMDEVCAPS structure */
+#define DIALOPTION_BILLING (64)
+#define DIALOPTION_QUIET (128)
+#define DIALOPTION_DIALTONE (256)
+#define MDMVOLFLAG_LOW (1)
+#define MDMVOLFLAG_MEDIUM (2)
+#define MDMVOLFLAG_HIGH (4)
+#define MDMVOL_LOW (0)
+#define MDMVOL_MEDIUM (1)
+#define MDMVOL_HIGH (2)
+#define MDMSPKRFLAG_OFF (1)
+#define MDMSPKRFLAG_DIAL (2)
+#define MDMSPKRFLAG_ON (4)
+#define MDMSPKRFLAG_CALLSETUP (8)
+#define MDMSPKR_OFF (0)
+#define MDMSPKR_DIAL (1)
+#define MDMSPKR_ON (2)
+#define MDMSPKR_CALLSETUP (3)
+#define MDM_BLIND_DIAL (512)
+#define MDM_CCITT_OVERRIDE (64)
+#define MDM_CELLULAR (8)
+#define MDM_COMPRESSION (1)
+#define MDM_ERROR_CONTROL (2)
+#define MDM_FLOWCONTROL_HARD (16)
+#define MDM_FLOWCONTROL_SOFT (32)
+#define MDM_FORCED_EC (4)
+#define MDM_SPEED_ADJUST (128)
+#define MDM_TONE_DIAL (256)
+#define MDM_V23_OVERRIDE (1024)
+
+/* Languages */
+#define LANG_BULGARIAN (2)
+#define LANG_CHINESE (4)
+#define LANG_CROATIAN (26)
+#define LANG_CZECH (5)
+#define LANG_DANISH (6)
+#define LANG_DUTCH (19)
+#define LANG_ENGLISH (9)
+#define LANG_FINNISH (11)
+#define LANG_FRENCH (12)
+#define LANG_GERMAN (7)
+#define LANG_GREEK (8)
+#define LANG_HUNGARIAN (14)
+#define LANG_ICELANDIC (15)
+#define LANG_ITALIAN (16)
+#define LANG_JAPANESE (17)
+#define LANG_KOREAN (18)
+#define LANG_NEUTRAL (0)
+#define LANG_NORWEGIAN (20)
+#define LANG_POLISH (21)
+#define LANG_PORTUGUESE (22)
+#define LANG_ROMANIAN (24)
+#define LANG_RUSSIAN (25)
+#define LANG_SLOVAK (27)
+#define LANG_SLOVENIAN (36)
+#define LANG_SPANISH (10)
+#define LANG_SWEDISH (29)
+#define LANG_TURKISH (31)
+#define SUBLANG_CHINESE_SIMPLIFIED (2)
+#define SUBLANG_CHINESE_TRADITIONAL (1)
+#define SUBLANG_CHINESE_HONGKONG (3)
+#define SUBLANG_CHINESE_SINGAPORE (4)
+#define SUBLANG_DEFAULT (1)
+#define SUBLANG_DUTCH (1)
+#define SUBLANG_DUTCH_BELGIAN (2)
+#define SUBLANG_ENGLISH_AUS (3)
+#define SUBLANG_ENGLISH_CAN (4)
+#define SUBLANG_ENGLISH_EIRE (6)
+#define SUBLANG_ENGLISH_NZ (5)
+#define SUBLANG_ENGLISH_UK (2)
+#define SUBLANG_ENGLISH_US (1)
+#define SUBLANG_FRENCH (1)
+#define SUBLANG_FRENCH_BELGIAN (2)
+#define SUBLANG_FRENCH_CANADIAN (3)
+#define SUBLANG_FRENCH_SWISS (4)
+#define SUBLANG_GERMAN (1)
+#define SUBLANG_GERMAN_AUSTRIAN (3)
+#define SUBLANG_GERMAN_SWISS (2)
+#define SUBLANG_ITALIAN (1)
+#define SUBLANG_ITALIAN_SWISS (2)
+#define SUBLANG_NEUTRAL (0)
+#define SUBLANG_NORWEGIAN_BOKMAL (1)
+#define SUBLANG_NORWEGIAN_NYNORSK (2)
+#define SUBLANG_PORTUGUESE (2)
+#define SUBLANG_PORTUGUESE_BRAZILIAN (1)
+#define SUBLANG_SPANISH (1)
+#define SUBLANG_SPANISH_MEXICAN (2)
+#define SUBLANG_SPANISH_MODERN (3)
+#define SUBLANG_SYS_DEFAULT (2)
+#define NLS_VALID_LOCALE_MASK (1048575)
+#define SORT_DEFAULT (0)
+#define SORT_JAPANESE_XJIS (0)
+#define SORT_JAPANESE_UNICODE (1)
+#define SORT_CHINESE_BIG5 (0)
+#define SORT_CHINESE_UNICODE (1)
+#define SORT_KOREAN_KSC (0)
+#define SORT_KOREAN_UNICODE (1)
+
+/* SYSTEM_INFO structure */
+#define PROCESSOR_INTEL_386 (386)
+#define PROCESSOR_INTEL_486 (486)
+#define PROCESSOR_INTEL_PENTIUM (586)
+#define PROCESSOR_MIPS_R4000 (4000)
+#define PROCESSOR_ALPHA_21064 (21064)
+
+/* FSCTL_SET_COMPRESSION */
+#define COMPRESSION_FORMAT_NONE (0)
+#define COMPRESSION_FORMAT_DEFAULT (1)
+#define COMPRESSION_FORMAT_LZNT1 (2)
+
+/* TAPE_GET_DRIVE_PARAMETERS structure */
+#define TAPE_DRIVE_COMPRESSION (131072)
+#define TAPE_DRIVE_ECC (65536)
+#define TAPE_DRIVE_ERASE_BOP_ONLY (64)
+#define TAPE_DRIVE_ERASE_LONG (32)
+#define TAPE_DRIVE_ERASE_IMMEDIATE (128)
+#define TAPE_DRIVE_ERASE_SHORT (16)
+#define TAPE_DRIVE_FIXED (1)
+#define TAPE_DRIVE_FIXED_BLOCK (1024)
+#define TAPE_DRIVE_INITIATOR (4)
+#define TAPE_DRIVE_PADDING (262144)
+#define TAPE_DRIVE_GET_ABSOLUTE_BLK (1048576)
+#define TAPE_DRIVE_GET_LOGICAL_BLK (2097152)
+#define TAPE_DRIVE_REPORT_SMKS (524288)
+#define TAPE_DRIVE_SELECT (2)
+#define TAPE_DRIVE_SET_EOT_WZ_SIZE (4194304)
+#define TAPE_DRIVE_TAPE_CAPACITY (256)
+#define TAPE_DRIVE_TAPE_REMAINING (512)
+#define TAPE_DRIVE_VARIABLE_BLOCK (2048)
+#define TAPE_DRIVE_WRITE_PROTECT (4096)
+#define TAPE_DRIVE_ABS_BLK_IMMED (-2147475456)
+#define TAPE_DRIVE_ABSOLUTE_BLK (-2147479552)
+#define TAPE_DRIVE_END_OF_DATA (-2147418112)
+#define TAPE_DRIVE_FILEMARKS (-2147221504)
+#define TAPE_DRIVE_LOAD_UNLOAD (-2147483647)
+#define TAPE_DRIVE_LOAD_UNLD_IMMED (-2147483616)
+#define TAPE_DRIVE_LOCK_UNLOCK (-2147483644)
+#define TAPE_DRIVE_LOCK_UNLK_IMMED (-2147483520)
+#define TAPE_DRIVE_LOG_BLK_IMMED (-2147450880)
+#define TAPE_DRIVE_LOGICAL_BLK (-2147467264)
+#define TAPE_DRIVE_RELATIVE_BLKS (-2147352576)
+#define TAPE_DRIVE_REVERSE_POSITION (-2143289344)
+#define TAPE_DRIVE_REWIND_IMMEDIATE (-2147483640)
+#define TAPE_DRIVE_SEQUENTIAL_FMKS (-2146959360)
+#define TAPE_DRIVE_SEQUENTIAL_SMKS (-2145386496)
+#define TAPE_DRIVE_SET_BLOCK_SIZE (-2147483632)
+#define TAPE_DRIVE_SET_COMPRESSION (-2147483136)
+#define TAPE_DRIVE_SET_ECC (-2147483392)
+#define TAPE_DRIVE_SET_PADDING (-2147482624)
+#define TAPE_DRIVE_SET_REPORT_SMKS (-2147481600)
+#define TAPE_DRIVE_SETMARKS (-2146435072)
+#define TAPE_DRIVE_SPACE_IMMEDIATE (-2139095040)
+#define TAPE_DRIVE_TENSION (-2147483646)
+#define TAPE_DRIVE_TENSION_IMMED (-2147483584)
+#define TAPE_DRIVE_WRITE_FILEMARKS (-2113929216)
+#define TAPE_DRIVE_WRITE_LONG_FMKS (-2013265920)
+#define TAPE_DRIVE_WRITE_MARK_IMMED (-1879048192)
+#define TAPE_DRIVE_WRITE_SETMARKS (-2130706432)
+#define TAPE_DRIVE_WRITE_SHORT_FMKS (-2080374784)
+
+/* Standard rights */
+#define STANDARD_RIGHTS_REQUIRED (0xf0000L)
+#define STANDARD_RIGHTS_WRITE (0x20000L)
+#define STANDARD_RIGHTS_READ (0x20000L)
+#define STANDARD_RIGHTS_EXECUTE (0x20000L)
+#define STANDARD_RIGHTS_ALL (0x1f0000L)
+#define SPECIFIC_RIGHTS_ALL (0xffffL)
+
+/* ACCESS_MASK */
+#define MAXIMUM_ALLOWED (0x2000000L)
+#define GENERIC_ALL (0x10000000L)
+
+/* SID */
+#define SECURITY_NULL_RID (0L)
+#define SECURITY_WORLD_RID (0L)
+#define SECURITY_LOCAL_RID (0L)
+#define SECURITY_CREATOR_OWNER_RID (0L)
+#define SECURITY_CREATOR_GROUP_RID (0x1L)
+#define SECURITY_DIALUP_RID (0x1L)
+#define SECURITY_NETWORK_RID (0x2L)
+#define SECURITY_BATCH_RID (0x3L)
+#define SECURITY_INTERACTIVE_RID (0x4L)
+#define SECURITY_LOGON_IDS_RID (0x5L)
+#define SECURITY_LOGON_IDS_RID_COUNT (0x3L)
+#define SECURITY_SERVICE_RID (0x6L)
+#define SECURITY_LOCAL_SYSTEM_RID (0x12L)
+#define SECURITY_BUILTIN_DOMAIN_RID (0x20L)
+#define DOMAIN_USER_RID_ADMIN (0x1f4L)
+#define DOMAIN_USER_RID_GUEST (0x1f5L)
+#define DOMAIN_GROUP_RID_ADMINS (0x200L)
+#define DOMAIN_GROUP_RID_USERS (0x201L)
+#define DOMAIN_ALIAS_RID_ADMINS (0x220L)
+#define DOMAIN_ALIAS_RID_USERS (0x221L)
+#define DOMAIN_ALIAS_RID_GUESTS (0x222L)
+#define DOMAIN_ALIAS_RID_POWER_USERS (0x223L)
+#define DOMAIN_ALIAS_RID_ACCOUNT_OPS (0x224L)
+#define DOMAIN_ALIAS_RID_SYSTEM_OPS (0x225L)
+#define DOMAIN_ALIAS_RID_PRINT_OPS (0x226L)
+#define DOMAIN_ALIAS_RID_BACKUP_OPS (0x227L)
+#define DOMAIN_ALIAS_RID_REPLICATOR (0x228L)
+
+/* TOKEN_GROUPS structure */
+#define SE_GROUP_MANDATORY (0x1L)
+#define SE_GROUP_ENABLED_BY_DEFAULT (0x2L)
+#define SE_GROUP_ENABLED (0x4L)
+#define SE_GROUP_OWNER (0x8L)
+#define SE_GROUP_LOGON_ID (0xc0000000L)
+
+/* ACL Defines */
+#define ACL_REVISION (2)
+
+/* ACE_HEADER structure */
+#define ACCESS_ALLOWED_ACE_TYPE (0x0)
+#define ACCESS_DENIED_ACE_TYPE (0x1)
+#define SYSTEM_AUDIT_ACE_TYPE (0x2)
+#define SYSTEM_ALARM_ACE_TYPE (0x3)
+
+/* ACE flags in the ACE_HEADER structure */
+#define OBJECT_INHERIT_ACE (0x1)
+#define CONTAINER_INHERIT_ACE (0x2)
+#define NO_PROPAGATE_INHERIT_ACE (0x4)
+#define INHERIT_ONLY_ACE (0x8)
+#define SUCCESSFUL_ACCESS_ACE_FLAG (0x40)
+#define FAILED_ACCESS_ACE_FLAG (0x80)
+
+/* SECURITY_DESCRIPTOR_CONTROL */
+#define SECURITY_DESCRIPTOR_REVISION (1)
+#define SECURITY_DESCRIPTOR_MIN_LENGTH (20)
+#define SE_OWNER_DEFAULTED (1)
+#define SE_GROUP_DEFAULTED (2)
+#define SE_DACL_PRESENT (4)
+#define SE_DACL_DEFAULTED (8)
+#define SE_SACL_PRESENT (16)
+#define SE_SACL_DEFAULTED (32)
+#define SE_SELF_RELATIVE (32768)
+
+/* PRIVILEGE_SET */
+#define SE_PRIVILEGE_ENABLED_BY_DEFAULT (0x1L)
+#define SE_PRIVILEGE_ENABLED (0x2L)
+#define SE_PRIVILEGE_USED_FOR_ACCESS (0x80000000L)
+#define PRIVILEGE_SET_ALL_NECESSARY (0x1)
+
+/* OPENFILENAME structure */
+#define OFN_ALLOWMULTISELECT (0x200)
+#define OFN_CREATEPROMPT (0x2000)
+#define OFN_ENABLEHOOK (0x20)
+#define OFN_ENABLETEMPLATE (0x40)
+#define OFN_ENABLETEMPLATEHANDLE (0x80)
+#define OFN_EXPLORER (0x80000)
+#define OFN_EXTENSIONDIFFERENT (0x400)
+#define OFN_FILEMUSTEXIST (0x1000)
+#define OFN_HIDEREADONLY (0x4)
+#define OFN_LONGNAMES (0x200000)
+#define OFN_NOCHANGEDIR (0x8)
+#define OFN_NODEREFERENCELINKS (0x100000)
+#define OFN_NOLONGNAMES (0x40000)
+#define OFN_NONETWORKBUTTON (0x20000)
+#define OFN_NOREADONLYRETURN (0x8000)
+#define OFN_NOTESTFILECREATE (0x10000)
+#define OFN_NOVALIDATE (0x100)
+#define OFN_OVERWRITEPROMPT (0x2)
+#define OFN_PATHMUSTEXIST (0x800)
+#define OFN_READONLY (0x1)
+#define OFN_SHAREAWARE (0x4000)
+#define OFN_SHOWHELP (0x10)
+
+/* SHAREVISTRING message */
+#define OFN_SHAREFALLTHROUGH (0x2)
+#define OFN_SHARENOWARN (0x1)
+#define OFN_SHAREWARN (0)
+
+/* Open/Save notifications */
+#define CDN_INITDONE (0xfffffda7)
+#define CDN_SELCHANGE (0xfffffda6)
+#define CDN_FOLDERCHANGE (0xfffffda5)
+#define CDN_SHAREVIOLATION (0xfffffda4)
+#define CDN_HELP (0xfffffda3)
+#define CDN_FILEOK (0xfffffda2)
+#define CDN_TYPECHANGE (0xfffffda1)
+
+/* Open/Save messages */
+#define CDM_GETFILEPATH (0x465)
+#define CDM_GETFOLDERIDLIST (0x467)
+#define CDM_GETFOLDERPATH (0x466)
+#define CDM_GETSPEC (0x464)
+#define CDM_HIDECONTROL (0x469)
+#define CDM_SETCONTROLTEXT (0x468)
+#define CDM_SETDEFEXT (0x46a)
+
+/* CHOOSECOLOR structure */
+#define CC_ENABLEHOOK (0x10)
+#define CC_ENABLETEMPLATE (0x20)
+#define CC_ENABLETEMPLATEHANDLE (0x40)
+#define CC_FULLOPEN (0x2)
+#define CC_PREVENTFULLOPEN (0x4)
+#define CC_RGBINIT (0x1)
+#define CC_SHOWHELP (0x8)
+#define CC_SOLIDCOLOR (0x80)
+
+/* FINDREPLACE structure */
+#define FR_DIALOGTERM (0x40)
+#define FR_DOWN (0x1)
+#define FR_ENABLEHOOK (0x100)
+#define FR_ENABLETEMPLATE (0x200)
+#define FR_ENABLETEMPLATEHANDLE (0x2000)
+#define FR_FINDNEXT (0x8)
+#define FR_HIDEUPDOWN (0x4000)
+#define FR_HIDEMATCHCASE (0x8000)
+#define FR_HIDEWHOLEWORD (0x10000)
+#define FR_MATCHCASE (0x4)
+#define FR_NOMATCHCASE (0x800)
+#define FR_NOUPDOWN (0x400)
+#define FR_NOWHOLEWORD (0x1000)
+#define FR_REPLACE (0x10)
+#define FR_REPLACEALL (0x20)
+#define FR_SHOWHELP (0x80)
+#define FR_WHOLEWORD (0x2)
+
+/* CHOOSEFONT structure */
+#define CF_APPLY (0x200L)
+#define CF_ANSIONLY (0x400L)
+#define CF_BOTH (0x3)
+#define CF_TTONLY (0x40000L)
+#define CF_EFFECTS (0x100L)
+#define CF_ENABLEHOOK (0x8L)
+#define CF_ENABLETEMPLATE (0x10L)
+#define CF_ENABLETEMPLATEHANDLE (0x20L)
+#define CF_FIXEDPITCHONLY (0x4000L)
+#define CF_FORCEFONTEXIST (0x10000L)
+#define CF_INITTOLOGFONTSTRUCT (0x40L)
+#define CF_LIMITSIZE (0x2000L)
+#define CF_NOOEMFONTS (0x800L)
+#define CF_NOFACESEL (0x80000L)
+#define CF_NOSCRIPTSEL (0x800000L)
+#define CF_NOSTYLESEL (0x100000L)
+#define CF_NOSIZESEL (0x200000L)
+#define CF_NOSIMULATIONS (0x1000L)
+#define CF_NOVECTORFONTS (0x800L)
+#define CF_NOVERTFONTS (0x1000000L)
+#define CF_PRINTERFONTS (0x2)
+#define CF_SCALABLEONLY (0x20000L)
+#define CF_SCREENFONTS (0x1)
+#define CF_SCRIPTSONLY (0x400L)
+#define CF_SELECTSCRIPT (0x400000L)
+#define CF_SHOWHELP (0x4L)
+#define CF_USESTYLE (0x80L)
+#define CF_WYSIWYG (0x8000L)
+#define BOLD_FONTTYPE (0x100)
+#define ITALIC_FONTTYPE (0x200)
+#define PRINTER_FONTTYPE (0x4000)
+#define REGULAR_FONTTYPE (0x400)
+#define SCREEN_FONTTYPE (0x2000)
+#define SIMULATED_FONTTYPE (0x8000)
+
+/* Common dialog messages */
+#define COLOROKSTRINGW L"commdlg_ColorOK"
+#define FILEOKSTRINGW L"commdlg_FileNameOK"
+#define FINDMSGSTRINGW L"commdlg_FindReplace"
+#define HELPMSGSTRINGW L"commdlg_help"
+#define LBSELCHSTRINGW L"commdlg_LBSelChangedNotify"
+#define SETRGBSTRINGW L"commdlg_SetRGBColor"
+#define SHAREVISTRINGW L"commdlg_ShareViolation"
+#define COLOROKSTRINGA "commdlg_ColorOK"
+#define FILEOKSTRINGA "commdlg_FileNameOK"
+#define FINDMSGSTRINGA "commdlg_FindReplace"
+#define HELPMSGSTRINGA "commdlg_help"
+#define LBSELCHSTRINGA "commdlg_LBSelChangedNotify"
+#define SETRGBSTRINGA "commdlg_SetRGBColor"
+#define SHAREVISTRINGA "commdlg_ShareViolation"
+#ifdef UNICODE
+#define COLOROKSTRING COLOROKSTRINGW
+#define FILEOKSTRING FILEOKSTRINGW
+#define FINDMSGSTRING FINDMSGSTRINGW
+#define HELPMSGSTRING HELPMSGSTRINGW
+#define LBSELCHSTRING LBSELCHSTRINGW
+#define SETRGBSTRING SETRGBSTRINGW
+#define SHAREVISTRING SHAREVISTRINGW
+#else
+#define COLOROKSTRING COLOROKSTRINGA
+#define FILEOKSTRING FILEOKSTRINGA
+#define FINDMSGSTRING FINDMSGSTRINGA
+#define HELPMSGSTRING HELPMSGSTRINGA
+#define LBSELCHSTRING LBSELCHSTRINGA
+#define SETRGBSTRING SETRGBSTRINGA
+#define SHAREVISTRING SHAREVISTRINGA
+#endif
+
+/* LBSELCHSTRING message */
+#define CD_LBSELCHANGE (0)
+#define CD_LBSELADD (2)
+#define CD_LBSELSUB (1)
+#define CD_LBSELNOITEMS (-1)
+
+/* DEVNAMES structure */
+#define DN_DEFAULTPRN (1)
+
+/* PRINTDLG structure */
+#define PD_ALLPAGES (0)
+#define PD_COLLATE (16)
+#define PD_DISABLEPRINTTOFILE (524288)
+#define PD_ENABLEPRINTHOOK (4096)
+#define PD_ENABLEPRINTTEMPLATE (16384)
+#define PD_ENABLEPRINTTEMPLATEHANDLE (65536)
+#define PD_ENABLESETUPHOOK (8192)
+#define PD_ENABLESETUPTEMPLATE (32768)
+#define PD_ENABLESETUPTEMPLATEHANDLE (131072)
+#define PD_HIDEPRINTTOFILE (1048576)
+#define PD_NOPAGENUMS (8)
+#define PD_NOSELECTION (4)
+#define PD_NOWARNING (128)
+#define PD_PAGENUMS (2)
+#define PD_PRINTSETUP (64)
+#define PD_PRINTTOFILE (32)
+#define PD_RETURNDC (256)
+#define PD_RETURNDEFAULT (1024)
+#define PD_RETURNIC (512)
+#define PD_SELECTION (1)
+#define PD_SHOWHELP (2048)
+#define PD_USEDEVMODECOPIES (262144)
+#define PD_USEDEVMODECOPIESANDCOLLATE (262144)
+
+/* PAGESETUPDLG structure */
+#define PSD_DEFAULTMINMARGINS (0)
+#define PSD_DISABLEMARGINS (16)
+#define PSD_DISABLEORIENTATION (256)
+#define PSD_DISABLEPAGEPAINTING (524288)
+#define PSD_DISABLEPAPER (512)
+#define PSD_DISABLEPRINTER (32)
+#define PSD_ENABLEPAGEPAINTHOOK (262144)
+#define PSD_ENABLEPAGESETUPHOOK (8192)
+#define PSD_ENABLEPAGESETUPTEMPLATE (32768)
+#define PSD_ENABLEPAGESETUPTEMPLATEHANDLE (131072)
+#define PSD_INHUNDREDTHSOFMILLIMETERS (8)
+#define PSD_INTHOUSANDTHSOFINCHES (4)
+#define PSD_INWININIINTLMEASURE (0)
+#define PSD_MARGINS (2)
+#define PSD_MINMARGINS (1)
+#define PSD_NOWARNING (128)
+#define PSD_RETURNDEFAULT (1024)
+#define PSD_SHOWHELP (2048)
+
+/* WM_SHOWWINDOW message */
+#define SW_OTHERUNZOOM (4)
+#define SW_OTHERZOOM (2)
+#define SW_PARENTCLOSING (1)
+#define SW_PARENTOPENING (3)
+
+/* Virtual Key codes */
+#define VK_LBUTTON (1)
+#define VK_RBUTTON (2)
+#define VK_CANCEL (3)
+#define VK_MBUTTON (4)
+#define VK_BACK (8)
+#define VK_TAB (9)
+#define VK_CLEAR (12)
+#define VK_RETURN (13)
+#define VK_SHIFT (16)
+#define VK_CONTROL (17)
+#define VK_MENU (18)
+#define VK_PAUSE (19)
+#define VK_CAPITAL (20)
+#define VK_ESCAPE (27)
+#define VK_SPACE (32)
+#define VK_PRIOR (33)
+#define VK_NEXT (34)
+#define VK_END (35)
+#define VK_HOME (36)
+#define VK_LEFT (37)
+#define VK_UP (38)
+#define VK_RIGHT (39)
+#define VK_DOWN (40)
+#define VK_SELECT (41)
+#define VK_PRINT (42)
+#define VK_EXECUTE (43)
+#define VK_SNAPSHOT (44)
+#define VK_INSERT (45)
+#define VK_DELETE (46)
+#define VK_HELP (47)
+#define VK_0 (48)
+#define VK_1 (49)
+#define VK_2 (50)
+#define VK_3 (51)
+#define VK_4 (52)
+#define VK_5 (53)
+#define VK_6 (54)
+#define VK_7 (55)
+#define VK_8 (56)
+#define VK_9 (57)
+#define VK_A (65)
+#define VK_B (66)
+#define VK_C (67)
+#define VK_D (68)
+#define VK_E (69)
+#define VK_F (70)
+#define VK_G (71)
+#define VK_H (72)
+#define VK_I (73)
+#define VK_J (74)
+#define VK_K (75)
+#define VK_L (76)
+#define VK_M (77)
+#define VK_N (78)
+#define VK_O (79)
+#define VK_P (80)
+#define VK_Q (81)
+#define VK_R (82)
+#define VK_S (83)
+#define VK_T (84)
+#define VK_U (85)
+#define VK_V (86)
+#define VK_W (87)
+#define VK_X (88)
+#define VK_Y (89)
+#define VK_Z (90)
+#define VK_NUMPAD0 (96)
+#define VK_NUMPAD1 (97)
+#define VK_NUMPAD2 (98)
+#define VK_NUMPAD3 (99)
+#define VK_NUMPAD4 (100)
+#define VK_NUMPAD5 (101)
+#define VK_NUMPAD6 (102)
+#define VK_NUMPAD7 (103)
+#define VK_NUMPAD8 (104)
+#define VK_NUMPAD9 (105)
+#define VK_MULTIPLY (106)
+#define VK_ADD (107)
+#define VK_SEPARATOR (108)
+#define VK_SUBTRACT (109)
+#define VK_DECIMAL (110)
+#define VK_DIVIDE (111)
+#define VK_F1 (112)
+#define VK_F2 (113)
+#define VK_F3 (114)
+#define VK_F4 (115)
+#define VK_F5 (116)
+#define VK_F6 (117)
+#define VK_F7 (118)
+#define VK_F8 (119)
+#define VK_F9 (120)
+#define VK_F10 (121)
+#define VK_F11 (122)
+#define VK_F12 (123)
+#define VK_F13 (124)
+#define VK_F14 (125)
+#define VK_F15 (126)
+#define VK_F16 (127)
+#define VK_F17 (128)
+#define VK_F18 (129)
+#define VK_F19 (130)
+#define VK_F20 (131)
+#define VK_F21 (132)
+#define VK_F22 (133)
+#define VK_F23 (134)
+#define VK_F24 (135)
+
+/* GetAsyncKeyState */
+#define VK_NUMLOCK (144)
+#define VK_SCROLL (145)
+#define VK_LSHIFT (160)
+#define VK_LCONTROL (162)
+#define VK_LMENU (164)
+#define VK_RSHIFT (161)
+#define VK_RCONTROL (163)
+#define VK_RMENU (165)
+
+/* ImmGetVirtualKey */
+#define VK_PROCESSKEY (229)
+
+/* Keystroke Message Flags */
+#define KF_ALTDOWN (8192)
+#define KF_DLGMODE (2048)
+#define KF_EXTENDED (256)
+#define KF_MENUMODE (4096)
+#define KF_REPEAT (16384)
+#define KF_UP (32768)
+
+/* GetKeyboardLayoutName */
+#define KL_NAMELENGTH (9)
+
+/* WM_ACTIVATE message */
+#define WA_ACTIVE (1)
+#define WA_CLICKACTIVE (2)
+#define WA_INACTIVE (0)
+
+/* WM_ACTIVATE message */
+#define PWR_CRITICALRESUME (3)
+#define PWR_SUSPENDREQUEST (1)
+#define PWR_SUSPENDRESUME (2)
+#define PWR_FAIL (-1)
+#define PWR_OK (1)
+
+/* WM_NOTIFYFORMAT message */
+#define NF_QUERY (3)
+#define NF_REQUERY (4)
+#define NFR_ANSI (1)
+#define NFR_UNICODE (2)
+
+/* WM_SIZING message */
+#define WMSZ_BOTTOM (6)
+#define WMSZ_BOTTOMLEFT (7)
+#define WMSZ_BOTTOMRIGHT (8)
+#define WMSZ_LEFT (1)
+#define WMSZ_RIGHT (2)
+#define WMSZ_TOP (3)
+#define WMSZ_TOPLEFT (4)
+#define WMSZ_TOPRIGHT (5)
+
+/* WM_MOUSEACTIVATE message */
+#define MA_ACTIVATE (1)
+#define MA_ACTIVATEANDEAT (2)
+#define MA_NOACTIVATE (3)
+#define MA_NOACTIVATEANDEAT (4)
+
+/* WM_SIZE message */
+#define SIZE_MAXHIDE (4)
+#define SIZE_MAXIMIZED (2)
+#define SIZE_MAXSHOW (3)
+#define SIZE_MINIMIZED (1)
+#define SIZE_RESTORED (0)
+
+/* WM_NCCALCSIZE message */
+#define WVR_ALIGNTOP (16)
+#define WVR_ALIGNLEFT (32)
+#define WVR_ALIGNBOTTOM (64)
+#define WVR_ALIGNRIGHT (128)
+#define WVR_HREDRAW (256)
+#define WVR_VREDRAW (512)
+#define WVR_REDRAW (768)
+#define WVR_VALIDRECTS (1024)
+
+/* WM_NCHITTEST message */
+#define HTBOTTOM (15)
+#define HTBOTTOMLEFT (16)
+#define HTBOTTOMRIGHT (17)
+#define HTCAPTION (2)
+#define HTCLIENT (1)
+#define HTERROR (-2)
+#define HTGROWBOX (4)
+#define HTHSCROLL (6)
+#define HTLEFT (10)
+#define HTMENU (5)
+#define HTNOWHERE (0)
+#define HTREDUCE (8)
+#define HTRIGHT (11)
+#define HTSIZE (4)
+#define HTSYSMENU (3)
+#define HTTOP (12)
+#define HTTOPLEFT (13)
+#define HTTOPRIGHT (14)
+#define HTTRANSPARENT (-1)
+#define HTVSCROLL (7)
+#define HTZOOM (9)
+
+/* Mouse messages */
+#define MK_CONTROL (8)
+#define MK_LBUTTON (1)
+#define MK_MBUTTON (16)
+#define MK_RBUTTON (2)
+#define MK_SHIFT (4)
+
+/* WNDCLASS structure */
+#define CS_BYTEALIGNCLIENT (4096)
+#define CS_BYTEALIGNWINDOW (8192)
+#define CS_CLASSDC (64)
+#define CS_DBLCLKS (8)
+#define CS_GLOBALCLASS (16384)
+#define CS_HREDRAW (2)
+#define CS_KEYCVTWINDOW (4)
+#define CS_NOCLOSE (512)
+#define CS_NOKEYCVT (256)
+#define CS_OWNDC (32)
+#define CS_PARENTDC (128)
+#define CS_SAVEBITS (2048)
+#define CS_VREDRAW (1)
+#define DLGWINDOWEXTRA (30)
+
+/* ACCEL structure */
+#define FALT (16)
+#define FCONTROL (8)
+#define FNOINVERT (2)
+#define FSHIFT (4)
+#define FVIRTKEY (1)
+
+/* MENUITEMINFO structure */
+#define MIIM_CHECKMARKS (8)
+#define MIIM_DATA (32)
+#define MIIM_ID (2)
+#define MIIM_STATE (1)
+#define MIIM_SUBMENU (4)
+#define MIIM_TYPE (16)
+#define MFT_BITMAP (0x4L)
+#define MFT_MENUBARBREAK (0x20L)
+#define MFT_MENUBREAK (0x40L)
+#define MFT_OWNERDRAW (0x100L)
+#define MFT_RADIOCHECK (0x200L)
+#define MFT_RIGHTJUSTIFY (0x4000L)
+#define MFT_SEPARATOR (0x800L)
+#define MFT_STRING (0L)
+#define MFS_CHECKED (0x8L)
+#define MFS_DEFAULT (0x1000L)
+#define MFS_DISABLED (0x3L)
+#define MFS_ENABLED (0L)
+#define MFS_GRAYED (0x3L)
+#define MFS_HILITE (0x80L)
+#define MFS_UNCHECKED (0L)
+#define MFS_UNHILITE (0L)
+
+/* SERIALKEYS structure */
+#define SERKF_AVAILABLE (2)
+#define SERKF_INDICATOR (4)
+#define SERKF_SERIALKEYSON (1)
+
+/* FILTERKEYS structure */
+#define FKF_AVAILABLE (2)
+#define FKF_CLICKON (64)
+#define FKF_FILTERKEYSON (1)
+#define FKF_HOTKEYACTIVE (4)
+#define FKF_HOTKEYSOUND (16)
+#define FKF_CONFIRMHOTKEY (8)
+#define FKF_INDICATOR (32)
+
+/* HELPINFO structure */
+#define HELPINFO_MENUITEM (2)
+#define HELPINFO_WINDOW (1)
+
+/* WM_PRINT message */
+#define PRF_CHECKVISIBLE (0x1L)
+#define PRF_CHILDREN (0x10L)
+#define PRF_CLIENT (0x4L)
+#define PRF_ERASEBKGND (0x8L)
+#define PRF_NONCLIENT (0x2L)
+#define PRF_OWNED (0x20L)
+
+/* MapWindowPoints */
+#define HWND_DESKTOP ((HWND)0)
+
+/* WM_SYSCOMMAND message */
+#define SC_CLOSE (61536)
+#define SC_CONTEXTHELP (61824)
+#define SC_DEFAULT (61792)
+#define SC_HOTKEY (61776)
+#define SC_HSCROLL (61568)
+#define SC_KEYMENU (61696)
+#define SC_MAXIMIZE (61488)
+#define SC_ZOOM (61488)
+#define SC_MINIMIZE (61472)
+#define SC_ICON (61472)
+#define SC_MONITORPOWER (61808)
+#define SC_MOUSEMENU (61584)
+#define SC_MOVE (61456)
+#define SC_NEXTWINDOW (61504)
+#define SC_PREVWINDOW (61520)
+#define SC_RESTORE (61728)
+#define SC_SCREENSAVE (61760)
+#define SC_SIZE (61440)
+#define SC_TASKLIST (61744)
+#define SC_VSCROLL (61552)
+
+/* DM_GETDEFID message */
+#define DC_HASDEFID (21323)
+
+/* WM_GETDLGCODE message */
+#define DLGC_BUTTON (8192)
+#define DLGC_DEFPUSHBUTTON (16)
+#define DLGC_HASSETSEL (8)
+#define DLGC_RADIOBUTTON (64)
+#define DLGC_STATIC (256)
+#define DLGC_UNDEFPUSHBUTTON (32)
+#define DLGC_WANTALLKEYS (4)
+#define DLGC_WANTARROWS (1)
+#define DLGC_WANTCHARS (128)
+#define DLGC_WANTMESSAGE (4)
+#define DLGC_WANTTAB (2)
+
+/* EM_SETMARGINS message */
+#define EC_LEFTMARGIN (1)
+#define EC_RIGHTMARGIN (2)
+#define EC_USEFONTINFO (65535)
+
+/* LB_SETCOUNT message */
+#define LB_ERR (-1)
+#define LB_ERRSPACE (-2)
+#define LB_OKAY (0)
+
+/* CB_DIR message */
+#define CB_ERR (-1)
+#define CB_ERRSPACE (-2)
+
+/* WM_IME_CONTROL message */
+#define IMC_GETCANDIDATEPOS (7)
+#define IMC_GETCOMPOSITIONFONT (9)
+#define IMC_GETCOMPOSITIONWINDOW (11)
+#define IMC_GETSTATUSWINDOWPOS (15)
+#define IMC_CLOSESTATUSWINDOW (33)
+#define IMC_OPENSTATUSWINDOW (34)
+#define IMC_SETCANDIDATEPOS (8)
+#define IMC_SETCOMPOSITIONFONT (10)
+#define IMC_SETCOMPOSITIONWINDOW (12)
+#define IMC_SETSTATUSWINDOWPOS (16)
+
+/* WM_IME_CONTROL message */
+#define IMN_CHANGECANDIDATE (3)
+#define IMN_CLOSECANDIDATE (4)
+#define IMN_CLOSESTATUSWINDOW (1)
+#define IMN_GUIDELINE (13)
+#define IMN_OPENCANDIDATE (5)
+#define IMN_OPENSTATUSWINDOW (2)
+#define IMN_SETCANDIDATEPOS (9)
+#define IMN_SETCOMPOSITIONFONT (10)
+#define IMN_SETCOMPOSITIONWINDOW (11)
+#define IMN_SETCONVERSIONMODE (6)
+#define IMN_SETOPENSTATUS (8)
+#define IMN_SETSENTENCEMODE (7)
+#define IMN_SETSTATUSWINDOWPOS (12)
+#define IMN_PRIVATE (14)
+
+/* STICKYKEYS structure */
+#define SKF_AUDIBLEFEEDBACK (64)
+#define SKF_AVAILABLE (2)
+#define SKF_CONFIRMHOTKEY (8)
+#define SKF_HOTKEYACTIVE (4)
+#define SKF_HOTKEYSOUND (16)
+#define SKF_INDICATOR (32)
+#define SKF_STICKYKEYSON (1)
+#define SKF_TRISTATE (128)
+#define SKF_TWOKEYSOFF (256)
+
+/* MOUSEKEYS structure */
+#define MKF_AVAILABLE (2)
+#define MKF_CONFIRMHOTKEY (8)
+#define MKF_HOTKEYACTIVE (4)
+#define MKF_HOTKEYSOUND (16)
+#define MKF_INDICATOR (32)
+#define MKF_MOUSEKEYSON (1)
+#define MKF_MODIFIERS (64)
+#define MKF_REPLACENUMBERS (128)
+
+/* SOUNDSENTRY structure */
+#define SSF_AVAILABLE (2)
+#define SSF_SOUNDSENTRYON (1)
+#define SSTF_BORDER (2)
+#define SSTF_CHARS (1)
+#define SSTF_DISPLAY (3)
+#define SSTF_NONE (0)
+#define SSGF_DISPLAY (3)
+#define SSGF_NONE (0)
+#define SSWF_CUSTOM (4)
+#define SSWF_DISPLAY (3)
+#define SSWF_NONE (0)
+#define SSWF_TITLE (1)
+#define SSWF_WINDOW (2)
+
+/* ACCESSTIMEOUT structure */
+#define ATF_ONOFFFEEDBACK (2)
+#define ATF_TIMEOUTON (1)
+
+/* HIGHCONTRAST structure */
+#define HCF_AVAILABLE (2)
+#define HCF_CONFIRMHOTKEY (8)
+#define HCF_HIGHCONTRASTON (1)
+#define HCF_HOTKEYACTIVE (4)
+#define HCF_HOTKEYAVAILABLE (64)
+#define HCF_HOTKEYSOUND (16)
+#define HCF_INDICATOR (32)
+
+/* TOGGLEKEYS structure */
+#define TKF_AVAILABLE (2)
+#define TKF_CONFIRMHOTKEY (8)
+#define TKF_HOTKEYACTIVE (4)
+#define TKF_HOTKEYSOUND (16)
+#define TKF_TOGGLEKEYSON (1)
+
+/* Installable Policy */
+#define PP_DISPLAYERRORS (1)
+
+/* SERVICE_INFO structure */
+#define RESOURCEDISPLAYTYPE_DOMAIN (1)
+#define RESOURCEDISPLAYTYPE_FILE (4)
+#define RESOURCEDISPLAYTYPE_GENERIC (0)
+#define RESOURCEDISPLAYTYPE_GROUP (5)
+#define RESOURCEDISPLAYTYPE_SERVER (2)
+#define RESOURCEDISPLAYTYPE_SHARE (3)
+
+/* KEY_EVENT_RECORD structure */
+#define CAPSLOCK_ON (128)
+#define ENHANCED_KEY (256)
+#define LEFT_ALT_PRESSED (2)
+#define LEFT_CTRL_PRESSED (8)
+#define NUMLOCK_ON (32)
+#define RIGHT_ALT_PRESSED (1)
+#define RIGHT_CTRL_PRESSED (4)
+#define SCROLLLOCK_ON (64)
+#define SHIFT_PRESSED (16)
+
+/* MOUSE_EVENT_RECORD structure */
+#define FROM_LEFT_1ST_BUTTON_PRESSED (1)
+#define RIGHTMOST_BUTTON_PRESSED (2)
+#define FROM_LEFT_2ND_BUTTON_PRESSED (4)
+#define FROM_LEFT_3RD_BUTTON_PRESSED (8)
+#define FROM_LEFT_4TH_BUTTON_PRESSED (16)
+#define DOUBLE_CLICK (2)
+#define MOUSE_MOVED (1)
+
+/* INPUT_RECORD structure */
+#define KEY_EVENT (1)
+#define MOUSE_EVENT (2)
+#define WINDOW_BUFFER_SIZE_EVENT (4)
+#define MENU_EVENT (8)
+#define FOCUS_EVENT (16)
+
+/* BITMAPINFOHEADER structure */
+#define BI_RGB (0L)
+#define BI_RLE8 (1L)
+#define BI_RLE4 (2L)
+#define BI_BITFIELDS (3L)
+
+/* Extensions to OpenGL */
+
+/* ChoosePixelFormat */
+#define PFD_DRAW_TO_WINDOW (0x4)
+#define PFD_DRAW_TO_BITMAP (0x8)
+#define PFD_SUPPORT_GDI (0x10)
+#define PFD_SUPPORT_OPENGL (0x20)
+#define PFD_DOUBLEBUFFER (0x1)
+#define PFD_STEREO (0x2)
+#define PFD_DOUBLEBUFFER_DONTCARE (0x40000000)
+#define PFD_STEREO_DONTCARE (0x80000000)
+#define PFD_TYPE_RGBA (0)
+#define PFD_TYPE_COLORINDEX (1)
+#define PFD_MAIN_PLANE (0)
+#define PFD_OVERLAY_PLANE (1)
+#define PFD_UNDERLAY_PLANE (-1)
+
+/* wglUseFontOutlines */
+#define WGL_FONT_LINES (0)
+#define WGL_FONT_POLYGONS (1)
+
+/* LAYERPLANEDESCRIPTOR structure */
+
+/* PIXELFORMATDESCRIPTOR structure */
+#define PFD_GENERIC_FORMAT (0x40)
+#define PFD_NEED_PALETTE (0x80)
+#define PFD_NEED_SYSTEM_PALETTE (0x100)
+#define PFD_SWAP_COPY (0x400)
+#define PFD_SWAP_EXCHANGE (0x200)
+
+/* TEXTMETRIC structure */
+#define TMPF_FIXED_PITCH (0x1)
+#define TMPF_VECTOR (0x2)
+#define TMPF_TRUETYPE (0x4)
+#define TMPF_DEVICE (0x8)
+
+/* --------------------- old stuff, need to organize! --------------- */
+
+/* BEGINNING of windowsx.h stuff from old headers: */
+#define __CRACK_VOID_F(fn,args) (void)(fn args)
+#define __CRACK_BOOL_F(fn,args) (BOOL)(fn args)
+#define __CRACK_HMENU_F(fn,args) (HMENU)(fn args)
+#define __CRACK_HWND_F(fn,args) (HWND)(fn args)
+#define __CRACK_LONG_F(fn, args) (LRESULT)(fn args)
+#define __CRACK_ZERO_F(fn, args) (fn args,0)
+#define GetFirstChild(h) GetTopWindow(h)
+#define GetNextSibling(h) GetWindow(h, GW_HWNDNEXT)
+#define GetWindowID(h) GetDlgCtrlID(h)
+#define SubclassWindow(h, p) (SetWindowLong(h, GWL_WNDPROC, p))
+
+#define GET_WM_COMMAND_CMD(w, l) HIWORD(w)
+#define GET_WM_COMMAND_ID(w, l) LOWORD(w)
+#define GET_WM_CTLCOLOR_HDC(w, l, msg) (HDC)(w)
+#define GET_WM_CTLCOLOR_HWND(w, l, msg) (HWND)(l)
+#define GET_WM_HSCROLL_CODE(w, l) LOWORD(w)
+#define GET_WM_HSCROLL_HWND(w, l) (HWND)(l)
+#define GET_WM_HSCROLL_POS(w, l) HIWORD(w)
+#define GET_WM_MDIACTIVATE_FACTIVATE(h, a, b) (b == (LONG)h)
+#define GET_WM_MDIACTIVATE_HWNDACTIVATE(a, b) (HWND)(b)
+#define GET_WM_MDIACTIVATE_HWNDDEACT(a, b) (HWND)(a)
+#define GET_WM_VSCROLL_CODE(w, l) LOWORD(w)
+#define GET_WM_VSCROLL_HWND(w, l) (HWND)(l)
+#define GET_WM_VSCROLL_POS(w, l) HIWORD(w)
+
+#define FORWARD_WM_CLOSE(h, fn) __CRACK_VOID_F(fn,(h, WM_CLOSE, 0, 0))
+#define FORWARD_WM_COMMAND(h, id, c, n, fn) __CRACK_VOID_F(fn,(h, WM_COMMAND, MAKEWPARAM(id,n), (LPARAM)c))
+#define FORWARD_WM_CREATE(h, p, fn) __CRACK_BOOL_F(fn,(h, WM_CREATE, 0, (LPARAM)p))
+#define FORWARD_WM_DESTROY(h, fn) __CRACK_VOID_F(fn,(h, WM_DESTROY, 0, 0))
+#define FORWARD_WM_ENABLE(h, e, fn) __CRACK_VOID_F(fn,(h, WM_ENABLE, (WPARAM)e, 0))
+#define FORWARD_WM_INITDIALOG(h, c, l, fn) __CRACK_BOOL_F(fn,(h, WM_INITDIALOG, (WPARAM)c, l))
+#define FORWARD_WM_MDICASCADE(h, c, fn) __CRACK_BOOL_F(fn,(h, WM_MDICASCADE, (WPARAM)c, 0))
+#define FORWARD_WM_MDIDESTROY(h, d, fn) __CRACK_VOID_F(fn,(h, WM_MDIDESTROY, (WPARAM)d, 0))
+#define FORWARD_WM_MDIGETACTIVE(h, fn) __CRACK_HWND_F(fn,(h, WM_MDIGETACTIVE, 0, 0))
+#define FORWARD_WM_MDIICONARRANGE(h, fn) __CRACK_VOID_F(fn,(h, WM_MDIICONARRANGE, 0, 0))
+#define FORWARD_WM_MDISETMENU(h, fr, hf, hw, fn) __CRACK_HMENU_F(fn,(h, WM_MDISETMENU, (WPARAM)((fr) ? (hf) : 0), (LPARAM)(hw)))
+#define FORWARD_WM_MDITILE(h, c, fn) __CRACK_BOOL_F(fn,(h, WM_MDITILE, (WPARAM)(c), 0))
+#define FORWARD_WM_PAINT(h, fn) __CRACK_VOID_F(fn,(h, WM_PAINT, 0, 0))
+#define FORWARD_WM_QUERYENDSESSION(h, fn) __CRACK_BOOL_F(fn,(h, WM_QUERYENDSESSION, 0, 0))
+#define FORWARD_WM_SIZE(h, state, cx, cy, fn) __CRACK_VOID_F(fn,(h, WM_SIZE, (WPARAM)state, MAKELPARAM(cx, cy)))
+#define FORWARD_WM_SYSCOMMAND(h, c, x, y, fn) __CRACK_VOID_F(fn,(h, WM_SYSCOMMAND, (WPARAM)c, MAKELPARAM(x, y)))
+
+#define HANDLE_WM_CLOSE(h, w, l, fn) __CRACK_ZERO_F(fn,(h));
+#define HANDLE_WM_COMMAND(h, w, l, fn) __CRACK_ZERO_F(fn,(h, SEXT_LOWORD(w), (HWND)l, HIWORD(w)))
+#define HANDLE_WM_CREATE(h, w, l, fn) (LRESULT)((fn(h, (CREATESTRUCT *)l)) ? 0 : -1)
+#define HANDLE_WM_DESTROY(h, w, l, fn) __CRACK_ZERO_F(fn,(h))
+#define HANDLE_WM_ENABLE(h, w, l, fn) __CRACK_ZERO_F(fn,(h, (BOOL)w))
+#define HANDLE_WM_INITDIALOG(h, w, l, fn) __CRACK_LONG_F(fn,(h, (HWND)w, l))
+#define HANDLE_WM_MDICASCADE(h, w, l, fn) __CRACK_LONG_F(fn, (h, (UINT)w)
+#define HANDLE_WM_MDIDESTROY(h, w, l, fn) __CRACK_ZERO_F(fn,(h, (HWND)w))
+#define HANDLE_WM_MDIGETACTIVE(h, w, l, fn) __CRACK_LONG_F(fn,(h))
+#define HANDLE_WM_MDIICONARRANGE(h, w, l, fn) __CRACK_ZERO_F(fn,(h))
+#define HANDLE_WM_MDISETMENU(h, w, l, fn) __CRACK_LONG_F(fn,(h, (BOOL)w, (HMENU)w, (HMENU)l)
+#define HANDLE_WM_MDITILE(h, w, l, fn) __CRACK_LONG_F(fn,(h, (UINT)w))
+#define HANDLE_WM_PAINT(h, w, l, fn) __CRACK_ZERO_F(fn,(h))
+#define HANDLE_WM_QUERYENDSESSION(h, w, l, fn) MAKELRESULT(fn(h), 0)
+#define HANDLE_WM_SIZE(h, w, l, fn) __CRACK_ZERO_F(fn,(h, (UINT)w, SEXT_LOWORD(l), SEXT_HIWORD(l)))
+#define HANDLE_WM_SYSCOMMAND(h, w, l, fn) __CRACK_ZERO_F(fn,(h, (UINT)w, SEXT_LOWORD(l), SEXT_HIWORD(l)))
+
+/* Totally disgusting! get wParam and lParam from the environment ! */
+#define HANDLE_MSG(h, message, fn) case message: return HANDLE_##message(h, wParam, lParam, fn)
+
+/* END OF windowsx.h stuff from old headers */
+/* ------------------------------------------------------------------ */
+/* BEGINNING of shellapi.h stuff from old headers */
+
+#define SE_ERR_SHARE 26
+#define SE_ERR_ASSOCINCOMPLETE 27
+#define SE_ERR_DDETIMEOUT 28
+#define SE_ERR_DDEFAIL 29
+#define SE_ERR_DDEBUSY 30
+#define SE_ERR_NOASSOC 31
+
+/* END OF shellapi.h stuff from old headers */
+/* ------------------------------------------------------------------ */
+/* From ddeml.h in old Cygnus headers */
+
+#define XCLASS_BOOL 0x1000
+#define XCLASS_DATA 0x2000
+#define XCLASS_FLAGS 0x4000
+#define XCLASS_MASK 0xfc00
+#define XCLASS_NOTIFICATION 0x8000
+#define XTYPF_NOBLOCK 0x0002
+#define XTYP_ADVDATA 0x4010
+#define XTYP_ADVREQ 0x2022
+#define XTYP_ADVSTART 0x1030
+#define XTYP_ADVSTOP 0x8040
+#define XTYP_CONNECT 0x1062
+#define XTYP_CONNECT_CONFIRM 0x8072
+#define XTYP_DISCONNECT 0x80c2
+#define XTYP_EXECUTE 0x4050
+#define XTYP_POKE 0x4090
+#define XTYP_REQUEST 0x20b0
+#define XTYP_WILDCONNECT 0x20E2
+#define XTYP_REGISTER 0x80A2
+#define XTYP_ERROR 0x8002
+#define XTYP_XACT_COMPLETE 0x8080
+#define XTYP_UNREGISTER 0x80D2
+
+#define DMLERR_DLL_USAGE 0x4004
+#define DMLERR_INVALIDPARAMETER 0x4006
+#define DMLERR_NOTPROCESSED 0x4009
+#define DMLERR_POSTMSG_FAILED 0x400c
+#define DMLERR_SERVER_DIED 0x400e
+#define DMLERR_SYS_ERROR 0x400f
+#define DMLERR_BUSY 0x4001
+#define DMLERR_DATAACKTIMEOUT 0x4002
+#define DMLERR_ADVACKTIMEOUT 0x4000
+#define DMLERR_DLL_NOT_INITIALIZED 0x4003
+#define DMLERR_LOW_MEMORY 0x4007
+#define DMLERR_MEMORY_ERROR 0x4008
+#define DMLERR_POKEACKTIMEOUT 0x400b
+#define DMLERR_NO_CONV_ESTABLISHED 0x400a
+#define DMLERR_REENTRANCY 0x400d
+#define DMLERR_UNFOUND_QUEUE_ID 0x4011
+#define DMLERR_UNADVACKTIMEOUT 0x4010
+#define DMLERR_EXECACKTIMEOUT 0x4005
+#define DDE_FACK 0x8000
+#define DDE_FNOTPROCESSED 0x0000
+
+#define DNS_REGISTER 0x0001
+#define DNS_UNREGISTER 0x0002
+#define CP_WINANSI 1004
+#define CP_WINUNICODE 1200
+#define EXPENTRY CALLBACK
+#define APPCLASS_STANDARD 0x00000000
+
+/* End of stuff from ddeml.h in old Cygnus headers */
+/* ----------------------------------------------- */
+
+#define BKMODE_LAST (2)
+
+#define CTLCOLOR_MSGBOX (0)
+#define CTLCOLOR_EDIT (1)
+#define CTLCOLOR_LISTBOX (2)
+#define CTLCOLOR_BTN (3)
+#define CTLCOLOR_DLG (4)
+#define CTLCOLOR_SCROLLBAR (5)
+#define CTLCOLOR_STATIC (6)
+#define CTLCOLOR_MAX (7)
+
+#define META_SETMAPMODE (0x0103L)
+#define META_SETWINDOWORG (0x020BL)
+#define META_SETWINDOWEXT (0x020CL)
+
+#define POLYFILL_LAST (2)
+
+#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_GUARD_PAGE_VIOLATION (0x80000001L)
+#define STATUS_DATATYPE_MISALIGNMENT (0x80000002L)
+#define STATUS_BREAKPOINT (0x80000003L)
+#define STATUS_SINGLE_STEP (0x80000004L)
+#define STATUS_IN_PAGE_ERROR (0xC0000006L)
+#define STATUS_INVALID_HANDLE (0xC0000008L)
+#define STATUS_ILLEGAL_INSTRUCTION (0xC000001DL)
+#define STATUS_NONCONTINUABLE_EXCEPTION (0xC0000025L)
+#define STATUS_INVALID_DISPOSITION (0xC0000026L)
+#define STATUS_ARRAY_BOUNDS_EXCEEDED (0xC000008CL)
+#define STATUS_FLOAT_DENORMAL_OPERAND (0xC000008DL)
+#define STATUS_FLOAT_DIVIDE_BY_ZERO (0xC000008EL)
+#define STATUS_FLOAT_INEXACT_RESULT (0xC000008FL)
+#define STATUS_FLOAT_INVALID_OPERATION (0xC0000090L)
+#define STATUS_FLOAT_OVERFLOW (0xC0000091L)
+#define STATUS_FLOAT_STACK_CHECK (0xC0000092L)
+#define STATUS_FLOAT_UNDERFLOW (0xC0000093L)
+#define STATUS_INTEGER_DIVIDE_BY_ZERO (0xC0000094L)
+#define STATUS_INTEGER_OVERFLOW (0xC0000095L)
+#define STATUS_PRIVILEGED_INSTRUCTION (0xC0000096L)
+#define STATUS_STACK_OVERFLOW (0xC00000FDL)
+#define STATUS_CONTROL_C_EXIT (0xC000013AL)
+
+#define EXCEPTION_CTRL_C
+
+#define PROCESSOR_ARCHITECTURE_INTEL 0
+#define PROCESSOR_ARCHITECTURE_MIPS 1
+#define PROCESSOR_ARCHITECTURE_ALPHA 2
+#define PROCESSOR_ARCHITECTURE_PPC 3
+
+#define FreeModule(h) FreeLibrary(h)
+#define MakeProcInstance(p,i) (p)
+#define FreeProcInstance(p) (p)
+
+#define _fmemcpy memcpy
+
+/* Used by wxwindows. */
+#define SIZEFULLSCREEN SIZE_MAXIMIZED
+#define SIZENORMAL SIZE_RESTORED
+#define SIZEICONIC SIZE_MINIMIZED
+#define NPLOGPALETTE PLOGPALETTE
+
+/* In the old winnt.h */
+#if 0
+#ifdef __ANAL__
+#define DECLARE_HANDLE(h) struct h##__ { int dummy; }; typedef struct h##__ *h
+#else
+#define DECLARE_HANDLE(h) typedef void *h
+#endif
+DECLARE_HANDLE(HANDLE);
+#endif
+
+#ifdef __PPC__
+#define CONTEXT_CONTROL 1L
+#define CONTEXT_FLOATING_POINT 2L
+#define CONTEXT_INTEGER 4L
+#define CONTEXT_DEBUG_REGISTERS 8L
+
+#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_FLOATING_POINT | CONTEXT_INTEGER)
+#define CONTEXT_DEBUGGER (CONTEXT_FULL)
+
+#else /* x86 */
+/* The doc refered me to winnt.h, so I had to look... */
+#define SIZE_OF_80387_REGISTERS 80
+
+/* Values for contextflags */
+#define CONTEXT_i386 0x10000
+#define CONTEXT_CONTROL (CONTEXT_i386 | 1)
+#define CONTEXT_INTEGER (CONTEXT_i386 | 2)
+#define CONTEXT_SEGMENTS (CONTEXT_i386 | 4)
+#define CONTEXT_FLOATING_POINT (CONTEXT_i386 | 8)
+#define CONTEXT_DEBUG_REGISTERS (CONTEXT_i386 | 0x10)
+#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS)
+
+/* our own invention */
+#define FLAG_TRACE_BIT 0x100
+#define CONTEXT_DEBUGGER (CONTEXT_FULL | CONTEXT_FLOATING_POINT)
+
+#endif
+
+#define ASCIICHAR AsciiChar
+#define FAR
+#define PACKED __attribute__((packed))
+
+#define FILTER_TEMP_DUPLICATE_ACCOUNT (0x0001)
+#define FILTER_NORMAL_ACCOUNT (0x0002)
+#define FILTER_INTERDOMAIN_TRUST_ACCOUNT (0x0008)
+#define FILTER_WORKSTATION_TRUST_ACCOUNT (0x0010)
+#define FILTER_SERVER_TRUST_ACCOUNT (0x0020)
+
+#define LOGON32_LOGON_INTERACTIVE (0x02)
+#define LOGON32_LOGON_BATCH (0x04)
+#define LOGON32_LOGON_SERVICE (0x05)
+#define LOGON32_PROVIDER_DEFAULT (0x00)
+#define LOGON32_PROVIDER_WINNT35 (0x01)
+
+#define QID_SYNC 0xFFFFFFFF
+
+/* Magic numbers in PE executable header. */
+
+#define IMAGE_DOS_SIGNATURE (0x5a4d) /* e_magic field */
+#define IMAGE_NT_SIGNATURE (0x4550) /* nt_signature field */
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* _GNU_H_WINDOWS32_DEFINES */
--- /dev/null
+/*
+ Errors.h
+
+ Windows32 API error codes
+
+ Copyright (C) 1996 Free Software Foundation, Inc.
+
+ Author: Scott Christley <scottc@net-community.com>
+
+ This file is part of the Windows32 API Library.
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 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
+ Library General Public License for more details.
+
+ If you are interested in a warranty or support for this source code,
+ contact Scott Christley <scottc@net-community.com> for more information.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this library; see the file COPYING.LIB.
+ If not, write to the Free Software Foundation,
+ 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+*/
+
+#ifndef _GNU_H_WINDOWS32_ERROR
+#define _GNU_H_WINDOWS32_ERROR
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/* Numerical order */
+
+#define LZERROR_UNKNOWNALG (-8)
+#define LZERROR_BADVALUE (-7)
+#define LZERROR_GLOBLOCK (-6)
+#define LZERROR_GLOBALLOC (-5)
+#define LZERROR_WRITE (-4)
+#define LZERROR_READ (-3)
+#define LZERROR_BADOUTHANDLE (-2)
+#define LZERROR_BADINHANDLE (-1)
+#define NO_ERROR 0L
+#define ERROR_SUCCESS 0L
+#define ERROR_INVALID_FUNCTION 1L
+#define ERROR_FILE_NOT_FOUND 2L
+#define ERROR_PATH_NOT_FOUND 3L
+#define ERROR_TOO_MANY_OPEN_FILES 4L
+#define ERROR_ACCESS_DENIED 5L
+#define ERROR_INVALID_HANDLE 6L
+#define ERROR_ARENA_TRASHED 7L
+#define ERROR_NOT_ENOUGH_MEMORY 8L
+#define ERROR_INVALID_BLOCK 9L
+#define ERROR_BAD_ENVIRONMENT 10L
+#define ERROR_BAD_FORMAT 11L
+#define ERROR_INVALID_ACCESS 12L
+#define ERROR_INVALID_DATA 13L
+#define ERROR_OUTOFMEMORY 14L
+#define ERROR_INVALID_DRIVE 15L
+#define ERROR_CURRENT_DIRECTORY 16L
+#define ERROR_NOT_SAME_DEVICE 17L
+#define ERROR_NO_MORE_FILES 18L
+#define ERROR_WRITE_PROTECT 19L
+#define ERROR_BAD_UNIT 20L
+#define ERROR_NOT_READY 21L
+#define ERROR_BAD_COMMAND 22L
+#define ERROR_CRC 23L
+#define ERROR_BAD_LENGTH 24L
+#define ERROR_SEEK 25L
+#define ERROR_NOT_DOS_DISK 26L
+#define ERROR_SECTOR_NOT_FOUND 27L
+#define ERROR_OUT_OF_PAPER 28L
+#define ERROR_WRITE_FAULT 29L
+#define ERROR_READ_FAULT 30L
+#define ERROR_GEN_FAILURE 31L
+#define ERROR_SHARING_VIOLATION 32L
+#define ERROR_LOCK_VIOLATION 33L
+#define ERROR_WRONG_DISK 34L
+#define ERROR_SHARING_BUFFER_EXCEEDED 36L
+#define ERROR_HANDLE_EOF 38L
+#define ERROR_HANDLE_DISK_FULL 39L
+#define ERROR_NOT_SUPPORTED 50L
+#define ERROR_REM_NOT_LIST 51L
+#define ERROR_DUP_NAME 52L
+#define ERROR_BAD_NETPATH 53L
+#define ERROR_NETWORK_BUSY 54L
+#define ERROR_DEV_NOT_EXIST 55L
+#define ERROR_TOO_MANY_CMDS 56L
+#define ERROR_ADAP_HDW_ERR 57L
+#define ERROR_BAD_NET_RESP 58L
+#define ERROR_UNEXP_NET_ERR 59L
+#define ERROR_BAD_REM_ADAP 60L
+#define ERROR_PRINTQ_FULL 61L
+#define ERROR_NO_SPOOL_SPACE 62L
+#define ERROR_PRINT_CANCELLED 63L
+#define ERROR_NETNAME_DELETED 64L
+#define ERROR_NETWORK_ACCESS_DENIED 65L
+#define ERROR_BAD_DEV_TYPE 66L
+#define ERROR_BAD_NET_NAME 67L
+#define ERROR_TOO_MANY_NAMES 68L
+#define ERROR_TOO_MANY_SESS 69L
+#define ERROR_SHARING_PAUSED 70L
+#define ERROR_REQ_NOT_ACCEP 71L
+#define ERROR_REDIR_PAUSED 72L
+#define ERROR_FILE_EXISTS 80L
+#define ERROR_CANNOT_MAKE 82L
+#define ERROR_FAIL_I24 83L
+#define ERROR_OUT_OF_STRUCTURES 84L
+#define ERROR_ALREADY_ASSIGNED 85L
+#define ERROR_INVALID_PASSWORD 86L
+#define ERROR_INVALID_PARAMETER 87L
+#define ERROR_NET_WRITE_FAULT 88L
+#define ERROR_NO_PROC_SLOTS 89L
+#define ERROR_TOO_MANY_SEMAPHORES 100L
+#define ERROR_EXCL_SEM_ALREADY_OWNED 101L
+#define ERROR_SEM_IS_SET 102L
+#define ERROR_TOO_MANY_SEM_REQUESTS 103L
+#define ERROR_INVALID_AT_INTERRUPT_TIME 104L
+#define ERROR_SEM_OWNER_DIED 105L
+#define ERROR_SEM_USER_LIMIT 106L
+#define ERROR_DISK_CHANGE 107L
+#define ERROR_DRIVE_LOCKED 108L
+#define ERROR_BROKEN_PIPE 109L
+#define ERROR_OPEN_FAILED 110L
+#define ERROR_BUFFER_OVERFLOW 111L
+#define ERROR_DISK_FULL 112L
+#define ERROR_NO_MORE_SEARCH_HANDLES 113L
+#define ERROR_INVALID_TARGET_HANDLE 114L
+#define ERROR_INVALID_CATEGORY 117L
+#define ERROR_INVALID_VERIFY_SWITCH 118L
+#define ERROR_BAD_DRIVER_LEVEL 119L
+#define ERROR_CALL_NOT_IMPLEMENTED 120L
+#define ERROR_SEM_TIMEOUT 121L
+#define ERROR_INSUFFICIENT_BUFFER 122L
+#define ERROR_INVALID_NAME 123L
+#define ERROR_INVALID_LEVEL 124L
+#define ERROR_NO_VOLUME_LABEL 125L
+#define ERROR_MOD_NOT_FOUND 126L
+#define ERROR_PROC_NOT_FOUND 127L
+#define ERROR_WAIT_NO_CHILDREN 128L
+#define ERROR_CHILD_NOT_COMPLETE 129L
+#define ERROR_DIRECT_ACCESS_HANDLE 130L
+#define ERROR_NEGATIVE_SEEK 131L
+#define ERROR_SEEK_ON_DEVICE 132L
+#define ERROR_IS_JOIN_TARGET 133L
+#define ERROR_IS_JOINED 134L
+#define ERROR_IS_SUBSTED 135L
+#define ERROR_NOT_JOINED 136L
+#define ERROR_NOT_SUBSTED 137L
+#define ERROR_JOIN_TO_JOIN 138L
+#define ERROR_SUBST_TO_SUBST 139L
+#define ERROR_JOIN_TO_SUBST 140L
+#define ERROR_SUBST_TO_JOIN 141L
+#define ERROR_BUSY_DRIVE 142L
+#define ERROR_SAME_DRIVE 143L
+#define ERROR_DIR_NOT_ROOT 144L
+#define ERROR_DIR_NOT_EMPTY 145L
+#define ERROR_IS_SUBST_PATH 146L
+#define ERROR_IS_JOIN_PATH 147L
+#define ERROR_PATH_BUSY 148L
+#define ERROR_IS_SUBST_TARGET 149L
+#define ERROR_SYSTEM_TRACE 150L
+#define ERROR_INVALID_EVENT_COUNT 151L
+#define ERROR_TOO_MANY_MUXWAITERS 152L
+#define ERROR_INVALID_LIST_FORMAT 153L
+#define ERROR_LABEL_TOO_LONG 154L
+#define ERROR_TOO_MANY_TCBS 155L
+#define ERROR_SIGNAL_REFUSED 156L
+#define ERROR_DISCARDED 157L
+#define ERROR_NOT_LOCKED 158L
+#define ERROR_BAD_THREADID_ADDR 159L
+#define ERROR_BAD_ARGUMENTS 160L
+#define ERROR_BAD_PATHNAME 161L
+#define ERROR_SIGNAL_PENDING 162L
+#define ERROR_MAX_THRDS_REACHED 164L
+#define ERROR_LOCK_FAILED 167L
+#define ERROR_BUSY 170L
+#define ERROR_CANCEL_VIOLATION 173L
+#define ERROR_ATOMIC_LOCKS_NOT_SUPPORTED 174L
+#define ERROR_INVALID_SEGMENT_NUMBER 180L
+#define ERROR_INVALID_ORDINAL 182L
+#define ERROR_ALREADY_EXISTS 183L
+#define ERROR_INVALID_FLAG_NUMBER 186L
+#define ERROR_SEM_NOT_FOUND 187L
+#define ERROR_INVALID_STARTING_CODESEG 188L
+#define ERROR_INVALID_STACKSEG 189L
+#define ERROR_INVALID_MODULETYPE 190L
+#define ERROR_INVALID_EXE_SIGNATURE 191L
+#define ERROR_EXE_MARKED_INVALID 192L
+#define ERROR_BAD_EXE_FORMAT 193L
+#define ERROR_ITERATED_DATA_EXCEEDS_64k 194L
+#define ERROR_INVALID_MINALLOCSIZE 195L
+#define ERROR_DYNLINK_FROM_INVALID_RING 196L
+#define ERROR_IOPL_NOT_ENABLED 197L
+#define ERROR_INVALID_SEGDPL 198L
+#define ERROR_AUTODATASEG_EXCEEDS_64k 199L
+#define ERROR_RING2SEG_MUST_BE_MOVABLE 200L
+#define ERROR_RELOC_CHAIN_XEEDS_SEGLIM 201L
+#define ERROR_INFLOOP_IN_RELOC_CHAIN 202L
+#define ERROR_ENVVAR_NOT_FOUND 203L
+#define ERROR_NO_SIGNAL_SENT 205L
+#define ERROR_FILENAME_EXCED_RANGE 206L
+#define ERROR_RING2_STACK_IN_USE 207L
+#define ERROR_META_EXPANSION_TOO_LONG 208L
+#define ERROR_INVALID_SIGNAL_NUMBER 209L
+#define ERROR_THREAD_1_INACTIVE 210L
+#define ERROR_LOCKED 212L
+#define ERROR_TOO_MANY_MODULES 214L
+#define ERROR_NESTING_NOT_ALLOWED 215L
+#define ERROR_BAD_PIPE 230L
+#define ERROR_PIPE_BUSY 231L
+#define ERROR_NO_DATA 232L
+#define ERROR_PIPE_NOT_CONNECTED 233L
+#define ERROR_MORE_DATA 234L
+#define ERROR_VC_DISCONNECTED 240L
+#define ERROR_INVALID_EA_NAME 254L
+#define ERROR_EA_LIST_INCONSISTENT 255L
+#define ERROR_NO_MORE_ITEMS 259L
+#define ERROR_CANNOT_COPY 266L
+#define ERROR_DIRECTORY 267L
+#define ERROR_EAS_DIDNT_FIT 275L
+#define ERROR_EA_FILE_CORRUPT 276L
+#define ERROR_EA_TABLE_FULL 277L
+#define ERROR_INVALID_EA_HANDLE 278L
+#define ERROR_EAS_NOT_SUPPORTED 282L
+#define ERROR_NOT_OWNER 288L
+#define ERROR_TOO_MANY_POSTS 298L
+#define ERROR_PARTIAL_COPY 299L
+#define ERROR_MR_MID_NOT_FOUND 317L
+#define ERROR_INVALID_ADDRESS 487L
+#define ERROR_ARITHMETIC_OVERFLOW 534L
+#define ERROR_PIPE_CONNECTED 535L
+#define ERROR_PIPE_LISTENING 536L
+#define ERROR_EA_ACCESS_DENIED 994L
+#define ERROR_OPERATION_ABORTED 995L
+#define ERROR_IO_INCOMPLETE 996L
+#define ERROR_IO_PENDING 997L
+#define ERROR_NOACCESS 998L
+#define ERROR_SWAPERROR 999L
+#define ERROR_STACK_OVERFLOW 1001L
+#define ERROR_INVALID_MESSAGE 1002L
+#define ERROR_CAN_NOT_COMPLETE 1003L
+#define ERROR_INVALID_FLAGS 1004L
+#define ERROR_UNRECOGNIZED_VOLUME 1005L
+#define ERROR_FILE_INVALID 1006L
+#define ERROR_FULLSCREEN_MODE 1007L
+#define ERROR_NO_TOKEN 1008L
+#define ERROR_BADDB 1009L
+#define ERROR_BADKEY 1010L
+#define ERROR_CANTOPEN 1011L
+#define ERROR_CANTREAD 1012L
+#define ERROR_CANTWRITE 1013L
+#define ERROR_REGISTRY_RECOVERED 1014L
+#define ERROR_REGISTRY_CORRUPT 1015L
+#define ERROR_REGISTRY_IO_FAILED 1016L
+#define ERROR_NOT_REGISTRY_FILE 1017L
+#define ERROR_KEY_DELETED 1018L
+#define ERROR_NO_LOG_SPACE 1019L
+#define ERROR_KEY_HAS_CHILDREN 1020L
+#define ERROR_CHILD_MUST_BE_VOLATILE 1021L
+#define ERROR_NOTIFY_ENUM_DIR 1022L
+#define ERROR_DEPENDENT_SERVICES_RUNNING 1051L
+#define ERROR_INVALID_SERVICE_CONTROL 1052L
+#define ERROR_SERVICE_REQUEST_TIMEOUT 1053L
+#define ERROR_SERVICE_NO_THREAD 1054L
+#define ERROR_SERVICE_DATABASE_LOCKED 1055L
+#define ERROR_SERVICE_ALREADY_RUNNING 1056L
+#define ERROR_INVALID_SERVICE_ACCOUNT 1057L
+#define ERROR_SERVICE_DISABLED 1058L
+#define ERROR_CIRCULAR_DEPENDENCY 1059L
+#define ERROR_SERVICE_DOES_NOT_EXIST 1060L
+#define ERROR_SERVICE_CANNOT_ACCEPT_CTRL 1061L
+#define ERROR_SERVICE_NOT_ACTIVE 1062L
+#define ERROR_FAILED_SERVICE_CONTROLLER_CONNECT 1063L
+#define ERROR_EXCEPTION_IN_SERVICE 1064L
+#define ERROR_DATABASE_DOES_NOT_EXIST 1065L
+#define ERROR_SERVICE_SPECIFIC_ERROR 1066L
+#define ERROR_PROCESS_ABORTED 1067L
+#define ERROR_SERVICE_DEPENDENCY_FAIL 1068L
+#define ERROR_SERVICE_LOGON_FAILED 1069L
+#define ERROR_SERVICE_START_HANG 1070L
+#define ERROR_INVALID_SERVICE_LOCK 1071L
+#define ERROR_SERVICE_MARKED_FOR_DELETE 1072L
+#define ERROR_SERVICE_EXISTS 1073L
+#define ERROR_ALREADY_RUNNING_LKG 1074L
+#define ERROR_SERVICE_DEPENDENCY_DELETED 1075L
+#define ERROR_BOOT_ALREADY_ACCEPTED 1076L
+#define ERROR_SERVICE_NEVER_STARTED 1077L
+#define ERROR_DUPLICATE_SERVICE_NAME 1078L
+#define ERROR_END_OF_MEDIA 1100L
+#define ERROR_FILEMARK_DETECTED 1101L
+#define ERROR_BEGINNING_OF_MEDIA 1102L
+#define ERROR_SETMARK_DETECTED 1103L
+#define ERROR_NO_DATA_DETECTED 1104L
+#define ERROR_PARTITION_FAILURE 1105L
+#define ERROR_INVALID_BLOCK_LENGTH 1106L
+#define ERROR_DEVICE_NOT_PARTITIONED 1107L
+#define ERROR_UNABLE_TO_LOCK_MEDIA 1108L
+#define ERROR_UNABLE_TO_UNLOAD_MEDIA 1109L
+#define ERROR_MEDIA_CHANGED 1110L
+#define ERROR_BUS_RESET 1111L
+#define ERROR_NO_MEDIA_IN_DRIVE 1112L
+#define ERROR_NO_UNICODE_TRANSLATION 1113L
+#define ERROR_DLL_INIT_FAILED 1114L
+#define ERROR_SHUTDOWN_IN_PROGRESS 1115L
+#define ERROR_NO_SHUTDOWN_IN_PROGRESS 1116L
+#define ERROR_IO_DEVICE 1117L
+#define ERROR_SERIAL_NO_DEVICE 1118L
+#define ERROR_IRQ_BUSY 1119L
+#define ERROR_MORE_WRITES 1120L
+#define ERROR_COUNTER_TIMEOUT 1121L
+#define ERROR_FLOPPY_ID_MARK_NOT_FOUND 1122L
+#define ERROR_FLOPPY_WRONG_CYLINDER 1123L
+#define ERROR_FLOPPY_UNKNOWN_ERROR 1124L
+#define ERROR_FLOPPY_BAD_REGISTERS 1125L
+#define ERROR_DISK_RECALIBRATE_FAILED 1126L
+#define ERROR_DISK_OPERATION_FAILED 1127L
+#define ERROR_DISK_RESET_FAILED 1128L
+#define ERROR_EOM_OVERFLOW 1129L
+#define ERROR_NOT_ENOUGH_SERVER_MEMORY 1130L
+#define ERROR_POSSIBLE_DEADLOCK 1131L
+#define ERROR_MAPPED_ALIGNMENT 1132L
+#define ERROR_SET_POWER_STATE_VETOED 1140L
+#define ERROR_SET_POWER_STATE_FAILED 1141L
+#define ERROR_OLD_WIN_VERSION 1150L
+#define ERROR_APP_WRONG_OS 1151L
+#define ERROR_SINGLE_INSTANCE_APP 1152L
+#define ERROR_RMODE_APP 1153L
+#define ERROR_INVALID_DLL 1154L
+#define ERROR_NO_ASSOCIATION 1155L
+#define ERROR_DDE_FAIL 1156L
+#define ERROR_DLL_NOT_FOUND 1157L
+#define ERROR_BAD_USERNAME 2202L
+#define ERROR_NOT_CONNECTED 2250L
+#define ERROR_OPEN_FILES 2401L
+#define ERROR_ACTIVE_CONNECTIONS 2402L
+#define ERROR_DEVICE_IN_USE 2404L
+#define ERROR_BAD_DEVICE 1200L
+#define ERROR_CONNECTION_UNAVAIL 1201L
+#define ERROR_DEVICE_ALREADY_REMEMBERED 1202L
+#define ERROR_NO_NET_OR_BAD_PATH 1203L
+#define ERROR_BAD_PROVIDER 1204L
+#define ERROR_CANNOT_OPEN_PROFILE 1205L
+#define ERROR_BAD_PROFILE 1206L
+#define ERROR_NOT_CONTAINER 1207L
+#define ERROR_EXTENDED_ERROR 1208L
+#define ERROR_INVALID_GROUPNAME 1209L
+#define ERROR_INVALID_COMPUTERNAME 1210L
+#define ERROR_INVALID_EVENTNAME 1211L
+#define ERROR_INVALID_DOMAINNAME 1212L
+#define ERROR_INVALID_SERVICENAME 1213L
+#define ERROR_INVALID_NETNAME 1214L
+#define ERROR_INVALID_SHARENAME 1215L
+#define ERROR_INVALID_PASSWORDNAME 1216L
+#define ERROR_INVALID_MESSAGENAME 1217L
+#define ERROR_INVALID_MESSAGEDEST 1218L
+#define ERROR_SESSION_CREDENTIAL_CONFLICT 1219L
+#define ERROR_REMOTE_SESSION_LIMIT_EXCEEDED 1220L
+#define ERROR_DUP_DOMAINNAME 1221L
+#define ERROR_NO_NETWORK 1222L
+#define ERROR_CANCELLED 1223L
+#define ERROR_USER_MAPPED_FILE 1224L
+#define ERROR_CONNECTION_REFUSED 1225L
+#define ERROR_GRACEFUL_DISCONNECT 1226L
+#define ERROR_ADDRESS_ALREADY_ASSOCIATED 1227L
+#define ERROR_ADDRESS_NOT_ASSOCIATED 1228L
+#define ERROR_CONNECTION_INVALID 1229L
+#define ERROR_CONNECTION_ACTIVE 1230L
+#define ERROR_NETWORK_UNREACHABLE 1231L
+#define ERROR_HOST_UNREACHABLE 1232L
+#define ERROR_PROTOCOL_UNREACHABLE 1233L
+#define ERROR_PORT_UNREACHABLE 1234L
+#define ERROR_REQUEST_ABORTED 1235L
+#define ERROR_CONNECTION_ABORTED 1236L
+#define ERROR_RETRY 1237L
+#define ERROR_CONNECTION_COUNT_LIMIT 1238L
+#define ERROR_LOGIN_TIME_RESTRICTION 1239L
+#define ERROR_LOGIN_WKSTA_RESTRICTION 1240L
+#define ERROR_INCORRECT_ADDRESS 1241L
+#define ERROR_ALREADY_REGISTERED 1242L
+#define ERROR_SERVICE_NOT_FOUND 1243L
+#define ERROR_NOT_AUTHENTICATED 1244L
+#define ERROR_NOT_LOGGED_ON 1245L
+#define ERROR_CONTINUE 1246L
+#define ERROR_ALREADY_INITIALIZED 1247L
+#define ERROR_NO_MORE_DEVICES 1248L
+#define ERROR_NOT_ALL_ASSIGNED 1300L
+#define ERROR_SOME_NOT_MAPPED 1301L
+#define ERROR_NO_QUOTAS_FOR_ACCOUNT 1302L
+#define ERROR_LOCAL_USER_SESSION_KEY 1303L
+#define ERROR_NULL_LM_PASSWORD 1304L
+#define ERROR_UNKNOWN_REVISION 1305L
+#define ERROR_REVISION_MISMATCH 1306L
+#define ERROR_INVALID_OWNER 1307L
+#define ERROR_INVALID_PRIMARY_GROUP 1308L
+#define ERROR_NO_IMPERSONATION_TOKEN 1309L
+#define ERROR_CANT_DISABLE_MANDATORY 1310L
+#define ERROR_NO_LOGON_SERVERS 1311L
+#define ERROR_NO_SUCH_LOGON_SESSION 1312L
+#define ERROR_NO_SUCH_PRIVILEGE 1313L
+#define ERROR_PRIVILEGE_NOT_HELD 1314L
+#define ERROR_INVALID_ACCOUNT_NAME 1315L
+#define ERROR_USER_EXISTS 1316L
+#define ERROR_NO_SUCH_USER 1317L
+#define ERROR_GROUP_EXISTS 1318L
+#define ERROR_NO_SUCH_GROUP 1319L
+#define ERROR_MEMBER_IN_GROUP 1320L
+#define ERROR_MEMBER_NOT_IN_GROUP 1321L
+#define ERROR_LAST_ADMIN 1322L
+#define ERROR_WRONG_PASSWORD 1323L
+#define ERROR_ILL_FORMED_PASSWORD 1324L
+#define ERROR_PASSWORD_RESTRICTION 1325L
+#define ERROR_LOGON_FAILURE 1326L
+#define ERROR_ACCOUNT_RESTRICTION 1327L
+#define ERROR_INVALID_LOGON_HOURS 1328L
+#define ERROR_INVALID_WORKSTATION 1329L
+#define ERROR_PASSWORD_EXPIRED 1330L
+#define ERROR_ACCOUNT_DISABLED 1331L
+#define ERROR_NONE_MAPPED 1332L
+#define ERROR_TOO_MANY_LUIDS_REQUESTED 1333L
+#define ERROR_LUIDS_EXHAUSTED 1334L
+#define ERROR_INVALID_SUB_AUTHORITY 1335L
+#define ERROR_INVALID_ACL 1336L
+#define ERROR_INVALID_SID 1337L
+#define ERROR_INVALID_SECURITY_DESCR 1338L
+#define ERROR_BAD_INHERITANCE_ACL 1340L
+#define ERROR_SERVER_DISABLED 1341L
+#define ERROR_SERVER_NOT_DISABLED 1342L
+#define ERROR_INVALID_ID_AUTHORITY 1343L
+#define ERROR_ALLOTTED_SPACE_EXCEEDED 1344L
+#define ERROR_INVALID_GROUP_ATTRIBUTES 1345L
+#define ERROR_BAD_IMPERSONATION_LEVEL 1346L
+#define ERROR_CANT_OPEN_ANONYMOUS 1347L
+#define ERROR_BAD_VALIDATION_CLASS 1348L
+#define ERROR_BAD_TOKEN_TYPE 1349L
+#define ERROR_NO_SECURITY_ON_OBJECT 1350L
+#define ERROR_CANT_ACCESS_DOMAIN_INFO 1351L
+#define ERROR_INVALID_SERVER_STATE 1352L
+#define ERROR_INVALID_DOMAIN_STATE 1353L
+#define ERROR_INVALID_DOMAIN_ROLE 1354L
+#define ERROR_NO_SUCH_DOMAIN 1355L
+#define ERROR_DOMAIN_EXISTS 1356L
+#define ERROR_DOMAIN_LIMIT_EXCEEDED 1357L
+#define ERROR_INTERNAL_DB_CORRUPTION 1358L
+#define ERROR_INTERNAL_ERROR 1359L
+#define ERROR_GENERIC_NOT_MAPPED 1360L
+#define ERROR_BAD_DESCRIPTOR_FORMAT 1361L
+#define ERROR_NOT_LOGON_PROCESS 1362L
+#define ERROR_LOGON_SESSION_EXISTS 1363L
+#define ERROR_NO_SUCH_PACKAGE 1364L
+#define ERROR_BAD_LOGON_SESSION_STATE 1365L
+#define ERROR_LOGON_SESSION_COLLISION 1366L
+#define ERROR_INVALID_LOGON_TYPE 1367L
+#define ERROR_CANNOT_IMPERSONATE 1368L
+#define ERROR_RXACT_INVALID_STATE 1369L
+#define ERROR_RXACT_COMMIT_FAILURE 1370L
+#define ERROR_SPECIAL_ACCOUNT 1371L
+#define ERROR_SPECIAL_GROUP 1372L
+#define ERROR_SPECIAL_USER 1373L
+#define ERROR_MEMBERS_PRIMARY_GROUP 1374L
+#define ERROR_TOKEN_ALREADY_IN_USE 1375L
+#define ERROR_NO_SUCH_ALIAS 1376L
+#define ERROR_MEMBER_NOT_IN_ALIAS 1377L
+#define ERROR_MEMBER_IN_ALIAS 1378L
+#define ERROR_ALIAS_EXISTS 1379L
+#define ERROR_LOGON_NOT_GRANTED 1380L
+#define ERROR_TOO_MANY_SECRETS 1381L
+#define ERROR_SECRET_TOO_LONG 1382L
+#define ERROR_INTERNAL_DB_ERROR 1383L
+#define ERROR_TOO_MANY_CONTEXT_IDS 1384L
+#define ERROR_LOGON_TYPE_NOT_GRANTED 1385L
+#define ERROR_NT_CROSS_ENCRYPTION_REQUIRED 1386L
+#define ERROR_NO_SUCH_MEMBER 1387L
+#define ERROR_INVALID_MEMBER 1388L
+#define ERROR_TOO_MANY_SIDS 1389L
+#define ERROR_LM_CROSS_ENCRYPTION_REQUIRED 1390L
+#define ERROR_NO_INHERITANCE 1391L
+#define ERROR_FILE_CORRUPT 1392L
+#define ERROR_DISK_CORRUPT 1393L
+#define ERROR_NO_USER_SESSION_KEY 1394L
+#define ERROR_LICENSE_QUOTA_EXCEEDED 1395L
+#define ERROR_INVALID_WINDOW_HANDLE 1400L
+#define ERROR_INVALID_MENU_HANDLE 1401L
+#define ERROR_INVALID_CURSOR_HANDLE 1402L
+#define ERROR_INVALID_ACCEL_HANDLE 1403L
+#define ERROR_INVALID_HOOK_HANDLE 1404L
+#define ERROR_INVALID_DWP_HANDLE 1405L
+#define ERROR_TLW_WITH_WSCHILD 1406L
+#define ERROR_CANNOT_FIND_WND_CLASS 1407L
+#define ERROR_WINDOW_OF_OTHER_THREAD 1408L
+#define ERROR_HOTKEY_ALREADY_REGISTERED 1409L
+#define ERROR_CLASS_ALREADY_EXISTS 1410L
+#define ERROR_CLASS_DOES_NOT_EXIST 1411L
+#define ERROR_CLASS_HAS_WINDOWS 1412L
+#define ERROR_INVALID_INDEX 1413L
+#define ERROR_INVALID_ICON_HANDLE 1414L
+#define ERROR_PRIVATE_DIALOG_INDEX 1415L
+#define ERROR_LISTBOX_ID_NOT_FOUND 1416L
+#define ERROR_NO_WILDCARD_CHARACTERS 1417L
+#define ERROR_CLIPBOARD_NOT_OPEN 1418L
+#define ERROR_HOTKEY_NOT_REGISTERED 1419L
+#define ERROR_WINDOW_NOT_DIALOG 1420L
+#define ERROR_CONTROL_ID_NOT_FOUND 1421L
+#define ERROR_INVALID_COMBOBOX_MESSAGE 1422L
+#define ERROR_WINDOW_NOT_COMBOBOX 1423L
+#define ERROR_INVALID_EDIT_HEIGHT 1424L
+#define ERROR_DC_NOT_FOUND 1425L
+#define ERROR_INVALID_HOOK_FILTER 1426L
+#define ERROR_INVALID_FILTER_PROC 1427L
+#define ERROR_HOOK_NEEDS_HMOD 1428L
+#define ERROR_GLOBAL_ONLY_HOOK 1429L
+#define ERROR_JOURNAL_HOOK_SET 1430L
+#define ERROR_HOOK_NOT_INSTALLED 1431L
+#define ERROR_INVALID_LB_MESSAGE 1432L
+#define ERROR_SETCOUNT_ON_BAD_LB 1433L
+#define ERROR_LB_WITHOUT_TABSTOPS 1434L
+#define ERROR_DESTROY_OBJECT_OF_OTHER_THREAD 1435L
+#define ERROR_CHILD_WINDOW_MENU 1436L
+#define ERROR_NO_SYSTEM_MENU 1437L
+#define ERROR_INVALID_MSGBOX_STYLE 1438L
+#define ERROR_INVALID_SPI_VALUE 1439L
+#define ERROR_SCREEN_ALREADY_LOCKED 1440L
+#define ERROR_HWNDS_HAVE_DIFF_PARENT 1441L
+#define ERROR_NOT_CHILD_WINDOW 1442L
+#define ERROR_INVALID_GW_COMMAND 1443L
+#define ERROR_INVALID_THREAD_ID 1444L
+#define ERROR_NON_MDICHILD_WINDOW 1445L
+#define ERROR_POPUP_ALREADY_ACTIVE 1446L
+#define ERROR_NO_SCROLLBARS 1447L
+#define ERROR_INVALID_SCROLLBAR_RANGE 1448L
+#define ERROR_INVALID_SHOWWIN_COMMAND 1449L
+#define ERROR_NO_SYSTEM_RESOURCES 1450L
+#define ERROR_NONPAGED_SYSTEM_RESOURCES 1451L
+#define ERROR_PAGED_SYSTEM_RESOURCES 1452L
+#define ERROR_WORKING_SET_QUOTA 1453L
+#define ERROR_PAGEFILE_QUOTA 1454L
+#define ERROR_COMMITMENT_LIMIT 1455L
+#define ERROR_MENU_ITEM_NOT_FOUND 1456L
+#define ERROR_EVENTLOG_FILE_CORRUPT 1500L
+#define ERROR_EVENTLOG_CANT_START 1501L
+#define ERROR_LOG_FILE_FULL 1502L
+#define ERROR_EVENTLOG_FILE_CHANGED 1503L
+#define RPC_S_INVALID_STRING_BINDING 1700L
+#define RPC_S_WRONG_KIND_OF_BINDING 1701L
+#define RPC_S_INVALID_BINDING 1702L
+#define RPC_S_PROTSEQ_NOT_SUPPORTED 1703L
+#define RPC_S_INVALID_RPC_PROTSEQ 1704L
+#define RPC_S_INVALID_STRING_UUID 1705L
+#define RPC_S_INVALID_ENDPOINT_FORMAT 1706L
+#define RPC_S_INVALID_NET_ADDR 1707L
+#define RPC_S_NO_ENDPOINT_FOUND 1708L
+#define RPC_S_INVALID_TIMEOUT 1709L
+#define RPC_S_OBJECT_NOT_FOUND 1710L
+#define RPC_S_ALREADY_REGISTERED 1711L
+#define RPC_S_TYPE_ALREADY_REGISTERED 1712L
+#define RPC_S_ALREADY_LISTENING 1713L
+#define RPC_S_NO_PROTSEQS_REGISTERED 1714L
+#define RPC_S_NOT_LISTENING 1715L
+#define RPC_S_UNKNOWN_MGR_TYPE 1716L
+#define RPC_S_UNKNOWN_IF 1717L
+#define RPC_S_NO_BINDINGS 1718L
+#define RPC_S_NO_PROTSEQS 1719L
+#define RPC_S_CANT_CREATE_ENDPOINT 1720L
+#define RPC_S_OUT_OF_RESOURCES 1721L
+#define RPC_S_SERVER_UNAVAILABLE 1722L
+#define RPC_S_SERVER_TOO_BUSY 1723L
+#define RPC_S_INVALID_NETWORK_OPTIONS 1724L
+#define RPC_S_NO_CALL_ACTIVE 1725L
+#define RPC_S_CALL_FAILED 1726L
+#define RPC_S_CALL_FAILED_DNE 1727L
+#define RPC_S_PROTOCOL_ERROR 1728L
+#define RPC_S_UNSUPPORTED_TRANS_SYN 1730L
+#define RPC_S_UNSUPPORTED_TYPE 1732L
+#define RPC_S_INVALID_TAG 1733L
+#define RPC_S_INVALID_BOUND 1734L
+#define RPC_S_NO_ENTRY_NAME 1735L
+#define RPC_S_INVALID_NAME_SYNTAX 1736L
+#define RPC_S_UNSUPPORTED_NAME_SYNTAX 1737L
+#define RPC_S_UUID_NO_ADDRESS 1739L
+#define RPC_S_DUPLICATE_ENDPOINT 1740L
+#define RPC_S_UNKNOWN_AUTHN_TYPE 1741L
+#define RPC_S_MAX_CALLS_TOO_SMALL 1742L
+#define RPC_S_STRING_TOO_LONG 1743L
+#define RPC_S_PROTSEQ_NOT_FOUND 1744L
+#define RPC_S_PROCNUM_OUT_OF_RANGE 1745L
+#define RPC_S_BINDING_HAS_NO_AUTH 1746L
+#define RPC_S_UNKNOWN_AUTHN_SERVICE 1747L
+#define RPC_S_UNKNOWN_AUTHN_LEVEL 1748L
+#define RPC_S_INVALID_AUTH_IDENTITY 1749L
+#define RPC_S_UNKNOWN_AUTHZ_SERVICE 1750L
+#define EPT_S_INVALID_ENTRY 1751L
+#define EPT_S_CANT_PERFORM_OP 1752L
+#define EPT_S_NOT_REGISTERED 1753L
+#define RPC_S_NOTHING_TO_EXPORT 1754L
+#define RPC_S_INCOMPLETE_NAME 1755L
+#define RPC_S_INVALID_VERS_OPTION 1756L
+#define RPC_S_NO_MORE_MEMBERS 1757L
+#define RPC_S_NOT_ALL_OBJS_UNEXPORTED 1758L
+#define RPC_S_INTERFACE_NOT_FOUND 1759L
+#define RPC_S_ENTRY_ALREADY_EXISTS 1760L
+#define RPC_S_ENTRY_NOT_FOUND 1761L
+#define RPC_S_NAME_SERVICE_UNAVAILABLE 1762L
+#define RPC_S_INVALID_NAF_ID 1763L
+#define RPC_S_CANNOT_SUPPORT 1764L
+#define RPC_S_NO_CONTEXT_AVAILABLE 1765L
+#define RPC_S_INTERNAL_ERROR 1766L
+#define RPC_S_ZERO_DIVIDE 1767L
+#define RPC_S_ADDRESS_ERROR 1768L
+#define RPC_S_FP_DIV_ZERO 1769L
+#define RPC_S_FP_UNDERFLOW 1770L
+#define RPC_S_FP_OVERFLOW 1771L
+#define RPC_X_NO_MORE_ENTRIES 1772L
+#define RPC_X_SS_CHAR_TRANS_OPEN_FAIL 1773L
+#define RPC_X_SS_CHAR_TRANS_SHORT_FILE 1774L
+#define RPC_X_SS_IN_NULL_CONTEXT 1775L
+#define RPC_X_SS_CONTEXT_DAMAGED 1777L
+#define RPC_X_SS_HANDLES_MISMATCH 1778L
+#define RPC_X_SS_CANNOT_GET_CALL_HANDLE 1779L
+#define RPC_X_NULL_REF_POINTER 1780L
+#define RPC_X_ENUM_VALUE_OUT_OF_RANGE 1781L
+#define RPC_X_BYTE_COUNT_TOO_SMALL 1782L
+#define RPC_X_BAD_STUB_DATA 1783L
+#define ERROR_INVALID_USER_BUFFER 1784L
+#define ERROR_UNRECOGNIZED_MEDIA 1785L
+#define ERROR_NO_TRUST_LSA_SECRET 1786L
+#define ERROR_NO_TRUST_SAM_ACCOUNT 1787L
+#define ERROR_TRUSTED_DOMAIN_FAILURE 1788L
+#define ERROR_TRUSTED_RELATIONSHIP_FAILURE 1789L
+#define ERROR_TRUST_FAILURE 1790L
+#define RPC_S_CALL_IN_PROGRESS 1791L
+#define ERROR_NETLOGON_NOT_STARTED 1792L
+#define ERROR_ACCOUNT_EXPIRED 1793L
+#define ERROR_REDIRECTOR_HAS_OPEN_HANDLES 1794L
+#define ERROR_PRINTER_DRIVER_ALREADY_INSTALLED 1795L
+#define ERROR_UNKNOWN_PORT 1796L
+#define ERROR_UNKNOWN_PRINTER_DRIVER 1797L
+#define ERROR_UNKNOWN_PRINTPROCESSOR 1798L
+#define ERROR_INVALID_SEPARATOR_FILE 1799L
+#define ERROR_INVALID_PRIORITY 1800L
+#define ERROR_INVALID_PRINTER_NAME 1801L
+#define ERROR_PRINTER_ALREADY_EXISTS 1802L
+#define ERROR_INVALID_PRINTER_COMMAND 1803L
+#define ERROR_INVALID_DATATYPE 1804L
+#define ERROR_INVALID_ENVIRONMENT 1805L
+#define RPC_S_NO_MORE_BINDINGS 1806L
+#define ERROR_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT 1807L
+#define ERROR_NOLOGON_WORKSTATION_TRUST_ACCOUNT 1808L
+#define ERROR_NOLOGON_SERVER_TRUST_ACCOUNT 1809L
+#define ERROR_DOMAIN_TRUST_INCONSISTENT 1810L
+#define ERROR_SERVER_HAS_OPEN_HANDLES 1811L
+#define ERROR_RESOURCE_DATA_NOT_FOUND 1812L
+#define ERROR_RESOURCE_TYPE_NOT_FOUND 1813L
+#define ERROR_RESOURCE_NAME_NOT_FOUND 1814L
+#define ERROR_RESOURCE_LANG_NOT_FOUND 1815L
+#define ERROR_NOT_ENOUGH_QUOTA 1816L
+#define RPC_S_NO_INTERFACES 1817L
+#define RPC_S_CALL_CANCELLED 1818L
+#define RPC_S_BINDING_INCOMPLETE 1819L
+#define RPC_S_COMM_FAILURE 1820L
+#define RPC_S_UNSUPPORTED_AUTHN_LEVEL 1821L
+#define RPC_S_NO_PRINC_NAME 1822L
+#define RPC_S_NOT_RPC_ERROR 1823L
+#define RPC_S_UUID_LOCAL_ONLY 1824L
+#define RPC_S_SEC_PKG_ERROR 1825L
+#define RPC_S_NOT_CANCELLED 1826L
+#define RPC_X_INVALID_ES_ACTION 1827L
+#define RPC_X_WRONG_ES_VERSION 1828L
+#define RPC_X_WRONG_STUB_VERSION 1829L
+#define RPC_S_GROUP_MEMBER_NOT_FOUND 1898L
+#define EPT_S_CANT_CREATE 1899L
+#define RPC_S_INVALID_OBJECT 1900L
+#define ERROR_INVALID_TIME 1901L
+#define ERROR_INVALID_FORM_NAME 1902L
+#define ERROR_INVALID_FORM_SIZE 1903L
+#define ERROR_ALREADY_WAITING 1904L
+#define ERROR_PRINTER_DELETED 1905L
+#define ERROR_INVALID_PRINTER_STATE 1906L
+#define ERROR_PASSWORD_MUST_CHANGE 1907L
+#define ERROR_DOMAIN_CONTROLLER_NOT_FOUND 1908L
+#define ERROR_ACCOUNT_LOCKED_OUT 1909L
+#define ERROR_NO_BROWSER_SERVERS_FOUND 6118L
+#define ERROR_INVALID_PIXEL_FORMAT 2000L
+#define ERROR_BAD_DRIVER 2001L
+#define ERROR_INVALID_WINDOW_STYLE 2002L
+#define ERROR_METAFILE_NOT_SUPPORTED 2003L
+#define ERROR_TRANSFORM_NOT_SUPPORTED 2004L
+#define ERROR_CLIPPING_NOT_SUPPORTED 2005L
+#define ERROR_UNKNOWN_PRINT_MONITOR 3000L
+#define ERROR_PRINTER_DRIVER_IN_USE 3001L
+#define ERROR_SPOOL_FILE_NOT_FOUND 3002L
+#define ERROR_SPL_NO_STARTDOC 3003L
+#define ERROR_SPL_NO_ADDJOB 3004L
+#define ERROR_PRINT_PROCESSOR_ALREADY_INSTALLED 3005L
+#define ERROR_PRINT_MONITOR_ALREADY_INSTALLED 3006L
+#define ERROR_WINS_INTERNAL 4000L
+#define ERROR_CAN_NOT_DEL_LOCAL_WINS 4001L
+#define ERROR_STATIC_INIT 4002L
+#define ERROR_INC_BACKUP 4003L
+#define ERROR_FULL_BACKUP 4004L
+#define ERROR_REC_NON_EXISTENT 4005L
+#define ERROR_RPL_NOT_ALLOWED 4006L
+#define ERROR_NO_BROWSER_SERVERS_FOUND 6118L
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* _GNU_H_WINDOWS32_ERROR */
--- /dev/null
+/* \r
+ Functions.h\r
+\r
+ Declarations for all the Windows32 API Functions\r
+\r
+ Copyright (C) 1996, 1997 Free Software Foundation, Inc.\r
+\r
+ Author: Scott Christley <scottc@net-community.com>\r
+\r
+ This file is part of the Windows32 API Library.\r
+\r
+ This library is free software; you can redistribute it and/or\r
+ modify it under the terms of the GNU Library General Public\r
+ License as published by the Free Software Foundation; either\r
+ version 2 of the License, or (at your option) any later version.\r
+ \r
+ This library is distributed in the hope that it will be useful,\r
+ but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\r
+ Library General Public License for more details.\r
+\r
+ If you are interested in a warranty or support for this source code,\r
+ contact Scott Christley <scottc@net-community.com> for more information.\r
+ \r
+ You should have received a copy of the GNU Library General Public\r
+ License along with this library; see the file COPYING.LIB.\r
+ If not, write to the Free Software Foundation, \r
+ 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.\r
+*/ \r
+\r
+#ifndef _GNU_H_WINDOWS32_FUNCTIONS\r
+#define _GNU_H_WINDOWS32_FUNCTIONS\r
+\r
+#ifdef __cplusplus\r
+extern "C" {\r
+#endif /* __cplusplus */\r
+\r
+/* These functions were a real pain, having to figure out which\r
+ had Unicode/Ascii versions and which did not */\r
+\r
+#ifndef UNICODE_ONLY\r
+#include <unicode.h>\r
+#endif /* !UNICODE_ONLY */\r
+\r
+#ifndef ANSI_ONLY\r
+#include <ascii.h>\r
+#endif /* !ANSI_ONLY */\r
+\r
+/* Define the approprate declaration based upon UNICODE or ASCII */\r
+\r
+/* UNICODE */\r
+#ifdef UNICODE\r
+\r
+#define RegConnectRegistry RegConnectRegistryW\r
+#define RegCreateKey RegCreateKeyW\r
+#define RegCreateKeyEx RegCreateKeyExW\r
+#define RegDeleteKey RegDeleteKeyW\r
+#define RegDeleteValue RegDeleteValueW\r
+#define RegEnumKey RegEnumKeyW\r
+#define RegEnumKeyEx RegEnumKeyExW\r
+#define RegEnumValue RegEnumValueW\r
+#define RegLoadKey RegLoadKeyW\r
+#define RegOpenKey RegOpenKeyW\r
+#define RegOpenKeyEx RegOpenKeyExW\r
+#define RegQueryInfoKey RegQueryInfoKeyW\r
+#define RegQueryValue RegQueryValueW\r
+#define RegQueryMultipleValues RegQueryMultipleValuesW\r
+#define RegQueryValueEx RegQueryValueExW\r
+#define RegReplaceKey RegReplaceKeyW\r
+#define RegRestoreKey RegRestoreKeyW\r
+#define RegSaveKey RegSaveKeyW\r
+#define RegSetValue RegSetValueW\r
+#define RegSetValueEx RegSetValueExW\r
+#define AbortSystemShutdown AbortSystemShutdownW\r
+#define InitiateSystemShutdown InitiateSystemShutdownW\r
+#define RegUnLoadKey RegUnLoadKeyW\r
+#define SetProp SetPropW\r
+#define GetProp GetPropW\r
+#define RemoveProp RemovePropW\r
+#define EnumPropsEx EnumPropsExW\r
+#define EnumProps EnumPropsW\r
+#define SetWindowText SetWindowTextW\r
+#define GetWindowText GetWindowTextW\r
+#define GetWindowTextLength GetWindowTextLengthW\r
+#define MessageBox MessageBoxW\r
+#define MessageBoxEx MessageBoxExW\r
+#define MessageBoxIndirect MessageBoxIndirectW\r
+#define GetWindowLong GetWindowLongW\r
+#define SetWindowLong SetWindowLongW\r
+#define GetClassLong GetClassLongW\r
+#define SetClassLong SetClassLongW\r
+#define FindWindow FindWindowW\r
+#define FindWindowEx FindWindowExW\r
+#define GetClassName GetClassNameW\r
+#define SetWindowsHookEx SetWindowsHookExW\r
+#define LoadBitmap LoadBitmapW\r
+#define LoadCursor LoadCursorW\r
+#define LoadCursorFromFile LoadCursorFromFileW\r
+#define LoadIcon LoadIconW\r
+#define LoadImage LoadImageW\r
+#define LoadString LoadStringW\r
+#define IsDialogMessage IsDialogMessageW\r
+#define DlgDirList DlgDirListW\r
+#define DlgDirSelectEx DlgDirSelectExW\r
+#define DlgDirListComboBox DlgDirListComboBoxW\r
+#define DlgDirSelectComboBoxEx DlgDirSelectComboBoxExW\r
+#define DefFrameProc DefFrameProcW\r
+#define DefMDIChildProc DefMDIChildProcW\r
+#define CreateMDIWindow CreateMDIWindowW\r
+#define WinHelp WinHelpW\r
+#define ChangeDisplaySettings ChangeDisplaySettingsW\r
+#define EnumDisplaySettings EnumDisplaySettingsW\r
+#define SystemParametersInfo SystemParametersInfoW\r
+#define AddFontResource AddFontResourceW\r
+#define CopyMetaFile CopyMetaFileW\r
+#define CreateDC CreateDCW\r
+#define CreateFontIndirect CreateFontIndirectW\r
+#define CreateFont CreateFontW\r
+#define CreateIC CreateICW\r
+#define CreateMetaFile CreateMetaFileW\r
+#define CreateScalableFontResource CreateScalableFontResourceW\r
+#define DeviceCapabilities DeviceCapabilitiesW\r
+#define EnumFontFamiliesEx EnumFontFamiliesExW\r
+#define EnumFontFamilies EnumFontFamiliesW\r
+#define EnumFonts EnumFontsW\r
+#define GetCharWidth GetCharWidthW\r
+#define GetCharWidth32 GetCharWidth32W\r
+#define GetCharWidthFloat GetCharWidthFloatW\r
+#define GetCharABCWidths GetCharABCWidthsW\r
+#define GetCharABCWidthsFloat GetCharABCWidthsFloatW\r
+#define GetGlyphOutline GetGlyphOutlineW\r
+#define GetMetaFile GetMetaFileW\r
+#define GetOutlineTextMetrics GetOutlineTextMetricsW\r
+#define GetTextExtentPoint GetTextExtentPointW\r
+#define GetTextExtentPoint32 GetTextExtentPoint32W\r
+#define GetTextExtentExPoint GetTextExtentExPointW\r
+#define GetCharacterPlacement GetCharacterPlacementW\r
+#define ResetDC ResetDCW\r
+#define RemoveFontResource RemoveFontResourceW\r
+#define CopyEnhMetaFile CopyEnhMetaFileW\r
+#define CreateEnhMetaFile CreateEnhMetaFileW\r
+#define GetEnhMetaFile GetEnhMetaFileW\r
+#define GetEnhMetaFileDescription GetEnhMetaFileDescriptionW\r
+#define GetTextMetrics GetTextMetricsW\r
+#define StartDoc StartDocW\r
+#define GetObject GetObjectW\r
+#define TextOut TextOutW\r
+#define ExtTextOut ExtTextOutW\r
+#define PolyTextOut PolyTextOutW\r
+#define GetTextFace GetTextFaceW\r
+#define GetKerningPairs GetKerningPairsW\r
+#define GetLogColorSpace GetLogColorSpaceW\r
+#define CreateColorSpace CreateColorSpaceW\r
+#define GetICMProfile GetICMProfileW\r
+#define SetICMProfile SetICMProfileW\r
+#define UpdateICMRegKey UpdateICMRegKeyW\r
+#define EnumICMProfiles EnumICMProfilesW\r
+#define CreatePropertySheetPage CreatePropertySheetPageW\r
+#define PropertySheet PropertySheetW\r
+#define ImageList_LoadImage ImageList_LoadImageW\r
+#define CreateStatusWindow CreateStatusWindowW\r
+#define DrawStatusText DrawStatusTextW\r
+#define GetOpenFileName GetOpenFileNameW\r
+#define GetSaveFileName GetSaveFileNameW\r
+#define GetFileTitle GetFileTitleW\r
+#define ChooseColor ChooseColorW\r
+#define FindText FindTextW\r
+#define ReplaceText ReplaceTextW\r
+#define ChooseFont ChooseFontW\r
+#define PrintDlg PrintDlgW\r
+#define PageSetupDlg PageSetupDlgW\r
+#define DefWindowProc DefWindowProcW\r
+#define CallWindowProc CallWindowProcW\r
+#define RegisterClass RegisterClassW\r
+#define UnregisterClass UnregisterClassW\r
+#define GetClassInfo GetClassInfoW\r
+#define RegisterClassEx RegisterClassExW\r
+#define GetClassInfoEx GetClassInfoExW\r
+#define CreateWindowEx CreateWindowExW\r
+#define CreateWindow CreateWindowW\r
+#define CreateDialogParam CreateDialogParamW\r
+#define CreateDialogIndirectParam CreateDialogIndirectParamW\r
+#define CreateDialog CreateDialogW\r
+#define CreateDialogIndirect CreateDialogIndirectW\r
+#define DialogBoxParam DialogBoxParamW\r
+#define DialogBoxIndirectParam DialogBoxIndirectParamW\r
+#define DialogBox DialogBoxW\r
+#define DialogBoxIndirect DialogBoxIndirectW\r
+#define RegisterClipboardFormat RegisterClipboardFormatW\r
+#define SetDlgItemText SetDlgItemTextW\r
+#define GetDlgItemText GetDlgItemTextW\r
+#define SendDlgItemMessage SendDlgItemMessageW\r
+#define DefDlgProc DefDlgProcW\r
+#define CallMsgFilter CallMsgFilterW\r
+#define GetClipboardFormatName GetClipboardFormatNameW\r
+#define CharToOem CharToOemW\r
+#define OemToChar OemToCharW\r
+#define CharToOemBuff CharToOemBuffW\r
+#define OemToCharBuff OemToCharBuffW\r
+#define CharUpper CharUpperW\r
+#define CharUpperBuff CharUpperBuffW\r
+#define CharLower CharLowerW\r
+#define CharLowerBuff CharLowerBuffW\r
+#define CharNext CharNextW\r
+#define CharPrev CharPrevW\r
+#define IsCharAlpha IsCharAlphaW\r
+#define IsCharAlphaNumeric IsCharAlphaNumericW\r
+#define IsCharUpper IsCharUpperW\r
+#define IsCharLower IsCharLowerW\r
+#define GetKeyNameText GetKeyNameTextW\r
+#define VkKeyScan VkKeyScanW\r
+#define VkKeyScanEx VkKeyScanExW\r
+#define MapVirtualKey MapVirtualKeyW\r
+#define MapVirtualKeyEx MapVirtualKeyExW\r
+#define LoadAccelerators LoadAcceleratorsW\r
+#define CreateAcceleratorTable CreateAcceleratorTableW\r
+#define CopyAcceleratorTable CopyAcceleratorTableW\r
+#define TranslateAccelerator TranslateAcceleratorW\r
+#define LoadMenu LoadMenuW\r
+#define LoadMenuIndirect LoadMenuIndirectW\r
+#define ChangeMenu ChangeMenuW\r
+#define GetMenuString GetMenuStringW\r
+#define InsertMenu InsertMenuW\r
+#define AppendMenu AppendMenuW\r
+#define ModifyMenu ModifyMenuW\r
+#define InsertMenuItem InsertMenuItemW\r
+#define GetMenuItemInfo GetMenuItemInfoW\r
+#define SetMenuItemInfo SetMenuItemInfoW\r
+#define DrawText DrawTextW\r
+#define DrawTextEx DrawTextExW\r
+#define GrayString GrayStringW\r
+#define DrawState DrawStateW\r
+#define TabbedTextOut TabbedTextOutW\r
+#define GetTabbedTextExtent GetTabbedTextExtentW\r
+#define GetVersionEx GetVersionExW\r
+#define wvsprintf wvsprintfW\r
+#define wsprintf wsprintfW\r
+#define LoadKeyboardLayout LoadKeyboardLayoutW\r
+#define GetKeyboardLayoutName GetKeyboardLayoutNameW\r
+#define CreateDesktop CreateDesktopW\r
+#define OpenDesktop OpenDesktopW\r
+#define EnumDesktops EnumDesktopsW\r
+#define CreateWindowStation CreateWindowStationW\r
+#define OpenWindowStation OpenWindowStationW\r
+#define EnumWindowStations EnumWindowStationsW\r
+#define IsBadStringPtr IsBadStringPtrW\r
+#define LookupAccountSid LookupAccountSidW\r
+#define LookupAccountName LookupAccountNameW\r
+#define LookupPrivilegeValue LookupPrivilegeValueW\r
+#define LookupPrivilegeName LookupPrivilegeNameW\r
+#define LookupPrivilegeDisplayName LookupPrivilegeDisplayNameW\r
+#define BuildCommDCB BuildCommDCBW\r
+#define BuildCommDCBAndTimeouts BuildCommDCBAndTimeoutsW\r
+#define CommConfigDialog CommConfigDialogW\r
+#define GetDefaultCommConfig GetDefaultCommConfigW\r
+#define SetDefaultCommConfig SetDefaultCommConfigW\r
+#define GetComputerName GetComputerNameW\r
+#define SetComputerName SetComputerNameW\r
+#define GetUserName GetUserNameW\r
+#define CreateMailslot CreateMailslotW\r
+#define FormatMessage FormatMessageW\r
+#define GetEnvironmentStrings GetEnvironmentStringsW\r
+#define FreeEnvironmentStrings FreeEnvironmentStringsW\r
+#define lstrcmp lstrcmpW\r
+#define lstrcmpi lstrcmpiW\r
+#define lstrcpyn lstrcpynW\r
+#define lstrcpy lstrcpyW\r
+#define lstrcat lstrcatW\r
+#define lstrlen lstrlenW\r
+#define GetBinaryType GetBinaryTypeW\r
+#define GetShortPathName GetShortPathNameW\r
+#define SetFileSecurity SetFileSecurityW\r
+#define GetFileSecurity GetFileSecurityW\r
+#define FindFirstChangeNotification FindFirstChangeNotificationW\r
+#define AccessCheckAndAuditAlarm AccessCheckAndAuditAlarmW\r
+#define ObjectOpenAuditAlarm ObjectOpenAuditAlarmW\r
+#define ObjectPrivilegeAuditAlarm ObjectPrivilegeAuditAlarmW\r
+#define ObjectCloseAuditAlarm ObjectCloseAuditAlarmW\r
+#define PrivilegedServiceAuditAlarm PrivilegedServiceAuditAlarmW\r
+#define OpenEventLog OpenEventLogW\r
+#define RegisterEventSource RegisterEventSourceW\r
+#define OpenBackupEventLog OpenBackupEventLogW\r
+#define ReadEventLog ReadEventLogW\r
+#define ReportEvent ReportEventW\r
+#define CreateProcess CreateProcessW\r
+#define FatalAppExit FatalAppExitW\r
+#define GetStartupInfo GetStartupInfoW\r
+#define GetEnvironmentVariable GetEnvironmentVariableW\r
+#define GetCommandLine GetCommandLineW\r
+#define SetEnvironmentVariable SetEnvironmentVariableW\r
+#define ExpandEnvironmentStrings ExpandEnvironmentStringsW\r
+#define OutputDebugString OutputDebugStringW\r
+#define FindResource FindResourceW\r
+#define FindResourceEx FindResourceExW\r
+#define EnumResourceTypes EnumResourceTypesW\r
+#define EnumResourceNames EnumResourceNamesW\r
+#define EnumResourceLanguages EnumResourceLanguagesW\r
+#define BeginUpdateResource BeginUpdateResourceW\r
+#define UpdateResource UpdateResourceW\r
+#define EndUpdateResource EndUpdateResourceW\r
+#define GlobalAddAtom GlobalAddAtomW\r
+#define GlobalFindAtom GlobalFindAtomW\r
+#define GlobalGetAtomName GlobalGetAtomNameW\r
+#define AddAtom AddAtomW\r
+#define FindAtom FindAtomW\r
+#define GetAtomName GetAtomNameW\r
+#define GetProfileInt GetProfileIntW\r
+#define GetProfileString GetProfileStringW\r
+#define WriteProfileString WriteProfileStringW\r
+#define GetProfileSection GetProfileSectionW\r
+#define WriteProfileSection WriteProfileSectionW\r
+#define GetPrivateProfileInt GetPrivateProfileIntW\r
+#define GetPrivateProfileString GetPrivateProfileStringW\r
+#define WritePrivateProfileString WritePrivateProfileStringW\r
+#define GetPrivateProfileSection GetPrivateProfileSectionW\r
+#define WritePrivateProfileSection WritePrivateProfileSectionW\r
+#define GetDriveType GetDriveTypeW\r
+#define GetSystemDirectory GetSystemDirectoryW\r
+#define GetTempPath GetTempPathW\r
+#define GetTempFileName GetTempFileNameW\r
+#define GetWindowsDirectory GetWindowsDirectoryW\r
+#define SetCurrentDirectory SetCurrentDirectoryW\r
+#define GetCurrentDirectory GetCurrentDirectoryW\r
+#define GetDiskFreeSpace GetDiskFreeSpaceW\r
+#define CreateDirectory CreateDirectoryW\r
+#define CreateDirectoryEx CreateDirectoryExW\r
+#define RemoveDirectory RemoveDirectoryW\r
+#define GetFullPathName GetFullPathNameW\r
+#define DefineDosDevice DefineDosDeviceW\r
+#define QueryDosDevice QueryDosDeviceW\r
+#define CreateFile CreateFileW\r
+#define SetFileAttributes SetFileAttributesW\r
+#define GetFileAttributes GetFileAttributesW\r
+#define GetCompressedFileSize GetCompressedFileSizeW\r
+#define DeleteFile DeleteFileW\r
+#define FindFirstFile FindFirstFileW\r
+#define FindNextFile FindNextFileW\r
+#define SearchPath SearchPathW\r
+#define CopyFile CopyFileW\r
+#define MoveFile MoveFileW\r
+#define MoveFileEx MoveFileExW\r
+#define CreateNamedPipe CreateNamedPipeW\r
+#define GetNamedPipeHandleState GetNamedPipeHandleStateW\r
+#define CallNamedPipe CallNamedPipeW\r
+#define WaitNamedPipe WaitNamedPipeW\r
+#define SetVolumeLabel SetVolumeLabelW\r
+#define GetVolumeInformation GetVolumeInformationW\r
+#define ClearEventLog ClearEventLogW\r
+#define BackupEventLog BackupEventLogW\r
+#define CreateMutex CreateMutexW\r
+#define OpenMutex OpenMutexW\r
+#define CreateEvent CreateEventW\r
+#define OpenEvent OpenEventW\r
+#define CreateSemaphore CreateSemaphoreW\r
+#define OpenSemaphore OpenSemaphoreW\r
+#define CreateFileMapping CreateFileMappingW\r
+#define OpenFileMapping OpenFileMappingW\r
+#define GetLogicalDriveStrings GetLogicalDriveStringsW\r
+#define LoadLibrary LoadLibraryW\r
+#define LoadLibraryEx LoadLibraryExW\r
+#define GetModuleFileName GetModuleFileNameW\r
+#define GetModuleHandle GetModuleHandleW\r
+#define GetUserObjectInformation GetUserObjectInformationW\r
+#define SetUserObjectInformation SetUserObjectInformationW\r
+#define RegisterWindowMessage RegisterWindowMessageW\r
+#define GetMessage GetMessageW\r
+#define DispatchMessage DispatchMessageW\r
+#define PeekMessage PeekMessageW\r
+#define SendMessage SendMessageW\r
+#define SendMessageTimeout SendMessageTimeoutW\r
+#define SendNotifyMessage SendNotifyMessageW\r
+#define SendMessageCallback SendMessageCallbackW\r
+#define PostMessage PostMessageW\r
+#define PostThreadMessage PostThreadMessageW\r
+#define VerFindFile VerFindFileW\r
+#define VerInstallFile VerInstallFileW\r
+#define GetFileVersionInfoSize GetFileVersionInfoSizeW\r
+#define GetFileVersionInfo GetFileVersionInfoW\r
+#define VerLanguageName VerLanguageNameW\r
+#define VerQueryValue VerQueryValueW\r
+#define CompareString CompareStringW\r
+#define LCMapString LCMapStringW\r
+#define GetLocaleInfo GetLocaleInfoW\r
+#define SetLocaleInfo SetLocaleInfoW\r
+#define GetTimeFormat GetTimeFormatW\r
+#define GetDateFormat GetDateFormatW\r
+#define GetNumberFormat GetNumberFormatW\r
+#define GetCurrencyFormat GetCurrencyFormatW\r
+#define EnumCalendarInfo EnumCalendarInfoW\r
+#define EnumTimeFormats EnumTimeFormatsW\r
+#define FoldString FoldStringW\r
+#define EnumSystemCodePages EnumSystemCodePagesW\r
+#define EnumSystemLocales EnumSystemLocalesW\r
+#define GetStringTypeEx GetStringTypeExW\r
+#define EnumDateFormats EnumDateFormatsW\r
+#define GetConsoleTitle GetConsoleTitleW\r
+#define ScrollConsoleScreenBuffer ScrollConsoleScreenBufferW\r
+#define SetConsoleTitle SetConsoleTitleW\r
+#define ReadConsole ReadConsoleW\r
+#define WriteConsole WriteConsoleW\r
+#define PeekConsoleInput PeekConsoleInputW\r
+#define ReadConsoleInput ReadConsoleInputW\r
+#define WriteConsoleInput WriteConsoleInputW\r
+#define ReadConsoleOutput ReadConsoleOutputW\r
+#define WriteConsoleOutput WriteConsoleOutputW\r
+#define ReadConsoleOutputCharacter ReadConsoleOutputCharacterW\r
+#define WriteConsoleOutputCharacter WriteConsoleOutputCharacterW\r
+#define FillConsoleOutputCharacter FillConsoleOutputCharacterW\r
+#define WNetGetProviderName WNetGetProviderNameW\r
+#define WNetGetNetworkInformation WNetGetNetworkInformationW\r
+#define WNetGetLastError WNetGetLastErrorW\r
+#define MultinetGetConnectionPerformance MultinetGetConnectionPerformanceW\r
+#define WNetConnectionDialog1 WNetConnectionDialog1W\r
+#define WNetDisconnectDialog1 WNetDisconnectDialog1W\r
+#define WNetOpenEnum WNetOpenEnumW\r
+#define WNetEnumResource WNetEnumResourceW\r
+#define WNetGetUniversalName WNetGetUniversalNameW\r
+#define WNetGetUser WNetGetUserW\r
+#define WNetAddConnection WNetAddConnectionW\r
+#define WNetAddConnection2 WNetAddConnection2W\r
+#define WNetAddConnection3 WNetAddConnection3W\r
+#define WNetCancelConnection WNetCancelConnectionW\r
+#define WNetCancelConnection2 WNetCancelConnection2W\r
+#define WNetGetConnection WNetGetConnectionW\r
+#define WNetUseConnection WNetUseConnectionW\r
+#define WNetSetConnection WNetSetConnectionW\r
+#define CreateService CreateServiceW\r
+#define ChangeServiceConfig ChangeServiceConfigW\r
+#define EnumDependentServices EnumDependentServicesW\r
+#define EnumServicesStatus EnumServicesStatusW\r
+#define GetServiceKeyName GetServiceKeyNameW\r
+#define GetServiceDisplayName GetServiceDisplayNameW\r
+#define OpenSCManager OpenSCManagerW\r
+#define OpenService OpenServiceW\r
+#define QueryServiceConfig QueryServiceConfigW\r
+#define QueryServiceLockStatus QueryServiceLockStatusW\r
+#define RegisterServiceCtrlHandler RegisterServiceCtrlHandlerW\r
+#define StartServiceCtrlDispatcher StartServiceCtrlDispatcherW\r
+#define StartService StartServiceW\r
+#define DragQueryFile DragQueryFileW\r
+#define ExtractAssociatedIcon ExtractAssociatedIconW\r
+#define ExtractIcon ExtractIconW\r
+#define FindExecutable FindExecutableW\r
+#define ShellAbout ShellAboutW\r
+#define ShellExecute ShellExecuteW\r
+#define DdeCreateStringHandle DdeCreateStringHandleW\r
+#define DdeInitialize DdeInitializeW\r
+#define DdeQueryString DdeQueryStringW\r
+#define LogonUser LogonUserW\r
+#define CreateProcessAsUser CreateProcessAsUserW\r
+\r
+/* ASCII */\r
+#else\r
+\r
+#define RegConnectRegistry RegConnectRegistryA\r
+#define RegCreateKey RegCreateKeyA\r
+#define RegCreateKeyEx RegCreateKeyExA\r
+#define RegDeleteKey RegDeleteKeyA\r
+#define RegDeleteValue RegDeleteValueA\r
+#define RegEnumKey RegEnumKeyA\r
+#define RegEnumKeyEx RegEnumKeyExA\r
+#define RegEnumValue RegEnumValueA\r
+#define RegLoadKey RegLoadKeyA\r
+#define RegOpenKey RegOpenKeyA\r
+#define RegOpenKeyEx RegOpenKeyExA\r
+#define RegQueryInfoKey RegQueryInfoKeyA\r
+#define RegQueryValue RegQueryValueA\r
+#define RegQueryMultipleValues RegQueryMultipleValuesA\r
+#define RegQueryValueEx RegQueryValueExA\r
+#define RegReplaceKey RegReplaceKeyA\r
+#define RegRestoreKey RegRestoreKeyA\r
+#define RegSaveKey RegSaveKeyA\r
+#define RegSetValue RegSetValueA\r
+#define RegSetValueEx RegSetValueExA\r
+#define AbortSystemShutdown AbortSystemShutdownA\r
+#define InitiateSystemShutdown InitiateSystemShutdownA\r
+#define RegUnLoadKey RegUnLoadKeyA\r
+#define LoadIcon LoadIconA\r
+#define LoadImage LoadImageA\r
+#define LoadString LoadStringA\r
+#define IsDialogMessage IsDialogMessageA\r
+#define DlgDirList DlgDirListA\r
+#define DlgDirSelectEx DlgDirSelectExA\r
+#define DlgDirListComboBox DlgDirListComboBoxA\r
+#define DlgDirSelectComboBoxEx DlgDirSelectComboBoxExA\r
+#define DefFrameProc DefFrameProcA\r
+#define DefMDIChildProc DefMDIChildProcA\r
+#define CreateMDIWindow CreateMDIWindowA\r
+#define WinHelp WinHelpA\r
+#define ChangeDisplaySettings ChangeDisplaySettingsA\r
+#define EnumDisplaySettings EnumDisplaySettingsA\r
+#define SystemParametersInfo SystemParametersInfoA\r
+#define GetWindowLong GetWindowLongA\r
+#define SetWindowLong SetWindowLongA\r
+#define GetClassLong GetClassLongA\r
+#define SetClassLong SetClassLongA\r
+#define FindWindow FindWindowA\r
+#define FindWindowEx FindWindowExA\r
+#define GetClassName GetClassNameA\r
+#define SetWindowsHookEx SetWindowsHookExA\r
+#define LoadBitmap LoadBitmapA\r
+#define LoadCursor LoadCursorA\r
+#define LoadCursorFromFile LoadCursorFromFileA\r
+#define SetProp SetPropA\r
+#define GetProp GetPropA\r
+#define RemoveProp RemovePropA\r
+#define EnumPropsEx EnumPropsExA\r
+#define EnumProps EnumPropsA\r
+#define SetWindowText SetWindowTextA\r
+#define GetWindowText GetWindowTextA\r
+#define GetWindowTextLength GetWindowTextLengthA\r
+#define MessageBox MessageBoxA\r
+#define MessageBoxEx MessageBoxExA\r
+#define MessageBoxIndirect MessageBoxIndirectA\r
+#define AddFontResource AddFontResourceA\r
+#define CopyMetaFile CopyMetaFileA\r
+#define CreateDC CreateDCA\r
+#define CreateFontIndirect CreateFontIndirectA\r
+#define CreateFont CreateFontA\r
+#define CreateIC CreateICA\r
+#define CreateMetaFile CreateMetaFileA\r
+#define CreateScalableFontResource CreateScalableFontResourceA\r
+#define DeviceCapabilities DeviceCapabilitiesA\r
+#define EnumFontFamiliesEx EnumFontFamiliesExA\r
+#define EnumFontFamilies EnumFontFamiliesA\r
+#define EnumFonts EnumFontsA\r
+#define GetCharWidth GetCharWidthA\r
+#define GetCharWidth32 GetCharWidth32A\r
+#define GetCharWidthFloat GetCharWidthFloatA\r
+#define GetCharABCWidths GetCharABCWidthsA\r
+#define GetCharABCWidthsFloat GetCharABCWidthsFloatA\r
+#define GetGlyphOutline GetGlyphOutlineA\r
+#define GetMetaFile GetMetaFileA\r
+#define GetOutlineTextMetrics GetOutlineTextMetricsA\r
+#define GetTextExtentPoint GetTextExtentPointA\r
+#define GetTextExtentPoint32 GetTextExtentPoint32A\r
+#define GetTextExtentExPoint GetTextExtentExPointA\r
+#define GetCharacterPlacement GetCharacterPlacementA\r
+#define ResetDC ResetDCA\r
+#define RemoveFontResource RemoveFontResourceA\r
+#define CopyEnhMetaFile CopyEnhMetaFileA\r
+#define CreateEnhMetaFile CreateEnhMetaFileA\r
+#define GetEnhMetaFile GetEnhMetaFileA\r
+#define GetEnhMetaFileDescription GetEnhMetaFileDescriptionA\r
+#define GetTextMetrics GetTextMetricsA\r
+#define StartDoc StartDocA\r
+#define GetObject GetObjectA\r
+#define TextOut TextOutA\r
+#define ExtTextOut ExtTextOutA\r
+#define PolyTextOut PolyTextOutA\r
+#define GetTextFace GetTextFaceA\r
+#define GetKerningPairs GetKerningPairsA\r
+#define GetLogColorSpace GetLogColorSpaceA\r
+#define CreateColorSpace CreateColorSpaceA\r
+#define GetICMProfile GetICMProfileA\r
+#define SetICMProfile SetICMProfileA\r
+#define UpdateICMRegKey UpdateICMRegKeyA\r
+#define EnumICMProfiles EnumICMProfilesA\r
+#define CreatePropertySheetPage CreatePropertySheetPageA\r
+#define PropertySheet PropertySheetA\r
+#define ImageList_LoadImage ImageList_LoadImageA\r
+#define CreateStatusWindow CreateStatusWindowA\r
+#define DrawStatusText DrawStatusTextA\r
+#define GetOpenFileName GetOpenFileNameA\r
+#define GetSaveFileName GetSaveFileNameA\r
+#define GetFileTitle GetFileTitleA\r
+#define ChooseColor ChooseColorA\r
+#define FindText FindTextA\r
+#define ReplaceText ReplaceTextA\r
+#define ChooseFont ChooseFontA\r
+#define PrintDlg PrintDlgA\r
+#define PageSetupDlg PageSetupDlgA\r
+#define DefWindowProc DefWindowProcA\r
+#define CallWindowProc CallWindowProcA\r
+#define RegisterClass RegisterClassA\r
+#define UnregisterClass UnregisterClassA\r
+#define GetClassInfo GetClassInfoA\r
+#define RegisterClassEx RegisterClassExA\r
+#define GetClassInfoEx GetClassInfoExA\r
+#define CreateWindowEx CreateWindowExA\r
+#define CreateWindow CreateWindowA\r
+#define CreateDialogParam CreateDialogParamA\r
+#define CreateDialogIndirectParam CreateDialogIndirectParamA\r
+#define CreateDialog CreateDialogA\r
+#define CreateDialogIndirect CreateDialogIndirectA\r
+#define DialogBoxParam DialogBoxParamA\r
+#define DialogBoxIndirectParam DialogBoxIndirectParamA\r
+#define DialogBox DialogBoxA\r
+#define DialogBoxIndirect DialogBoxIndirectA\r
+#define RegisterClipboardFormat RegisterClipboardFormatA\r
+#define SetDlgItemText SetDlgItemTextA\r
+#define GetDlgItemText GetDlgItemTextA\r
+#define SendDlgItemMessage SendDlgItemMessageA\r
+#define DefDlgProc DefDlgProcA\r
+#define CallMsgFilter CallMsgFilterA\r
+#define GetClipboardFormatName GetClipboardFormatNameA\r
+#define CharToOem CharToOemA\r
+#define OemToChar OemToCharA\r
+#define CharToOemBuff CharToOemBuffA\r
+#define OemToCharBuff OemToCharBuffA\r
+#define CharUpper CharUpperA\r
+#define CharUpperBuff CharUpperBuffA\r
+#define CharLower CharLowerA\r
+#define CharLowerBuff CharLowerBuffA\r
+#define CharNext CharNextA\r
+#define CharPrev CharPrevA\r
+#define IsCharAlpha IsCharAlphaA\r
+#define IsCharAlphaNumeric IsCharAlphaNumericA\r
+#define IsCharUpper IsCharUpperA\r
+#define IsCharLower IsCharLowerA\r
+#define GetKeyNameText GetKeyNameTextA\r
+#define VkKeyScan VkKeyScanA\r
+#define VkKeyScanEx VkKeyScanExA\r
+#define MapVirtualKey MapVirtualKeyA\r
+#define MapVirtualKeyEx MapVirtualKeyExA\r
+#define LoadAccelerators LoadAcceleratorsA\r
+#define CreateAcceleratorTable CreateAcceleratorTableA\r
+#define CopyAcceleratorTable CopyAcceleratorTableA\r
+#define TranslateAccelerator TranslateAcceleratorA\r
+#define LoadMenu LoadMenuA\r
+#define LoadMenuIndirect LoadMenuIndirectA\r
+#define ChangeMenu ChangeMenuA\r
+#define GetMenuString GetMenuStringA\r
+#define InsertMenu InsertMenuA\r
+#define AppendMenu AppendMenuA\r
+#define ModifyMenu ModifyMenuA\r
+#define InsertMenuItem InsertMenuItemA\r
+#define GetMenuItemInfo GetMenuItemInfoA\r
+#define SetMenuItemInfo SetMenuItemInfoA\r
+#define DrawText DrawTextA\r
+#define DrawTextEx DrawTextExA\r
+#define GrayString GrayStringA\r
+#define DrawState DrawStateA\r
+#define TabbedTextOut TabbedTextOutA\r
+#define GetTabbedTextExtent GetTabbedTextExtentA\r
+#define GetVersionEx GetVersionExA\r
+#define wvsprintf wvsprintfA\r
+#define wsprintf wsprintfA\r
+#define LoadKeyboardLayout LoadKeyboardLayoutA\r
+#define GetKeyboardLayoutName GetKeyboardLayoutNameA\r
+#define CreateDesktop CreateDesktopA\r
+#define OpenDesktop OpenDesktopA\r
+#define EnumDesktops EnumDesktopsA\r
+#define CreateWindowStation CreateWindowStationA\r
+#define OpenWindowStation OpenWindowStationA\r
+#define EnumWindowStations EnumWindowStationsA\r
+#define IsBadStringPtr IsBadStringPtrA\r
+#define LookupAccountSid LookupAccountSidA\r
+#define LookupAccountName LookupAccountNameA\r
+#define LookupPrivilegeValue LookupPrivilegeValueA\r
+#define LookupPrivilegeName LookupPrivilegeNameA\r
+#define LookupPrivilegeDisplayName LookupPrivilegeDisplayNameA\r
+#define BuildCommDCB BuildCommDCBA\r
+#define BuildCommDCBAndTimeouts BuildCommDCBAndTimeoutsA\r
+#define CommConfigDialog CommConfigDialogA\r
+#define GetDefaultCommConfig GetDefaultCommConfigA\r
+#define SetDefaultCommConfig SetDefaultCommConfigA\r
+#define GetComputerName GetComputerNameA\r
+#define SetComputerName SetComputerNameA\r
+#define GetUserName GetUserNameA\r
+#define CreateMailslot CreateMailslotA\r
+#define FormatMessage FormatMessageA\r
+#define GetEnvironmentStrings GetEnvironmentStringsA\r
+#define FreeEnvironmentStrings FreeEnvironmentStringsA\r
+#define lstrcmp lstrcmpA\r
+#define lstrcmpi lstrcmpiA\r
+#define lstrcpyn lstrcpynA\r
+#define lstrcpy lstrcpyA\r
+#define lstrcat lstrcatA\r
+#define lstrlen lstrlenA\r
+#define GetBinaryType GetBinaryTypeA\r
+#define GetShortPathName GetShortPathNameA\r
+#define SetFileSecurity SetFileSecurityA\r
+#define GetFileSecurity GetFileSecurityA\r
+#define FindFirstChangeNotification FindFirstChangeNotificationA\r
+#define AccessCheckAndAuditAlarm AccessCheckAndAuditAlarmA\r
+#define ObjectOpenAuditAlarm ObjectOpenAuditAlarmA\r
+#define ObjectPrivilegeAuditAlarm ObjectPrivilegeAuditAlarmA\r
+#define ObjectCloseAuditAlarm ObjectCloseAuditAlarmA\r
+#define PrivilegedServiceAuditAlarm PrivilegedServiceAuditAlarmA\r
+#define OpenEventLog OpenEventLogA\r
+#define RegisterEventSource RegisterEventSourceA\r
+#define OpenBackupEventLog OpenBackupEventLogA\r
+#define ReadEventLog ReadEventLogA\r
+#define ReportEvent ReportEventA\r
+#define CreateProcess CreateProcessA\r
+#define FatalAppExit FatalAppExitA\r
+#define GetStartupInfo GetStartupInfoA\r
+#define GetCommandLine GetCommandLineA\r
+#define GetEnvironmentVariable GetEnvironmentVariableA\r
+#define SetEnvironmentVariable SetEnvironmentVariableA\r
+#define ExpandEnvironmentStrings ExpandEnvironmentStringsA\r
+#define OutputDebugString OutputDebugStringA\r
+#define FindResource FindResourceA\r
+#define FindResourceEx FindResourceExA\r
+#define EnumResourceTypes EnumResourceTypesA\r
+#define EnumResourceNames EnumResourceNamesA\r
+#define EnumResourceLanguages EnumResourceLanguagesA\r
+#define BeginUpdateResource BeginUpdateResourceA\r
+#define UpdateResource UpdateResourceA\r
+#define EndUpdateResource EndUpdateResourceA\r
+#define GlobalAddAtom GlobalAddAtomA\r
+#define GlobalFindAtom GlobalFindAtomA\r
+#define GlobalGetAtomName GlobalGetAtomNameA\r
+#define AddAtom AddAtomA\r
+#define FindAtom FindAtomA\r
+#define GetProfileInt GetProfileIntA\r
+#define GetAtomName GetAtomNameA\r
+#define GetProfileString GetProfileStringA\r
+#define WriteProfileString WriteProfileStringA\r
+#define GetProfileSection GetProfileSectionA\r
+#define WriteProfileSection WriteProfileSectionA\r
+#define GetPrivateProfileInt GetPrivateProfileIntA\r
+#define GetPrivateProfileString GetPrivateProfileStringA\r
+#define WritePrivateProfileString WritePrivateProfileStringA\r
+#define GetPrivateProfileSection GetPrivateProfileSectionA\r
+#define WritePrivateProfileSection WritePrivateProfileSectionA\r
+#define GetDriveType GetDriveTypeA\r
+#define GetSystemDirectory GetSystemDirectoryA\r
+#define GetTempPath GetTempPathA\r
+#define GetTempFileName GetTempFileNameA\r
+#define GetWindowsDirectory GetWindowsDirectoryA\r
+#define SetCurrentDirectory SetCurrentDirectoryA\r
+#define GetCurrentDirectory GetCurrentDirectoryA\r
+#define GetDiskFreeSpace GetDiskFreeSpaceA\r
+#define CreateDirectory CreateDirectoryA\r
+#define CreateDirectoryEx CreateDirectoryExA\r
+#define RemoveDirectory RemoveDirectoryA\r
+#define GetFullPathName GetFullPathNameA\r
+#define DefineDosDevice DefineDosDeviceA\r
+#define QueryDosDevice QueryDosDeviceA\r
+#define CreateFile CreateFileA\r
+#define SetFileAttributes SetFileAttributesA\r
+#define GetFileAttributes GetFileAttributesA\r
+#define GetCompressedFileSize GetCompressedFileSizeA\r
+#define DeleteFile DeleteFileA\r
+#define FindFirstFile FindFirstFileA\r
+#define FindNextFile FindNextFileA\r
+#define SearchPath SearchPathA\r
+#define CopyFile CopyFileA\r
+#define MoveFile MoveFileA\r
+#define MoveFileEx MoveFileExA\r
+#define CreateNamedPipe CreateNamedPipeA\r
+#define GetNamedPipeHandleState GetNamedPipeHandleStateA\r
+#define CallNamedPipe CallNamedPipeA\r
+#define WaitNamedPipe WaitNamedPipeA\r
+#define SetVolumeLabel SetVolumeLabelA\r
+#define GetVolumeInformation GetVolumeInformationA\r
+#define ClearEventLog ClearEventLogA\r
+#define BackupEventLog BackupEventLogA\r
+#define CreateMutex CreateMutexA\r
+#define OpenMutex OpenMutexA\r
+#define CreateEvent CreateEventA\r
+#define OpenEvent OpenEventA\r
+#define CreateSemaphore CreateSemaphoreA\r
+#define OpenSemaphore OpenSemaphoreA\r
+#define CreateFileMapping CreateFileMappingA\r
+#define OpenFileMapping OpenFileMappingA\r
+#define GetLogicalDriveStrings GetLogicalDriveStringsA\r
+#define LoadLibrary LoadLibraryA\r
+#define LoadLibraryEx LoadLibraryExA\r
+#define GetModuleFileName GetModuleFileNameA\r
+#define GetModuleHandle GetModuleHandleA\r
+#define GetUserObjectInformation GetUserObjectInformationA\r
+#define SetUserObjectInformation SetUserObjectInformationA\r
+#define RegisterWindowMessage RegisterWindowMessageA\r
+#define GetMessage GetMessageA\r
+#define DispatchMessage DispatchMessageA\r
+#define PeekMessage PeekMessageA\r
+#define SendMessage SendMessageA\r
+#define SendMessageTimeout SendMessageTimeoutA\r
+#define SendNotifyMessage SendNotifyMessageA\r
+#define SendMessageCallback SendMessageCallbackA\r
+#define PostMessage PostMessageA\r
+#define PostThreadMessage PostThreadMessageA\r
+#define VerFindFile VerFindFileA\r
+#define VerInstallFile VerInstallFileA\r
+#define GetFileVersionInfoSize GetFileVersionInfoSizeA\r
+#define GetFileVersionInfo GetFileVersionInfoA\r
+#define VerLanguageName VerLanguageNameA\r
+#define VerQueryValue VerQueryValueA\r
+#define CompareString CompareStringA\r
+#define LCMapString LCMapStringA\r
+#define GetLocaleInfo GetLocaleInfoA\r
+#define SetLocaleInfo SetLocaleInfoA\r
+#define GetTimeFormat GetTimeFormatA\r
+#define GetDateFormat GetDateFormatA\r
+#define GetNumberFormat GetNumberFormatA\r
+#define GetCurrencyFormat GetCurrencyFormatA\r
+#define EnumCalendarInfo EnumCalendarInfoA\r
+#define EnumTimeFormats EnumTimeFormatsA\r
+#define FoldString FoldStringA\r
+#define EnumSystemCodePages EnumSystemCodePagesA\r
+#define EnumSystemLocales EnumSystemLocalesA\r
+#define GetStringTypeEx GetStringTypeExA\r
+#define EnumDateFormats EnumDateFormatsA\r
+#define GetConsoleTitle GetConsoleTitleA\r
+#define ScrollConsoleScreenBuffer ScrollConsoleScreenBufferA\r
+#define SetConsoleTitle SetConsoleTitleA\r
+#define ReadConsole ReadConsoleA\r
+#define WriteConsole WriteConsoleA\r
+#define PeekConsoleInput PeekConsoleInputA\r
+#define ReadConsoleInput ReadConsoleInputA\r
+#define WriteConsoleInput WriteConsoleInputA\r
+#define ReadConsoleOutput ReadConsoleOutputA\r
+#define WriteConsoleOutput WriteConsoleOutputA\r
+#define ReadConsoleOutputCharacter ReadConsoleOutputCharacterA\r
+#define WriteConsoleOutputCharacter WriteConsoleOutputCharacterA\r
+#define FillConsoleOutputCharacter FillConsoleOutputCharacterA\r
+#define MultinetGetConnectionPerformance MultinetGetConnectionPerformanceA\r
+#define WNetGetLastError WNetGetLastErrorA\r
+#define WNetGetProviderName WNetGetProviderNameA\r
+#define WNetGetNetworkInformation WNetGetNetworkInformationA\r
+#define WNetConnectionDialog1 WNetConnectionDialog1A\r
+#define WNetDisconnectDialog1 WNetDisconnectDialog1A\r
+#define WNetOpenEnum WNetOpenEnumA\r
+#define WNetEnumResource WNetEnumResourceA\r
+#define WNetGetUniversalName WNetGetUniversalNameA\r
+#define WNetGetUser WNetGetUserA\r
+#define WNetAddConnection WNetAddConnectionA\r
+#define WNetAddConnection2 WNetAddConnection2A\r
+#define WNetAddConnection3 WNetAddConnection3A\r
+#define WNetCancelConnection WNetCancelConnectionA\r
+#define WNetCancelConnection2 WNetCancelConnection2A\r
+#define WNetGetConnection WNetGetConnectionA\r
+#define WNetUseConnection WNetUseConnectionA\r
+#define WNetSetConnection WNetSetConnectionA\r
+#define OpenService OpenServiceA\r
+#define QueryServiceConfig QueryServiceConfigA\r
+#define QueryServiceLockStatus QueryServiceLockStatusA\r
+#define RegisterServiceCtrlHandler RegisterServiceCtrlHandlerA\r
+#define StartServiceCtrlDispatcher StartServiceCtrlDispatcherA\r
+#define StartService StartServiceA\r
+#define ChangeServiceConfig ChangeServiceConfigA\r
+#define CreateService CreateServiceA\r
+#define EnumDependentServices EnumDependentServicesA\r
+#define EnumServicesStatus EnumServicesStatusA\r
+#define GetServiceKeyName GetServiceKeyNameA\r
+#define GetServiceDisplayName GetServiceDisplayNameA\r
+#define OpenSCManager OpenSCManagerA\r
+#define DragQueryFile DragQueryFileA\r
+#define ExtractAssociatedIcon ExtractAssociatedIconA\r
+#define ExtractIcon ExtractIconA\r
+#define FindExecutable FindExecutableA\r
+#define ShellAbout ShellAboutA\r
+#define ShellExecute ShellExecuteA\r
+#define DdeCreateStringHandle DdeCreateStringHandleA\r
+#define DdeInitialize DdeInitializeA\r
+#define DdeQueryString DdeQueryStringA\r
+#define LogonUser LogonUserA\r
+#define CreateProcessAsUser CreateProcessAsUserA\r
+\r
+#endif /* UNICODE and ASCII defines */\r
+\r
+WINBOOL STDCALL AbnormalTermination(VOID);\r
+int STDCALL AbortDoc(HDC);\r
+WINBOOL STDCALL AbortPath(HDC);\r
+WINBOOL STDCALL AbortPrinter(HANDLE);\r
+WINBOOL CALLBACK AbortProc(HDC, int);\r
+WINBOOL STDCALL AbortSystemShutdown(LPTSTR);\r
+WINBOOL STDCALL AccessCheck(\r
+ PSECURITY_DESCRIPTOR pSecurityDescriptor,\r
+ HANDLE ClientToken,\r
+ DWORD DesiredAccess,\r
+ PGENERIC_MAPPING GenericMapping,\r
+ PPRIVILEGE_SET PrivilegeSet,\r
+ LPDWORD PrivilegeSetLength,\r
+ LPDWORD GrantedAccess,\r
+ LPBOOL AccessStatus\r
+ );\r
+\r
+WINBOOL STDCALL AccessCheckAndAuditAlarm(\r
+ LPCTSTR SubsystemName,\r
+ LPVOID HandleId,\r
+ LPTSTR ObjectTypeName,\r
+ LPTSTR ObjectName,\r
+ PSECURITY_DESCRIPTOR SecurityDescriptor,\r
+ DWORD DesiredAccess,\r
+ PGENERIC_MAPPING GenericMapping,\r
+ WINBOOL ObjectCreation,\r
+ LPDWORD GrantedAccess,\r
+ LPBOOL AccessStatus,\r
+ LPBOOL pfGenerateOnClose\r
+ );\r
+\r
+LONG\r
+STDCALL\r
+InterlockedIncrement(\r
+ LPLONG lpAddend\r
+ );\r
+\r
+LONG\r
+STDCALL\r
+InterlockedDecrement(\r
+ LPLONG lpAddend\r
+ );\r
+\r
+LONG\r
+STDCALL\r
+InterlockedExchange(\r
+ LPLONG Target,\r
+ LONG Value\r
+ );\r
+\r
+WINBOOL\r
+STDCALL\r
+FreeResource(\r
+ HGLOBAL hResData\r
+ );\r
+\r
+LPVOID\r
+STDCALL\r
+LockResource(\r
+ HGLOBAL hResData\r
+ );\r
+\r
+int\r
+STDCALL\r
+WinMain(\r
+ HINSTANCE hInstance,\r
+ HINSTANCE hPrevInstance,\r
+ LPSTR lpCmdLine,\r
+ int nShowCmd\r
+ );\r
+\r
+WINBOOL\r
+STDCALL\r
+FreeLibrary(\r
+ HINSTANCE hLibModule\r
+ );\r
+\r
+\r
+VOID\r
+STDCALL\r
+FreeLibraryAndExitThread(\r
+ HMODULE hLibModule,\r
+ DWORD dwExitCode\r
+ );\r
+\r
+WINBOOL\r
+STDCALL\r
+DisableThreadLibraryCalls(\r
+ HMODULE hLibModule\r
+ );\r
+\r
+FARPROC\r
+STDCALL\r
+GetProcAddress(\r
+ HINSTANCE hModule,\r
+ LPCSTR lpProcName\r
+ );\r
+\r
+DWORD\r
+STDCALL\r
+GetVersion( VOID );\r
+\r
+HGLOBAL\r
+STDCALL\r
+GlobalAlloc(\r
+ UINT uFlags,\r
+ DWORD dwBytes\r
+ );\r
+\r
+HGLOBAL\r
+GlobalDiscard(\r
+ HGLOBAL hglbMem\r
+ );\r
+\r
+HGLOBAL\r
+STDCALL\r
+GlobalReAlloc(\r
+ HGLOBAL hMem,\r
+ DWORD dwBytes,\r
+ UINT uFlags\r
+ );\r
+\r
+DWORD\r
+STDCALL\r
+GlobalSize(\r
+ HGLOBAL hMem\r
+ );\r
+\r
+UINT\r
+STDCALL\r
+GlobalFlags(\r
+ HGLOBAL hMem\r
+ );\r
+\r
+\r
+LPVOID\r
+STDCALL\r
+GlobalLock(\r
+ HGLOBAL hMem\r
+ );\r
+\r
+HGLOBAL\r
+STDCALL\r
+GlobalHandle(\r
+ LPCVOID pMem\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+GlobalUnlock(\r
+ HGLOBAL hMem\r
+ );\r
+\r
+\r
+HGLOBAL\r
+STDCALL\r
+GlobalFree(\r
+ HGLOBAL hMem\r
+ );\r
+\r
+UINT\r
+STDCALL\r
+GlobalCompact(\r
+ DWORD dwMinFree\r
+ );\r
+\r
+\r
+VOID\r
+STDCALL\r
+GlobalFix(\r
+ HGLOBAL hMem\r
+ );\r
+\r
+\r
+VOID\r
+STDCALL\r
+GlobalUnfix(\r
+ HGLOBAL hMem\r
+ );\r
+\r
+\r
+LPVOID\r
+STDCALL\r
+GlobalWire(\r
+ HGLOBAL hMem\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+GlobalUnWire(\r
+ HGLOBAL hMem\r
+ );\r
+\r
+\r
+VOID\r
+STDCALL\r
+GlobalMemoryStatus(\r
+ LPMEMORYSTATUS lpBuffer\r
+ );\r
+\r
+\r
+HLOCAL\r
+STDCALL\r
+LocalAlloc(\r
+ UINT uFlags,\r
+ UINT uBytes\r
+ );\r
+\r
+HLOCAL\r
+LocalDiscard(\r
+ HLOCAL hlocMem\r
+ );\r
+\r
+HLOCAL\r
+STDCALL\r
+LocalReAlloc(\r
+ HLOCAL hMem,\r
+ UINT uBytes,\r
+ UINT uFlags\r
+ );\r
+\r
+\r
+LPVOID\r
+STDCALL\r
+LocalLock(\r
+ HLOCAL hMem\r
+ );\r
+\r
+\r
+HLOCAL\r
+STDCALL\r
+LocalHandle(\r
+ LPCVOID pMem\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+LocalUnlock(\r
+ HLOCAL hMem\r
+ );\r
+\r
+\r
+UINT\r
+STDCALL\r
+LocalSize(\r
+ HLOCAL hMem\r
+ );\r
+\r
+\r
+UINT\r
+STDCALL\r
+LocalFlags(\r
+ HLOCAL hMem\r
+ );\r
+\r
+\r
+HLOCAL\r
+STDCALL\r
+LocalFree(\r
+ HLOCAL hMem\r
+ );\r
+\r
+\r
+UINT\r
+STDCALL\r
+LocalShrink(\r
+ HLOCAL hMem,\r
+ UINT cbNewSize\r
+ );\r
+\r
+\r
+UINT\r
+STDCALL\r
+LocalCompact(\r
+ UINT uMinFree\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+FlushInstructionCache(\r
+ HANDLE hProcess,\r
+ LPCVOID lpBaseAddress,\r
+ DWORD dwSize\r
+ );\r
+\r
+\r
+LPVOID\r
+STDCALL\r
+VirtualAlloc(\r
+ LPVOID lpAddress,\r
+ DWORD dwSize,\r
+ DWORD flAllocationType,\r
+ DWORD flProtect\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+VirtualFree(\r
+ LPVOID lpAddress,\r
+ DWORD dwSize,\r
+ DWORD dwFreeType\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+VirtualProtect(\r
+ LPVOID lpAddress,\r
+ DWORD dwSize,\r
+ DWORD flNewProtect,\r
+ PDWORD lpflOldProtect\r
+ );\r
+\r
+\r
+DWORD\r
+STDCALL\r
+VirtualQuery(\r
+ LPCVOID lpAddress,\r
+ PMEMORY_BASIC_INFORMATION lpBuffer,\r
+ DWORD dwLength\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+VirtualProtectEx(\r
+ HANDLE hProcess,\r
+ LPVOID lpAddress,\r
+ DWORD dwSize,\r
+ DWORD flNewProtect,\r
+ PDWORD lpflOldProtect\r
+ );\r
+\r
+\r
+DWORD\r
+STDCALL\r
+VirtualQueryEx(\r
+ HANDLE hProcess,\r
+ LPCVOID lpAddress,\r
+ PMEMORY_BASIC_INFORMATION lpBuffer,\r
+ DWORD dwLength\r
+ );\r
+\r
+\r
+HANDLE\r
+STDCALL\r
+HeapCreate(\r
+ DWORD flOptions,\r
+ DWORD dwInitialSize,\r
+ DWORD dwMaximumSize\r
+ );\r
+\r
+WINBOOL\r
+STDCALL\r
+HeapDestroy(\r
+ HANDLE hHeap\r
+ );\r
+\r
+LPVOID\r
+STDCALL\r
+HeapAlloc(\r
+ HANDLE hHeap,\r
+ DWORD dwFlags,\r
+ DWORD dwBytes\r
+ );\r
+\r
+LPVOID\r
+STDCALL\r
+HeapReAlloc(\r
+ HANDLE hHeap,\r
+ DWORD dwFlags,\r
+ LPVOID lpMem,\r
+ DWORD dwBytes\r
+ );\r
+\r
+WINBOOL\r
+STDCALL\r
+HeapFree(\r
+ HANDLE hHeap,\r
+ DWORD dwFlags,\r
+ LPVOID lpMem\r
+ );\r
+\r
+DWORD\r
+STDCALL\r
+HeapSize(\r
+ HANDLE hHeap,\r
+ DWORD dwFlags,\r
+ LPCVOID lpMem\r
+ );\r
+\r
+WINBOOL\r
+STDCALL\r
+HeapValidate(\r
+ HANDLE hHeap,\r
+ DWORD dwFlags,\r
+ LPCVOID lpMem\r
+ );\r
+\r
+UINT\r
+STDCALL\r
+HeapCompact(\r
+ HANDLE hHeap,\r
+ DWORD dwFlags\r
+ );\r
+\r
+HANDLE\r
+STDCALL\r
+GetProcessHeap( VOID );\r
+\r
+DWORD\r
+STDCALL\r
+GetProcessHeaps(\r
+ DWORD NumberOfHeaps,\r
+ PHANDLE ProcessHeaps\r
+ );\r
+\r
+WINBOOL\r
+STDCALL\r
+HeapLock(\r
+ HANDLE hHeap\r
+ );\r
+\r
+WINBOOL\r
+STDCALL\r
+HeapUnlock(\r
+ HANDLE hHeap\r
+ );\r
+\r
+WINBOOL\r
+STDCALL\r
+HeapWalk(\r
+ HANDLE hHeap,\r
+ LPPROCESS_HEAP_ENTRY lpEntry\r
+ );\r
+\r
+WINBOOL\r
+STDCALL\r
+GetProcessAffinityMask(\r
+ HANDLE hProcess,\r
+ LPDWORD lpProcessAffinityMask,\r
+ LPDWORD lpSystemAffinityMask\r
+ );\r
+\r
+WINBOOL\r
+STDCALL\r
+GetProcessTimes(\r
+ HANDLE hProcess,\r
+ LPFILETIME lpCreationTime,\r
+ LPFILETIME lpExitTime,\r
+ LPFILETIME lpKernelTime,\r
+ LPFILETIME lpUserTime\r
+ );\r
+\r
+WINBOOL\r
+STDCALL\r
+GetProcessWorkingSetSize(\r
+ HANDLE hProcess,\r
+ LPDWORD lpMinimumWorkingSetSize,\r
+ LPDWORD lpMaximumWorkingSetSize\r
+ );\r
+\r
+WINBOOL\r
+STDCALL\r
+SetProcessWorkingSetSize(\r
+ HANDLE hProcess,\r
+ DWORD dwMinimumWorkingSetSize,\r
+ DWORD dwMaximumWorkingSetSize\r
+ );\r
+\r
+HANDLE\r
+STDCALL\r
+OpenProcess(\r
+ DWORD dwDesiredAccess,\r
+ WINBOOL bInheritHandle,\r
+ DWORD dwProcessId\r
+ );\r
+\r
+HANDLE\r
+STDCALL\r
+GetCurrentProcess(\r
+ VOID\r
+ );\r
+\r
+DWORD\r
+STDCALL\r
+GetCurrentProcessId(\r
+ VOID\r
+ );\r
+\r
+VOID\r
+STDCALL\r
+ExitProcess(\r
+ UINT uExitCode\r
+ ) __attribute__ ((noreturn));\r
+\r
+WINBOOL\r
+STDCALL\r
+TerminateProcess(\r
+ HANDLE hProcess,\r
+ UINT uExitCode\r
+ );\r
+\r
+WINBOOL\r
+STDCALL\r
+GetExitCodeProcess(\r
+ HANDLE hProcess,\r
+ LPDWORD lpExitCode\r
+ );\r
+\r
+VOID\r
+STDCALL\r
+FatalExit(\r
+ int ExitCode\r
+ );\r
+\r
+VOID\r
+STDCALL\r
+RaiseException(\r
+ DWORD dwExceptionCode,\r
+ DWORD dwExceptionFlags,\r
+ DWORD nNumberOfArguments,\r
+ CONST DWORD *lpArguments\r
+ );\r
+\r
+LONG\r
+STDCALL\r
+UnhandledExceptionFilter(\r
+ struct _EXCEPTION_POINTERS *ExceptionInfo\r
+ );\r
+\r
+/*\r
+ TODO: what is TOP_LEVEL_EXCEPTION_FILTER?\r
+LPTOP_LEVEL_EXCEPTION_FILTER\r
+STDCALL\r
+SetUnhandledExceptionFilter(\r
+ LPTOP_LEVEL_EXCEPTION_FILTER lpTopLevelExceptionFilter\r
+ );\r
+*/\r
+\r
+\r
+HANDLE\r
+STDCALL\r
+CreateThread(\r
+ LPSECURITY_ATTRIBUTES lpThreadAttributes,\r
+ DWORD dwStackSize,\r
+ LPTHREAD_START_ROUTINE lpStartAddress,\r
+ LPVOID lpParameter,\r
+ DWORD dwCreationFlags,\r
+ LPDWORD lpThreadId\r
+ );\r
+\r
+\r
+HANDLE\r
+STDCALL\r
+CreateRemoteThread(\r
+ HANDLE hProcess,\r
+ LPSECURITY_ATTRIBUTES lpThreadAttributes,\r
+ DWORD dwStackSize,\r
+ LPTHREAD_START_ROUTINE lpStartAddress,\r
+ LPVOID lpParameter,\r
+ DWORD dwCreationFlags,\r
+ LPDWORD lpThreadId\r
+ );\r
+\r
+\r
+HANDLE\r
+STDCALL\r
+GetCurrentThread(\r
+ VOID\r
+ );\r
+\r
+\r
+DWORD\r
+STDCALL\r
+GetCurrentThreadId(\r
+ VOID\r
+ );\r
+\r
+\r
+DWORD\r
+STDCALL\r
+SetThreadAffinityMask(\r
+ HANDLE hThread,\r
+ DWORD dwThreadAffinityMask\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+SetThreadPriority(\r
+ HANDLE hThread,\r
+ int nPriority\r
+ );\r
+\r
+\r
+int\r
+STDCALL\r
+GetThreadPriority(\r
+ HANDLE hThread\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+GetThreadTimes(\r
+ HANDLE hThread,\r
+ LPFILETIME lpCreationTime,\r
+ LPFILETIME lpExitTime,\r
+ LPFILETIME lpKernelTime,\r
+ LPFILETIME lpUserTime\r
+ );\r
+\r
+\r
+VOID\r
+STDCALL\r
+ExitThread(\r
+ DWORD dwExitCode\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+TerminateThread(\r
+ HANDLE hThread,\r
+ DWORD dwExitCode\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+GetExitCodeThread(\r
+ HANDLE hThread,\r
+ LPDWORD lpExitCode\r
+ );\r
+\r
+WINBOOL\r
+STDCALL\r
+GetThreadSelectorEntry(\r
+ HANDLE hThread,\r
+ DWORD dwSelector,\r
+ LPLDT_ENTRY lpSelectorEntry\r
+ );\r
+\r
+\r
+DWORD\r
+STDCALL\r
+GetLastError(\r
+ VOID\r
+ );\r
+\r
+\r
+VOID\r
+STDCALL\r
+SetLastError(\r
+ DWORD dwErrCode\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+GetOverlappedResult(\r
+ HANDLE hFile,\r
+ LPOVERLAPPED lpOverlapped,\r
+ LPDWORD lpNumberOfBytesTransferred,\r
+ WINBOOL bWait\r
+ );\r
+\r
+\r
+HANDLE\r
+STDCALL\r
+CreateIoCompletionPort(\r
+ HANDLE FileHandle,\r
+ HANDLE ExistingCompletionPort,\r
+ DWORD CompletionKey,\r
+ DWORD NumberOfConcurrentThreads\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+GetQueuedCompletionStatus(\r
+ HANDLE CompletionPort,\r
+ LPDWORD lpNumberOfBytesTransferred,\r
+ LPDWORD lpCompletionKey,\r
+ LPOVERLAPPED *lpOverlapped,\r
+ DWORD dwMilliseconds\r
+ );\r
+\r
+UINT\r
+STDCALL\r
+SetErrorMode(\r
+ UINT uMode\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+ReadProcessMemory(\r
+ HANDLE hProcess,\r
+ LPCVOID lpBaseAddress,\r
+ LPVOID lpBuffer,\r
+ DWORD nSize,\r
+ LPDWORD lpNumberOfBytesRead\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+WriteProcessMemory(\r
+ HANDLE hProcess,\r
+ LPVOID lpBaseAddress,\r
+ LPVOID lpBuffer,\r
+ DWORD nSize,\r
+ LPDWORD lpNumberOfBytesWritten\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+GetThreadContext(\r
+ HANDLE hThread,\r
+ LPCONTEXT lpContext\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+SetThreadContext(\r
+ HANDLE hThread,\r
+ CONST CONTEXT *lpContext\r
+ );\r
+\r
+\r
+DWORD\r
+STDCALL\r
+SuspendThread(\r
+ HANDLE hThread\r
+ );\r
+\r
+\r
+DWORD\r
+STDCALL\r
+ResumeThread(\r
+ HANDLE hThread\r
+ );\r
+\r
+\r
+VOID\r
+STDCALL\r
+DebugBreak(\r
+ VOID\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+WaitForDebugEvent(\r
+ LPDEBUG_EVENT lpDebugEvent,\r
+ DWORD dwMilliseconds\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+ContinueDebugEvent(\r
+ DWORD dwProcessId,\r
+ DWORD dwThreadId,\r
+ DWORD dwContinueStatus\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+DebugActiveProcess(\r
+ DWORD dwProcessId\r
+ );\r
+\r
+\r
+VOID\r
+STDCALL\r
+InitializeCriticalSection(\r
+ LPCRITICAL_SECTION lpCriticalSection\r
+ );\r
+\r
+\r
+VOID\r
+STDCALL\r
+EnterCriticalSection(\r
+ LPCRITICAL_SECTION lpCriticalSection\r
+ );\r
+\r
+\r
+VOID\r
+STDCALL\r
+LeaveCriticalSection(\r
+ LPCRITICAL_SECTION lpCriticalSection\r
+ );\r
+\r
+\r
+VOID\r
+STDCALL\r
+DeleteCriticalSection(\r
+ LPCRITICAL_SECTION lpCriticalSection\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+SetEvent(\r
+ HANDLE hEvent\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+ResetEvent(\r
+ HANDLE hEvent\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+PulseEvent(\r
+ HANDLE hEvent\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+ReleaseSemaphore(\r
+ HANDLE hSemaphore,\r
+ LONG lReleaseCount,\r
+ LPLONG lpPreviousCount\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+ReleaseMutex(\r
+ HANDLE hMutex\r
+ );\r
+\r
+\r
+DWORD\r
+STDCALL\r
+WaitForSingleObject(\r
+ HANDLE hHandle,\r
+ DWORD dwMilliseconds\r
+ );\r
+\r
+\r
+DWORD\r
+STDCALL\r
+WaitForMultipleObjects(\r
+ DWORD nCount,\r
+ CONST HANDLE *lpHandles,\r
+ WINBOOL bWaitAll,\r
+ DWORD dwMilliseconds\r
+ );\r
+\r
+\r
+VOID\r
+STDCALL\r
+Sleep(\r
+ DWORD dwMilliseconds\r
+ );\r
+\r
+\r
+HGLOBAL\r
+STDCALL\r
+LoadResource(\r
+ HINSTANCE hModule,\r
+ HRSRC hResInfo\r
+ );\r
+\r
+\r
+DWORD\r
+STDCALL\r
+SizeofResource(\r
+ HINSTANCE hModule,\r
+ HRSRC hResInfo\r
+ );\r
+\r
+\r
+\r
+ATOM\r
+STDCALL\r
+GlobalDeleteAtom(\r
+ ATOM nAtom\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+InitAtomTable(\r
+ DWORD nSize\r
+ );\r
+\r
+\r
+ATOM\r
+STDCALL\r
+DeleteAtom(\r
+ ATOM nAtom\r
+ );\r
+\r
+\r
+UINT\r
+STDCALL\r
+SetHandleCount(\r
+ UINT uNumber\r
+ );\r
+\r
+\r
+DWORD\r
+STDCALL\r
+GetLogicalDrives(\r
+ VOID\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+LockFile(\r
+ HANDLE hFile,\r
+ DWORD dwFileOffsetLow,\r
+ DWORD dwFileOffsetHigh,\r
+ DWORD nNumberOfBytesToLockLow,\r
+ DWORD nNumberOfBytesToLockHigh\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+UnlockFile(\r
+ HANDLE hFile,\r
+ DWORD dwFileOffsetLow,\r
+ DWORD dwFileOffsetHigh,\r
+ DWORD nNumberOfBytesToUnlockLow,\r
+ DWORD nNumberOfBytesToUnlockHigh\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+LockFileEx(\r
+ HANDLE hFile,\r
+ DWORD dwFlags,\r
+ DWORD dwReserved,\r
+ DWORD nNumberOfBytesToLockLow,\r
+ DWORD nNumberOfBytesToLockHigh,\r
+ LPOVERLAPPED lpOverlapped\r
+ );\r
+\r
+WINBOOL\r
+STDCALL\r
+UnlockFileEx(\r
+ HANDLE hFile,\r
+ DWORD dwReserved,\r
+ DWORD nNumberOfBytesToUnlockLow,\r
+ DWORD nNumberOfBytesToUnlockHigh,\r
+ LPOVERLAPPED lpOverlapped\r
+ );\r
+\r
+WINBOOL\r
+STDCALL\r
+GetFileInformationByHandle(\r
+ HANDLE hFile,\r
+ LPBY_HANDLE_FILE_INFORMATION lpFileInformation\r
+ );\r
+\r
+\r
+DWORD\r
+STDCALL\r
+GetFileType(\r
+ HANDLE hFile\r
+ );\r
+\r
+\r
+DWORD\r
+STDCALL\r
+GetFileSize(\r
+ HANDLE hFile,\r
+ LPDWORD lpFileSizeHigh\r
+ );\r
+\r
+\r
+HANDLE\r
+STDCALL\r
+GetStdHandle(\r
+ DWORD nStdHandle\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+SetStdHandle(\r
+ DWORD nStdHandle,\r
+ HANDLE hHandle\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+WriteFile(\r
+ HANDLE hFile,\r
+ LPCVOID lpBuffer,\r
+ DWORD nNumberOfBytesToWrite,\r
+ LPDWORD lpNumberOfBytesWritten,\r
+ LPOVERLAPPED lpOverlapped\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+ReadFile(\r
+ HANDLE hFile,\r
+ LPVOID lpBuffer,\r
+ DWORD nNumberOfBytesToRead,\r
+ LPDWORD lpNumberOfBytesRead,\r
+ LPOVERLAPPED lpOverlapped\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+FlushFileBuffers(\r
+ HANDLE hFile\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+DeviceIoControl(\r
+ HANDLE hDevice,\r
+ DWORD dwIoControlCode,\r
+ LPVOID lpInBuffer,\r
+ DWORD nInBufferSize,\r
+ LPVOID lpOutBuffer,\r
+ DWORD nOutBufferSize,\r
+ LPDWORD lpBytesReturned,\r
+ LPOVERLAPPED lpOverlapped\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+SetEndOfFile(\r
+ HANDLE hFile\r
+ );\r
+\r
+\r
+DWORD\r
+STDCALL\r
+SetFilePointer(\r
+ HANDLE hFile,\r
+ LONG lDistanceToMove,\r
+ PLONG lpDistanceToMoveHigh,\r
+ DWORD dwMoveMethod\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+FindClose(\r
+ HANDLE hFindFile\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+GetFileTime(\r
+ HANDLE hFile,\r
+ LPFILETIME lpCreationTime,\r
+ LPFILETIME lpLastAccessTime,\r
+ LPFILETIME lpLastWriteTime\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+SetFileTime(\r
+ HANDLE hFile,\r
+ CONST FILETIME *lpCreationTime,\r
+ CONST FILETIME *lpLastAccessTime,\r
+ CONST FILETIME *lpLastWriteTime\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+CloseHandle(\r
+ HANDLE hObject\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+DuplicateHandle(\r
+ HANDLE hSourceProcessHandle,\r
+ HANDLE hSourceHandle,\r
+ HANDLE hTargetProcessHandle,\r
+ LPHANDLE lpTargetHandle,\r
+ DWORD dwDesiredAccess,\r
+ WINBOOL bInheritHandle,\r
+ DWORD dwOptions\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+GetHandleInformation(\r
+ HANDLE hObject,\r
+ LPDWORD lpdwFlags\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+SetHandleInformation(\r
+ HANDLE hObject,\r
+ DWORD dwMask,\r
+ DWORD dwFlags\r
+ );\r
+\r
+DWORD\r
+STDCALL\r
+LoadModule(\r
+ LPCSTR lpModuleName,\r
+ LPVOID lpParameterBlock\r
+ );\r
+\r
+\r
+UINT\r
+STDCALL\r
+WinExec(\r
+ LPCSTR lpCmdLine,\r
+ UINT uCmdShow\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+ClearCommBreak(\r
+ HANDLE hFile\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+ClearCommError(\r
+ HANDLE hFile,\r
+ LPDWORD lpErrors,\r
+ LPCOMSTAT lpStat\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+SetupComm(\r
+ HANDLE hFile,\r
+ DWORD dwInQueue,\r
+ DWORD dwOutQueue\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+EscapeCommFunction(\r
+ HANDLE hFile,\r
+ DWORD dwFunc\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+GetCommConfig(\r
+ HANDLE hCommDev,\r
+ LPCOMMCONFIG lpCC,\r
+ LPDWORD lpdwSize\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+GetCommMask(\r
+ HANDLE hFile,\r
+ LPDWORD lpEvtMask\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+GetCommProperties(\r
+ HANDLE hFile,\r
+ LPCOMMPROP lpCommProp\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+GetCommModemStatus(\r
+ HANDLE hFile,\r
+ LPDWORD lpModemStat\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+GetCommState(\r
+ HANDLE hFile,\r
+ LPDCB lpDCB\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+GetCommTimeouts(\r
+ HANDLE hFile,\r
+ LPCOMMTIMEOUTS lpCommTimeouts\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+PurgeComm(\r
+ HANDLE hFile,\r
+ DWORD dwFlags\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+SetCommBreak(\r
+ HANDLE hFile\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+SetCommConfig(\r
+ HANDLE hCommDev,\r
+ LPCOMMCONFIG lpCC,\r
+ DWORD dwSize\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+SetCommMask(\r
+ HANDLE hFile,\r
+ DWORD dwEvtMask\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+SetCommState(\r
+ HANDLE hFile,\r
+ LPDCB lpDCB\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+SetCommTimeouts(\r
+ HANDLE hFile,\r
+ LPCOMMTIMEOUTS lpCommTimeouts\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+TransmitCommChar(\r
+ HANDLE hFile,\r
+ char cChar\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+WaitCommEvent(\r
+ HANDLE hFile,\r
+ LPDWORD lpEvtMask,\r
+ LPOVERLAPPED lpOverlapped\r
+ );\r
+\r
+\r
+\r
+DWORD\r
+STDCALL\r
+SetTapePosition(\r
+ HANDLE hDevice,\r
+ DWORD dwPositionMethod,\r
+ DWORD dwPartition,\r
+ DWORD dwOffsetLow,\r
+ DWORD dwOffsetHigh,\r
+ WINBOOL bImmediate\r
+ );\r
+\r
+\r
+DWORD\r
+STDCALL\r
+GetTapePosition(\r
+ HANDLE hDevice,\r
+ DWORD dwPositionType,\r
+ LPDWORD lpdwPartition,\r
+ LPDWORD lpdwOffsetLow,\r
+ LPDWORD lpdwOffsetHigh\r
+ );\r
+\r
+\r
+DWORD\r
+STDCALL\r
+PrepareTape(\r
+ HANDLE hDevice,\r
+ DWORD dwOperation,\r
+ WINBOOL bImmediate\r
+ );\r
+\r
+\r
+DWORD\r
+STDCALL\r
+EraseTape(\r
+ HANDLE hDevice,\r
+ DWORD dwEraseType,\r
+ WINBOOL bImmediate\r
+ );\r
+\r
+\r
+DWORD\r
+STDCALL\r
+CreateTapePartition(\r
+ HANDLE hDevice,\r
+ DWORD dwPartitionMethod,\r
+ DWORD dwCount,\r
+ DWORD dwSize\r
+ );\r
+\r
+\r
+DWORD\r
+STDCALL\r
+WriteTapemark(\r
+ HANDLE hDevice,\r
+ DWORD dwTapemarkType,\r
+ DWORD dwTapemarkCount,\r
+ WINBOOL bImmediate\r
+ );\r
+\r
+\r
+DWORD\r
+STDCALL\r
+GetTapeStatus(\r
+ HANDLE hDevice\r
+ );\r
+\r
+\r
+DWORD\r
+STDCALL\r
+GetTapeParameters(\r
+ HANDLE hDevice,\r
+ DWORD dwOperation,\r
+ LPDWORD lpdwSize,\r
+ LPVOID lpTapeInformation\r
+ );\r
+\r
+DWORD\r
+STDCALL\r
+SetTapeParameters(\r
+ HANDLE hDevice,\r
+ DWORD dwOperation,\r
+ LPVOID lpTapeInformation\r
+ );\r
+\r
+WINBOOL\r
+STDCALL\r
+Beep(\r
+ DWORD dwFreq,\r
+ DWORD dwDuration\r
+ );\r
+\r
+\r
+VOID\r
+STDCALL\r
+OpenSound(\r
+ VOID\r
+ );\r
+\r
+\r
+VOID\r
+STDCALL\r
+CloseSound(\r
+ VOID\r
+ );\r
+\r
+\r
+VOID\r
+STDCALL\r
+StartSound(\r
+ VOID\r
+ );\r
+\r
+\r
+VOID\r
+STDCALL\r
+StopSound(\r
+ VOID\r
+ );\r
+\r
+\r
+DWORD\r
+STDCALL\r
+WaitSoundState(\r
+ DWORD nState\r
+ );\r
+\r
+\r
+DWORD\r
+STDCALL\r
+SyncAllVoices(\r
+ VOID\r
+ );\r
+\r
+\r
+DWORD\r
+STDCALL\r
+CountVoiceNotes(\r
+ DWORD nVoice\r
+ );\r
+\r
+\r
+LPDWORD\r
+STDCALL\r
+GetThresholdEvent(\r
+ VOID\r
+ );\r
+\r
+\r
+DWORD\r
+STDCALL\r
+GetThresholdStatus(\r
+ VOID\r
+ );\r
+\r
+\r
+DWORD\r
+STDCALL\r
+SetSoundNoise(\r
+ DWORD nSource,\r
+ DWORD nDuration\r
+ );\r
+\r
+\r
+DWORD\r
+STDCALL\r
+SetVoiceAccent(\r
+ DWORD nVoice,\r
+ DWORD nTempo,\r
+ DWORD nVolume,\r
+ DWORD nMode,\r
+ DWORD nPitch\r
+ );\r
+\r
+\r
+DWORD\r
+STDCALL\r
+SetVoiceEnvelope(\r
+ DWORD nVoice,\r
+ DWORD nShape,\r
+ DWORD nRepeat\r
+ );\r
+\r
+\r
+DWORD\r
+STDCALL\r
+SetVoiceNote(\r
+ DWORD nVoice,\r
+ DWORD nValue,\r
+ DWORD nLength,\r
+ DWORD nCdots\r
+ );\r
+\r
+\r
+DWORD\r
+STDCALL\r
+SetVoiceQueueSize(\r
+ DWORD nVoice,\r
+ DWORD nBytes\r
+ );\r
+\r
+\r
+DWORD\r
+STDCALL\r
+SetVoiceSound(\r
+ DWORD nVoice,\r
+ DWORD Frequency,\r
+ DWORD nDuration\r
+ );\r
+\r
+\r
+DWORD\r
+STDCALL\r
+SetVoiceThreshold(\r
+ DWORD nVoice,\r
+ DWORD nNotes\r
+ );\r
+\r
+\r
+int\r
+STDCALL\r
+MulDiv(\r
+ int nNumber,\r
+ int nNumerator,\r
+ int nDenominator\r
+ );\r
+\r
+\r
+VOID\r
+STDCALL\r
+GetSystemTime(\r
+ LPSYSTEMTIME lpSystemTime\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+SetSystemTime(\r
+ CONST SYSTEMTIME *lpSystemTime\r
+ );\r
+\r
+\r
+VOID\r
+STDCALL\r
+GetLocalTime(\r
+ LPSYSTEMTIME lpSystemTime\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+SetLocalTime(\r
+ CONST SYSTEMTIME *lpSystemTime\r
+ );\r
+\r
+\r
+VOID\r
+STDCALL\r
+GetSystemInfo(\r
+ LPSYSTEM_INFO lpSystemInfo\r
+ );\r
+\r
+WINBOOL\r
+STDCALL\r
+SystemTimeToTzSpecificLocalTime(\r
+ LPTIME_ZONE_INFORMATION lpTimeZoneInformation,\r
+ LPSYSTEMTIME lpUniversalTime,\r
+ LPSYSTEMTIME lpLocalTime\r
+ );\r
+\r
+\r
+DWORD\r
+STDCALL\r
+GetTimeZoneInformation(\r
+ LPTIME_ZONE_INFORMATION lpTimeZoneInformation\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+SetTimeZoneInformation(\r
+ CONST TIME_ZONE_INFORMATION *lpTimeZoneInformation\r
+ );\r
+\r
+WINBOOL\r
+STDCALL\r
+SystemTimeToFileTime(\r
+ CONST SYSTEMTIME *lpSystemTime,\r
+ LPFILETIME lpFileTime\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+FileTimeToLocalFileTime(\r
+ CONST FILETIME *lpFileTime,\r
+ LPFILETIME lpLocalFileTime\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+LocalFileTimeToFileTime(\r
+ CONST FILETIME *lpLocalFileTime,\r
+ LPFILETIME lpFileTime\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+FileTimeToSystemTime(\r
+ CONST FILETIME *lpFileTime,\r
+ LPSYSTEMTIME lpSystemTime\r
+ );\r
+\r
+\r
+LONG\r
+STDCALL\r
+CompareFileTime(\r
+ CONST FILETIME *lpFileTime1,\r
+ CONST FILETIME *lpFileTime2\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+FileTimeToDosDateTime(\r
+ CONST FILETIME *lpFileTime,\r
+ LPWORD lpFatDate,\r
+ LPWORD lpFatTime\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+DosDateTimeToFileTime(\r
+ WORD wFatDate,\r
+ WORD wFatTime,\r
+ LPFILETIME lpFileTime\r
+ );\r
+\r
+\r
+DWORD\r
+STDCALL\r
+GetTickCount(\r
+ VOID\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+SetSystemTimeAdjustment(\r
+ DWORD dwTimeAdjustment,\r
+ WINBOOL bTimeAdjustmentDisabled\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+GetSystemTimeAdjustment(\r
+ PDWORD lpTimeAdjustment,\r
+ PDWORD lpTimeIncrement,\r
+ PWINBOOL lpTimeAdjustmentDisabled\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+CreatePipe(\r
+ PHANDLE hReadPipe,\r
+ PHANDLE hWritePipe,\r
+ LPSECURITY_ATTRIBUTES lpPipeAttributes,\r
+ DWORD nSize\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+ConnectNamedPipe(\r
+ HANDLE hNamedPipe,\r
+ LPOVERLAPPED lpOverlapped\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+DisconnectNamedPipe(\r
+ HANDLE hNamedPipe\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+SetNamedPipeHandleState(\r
+ HANDLE hNamedPipe,\r
+ LPDWORD lpMode,\r
+ LPDWORD lpMaxCollectionCount,\r
+ LPDWORD lpCollectDataTimeout\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+GetNamedPipeInfo(\r
+ HANDLE hNamedPipe,\r
+ LPDWORD lpFlags,\r
+ LPDWORD lpOutBufferSize,\r
+ LPDWORD lpInBufferSize,\r
+ LPDWORD lpMaxInstances\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+PeekNamedPipe(\r
+ HANDLE hNamedPipe,\r
+ LPVOID lpBuffer,\r
+ DWORD nBufferSize,\r
+ LPDWORD lpBytesRead,\r
+ LPDWORD lpTotalBytesAvail,\r
+ LPDWORD lpBytesLeftThisMessage\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+TransactNamedPipe(\r
+ HANDLE hNamedPipe,\r
+ LPVOID lpInBuffer,\r
+ DWORD nInBufferSize,\r
+ LPVOID lpOutBuffer,\r
+ DWORD nOutBufferSize,\r
+ LPDWORD lpBytesRead,\r
+ LPOVERLAPPED lpOverlapped\r
+ );\r
+\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+GetMailslotInfo(\r
+ HANDLE hMailslot,\r
+ LPDWORD lpMaxMessageSize,\r
+ LPDWORD lpNextSize,\r
+ LPDWORD lpMessageCount,\r
+ LPDWORD lpReadTimeout\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+SetMailslotInfo(\r
+ HANDLE hMailslot,\r
+ DWORD lReadTimeout\r
+ );\r
+\r
+\r
+LPVOID\r
+STDCALL\r
+MapViewOfFile(\r
+ HANDLE hFileMappingObject,\r
+ DWORD dwDesiredAccess,\r
+ DWORD dwFileOffsetHigh,\r
+ DWORD dwFileOffsetLow,\r
+ DWORD dwNumberOfBytesToMap\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+FlushViewOfFile(\r
+ LPCVOID lpBaseAddress,\r
+ DWORD dwNumberOfBytesToFlush\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+UnmapViewOfFile(\r
+ LPVOID lpBaseAddress\r
+ );\r
+\r
+HFILE\r
+STDCALL\r
+OpenFile(\r
+ LPCSTR lpFileName,\r
+ LPOFSTRUCT lpReOpenBuff,\r
+ UINT uStyle\r
+ );\r
+\r
+\r
+HFILE\r
+STDCALL\r
+_lopen(\r
+ LPCSTR lpPathName,\r
+ int iReadWrite\r
+ );\r
+\r
+\r
+HFILE\r
+STDCALL\r
+_lcreat(\r
+ LPCSTR lpPathName,\r
+ int iAttribute\r
+ );\r
+\r
+\r
+UINT\r
+STDCALL\r
+_lread(\r
+ HFILE hFile,\r
+ LPVOID lpBuffer,\r
+ UINT uBytes\r
+ );\r
+\r
+\r
+UINT\r
+STDCALL\r
+_lwrite(\r
+ HFILE hFile,\r
+ LPCSTR lpBuffer,\r
+ UINT uBytes\r
+ );\r
+\r
+\r
+long\r
+STDCALL\r
+_hread(\r
+ HFILE hFile,\r
+ LPVOID lpBuffer,\r
+ long lBytes\r
+ );\r
+\r
+\r
+long\r
+STDCALL\r
+_hwrite(\r
+ HFILE hFile,\r
+ LPCSTR lpBuffer,\r
+ long lBytes\r
+ );\r
+\r
+\r
+HFILE\r
+STDCALL\r
+_lclose(\r
+ HFILE hFile\r
+ );\r
+\r
+\r
+LONG\r
+STDCALL\r
+_llseek(\r
+ HFILE hFile,\r
+ LONG lOffset,\r
+ int iOrigin\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+IsTextUnicode(\r
+ CONST LPVOID lpBuffer,\r
+ int cb,\r
+ LPINT lpi\r
+ );\r
+\r
+\r
+DWORD\r
+STDCALL\r
+TlsAlloc(\r
+ VOID\r
+ );\r
+\r
+LPVOID\r
+STDCALL\r
+TlsGetValue(\r
+ DWORD dwTlsIndex\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+TlsSetValue(\r
+ DWORD dwTlsIndex,\r
+ LPVOID lpTlsValue\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+TlsFree(\r
+ DWORD dwTlsIndex\r
+ );\r
+\r
+DWORD\r
+STDCALL\r
+SleepEx(\r
+ DWORD dwMilliseconds,\r
+ WINBOOL bAlertable\r
+ );\r
+\r
+\r
+DWORD\r
+STDCALL\r
+WaitForSingleObjectEx(\r
+ HANDLE hHandle,\r
+ DWORD dwMilliseconds,\r
+ WINBOOL bAlertable\r
+ );\r
+\r
+\r
+DWORD\r
+STDCALL\r
+WaitForMultipleObjectsEx(\r
+ DWORD nCount,\r
+ CONST HANDLE *lpHandles,\r
+ WINBOOL bWaitAll,\r
+ DWORD dwMilliseconds,\r
+ WINBOOL bAlertable\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+ReadFileEx(\r
+ HANDLE hFile,\r
+ LPVOID lpBuffer,\r
+ DWORD nNumberOfBytesToRead,\r
+ LPOVERLAPPED lpOverlapped,\r
+ LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+WriteFileEx(\r
+ HANDLE hFile,\r
+ LPCVOID lpBuffer,\r
+ DWORD nNumberOfBytesToWrite,\r
+ LPOVERLAPPED lpOverlapped,\r
+ LPOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+BackupRead(\r
+ HANDLE hFile,\r
+ LPBYTE lpBuffer,\r
+ DWORD nNumberOfBytesToRead,\r
+ LPDWORD lpNumberOfBytesRead,\r
+ WINBOOL bAbort,\r
+ WINBOOL bProcessSecurity,\r
+ LPVOID *lpContext\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+BackupSeek(\r
+ HANDLE hFile,\r
+ DWORD dwLowBytesToSeek,\r
+ DWORD dwHighBytesToSeek,\r
+ LPDWORD lpdwLowByteSeeked,\r
+ LPDWORD lpdwHighByteSeeked,\r
+ LPVOID *lpContext\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+BackupWrite(\r
+ HANDLE hFile,\r
+ LPBYTE lpBuffer,\r
+ DWORD nNumberOfBytesToWrite,\r
+ LPDWORD lpNumberOfBytesWritten,\r
+ WINBOOL bAbort,\r
+ WINBOOL bProcessSecurity,\r
+ LPVOID *lpContext\r
+ );\r
+\r
+WINBOOL\r
+STDCALL\r
+SetProcessShutdownParameters(\r
+ DWORD dwLevel,\r
+ DWORD dwFlags\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+GetProcessShutdownParameters(\r
+ LPDWORD lpdwLevel,\r
+ LPDWORD lpdwFlags\r
+ );\r
+\r
+\r
+VOID\r
+STDCALL\r
+SetFileApisToOEM( VOID );\r
+\r
+\r
+VOID\r
+STDCALL\r
+SetFileApisToANSI( VOID );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+AreFileApisANSI( VOID );\r
+\r
+WINBOOL\r
+STDCALL\r
+CloseEventLog (\r
+ HANDLE hEventLog\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+DeregisterEventSource (\r
+ HANDLE hEventLog\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+NotifyChangeEventLog (\r
+ HANDLE hEventLog,\r
+ HANDLE hEvent\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+GetNumberOfEventLogRecords (\r
+ HANDLE hEventLog,\r
+ PDWORD NumberOfRecords\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+GetOldestEventLogRecord (\r
+ HANDLE hEventLog,\r
+ PDWORD OldestRecord\r
+ );\r
+\r
+WINBOOL\r
+STDCALL\r
+DuplicateToken(\r
+ HANDLE ExistingTokenHandle,\r
+ SECURITY_IMPERSONATION_LEVEL ImpersonationLevel,\r
+ PHANDLE DuplicateTokenHandle\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+GetKernelObjectSecurity (\r
+ HANDLE Handle,\r
+ SECURITY_INFORMATION RequestedInformation,\r
+ PSECURITY_DESCRIPTOR pSecurityDescriptor,\r
+ DWORD nLength,\r
+ LPDWORD lpnLengthNeeded\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+ImpersonateNamedPipeClient(\r
+ HANDLE hNamedPipe\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+ImpersonateLoggedOnUser(\r
+ HANDLE hToken\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+ImpersonateSelf(\r
+ SECURITY_IMPERSONATION_LEVEL ImpersonationLevel\r
+ );\r
+\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+RevertToSelf (\r
+ VOID\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+SetThreadToken (\r
+ PHANDLE Thread,\r
+ HANDLE Token\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+AccessCheck (\r
+ PSECURITY_DESCRIPTOR pSecurityDescriptor,\r
+ HANDLE ClientToken,\r
+ DWORD DesiredAccess,\r
+ PGENERIC_MAPPING GenericMapping,\r
+ PPRIVILEGE_SET PrivilegeSet,\r
+ LPDWORD PrivilegeSetLength,\r
+ LPDWORD GrantedAccess,\r
+ LPBOOL AccessStatus\r
+ );\r
+\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+OpenProcessToken (\r
+ HANDLE ProcessHandle,\r
+ DWORD DesiredAccess,\r
+ PHANDLE TokenHandle\r
+ );\r
+\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+OpenThreadToken (\r
+ HANDLE ThreadHandle,\r
+ DWORD DesiredAccess,\r
+ WINBOOL OpenAsSelf,\r
+ PHANDLE TokenHandle\r
+ );\r
+\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+GetTokenInformation (\r
+ HANDLE TokenHandle,\r
+ TOKEN_INFORMATION_CLASS TokenInformationClass,\r
+ LPVOID TokenInformation,\r
+ DWORD TokenInformationLength,\r
+ PDWORD ReturnLength\r
+ );\r
+\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+SetTokenInformation (\r
+ HANDLE TokenHandle,\r
+ TOKEN_INFORMATION_CLASS TokenInformationClass,\r
+ LPVOID TokenInformation,\r
+ DWORD TokenInformationLength\r
+ );\r
+\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+AdjustTokenPrivileges (\r
+ HANDLE TokenHandle,\r
+ WINBOOL DisableAllPrivileges,\r
+ PTOKEN_PRIVILEGES NewState,\r
+ DWORD BufferLength,\r
+ PTOKEN_PRIVILEGES PreviousState,\r
+ PDWORD ReturnLength\r
+ );\r
+\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+AdjustTokenGroups (\r
+ HANDLE TokenHandle,\r
+ WINBOOL ResetToDefault,\r
+ PTOKEN_GROUPS NewState,\r
+ DWORD BufferLength,\r
+ PTOKEN_GROUPS PreviousState,\r
+ PDWORD ReturnLength\r
+ );\r
+\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+PrivilegeCheck (\r
+ HANDLE ClientToken,\r
+ PPRIVILEGE_SET RequiredPrivileges,\r
+ LPBOOL pfResult\r
+ );\r
+\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+IsValidSid (\r
+ PSID pSid\r
+ );\r
+\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+EqualSid (\r
+ PSID pSid1,\r
+ PSID pSid2\r
+ );\r
+\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+EqualPrefixSid (\r
+ PSID pSid1,\r
+ PSID pSid2\r
+ );\r
+\r
+\r
+\r
+DWORD\r
+STDCALL\r
+GetSidLengthRequired (\r
+ UCHAR nSubAuthorityCount\r
+ );\r
+\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+AllocateAndInitializeSid (\r
+ PSID_IDENTIFIER_AUTHORITY pIdentifierAuthority,\r
+ BYTE nSubAuthorityCount,\r
+ DWORD nSubAuthority0,\r
+ DWORD nSubAuthority1,\r
+ DWORD nSubAuthority2,\r
+ DWORD nSubAuthority3,\r
+ DWORD nSubAuthority4,\r
+ DWORD nSubAuthority5,\r
+ DWORD nSubAuthority6,\r
+ DWORD nSubAuthority7,\r
+ PSID *pSid\r
+ );\r
+\r
+\r
+PVOID\r
+STDCALL\r
+FreeSid(\r
+ PSID pSid\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+InitializeSid (\r
+ PSID Sid,\r
+ PSID_IDENTIFIER_AUTHORITY pIdentifierAuthority,\r
+ BYTE nSubAuthorityCount\r
+ );\r
+\r
+\r
+\r
+PSID_IDENTIFIER_AUTHORITY\r
+STDCALL\r
+GetSidIdentifierAuthority (\r
+ PSID pSid\r
+ );\r
+\r
+\r
+\r
+PDWORD\r
+STDCALL\r
+GetSidSubAuthority (\r
+ PSID pSid,\r
+ DWORD nSubAuthority\r
+ );\r
+\r
+\r
+\r
+PUCHAR\r
+STDCALL\r
+GetSidSubAuthorityCount (\r
+ PSID pSid\r
+ );\r
+\r
+\r
+\r
+DWORD\r
+STDCALL\r
+GetLengthSid (\r
+ PSID pSid\r
+ );\r
+\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+CopySid (\r
+ DWORD nDestinationSidLength,\r
+ PSID pDestinationSid,\r
+ PSID pSourceSid\r
+ );\r
+\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+AreAllAccessesGranted (\r
+ DWORD GrantedAccess,\r
+ DWORD DesiredAccess\r
+ );\r
+\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+AreAnyAccessesGranted (\r
+ DWORD GrantedAccess,\r
+ DWORD DesiredAccess\r
+ );\r
+\r
+\r
+\r
+VOID\r
+STDCALL\r
+MapGenericMask (\r
+ PDWORD AccessMask,\r
+ PGENERIC_MAPPING GenericMapping\r
+ );\r
+\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+IsValidAcl (\r
+ PACL pAcl\r
+ );\r
+\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+InitializeAcl (\r
+ PACL pAcl,\r
+ DWORD nAclLength,\r
+ DWORD dwAclRevision\r
+ );\r
+\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+GetAclInformation (\r
+ PACL pAcl,\r
+ LPVOID pAclInformation,\r
+ DWORD nAclInformationLength,\r
+ ACL_INFORMATION_CLASS dwAclInformationClass\r
+ );\r
+\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+SetAclInformation (\r
+ PACL pAcl,\r
+ LPVOID pAclInformation,\r
+ DWORD nAclInformationLength,\r
+ ACL_INFORMATION_CLASS dwAclInformationClass\r
+ );\r
+\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+AddAce (\r
+ PACL pAcl,\r
+ DWORD dwAceRevision,\r
+ DWORD dwStartingAceIndex,\r
+ LPVOID pAceList,\r
+ DWORD nAceListLength\r
+ );\r
+\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+DeleteAce (\r
+ PACL pAcl,\r
+ DWORD dwAceIndex\r
+ );\r
+\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+GetAce (\r
+ PACL pAcl,\r
+ DWORD dwAceIndex,\r
+ LPVOID *pAce\r
+ );\r
+\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+AddAccessAllowedAce (\r
+ PACL pAcl,\r
+ DWORD dwAceRevision,\r
+ DWORD AccessMask,\r
+ PSID pSid\r
+ );\r
+\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+AddAccessDeniedAce (\r
+ PACL pAcl,\r
+ DWORD dwAceRevision,\r
+ DWORD AccessMask,\r
+ PSID pSid\r
+ );\r
+\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+AddAuditAccessAce(\r
+ PACL pAcl,\r
+ DWORD dwAceRevision,\r
+ DWORD dwAccessMask,\r
+ PSID pSid,\r
+ WINBOOL bAuditSuccess,\r
+ WINBOOL bAuditFailure\r
+ );\r
+\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+FindFirstFreeAce (\r
+ PACL pAcl,\r
+ LPVOID *pAce\r
+ );\r
+\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+InitializeSecurityDescriptor (\r
+ PSECURITY_DESCRIPTOR pSecurityDescriptor,\r
+ DWORD dwRevision\r
+ );\r
+\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+IsValidSecurityDescriptor (\r
+ PSECURITY_DESCRIPTOR pSecurityDescriptor\r
+ );\r
+\r
+\r
+\r
+DWORD\r
+STDCALL\r
+GetSecurityDescriptorLength (\r
+ PSECURITY_DESCRIPTOR pSecurityDescriptor\r
+ );\r
+\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+GetSecurityDescriptorControl (\r
+ PSECURITY_DESCRIPTOR pSecurityDescriptor,\r
+ PSECURITY_DESCRIPTOR_CONTROL pControl,\r
+ LPDWORD lpdwRevision\r
+ );\r
+\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+SetSecurityDescriptorDacl (\r
+ PSECURITY_DESCRIPTOR pSecurityDescriptor,\r
+ WINBOOL bDaclPresent,\r
+ PACL pDacl,\r
+ WINBOOL bDaclDefaulted\r
+ );\r
+\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+GetSecurityDescriptorDacl (\r
+ PSECURITY_DESCRIPTOR pSecurityDescriptor,\r
+ LPBOOL lpbDaclPresent,\r
+ PACL *pDacl,\r
+ LPBOOL lpbDaclDefaulted\r
+ );\r
+\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+SetSecurityDescriptorSacl (\r
+ PSECURITY_DESCRIPTOR pSecurityDescriptor,\r
+ WINBOOL bSaclPresent,\r
+ PACL pSacl,\r
+ WINBOOL bSaclDefaulted\r
+ );\r
+\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+GetSecurityDescriptorSacl (\r
+ PSECURITY_DESCRIPTOR pSecurityDescriptor,\r
+ LPBOOL lpbSaclPresent,\r
+ PACL *pSacl,\r
+ LPBOOL lpbSaclDefaulted\r
+ );\r
+\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+SetSecurityDescriptorOwner (\r
+ PSECURITY_DESCRIPTOR pSecurityDescriptor,\r
+ PSID pOwner,\r
+ WINBOOL bOwnerDefaulted\r
+ );\r
+\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+GetSecurityDescriptorOwner (\r
+ PSECURITY_DESCRIPTOR pSecurityDescriptor,\r
+ PSID *pOwner,\r
+ LPBOOL lpbOwnerDefaulted\r
+ );\r
+\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+SetSecurityDescriptorGroup (\r
+ PSECURITY_DESCRIPTOR pSecurityDescriptor,\r
+ PSID pGroup,\r
+ WINBOOL bGroupDefaulted\r
+ );\r
+\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+GetSecurityDescriptorGroup (\r
+ PSECURITY_DESCRIPTOR pSecurityDescriptor,\r
+ PSID *pGroup,\r
+ LPBOOL lpbGroupDefaulted\r
+ );\r
+\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+CreatePrivateObjectSecurity (\r
+ PSECURITY_DESCRIPTOR ParentDescriptor,\r
+ PSECURITY_DESCRIPTOR CreatorDescriptor,\r
+ PSECURITY_DESCRIPTOR * NewDescriptor,\r
+ WINBOOL IsDirectoryObject,\r
+ HANDLE Token,\r
+ PGENERIC_MAPPING GenericMapping\r
+ );\r
+\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+SetPrivateObjectSecurity (\r
+ SECURITY_INFORMATION SecurityInformation,\r
+ PSECURITY_DESCRIPTOR ModificationDescriptor,\r
+ PSECURITY_DESCRIPTOR *ObjectsSecurityDescriptor,\r
+ PGENERIC_MAPPING GenericMapping,\r
+ HANDLE Token\r
+ );\r
+\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+GetPrivateObjectSecurity (\r
+ PSECURITY_DESCRIPTOR ObjectDescriptor,\r
+ SECURITY_INFORMATION SecurityInformation,\r
+ PSECURITY_DESCRIPTOR ResultantDescriptor,\r
+ DWORD DescriptorLength,\r
+ PDWORD ReturnLength\r
+ );\r
+\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+DestroyPrivateObjectSecurity (\r
+ PSECURITY_DESCRIPTOR * ObjectDescriptor\r
+ );\r
+\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+MakeSelfRelativeSD (\r
+ PSECURITY_DESCRIPTOR pAbsoluteSecurityDescriptor,\r
+ PSECURITY_DESCRIPTOR pSelfRelativeSecurityDescriptor,\r
+ LPDWORD lpdwBufferLength\r
+ );\r
+\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+MakeAbsoluteSD (\r
+ PSECURITY_DESCRIPTOR pSelfRelativeSecurityDescriptor,\r
+ PSECURITY_DESCRIPTOR pAbsoluteSecurityDescriptor,\r
+ LPDWORD lpdwAbsoluteSecurityDescriptorSize,\r
+ PACL pDacl,\r
+ LPDWORD lpdwDaclSize,\r
+ PACL pSacl,\r
+ LPDWORD lpdwSaclSize,\r
+ PSID pOwner,\r
+ LPDWORD lpdwOwnerSize,\r
+ PSID pPrimaryGroup,\r
+ LPDWORD lpdwPrimaryGroupSize\r
+ );\r
+\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+SetKernelObjectSecurity (\r
+ HANDLE Handle,\r
+ SECURITY_INFORMATION SecurityInformation,\r
+ PSECURITY_DESCRIPTOR SecurityDescriptor\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+FindNextChangeNotification(\r
+ HANDLE hChangeHandle\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+FindCloseChangeNotification(\r
+ HANDLE hChangeHandle\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+VirtualLock(\r
+ LPVOID lpAddress,\r
+ DWORD dwSize\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+VirtualUnlock(\r
+ LPVOID lpAddress,\r
+ DWORD dwSize\r
+ );\r
+\r
+\r
+LPVOID\r
+STDCALL\r
+MapViewOfFileEx(\r
+ HANDLE hFileMappingObject,\r
+ DWORD dwDesiredAccess,\r
+ DWORD dwFileOffsetHigh,\r
+ DWORD dwFileOffsetLow,\r
+ DWORD dwNumberOfBytesToMap,\r
+ LPVOID lpBaseAddress\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+SetPriorityClass(\r
+ HANDLE hProcess,\r
+ DWORD dwPriorityClass\r
+ );\r
+\r
+\r
+DWORD\r
+STDCALL\r
+GetPriorityClass(\r
+ HANDLE hProcess\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+IsBadReadPtr(\r
+ CONST VOID *lp,\r
+ UINT ucb\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+IsBadWritePtr(\r
+ LPVOID lp,\r
+ UINT ucb\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+IsBadHugeReadPtr(\r
+ CONST VOID *lp,\r
+ UINT ucb\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+IsBadHugeWritePtr(\r
+ LPVOID lp,\r
+ UINT ucb\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+IsBadCodePtr(\r
+ FARPROC lpfn\r
+ );\r
+\r
+WINBOOL\r
+STDCALL\r
+AllocateLocallyUniqueId(\r
+ PLUID Luid\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+QueryPerformanceCounter(\r
+ LARGE_INTEGER *lpPerformanceCount\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+QueryPerformanceFrequency(\r
+ LARGE_INTEGER *lpFrequency\r
+ );\r
+\r
+VOID\r
+STDCALL\r
+MoveMemory (\r
+ PVOID Destination,\r
+ CONST VOID *Source,\r
+ DWORD Length\r
+ );\r
+\r
+VOID\r
+STDCALL\r
+FillMemory (\r
+ PVOID Destination,\r
+ DWORD Length,\r
+ BYTE Fill\r
+ );\r
+\r
+VOID\r
+STDCALL\r
+ZeroMemory (\r
+ PVOID Destination,\r
+ DWORD Length\r
+ );\r
+\r
+/* The memory functions don't seem to be defined in the libraries, so\r
+ define macro versions as well. */\r
+#define MoveMemory(t, s, c) memmove ((t), (s), (c))\r
+#define FillMemory(p, c, v) memset ((p), (v), (c))\r
+#define ZeroMemory(p, c) memset ((p), 0, (c))\r
+\r
+#ifdef WIN95\r
+HKL\r
+STDCALL\r
+ActivateKeyboardLayout(\r
+ HKL hkl,\r
+ UINT Flags);\r
+#else\r
+WINBOOL\r
+STDCALL\r
+ActivateKeyboardLayout(\r
+ HKL hkl,\r
+ UINT Flags);\r
+#endif /* WIN95 */\r
+\r
+ \r
+int\r
+STDCALL\r
+ToUnicodeEx(\r
+ UINT wVirtKey,\r
+ UINT wScanCode,\r
+ PBYTE lpKeyState,\r
+ LPWSTR pwszBuff,\r
+ int cchBuff,\r
+ UINT wFlags,\r
+ HKL dwhkl);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+UnloadKeyboardLayout(\r
+ HKL hkl);\r
+\r
+ \r
+int\r
+STDCALL\r
+GetKeyboardLayoutList(\r
+ int nBuff,\r
+ HKL *lpList);\r
+\r
+ \r
+HKL\r
+STDCALL\r
+GetKeyboardLayout(\r
+ DWORD dwLayout\r
+ );\r
+\r
+ \r
+HDESK\r
+STDCALL\r
+OpenInputDesktop(\r
+ DWORD dwFlags,\r
+ WINBOOL fInherit,\r
+ DWORD dwDesiredAccess);\r
+\r
+WINBOOL\r
+STDCALL\r
+EnumDesktopWindows(\r
+ HDESK hDesktop,\r
+ ENUMWINDOWSPROC lpfn,\r
+ LPARAM lParam);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+SwitchDesktop(\r
+ HDESK hDesktop);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+SetThreadDesktop(\r
+ HDESK hDesktop);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+CloseDesktop(\r
+ HDESK hDesktop);\r
+\r
+ \r
+HDESK\r
+STDCALL\r
+GetThreadDesktop(\r
+ DWORD dwThreadId);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+CloseWindowStation(\r
+ HWINSTA hWinSta);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+SetProcessWindowStation(\r
+ HWINSTA hWinSta);\r
+\r
+ \r
+HWINSTA\r
+STDCALL\r
+GetProcessWindowStation(\r
+ VOID);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+SetUserObjectSecurity(\r
+ HANDLE hObj,\r
+ PSECURITY_INFORMATION pSIRequested,\r
+ PSECURITY_DESCRIPTOR pSID);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+GetUserObjectSecurity(\r
+ HANDLE hObj,\r
+ PSECURITY_INFORMATION pSIRequested,\r
+ PSECURITY_DESCRIPTOR pSID,\r
+ DWORD nLength,\r
+ LPDWORD lpnLengthNeeded);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+TranslateMessage(\r
+ CONST MSG *lpMsg);\r
+\r
+WINBOOL\r
+STDCALL\r
+SetMessageQueue(\r
+ int cMessagesMax);\r
+\r
+WINBOOL\r
+STDCALL\r
+RegisterHotKey(\r
+ HWND hWnd ,\r
+ int anID,\r
+ UINT fsModifiers,\r
+ UINT vk);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+UnregisterHotKey(\r
+ HWND hWnd,\r
+ int anID);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+ExitWindowsEx(\r
+ UINT uFlags,\r
+ DWORD dwReserved);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+SwapMouseButton(\r
+ WINBOOL fSwap);\r
+\r
+ \r
+DWORD\r
+STDCALL\r
+GetMessagePos(\r
+ VOID);\r
+\r
+ \r
+LONG\r
+STDCALL\r
+GetMessageTime(\r
+ VOID);\r
+\r
+ \r
+LONG\r
+STDCALL\r
+GetMessageExtraInfo(\r
+ VOID);\r
+\r
+ \r
+LPARAM\r
+STDCALL\r
+SetMessageExtraInfo(\r
+ LPARAM lParam);\r
+\r
+ \r
+long \r
+STDCALL \r
+BroadcastSystemMessage(\r
+ DWORD, \r
+ LPDWORD, \r
+ UINT, \r
+ WPARAM, \r
+ LPARAM);\r
+\r
+WINBOOL\r
+STDCALL\r
+AttachThreadInput(\r
+ DWORD idAttach,\r
+ DWORD idAttachTo,\r
+ WINBOOL fAttach);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+ReplyMessage(\r
+ LRESULT lResult);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+WaitMessage(\r
+ VOID);\r
+\r
+ \r
+DWORD\r
+STDCALL\r
+WaitForInputIdle(\r
+ HANDLE hProcess,\r
+ DWORD dwMilliseconds);\r
+\r
+ \r
+VOID\r
+STDCALL\r
+PostQuitMessage(\r
+ int nExitCode);\r
+\r
+WINBOOL\r
+STDCALL\r
+InSendMessage(\r
+ VOID);\r
+\r
+ \r
+UINT\r
+STDCALL\r
+GetDoubleClickTime(\r
+ VOID);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+SetDoubleClickTime(\r
+ UINT);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+IsWindow(\r
+ HWND hWnd);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+IsMenu(\r
+ HMENU hMenu);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+IsChild(\r
+ HWND hWndParent,\r
+ HWND hWnd);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+DestroyWindow(\r
+ HWND hWnd);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+ShowWindow(\r
+ HWND hWnd,\r
+ int nCmdShow);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+ShowWindowAsync(\r
+ HWND hWnd,\r
+ int nCmdShow);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+FlashWindow(\r
+ HWND hWnd,\r
+ WINBOOL bInvert);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+ShowOwnedPopups(\r
+ HWND hWnd,\r
+ WINBOOL fShow);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+OpenIcon(\r
+ HWND hWnd);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+CloseWindow(\r
+ HWND hWnd);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+MoveWindow(\r
+ HWND hWnd,\r
+ int X,\r
+ int Y,\r
+ int nWidth,\r
+ int nHeight,\r
+ WINBOOL bRepaint);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+SetWindowPos(\r
+ HWND hWnd,\r
+ HWND hWndInsertAfter ,\r
+ int X,\r
+ int Y,\r
+ int cx,\r
+ int cy,\r
+ UINT uFlags);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+GetWindowPlacement(\r
+ HWND hWnd,\r
+ WINDOWPLACEMENT *lpwndpl);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+SetWindowPlacement(\r
+ HWND hWnd,\r
+ CONST WINDOWPLACEMENT *lpwndpl);\r
+\r
+ \r
+HDWP\r
+STDCALL\r
+BeginDeferWindowPos(\r
+ int nNumWindows);\r
+\r
+ \r
+HDWP\r
+STDCALL\r
+DeferWindowPos(\r
+ HDWP hWinPosInfo,\r
+ HWND hWnd,\r
+ HWND hWndInsertAfter,\r
+ int x,\r
+ int y,\r
+ int cx,\r
+ int cy,\r
+ UINT uFlags);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+EndDeferWindowPos(\r
+ HDWP hWinPosInfo);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+IsWindowVisible(\r
+ HWND hWnd);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+IsIconic(\r
+ HWND hWnd);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+AnyPopup(\r
+ VOID);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+BringWindowToTop(\r
+ HWND hWnd);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+IsZoomed(\r
+ HWND hWnd);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+EndDialog(\r
+ HWND hDlg,\r
+ int nResult);\r
+\r
+ \r
+HWND\r
+STDCALL\r
+GetDlgItem(\r
+ HWND hDlg,\r
+ int nIDDlgItem);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+SetDlgItemInt(\r
+ HWND hDlg,\r
+ int nIDDlgItem,\r
+ UINT uValue,\r
+ WINBOOL bSigned);\r
+\r
+ \r
+UINT\r
+STDCALL\r
+GetDlgItemInt(\r
+ HWND hDlg,\r
+ int nIDDlgItem,\r
+ WINBOOL *lpTranslated,\r
+ WINBOOL bSigned);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+CheckDlgButton(\r
+ HWND hDlg,\r
+ int nIDButton,\r
+ UINT uCheck);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+CheckRadioButton(\r
+ HWND hDlg,\r
+ int nIDFirstButton,\r
+ int nIDLastButton,\r
+ int nIDCheckButton);\r
+\r
+ \r
+UINT\r
+STDCALL\r
+IsDlgButtonChecked(\r
+ HWND hDlg,\r
+ int nIDButton);\r
+\r
+ \r
+HWND\r
+STDCALL\r
+GetNextDlgGroupItem(\r
+ HWND hDlg,\r
+ HWND hCtl,\r
+ WINBOOL bPrevious);\r
+\r
+ \r
+HWND\r
+STDCALL\r
+GetNextDlgTabItem(\r
+ HWND hDlg,\r
+ HWND hCtl,\r
+ WINBOOL bPrevious);\r
+\r
+ \r
+int\r
+STDCALL\r
+GetDlgCtrlID(\r
+ HWND hWnd);\r
+\r
+ \r
+long\r
+STDCALL\r
+GetDialogBaseUnits(VOID);\r
+\r
+WINBOOL\r
+STDCALL\r
+OpenClipboard(\r
+ HWND hWndNewOwner);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+CloseClipboard(\r
+ VOID);\r
+\r
+ \r
+HWND\r
+STDCALL\r
+GetClipboardOwner(\r
+ VOID);\r
+\r
+ \r
+HWND\r
+STDCALL\r
+SetClipboardViewer(\r
+ HWND hWndNewViewer);\r
+\r
+ \r
+HWND\r
+STDCALL\r
+GetClipboardViewer(\r
+ VOID);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+ChangeClipboardChain(\r
+ HWND hWndRemove,\r
+ HWND hWndNewNext);\r
+\r
+ \r
+HANDLE\r
+STDCALL\r
+SetClipboardData(\r
+ UINT uFormat,\r
+ HANDLE hMem);\r
+\r
+ \r
+HANDLE\r
+STDCALL\r
+GetClipboardData(\r
+ UINT uFormat);\r
+\r
+ \r
+ \r
+int\r
+STDCALL\r
+CountClipboardFormats(\r
+ VOID);\r
+\r
+ \r
+UINT\r
+STDCALL\r
+EnumClipboardFormats(\r
+ UINT format);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+EmptyClipboard(\r
+ VOID);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+IsClipboardFormatAvailable(\r
+ UINT format);\r
+\r
+ \r
+int\r
+STDCALL\r
+GetPriorityClipboardFormat(\r
+ UINT *paFormatPriorityList,\r
+ int cFormats);\r
+\r
+ \r
+HWND\r
+STDCALL\r
+GetOpenClipboardWindow(\r
+ VOID);\r
+\r
+ \r
+/* Despite the A these are ASCII functions! */\r
+LPSTR\r
+STDCALL\r
+CharNextExA(\r
+ WORD CodePage,\r
+ LPCSTR lpCurrentChar,\r
+ DWORD dwFlags);\r
+\r
+ \r
+LPSTR\r
+STDCALL\r
+CharPrevExA(\r
+ WORD CodePage,\r
+ LPCSTR lpStart,\r
+ LPCSTR lpCurrentChar,\r
+ DWORD dwFlags);\r
+\r
+ \r
+HWND\r
+STDCALL\r
+SetFocus(\r
+ HWND hWnd);\r
+\r
+ \r
+HWND\r
+STDCALL\r
+GetActiveWindow(\r
+ VOID);\r
+\r
+ \r
+HWND\r
+STDCALL\r
+GetFocus(\r
+ VOID);\r
+\r
+ \r
+UINT\r
+STDCALL\r
+GetKBCodePage(\r
+ VOID);\r
+\r
+ \r
+SHORT\r
+STDCALL\r
+GetKeyState(\r
+ int nVirtKey);\r
+\r
+ \r
+SHORT\r
+STDCALL\r
+GetAsyncKeyState(\r
+ int vKey);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+GetKeyboardState(\r
+ PBYTE lpKeyState);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+SetKeyboardState(\r
+ LPBYTE lpKeyState);\r
+\r
+ \r
+int\r
+STDCALL\r
+GetKeyboardType(\r
+ int nTypeFlag);\r
+\r
+ \r
+int\r
+STDCALL\r
+ToAscii(\r
+ UINT uVirtKey,\r
+ UINT uScanCode,\r
+ PBYTE lpKeyState,\r
+ LPWORD lpChar,\r
+ UINT uFlags);\r
+\r
+ \r
+int\r
+STDCALL\r
+ToAsciiEx(\r
+ UINT uVirtKey,\r
+ UINT uScanCode,\r
+ PBYTE lpKeyState,\r
+ LPWORD lpChar,\r
+ UINT uFlags,\r
+ HKL dwhkl);\r
+\r
+ \r
+int\r
+STDCALL\r
+ToUnicode(\r
+ UINT wVirtKey,\r
+ UINT wScanCode,\r
+ PBYTE lpKeyState,\r
+ LPWSTR pwszBuff,\r
+ int cchBuff,\r
+ UINT wFlags);\r
+\r
+ \r
+DWORD\r
+STDCALL\r
+OemKeyScan(\r
+ WORD wOemChar);\r
+\r
+ \r
+VOID\r
+STDCALL\r
+keybd_event(\r
+ BYTE bVk,\r
+ BYTE bScan,\r
+ DWORD dwFlags,\r
+ DWORD dwExtraInfo);\r
+\r
+ \r
+VOID\r
+STDCALL\r
+mouse_event(\r
+ DWORD dwFlags,\r
+ DWORD dx,\r
+ DWORD dy,\r
+ DWORD cButtons,\r
+ DWORD dwExtraInfo);\r
+\r
+WINBOOL\r
+STDCALL\r
+GetInputState(\r
+ VOID);\r
+\r
+ \r
+DWORD\r
+STDCALL\r
+GetQueueStatus(\r
+ UINT flags);\r
+\r
+ \r
+HWND\r
+STDCALL\r
+GetCapture(\r
+ VOID);\r
+\r
+ \r
+HWND\r
+STDCALL\r
+SetCapture(\r
+ HWND hWnd);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+ReleaseCapture(\r
+ VOID);\r
+\r
+ \r
+DWORD\r
+STDCALL\r
+MsgWaitForMultipleObjects(\r
+ DWORD nCount,\r
+ LPHANDLE pHandles,\r
+ WINBOOL fWaitAll,\r
+ DWORD dwMilliseconds,\r
+ DWORD dwWakeMask);\r
+\r
+ \r
+UINT\r
+STDCALL\r
+SetTimer(\r
+ HWND hWnd ,\r
+ UINT nIDEvent,\r
+ UINT uElapse,\r
+ TIMERPROC lpTimerFunc);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+KillTimer(\r
+ HWND hWnd,\r
+ UINT uIDEvent);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+IsWindowUnicode(\r
+ HWND hWnd);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+EnableWindow(\r
+ HWND hWnd,\r
+ WINBOOL bEnable);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+IsWindowEnabled(\r
+ HWND hWnd);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+DestroyAcceleratorTable(\r
+ HACCEL hAccel);\r
+\r
+int\r
+STDCALL\r
+GetSystemMetrics(\r
+ int nIndex);\r
+\r
+HMENU\r
+STDCALL\r
+GetMenu(\r
+ HWND hWnd);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+SetMenu(\r
+ HWND hWnd,\r
+ HMENU hMenu);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+HiliteMenuItem(\r
+ HWND hWnd,\r
+ HMENU hMenu,\r
+ UINT uIDHiliteItem,\r
+ UINT uHilite);\r
+\r
+ \r
+UINT\r
+STDCALL\r
+GetMenuState(\r
+ HMENU hMenu,\r
+ UINT uId,\r
+ UINT uFlags);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+DrawMenuBar(\r
+ HWND hWnd);\r
+\r
+ \r
+HMENU\r
+STDCALL\r
+GetSystemMenu(\r
+ HWND hWnd,\r
+ WINBOOL bRevert);\r
+\r
+ \r
+HMENU\r
+STDCALL\r
+CreateMenu(\r
+ VOID);\r
+\r
+ \r
+HMENU\r
+STDCALL\r
+CreatePopupMenu(\r
+ VOID);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+DestroyMenu(\r
+ HMENU hMenu);\r
+\r
+ \r
+DWORD\r
+STDCALL\r
+CheckMenuItem(\r
+ HMENU hMenu,\r
+ UINT uIDCheckItem,\r
+ UINT uCheck);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+EnableMenuItem(\r
+ HMENU hMenu,\r
+ UINT uIDEnableItem,\r
+ UINT uEnable);\r
+\r
+ \r
+HMENU\r
+STDCALL\r
+GetSubMenu(\r
+ HMENU hMenu,\r
+ int nPos);\r
+\r
+ \r
+UINT\r
+STDCALL\r
+GetMenuItemID(\r
+ HMENU hMenu,\r
+ int nPos);\r
+\r
+ \r
+int\r
+STDCALL\r
+GetMenuItemCount(\r
+ HMENU hMenu);\r
+\r
+WINBOOL\r
+STDCALL RemoveMenu(\r
+ HMENU hMenu,\r
+ UINT uPosition,\r
+ UINT uFlags);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+DeleteMenu(\r
+ HMENU hMenu,\r
+ UINT uPosition,\r
+ UINT uFlags);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+SetMenuItemBitmaps(\r
+ HMENU hMenu,\r
+ UINT uPosition,\r
+ UINT uFlags,\r
+ HBITMAP hBitmapUnchecked,\r
+ HBITMAP hBitmapChecked);\r
+\r
+ \r
+LONG\r
+STDCALL\r
+GetMenuCheckMarkDimensions(\r
+ VOID);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+TrackPopupMenu(\r
+ HMENU hMenu,\r
+ UINT uFlags,\r
+ int x,\r
+ int y,\r
+ int nReserved,\r
+ HWND hWnd,\r
+ CONST RECT *prcRect);\r
+\r
+UINT\r
+STDCALL\r
+GetMenuDefaultItem(\r
+ HMENU hMenu, \r
+ UINT fByPos, \r
+ UINT gmdiFlags);\r
+\r
+WINBOOL\r
+STDCALL\r
+SetMenuDefaultItem(\r
+ HMENU hMenu, \r
+ UINT uItem, \r
+ UINT fByPos);\r
+\r
+WINBOOL\r
+STDCALL\r
+GetMenuItemRect(HWND hWnd, \r
+ HMENU hMenu, \r
+ UINT uItem, \r
+ LPRECT lprcItem);\r
+\r
+int\r
+STDCALL\r
+MenuItemFromPoint(HWND hWnd, \r
+ HMENU hMenu, \r
+ POINT ptScreen);\r
+\r
+ \r
+DWORD\r
+STDCALL\r
+DragObject(HWND, HWND, UINT, DWORD, HCURSOR);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+DragDetect(HWND hwnd, \r
+ POINT pt);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+DrawIcon(\r
+ HDC hDC,\r
+ int X,\r
+ int Y,\r
+ HICON hIcon);\r
+\r
+WINBOOL\r
+STDCALL\r
+UpdateWindow(\r
+ HWND hWnd);\r
+\r
+ \r
+HWND\r
+STDCALL\r
+SetActiveWindow(\r
+ HWND hWnd);\r
+\r
+ \r
+HWND\r
+STDCALL\r
+GetForegroundWindow(\r
+ VOID);\r
+\r
+WINBOOL\r
+STDCALL\r
+PaintDesktop(HDC hdc);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+SetForegroundWindow(\r
+ HWND hWnd);\r
+\r
+ \r
+HWND\r
+STDCALL\r
+WindowFromDC(\r
+ HDC hDC);\r
+\r
+ \r
+HDC\r
+STDCALL\r
+GetDC(\r
+ HWND hWnd);\r
+\r
+ \r
+HDC\r
+STDCALL\r
+GetDCEx(\r
+ HWND hWnd ,\r
+ HRGN hrgnClip,\r
+ DWORD flags);\r
+\r
+ \r
+HDC\r
+STDCALL\r
+GetWindowDC(\r
+ HWND hWnd);\r
+\r
+ \r
+int\r
+STDCALL\r
+ReleaseDC(\r
+ HWND hWnd,\r
+ HDC hDC);\r
+\r
+ \r
+HDC\r
+STDCALL\r
+BeginPaint(\r
+ HWND hWnd,\r
+ LPPAINTSTRUCT lpPaint);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+EndPaint(\r
+ HWND hWnd,\r
+ CONST PAINTSTRUCT *lpPaint);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+GetUpdateRect(\r
+ HWND hWnd,\r
+ LPRECT lpRect,\r
+ WINBOOL bErase);\r
+\r
+ \r
+int\r
+STDCALL\r
+GetUpdateRgn(\r
+ HWND hWnd,\r
+ HRGN hRgn,\r
+ WINBOOL bErase);\r
+\r
+ \r
+int\r
+STDCALL\r
+SetWindowRgn(\r
+ HWND hWnd,\r
+ HRGN hRgn,\r
+ WINBOOL bRedraw);\r
+\r
+ \r
+int\r
+STDCALL\r
+GetWindowRgn(\r
+ HWND hWnd,\r
+ HRGN hRgn);\r
+\r
+ \r
+int\r
+STDCALL\r
+ExcludeUpdateRgn(\r
+ HDC hDC,\r
+ HWND hWnd);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+InvalidateRect(\r
+ HWND hWnd ,\r
+ CONST RECT *lpRect,\r
+ WINBOOL bErase);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+ValidateRect(\r
+ HWND hWnd ,\r
+ CONST RECT *lpRect);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+InvalidateRgn(\r
+ HWND hWnd,\r
+ HRGN hRgn,\r
+ WINBOOL bErase);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+ValidateRgn(\r
+ HWND hWnd,\r
+ HRGN hRgn);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+RedrawWindow(\r
+ HWND hWnd,\r
+ CONST RECT *lprcUpdate,\r
+ HRGN hrgnUpdate,\r
+ UINT flags);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+LockWindowUpdate(\r
+ HWND hWndLock);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+ScrollWindow(\r
+ HWND hWnd,\r
+ int XAmount,\r
+ int YAmount,\r
+ CONST RECT *lpRect,\r
+ CONST RECT *lpClipRect);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+ScrollDC(\r
+ HDC hDC,\r
+ int dx,\r
+ int dy,\r
+ CONST RECT *lprcScroll,\r
+ CONST RECT *lprcClip ,\r
+ HRGN hrgnUpdate,\r
+ LPRECT lprcUpdate);\r
+\r
+ \r
+int\r
+STDCALL\r
+ScrollWindowEx(\r
+ HWND hWnd,\r
+ int dx,\r
+ int dy,\r
+ CONST RECT *prcScroll,\r
+ CONST RECT *prcClip ,\r
+ HRGN hrgnUpdate,\r
+ LPRECT prcUpdate,\r
+ UINT flags);\r
+\r
+ \r
+int\r
+STDCALL\r
+SetScrollPos(\r
+ HWND hWnd,\r
+ int nBar,\r
+ int nPos,\r
+ WINBOOL bRedraw);\r
+\r
+ \r
+int\r
+STDCALL\r
+GetScrollPos(\r
+ HWND hWnd,\r
+ int nBar);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+SetScrollRange(\r
+ HWND hWnd,\r
+ int nBar,\r
+ int nMinPos,\r
+ int nMaxPos,\r
+ WINBOOL bRedraw);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+GetScrollRange(\r
+ HWND hWnd,\r
+ int nBar,\r
+ LPINT lpMinPos,\r
+ LPINT lpMaxPos);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+ShowScrollBar(\r
+ HWND hWnd,\r
+ int wBar,\r
+ WINBOOL bShow);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+EnableScrollBar(\r
+ HWND hWnd,\r
+ UINT wSBflags,\r
+ UINT wArrows);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+GetClientRect(\r
+ HWND hWnd,\r
+ LPRECT lpRect);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+GetWindowRect(\r
+ HWND hWnd,\r
+ LPRECT lpRect);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+AdjustWindowRect(\r
+ LPRECT lpRect,\r
+ DWORD dwStyle,\r
+ WINBOOL bMenu);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+AdjustWindowRectEx(\r
+ LPRECT lpRect,\r
+ DWORD dwStyle,\r
+ WINBOOL bMenu,\r
+ DWORD dwExStyle);\r
+\r
+WINBOOL\r
+STDCALL\r
+SetWindowContextHelpId(HWND, DWORD);\r
+\r
+DWORD\r
+STDCALL\r
+GetWindowContextHelpId(HWND);\r
+\r
+WINBOOL\r
+STDCALL\r
+SetMenuContextHelpId(HMENU, DWORD);\r
+\r
+DWORD\r
+STDCALL\r
+GetMenuContextHelpId(HMENU);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+MessageBeep(\r
+ UINT uType);\r
+\r
+ \r
+int\r
+STDCALL\r
+ShowCursor(\r
+ WINBOOL bShow);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+SetCursorPos(\r
+ int X,\r
+ int Y);\r
+\r
+ \r
+HCURSOR\r
+STDCALL\r
+SetCursor(\r
+ HCURSOR hCursor);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+GetCursorPos(\r
+ LPPOINT lpPoint);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+ClipCursor(\r
+ CONST RECT *lpRect);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+GetClipCursor(\r
+ LPRECT lpRect);\r
+\r
+ \r
+HCURSOR\r
+STDCALL\r
+GetCursor(\r
+ VOID);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+CreateCaret(\r
+ HWND hWnd,\r
+ HBITMAP hBitmap ,\r
+ int nWidth,\r
+ int nHeight);\r
+\r
+ \r
+UINT\r
+STDCALL\r
+GetCaretBlinkTime(\r
+ VOID);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+SetCaretBlinkTime(\r
+ UINT uMSeconds);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+DestroyCaret(\r
+ VOID);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+HideCaret(\r
+ HWND hWnd);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+ShowCaret(\r
+ HWND hWnd);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+SetCaretPos(\r
+ int X,\r
+ int Y);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+GetCaretPos(\r
+ LPPOINT lpPoint);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+ClientToScreen(\r
+ HWND hWnd,\r
+ LPPOINT lpPoint);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+ScreenToClient(\r
+ HWND hWnd,\r
+ LPPOINT lpPoint);\r
+\r
+ \r
+int\r
+STDCALL\r
+MapWindowPoints(\r
+ HWND hWndFrom,\r
+ HWND hWndTo,\r
+ LPPOINT lpPoints,\r
+ UINT cPoints);\r
+\r
+ \r
+HWND\r
+STDCALL\r
+WindowFromPoint(\r
+ POINT Point);\r
+\r
+ \r
+HWND\r
+STDCALL\r
+ChildWindowFromPoint(\r
+ HWND hWndParent,\r
+ POINT Point);\r
+\r
+ \r
+DWORD\r
+STDCALL\r
+GetSysColor(\r
+ int nIndex);\r
+\r
+ \r
+HBRUSH\r
+STDCALL\r
+GetSysColorBrush(\r
+ int nIndex);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+SetSysColors(\r
+ int cElements,\r
+ CONST INT * lpaElements,\r
+ CONST COLORREF * lpaRgbValues);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+DrawFocusRect(\r
+ HDC hDC,\r
+ CONST RECT * lprc);\r
+\r
+ \r
+int\r
+STDCALL\r
+FillRect(\r
+ HDC hDC,\r
+ CONST RECT *lprc,\r
+ HBRUSH hbr);\r
+\r
+ \r
+int\r
+STDCALL\r
+FrameRect(\r
+ HDC hDC,\r
+ CONST RECT *lprc,\r
+ HBRUSH hbr);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+InvertRect(\r
+ HDC hDC,\r
+ CONST RECT *lprc);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+SetRect(\r
+ LPRECT lprc,\r
+ int xLeft,\r
+ int yTop,\r
+ int xRight,\r
+ int yBottom);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+SetRectEmpty(\r
+ LPRECT lprc);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+CopyRect(\r
+ LPRECT lprcDst,\r
+ CONST RECT *lprcSrc);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+InflateRect(\r
+ LPRECT lprc,\r
+ int dx,\r
+ int dy);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+IntersectRect(\r
+ LPRECT lprcDst,\r
+ CONST RECT *lprcSrc1,\r
+ CONST RECT *lprcSrc2);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+UnionRect(\r
+ LPRECT lprcDst,\r
+ CONST RECT *lprcSrc1,\r
+ CONST RECT *lprcSrc2);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+SubtractRect(\r
+ LPRECT lprcDst,\r
+ CONST RECT *lprcSrc1,\r
+ CONST RECT *lprcSrc2);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+OffsetRect(\r
+ LPRECT lprc,\r
+ int dx,\r
+ int dy);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+IsRectEmpty(\r
+ CONST RECT *lprc);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+EqualRect(\r
+ CONST RECT *lprc1,\r
+ CONST RECT *lprc2);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+PtInRect(\r
+ CONST RECT *lprc,\r
+ POINT pt);\r
+\r
+ \r
+WORD\r
+STDCALL\r
+GetWindowWord(\r
+ HWND hWnd,\r
+ int nIndex);\r
+\r
+ \r
+WORD\r
+STDCALL\r
+SetWindowWord(\r
+ HWND hWnd,\r
+ int nIndex,\r
+ WORD wNewWord);\r
+\r
+ \r
+WORD\r
+STDCALL\r
+GetClassWord(\r
+ HWND hWnd,\r
+ int nIndex);\r
+\r
+ \r
+WORD\r
+STDCALL\r
+SetClassWord(\r
+ HWND hWnd,\r
+ int nIndex,\r
+ WORD wNewWord);\r
+\r
+HWND\r
+STDCALL\r
+GetDesktopWindow(\r
+ VOID);\r
+\r
+ \r
+HWND\r
+STDCALL\r
+GetParent(\r
+ HWND hWnd);\r
+\r
+ \r
+HWND\r
+STDCALL\r
+SetParent(\r
+ HWND hWndChild,\r
+ HWND hWndNewParent);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+EnumChildWindows(\r
+ HWND hWndParent,\r
+ ENUMWINDOWSPROC lpEnumFunc,\r
+ LPARAM lParam);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+EnumWindows(\r
+ ENUMWINDOWSPROC lpEnumFunc,\r
+ LPARAM lParam);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+EnumThreadWindows(\r
+ DWORD dwThreadId,\r
+ ENUMWINDOWSPROC lpfn,\r
+ LPARAM lParam);\r
+\r
+HWND\r
+STDCALL\r
+GetTopWindow(\r
+ HWND hWnd);\r
+\r
+ \r
+DWORD\r
+STDCALL\r
+GetWindowThreadProcessId(\r
+ HWND hWnd,\r
+ LPDWORD lpdwProcessId);\r
+\r
+ \r
+HWND\r
+STDCALL\r
+GetLastActivePopup(\r
+ HWND hWnd);\r
+\r
+ \r
+HWND\r
+STDCALL\r
+GetWindow(\r
+ HWND hWnd,\r
+ UINT uCmd);\r
+\r
+WINBOOL\r
+STDCALL\r
+UnhookWindowsHook(\r
+ int nCode,\r
+ HOOKPROC pfnFilterProc);\r
+\r
+WINBOOL\r
+STDCALL\r
+UnhookWindowsHookEx(\r
+ HHOOK hhk);\r
+\r
+ \r
+LRESULT\r
+STDCALL\r
+CallNextHookEx(\r
+ HHOOK hhk,\r
+ int nCode,\r
+ WPARAM wParam,\r
+ LPARAM lParam);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+CheckMenuRadioItem(HMENU, UINT, UINT, UINT, UINT);\r
+\r
+HCURSOR\r
+STDCALL\r
+CreateCursor(\r
+ HINSTANCE hInst,\r
+ int xHotSpot,\r
+ int yHotSpot,\r
+ int nWidth,\r
+ int nHeight,\r
+ CONST VOID *pvANDPlane,\r
+ CONST VOID *pvXORPlane);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+DestroyCursor(\r
+ HCURSOR hCursor);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+SetSystemCursor(\r
+ HCURSOR hcur,\r
+ DWORD anID);\r
+\r
+ \r
+HICON\r
+STDCALL\r
+CreateIcon(\r
+ HINSTANCE hInstance,\r
+ int nWidth,\r
+ int nHeight,\r
+ BYTE cPlanes,\r
+ BYTE cBitsPixel,\r
+ CONST BYTE *lpbANDbits,\r
+ CONST BYTE *lpbXORbits);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+DestroyIcon(\r
+ HICON hIcon);\r
+\r
+ \r
+int\r
+STDCALL\r
+LookupIconIdFromDirectory(\r
+ PBYTE presbits,\r
+ WINBOOL fIcon);\r
+\r
+ \r
+int\r
+STDCALL\r
+LookupIconIdFromDirectoryEx(\r
+ PBYTE presbits,\r
+ WINBOOL fIcon,\r
+ int cxDesired,\r
+ int cyDesired,\r
+ UINT Flags);\r
+\r
+ \r
+HICON\r
+STDCALL\r
+CreateIconFromResource(\r
+ PBYTE presbits,\r
+ DWORD dwResSize,\r
+ WINBOOL fIcon,\r
+ DWORD dwVer);\r
+\r
+ \r
+HICON\r
+STDCALL\r
+CreateIconFromResourceEx(\r
+ PBYTE presbits,\r
+ DWORD dwResSize,\r
+ WINBOOL fIcon,\r
+ DWORD dwVer,\r
+ int cxDesired,\r
+ int cyDesired,\r
+ UINT Flags);\r
+\r
+ \r
+HICON\r
+STDCALL\r
+CopyImage(\r
+ HANDLE,\r
+ UINT,\r
+ int,\r
+ int,\r
+ UINT);\r
+\r
+ \r
+HICON\r
+STDCALL\r
+CreateIconIndirect(\r
+ PICONINFO piconinfo);\r
+\r
+ \r
+HICON\r
+STDCALL\r
+CopyIcon(\r
+ HICON hIcon);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+GetIconInfo(\r
+ HICON hIcon,\r
+ PICONINFO piconinfo);\r
+\r
+ \r
+WINBOOL\r
+STDCALL\r
+MapDialogRect(\r
+ HWND hDlg,\r
+ LPRECT lpRect);\r
+\r
+int\r
+STDCALL\r
+SetScrollInfo(HWND, int, LPCSCROLLINFO, WINBOOL);\r
+\r
+WINBOOL\r
+STDCALL\r
+GetScrollInfo(HWND, int, LPSCROLLINFO);\r
+\r
+WINBOOL\r
+STDCALL\r
+TranslateMDISysAccel(\r
+ HWND hWndClient,\r
+ LPMSG lpMsg);\r
+\r
+ \r
+UINT\r
+STDCALL\r
+ArrangeIconicWindows(\r
+ HWND hWnd);\r
+\r
+WORD\r
+STDCALL\r
+TileWindows(HWND hwndParent, UINT wHow, CONST RECT * lpRect, UINT cKids, const HWND *lpKids);\r
+\r
+WORD\r
+STDCALL\r
+CascadeWindows(HWND hwndParent, UINT wHow, CONST RECT * lpRect, UINT cKids, const HWND *lpKids);\r
+\r
+ \r
+VOID\r
+STDCALL\r
+SetLastErrorEx(\r
+ DWORD dwErrCode,\r
+ DWORD dwType\r
+ );\r
+\r
+ \r
+VOID\r
+STDCALL\r
+SetDebugErrorLevel(\r
+ DWORD dwLevel\r
+ );\r
+\r
+WINBOOL\r
+STDCALL\r
+DrawEdge(HDC hdc, LPRECT qrc, UINT edge, UINT grfFlags);\r
+\r
+WINBOOL\r
+STDCALL\r
+DrawFrameControl(HDC, LPRECT, UINT, UINT);\r
+\r
+WINBOOL\r
+STDCALL\r
+DrawCaption(HWND, HDC, CONST RECT *, UINT);\r
+\r
+WINBOOL\r
+STDCALL\r
+DrawAnimatedRects(HWND hwnd, int idAni, CONST RECT * lprcFrom, CONST RECT * lprcTo);\r
+\r
+WINBOOL\r
+STDCALL\r
+TrackPopupMenuEx(HMENU, UINT, int, int, HWND, LPTPMPARAMS);\r
+\r
+HWND\r
+STDCALL\r
+ChildWindowFromPointEx(HWND, POINT, UINT);\r
+\r
+WINBOOL\r
+STDCALL\r
+DrawIconEx(HDC hdc, int xLeft, int yTop,\r
+ HICON hIcon, int cxWidth, int cyWidth,\r
+ UINT istepIfAniCur, HBRUSH hbrFlickerFreeDraw, UINT diFlags);\r
+\r
+WINBOOL\r
+STDCALL\r
+AnimatePalette(HPALETTE, UINT, UINT, CONST PALETTEENTRY *);\r
+\r
+WINBOOL\r
+STDCALL\r
+Arc(HDC, int, int, int, int, int, int, int, int);\r
+\r
+WINBOOL\r
+STDCALL\r
+BitBlt(HDC, int, int, int, int, HDC, int, int, DWORD);\r
+\r
+WINBOOL\r
+STDCALL\r
+CancelDC(HDC);\r
+\r
+WINBOOL\r
+STDCALL\r
+Chord(HDC, int, int, int, int, int, int, int, int);\r
+\r
+HMETAFILE\r
+STDCALL\r
+CloseMetaFile(HDC);\r
+\r
+int\r
+STDCALL\r
+CombineRgn(HRGN, HRGN, HRGN, int);\r
+\r
+HBITMAP\r
+STDCALL\r
+CreateBitmap(int, int, UINT, UINT, CONST VOID *);\r
+\r
+HBITMAP\r
+STDCALL\r
+CreateBitmapIndirect(CONST BITMAP *);\r
+\r
+HBRUSH\r
+STDCALL\r
+CreateBrushIndirect(CONST LOGBRUSH *);\r
+\r
+HBITMAP\r
+STDCALL\r
+CreateCompatibleBitmap(HDC, int, int);\r
+\r
+HBITMAP\r
+STDCALL\r
+CreateDiscardableBitmap(HDC, int, int);\r
+\r
+HDC\r
+STDCALL\r
+CreateCompatibleDC(HDC);\r
+\r
+HBITMAP\r
+STDCALL\r
+CreateDIBitmap(HDC, CONST BITMAPINFOHEADER *, DWORD, CONST VOID *, CONST BITMAPINFO *, UINT);\r
+\r
+HBRUSH\r
+STDCALL\r
+CreateDIBPatternBrush(HGLOBAL, UINT);\r
+\r
+HBRUSH\r
+STDCALL\r
+CreateDIBPatternBrushPt(CONST VOID *, UINT);\r
+\r
+HRGN\r
+STDCALL\r
+CreateEllipticRgn(int, int, int, int);\r
+\r
+HRGN\r
+STDCALL\r
+CreateEllipticRgnIndirect(CONST RECT *);\r
+\r
+HBRUSH\r
+STDCALL\r
+CreateHatchBrush(int, COLORREF);\r
+\r
+HPALETTE\r
+STDCALL\r
+CreatePalette(CONST LOGPALETTE *);\r
+\r
+HPEN\r
+STDCALL\r
+CreatePen(int, int, COLORREF);\r
+\r
+HPEN\r
+STDCALL\r
+CreatePenIndirect(CONST LOGPEN *);\r
+\r
+HRGN\r
+STDCALL\r
+CreatePolyPolygonRgn(CONST POINT *, CONST INT *, int, int);\r
+\r
+HBRUSH\r
+STDCALL\r
+CreatePatternBrush(HBITMAP);\r
+\r
+HRGN\r
+STDCALL\r
+CreateRectRgn(int, int, int, int);\r
+\r
+HRGN\r
+STDCALL\r
+CreateRectRgnIndirect(CONST RECT *);\r
+\r
+HRGN\r
+STDCALL\r
+CreateRoundRectRgn(int, int, int, int, int, int);\r
+\r
+HBRUSH\r
+STDCALL\r
+CreateSolidBrush(COLORREF);\r
+\r
+WINBOOL\r
+STDCALL\r
+DeleteDC(HDC);\r
+\r
+WINBOOL\r
+STDCALL\r
+DeleteMetaFile(HMETAFILE);\r
+\r
+WINBOOL\r
+STDCALL\r
+DeleteObject(HGDIOBJ);\r
+\r
+int\r
+STDCALL\r
+DrawEscape(HDC, int, int, LPCSTR);\r
+\r
+WINBOOL\r
+STDCALL\r
+Ellipse(HDC, int, int, int, int);\r
+\r
+int\r
+STDCALL\r
+EnumObjects(HDC, int, ENUMOBJECTSPROC, LPARAM);\r
+\r
+WINBOOL\r
+STDCALL\r
+EqualRgn(HRGN, HRGN);\r
+\r
+int\r
+STDCALL\r
+Escape(HDC, int, int, LPCSTR, LPVOID);\r
+\r
+int\r
+STDCALL\r
+ExtEscape(HDC, int, int, LPCSTR, int, LPSTR);\r
+\r
+int\r
+STDCALL\r
+ExcludeClipRect(HDC, int, int, int, int);\r
+\r
+HRGN\r
+STDCALL\r
+ExtCreateRegion(CONST XFORM *, DWORD, CONST RGNDATA *);\r
+\r
+WINBOOL\r
+STDCALL\r
+ExtFloodFill(HDC, int, int, COLORREF, UINT);\r
+\r
+WINBOOL\r
+STDCALL\r
+FillRgn(HDC, HRGN, HBRUSH);\r
+\r
+WINBOOL\r
+STDCALL\r
+FloodFill(HDC, int, int, COLORREF);\r
+\r
+WINBOOL\r
+STDCALL\r
+FrameRgn(HDC, HRGN, HBRUSH, int, int);\r
+\r
+int\r
+STDCALL\r
+GetROP2(HDC);\r
+\r
+WINBOOL\r
+STDCALL\r
+GetAspectRatioFilterEx(HDC, LPSIZE);\r
+\r
+COLORREF\r
+STDCALL\r
+GetBkColor(HDC);\r
+\r
+int\r
+STDCALL\r
+GetBkMode(HDC);\r
+\r
+LONG\r
+STDCALL\r
+GetBitmapBits(HBITMAP, LONG, LPVOID);\r
+\r
+WINBOOL\r
+STDCALL\r
+GetBitmapDimensionEx(HBITMAP, LPSIZE);\r
+\r
+UINT\r
+STDCALL\r
+GetBoundsRect(HDC, LPRECT, UINT);\r
+\r
+WINBOOL\r
+STDCALL\r
+GetBrushOrgEx(HDC, LPPOINT);\r
+\r
+int\r
+STDCALL\r
+GetClipBox(HDC, LPRECT);\r
+\r
+int\r
+STDCALL\r
+GetClipRgn(HDC, HRGN);\r
+\r
+int\r
+STDCALL\r
+GetMetaRgn(HDC, HRGN);\r
+\r
+HGDIOBJ\r
+STDCALL\r
+GetCurrentObject(HDC, UINT);\r
+\r
+WINBOOL\r
+STDCALL\r
+GetCurrentPositionEx(HDC, LPPOINT);\r
+\r
+int\r
+STDCALL\r
+GetDeviceCaps(HDC, int);\r
+\r
+int\r
+STDCALL\r
+GetDIBits(HDC, HBITMAP, UINT, UINT, LPVOID, LPBITMAPINFO, UINT);\r
+\r
+DWORD\r
+STDCALL\r
+GetFontData(HDC, DWORD, DWORD, LPVOID, DWORD);\r
+\r
+int\r
+STDCALL\r
+GetGraphicsMode(HDC);\r
+\r
+int\r
+STDCALL\r
+GetMapMode(HDC);\r
+\r
+UINT\r
+STDCALL\r
+GetMetaFileBitsEx(HMETAFILE, UINT, LPVOID);\r
+\r
+COLORREF\r
+STDCALL\r
+GetNearestColor(HDC, COLORREF);\r
+\r
+UINT\r
+STDCALL\r
+GetNearestPaletteIndex(HPALETTE, COLORREF);\r
+\r
+DWORD\r
+STDCALL\r
+GetObjectType(HGDIOBJ h);\r
+\r
+UINT\r
+STDCALL\r
+GetPaletteEntries(HPALETTE, UINT, UINT, LPPALETTEENTRY);\r
+\r
+COLORREF\r
+STDCALL\r
+GetPixel(HDC, int, int);\r
+\r
+int\r
+STDCALL\r
+GetPixelFormat(HDC);\r
+\r
+int\r
+STDCALL\r
+GetPolyFillMode(HDC);\r
+\r
+WINBOOL\r
+STDCALL\r
+GetRasterizerCaps(LPRASTERIZER_STATUS, UINT);\r
+\r
+DWORD\r
+STDCALL\r
+GetRegionData(HRGN, DWORD, LPRGNDATA);\r
+\r
+int\r
+STDCALL\r
+GetRgnBox(HRGN, LPRECT);\r
+\r
+HGDIOBJ\r
+STDCALL\r
+GetStockObject(int);\r
+\r
+int\r
+STDCALL\r
+GetStretchBltMode(HDC);\r
+\r
+UINT\r
+STDCALL\r
+GetSystemPaletteEntries(HDC, UINT, UINT, LPPALETTEENTRY);\r
+\r
+UINT\r
+STDCALL\r
+GetSystemPaletteUse(HDC);\r
+\r
+int\r
+STDCALL\r
+GetTextCharacterExtra(HDC);\r
+\r
+UINT\r
+STDCALL\r
+GetTextAlign(HDC);\r
+\r
+COLORREF\r
+STDCALL\r
+GetTextColor(HDC);\r
+\r
+int\r
+STDCALL\r
+GetTextCharset(HDC hdc);\r
+\r
+int\r
+STDCALL\r
+GetTextCharsetInfo(HDC hdc, LPFONTSIGNATURE lpSig, DWORD dwFlags);\r
+\r
+WINBOOL\r
+STDCALL\r
+TranslateCharsetInfo( DWORD *lpSrc, LPCHARSETINFO lpCs, DWORD dwFlags);\r
+\r
+DWORD\r
+STDCALL\r
+GetFontLanguageInfo( HDC );\r
+\r
+WINBOOL\r
+STDCALL\r
+GetViewportExtEx(HDC, LPSIZE);\r
+\r
+WINBOOL\r
+STDCALL\r
+GetViewportOrgEx(HDC, LPPOINT);\r
+\r
+WINBOOL\r
+STDCALL\r
+GetWindowExtEx(HDC, LPSIZE);\r
+\r
+WINBOOL\r
+STDCALL\r
+GetWindowOrgEx(HDC, LPPOINT);\r
+\r
+int\r
+STDCALL\r
+IntersectClipRect(HDC, int, int, int, int);\r
+\r
+WINBOOL\r
+STDCALL\r
+InvertRgn(HDC, HRGN);\r
+\r
+WINBOOL\r
+STDCALL\r
+LineDDA(int, int, int, int, LINEDDAPROC, LPARAM);\r
+\r
+WINBOOL\r
+STDCALL\r
+LineTo(HDC, int, int);\r
+\r
+WINBOOL\r
+STDCALL\r
+MaskBlt(HDC, int, int, int, int,\r
+ HDC, int, int, HBITMAP, int, int, DWORD);\r
+\r
+WINBOOL\r
+STDCALL\r
+PlgBlt(HDC, CONST POINT *, HDC, int, int, int,\r
+ int, HBITMAP, int, int);\r
+\r
+int\r
+STDCALL\r
+OffsetClipRgn(HDC, int, int);\r
+\r
+int\r
+STDCALL\r
+OffsetRgn(HRGN, int, int);\r
+\r
+WINBOOL\r
+STDCALL \r
+PatBlt(HDC, int, int, int, int, DWORD);\r
+\r
+WINBOOL\r
+STDCALL\r
+Pie(HDC, int, int, int, int, int, int, int, int);\r
+\r
+WINBOOL\r
+STDCALL\r
+PlayMetaFile(HDC, HMETAFILE);\r
+\r
+WINBOOL\r
+STDCALL\r
+PaintRgn(HDC, HRGN);\r
+\r
+WINBOOL\r
+STDCALL\r
+PolyPolygon(HDC, CONST POINT *, CONST INT *, int);\r
+\r
+WINBOOL\r
+STDCALL\r
+PtInRegion(HRGN, int, int);\r
+\r
+WINBOOL\r
+STDCALL\r
+PtVisible(HDC, int, int);\r
+\r
+WINBOOL\r
+STDCALL\r
+RectInRegion(HRGN, CONST RECT *);\r
+\r
+WINBOOL\r
+STDCALL\r
+RectVisible(HDC, CONST RECT *);\r
+\r
+WINBOOL\r
+STDCALL\r
+Rectangle(HDC, int, int, int, int);\r
+\r
+WINBOOL\r
+STDCALL\r
+RestoreDC(HDC, int);\r
+\r
+UINT\r
+STDCALL\r
+RealizePalette(HDC);\r
+\r
+WINBOOL\r
+STDCALL\r
+RoundRect(HDC, int, int, int, int, int, int);\r
+\r
+WINBOOL\r
+STDCALL\r
+ResizePalette(HPALETTE, UINT);\r
+\r
+int\r
+STDCALL\r
+SaveDC(HDC);\r
+\r
+int\r
+STDCALL\r
+SelectClipRgn(HDC, HRGN);\r
+\r
+int\r
+STDCALL\r
+ExtSelectClipRgn(HDC, HRGN, int);\r
+\r
+int\r
+STDCALL\r
+SetMetaRgn(HDC);\r
+\r
+HGDIOBJ\r
+STDCALL\r
+SelectObject(HDC, HGDIOBJ);\r
+\r
+HPALETTE\r
+STDCALL\r
+SelectPalette(HDC, HPALETTE, WINBOOL);\r
+\r
+COLORREF\r
+STDCALL\r
+SetBkColor(HDC, COLORREF);\r
+\r
+int\r
+STDCALL\r
+SetBkMode(HDC, int);\r
+\r
+LONG\r
+STDCALL\r
+SetBitmapBits(HBITMAP, DWORD, CONST VOID *);\r
+\r
+UINT\r
+STDCALL\r
+SetBoundsRect(HDC, CONST RECT *, UINT);\r
+\r
+int\r
+STDCALL\r
+SetDIBits(HDC, HBITMAP, UINT, UINT, CONST VOID *, CONST BITMAPINFO *, UINT);\r
+\r
+int\r
+STDCALL\r
+SetDIBitsToDevice(HDC, int, int, DWORD, DWORD, int,\r
+ int, UINT, UINT, CONST VOID *, CONST BITMAPINFO *, UINT);\r
+\r
+DWORD\r
+STDCALL\r
+SetMapperFlags(HDC, DWORD);\r
+\r
+int\r
+STDCALL\r
+SetGraphicsMode(HDC hdc, int iMode);\r
+\r
+int\r
+STDCALL\r
+SetMapMode(HDC, int);\r
+\r
+HMETAFILE\r
+STDCALL\r
+SetMetaFileBitsEx(UINT, CONST BYTE *);\r
+\r
+UINT\r
+STDCALL\r
+SetPaletteEntries(HPALETTE, UINT, UINT, CONST PALETTEENTRY *);\r
+\r
+COLORREF\r
+STDCALL\r
+SetPixel(HDC, int, int, COLORREF);\r
+\r
+WINBOOL\r
+STDCALL\r
+SetPixelV(HDC, int, int, COLORREF);\r
+\r
+int\r
+STDCALL\r
+SetPolyFillMode(HDC, int);\r
+\r
+WINBOOL\r
+STDCALL\r
+StretchBlt(HDC, int, int, int, int, HDC, int, int, int, int, DWORD);\r
+\r
+WINBOOL\r
+STDCALL\r
+SetRectRgn(HRGN, int, int, int, int);\r
+int\r
+STDCALL\r
+StretchDIBits(HDC, int, int, int, int, int, int, int, int, CONST\r
+ VOID *, CONST BITMAPINFO *, UINT, DWORD);\r
+\r
+int\r
+STDCALL\r
+SetROP2(HDC, int);\r
+\r
+int\r
+STDCALL\r
+SetStretchBltMode(HDC, int);\r
+\r
+UINT\r
+STDCALL\r
+SetSystemPaletteUse(HDC, UINT);\r
+\r
+int\r
+STDCALL\r
+SetTextCharacterExtra(HDC, int);\r
+\r
+COLORREF\r
+STDCALL\r
+SetTextColor(HDC, COLORREF);\r
+\r
+UINT\r
+STDCALL\r
+SetTextAlign(HDC, UINT);\r
+\r
+WINBOOL\r
+STDCALL\r
+SetTextJustification(HDC, int, int);\r
+\r
+WINBOOL\r
+STDCALL\r
+UpdateColors(HDC);\r
+\r
+WINBOOL\r
+STDCALL\r
+PlayMetaFileRecord(HDC, LPHANDLETABLE, LPMETARECORD, UINT);\r
+\r
+WINBOOL\r
+STDCALL\r
+EnumMetaFile(HDC, HMETAFILE, ENUMMETAFILEPROC, LPARAM);\r
+\r
+HENHMETAFILE\r
+STDCALL\r
+CloseEnhMetaFile(HDC);\r
+\r
+WINBOOL\r
+STDCALL\r
+DeleteEnhMetaFile(HENHMETAFILE);\r
+\r
+WINBOOL\r
+STDCALL\r
+EnumEnhMetaFile(HDC, HENHMETAFILE, ENHMETAFILEPROC,\r
+ LPVOID, CONST RECT *);\r
+\r
+UINT\r
+STDCALL\r
+GetEnhMetaFileHeader(HENHMETAFILE, UINT, LPENHMETAHEADER );\r
+\r
+UINT\r
+STDCALL\r
+GetEnhMetaFilePaletteEntries(HENHMETAFILE, UINT, LPPALETTEENTRY );\r
+\r
+UINT\r
+STDCALL\r
+GetWinMetaFileBits(HENHMETAFILE, UINT, LPBYTE, INT, HDC);\r
+\r
+WINBOOL\r
+STDCALL\r
+PlayEnhMetaFile(HDC, HENHMETAFILE, CONST RECT *);\r
+\r
+WINBOOL\r
+STDCALL\r
+PlayEnhMetaFileRecord(HDC, LPHANDLETABLE, CONST ENHMETARECORD *, UINT);\r
+\r
+HENHMETAFILE\r
+STDCALL\r
+SetEnhMetaFileBits(UINT, CONST BYTE *);\r
+\r
+HENHMETAFILE\r
+STDCALL\r
+SetWinMetaFileBits(UINT, CONST BYTE *, HDC, CONST METAFILEPICT *);\r
+\r
+WINBOOL\r
+STDCALL\r
+GdiComment(HDC, UINT, CONST BYTE *);\r
+\r
+WINBOOL\r
+STDCALL\r
+AngleArc(HDC, int, int, DWORD, FLOAT, FLOAT);\r
+\r
+WINBOOL\r
+STDCALL\r
+PolyPolyline(HDC, CONST POINT *, CONST DWORD *, DWORD);\r
+\r
+WINBOOL\r
+STDCALL\r
+GetWorldTransform(HDC, LPXFORM);\r
+\r
+WINBOOL\r
+STDCALL\r
+SetWorldTransform(HDC, CONST XFORM *);\r
+\r
+WINBOOL\r
+STDCALL\r
+ModifyWorldTransform(HDC, CONST XFORM *, DWORD);\r
+\r
+WINBOOL\r
+STDCALL\r
+CombineTransform(LPXFORM, CONST XFORM *, CONST XFORM *);\r
+\r
+HBITMAP\r
+STDCALL\r
+CreateDIBSection(HDC, CONST BITMAPINFO *, UINT, VOID **, HANDLE, DWORD);\r
+\r
+UINT\r
+STDCALL\r
+GetDIBColorTable(HDC, UINT, UINT, RGBQUAD *);\r
+\r
+UINT\r
+STDCALL\r
+SetDIBColorTable(HDC, UINT, UINT, CONST RGBQUAD *);\r
+\r
+WINBOOL\r
+STDCALL\r
+SetColorAdjustment(HDC, CONST COLORADJUSTMENT *);\r
+\r
+WINBOOL\r
+STDCALL\r
+GetColorAdjustment(HDC, LPCOLORADJUSTMENT);\r
+\r
+HPALETTE\r
+STDCALL \r
+CreateHalftonePalette(HDC);\r
+\r
+int\r
+STDCALL\r
+EndDoc(HDC);\r
+\r
+int\r
+STDCALL\r
+StartPage(HDC);\r
+\r
+int\r
+STDCALL\r
+EndPage(HDC);\r
+\r
+int\r
+STDCALL\r
+AbortDoc(HDC);\r
+\r
+int\r
+STDCALL\r
+SetAbortProc(HDC, ABORTPROC);\r
+\r
+WINBOOL\r
+STDCALL\r
+AbortPath(HDC);\r
+\r
+WINBOOL\r
+STDCALL\r
+ArcTo(HDC, int, int, int, int, int, int,int, int);\r
+\r
+WINBOOL\r
+STDCALL\r
+BeginPath(HDC);\r
+\r
+WINBOOL\r
+STDCALL\r
+CloseFigure(HDC);\r
+\r
+WINBOOL\r
+STDCALL\r
+EndPath(HDC);\r
+\r
+WINBOOL\r
+STDCALL\r
+FillPath(HDC);\r
+\r
+WINBOOL\r
+STDCALL\r
+FlattenPath(HDC);\r
+\r
+int\r
+STDCALL\r
+GetPath(HDC, LPPOINT, LPBYTE, int);\r
+\r
+HRGN\r
+STDCALL\r
+PathToRegion(HDC);\r
+\r
+WINBOOL\r
+STDCALL\r
+PolyDraw(HDC, CONST POINT *, CONST BYTE *, int);\r
+\r
+WINBOOL\r
+STDCALL\r
+SelectClipPath(HDC, int);\r
+\r
+int\r
+STDCALL\r
+SetArcDirection(HDC, int);\r
+\r
+WINBOOL\r
+STDCALL\r
+SetMiterLimit(HDC, FLOAT, PFLOAT);\r
+\r
+WINBOOL\r
+STDCALL\r
+StrokeAndFillPath(HDC);\r
+\r
+WINBOOL\r
+STDCALL\r
+StrokePath(HDC);\r
+\r
+WINBOOL\r
+STDCALL\r
+WidenPath(HDC);\r
+\r
+HPEN\r
+STDCALL\r
+ExtCreatePen(DWORD, DWORD, CONST LOGBRUSH *, DWORD, CONST DWORD *);\r
+\r
+WINBOOL\r
+STDCALL\r
+GetMiterLimit(HDC, PFLOAT);\r
+\r
+int\r
+STDCALL\r
+GetArcDirection(HDC);\r
+\r
+WINBOOL\r
+STDCALL\r
+MoveToEx(HDC, int, int, LPPOINT);\r
+\r
+HRGN\r
+STDCALL\r
+CreatePolygonRgn(CONST POINT *, int, int);\r
+\r
+WINBOOL\r
+STDCALL\r
+DPtoLP(HDC, LPPOINT, int);\r
+\r
+WINBOOL\r
+STDCALL\r
+LPtoDP(HDC, LPPOINT, int);\r
+ \r
+WINBOOL\r
+STDCALL\r
+Polygon(HDC, CONST POINT *, int);\r
+\r
+WINBOOL\r
+STDCALL\r
+Polyline(HDC, CONST POINT *, int);\r
+\r
+WINBOOL\r
+STDCALL\r
+PolyBezier(HDC, CONST POINT *, DWORD);\r
+\r
+WINBOOL\r
+STDCALL\r
+PolyBezierTo(HDC, CONST POINT *, DWORD);\r
+\r
+WINBOOL\r
+STDCALL\r
+PolylineTo(HDC, CONST POINT *, DWORD);\r
+\r
+WINBOOL\r
+STDCALL\r
+SetViewportExtEx(HDC, int, int, LPSIZE);\r
+\r
+WINBOOL\r
+STDCALL\r
+SetViewportOrgEx(HDC, int, int, LPPOINT);\r
+\r
+WINBOOL\r
+STDCALL\r
+SetWindowExtEx(HDC, int, int, LPSIZE);\r
+\r
+WINBOOL\r
+STDCALL\r
+SetWindowOrgEx(HDC, int, int, LPPOINT);\r
+\r
+WINBOOL\r
+STDCALL\r
+OffsetViewportOrgEx(HDC, int, int, LPPOINT);\r
+\r
+WINBOOL\r
+STDCALL\r
+OffsetWindowOrgEx(HDC, int, int, LPPOINT);\r
+\r
+WINBOOL\r
+STDCALL\r
+ScaleViewportExtEx(HDC, int, int, int, int, LPSIZE);\r
+\r
+WINBOOL\r
+STDCALL\r
+ScaleWindowExtEx(HDC, int, int, int, int, LPSIZE);\r
+\r
+WINBOOL\r
+STDCALL\r
+SetBitmapDimensionEx(HBITMAP, int, int, LPSIZE);\r
+\r
+WINBOOL\r
+STDCALL\r
+SetBrushOrgEx(HDC, int, int, LPPOINT);\r
+\r
+WINBOOL\r
+STDCALL\r
+GetDCOrgEx(HDC,LPPOINT);\r
+\r
+WINBOOL\r
+STDCALL\r
+FixBrushOrgEx(HDC,int,int,LPPOINT);\r
+\r
+WINBOOL\r
+STDCALL\r
+UnrealizeObject(HGDIOBJ);\r
+\r
+WINBOOL\r
+STDCALL\r
+GdiFlush(void);\r
+\r
+DWORD\r
+STDCALL\r
+GdiSetBatchLimit(DWORD);\r
+\r
+DWORD\r
+STDCALL\r
+GdiGetBatchLimit(void);\r
+\r
+int\r
+STDCALL\r
+SetICMMode(HDC, int);\r
+\r
+WINBOOL\r
+STDCALL\r
+CheckColorsInGamut(HDC,LPVOID,LPVOID,DWORD);\r
+\r
+HANDLE\r
+STDCALL\r
+GetColorSpace(HDC);\r
+\r
+WINBOOL\r
+STDCALL\r
+SetColorSpace(HDC,HCOLORSPACE);\r
+\r
+WINBOOL\r
+STDCALL\r
+DeleteColorSpace(HCOLORSPACE);\r
+\r
+WINBOOL\r
+STDCALL\r
+GetDeviceGammaRamp(HDC,LPVOID);\r
+\r
+WINBOOL\r
+STDCALL\r
+SetDeviceGammaRamp(HDC,LPVOID);\r
+\r
+WINBOOL\r
+STDCALL\r
+ColorMatchToTarget(HDC,HDC,DWORD);\r
+\r
+HPROPSHEETPAGE\r
+STDCALL\r
+CreatePropertySheetPageA(LPCPROPSHEETPAGE lppsp);\r
+\r
+WINBOOL\r
+STDCALL\r
+DestroyPropertySheetPage(HPROPSHEETPAGE hPSPage);\r
+\r
+void\r
+STDCALL\r
+InitCommonControls(void);\r
+\r
+#define ImageList_AddIcon(himl, hicon) ImageList_ReplaceIcon(himl, -1, hicon)\r
+\r
+HIMAGELIST\r
+STDCALL\r
+ImageList_Create(int cx, int cy, UINT flags, \r
+ int cInitial, int cGrow);\r
+\r
+WINBOOL\r
+STDCALL\r
+ImageList_Destroy(HIMAGELIST himl);\r
+\r
+int\r
+STDCALL\r
+ImageList_GetImageCount(HIMAGELIST himl);\r
+\r
+int\r
+STDCALL\r
+ImageList_Add(HIMAGELIST himl, HBITMAP hbmImage, \r
+ HBITMAP hbmMask);\r
+\r
+int\r
+STDCALL\r
+ImageList_ReplaceIcon(HIMAGELIST himl, int i, HICON hicon);\r
+\r
+COLORREF\r
+STDCALL\r
+ImageList_SetBkColor(HIMAGELIST himl, COLORREF clrBk);\r
+\r
+COLORREF\r
+STDCALL\r
+ImageList_GetBkColor(HIMAGELIST himl);\r
+\r
+WINBOOL\r
+STDCALL\r
+ImageList_SetOverlayImage(HIMAGELIST himl, int iImage, \r
+ int iOverlay);\r
+\r
+WINBOOL\r
+STDCALL\r
+ImageList_Draw(HIMAGELIST himl, int i, HDC hdcDst, int x, int y, UINT fStyle);\r
+\r
+WINBOOL\r
+STDCALL\r
+ImageList_Replace(HIMAGELIST himl, int i, HBITMAP hbmImage, HBITMAP hbmMask);\r
+\r
+int\r
+STDCALL\r
+ImageList_AddMasked(HIMAGELIST himl, HBITMAP hbmImage, COLORREF crMask);\r
+\r
+WINBOOL\r
+STDCALL\r
+ImageList_DrawEx(HIMAGELIST himl, int i, HDC hdcDst, int x, int y, int dx, int dy, COLORREF rgbBk, COLORREF rgbFg, UINT fStyle);\r
+\r
+WINBOOL\r
+STDCALL\r
+ImageList_Remove(HIMAGELIST himl, int i);\r
+\r
+HICON\r
+STDCALL\r
+ImageList_GetIcon(HIMAGELIST himl, int i, UINT flags);\r
+\r
+WINBOOL\r
+STDCALL\r
+ImageList_BeginDrag(HIMAGELIST himlTrack, int iTrack, int dxHotspot, int dyHotspot);\r
+\r
+void\r
+STDCALL\r
+ImageList_EndDrag(void);\r
+\r
+WINBOOL\r
+STDCALL\r
+ImageList_DragEnter(HWND hwndLock, int x, int y);\r
+\r
+WINBOOL\r
+STDCALL\r
+ImageList_DragLeave(HWND hwndLock);\r
+\r
+WINBOOL\r
+STDCALL\r
+ImageList_DragMove(int x, int y);\r
+\r
+WINBOOL\r
+STDCALL\r
+ImageList_SetDragCursorImage(HIMAGELIST himlDrag, int iDrag, int dxHotspot, int dyHotspot);\r
+\r
+WINBOOL\r
+STDCALL\r
+ImageList_DragShowNolock(WINBOOL fShow);\r
+\r
+HIMAGELIST\r
+STDCALL\r
+ImageList_GetDragImage(POINT * ppt,POINT * pptHotspot);\r
+\r
+WINBOOL\r
+STDCALL\r
+ImageList_GetIconSize(HIMAGELIST himl, int *cx, int *cy);\r
+\r
+WINBOOL\r
+STDCALL\r
+ImageList_SetIconSize(HIMAGELIST himl, int cx, int cy);\r
+\r
+WINBOOL\r
+STDCALL\r
+ImageList_GetImageInfo(HIMAGELIST himl, int i, IMAGEINFO * pImageInfo);\r
+\r
+HIMAGELIST\r
+STDCALL\r
+ImageList_Merge(HIMAGELIST himl1, int i1, HIMAGELIST himl2, int i2, int dx, int dy);\r
+\r
+HWND\r
+STDCALL\r
+CreateToolbarEx(HWND hwnd, DWORD ws, UINT wID, int nBitmaps,\r
+ HINSTANCE hBMInst, UINT wBMID, LPCTBBUTTON lpButtons,\r
+ int iNumButtons, int dxButton, int dyButton,\r
+ int dxBitmap, int dyBitmap, UINT uStructSize);\r
+\r
+HBITMAP\r
+STDCALL\r
+CreateMappedBitmap(HINSTANCE hInstance, int idBitmap,\r
+ UINT wFlags, LPCOLORMAP lpColorMap,\r
+ int iNumMaps);\r
+\r
+\r
+void\r
+STDCALL\r
+MenuHelp(UINT uMsg, WPARAM wParam, LPARAM lParam, HMENU hMainMenu, HINSTANCE hInst, HWND hwndStatus, UINT *lpwIDs);\r
+\r
+WINBOOL\r
+STDCALL\r
+ShowHideMenuCtl(HWND hWnd, UINT uFlags, LPINT lpInfo);\r
+\r
+void\r
+STDCALL\r
+GetEffectiveClientRect(HWND hWnd, LPRECT lprc, LPINT lpInfo);\r
+\r
+WINBOOL\r
+STDCALL\r
+MakeDragList(HWND hLB);\r
+\r
+void\r
+STDCALL\r
+DrawInsert(HWND handParent, HWND hLB, int nItem);\r
+\r
+int\r
+STDCALL\r
+LBItemFromPt(HWND hLB, POINT pt, WINBOOL bAutoScroll);\r
+\r
+HWND\r
+STDCALL\r
+CreateUpDownControl(DWORD dwStyle, int x, int y, int cx, int cy,\r
+ HWND hParent, int nID, HINSTANCE hInst,\r
+ HWND hBuddy,\r
+ int nUpper, int nLower, int nPos);\r
+\r
+DWORD\r
+STDCALL\r
+CommDlgExtendedError(VOID);\r
+\r
+/* Animation controls */\r
+\r
+#define Animate_Create(hwndP, id, dwStyle, hInstance) CreateWindow(ANIMATE_CLASS, NULL, dwStyle, 0, 0, 0, 0, hwndP, (HMENU)(id), hInstance, NULL)\r
+\r
+#define Animate_Open(hwnd, szName) SendMessage(hwnd, ACM_OPEN, 0, (LPARAM)(LPTSTR)(szName))\r
+\r
+#define Animate_Play(hwnd, from, to, rep) SendMessage(hwnd, ACM_PLAY, (WPARAM)(UINT)(rep), (LPARAM)MAKELONG(from, to))\r
+\r
+#define Animate_Stop(hwnd) SendMessage(hwnd, ACM_STOP, 0, 0)\r
+\r
+#define Animate_Close(hwnd) Animate_Open(hwnd, NULL)\r
+\r
+#define Animate_Seek(hwnd, frame) Animate_Play(hwnd, frame, frame, 1)\r
+\r
+/* Property sheet macros */\r
+\r
+#define PropSheet_AddPage(hPropSheetDlg, hpage) SendMessage(hPropSheetDlg, PSM_ADDPAGE, 0, (LPARAM)(HPROPSHEETPAGE)hpage)\r
+\r
+#define PropSheet_Apply(hPropSheetDlg) SendMessage(hPropSheetDlg, PSM_APPLY, 0, 0)\r
+\r
+#define PropSheet_CancelToClose(hPropSheetDlg) SendMessage(hPropSheetDlg, PSM_CANCELTOCLOSE, 0, 0)\r
+\r
+#define PropSheet_Changed(hPropSheetDlg, hwndPage) SendMessage(hPropSheetDlg, PSM_CHANGED, (WPARAM)(HWND)hwndPage, 0)\r
+\r
+#define PropSheet_GetCurrentPageHwnd(hDlg) SendMessage(hDlg, PSM_GETCURRENTPAGEHWND, 0, 0)\r
+\r
+#define PropSheet_GetTabControl(hPropSheetDlg) SendMessage(hPropSheetDlg, PSM_GETTABCONTROL, 0, 0)\r
+\r
+#define PropSheet_IsDialogMessage(hDlg, pMsg) SendMessage(hDlg, PSM_ISDIALOGMESSAGE, 0, (LPARAM)pMsg)\r
+\r
+#define PropSheet_PressButton(hPropSheetDlg, iButton) SendMessage(hPropSheetDlg, PSM_PRESSBUTTON, (WPARAM)(int)iButton, 0)\r
+\r
+#define PropSheet_QuerySiblings(hPropSheetDlg, param1, param2) SendMessage(hPropSheetDlg, PSM_QUERYSIBLINGS, (WPARAM)param1, (LPARAM)param2)\r
+\r
+#define PropSheet_RebootSystem(hPropSheetDlg) SendMessage(hPropSheetDlg, PSM_REBOOTSYSTEM, 0, 0)\r
+\r
+#define PropSheet_RemovePage(hPropSheetDlg, index, hpage) SendMessage(hPropSheetDlg, PSM_REMOVEPAGE, (WPARAM)(int)index, (LPARAM)(HPROPSHEETPAGE)hpage)\r
+\r
+#define PropSheet_RestartWindows(hPropSheetDlg) SendMessage(hPropSheetDlg, PSM_RESTARTWINDOWS, 0, 0)\r
+\r
+#define PropSheet_SetCurSel(hPropSheetDlg, hpage, index) SendMessage(hPropSheetDlg, PSM_SETCURSEL, (WPARAM)(int)index, (LPARAM)(HPROPSHEETPAGE)hpage)\r
+\r
+#define PropSheet_SetCurSelByID(hPropSheetDlg, id) SendMessage(hPropSheetDlg, PSM_SETCURSELID, 0, (LPARAM)(int)id)\r
+\r
+#define PropSheet_SetFinishText(hPropSheetDlg, lpszText) SendMessage(hPropSheetDlg, PSM_SETFINISHTEXT, 0, (LPARAM)(LPTSTR)lpszText)\r
+\r
+#define PropSheet_SetTitle(hPropSheetDlg, dwStyle, lpszText) SendMessage(hPropSheetDlg, PSM_SETTITLE, (WPARAM)(DWORD)dwStyle, (LPARAM)(LPCTSTR)lpszText)\r
+\r
+#define PropSheet_SetWizButtons(hPropSheetDlg, dwFlags) SendMessage(hPropSheetDlg, PSM_SETWIZBUTTONS, 0, (LPARAM)(DWORD)dwFlags)\r
+\r
+#define PropSheet_UnChanged(hPropSheetDlg, hwndPage) SendMessage(hPropSheetDlg, PSM_UNCHANGED, (WPARAM)(HWND)hwndPage, 0)\r
+\r
+/* Header control */\r
+#define Header_DeleteItem(hwndHD, index) (BOOL)SendMessage((hwndHD), HDM_DELETEITEM, (WPARAM)(int)(index), 0L) \r
+\r
+#define Header_GetItem(hwndHD, index, phdi) (BOOL)SendMessage((hwndHD), HDM_GETITEM, (WPARAM)(int)(index), (LPARAM)(HD_ITEM FAR*)(phdi))\r
+ \r
+#define Header_GetItemCount(hwndHD) (int)SendMessage((hwndHD), HDM_GETITEMCOUNT, 0, 0L)\r
+\r
+#define Header_InsertItem(hwndHD, index, phdi) (int)SendMessage((hwndHD), HDM_INSERTITEM, (WPARAM)(int)(index), (LPARAM)(const HD_ITEM FAR*)(phdi))\r
+ \r
+#define Header_Layout(hwndHD, playout) (BOOL)SendMessage((hwndHD), HDM_LAYOUT, 0, (LPARAM)(HD_LAYOUT FAR*)(playout))\r
+ \r
+#define Header_SetItem(hwndHD, index, phdi) (BOOL)SendMessage((hwndHD), HDM_SETITEM, (WPARAM)(int)(index), (LPARAM)(const HD_ITEM FAR*)(phdi))\r
+\r
+/* List View */\r
+#define ListView_Arrange(hwndLV, code) SendMessage((hwndLV), LVM_ARRANGE, (WPARAM)(UINT)(code), 0)\r
+\r
+#define ListView_CreateDragImage(hwnd, i, lpptUpLeft) SendMessage((hwnd), LVM_CREATEDRAGIMAGE, (WPARAM)(int)(i), (LPARAM)(LPPOINT)(lpptUpLeft))\r
+\r
+#define ListView_DeleteAllItems(hwnd) SendMessage(hwnd, LVM_DELETEALLITEMS, 0, 0)\r
+\r
+#define ListView_DeleteColumn(hwnd, iCol) SendMessage((hwnd), LVM_DELETECOLUMN, (WPARAM)(int)(iCol), 0)\r
+\r
+#define ListView_DeleteItem(hwnd, iItem) SendMessage(hwnd, LVM_DELETEITEM, (WPARAM)(int)iItem, 0)\r
+\r
+#define ListView_EditLabel(hwndLV, i) SendMessage((hwndLV), LVM_EDITLABEL, (WPARAM)(int)i, 0)\r
+\r
+#define ListView_EnsureVisible(hwndLV, i, fPartialOK) SendMessage(hwndLV, LVM_ENSUREVISIBLE, (WPARAM)(int)i, MAKELPARAM((fPartialOK), 0))\r
+\r
+#define ListView_FindItem(hwnd, iStart, plvfi) SendMessage(hwnd, LVM_FINDITEM, (WPARAM)(int)iStart, (LPARAM)(const LV_FINDINFO *)plvfi)\r
+\r
+#define ListView_GetBkColor(hwnd) SendMessage((HWND)hwnd, LVM_GETBKCOLOR, 0, 0)\r
+\r
+#define ListView_GetCallbackMask(hwnd) SendMessage(hwnd, LVM_GETCALLBACKMASK, 0, 0)\r
+\r
+#define ListView_GetColumn(hwnd, iCol, pcol) SendMessage((hwnd), LVM_GETCOLUMN, (WPARAM)(int)(iCol), (LPARAM)(LV_COLUMN *)(pcol))\r
+\r
+#define ListView_GetColumnWidth(hwnd, iCol) SendMessage((hwnd), LVM_GETCOLUMNWIDTH, (WPARAM)(int)(iCol), 0)\r
+\r
+#define ListView_GetCountPerPage(hwndLV) SendMessage((hwndLV), LVM_GETCOUNTPERPAGE, 0, 0)\r
+\r
+#define ListView_GetEditControl(hwndLV) SendMessage((hwndLV), LVM_GETEDITCONTROL, 0, 0)\r
+\r
+#define ListView_GetImageList(hwnd, iImageList) SendMessage(hwnd, LVM_GETIMAGELIST, (WPARAM)(INT)iImageList, 0)\r
+\r
+#define ListView_GetISearchString(hwndLV, lpsz) SendMessage((hwndLV), LVM_GETISEARCHSTRING, 0, (LPARAM)(LPTSTR)lpsz)\r
+\r
+#define ListView_GetItem(hwnd, pitem) SendMessage(hwnd, LVM_GETITEM, 0, (LPARAM)(LV_ITEM *)(pitem))\r
+\r
+#define ListView_GetItemCount(hwnd) SendMessage(hwnd, LVM_GETITEMCOUNT, 0, 0)\r
+\r
+#define ListView_GetItemPosition(hwndLV, i, ppt) SendMessage(hwndLV, LVM_GETITEMPOSITION, (WPARAM)(int)i, (LPARAM)(POINT *)ppt)\r
+\r
+#define ListView_GetItemRect(hwnd, i, prc, code) SendMessage(hwnd, LVM_GETITEMRECT, (WPARAM)(int)i, ((prc) ? (((RECT *)(prc))->left = (code), (LPARAM)(RECT *)(prc)) : (LPARAM)(RECT *)NULL))\r
+\r
+#define ListView_GetItemSpacing(hwndLV, fSmall) SendMessage((hwndLV), LVM_GETITEMSPACING, fSmall, 0)\r
+\r
+#define ListView_GetItemState(hwndLV, i, mask) SendMessage((hwndLV), LVM_GETITEMSTATE, (WPARAM)i, (LPARAM)mask)\r
+\r
+#define ListView_GetItemText(hwndLV, i, iSubItem_, pszText_, cchTextMax_) { LV_ITEM _gnu_lvi;_gnu_lvi.iSubItem = iSubItem_;_gnu_lvi.cchTextMax = cchTextMax_;_gnu_lvi.pszText = pszText_;SendMessage((hwndLV), LVM_GETITEMTEXT, (WPARAM)i, (LPARAM)(LV_ITEM *)&_gnu_lvi);}\r
+\r
+#define ListView_GetNextItem(hwnd, iStart, flags) SendMessage(hwnd, LVM_GETNEXTITEM, (WPARAM)(int)iStart, (LPARAM)flags)\r
+\r
+#define ListView_GetOrigin(hwndLV, ppt) SendMessage((hwndLV), LVM_GETORIGIN, (WPARAM)0, (LPARAM)(POINT *)(ppt))\r
+\r
+#define ListView_GetSelectedCount(hwndLV) SendMessage((hwndLV), LVM_GETSELECTEDCOUNT, 0, 0)\r
+\r
+#define ListView_GetStringWidth(hwndLV, psz) SendMessage(hwndLV, LVM_GETSTRINGWIDTH, 0, (LPARAM)(LPCTSTR)psz)\r
+\r
+#define ListView_GetTextBkColor(hwnd) SendMessage((hwnd), LVM_GETTEXTBKCOLOR, 0, 0)\r
+\r
+#define ListView_GetTextColor(hwnd) SendMessage((hwnd), LVM_GETTEXTCOLOR, 0, 0)\r
+\r
+#define ListView_GetTopIndex(hwndLV) SendMessage((hwndLV), LVM_GETTOPINDEX, 0, 0)\r
+\r
+#define ListView_GetViewRect(hwnd, prc) SendMessage((hwnd), LVM_GETVIEWRECT, 0, (LPARAM)(RECT *)(prc))\r
+\r
+#define ListView_HitTest(hwndLV, pinfo) SendMessage(hwndLV, LVM_HITTEST, 0, (LPARAM)(LV_HITTESTINFO *)pinfo)\r
+\r
+#define ListView_InsertColumn(hwnd, iCol, pcol) SendMessage((hwnd), LVM_INSERTCOLUMN, (WPARAM)(int)(iCol), (LPARAM)(const LV_COLUMN *)(pcol))\r
+\r
+#define ListView_InsertItem(hwnd, pitem) SendMessage(hwnd, LVM_INSERTITEM, 0, (LPARAM)(const LV_ITEM *)pitem)\r
+\r
+#define ListView_RedrawItems(hwndLV, iFirst, iLast) SendMessage((hwndLV), LVM_REDRAWITEMS, (WPARAM)(int)iFirst, (LPARAM)(int)iLast)\r
+\r
+#define ListView_Scroll(hwndLV, dx, dy) SendMessage((hwndLV), LVM_SCROLL, (WPARAM)(int)dx, (LPARAM)(int)dy)\r
+\r
+#define ListView_SetBkColor(hwnd, clrBk) SendMessage(hwnd, LVM_SETBKCOLOR, 0, (LPARAM)(COLORREF)clrBk)\r
+\r
+#define ListView_SetCallbackMask(hwnd, mask) SendMessage(hwnd, LVM_SETCALLBACKMASK, (WPARAM)(UINT)(mask), 0)\r
+\r
+#define ListView_SetColumn(hwnd, iCol, pcol) SendMessage((hwnd), LVM_SETCOLUMN, (WPARAM)(int)(iCol), (LPARAM)(const LV_COLUMN *)(pcol))\r
+\r
+#define ListView_SetColumnWidth(hwnd, iCol, cx) SendMessage((hwnd), LVM_SETCOLUMNWIDTH, (WPARAM)(int)(iCol), MAKELPARAM((cx), 0))\r
+\r
+\r
+#define ListView_SetImageList(hwnd, himl, iImageList) SendMessage(hwnd, LVM_SETIMAGELIST, (WPARAM)(iImageList), (LPARAM)(UINT)(HIMAGELIST)(himl))\r
+\r
+#define ListView_SetItem(hwnd, pitem) SendMessage(hwnd, LVM_SETITEM, 0, (LPARAM)(const LV_ITEM *)pitem)\r
+\r
+#define ListView_SetItemCount(hwndLV, cItems) SendMessage((hwndLV), LVM_SETITEMCOUNT, (WPARAM)cItems, 0)\r
+\r
+#define ListView_SetItemPosition(hwndLV, i, x, y) SendMessage(hwndLV, LVM_SETITEMPOSITION, (WPARAM)(int)(i), MAKELPARAM((x), (y)))\r
+\r
+#define ListView_SetItemPosition32(hwndLV, i, x, y) { POINT ptNewPos = {x,y}; SendMessage((hwndLV), LVM_SETITEMPOSITION32, (WPARAM)(int)(i), (LPARAM)&ptNewPos); }\r
+\r
+#define ListView_SetItemState(hwndLV, i, data, mask) { LV_ITEM _gnu_lvi; _gnu_lvi.stateMask = mask; _gnu_lvi.state = data; SendMessage((hwndLV), LVM_SETITEMSTATE, (WPARAM)i, (LPARAM)(LV_ITEM *)&_gnu_lvi);}\r
+\r
+#define ListView_SetItemText(hwndLV, i, iSubItem_, pszText_) { LV_ITEM _gnu_lvi; _gnu_lvi.iSubItem = iSubItem_; _gnu_lvi.pszText = pszText_; SendMessage((hwndLV), LVM_SETITEMTEXT, (WPARAM)i, (LPARAM)(LV_ITEM *)&_gnu_lvi);}\r
+\r
+#define ListView_SetTextBkColor(hwnd, clrTextBk) SendMessage((hwnd), LVM_SETTEXTBKCOLOR, 0, (LPARAM)(COLORREF)(clrTextBk))\r
+\r
+#define ListView_SetTextColor(hwnd, clrText) SendMessage((hwnd), LVM_SETTEXTCOLOR, 0, (LPARAM)(COLORREF)(clrText))\r
+\r
+#define ListView_SortItems(hwndLV, _pfnCompare, _lPrm) SendMessage((hwndLV), LVM_SORTITEMS, (WPARAM)(LPARAM)_lPrm, (LPARAM)(PFNLVCOMPARE)_pfnCompare)\r
+\r
+#define ListView_Update(hwndLV, i) SendMessage((hwndLV), LVM_UPDATE, (WPARAM)i, 0)\r
+\r
+/* Tree View */\r
+#define TreeView_InsertItem(hwnd, lpis) SendMessage((hwnd), TVM_INSERTITEM, 0, (LPARAM)(LPTV_INSERTSTRUCT)(lpis))\r
+\r
+#define TreeView_DeleteItem(hwnd, hitem) SendMessage((hwnd), TVM_DELETEITEM, 0, (LPARAM)(HTREEITEM)(hitem))\r
+\r
+#define TreeView_DeleteAllItems(hwnd) SendMessage((hwnd), TVM_DELETEITEM, 0, (LPARAM)TVI_ROOT)\r
+\r
+#define TreeView_Expand(hwnd, hitem, code) SendMessage((hwnd), TVM_EXPAND, (WPARAM)code, (LPARAM)(HTREEITEM)(hitem))\r
+\r
+#define TreeView_GetItemRect(hwnd, hitem, prc, code) SendMessage((hwnd), TVM_GETITEMRECT, (WPARAM)(code), (LPARAM)(RECT *)(prc)))\r
+\r
+#define TreeView_GetCount(hwnd) SendMessage((hwnd), TVM_GETCOUNT, 0, 0)\r
+\r
+#define TreeView_GetIndent(hwnd) SendMessage((hwnd), TVM_GETINDENT, 0, 0)\r
+\r
+#define TreeView_SetIndent(hwnd, indent) SendMessage((hwnd), TVM_SETINDENT, (WPARAM)indent, 0)\r
+\r
+#define TreeView_GetImageList(hwnd, iImage) SendMessage((hwnd), TVM_GETIMAGELIST, iImage, 0)\r
+\r
+#define TreeView_SetImageList(hwnd, himl, iImage) SendMessage((hwnd), TVM_SETIMAGELIST, iImage, (LPARAM)(UINT)(HIMAGELIST)(himl))\r
+\r
+#define TreeView_GetNextItem(hwnd, hitem, code) SendMessage((hwnd), TVM_GETNEXTITEM, (WPARAM)code, (LPARAM)(HTREEITEM)(hitem))\r
+\r
+#define TreeView_GetChild(hwnd, hitem) TreeView_GetNextItem(hwnd, hitem, TVGN_CHILD)\r
+\r
+#define TreeView_GetNextSibling(hwnd, hitem) TreeView_GetNextItem(hwnd, hitem, TVGN_NEXT)\r
+\r
+#define TreeView_GetPrevSibling(hwnd, hitem) TreeView_GetNextItem(hwnd, hitem, TVGN_PREVIOUS)\r
+\r
+#define TreeView_GetParent(hwnd, hitem) TreeView_GetNextItem(hwnd, hitem, TVGN_PARENT)\r
+\r
+#define TreeView_GetFirstVisible(hwnd) TreeView_GetNextItem(hwnd, NULL, TVGN_FIRSTVISIBLE)\r
+\r
+#define TreeView_GetNextVisible(hwnd, hitem) TreeView_GetNextItem(hwnd, hitem, TVGN_NEXTVISIBLE)\r
+\r
+#define TreeView_GetPrevVisible(hwnd, hitem) TreeView_GetNextItem(hwnd, hitem, TVGN_PREVIOUSVISIBLE)\r
+\r
+#define TreeView_GetSelection(hwnd) TreeView_GetNextItem(hwnd, NULL, TVGN_CARET)\r
+\r
+#define TreeView_GetDropHilight(hwnd) TreeView_GetNextItem(hwnd, NULL, TVGN_DROPHILITE)\r
+\r
+#define TreeView_GetRoot(hwnd) TreeView_GetNextItem(hwnd, NULL, TVGN_ROOT)\r
+\r
+#define TreeView_Select(hwnd, hitem, code) SendMessage((hwnd), TVM_SELECTITEM, (WPARAM)code, (LPARAM)(HTREEITEM)(hitem))\r
+\r
+\r
+#define TreeView_SelectItem(hwnd, hitem) TreeView_Select(hwnd, hitem, TVGN_CARET)\r
+\r
+#define TreeView_SelectDropTarget(hwnd, hitem) TreeView_Select(hwnd, hitem, TVGN_DROPHILITE)\r
+\r
+#define TreeView_SelectSetFirstVisible(hwnd, hitem) TreeView_Select(hwnd, hitem, TVGN_FIRSTVISIBLE)\r
+\r
+#define TreeView_GetItem(hwnd, pitem) SendMessage((hwnd), TVM_GETITEM, 0, (LPARAM)(TV_ITEM *)(pitem))\r
+\r
+#define TreeView_SetItem(hwnd, pitem) SendMessage((hwnd), TVM_SETITEM, 0, (LPARAM)(const TV_ITEM *)(pitem))\r
+\r
+#define TreeView_EditLabel(hwnd, hitem) SendMessage((hwnd), TVM_EDITLABEL, 0, (LPARAM)(HTREEITEM)(hitem))\r
+\r
+#define TreeView_GetEditControl(hwnd) SendMessage((hwnd), TVM_GETEDITCONTROL, 0, 0)\r
+\r
+#define TreeView_GetVisibleCount(hwnd) SendMessage((hwnd), TVM_GETVISIBLECOUNT, 0, 0)\r
+\r
+#define TreeView_HitTest(hwnd, lpht) SendMessage((hwnd), TVM_HITTEST, 0, (LPARAM)(LPTV_HITTESTINFO)(lpht))\r
+\r
+#define TreeView_CreateDragImage(hwnd, hitem) SendMessage((hwnd), TVM_CREATEDRAGIMAGE, 0, (LPARAM)(HTREEITEM)(hitem))\r
+\r
+#define TreeView_SortChildren(hwnd, hitem, recurse) SendMessage((hwnd), TVM_SORTCHILDREN, (WPARAM)recurse, (LPARAM)(HTREEITEM)(hitem))\r
+\r
+#define TreeView_EnsureVisible(hwnd, hitem) SendMessage((hwnd), TVM_ENSUREVISIBLE, 0, (LPARAM)(HTREEITEM)(hitem))\r
+\r
+#define TreeView_SortChildrenCB(hwnd, psort, recurse) SendMessage((hwnd), TVM_SORTCHILDRENCB, (WPARAM)recurse, (LPARAM)(LPTV_SORTCB)(psort))\r
+\r
+#define TreeView_EndEditLabelNow(hwnd, fCancel) SendMessage((hwnd), TVM_ENDEDITLABELNOW, (WPARAM)fCancel, 0)\r
+\r
+#define TreeView_GetISearchString(hwndTV, lpsz) SendMessage((hwndTV), TVM_GETISEARCHSTRING, 0, (LPARAM)(LPTSTR)lpsz)\r
+\r
+\r
+/* Tab control */\r
+#define TabCtrl_GetImageList(hwnd) SendMessage((hwnd), TCM_GETIMAGELIST, 0, 0)\r
+\r
+#define TabCtrl_SetImageList(hwnd, himl) SendMessage((hwnd), TCM_SETIMAGELIST, 0, (LPARAM)(UINT)(HIMAGELIST)(himl))\r
+\r
+#define TabCtrl_GetItemCount(hwnd) SendMessage((hwnd), TCM_GETITEMCOUNT, 0, 0)\r
+\r
+#define TabCtrl_GetItem(hwnd, iItem, pitem) SendMessage((hwnd), TCM_GETITEM, (WPARAM)(int)iItem, (LPARAM)(TC_ITEM *)(pitem))\r
+\r
+#define TabCtrl_SetItem(hwnd, iItem, pitem) SendMessage((hwnd), TCM_SETITEM, (WPARAM)(int)iItem, (LPARAM)(TC_ITEM *)(pitem))\r
+\r
+#define TabCtrl_InsertItem(hwnd, iItem, pitem) SendMessage((hwnd), TCM_INSERTITEM, (WPARAM)(int)iItem, (LPARAM)(const TC_ITEM *)(pitem))\r
+\r
+#define TabCtrl_DeleteItem(hwnd, i) SendMessage((hwnd), TCM_DELETEITEM, (WPARAM)(int)(i), 0)\r
+\r
+#define TabCtrl_DeleteAllItems(hwnd) SendMessage((hwnd), TCM_DELETEALLITEMS, 0, 0)\r
+\r
+#define TabCtrl_GetItemRect(hwnd, i, prc) SendMessage((hwnd), TCM_GETITEMRECT, (WPARAM)(int)(i), (LPARAM)(RECT *)(prc))\r
+\r
+#define TabCtrl_GetCurSel(hwnd) SendMessage((hwnd), TCM_GETCURSEL, 0, 0)\r
+\r
+#define TabCtrl_SetCurSel(hwnd, i) SendMessage((hwnd), TCM_SETCURSEL, (WPARAM)i, 0)\r
+\r
+#define TabCtrl_HitTest(hwndTC, pinfo) SendMessage((hwndTC), TCM_HITTEST, 0, (LPARAM)(TC_HITTESTINFO *)(pinfo))\r
+\r
+#define TabCtrl_SetItemExtra(hwndTC, cb) SendMessage((hwndTC), TCM_SETITEMEXTRA, (WPARAM)(cb), 0)\r
+\r
+#define TabCtrl_AdjustRect(hwnd, bLarger, prc) SendMessage(hwnd, TCM_ADJUSTRECT, (WPARAM)(WINBOOL)bLarger, (LPARAM)(RECT *)prc)\r
+\r
+#define TabCtrl_SetItemSize(hwnd, x, y) SendMessage((hwnd), TCM_SETITEMSIZE, 0, MAKELPARAM(x,y))\r
+\r
+#define TabCtrl_RemoveImage(hwnd, i) SendMessage((hwnd), TCM_REMOVEIMAGE, i, 0)\r
+\r
+#define TabCtrl_SetPadding(hwnd, cx, cy) SendMessage((hwnd), TCM_SETPADDING, 0, MAKELPARAM(cx, cy))\r
+\r
+#define TabCtrl_GetRowCount(hwnd) SendMessage((hwnd), TCM_GETROWCOUNT, 0, 0)\r
+\r
+#define TabCtrl_GetToolTips(hwnd) SendMessage((hwnd), TCM_GETTOOLTIPS, 0, 0)\r
+\r
+#define TabCtrl_SetToolTips(hwnd, hwndTT) SendMessage((hwnd), TCM_SETTOOLTIPS, (WPARAM)hwndTT, 0)\r
+\r
+#define TabCtrl_GetCurFocus(hwnd) SendMessage((hwnd), TCM_GETCURFOCUS, 0, 0)\r
+\r
+#define TabCtrl_SetCurFocus(hwnd, i) SendMessage((hwnd),TCM_SETCURFOCUS, i, 0)\r
+\r
+#define CommDlg_OpenSave_GetSpecA(_hdlg, _psz, _cbmax) SNDMSG(_hdlg, CDM_GETSPEC, (WPARAM)_cbmax, (LPARAM)(LPSTR)_psz)\r
+\r
+#define CommDlg_OpenSave_GetSpecW(_hdlg, _psz, _cbmax) SNDMSG(_hdlg, CDM_GETSPEC, (WPARAM)_cbmax, (LPARAM)(LPWSTR)_psz)\r
+\r
+#ifdef UNICODE\r
+#define CommDlg_OpenSave_GetSpec CommDlg_OpenSave_GetSpecW\r
+#else\r
+#define CommDlg_OpenSave_GetSpec CommDlg_OpenSave_GetSpecA\r
+#endif /* !UNICODE */\r
+\r
+#define CommDlg_OpenSave_GetFilePathA(_hdlg, _psz, _cbmax) SNDMSG(_hdlg, CDM_GETFILEPATH, (WPARAM)_cbmax, (LPARAM)(LPSTR)_psz)\r
+\r
+#define CommDlg_OpenSave_GetFilePathW(_hdlg, _psz, _cbmax) SNDMSG(_hdlg, CDM_GETFILEPATH, (WPARAM)_cbmax, (LPARAM)(LPWSTR)_psz)\r
+\r
+#ifdef UNICODE\r
+#define CommDlg_OpenSave_GetFilePath CommDlg_OpenSave_GetFilePathW\r
+#else\r
+#define CommDlg_OpenSave_GetFilePath CommDlg_OpenSave_GetFilePathA\r
+#endif /* !UNICODE */\r
+\r
+#define CommDlg_OpenSave_GetFolderPathA(_hdlg, _psz, _cbmax) SNDMSG(_hdlg, CDM_GETFOLDERPATH, (WPARAM)_cbmax, (LPARAM)(LPSTR)_psz)\r
+\r
+#define CommDlg_OpenSave_GetFolderPathW(_hdlg, _psz, _cbmax) SNDMSG(_hdlg, CDM_GETFOLDERPATH, (WPARAM)_cbmax, (LPARAM)(LPWSTR)_psz)\r
+\r
+#ifdef UNICODE\r
+#define CommDlg_OpenSave_GetFolderPath CommDlg_OpenSave_GetFolderPathW\r
+#else\r
+#define CommDlg_OpenSave_GetFolderPath CommDlg_OpenSave_GetFolderPathA\r
+#endif /* !UNICODE */\r
+\r
+#define CommDlg_OpenSave_GetFolderIDList(_hdlg, _pidl, _cbmax) SNDMSG(_hdlg, CDM_GETFOLDERIDLIST, (WPARAM)_cbmax, (LPARAM)(LPVOID)_pidl)\r
+\r
+#define CommDlg_OpenSave_SetControlText(_hdlg, _id, _text) SNDMSG(_hdlg, CDM_SETCONTROLTEXT, (WPARAM)_id, (LPARAM)(LPSTR)_text)\r
+\r
+#define CommDlg_OpenSave_HideControl(_hdlg, _id) SNDMSG(_hdlg, CDM_HIDECONTROL, (WPARAM)_id, 0)\r
+\r
+#define CommDlg_OpenSave_SetDefExt(_hdlg, _pszext) SNDMSG(_hdlg, CDM_SETDEFEXT, 0, (LPARAM)(LPSTR)_pszext)\r
+\r
+LONG\r
+STDCALL\r
+RegCloseKey (\r
+ HKEY hKey\r
+ );\r
+\r
+LONG\r
+STDCALL\r
+RegSetKeySecurity (\r
+ HKEY hKey,\r
+ SECURITY_INFORMATION SecurityInformation,\r
+ PSECURITY_DESCRIPTOR pSecurityDescriptor\r
+ );\r
+\r
+LONG\r
+STDCALL\r
+RegFlushKey (\r
+ HKEY hKey\r
+ );\r
+\r
+LONG\r
+STDCALL\r
+RegGetKeySecurity (\r
+ HKEY hKey,\r
+ SECURITY_INFORMATION SecurityInformation,\r
+ PSECURITY_DESCRIPTOR pSecurityDescriptor,\r
+ LPDWORD lpcbSecurityDescriptor\r
+ );\r
+\r
+LONG\r
+STDCALL\r
+RegNotifyChangeKeyValue (\r
+ HKEY hKey,\r
+ WINBOOL bWatchSubtree,\r
+ DWORD dwNotifyFilter,\r
+ HANDLE hEvent,\r
+ WINBOOL fAsynchronus\r
+ );\r
+\r
+WINBOOL\r
+STDCALL\r
+IsValidCodePage(\r
+ UINT CodePage);\r
+\r
+\r
+UINT\r
+STDCALL\r
+GetACP(void);\r
+\r
+\r
+UINT\r
+STDCALL\r
+GetOEMCP(void);\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+GetCPInfo(UINT, LPCPINFO);\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+IsDBCSLeadByte(\r
+ BYTE TestChar);\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+IsDBCSLeadByteEx(\r
+ UINT CodePage,\r
+ BYTE TestChar);\r
+\r
+\r
+int\r
+STDCALL\r
+MultiByteToWideChar(\r
+ UINT CodePage,\r
+ DWORD dwFlags,\r
+ LPCSTR lpMultiByteStr,\r
+ int cchMultiByte,\r
+ LPWSTR lpWideCharStr,\r
+ int cchWideChar);\r
+\r
+\r
+int\r
+STDCALL\r
+WideCharToMultiByte(\r
+ UINT CodePage,\r
+ DWORD dwFlags,\r
+ LPCWSTR lpWideCharStr,\r
+ int cchWideChar,\r
+ LPSTR lpMultiByteStr,\r
+ int cchMultiByte,\r
+ LPCSTR lpDefaultChar,\r
+ LPBOOL lpUsedDefaultChar);\r
+\r
+WINBOOL\r
+STDCALL\r
+IsValidLocale(\r
+ LCID Locale,\r
+ DWORD dwFlags);\r
+\r
+\r
+LCID\r
+STDCALL\r
+ConvertDefaultLocale(\r
+ LCID Locale);\r
+\r
+\r
+LCID\r
+STDCALL\r
+GetThreadLocale(void);\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+SetThreadLocale(\r
+ LCID Locale\r
+ );\r
+\r
+\r
+LANGID\r
+STDCALL\r
+GetSystemDefaultLangID(void);\r
+\r
+\r
+LANGID\r
+STDCALL\r
+GetUserDefaultLangID(void);\r
+\r
+\r
+LCID\r
+STDCALL\r
+GetSystemDefaultLCID(void);\r
+\r
+\r
+LCID\r
+STDCALL\r
+GetUserDefaultLCID(void);\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+ReadConsoleOutputAttribute(\r
+ HANDLE hConsoleOutput,\r
+ LPWORD lpAttribute,\r
+ DWORD nLength,\r
+ COORD dwReadCoord,\r
+ LPDWORD lpNumberOfAttrsRead\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+WriteConsoleOutputAttribute(\r
+ HANDLE hConsoleOutput,\r
+ CONST WORD *lpAttribute,\r
+ DWORD nLength,\r
+ COORD dwWriteCoord,\r
+ LPDWORD lpNumberOfAttrsWritten\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+FillConsoleOutputAttribute(\r
+ HANDLE hConsoleOutput,\r
+ WORD wAttribute,\r
+ DWORD nLength,\r
+ COORD dwWriteCoord,\r
+ LPDWORD lpNumberOfAttrsWritten\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+GetConsoleMode(\r
+ HANDLE hConsoleHandle,\r
+ LPDWORD lpMode\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+GetNumberOfConsoleInputEvents(\r
+ HANDLE hConsoleInput,\r
+ LPDWORD lpNumberOfEvents\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+GetConsoleScreenBufferInfo(\r
+ HANDLE hConsoleOutput,\r
+ PCONSOLE_SCREEN_BUFFER_INFO lpConsoleScreenBufferInfo\r
+ );\r
+\r
+\r
+COORD\r
+STDCALL\r
+GetLargestConsoleWindowSize(\r
+ HANDLE hConsoleOutput\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+GetConsoleCursorInfo(\r
+ HANDLE hConsoleOutput,\r
+ PCONSOLE_CURSOR_INFO lpConsoleCursorInfo\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+GetNumberOfConsoleMouseButtons(\r
+ LPDWORD lpNumberOfMouseButtons\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+SetConsoleMode(\r
+ HANDLE hConsoleHandle,\r
+ DWORD dwMode\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+SetConsoleActiveScreenBuffer(\r
+ HANDLE hConsoleOutput\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+FlushConsoleInputBuffer(\r
+ HANDLE hConsoleInput\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+SetConsoleScreenBufferSize(\r
+ HANDLE hConsoleOutput,\r
+ COORD dwSize\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+SetConsoleCursorPosition(\r
+ HANDLE hConsoleOutput,\r
+ COORD dwCursorPosition\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+SetConsoleCursorInfo(\r
+ HANDLE hConsoleOutput,\r
+ CONST CONSOLE_CURSOR_INFO *lpConsoleCursorInfo\r
+ );\r
+\r
+WINBOOL\r
+STDCALL\r
+SetConsoleWindowInfo(\r
+ HANDLE hConsoleOutput,\r
+ WINBOOL bAbsolute,\r
+ CONST SMALL_RECT *lpConsoleWindow\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+SetConsoleTextAttribute(\r
+ HANDLE hConsoleOutput,\r
+ WORD wAttributes\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+SetConsoleCtrlHandler(\r
+ PHANDLER_ROUTINE HandlerRoutine,\r
+ WINBOOL Add\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+GenerateConsoleCtrlEvent(\r
+ DWORD dwCtrlEvent,\r
+ DWORD dwProcessGroupId\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+AllocConsole( VOID );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+FreeConsole( VOID );\r
+\r
+\r
+\r
+HANDLE\r
+STDCALL\r
+CreateConsoleScreenBuffer(\r
+ DWORD dwDesiredAccess,\r
+ DWORD dwShareMode,\r
+ CONST SECURITY_ATTRIBUTES *lpSecurityAttributes,\r
+ DWORD dwFlags,\r
+ LPVOID lpScreenBufferData\r
+ );\r
+\r
+\r
+UINT\r
+STDCALL\r
+GetConsoleCP( VOID );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+SetConsoleCP(\r
+ UINT wCodePageID\r
+ );\r
+\r
+\r
+UINT\r
+STDCALL\r
+GetConsoleOutputCP( VOID );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+SetConsoleOutputCP(\r
+ UINT wCodePageID\r
+ );\r
+\r
+DWORD STDCALL\r
+WNetConnectionDialog(\r
+ HWND hwnd,\r
+ DWORD dwType\r
+ );\r
+\r
+DWORD STDCALL\r
+WNetDisconnectDialog(\r
+ HWND hwnd,\r
+ DWORD dwType\r
+ );\r
+\r
+DWORD STDCALL\r
+WNetCloseEnum(\r
+ HANDLE hEnum\r
+ );\r
+\r
+WINBOOL\r
+STDCALL\r
+CloseServiceHandle(\r
+ SC_HANDLE hSCObject\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+ControlService(\r
+ SC_HANDLE hService,\r
+ DWORD dwControl,\r
+ LPSERVICE_STATUS lpServiceStatus\r
+ );\r
+\r
+WINBOOL\r
+STDCALL\r
+DeleteService(\r
+ SC_HANDLE hService\r
+ );\r
+\r
+SC_LOCK\r
+STDCALL\r
+LockServiceDatabase(\r
+ SC_HANDLE hSCManager\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+NotifyBootConfigStatus(\r
+ WINBOOL BootAcceptable\r
+ );\r
+\r
+WINBOOL\r
+STDCALL\r
+QueryServiceObjectSecurity(\r
+ SC_HANDLE hService,\r
+ SECURITY_INFORMATION dwSecurityInformation,\r
+ PSECURITY_DESCRIPTOR lpSecurityDescriptor,\r
+ DWORD cbBufSize,\r
+ LPDWORD pcbBytesNeeded\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+QueryServiceStatus(\r
+ SC_HANDLE hService,\r
+ LPSERVICE_STATUS lpServiceStatus\r
+ );\r
+\r
+WINBOOL\r
+STDCALL\r
+SetServiceObjectSecurity(\r
+ SC_HANDLE hService,\r
+ SECURITY_INFORMATION dwSecurityInformation,\r
+ PSECURITY_DESCRIPTOR lpSecurityDescriptor\r
+ );\r
+\r
+\r
+WINBOOL\r
+STDCALL\r
+SetServiceStatus(\r
+ SERVICE_STATUS_HANDLE hServiceStatus,\r
+ LPSERVICE_STATUS lpServiceStatus\r
+ );\r
+\r
+WINBOOL\r
+STDCALL\r
+UnlockServiceDatabase(\r
+ SC_LOCK ScLock\r
+ );\r
+\r
+/* Extensions to OpenGL */\r
+\r
+int STDCALL\r
+ChoosePixelFormat(HDC, CONST PIXELFORMATDESCRIPTOR *); \r
+\r
+int STDCALL\r
+DescribePixelFormat(HDC, int, UINT, LPPIXELFORMATDESCRIPTOR);\r
+\r
+UINT STDCALL\r
+GetEnhMetaFilePixelFormat(HENHMETAFILE, DWORD,\r
+ CONST PIXELFORMATDESCRIPTOR *);\r
+\r
+int STDCALL\r
+GetPixelFormat(HDC);\r
+\r
+WINBOOL STDCALL\r
+SetPixelFormat(HDC, int, CONST PIXELFORMATDESCRIPTOR *);\r
+\r
+WINBOOL STDCALL\r
+SwapBuffers(HDC);\r
+\r
+HGLRC STDCALL\r
+wglCreateContext(HDC);\r
+\r
+HGLRC STDCALL\r
+wglCreateLayerContext(HDC, int);\r
+\r
+WINBOOL STDCALL\r
+wglCopyContext(HGLRC, HGLRC, UINT);\r
+\r
+WINBOOL STDCALL\r
+wglDeleteContext(HGLRC);\r
+\r
+WINBOOL STDCALL\r
+wglDescribeLayerPlane(HDC, int, int, UINT, LPLAYERPLANEDESCRIPTOR);\r
+\r
+HGLRC STDCALL\r
+wglGetCurrentContext(VOID);\r
+\r
+HDC STDCALL\r
+wglGetCurrentDC(VOID);\r
+\r
+int STDCALL\r
+wglGetLayerPaletteEntries(HDC, int, int, int, CONST COLORREF *);\r
+\r
+PROC STDCALL\r
+wglGetProcAddress(LPCSTR);\r
+\r
+WINBOOL STDCALL\r
+wglMakeCurrent(HDC, HGLRC);\r
+\r
+WINBOOL STDCALL\r
+wglRealizeLayerPalette(HDC, int, WINBOOL);\r
+\r
+int STDCALL\r
+wglSetLayerPaletteEntries(HDC, int, int, int, CONST COLORREF *);\r
+\r
+WINBOOL STDCALL\r
+wglShareLists(HGLRC, HGLRC);\r
+\r
+WINBOOL STDCALL\r
+wglSwapLayerBuffers(HDC, UINT);\r
+\r
+/*\r
+ Why are these different between ANSI and UNICODE?\r
+ There doesn't seem to be any difference.\r
+ */\r
+\r
+#ifdef UNICODE\r
+#define wglUseFontBitmaps wglUseFontBitmapsW\r
+#define wglUseFontOutlines wglUseFontOutlinesW\r
+#else\r
+#define wglUseFontBitmaps wglUseFontBitmapsA\r
+#define wglUseFontOutlines wglUseFontOutlinesA\r
+#endif /* !UNICODE */\r
+\r
+/* ------------------------------------- */\r
+/* From shellapi.h in old Cygnus headers */\r
+\r
+WINBOOL WINAPI\r
+DragQueryPoint (HDROP, LPPOINT);\r
+\r
+void WINAPI\r
+DragFinish (HDROP);\r
+\r
+void WINAPI\r
+DragAcceptFiles (HWND, WINBOOL);\r
+\r
+HICON WINAPI\r
+DuplicateIcon (HINSTANCE, HICON);\r
+\r
+/* end of stuff from shellapi.h in old Cygnus headers */\r
+/* -------------------------------------------------- */\r
+/* From ddeml.h in old Cygnus headers */\r
+\r
+HCONV WINAPI DdeConnect (DWORD, HSZ, HSZ, CONVCONTEXT *);\r
+WINBOOL WINAPI DdeDisconnect (HCONV);\r
+WINBOOL WINAPI DdeFreeDataHandle (HDDEDATA);\r
+DWORD WINAPI DdeGetData (HDDEDATA, BYTE *, DWORD, DWORD);\r
+UINT WINAPI DdeGetLastError (DWORD);\r
+HDDEDATA WINAPI DdeNameService (DWORD, HSZ, HSZ, UINT);\r
+WINBOOL WINAPI DdePostAdvise (DWORD, HSZ, HSZ);\r
+HCONV WINAPI DdeReconnect (HCONV);\r
+WINBOOL WINAPI DdeUninitialize (DWORD);\r
+int WINAPI DdeCmpStringHandles (HSZ, HSZ);\r
+HDDEDATA WINAPI DdeCreateDataHandle (DWORD, LPBYTE, DWORD, DWORD, HSZ,\r
+ UINT, UINT);\r
+\r
+/* end of stuff from ddeml.h in old Cygnus headers */\r
+/* ----------------------------------------------- */\r
+\r
+DWORD STDCALL NetUserEnum (LPWSTR, DWORD, DWORD, LPBYTE*, DWORD, LPDWORD,\r
+ LPDWORD, LPDWORD);\r
+DWORD STDCALL NetApiBufferFree (LPVOID);\r
+DWORD STDCALL NetUserGetInfo (LPWSTR, LPWSTR, DWORD, LPBYTE);\r
+DWORD STDCALL NetGetDCName (LPWSTR, LPWSTR, LPBYTE*);\r
+DWORD STDCALL NetGroupEnum (LPWSTR, DWORD, LPBYTE*, DWORD, LPDWORD,\r
+ LPDWORD, LPDWORD);\r
+DWORD STDCALL NetLocalGroupEnum (LPWSTR, DWORD, LPBYTE*, DWORD, LPDWORD,\r
+ LPDWORD, LPDWORD);\r
+\r
+void WINAPI\r
+SHAddToRecentDocs (UINT, LPCVOID);\r
+\r
+LPITEMIDLIST WINAPI\r
+SHBrowseForFolder (LPBROWSEINFO);\r
+\r
+void WINAPI\r
+SHChangeNotify (LONG, UINT, LPCVOID, LPCVOID);\r
+\r
+int WINAPI\r
+SHFileOperation (LPSHFILEOPSTRUCT);\r
+\r
+void WINAPI\r
+SHFreeNameMappings (HANDLE);\r
+\r
+/* Define when SHELLFOLDER is defined.\r
+HRESULT WINAPI\r
+SHGetDataFromIDList (LPSHELLFOLDER, LPCITEMIDLIST, int, PVOID, int);\r
+\r
+HRESULT WINAPI\r
+SHGetDesktopFolder (LPSHELLFOLDER);\r
+*/\r
+\r
+DWORD WINAPI\r
+SHGetFileInfo (LPCTSTR, DWORD, SHFILEINFO FAR *, UINT, UINT);\r
+\r
+/* Define when IUnknown is defined.\r
+HRESULT WINAPI\r
+SHGetInstanceExplorer (IUnknown **);\r
+*/\r
+\r
+/* Define when MALLOC is defined.\r
+HRESULT WINAPI\r
+SHGetMalloc (LPMALLOC *);\r
+*/\r
+\r
+WINBOOL WINAPI\r
+SHGetPathFromIDList (LPCITEMIDLIST, LPTSTR);\r
+\r
+HRESULT WINAPI\r
+SHGetSpecialFolderLocation (HWND, int, LPITEMIDLIST *);\r
+\r
+/* Define when REFCLSID is defined.\r
+HRESULT WINAPI\r
+SHLoadInProc (REFCLSID);\r
+*/\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif /* __cplusplus */\r
+\r
+#endif /* _GNU_H_WINDOWS32_FUNCTIONS */\r
--- /dev/null
+#ifndef _I386_BITOPS_H
+#define _I386_BITOPS_H
+
+/*
+ * Copyright 1992, Linus Torvalds.
+ */
+/*
+ * Reused for the ReactOS kernel by David Welch (1998)
+ */
+
+/*
+ * These have to be done with inline assembly: that way the bit-setting
+ * is guaranteed to be atomic. All bit operations return 0 if the bit
+ * was cleared before the operation and != 0 if it was not.
+ *
+ * bit 0 is the LSB of addr; bit 32 is the LSB of (addr+1).
+ */
+
+#ifdef __SMP__
+#define LOCK_PREFIX "lock ; "
+#define SMPVOL volatile
+#else
+#define LOCK_PREFIX ""
+#define SMPVOL
+#endif
+
+/*
+ * Some hacks to defeat gcc over-optimizations..
+ */
+struct __dummy { unsigned long a[100]; };
+#define ADDR (*(struct __dummy *) addr)
+#define CONST_ADDR (*(const struct __dummy *) addr)
+
+extern __inline__ int set_bit(int nr, SMPVOL void * addr)
+{
+ int oldbit;
+
+ __asm__ __volatile__(LOCK_PREFIX
+ "btsl %2,%1\n\tsbbl %0,%0"
+ :"=r" (oldbit),"=m" (ADDR)
+ :"ir" (nr));
+ return oldbit;
+}
+
+extern __inline__ int clear_bit(int nr, SMPVOL void * addr)
+{
+ int oldbit;
+
+ __asm__ __volatile__(LOCK_PREFIX
+ "btrl %2,%1\n\tsbbl %0,%0"
+ :"=r" (oldbit),"=m" (ADDR)
+ :"ir" (nr));
+ return oldbit;
+}
+
+extern __inline__ int change_bit(int nr, SMPVOL void * addr)
+{
+ int oldbit;
+
+ __asm__ __volatile__(LOCK_PREFIX
+ "btcl %2,%1\n\tsbbl %0,%0"
+ :"=r" (oldbit),"=m" (ADDR)
+ :"ir" (nr));
+ return oldbit;
+}
+
+/*
+ * This routine doesn't need to be atomic.
+ */
+extern __inline__ int test_bit(int nr, const SMPVOL void * addr)
+{
+ return ((1UL << (nr & 31)) & (((const unsigned int *) addr)[nr >> 5])) != 0;
+}
+
+/*
+ * Find-bit routines..
+ */
+extern __inline__ int find_first_zero_bit(void * addr, unsigned size)
+{
+ int res;
+
+ if (!size)
+ return 0;
+ __asm__("cld\n\t"
+ "movl $-1,%%eax\n\t"
+ "xorl %%edx,%%edx\n\t"
+ "repe; scasl\n\t"
+ "je 1f\n\t"
+ "xorl -4(%%edi),%%eax\n\t"
+ "subl $4,%%edi\n\t"
+ "bsfl %%eax,%%edx\n"
+ "1:\tsubl %%ebx,%%edi\n\t"
+ "shll $3,%%edi\n\t"
+ "addl %%edi,%%edx"
+ :"=d" (res)
+ :"c" ((size + 31) >> 5), "D" (addr), "b" (addr)
+ :"ax", "cx", "di");
+ return res;
+}
+
+extern __inline__ int find_next_zero_bit (void * addr, int size, int offset)
+{
+ unsigned long * p = ((unsigned long *) addr) + (offset >> 5);
+ int set = 0, bit = offset & 31, res;
+
+ if (bit) {
+ /*
+ * Look for zero in first byte
+ */
+ __asm__("bsfl %1,%0\n\t"
+ "jne 1f\n\t"
+ "movl $32, %0\n"
+ "1:"
+ : "=r" (set)
+ : "r" (~(*p >> bit)));
+ if (set < (32 - bit))
+ return set + offset;
+ set = 32 - bit;
+ p++;
+ }
+ /*
+ * No zero yet, search remaining full bytes for a zero
+ */
+ res = find_first_zero_bit (p, size - 32 * (p - (unsigned long *) addr));
+ return (offset + set + res);
+}
+
+/*
+ * ffz = Find First Zero in word. Undefined if no zero exists,
+ * so code should check against ~0UL first..
+ */
+extern __inline__ unsigned long ffz(unsigned long word)
+{
+ __asm__("bsfl %1,%0"
+ :"=r" (word)
+ :"r" (~word));
+ return word;
+}
+
+#endif /* _I386_BITOPS_H */
--- /dev/null
+#ifndef _LINUX_CTYPE_H
+#define _LINUX_CTYPE_H
+
+#define _U 0x01 /* upper */
+#define _L 0x02 /* lower */
+#define _D 0x04 /* digit */
+#define _C 0x08 /* cntrl */
+#define _P 0x10 /* punct */
+#define _S 0x20 /* white space (space/lf/tab) */
+#define _X 0x40 /* hex digit */
+#define _SP 0x80 /* hard space (0x20) */
+
+extern unsigned char _ctype[];
+extern char _ctmp;
+
+#define isalnum(c) ((_ctype+1)[c]&(_U|_L|_D))
+#define isalpha(c) ((_ctype+1)[c]&(_U|_L))
+#define iscntrl(c) ((_ctype+1)[c]&(_C))
+#define isdigit(c) ((_ctype+1)[c]&(_D))
+#define isgraph(c) ((_ctype+1)[c]&(_P|_U|_L|_D))
+#define islower(c) ((_ctype+1)[c]&(_L))
+#define isprint(c) ((_ctype+1)[c]&(_P|_U|_L|_D|_SP))
+#define ispunct(c) ((_ctype+1)[c]&(_P))
+#define isspace(c) ((_ctype+1)[c]&(_S))
+#define isupper(c) ((_ctype+1)[c]&(_U))
+#define isxdigit(c) ((_ctype+1)[c]&(_D|_X))
+
+#define isascii(c) (((unsigned) c)<=0x7f)
+#define toascii(c) (((unsigned) c)&0x7f)
+
+#define tolower(c) (_ctmp=c,isupper(_ctmp)?_ctmp-('A'-'a'):_ctmp)
+#define toupper(c) (_ctmp=c,islower(_ctmp)?_ctmp-('a'-'A'):_ctmp)
+
+#endif
--- /dev/null
+/*\r
+ * COPYRIGHT: See COPYING in the top level directory\r
+ * PROJECT: ReactOS kernel\r
+ * FILE: include/internal/debug.h\r
+ * PURPOSE: Useful debugging macros\r
+ * PROGRAMMER: David Welch (welch@mcmail.com)\r
+ * UPDATE HISTORY: \r
+ * 28/05/98: Created\r
+ */\r
+\r
+/*\r
+ * NOTE: Define NDEBUG before including this header to disable debugging\r
+ * macros\r
+ */\r
+\r
+#ifndef __INTERNAL_DEBUG\r
+#define __INTERNAL_DEBUG\r
+\r
+\r
+#ifndef NDEBUG\r
+#define DPRINT(fmt,args...) do { printk("(%s:%d) ",__FILE__,__LINE__); printk(fmt,args); } while(0);\r
+//#define assert(x) if (!(x)) {printk("Assertion "#x" failed at %s:%d\n", __FILE__,__LINE__); (*((unsigned int *)0))=1; for (;;); }\r
+#define assert(x) if (!(x)) {printk("Assertion "#x" failed at %s:%d\n", __FILE__,__LINE__); for (;;); }\r
+#define CHECKPOINT printk("%s:%d\n",__FILE__,__LINE__)\r
+#else\r
+#define DPRINT(fmt,args...)\r
+#define assert(x)\r
+#define CHECKPOINT\r
+#endif /* NDEBUG */\r
+\r
+/*\r
+ * FUNCTION: Assert a maximum value for the current irql\r
+ * ARGUMENTS:\r
+ * x = Maximum irql\r
+ */\r
+#define ASSERT_IRQL(x) assert(KeGetCurrentIrql()<=(x))\r
+\r
+#define HBP_EXECUTE (0)\r
+#define HBP_WRITE (1)\r
+#define HBP_READWRITE (3)\r
+\r
+#define HBP_BYTE (0)\r
+#define HBP_WORD (1)\r
+#define HBP_DWORD (3)\r
+\r
+/*\r
+ * FUNCTION: Sets a hardware breakpoint\r
+ * ARGUMENTS:\r
+ * i = breakpoint to set (0 to 3)\r
+ * addr = linear address to break on\r
+ * type = Type of access to break on\r
+ * len = length of the variable to watch\r
+ * NOTES:\r
+ * The variable to watch must be aligned to its length (i.e. a dword\r
+ * breakpoint must be aligned to a dword boundary)\r
+ * \r
+ * A fatal exception will be generated on the access to the variable.\r
+ * It is (at the moment) only really useful for catching undefined\r
+ * pointers if you know the variable effected but not the buggy\r
+ * routine. \r
+ * \r
+ * FIXME: Extend to call out to kernel debugger on breakpoint\r
+ * Add support for I/O breakpoints\r
+ * REFERENCES: See the i386 programmer manual for more details\r
+ */ \r
+void set_breakpoint(unsigned int i, unsigned int addr, unsigned int type,\r
+ unsigned int len);\r
+\r
+\r
+#endif /* __INTERNAL_DEBUG */\r
--- /dev/null
+/* $Id: dma.h,v 1.1 1996/01/23 01:02:19 rosmgr Exp $
+ * linux/include/asm/dma.h: Defines for using and allocating dma channels.
+ * Written by Hennus Bergman, 1992.
+ * High DMA channel support & info by Hannu Savolainen
+ * and John Boyd, Nov. 1992.
+ */
+
+#ifndef _ASM_DMA_H
+#define _ASM_DMA_H
+
+#include "io.h" /* need byte IO */
+
+
+#ifdef HAVE_REALLY_SLOW_DMA_CONTROLLER
+#define dma_outb outb_p
+#else
+#define dma_outb outb
+#endif
+
+#define dma_inb inb
+
+/*
+ * NOTES about DMA transfers:
+ *
+ * controller 1: channels 0-3, byte operations, ports 00-1F
+ * controller 2: channels 4-7, word operations, ports C0-DF
+ *
+ * - ALL registers are 8 bits only, regardless of transfer size
+ * - channel 4 is not used - cascades 1 into 2.
+ * - channels 0-3 are byte - addresses/counts are for physical bytes
+ * - channels 5-7 are word - addresses/counts are for physical words
+ * - transfers must not cross physical 64K (0-3) or 128K (5-7) boundaries
+ * - transfer count loaded to registers is 1 less than actual count
+ * - controller 2 offsets are all even (2x offsets for controller 1)
+ * - page registers for 5-7 don't use data bit 0, represent 128K pages
+ * - page registers for 0-3 use bit 0, represent 64K pages
+ *
+ * DMA transfers are limited to the lower 16MB of _physical_ memory.
+ * Note that addresses loaded into registers must be _physical_ addresses,
+ * not logical addresses (which may differ if paging is active).
+ *
+ * Address mapping for channels 0-3:
+ *
+ * A23 ... A16 A15 ... A8 A7 ... A0 (Physical addresses)
+ * | ... | | ... | | ... |
+ * | ... | | ... | | ... |
+ * | ... | | ... | | ... |
+ * P7 ... P0 A7 ... A0 A7 ... A0
+ * | Page | Addr MSB | Addr LSB | (DMA registers)
+ *
+ * Address mapping for channels 5-7:
+ *
+ * A23 ... A17 A16 A15 ... A9 A8 A7 ... A1 A0 (Physical addresses)
+ * | ... | \ \ ... \ \ \ ... \ \
+ * | ... | \ \ ... \ \ \ ... \ (not used)
+ * | ... | \ \ ... \ \ \ ... \
+ * P7 ... P1 (0) A7 A6 ... A0 A7 A6 ... A0
+ * | Page | Addr MSB | Addr LSB | (DMA registers)
+ *
+ * Again, channels 5-7 transfer _physical_ words (16 bits), so addresses
+ * and counts _must_ be word-aligned (the lowest address bit is _ignored_ at
+ * the hardware level, so odd-byte transfers aren't possible).
+ *
+ * Transfer count (_not # bytes_) is limited to 64K, represented as actual
+ * count - 1 : 64K => 0xFFFF, 1 => 0x0000. Thus, count is always 1 or more,
+ * and up to 128K bytes may be transferred on channels 5-7 in one operation.
+ *
+ */
+
+#define MAX_DMA_CHANNELS 8
+
+/* The maximum address that we can perform a DMA transfer to on this platform */
+#define MAX_DMA_ADDRESS 0x1000000
+
+/* 8237 DMA controllers */
+#define IO_DMA1_BASE 0x00 /* 8 bit slave DMA, channels 0..3 */
+#define IO_DMA2_BASE 0xC0 /* 16 bit master DMA, ch 4(=slave input)..7 */
+
+/* DMA controller registers */
+#define DMA1_CMD_REG 0x08 /* command register (w) */
+#define DMA1_STAT_REG 0x08 /* status register (r) */
+#define DMA1_REQ_REG 0x09 /* request register (w) */
+#define DMA1_MASK_REG 0x0A /* single-channel mask (w) */
+#define DMA1_MODE_REG 0x0B /* mode register (w) */
+#define DMA1_CLEAR_FF_REG 0x0C /* clear pointer flip-flop (w) */
+#define DMA1_TEMP_REG 0x0D /* Temporary Register (r) */
+#define DMA1_RESET_REG 0x0D /* Master Clear (w) */
+#define DMA1_CLR_MASK_REG 0x0E /* Clear Mask */
+#define DMA1_MASK_ALL_REG 0x0F /* all-channels mask (w) */
+
+#define DMA2_CMD_REG 0xD0 /* command register (w) */
+#define DMA2_STAT_REG 0xD0 /* status register (r) */
+#define DMA2_REQ_REG 0xD2 /* request register (w) */
+#define DMA2_MASK_REG 0xD4 /* single-channel mask (w) */
+#define DMA2_MODE_REG 0xD6 /* mode register (w) */
+#define DMA2_CLEAR_FF_REG 0xD8 /* clear pointer flip-flop (w) */
+#define DMA2_TEMP_REG 0xDA /* Temporary Register (r) */
+#define DMA2_RESET_REG 0xDA /* Master Clear (w) */
+#define DMA2_CLR_MASK_REG 0xDC /* Clear Mask */
+#define DMA2_MASK_ALL_REG 0xDE /* all-channels mask (w) */
+
+#define DMA_ADDR_0 0x00 /* DMA address registers */
+#define DMA_ADDR_1 0x02
+#define DMA_ADDR_2 0x04
+#define DMA_ADDR_3 0x06
+#define DMA_ADDR_4 0xC0
+#define DMA_ADDR_5 0xC4
+#define DMA_ADDR_6 0xC8
+#define DMA_ADDR_7 0xCC
+
+#define DMA_CNT_0 0x01 /* DMA count registers */
+#define DMA_CNT_1 0x03
+#define DMA_CNT_2 0x05
+#define DMA_CNT_3 0x07
+#define DMA_CNT_4 0xC2
+#define DMA_CNT_5 0xC6
+#define DMA_CNT_6 0xCA
+#define DMA_CNT_7 0xCE
+
+#define DMA_PAGE_0 0x87 /* DMA page registers */
+#define DMA_PAGE_1 0x83
+#define DMA_PAGE_2 0x81
+#define DMA_PAGE_3 0x82
+#define DMA_PAGE_5 0x8B
+#define DMA_PAGE_6 0x89
+#define DMA_PAGE_7 0x8A
+
+#define DMA_MODE_READ 0x44 /* I/O to memory, no autoinit, increment, single mode */
+#define DMA_MODE_WRITE 0x48 /* memory to I/O, no autoinit, increment, single mode */
+#define DMA_MODE_CASCADE 0xC0 /* pass thru DREQ->HRQ, DACK<-HLDA only */
+
+/* enable/disable a specific DMA channel */
+static __inline__ void enable_dma(unsigned int dmanr)
+{
+ if (dmanr<=3)
+ dma_outb(DMA1_MASK_REG, dmanr);
+ else
+ dma_outb(DMA2_MASK_REG, dmanr & 3);
+}
+
+static __inline__ void disable_dma(unsigned int dmanr)
+{
+ if (dmanr<=3)
+ dma_outb(DMA1_MASK_REG, dmanr | 4);
+ else
+ dma_outb(DMA2_MASK_REG, (dmanr & 3) | 4);
+}
+
+/* Clear the 'DMA Pointer Flip Flop'.
+ * Write 0 for LSB/MSB, 1 for MSB/LSB access.
+ * Use this once to initialize the FF to a known state.
+ * After that, keep track of it. :-)
+ * --- In order to do that, the DMA routines below should ---
+ * --- only be used while interrupts are disabled! ---
+ */
+static __inline__ void clear_dma_ff(unsigned int dmanr)
+{
+ if (dmanr<=3)
+ dma_outb(DMA1_CLEAR_FF_REG, 0);
+ else
+ dma_outb(DMA2_CLEAR_FF_REG, 0);
+}
+
+/* set mode (above) for a specific DMA channel */
+static __inline__ void set_dma_mode(unsigned int dmanr, char mode)
+{
+ if (dmanr<=3)
+ dma_outb(DMA1_MODE_REG, mode | dmanr);
+ else
+ dma_outb(DMA2_MODE_REG, mode | (dmanr&3));
+}
+
+/* Set only the page register bits of the transfer address.
+ * This is used for successive transfers when we know the contents of
+ * the lower 16 bits of the DMA current address register, but a 64k boundary
+ * may have been crossed.
+ */
+static __inline__ void set_dma_page(unsigned int dmanr, char pagenr)
+{
+ switch(dmanr) {
+ case 0:
+ dma_outb(DMA_PAGE_0, pagenr);
+ break;
+ case 1:
+ dma_outb(DMA_PAGE_1, pagenr);
+ break;
+ case 2:
+ dma_outb(DMA_PAGE_2, pagenr);
+ break;
+ case 3:
+ dma_outb(DMA_PAGE_3, pagenr);
+ break;
+ case 5:
+ dma_outb(DMA_PAGE_5, pagenr & 0xfe);
+ break;
+ case 6:
+ dma_outb(DMA_PAGE_6, pagenr & 0xfe);
+ break;
+ case 7:
+ dma_outb(DMA_PAGE_7, pagenr & 0xfe);
+ break;
+ }
+}
+
+
+/* Set transfer address & page bits for specific DMA channel.
+ * Assumes dma flipflop is clear.
+ */
+static __inline__ void set_dma_addr(unsigned int dmanr, unsigned int a)
+{
+ set_dma_page(dmanr, a>>16);
+ if (dmanr <= 3) {
+ dma_outb(((dmanr&3)<<1) + IO_DMA1_BASE, a & 0xff);
+ dma_outb(((dmanr&3)<<1) + IO_DMA1_BASE, (a>>8) & 0xff );
+ } else {
+ dma_outb( ((dmanr&3)<<2) + IO_DMA2_BASE ,(a>>1) & 0xff );
+ dma_outb( ((dmanr&3)<<2) + IO_DMA2_BASE,(a>>9) & 0xff );
+ }
+}
+
+
+/* Set transfer size (max 64k for DMA1..3, 128k for DMA5..7) for
+ * a specific DMA channel.
+ * You must ensure the parameters are valid.
+ * NOTE: from a manual: "the number of transfers is one more
+ * than the initial word count"! This is taken into account.
+ * Assumes dma flip-flop is clear.
+ * NOTE 2: "count" represents _bytes_ and must be even for channels 5-7.
+ */
+static __inline__ void set_dma_count(unsigned int dmanr, unsigned int count)
+{
+ count--;
+ if (dmanr <= 3) {
+ dma_outb( count & 0xff, ((dmanr&3)<<1) + 1 + IO_DMA1_BASE );
+ dma_outb( (count>>8) & 0xff, ((dmanr&3)<<1) + 1 + IO_DMA1_BASE );
+ } else {
+ dma_outb( (count>>1) & 0xff, ((dmanr&3)<<2) + 2 + IO_DMA2_BASE );
+ dma_outb( (count>>9) & 0xff, ((dmanr&3)<<2) + 2 + IO_DMA2_BASE );
+ }
+}
+
+
+/* Get DMA residue count. After a DMA transfer, this
+ * should return zero. Reading this while a DMA transfer is
+ * still in progress will return unpredictable results.
+ * If called before the channel has been used, it may return 1.
+ * Otherwise, it returns the number of _bytes_ left to transfer.
+ *
+ * Assumes DMA flip-flop is clear.
+ */
+static __inline__ int get_dma_residue(unsigned int dmanr)
+{
+ unsigned int io_port = (dmanr<=3)? ((dmanr&3)<<1) + 1 + IO_DMA1_BASE
+ : ((dmanr&3)<<2) + 2 + IO_DMA2_BASE;
+
+ /* using short to get 16-bit wrap around */
+ unsigned short count;
+
+ count = 1 + dma_inb(io_port);
+ count += dma_inb(io_port) << 8;
+
+ return (dmanr<=3)? count : (count<<1);
+}
+
+
+
+#endif /* _ASM_DMA_H */
--- /dev/null
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS kernel
+ * FILE: include/internal/hal/ddk.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_INTERNAL_HAL_DDK_H
+#define __INCLUDE_INTERNAL_HAL_DDK_H
+
+enum
+{
+ DEVICE_DESCRIPTION_VERSION,
+ DEVICE_DESCRIPTION_VERSION1,
+};
+
+typedef ULONG DMA_WIDTH;
+typedef ULONG DMA_SPEED;
+typedef ULONG BUS_DATA_TYPE;
+
+/*
+ * PURPOSE: Types for HalGetBusData
+ */
+enum
+{
+ Cmos,
+ EisaConfiguration,
+ Pos,
+ PCIConfiguration,
+ MaximumBusDataType,
+};
+
+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;
+
+PVOID HalAllocateCommonBuffer(PADAPTER_OBJECT AdapterObject,
+ ULONG Length,
+ PPHYSICAL_ADDRESS LogicalAddress,
+ BOOLEAN CacheEnabled);
+NTSTATUS HalAssignSlotResources(PUNICODE_STRING RegistryPath,
+ PUNICODE_STRING DriverClassName,
+ PDRIVER_OBJECT DriverObject,
+ PDEVICE_OBJECT DeviceObject,
+ INTERFACE_TYPE BusType,
+ ULONG BusNumber,
+ ULONG SlotNumber,
+ PCM_RESOURCE_LIST* AllocatedResources);
+VOID HalExamineMBR(PDEVICE_OBJECT DeviceObject,
+ ULONG SectorSize,
+ ULONG MBRTypeIdentifier,
+ PVOID Buffer);
+VOID HalFreeCommonBuffer(PADAPTER_OBJECT AdapterObject,
+ ULONG Length,
+ PHYSICAL_ADDRESS LogicalAddress,
+ PVOID VirtualAddress,
+ BOOLEAN CacheEnabled);
+PADAPTER_OBJECT HalGetAdapter(PDEVICE_DESCRIPTION DeviceDescription,
+ PULONG NumberOfMapRegisters);
+ULONG HalGetBusData(BUS_DATA_TYPE BusDataType,
+ ULONG BusNumber,
+ ULONG SlotNumber,
+ PVOID Buffer,
+ ULONG Length);
+ULONG HalGetBusDataByOffset(BUS_DATA_TYPE BusDataType,
+ ULONG BusNumber,
+ ULONG SlotNumber,
+ PVOID Buffer,
+ ULONG Offset,
+ ULONG Length);
+ULONG HalGetDmaAlignmentRequirement(VOID);
+ULONG HalGetInterruptVector(INTERFACE_TYPE InterfaceType,
+ ULONG BusNumber,
+ ULONG BusInterruptLevel,
+ ULONG BusInterruptVector,
+ PKIRQL Irql,
+ PKAFFINITY Affinity);
+VOID HalQuerySystemInformation(VOID);
+ULONG HalReadDmaCounter(PADAPTER_OBJECT AdapterObject);
+ULONG HalSetBusData(BUS_DATA_TYPE BusDataType,
+ ULONG BusNumber,
+ ULONG SlotNumber,
+ PVOID Buffer,
+ ULONG Length);
+ULONG HalSetBusDataByOffset(BUS_DATA_TYPE BusDataType,
+ ULONG BusNumber,
+ ULONG SlotNumber,
+ PVOID Buffer,
+ ULONG Offset,
+ ULONG Length);
+BOOLEAN HalTranslateBusAddress(INTERFACE_TYPE InterfaceType,
+ ULONG BusNumber,
+ PHYSICAL_ADDRESS BusAddress,
+ PULONG AddressSpace,
+ PPHYSICAL_ADDRESS TranslatedAddress);
+
+struct __xchg_dummy { unsigned long a[100]; };
+#define __xg(x) ((struct __xchg_dummy *)(x))
+
+extern inline LONG InterlockedDecrement(PLONG Addend)
+/*
+ * FUNCTION: Decrements a variable as an atomic operations
+ * ARGUMENTS:
+ * Addend = Value to be decremented
+ * RETURNS: The decremented value
+ */
+{
+}
+
+extern inline LONG InterlockedExchange(PLONG Target, LONG Value)
+/*
+ * FUNCTION: Sets a variable as an atomic operation
+ * ARGUMENTS:
+ * Target = Variable to be set
+ * Value = Caller specified value to set
+ * RETURNS: The previous value of the target
+ */
+{
+ __asm__("xchgl %0,%1"
+ :"=r" (Value)
+ :"m" (*__xg(Target)), "0" (Value)
+ :"memory");
+ return(Value);
+}
+
+#endif /* __INCLUDE_INTERNAL_HAL_DDK_H */
--- /dev/null
+/*\r
+ * \r
+ */\r
+\r
+#ifndef __INTERNAL_HAL_HAL_H\r
+#define __INTERNAL_HAL_HAL_H\r
+\r
+typedef struct\r
+{\r
+ unsigned short previous_task;\r
+ unsigned short reserved1;\r
+ unsigned long esp0;\r
+ unsigned short ss0;\r
+ unsigned short reserved2;\r
+ unsigned long esp1;\r
+ unsigned short ss1;\r
+ unsigned short reserved3;\r
+ unsigned long esp2;\r
+ unsigned short ss2;\r
+ unsigned short reserved4;\r
+ unsigned long cr3;\r
+ unsigned long eip;\r
+ unsigned long eflags;\r
+ unsigned long eax;\r
+ unsigned long ecx;\r
+ unsigned long edx;\r
+ unsigned long ebx;\r
+ unsigned long esp;\r
+ unsigned long ebp;\r
+ unsigned long esi;\r
+ unsigned long edi;\r
+ unsigned short es;\r
+ unsigned short reserved5;\r
+ unsigned short cs;\r
+ unsigned short reserved6;\r
+ unsigned short ss;\r
+ unsigned short reserved7;\r
+ unsigned short ds;\r
+ unsigned short reserved8;\r
+ unsigned short fs;\r
+ unsigned short reserved9;\r
+ unsigned short gs;\r
+ unsigned short reserved10;\r
+ unsigned short ldt;\r
+ unsigned short reserved11;\r
+ unsigned short trap;\r
+ unsigned short iomap_base;\r
+ \r
+ unsigned short nr;\r
+ \r
+ unsigned char io_bitmap[1];\r
+} hal_thread_state;\r
+\r
+/*\r
+ * FUNCTION: Probes for a PCI bus\r
+ * RETURNS: True if found\r
+ */\r
+BOOL HalPciProbe(void);\r
+\r
+/*\r
+ * FUNCTION: Probes for a BIOS32 extension\r
+ */\r
+VOID Hal_bios32_probe(VOID);\r
+\r
+/*\r
+ * FUNCTION: Determines if a a bios32 service is present\r
+ */\r
+BOOLEAN Hal_bios32_is_service_present(ULONG service);\r
+\r
+\r
+#endif /* __INTERNAL_HAL_HAL_H */\r
--- /dev/null
+#ifndef _ASM_IO_H
+#define _ASM_IO_H
+
+/*
+ * This file contains the definitions for the x86 IO instructions
+ * inb/inw/inl/outb/outw/outl and the "string versions" of the same
+ * (insb/insw/insl/outsb/outsw/outsl). You can also use "pausing"
+ * versions of the single-IO instructions (inb_p/inw_p/..).
+ *
+ * This file is not meant to be obfuscating: it's just complicated
+ * to (a) handle it all in a way that makes gcc able to optimize it
+ * as well as possible and (b) trying to avoid writing the same thing
+ * over and over again with slight variations and possibly making a
+ * mistake somewhere.
+ */
+
+/*
+ * Thanks to James van Artsdalen for a better timing-fix than
+ * the two short jumps: using outb's to a nonexistent port seems
+ * to guarantee better timings even on fast machines.
+ *
+ * On the other hand, I'd like to be sure of a non-existent port:
+ * I feel a bit unsafe about using 0x80 (should be safe, though)
+ *
+ * Linus
+ */
+
+#ifdef SLOW_IO_BY_JUMPING
+#define __SLOW_DOWN_IO __asm__ __volatile__("jmp 1f\n1:\tjmp 1f\n1:")
+#else
+#define __SLOW_DOWN_IO __asm__ __volatile__("outb %al,$0x80")
+#endif
+
+#ifdef REALLY_SLOW_IO
+#define SLOW_DOWN_IO { __SLOW_DOWN_IO; __SLOW_DOWN_IO; __SLOW_DOWN_IO; __SLOW_DOWN_IO; }
+#else
+#define SLOW_DOWN_IO __SLOW_DOWN_IO
+#endif
+
+/*
+ * Talk about misusing macros..
+ */
+
+#define __OUT1(s,x) \
+extern inline void __out##s(unsigned x value, unsigned short port) {
+
+#define __OUT2(s,s1,s2) \
+__asm__ __volatile__ ("out" #s " %" s1 "0,%" s2 "1"
+
+#define __OUT(s,s1,x) \
+__OUT1(s,x) __OUT2(s,s1,"w") : : "a" (value), "d" (port)); } \
+__OUT1(s##c,x) __OUT2(s,s1,"") : : "a" (value), "id" (port)); } \
+__OUT1(s##_p,x) __OUT2(s,s1,"w") : : "a" (value), "d" (port)); SLOW_DOWN_IO; } \
+__OUT1(s##c_p,x) __OUT2(s,s1,"") : : "a" (value), "id" (port)); SLOW_DOWN_IO; }
+
+#define __IN1(s) \
+extern inline RETURN_TYPE __in##s(unsigned short port) { RETURN_TYPE _v;
+
+#define __IN2(s,s1,s2) \
+__asm__ __volatile__ ("in" #s " %" s2 "1,%" s1 "0"
+
+#define __IN(s,s1,i...) \
+__IN1(s) __IN2(s,s1,"w") : "=a" (_v) : "d" (port) ,##i ); return _v; } \
+__IN1(s##c) __IN2(s,s1,"") : "=a" (_v) : "id" (port) ,##i ); return _v; } \
+__IN1(s##_p) __IN2(s,s1,"w") : "=a" (_v) : "d" (port) ,##i ); SLOW_DOWN_IO; return _v; } \
+__IN1(s##c_p) __IN2(s,s1,"") : "=a" (_v) : "id" (port) ,##i ); SLOW_DOWN_IO; return _v; }
+
+#define __INS(s) \
+extern inline void ins##s(unsigned short port, void * addr, unsigned long count) \
+{ __asm__ __volatile__ ("cld ; rep ; ins" #s \
+: "=D" (addr), "=c" (count) : "d" (port),"0" (addr),"1" (count)); }
+
+#define __OUTS(s) \
+extern inline void outs##s(unsigned short port, const void * addr, unsigned long count) \
+{ __asm__ __volatile__ ("cld ; rep ; outs" #s \
+: "=S" (addr), "=c" (count) : "d" (port),"0" (addr),"1" (count)); }
+
+#define RETURN_TYPE unsigned char
+/* __IN(b,"b","0" (0)) */
+__IN(b,"")
+#undef RETURN_TYPE
+#define RETURN_TYPE unsigned short
+/* __IN(w,"w","0" (0)) */
+__IN(w,"")
+#undef RETURN_TYPE
+#define RETURN_TYPE unsigned int
+__IN(l,"")
+#undef RETURN_TYPE
+
+__OUT(b,"b",char)
+__OUT(w,"w",short)
+__OUT(l,,int)
+
+__INS(b)
+__INS(w)
+__INS(l)
+
+__OUTS(b)
+__OUTS(w)
+__OUTS(l)
+
+/*
+ * Note that due to the way __builtin_constant_p() works, you
+ * - can't use it inside a inline function (it will never be true)
+ * - you don't have to worry about side effects within the __builtin..
+ */
+#define outb(port,val) \
+((__builtin_constant_p((port)) && (port) < 256) ? \
+ __outbc((val),(port)) : \
+ __outb((val),(port)))
+
+#define inb(port) \
+((__builtin_constant_p((port)) && (port) < 256) ? \
+ __inbc(port) : \
+ __inb(port))
+
+#define outb_p(port,val) \
+((__builtin_constant_p((port)) && (port) < 256) ? \
+ __outbc_p((val),(port)) : \
+ __outb_p((val),(port)))
+
+#define inb_p(port) \
+((__builtin_constant_p((port)) && (port) < 256) ? \
+ __inbc_p(port) : \
+ __inb_p(port))
+
+#define outw(port,val) \
+((__builtin_constant_p((port)) && (port) < 256) ? \
+ __outwc((val),(port)) : \
+ __outw((val),(port)))
+
+#define inw(port) \
+((__builtin_constant_p((port)) && (port) < 256) ? \
+ __inwc(port) : \
+ __inw(port))
+
+#define outw_p(port,val) \
+((__builtin_constant_p((port)) && (port) < 256) ? \
+ __outwc_p((val),(port)) : \
+ __outw_p((val),(port)))
+
+#define inw_p(port) \
+((__builtin_constant_p((port)) && (port) < 256) ? \
+ __inwc_p(port) : \
+ __inw_p(port))
+
+#define outl(port,val) \
+((__builtin_constant_p((port)) && (port) < 256) ? \
+ __outlc((val),(port)) : \
+ __outl((val),(port)))
+
+#define inl(port) \
+((__builtin_constant_p((port)) && (port) < 256) ? \
+ __inlc(port) : \
+ __inl(port))
+
+#define outl_p(port,val) \
+((__builtin_constant_p((port)) && (port) < 256) ? \
+ __outlc_p((val),(port)) : \
+ __outl_p((val),(port)))
+
+#define inl_p(port) \
+((__builtin_constant_p((port)) && (port) < 256) ? \
+ __inlc_p(port) : \
+ __inl_p(port))
+
+#endif
--- /dev/null
+/*
+ * PURPOSE: The number of device specific level levels
+ */
+#define NR_DEVICE_SPECIFIC_LEVELS (16)
+
+
+
--- /dev/null
+/*
+ * Lowlevel memory managment definitions
+ */
+
+#ifndef __INTERNAL_HAL_PAGE_H
+#define __INTERNAL_HAL_PAGE_H
+
+#include <internal/kernel.h>
+
+#define PAGESIZE (4096)
+
+/*
+ * Sets a page entry
+ * vaddr: The virtual address to set the page entry for
+ * attributes: The access attributes to give the page
+ * physaddr: The physical address the page should map to
+ */
+void set_page(unsigned int vaddr, unsigned int attributes,
+ unsigned int physaddr);
+
+#define PAGE_ROUND_UP(x) ( (((ULONG)x)%PAGESIZE) ? ((((ULONG)x)&(~0xfff))+0x1000) : ((ULONG)x) )
+#define PAGE_ROUND_DOWN(x) (((ULONG)x)&(~0xfff))
+
+/*
+ * Page access attributes (or these together)
+ */
+#define PA_READ (1<<0)
+#define PA_WRITE ((1<<0)+(1<<1))
+#define PA_EXECUTE PA_READ
+
+/*
+ * Page attributes
+ */
+#define PA_USER (1<<2)
+#define PA_SYSTEM (0)
+
+#define KERNEL_BASE (0xc0000000)
+#define IDMAP_BASE (0xd0000000)
+
+
+
+/*
+ * Return a linear address which can be used to access the physical memory
+ * starting at x
+ */
+extern inline unsigned int physical_to_linear(unsigned int x)
+{
+ return(x+IDMAP_BASE);
+}
+
+#define FLUSH_TLB __asm__("movl %cr3,%eax\n\tmovl %eax,%cr3\n\t")
+
+extern inline unsigned int* get_page_directory(void)
+{
+ unsigned int page_dir=0;
+ __asm__("movl %%cr3,%0\n\t"
+ : "=r" (page_dir));
+// printk("page_dir %x %x\n",page_dir,physical_to_linear(page_dir));
+ return((unsigned int *)physical_to_linear(page_dir));
+}
+
+
+/*
+ * Amount of memory that can be mapped by a page table
+ */
+#define PAGE_TABLE_SIZE (4*1024*1024)
+
+#define PAGE_MASK(x) (x&(~0xfff))
+#define VADDR_TO_PT_OFFSET(x) (((x/1024)%4096))
+#define VADDR_TO_PD_OFFSET(x) ((x)/(4*1024*1024))
+
+unsigned int* get_page_entry(unsigned int vaddr);
+
+BOOL is_page_present(unsigned int vaddr);
+
+#endif /* __INTERNAL_HAL_PAGE_H */
--- /dev/null
+#ifndef _ASM_SEGMENT_H
+#define _ASM_SEGMENT_H
+
+#define ZERO_DS 0x18
+#define KERNEL_CS 0x20
+#define KERNEL_DS 0x28
+
+#ifndef __ASSEMBLY__
+
+/*
+ * Uh, these should become the main single-value transfer routines..
+ * They automatically use the right size if we just have the right
+ * pointer type..
+ */
+#define put_user(x,ptr) __put_user((unsigned long)(x),(ptr),sizeof(*(ptr)))
+#define get_user(ptr) ((__typeof__(*(ptr)))__get_user((ptr),sizeof(*(ptr))))
+
+/*
+ * This is a silly but good way to make sure that
+ * the __put_user function is indeed always optimized,
+ * and that we use the correct sizes..
+ */
+extern int bad_user_access_length(void);
+
+/*
+ * dummy pointer type structure.. gcc won't try to do something strange
+ * this way..
+ */
+struct __segment_dummy { unsigned long a[100]; };
+#define __sd(x) ((struct __segment_dummy *) (x))
+#define __const_sd(x) ((const struct __segment_dummy *) (x))
+
+static inline void __put_user(unsigned long x, void * y, int size)
+{
+ switch (size) {
+ case 1:
+ __asm__ ("movb %b1,%%fs:%0"
+ :"=m" (*__sd(y))
+ :"iq" ((unsigned char) x), "m" (*__sd(y)));
+ break;
+ case 2:
+ __asm__ ("movw %w1,%%fs:%0"
+ :"=m" (*__sd(y))
+ :"ir" ((unsigned short) x), "m" (*__sd(y)));
+ break;
+ case 4:
+ __asm__ ("movl %1,%%fs:%0"
+ :"=m" (*__sd(y))
+ :"ir" (x), "m" (*__sd(y)));
+ break;
+ default:
+ bad_user_access_length();
+ }
+}
+
+static inline unsigned long __get_user(const void * y, int size)
+{
+ unsigned long result;
+
+ switch (size) {
+ case 1:
+ __asm__ ("movb %%fs:%1,%b0"
+ :"=q" (result)
+ :"m" (*__const_sd(y)));
+ return (unsigned char) result;
+ case 2:
+ __asm__ ("movw %%fs:%1,%w0"
+ :"=r" (result)
+ :"m" (*__const_sd(y)));
+ return (unsigned short) result;
+ case 4:
+ __asm__ ("movl %%fs:%1,%0"
+ :"=r" (result)
+ :"m" (*__const_sd(y)));
+ return result;
+ default:
+ return bad_user_access_length();
+ }
+}
+
+static inline void __generic_memcpy_tofs(void * to, const void * from, unsigned long n)
+{
+ __asm__ volatile
+ (" cld
+ push %%es
+ push %%fs
+ cmpl $3,%0
+ pop %%es
+ jbe 1f
+ movl %%edi,%%ecx
+ negl %%ecx
+ andl $3,%%ecx
+ subl %%ecx,%0
+ rep; movsb
+ movl %0,%%ecx
+ shrl $2,%%ecx
+ rep; movsl
+ andl $3,%0
+ 1: movl %0,%%ecx
+ rep; movsb
+ pop %%es"
+ :"=abd" (n)
+ :"0" (n),"D" ((long) to),"S" ((long) from)
+ :"cx","di","si");
+}
+
+static inline void __constant_memcpy_tofs(void * to, const void * from, unsigned long n)
+{
+ switch (n) {
+ case 0:
+ return;
+ case 1:
+ __put_user(*(const char *) from, (char *) to, 1);
+ return;
+ case 2:
+ __put_user(*(const short *) from, (short *) to, 2);
+ return;
+ case 3:
+ __put_user(*(const short *) from, (short *) to, 2);
+ __put_user(*(2+(const char *) from), 2+(char *) to, 1);
+ return;
+ case 4:
+ __put_user(*(const int *) from, (int *) to, 4);
+ return;
+ case 8:
+ __put_user(*(const int *) from, (int *) to, 4);
+ __put_user(*(1+(const int *) from), 1+(int *) to, 4);
+ return;
+ case 12:
+ __put_user(*(const int *) from, (int *) to, 4);
+ __put_user(*(1+(const int *) from), 1+(int *) to, 4);
+ __put_user(*(2+(const int *) from), 2+(int *) to, 4);
+ return;
+ case 16:
+ __put_user(*(const int *) from, (int *) to, 4);
+ __put_user(*(1+(const int *) from), 1+(int *) to, 4);
+ __put_user(*(2+(const int *) from), 2+(int *) to, 4);
+ __put_user(*(3+(const int *) from), 3+(int *) to, 4);
+ return;
+ }
+#define COMMON(x) \
+__asm__("cld\n\t" \
+ "push %%es\n\t" \
+ "push %%fs\n\t" \
+ "pop %%es\n\t" \
+ "rep ; movsl\n\t" \
+ x \
+ "pop %%es" \
+ : /* no outputs */ \
+ :"c" (n/4),"D" ((long) to),"S" ((long) from) \
+ :"cx","di","si")
+
+ switch (n % 4) {
+ case 0:
+ COMMON("");
+ return;
+ case 1:
+ COMMON("movsb\n\t");
+ return;
+ case 2:
+ COMMON("movsw\n\t");
+ return;
+ case 3:
+ COMMON("movsw\n\tmovsb\n\t");
+ return;
+ }
+#undef COMMON
+}
+
+static inline void __generic_memcpy_fromfs(void * to, const void * from, unsigned long n)
+{
+ __asm__ volatile
+ (" cld
+ cmpl $3,%0
+ jbe 1f
+ movl %%edi,%%ecx
+ negl %%ecx
+ andl $3,%%ecx
+ subl %%ecx,%0
+ fs; rep; movsb
+ movl %0,%%ecx
+ shrl $2,%%ecx
+ fs; rep; movsl
+ andl $3,%0
+ 1: movl %0,%%ecx
+ fs; rep; movsb"
+ :"=abd" (n)
+ :"0" (n),"D" ((long) to),"S" ((long) from)
+ :"cx","di","si", "memory");
+}
+
+static inline void __constant_memcpy_fromfs(void * to, const void * from, unsigned long n)
+{
+ switch (n) {
+ case 0:
+ return;
+ case 1:
+ *(char *)to = __get_user((const char *) from, 1);
+ return;
+ case 2:
+ *(short *)to = __get_user((const short *) from, 2);
+ return;
+ case 3:
+ *(short *) to = __get_user((const short *) from, 2);
+ *((char *) to + 2) = __get_user(2+(const char *) from, 1);
+ return;
+ case 4:
+ *(int *) to = __get_user((const int *) from, 4);
+ return;
+ case 8:
+ *(int *) to = __get_user((const int *) from, 4);
+ *(1+(int *) to) = __get_user(1+(const int *) from, 4);
+ return;
+ case 12:
+ *(int *) to = __get_user((const int *) from, 4);
+ *(1+(int *) to) = __get_user(1+(const int *) from, 4);
+ *(2+(int *) to) = __get_user(2+(const int *) from, 4);
+ return;
+ case 16:
+ *(int *) to = __get_user((const int *) from, 4);
+ *(1+(int *) to) = __get_user(1+(const int *) from, 4);
+ *(2+(int *) to) = __get_user(2+(const int *) from, 4);
+ *(3+(int *) to) = __get_user(3+(const int *) from, 4);
+ return;
+ }
+#define COMMON(x) \
+__asm__("cld\n\t" \
+ "rep ; fs ; movsl\n\t" \
+ x \
+ : /* no outputs */ \
+ :"c" (n/4),"D" ((long) to),"S" ((long) from) \
+ :"cx","di","si","memory")
+
+ switch (n % 4) {
+ case 0:
+ COMMON("");
+ return;
+ case 1:
+ COMMON("fs ; movsb");
+ return;
+ case 2:
+ COMMON("fs ; movsw");
+ return;
+ case 3:
+ COMMON("fs ; movsw\n\tfs ; movsb");
+ return;
+ }
+#undef COMMON
+}
+
+#define memcpy_fromfs(to, from, n) \
+(__builtin_constant_p(n) ? \
+ __constant_memcpy_fromfs((to),(from),(n)) : \
+ __generic_memcpy_fromfs((to),(from),(n)))
+
+#define memcpy_tofs(to, from, n) \
+(__builtin_constant_p(n) ? \
+ __constant_memcpy_tofs((to),(from),(n)) : \
+ __generic_memcpy_tofs((to),(from),(n)))
+
+/*
+ * These are deprecated..
+ *
+ * Use "put_user()" and "get_user()" with the proper pointer types instead.
+ */
+
+#define get_fs_byte(addr) __get_user((const unsigned char *)(addr),1)
+#define get_fs_word(addr) __get_user((const unsigned short *)(addr),2)
+#define get_fs_long(addr) __get_user((const unsigned int *)(addr),4)
+
+#define put_fs_byte(x,addr) __put_user((x),(unsigned char *)(addr),1)
+#define put_fs_word(x,addr) __put_user((x),(unsigned short *)(addr),2)
+#define put_fs_long(x,addr) __put_user((x),(unsigned int *)(addr),4)
+
+#ifdef WE_REALLY_WANT_TO_USE_A_BROKEN_INTERFACE
+
+static inline unsigned short get_user_word(const short *addr)
+{
+ return __get_user(addr, 2);
+}
+
+static inline unsigned char get_user_byte(const char * addr)
+{
+ return __get_user(addr,1);
+}
+
+static inline unsigned long get_user_long(const int *addr)
+{
+ return __get_user(addr, 4);
+}
+
+static inline void put_user_byte(char val,char *addr)
+{
+ __put_user(val, addr, 1);
+}
+
+static inline void put_user_word(short val,short * addr)
+{
+ __put_user(val, addr, 2);
+}
+
+static inline void put_user_long(unsigned long val,int * addr)
+{
+ __put_user(val, addr, 4);
+}
+
+#endif
+
+/*
+ * Someone who knows GNU asm better than I should double check the following.
+ * It seems to work, but I don't know if I'm doing something subtly wrong.
+ * --- TYT, 11/24/91
+ * [ nothing wrong here, Linus: I just changed the ax to be any reg ]
+ */
+
+static inline unsigned long get_fs(void)
+{
+ unsigned long _v;
+ __asm__("mov %%fs,%w0":"=r" (_v):"0" (0));
+ return _v;
+}
+
+static inline unsigned long get_ds(void)
+{
+ unsigned long _v;
+ __asm__("mov %%ds,%w0":"=r" (_v):"0" (0));
+ return _v;
+}
+
+static inline void set_fs(unsigned long val)
+{
+ __asm__ __volatile__("mov %w0,%%fs": /* no output */ :"r" (val));
+}
+
+static inline void set_ds(unsigned long val)
+{
+ __asm__ __volatile__("mov %w0,%%ds": /* no output */ :"r" (val));
+}
+
+
+#endif /* __ASSEMBLY__ */
+
+#endif /* _ASM_SEGMENT_H */
--- /dev/null
+;
+; Useful prototypes and definitions
+;
+
+%define KERNEL_DS 028h
+%define KERNEL_CS 020h
--- /dev/null
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS kernel
+ * FILE: include/internal/iomgr.h
+ * PURPOSE: Internal io manager declarations
+ * PROGRAMMER: David Welch (welch@mcmail.com)
+ * UPDATE HISTORY:
+ * 28/05/97: Created
+ */
+
+#ifndef __INTERNAL_IOMGR_H
+#define __INTERNAL_IOMGR_H
+
+#include <ddk/ntddk.h>
+
+/*
+ * FUNCTION:
+ */
+NTSTATUS IoBeginIrp(PDEVICE_OBJECT DeviceObject, PIRP Irp);
+
+/*
+ * FUNCTION: Called to initalize a loaded driver
+ * ARGUMENTS:
+ * entry = pointer to the driver initialization routine
+ * RETURNS: Success or failure
+ */
+NTSTATUS InitalizeLoadedDriver(PDRIVER_INITIALIZE entry);
+
+#endif
--- /dev/null
+/*\r
+ * Various useful prototypes\r
+ */\r
+\r
+#ifndef __KERNEL_H\r
+#define __KERNEL_H\r
+\r
+#include <windows.h>\r
+#include <ddk/ntddk.h>\r
+\r
+#include <internal/linkage.h>\r
+#include <stdarg.h>\r
+\r
+VOID KiInterruptDispatch(unsigned int irq);\r
+VOID KiDispatchInterrupt(unsigned int irq);\r
+VOID KeTimerInterrupt(VOID);\r
+\r
+/*\r
+ * Defines a descriptor as it appears in the processor tables\r
+ */\r
+typedef struct\r
+{\r
+ unsigned int a;\r
+ unsigned int b;\r
+} descriptor;\r
+\r
+extern descriptor idt[256];\r
+extern descriptor gdt[256];\r
+\r
+/*\r
+ * printf style functions\r
+ */\r
+asmlinkage void printk(const char* fmt, ...);\r
+int vsprintf(char *buf, const char *fmt, va_list args);\r
+int sprintf(char* buf, const char* fmt, ...);\r
+\r
+typedef struct\r
+{\r
+ /*\r
+ * Magic value (useless really)\r
+ */\r
+ unsigned int magic;\r
+\r
+ /*\r
+ * Cursor position\r
+ */\r
+ unsigned int cursorx;\r
+ unsigned int cursory;\r
+\r
+ /*\r
+ * Number of files (including the kernel) loaded\r
+ */\r
+ unsigned int nr_files;\r
+\r
+ /*\r
+ * Range of physical memory being used by the system\r
+ */\r
+ unsigned int start_mem;\r
+ unsigned int end_mem;\r
+\r
+ /*\r
+ * List of module lengths (terminated by a 0)\r
+ */\r
+ unsigned int module_length[64];\r
+} boot_param;\r
+\r
+\r
+/*\r
+ * Initalization functions (called once by main())\r
+ */\r
+void MmInitalize(boot_param* bp);\r
+void InitalizeExceptions(void);\r
+void InitalizeIRQ(void);\r
+void InitializeTimer(void);\r
+void InitConsole(boot_param* bp);\r
+void KeInitDpc(void);\r
+void HalInit(boot_param* bp);\r
+void IoInit(void);\r
+void ObjNamespcInit(void);\r
+void PsMgrInit(void);\r
+\r
+\r
+/*\r
+ * FUNCTION: Called to execute queued dpcs\r
+ */\r
+void KeDrainDpcQueue(void);\r
+\r
+void KeExpireTimers(void);\r
+\r
+typedef unsigned int (exception_hook)(CONTEXT* c, unsigned int exp);\r
+asmlinkage unsigned int ExHookException(exception_hook fn, UINT exp);\r
+\r
+#endif\r
--- /dev/null
+#ifdef __cplusplus
+#define asmlinkage extern "C"
+#else
+#define asmlinkage
+#endif
--- /dev/null
+/*\r
+ * Higher level memory managment definitions\r
+ */\r
+\r
+#ifndef __MM_H\r
+#define __MM_H\r
+\r
+#define PAGE_SYSTEM (0x80000000)\r
+\r
+#include <internal/linkage.h>\r
+#include <internal/kernel.h>\r
+#include <windows.h>\r
+\r
+typedef struct _memory_area\r
+/*\r
+ * PURPOSE: Describes an area of virtual memory \r
+ */\r
+{\r
+ /*\r
+ * Access protection\r
+ */\r
+ unsigned int access;\r
+ \r
+ /*\r
+ * Memory region base\r
+ */\r
+ unsigned int base;\r
+ \r
+ /*\r
+ * Memory region length\r
+ */\r
+ unsigned int length;\r
+ \r
+ /*\r
+ * Memory type (Mapped file, mapped from an executable or private)\r
+ */\r
+ unsigned int type;\r
+\r
+ /*\r
+ * Memory region state (committed, reserved or free)\r
+ */\r
+ unsigned int state;\r
+ \r
+ /*\r
+ * Original access protection\r
+ */ \r
+ unsigned int initial_access;\r
+ \r
+ /*\r
+ * Used to maintain the linked list of memory areas\r
+ */\r
+ struct _memory_area* previous;\r
+ struct _memory_area* next;\r
+ \r
+ /*\r
+ * True the region is locked\r
+ */\r
+ BOOL lock;\r
+ \r
+ /*\r
+ * FUNCTION: Decommits all the pages in the regions\r
+ */\r
+ void (*free)(struct _memory_area* marea);\r
+ \r
+ /*\r
+ * FUNCTION: Handles a page fault by loading the required page\r
+ * RECEIVES:\r
+ * marea = the memory area\r
+ * address = the relative address of the page to load\r
+ * RETURNS:\r
+ * TRUE = the access should be restarted\r
+ * FALSE = the access was illegal and an exception should\r
+ * be generated\r
+ * NOTES: This function is guarrented to be called within the context\r
+ * of the thread which required a page to be loaded\r
+ */\r
+ BOOL (*load_page)(struct _memory_area* marea, unsigned int address);\r
+} memory_area;\r
+\r
+\r
+/*\r
+ * FUNCTION: Gets a page with a restricted max physical address (i.e.\r
+ * suitable for dma)\r
+ * RETURNS:\r
+ * The physical address of the page if it succeeds\r
+ * NULL if it fails.\r
+ * NOTES: This is very inefficent because the list isn't sorted. On the\r
+ * other hand sorting the list would be quite expensive especially if dma\r
+ * is only used infrequently. Perhaps a special cache of dma pages should\r
+ * be maintained?\r
+ */\r
+unsigned int get_dma_page(unsigned int max_address);\r
+\r
+/*\r
+ * FUNCTION: Allocate a page and return its physical address\r
+ * RETURNS: The physical address of the page allocated\r
+ */\r
+asmlinkage unsigned int get_free_page(void);\r
+\r
+/*\r
+ * FUNCTION: Adds pages to the free list\r
+ * ARGUMENTS:\r
+ * physical_base = Physical address of the base of the region to\r
+ * be freed\r
+ * nr = number of continuous pages to free\r
+ */\r
+asmlinkage void free_page(unsigned int physical_base, unsigned int nr);\r
+\r
+/*\r
+ * FUNCTION: Returns the physical address mapped by a given virtual address \r
+ * ARGUMENTS:\r
+ * vaddr = virtual address to query\r
+ * RETURNS: The physical address if present in memory\r
+ * Zero if paged out or invalid\r
+ * NOTE: This doesn't do any synchronization\r
+ */\r
+unsigned int get_page_physical_address(unsigned int vaddr);\r
+\r
+void mark_page_not_writable(unsigned int vaddr);\r
+\r
+void VirtualInit(boot_param* bp);\r
+\r
+/*\r
+ * FUNCTION: Returns the first memory area starting in the region or the last \r
+ * one before the start of the region\r
+ * ARGUMENTS:\r
+ * list_head = Head of the list of memory areas to search\r
+ * base = base address of the region\r
+ * length = length of the region\r
+ * RETURNS: A pointer to the area found or\r
+ * NULL if the region was before the first region on the list\r
+ */\r
+memory_area* find_first_marea(memory_area* list_head, unsigned int base, \r
+ unsigned int length);\r
+\r
+/*\r
+ * Head of the list of system memory areas \r
+ */\r
+extern memory_area* system_memory_area_list_head;\r
+\r
+/*\r
+ * Head of the list of user memory areas (this should be per process)\r
+ */\r
+extern memory_area* memory_area_list_head;\r
+\r
+#endif\r
--- /dev/null
+\r
+#ifndef __MODULE_H\r
+#define __MODULE_H\r
+\r
+#include <coff.h>\r
+\r
+typedef struct\r
+/*\r
+ * \r
+ */\r
+{ \r
+ unsigned int text_base;\r
+ unsigned int data_base;\r
+ unsigned int bss_base;\r
+ SCNHDR* scn_list;\r
+ char* str_tab;\r
+ SYMENT* sym_list;\r
+ unsigned int size;\r
+\r
+ /*\r
+ * Base address of the module in memory\r
+ */\r
+ unsigned int base;\r
+\r
+ /*\r
+ * Offset of the raw data in memory\r
+ */\r
+ unsigned int raw_data_off;\r
+} module;\r
+\r
+int process_boot_module(unsigned int start);\r
+\r
+#endif\r
+\r
--- /dev/null
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS kernel
+ * FILE: include/internal/objmgr.h
+ * PURPOSE: Object manager definitions
+ * PROGRAMMER: David Welch (welch@mcmail.com)
+ */
+
+#ifndef __INCLUDE_INTERNAL_OBJMGR_H
+#define __INCLUDE_INTERNAL_OBJMGR_H
+
+#include <ddk/types.h>
+
+typedef struct
+{
+ CSHORT Type;
+ CSHORT Size;
+} COMMON_BODY_HEADER, *PCOMMON_BODY_HEADER;
+
+typedef struct _DIRECTORY_OBJECT
+{
+ CSHORT Type;
+ CSHORT Size;
+
+ /*
+ * PURPOSE: Head of the list of our subdirectories
+ */
+ LIST_ENTRY head;
+} DIRECTORY_OBJECT, *PDIRECTORY_OBJECT;
+
+
+/*
+ * Enumeration of object types
+ */
+enum
+{
+ OBJTYP_INVALID,
+ OBJTYP_TYPE,
+ OBJTYP_DIRECTORY,
+ OBJTYP_SYMLNK,
+ OBJTYP_DEVICE,
+ OBJTYP_THREAD,
+ OBJTYP_MAX,
+};
+
+BOOL ObjAddObjectToNameSpace(const char* path, POBJECT_HEADER Object);
+
+VOID ObRegisterType(CSHORT id, OBJECT_TYPE* type);
+
+VOID ObInitializeObjectHeader(CSHORT id, LPCSTR name, POBJECT_HEADER obj);
+
+/*
+ * FUNCTION: Get the size of an object
+ * ARGUMENTS:
+ * Type = Object type
+ * RETURNS: The size in bytes
+ */
+ULONG ObSizeOf(CSHORT Type);
+HANDLE ObAddHandle(PVOID obj);
+
+PVOID ObGetObjectByHandle(HANDLE h);
+PVOID ObLookupObject(PDIRECTORY_OBJECT root, const char* _string);
+PVOID ObGenericCreateObject(PHANDLE Handle,
+ ACCESS_MASK DesiredAccess,
+ POBJECT_ATTRIBUTES ObjectAttributes,
+ CSHORT Type);
+
+/*
+ * FUNCTION: Creates an entry within a directory
+ * ARGUMENTS:
+ * parent = Parent directory
+ * object = Header of the object to add
+ */
+VOID ObCreateEntry(PDIRECTORY_OBJECT parent, POBJECT_HEADER object);
+
+extern inline POBJECT_HEADER BODY_TO_HEADER(PVOID body)
+{
+ PCOMMON_BODY_HEADER chdr = (PCOMMON_BODY_HEADER)body;
+ return(CONTAINING_RECORD((&(chdr->Type)),OBJECT_HEADER,Type));
+}
+
+extern inline PVOID HEADER_TO_BODY(POBJECT_HEADER obj)
+{
+ return(((void *)obj)+sizeof(OBJECT_HEADER)-sizeof(COMMON_BODY_HEADER));
+}
+
+#define OBJECT_ALLOC_SIZE(type) (ObSizeOf(type)+sizeof(OBJECT_HEADER)-sizeof(COMMON_BODY_HEADER))
+
+#endif /* __INCLUDE_INTERNAL_OBJMGR_H */
--- /dev/null
+#ifndef __INTERNAL_POOL_H\r
+#define __INTERNAL_POOL_H\r
+\r
+#include <windows.h>\r
+\r
+#include <internal/linkage.h>\r
+\r
+/*\r
+ * Maximum size of the kmalloc area (this is totally arbitary)\r
+ */\r
+#define NONPAGED_POOL_SIZE (4*1024*1024)\r
+\r
+/*\r
+ * Allocates an arbitary sized block at any alignment\r
+ */\r
+//asmlinkage void* ExAllocatePool(ULONG size);\r
+//asmlinkage void ExFreePool(void* block);\r
+\r
+#endif /* __INTERNAL_POOL_H */\r
--- /dev/null
+#ifndef __INCLUDE_INTERNAL_PSMGR_H\r
+#define __INCLUDE_INTERNAL_PSMGR_H\r
+\r
+#include <internal/hal/hal.h>\r
+\r
+void PsInitThreadManagment(void);\r
+\r
+/*\r
+ * PURPOSE: Thread states\r
+ */\r
+enum\r
+{\r
+ /*\r
+ * PURPOSE: Don't touch \r
+ */\r
+ THREAD_STATE_INVALID,\r
+ \r
+ /*\r
+ * PURPOSE: Waiting to be dispatched\r
+ */\r
+ THREAD_STATE_RUNNABLE,\r
+ \r
+ /*\r
+ * PURPOSE: Currently running\r
+ */\r
+ THREAD_STATE_RUNNING,\r
+ \r
+ /*\r
+ * PURPOSE: Doesn't want to run\r
+ */\r
+ THREAD_STATE_SLEEPING,\r
+ \r
+ /*\r
+ * Waiting to be freed\r
+ */\r
+ THREAD_STATE_TERMINATED,\r
+};\r
+\r
+NTSTATUS PsTerminateSystemThread(NTSTATUS ExitStatus);\r
+\r
+/*\r
+ * Functions the HAL must provide\r
+ */\r
+\r
+void HalInitFirstTask(PTHREAD_OBJECT thread);\r
+void HalInitTask(PTHREAD_OBJECT thread, PKSTART_ROUTINE fn, \r
+ PVOID StartContext);\r
+void HalTaskSwitch(PTHREAD_OBJECT thread);\r
+\r
+#endif\r
--- /dev/null
+/*
+ * Some useful things
+ */
+
+//#define NULL ((void*)0)
+#ifndef NULL
+#define NULL (0)
+#endif
+
+
--- /dev/null
+/*
+ * Adapted from linux for the reactos kernel, march 1998 -- David Welch
+ */
+
+#ifndef _LINUX_STRING_H_
+#define _LINUX_STRING_H_
+
+#include "types.h" /* for size_t */
+
+#ifndef NULL
+#define NULL ((void *) 0)
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+extern char * ___strtok;
+extern char * strcpy(char *,const char *);
+extern char * strncpy(char *,const char *, __kernel_size_t);
+extern char * strcat(char *, const char *);
+extern char * strncat(char *, const char *, __kernel_size_t);
+extern char * strchr(const char *,int);
+extern char * strrchr(const char *,int);
+extern char * strpbrk(const char *,const char *);
+extern char * strtok(char *,const char *);
+extern char * strstr(const char *,const char *);
+extern __kernel_size_t strlen(const char *);
+extern __kernel_size_t strnlen(const char *,__kernel_size_t);
+extern __kernel_size_t strspn(const char *,const char *);
+extern int strcmp(const char *,const char *);
+extern int strncmp(const char *,const char *,__kernel_size_t);
+
+extern void * memset(void *,int,__kernel_size_t);
+extern void * memcpy(void *,const void *,__kernel_size_t);
+extern void * memmove(void *,const void *,__kernel_size_t);
+extern void * memscan(void *,int,__kernel_size_t);
+extern int memcmp(const void *,const void *,__kernel_size_t);
+
+/*
+ * Include machine specific inline routines
+ */
+#ifndef _I386_STRING_H_
+#define _I386_STRING_H_
+
+/*
+ * On a 486 or Pentium, we are better off not using the
+ * byte string operations. But on a 386 or a PPro the
+ * byte string ops are faster than doing it by hand
+ * (MUCH faster on a Pentium).
+ *
+ * Also, the byte strings actually work correctly. Forget
+ * the i486 routines for now as they may be broken..
+ */
+#if FIXED_486_STRING && (CPU == 486 || CPU == 586)
+#include <asm/string-486.h>
+#else
+
+/*
+ * This string-include defines all string functions as inline
+ * functions. Use gcc. It also assumes ds=es=data space, this should be
+ * normal. Most of the string-functions are rather heavily hand-optimized,
+ * see especially strtok,strstr,str[c]spn. They should work, but are not
+ * very easy to understand. Everything is done entirely within the register
+ * set, making the functions fast and clean. String instructions have been
+ * used through-out, making for "slightly" unclear code :-)
+ *
+ * Copyright (C) 1991, 1992 Linus Torvalds
+ */
+
+#define __HAVE_ARCH_STRCPY
+extern inline char * strcpy(char * dest,const char *src)
+{
+__asm__ __volatile__(
+ "cld\n"
+ "1:\tlodsb\n\t"
+ "stosb\n\t"
+ "testb %%al,%%al\n\t"
+ "jne 1b"
+ : /* no output */
+ :"S" (src),"D" (dest):"si","di","ax","memory");
+return dest;
+}
+
+#define __HAVE_ARCH_STRNCPY
+extern inline char * strncpy(char * dest,const char *src,size_t count)
+{
+__asm__ __volatile__(
+ "cld\n"
+ "1:\tdecl %2\n\t"
+ "js 2f\n\t"
+ "lodsb\n\t"
+ "stosb\n\t"
+ "testb %%al,%%al\n\t"
+ "jne 1b\n\t"
+ "rep\n\t"
+ "stosb\n"
+ "2:"
+ : /* no output */
+ :"S" (src),"D" (dest),"c" (count):"si","di","ax","cx","memory");
+return dest;
+}
+
+#define __HAVE_ARCH_STRCAT
+extern inline char * strcat(char * dest,const char * src)
+{
+__asm__ __volatile__(
+ "cld\n\t"
+ "repne\n\t"
+ "scasb\n\t"
+ "decl %1\n"
+ "1:\tlodsb\n\t"
+ "stosb\n\t"
+ "testb %%al,%%al\n\t"
+ "jne 1b"
+ : /* no output */
+ :"S" (src),"D" (dest),"a" (0),"c" (0xffffffff):"si","di","ax","cx");
+return dest;
+}
+
+#define __HAVE_ARCH_STRNCAT
+extern inline char * strncat(char * dest,const char * src,size_t count)
+{
+__asm__ __volatile__(
+ "cld\n\t"
+ "repne\n\t"
+ "scasb\n\t"
+ "decl %1\n\t"
+ "movl %4,%3\n"
+ "1:\tdecl %3\n\t"
+ "js 2f\n\t"
+ "lodsb\n\t"
+ "stosb\n\t"
+ "testb %%al,%%al\n\t"
+ "jne 1b\n"
+ "2:\txorl %2,%2\n\t"
+ "stosb"
+ : /* no output */
+ :"S" (src),"D" (dest),"a" (0),"c" (0xffffffff),"g" (count)
+ :"si","di","ax","cx","memory");
+return dest;
+}
+
+#define __HAVE_ARCH_STRCMP
+extern inline int strcmp(const char * cs,const char * ct)
+{
+register int __res;
+__asm__ __volatile__(
+ "cld\n"
+ "1:\tlodsb\n\t"
+ "scasb\n\t"
+ "jne 2f\n\t"
+ "testb %%al,%%al\n\t"
+ "jne 1b\n\t"
+ "xorl %%eax,%%eax\n\t"
+ "jmp 3f\n"
+ "2:\tsbbl %%eax,%%eax\n\t"
+ "orb $1,%%eax\n"
+ "3:"
+ :"=a" (__res):"S" (cs),"D" (ct):"si","di");
+return __res;
+}
+
+#define __HAVE_ARCH_STRNCMP
+extern inline int strncmp(const char * cs,const char * ct,size_t count)
+{
+register int __res;
+__asm__ __volatile__(
+ "cld\n"
+ "1:\tdecl %3\n\t"
+ "js 2f\n\t"
+ "lodsb\n\t"
+ "scasb\n\t"
+ "jne 3f\n\t"
+ "testb %%al,%%al\n\t"
+ "jne 1b\n"
+ "2:\txorl %%eax,%%eax\n\t"
+ "jmp 4f\n"
+ "3:\tsbbl %%eax,%%eax\n\t"
+ "orb $1,%%al\n"
+ "4:"
+ :"=a" (__res):"S" (cs),"D" (ct),"c" (count):"si","di","cx");
+return __res;
+}
+
+#define __HAVE_ARCH_STRCHR
+extern inline char * strchr(const char * s, int c)
+{
+register char * __res;
+__asm__ __volatile__(
+ "cld\n\t"
+ "movb %%al,%%ah\n"
+ "1:\tlodsb\n\t"
+ "cmpb %%ah,%%al\n\t"
+ "je 2f\n\t"
+ "testb %%al,%%al\n\t"
+ "jne 1b\n\t"
+ "movl $1,%1\n"
+ "2:\tmovl %1,%0\n\t"
+ "decl %0"
+ :"=a" (__res):"S" (s),"0" (c):"si");
+return __res;
+}
+
+#define __HAVE_ARCH_STRRCHR
+extern inline char * strrchr(const char * s, int c)
+{
+register char * __res;
+__asm__ __volatile__(
+ "cld\n\t"
+ "movb %%al,%%ah\n"
+ "1:\tlodsb\n\t"
+ "cmpb %%ah,%%al\n\t"
+ "jne 2f\n\t"
+ "leal -1(%%esi),%0\n"
+ "2:\ttestb %%al,%%al\n\t"
+ "jne 1b"
+ :"=d" (__res):"0" (0),"S" (s),"a" (c):"ax","si");
+return __res;
+}
+
+#define __HAVE_ARCH_STRSPN
+extern inline size_t strspn(const char * cs, const char * ct)
+{
+register char * __res;
+__asm__ __volatile__(
+ "cld\n\t"
+ "movl %4,%%edi\n\t"
+ "repne\n\t"
+ "scasb\n\t"
+ "notl %%ecx\n\t"
+ "decl %%ecx\n\t"
+ "movl %%ecx,%%edx\n"
+ "1:\tlodsb\n\t"
+ "testb %%al,%%al\n\t"
+ "je 2f\n\t"
+ "movl %4,%%edi\n\t"
+ "movl %%edx,%%ecx\n\t"
+ "repne\n\t"
+ "scasb\n\t"
+ "je 1b\n"
+ "2:\tdecl %0"
+ :"=S" (__res):"a" (0),"c" (0xffffffff),"0" (cs),"g" (ct)
+ :"ax","cx","dx","di");
+return __res-cs;
+}
+
+#define __HAVE_ARCH_STRCSPN
+extern inline size_t strcspn(const char * cs, const char * ct)
+{
+register char * __res;
+__asm__ __volatile__(
+ "cld\n\t"
+ "movl %4,%%edi\n\t"
+ "repne\n\t"
+ "scasb\n\t"
+ "notl %%ecx\n\t"
+ "decl %%ecx\n\t"
+ "movl %%ecx,%%edx\n"
+ "1:\tlodsb\n\t"
+ "testb %%al,%%al\n\t"
+ "je 2f\n\t"
+ "movl %4,%%edi\n\t"
+ "movl %%edx,%%ecx\n\t"
+ "repne\n\t"
+ "scasb\n\t"
+ "jne 1b\n"
+ "2:\tdecl %0"
+ :"=S" (__res):"a" (0),"c" (0xffffffff),"0" (cs),"g" (ct)
+ :"ax","cx","dx","di");
+return __res-cs;
+}
+
+#define __HAVE_ARCH_STRPBRK
+extern inline char * strpbrk(const char * cs,const char * ct)
+{
+register char * __res;
+__asm__ __volatile__(
+ "cld\n\t"
+ "movl %4,%%edi\n\t"
+ "repne\n\t"
+ "scasb\n\t"
+ "notl %%ecx\n\t"
+ "decl %%ecx\n\t"
+ "movl %%ecx,%%edx\n"
+ "1:\tlodsb\n\t"
+ "testb %%al,%%al\n\t"
+ "je 2f\n\t"
+ "movl %4,%%edi\n\t"
+ "movl %%edx,%%ecx\n\t"
+ "repne\n\t"
+ "scasb\n\t"
+ "jne 1b\n\t"
+ "decl %0\n\t"
+ "jmp 3f\n"
+ "2:\txorl %0,%0\n"
+ "3:"
+ :"=S" (__res):"a" (0),"c" (0xffffffff),"0" (cs),"g" (ct)
+ :"ax","cx","dx","di");
+return __res;
+}
+
+#define __HAVE_ARCH_STRSTR
+extern inline char * strstr(const char * cs,const char * ct)
+{
+register char * __res;
+__asm__ __volatile__(
+ "cld\n\t" \
+ "movl %4,%%edi\n\t"
+ "repne\n\t"
+ "scasb\n\t"
+ "notl %%ecx\n\t"
+ "decl %%ecx\n\t" /* NOTE! This also sets Z if searchstring='' */
+ "movl %%ecx,%%edx\n"
+ "1:\tmovl %4,%%edi\n\t"
+ "movl %%esi,%%eax\n\t"
+ "movl %%edx,%%ecx\n\t"
+ "repe\n\t"
+ "cmpsb\n\t"
+ "je 2f\n\t" /* also works for empty string, see above */
+ "xchgl %%eax,%%esi\n\t"
+ "incl %%esi\n\t"
+ "cmpb $0,-1(%%eax)\n\t"
+ "jne 1b\n\t"
+ "xorl %%eax,%%eax\n\t"
+ "2:"
+ :"=a" (__res):"0" (0),"c" (0xffffffff),"S" (cs),"g" (ct)
+ :"cx","dx","di","si");
+return __res;
+}
+
+#define __HAVE_ARCH_STRLEN
+extern inline size_t strlen(const char * s)
+{
+register int __res;
+__asm__ __volatile__(
+ "cld\n\t"
+ "repne\n\t"
+ "scasb\n\t"
+ "notl %0\n\t"
+ "decl %0"
+ :"=c" (__res):"D" (s),"a" (0),"0" (0xffffffff):"di");
+return __res;
+}
+
+#define __HAVE_ARCH_STRTOK
+extern inline char * strtok(char * s,const char * ct)
+{
+register char * __res;
+__asm__ __volatile__(
+ "testl %1,%1\n\t"
+ "jne 1f\n\t"
+ "testl %0,%0\n\t"
+ "je 8f\n\t"
+ "movl %0,%1\n"
+ "1:\txorl %0,%0\n\t"
+ "movl $-1,%%ecx\n\t"
+ "xorl %%eax,%%eax\n\t"
+ "cld\n\t"
+ "movl %4,%%edi\n\t"
+ "repne\n\t"
+ "scasb\n\t"
+ "notl %%ecx\n\t"
+ "decl %%ecx\n\t"
+ "je 7f\n\t" /* empty delimiter-string */
+ "movl %%ecx,%%edx\n"
+ "2:\tlodsb\n\t"
+ "testb %%al,%%al\n\t"
+ "je 7f\n\t"
+ "movl %4,%%edi\n\t"
+ "movl %%edx,%%ecx\n\t"
+ "repne\n\t"
+ "scasb\n\t"
+ "je 2b\n\t"
+ "decl %1\n\t"
+ "cmpb $0,(%1)\n\t"
+ "je 7f\n\t"
+ "movl %1,%0\n"
+ "3:\tlodsb\n\t"
+ "testb %%al,%%al\n\t"
+ "je 5f\n\t"
+ "movl %4,%%edi\n\t"
+ "movl %%edx,%%ecx\n\t"
+ "repne\n\t"
+ "scasb\n\t"
+ "jne 3b\n\t"
+ "decl %1\n\t"
+ "cmpb $0,(%1)\n\t"
+ "je 5f\n\t"
+ "movb $0,(%1)\n\t"
+ "incl %1\n\t"
+ "jmp 6f\n"
+ "5:\txorl %1,%1\n"
+ "6:\tcmpb $0,(%0)\n\t"
+ "jne 7f\n\t"
+ "xorl %0,%0\n"
+ "7:\ttestl %0,%0\n\t"
+ "jne 8f\n\t"
+ "movl %0,%1\n"
+ "8:"
+ :"=b" (__res),"=S" (___strtok)
+ :"0" (___strtok),"1" (s),"g" (ct)
+ :"ax","cx","dx","di","memory");
+return __res;
+}
+
+extern inline void * __memcpy(void * to, const void * from, size_t n)
+{
+__asm__ __volatile__(
+ "cld\n\t"
+ "rep ; movsl\n\t"
+ "testb $2,%b1\n\t"
+ "je 1f\n\t"
+ "movsw\n"
+ "1:\ttestb $1,%b1\n\t"
+ "je 2f\n\t"
+ "movsb\n"
+ "2:"
+ : /* no output */
+ :"c" (n/4), "q" (n),"D" ((long) to),"S" ((long) from)
+ : "cx","di","si","memory");
+return (to);
+}
+
+/*
+ * This looks horribly ugly, but the compiler can optimize it totally,
+ * as the count is constant.
+ */
+extern inline void * __constant_memcpy(void * to, const void * from, size_t n)
+{
+ switch (n) {
+ case 0:
+ return to;
+ case 1:
+ *(unsigned char *)to = *(const unsigned char *)from;
+ return to;
+ case 2:
+ *(unsigned short *)to = *(const unsigned short *)from;
+ return to;
+ case 3:
+ *(unsigned short *)to = *(const unsigned short *)from;
+ *(2+(unsigned char *)to) = *(2+(const unsigned char *)from);
+ return to;
+ case 4:
+ *(unsigned long *)to = *(const unsigned long *)from;
+ return to;
+ case 8:
+ *(unsigned long *)to = *(const unsigned long *)from;
+ *(1+(unsigned long *)to) = *(1+(const unsigned long *)from);
+ return to;
+ case 12:
+ *(unsigned long *)to = *(const unsigned long *)from;
+ *(1+(unsigned long *)to) = *(1+(const unsigned long *)from);
+ *(2+(unsigned long *)to) = *(2+(const unsigned long *)from);
+ return to;
+ case 16:
+ *(unsigned long *)to = *(const unsigned long *)from;
+ *(1+(unsigned long *)to) = *(1+(const unsigned long *)from);
+ *(2+(unsigned long *)to) = *(2+(const unsigned long *)from);
+ *(3+(unsigned long *)to) = *(3+(const unsigned long *)from);
+ return to;
+ case 20:
+ *(unsigned long *)to = *(const unsigned long *)from;
+ *(1+(unsigned long *)to) = *(1+(const unsigned long *)from);
+ *(2+(unsigned long *)to) = *(2+(const unsigned long *)from);
+ *(3+(unsigned long *)to) = *(3+(const unsigned long *)from);
+ *(4+(unsigned long *)to) = *(4+(const unsigned long *)from);
+ return to;
+ }
+#define COMMON(x) \
+__asm__("cld\n\t" \
+ "rep ; movsl" \
+ x \
+ : /* no outputs */ \
+ : "c" (n/4),"D" ((long) to),"S" ((long) from) \
+ : "cx","di","si","memory");
+
+ switch (n % 4) {
+ case 0: COMMON(""); return to;
+ case 1: COMMON("\n\tmovsb"); return to;
+ case 2: COMMON("\n\tmovsw"); return to;
+ case 3: COMMON("\n\tmovsw\n\tmovsb"); return to;
+ }
+#undef COMMON
+}
+
+#define __HAVE_ARCH_MEMCPY
+#define memcpy(t, f, n) \
+(__builtin_constant_p(n) ? \
+ __constant_memcpy((t),(f),(n)) : \
+ __memcpy((t),(f),(n)))
+
+#define __HAVE_ARCH_MEMMOVE
+extern inline void * memmove(void * dest,const void * src, size_t n)
+{
+if (dest<src)
+__asm__ __volatile__(
+ "cld\n\t"
+ "rep\n\t"
+ "movsb"
+ : /* no output */
+ :"c" (n),"S" (src),"D" (dest)
+ :"cx","si","di");
+else
+__asm__ __volatile__(
+ "std\n\t"
+ "rep\n\t"
+ "movsb\n\t"
+ "cld"
+ : /* no output */
+ :"c" (n),
+ "S" (n-1+(const char *)src),
+ "D" (n-1+(char *)dest)
+ :"cx","si","di","memory");
+return dest;
+}
+
+#define memcmp __builtin_memcmp
+
+#define __HAVE_ARCH_MEMCHR
+extern inline void * memchr(const void * cs,int c,size_t count)
+{
+register void * __res;
+if (!count)
+ return NULL;
+__asm__ __volatile__(
+ "cld\n\t"
+ "repne\n\t"
+ "scasb\n\t"
+ "je 1f\n\t"
+ "movl $1,%0\n"
+ "1:\tdecl %0"
+ :"=D" (__res):"a" (c),"D" (cs),"c" (count)
+ :"cx");
+return __res;
+}
+
+extern inline void * __memset_generic(void * s, char c,size_t count)
+{
+__asm__ __volatile__(
+ "cld\n\t"
+ "rep\n\t"
+ "stosb"
+ : /* no output */
+ :"a" (c),"D" (s),"c" (count)
+ :"cx","di","memory");
+return s;
+}
+
+/* we might want to write optimized versions of these later */
+#define __constant_count_memset(s,c,count) __memset_generic((s),(c),(count))
+
+/*
+ * memset(x,0,y) is a reasonably common thing to do, so we want to fill
+ * things 32 bits at a time even when we don't know the size of the
+ * area at compile-time..
+ */
+extern inline void * __constant_c_memset(void * s, unsigned long c, size_t count)
+{
+__asm__ __volatile__(
+ "cld\n\t"
+ "rep ; stosl\n\t"
+ "testb $2,%b1\n\t"
+ "je 1f\n\t"
+ "stosw\n"
+ "1:\ttestb $1,%b1\n\t"
+ "je 2f\n\t"
+ "stosb\n"
+ "2:"
+ : /* no output */
+ :"a" (c), "q" (count), "c" (count/4), "D" ((long) s)
+ :"cx","di","memory");
+return (s);
+}
+
+/* Added by Gertjan van Wingerde to make minix and sysv module work */
+#define __HAVE_ARCH_STRNLEN
+extern inline size_t strnlen(const char * s, size_t count)
+{
+register int __res;
+__asm__ __volatile__(
+ "movl %1,%0\n\t"
+ "jmp 2f\n"
+ "1:\tcmpb $0,(%0)\n\t"
+ "je 3f\n\t"
+ "incl %0\n"
+ "2:\tdecl %2\n\t"
+ "cmpl $-1,%2\n\t"
+ "jne 1b\n"
+ "3:\tsubl %1,%0"
+ :"=a" (__res)
+ :"c" (s),"d" (count)
+ :"dx");
+return __res;
+}
+/* end of additional stuff */
+
+/*
+ * This looks horribly ugly, but the compiler can optimize it totally,
+ * as we by now know that both pattern and count is constant..
+ */
+extern inline void * __constant_c_and_count_memset(void * s, unsigned long pattern, size_t count)
+{
+ switch (count) {
+ case 0:
+ return s;
+ case 1:
+ *(unsigned char *)s = pattern;
+ return s;
+ case 2:
+ *(unsigned short *)s = pattern;
+ return s;
+ case 3:
+ *(unsigned short *)s = pattern;
+ *(2+(unsigned char *)s) = pattern;
+ return s;
+ case 4:
+ *(unsigned long *)s = pattern;
+ return s;
+ }
+#define COMMON(x) \
+__asm__("cld\n\t" \
+ "rep ; stosl" \
+ x \
+ : /* no outputs */ \
+ : "a" (pattern),"c" (count/4),"D" ((long) s) \
+ : "cx","di","memory")
+
+ switch (count % 4) {
+ case 0: COMMON(""); return s;
+ case 1: COMMON("\n\tstosb"); return s;
+ case 2: COMMON("\n\tstosw"); return s;
+ case 3: COMMON("\n\tstosw\n\tstosb"); return s;
+ }
+#undef COMMON
+}
+
+#define __constant_c_x_memset(s, c, count) \
+(__builtin_constant_p(count) ? \
+ __constant_c_and_count_memset((s),(c),(count)) : \
+ __constant_c_memset((s),(c),(count)))
+
+#define __memset(s, c, count) \
+(__builtin_constant_p(count) ? \
+ __constant_count_memset((s),(c),(count)) : \
+ __memset_generic((s),(c),(count)))
+
+#define __HAVE_ARCH_MEMSET
+#define memset(s, c, count) \
+(__builtin_constant_p(c) ? \
+ __constant_c_x_memset((s),(0x01010101UL*(unsigned char)c),(count)) : \
+ __memset((s),(c),(count)))
+
+/*
+ * find the first occurrence of byte 'c', or 1 past the area if none
+ */
+#define __HAVE_ARCH_MEMSCAN
+extern inline void * memscan(void * addr, int c, size_t size)
+{
+ if (!size)
+ return addr;
+ __asm__("cld
+ repnz; scasb
+ jnz 1f
+ dec %%edi
+1: "
+ : "=D" (addr), "=c" (size)
+ : "0" (addr), "1" (size), "a" (c));
+ return addr;
+}
+
+#endif
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _LINUX_STRING_H_ */
--- /dev/null
+/*
+ *
+ */
+
+#include "stddef.h"
+
+typedef struct
+{
+ char* name;
+ unsigned int value;
+} export;
+
+extern export symbol_table[];
--- /dev/null
+#ifndef _LINUX_TYPES_H
+#define _LINUX_TYPES_H
+
+#ifndef NULL
+# define NULL ((void *) 0)
+#endif
+
+
+#ifndef _I386_TYPES_H
+#define _I386_TYPES_H
+
+/*
+ * __xx is ok: it doesn't pollute the POSIX namespace. Use these in the
+ * header files exported to user space
+ */
+
+typedef __signed__ char __s8;
+typedef unsigned char __u8;
+
+typedef __signed__ short __s16;
+typedef unsigned short __u16;
+
+typedef __signed__ int __s32;
+typedef unsigned int __u32;
+
+#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
+typedef __signed__ long long __s64;
+typedef unsigned long long __u64;
+#endif
+
+/*
+ * These aren't exported outside the kernel to avoid name space clashes
+ */
+#ifdef __KERNEL__
+
+typedef signed char s8;
+typedef unsigned char u8;
+
+typedef signed short s16;
+typedef unsigned short u16;
+
+typedef signed int s32;
+typedef unsigned int u32;
+
+typedef signed long long s64;
+typedef unsigned long long u64;
+
+#endif /* __KERNEL__ */
+
+#endif
+
+
+typedef unsigned int size_t;
+typedef size_t __kernel_size_t;
+
+#endif /* _LINUX_TYPES_H */
--- /dev/null
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS kernel
+ * FILE: include/internal/version.h
+ * PURPOSE: Defines the current version
+ * PROGRAMMER: David Welch (welch@mcmail.com)
+ */
+
+#ifndef __VERSION_H
+#define __VERSION_H
+
+#define KERNEL_VERSION "0.0.7"
+#define KERNEL_MAJOR_VERSION 0
+#define KERNEL_MINOR_VERSION 0
+#define KERNEL_PATCH_LEVEL 7
+
+#endif
--- /dev/null
+
+/********************************************************************
+
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public License as
+published by the Free Software Foundation; either version 2 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
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with this library; see the file COPYING.LIB. If
+not, write to the Free Software Foundation, Inc., 675 Mass Ave,
+Cambridge, MA 02139, USA.
+
+
+********************************************************************/
+
+#ifndef Atoms__h
+#define Atoms__h
+
+#include <windows.h>
+#include <ctype.h>
+//#include <types.h>
+
+
+typedef unsigned long ATOMID;
+
+typedef struct {
+ ATOMID q; /* what a string 'hashes' to */
+ long idx; /* index into data table */
+ long refcnt; /* how many clients have it */
+ long idsize; /* space used by this slot */
+} ATOMENTRY;
+typedef ATOMENTRY *LPATOMENTRY;
+
+typedef struct {
+ ATOMENTRY *AtomTable; /* pointer to table data */
+ wchar_t *AtomData; /* pointer to name data */
+ unsigned long TableSize; /* number items in this table */
+ unsigned long DataSize; /* space used by string data */
+ LPVOID lpDrvData;
+} ATOMTABLE;
+typedef ATOMTABLE *LPATOMTABLE;
+
+
+
+
+
+
+
+
+#endif /* Atoms__h */
--- /dev/null
+/*
+ * kernel/heap.c
+ * Copyright (C) 1996, Onno Hovers, All rights reserved
+ * Adapted for the ReactOS system libraries by David Welch (welch@mcmail.com)
+ * todo: __processheap should be part of peb.
+ */
+
+#ifndef __INCLUDE_KERNEL32_HEAP_H
+#define __INCLUDE_KERNEL32_HEAP_H
+
+/* System wide includes ****************************************************/
+#include <windows.h>
+
+/* System library's private includes ***************************************/
+
+#include <ntdll/pagesize.h>
+
+/* definitions */
+#define HEAP_ADMIN_SIZE 8
+#define HEAP_FRAG_ADMIN_SIZE 8
+#define HEAP_ROUNDVAL (2*(HEAP_ADMIN_SIZE)-1)
+#define HEAP_FRAGMENT_THRESHOLD 256
+
+#define SIZE_TOTAL(s) ROUNDUP((s)+HEAP_ADMIN_SIZE,8)
+#define SIZE_ROUND(s) ROUNDUP((s),8)
+
+#define HEAP_FRAG_MAGIC 0x10
+#define HEAP_ALLOC_MASK 0xF0000000
+#define HEAP_FREE_MASK 0x80000000
+#define HEAP_SIZE_MASK 0x0FFFFFFF
+#define HEAP_FREE_TAG 0x80000000 /* free region */
+#define HEAP_NORMAL_TAG 0x30000000 /* normal allocation */
+#define HEAP_MOVEABLE_TAG 0x50000000 /* moveable handle */
+#define HEAP_SUB_TAG 0x70000000 /* suballocated for fragments */
+
+#define HEAP_ISFREE(p) ((((PHEAP_BLOCK)p)->Size) & HEAP_FREE_MASK)
+#define HEAP_ISALLOC(p) (((((PHEAP_BLOCK)p)->Size) & HEAP_FREE_MASK)==0)
+#define HEAP_ISFRAG(p) ((((PHEAP_FRAGMENT)p)->Magic)==HEAP_FRAG_MAGIC)
+#define HEAP_ISNORMAL(p) (((((PHEAP_BLOCK)p)->Size) & HEAP_ALLOC_MASK)\
+ ==HEAP_NORMAL_TAG)
+#define HEAP_ISSUB(p) (((((PHEAP_BLOCK)p)->Size) & HEAP_ALLOC_MASK)\
+ ==HEAP_SUB_TAG)
+#define HEAP_ISOLD(p) (((((PHEAP_BLOCK)p)->Size) & HEAP_ALLOC_MASK)\
+ ==HEAP_MOVEABLE_TAG)
+
+#define HEAP_SIZE(p) ((((PHEAP_BLOCK)p)->Size) & HEAP_SIZE_MASK )
+#define HEAP_RSIZE(p) SIZE_ROUND(HEAP_SIZE(p))
+#define HEAP_TSIZE(p) SIZE_TOTAL(HEAP_SIZE(p))
+#define HEAP_PREVSIZE(p) ((((PHEAP_BLOCK)p)->PrevSize) & HEAP_SIZE_MASK )
+#define HEAP_FRAG_SIZE(p) (((PHEAP_FRAGMENT)p)->Size)
+
+#define HEAP_PREV(p) ((PHEAP_BLOCK)(((LPVOID)(p))-HEAP_PREVSIZE(p)))
+#define HEAP_NEXT(p) ((PHEAP_BLOCK)(((LPVOID)(p))+HEAP_TSIZE(p)))
+
+typedef struct __HEAP_BLOCK
+{
+ ULONG Size; /* this is relative to Data */
+ ULONG PrevSize; /* p - p->PrevSize is the previous block */
+} HEAP_BLOCK, *PHEAP_BLOCK;
+
+struct __HEAP_SUBALLOC;
+
+typedef struct __HEAP_FRAGMENT
+{
+ UCHAR Magic;
+ UCHAR Number;
+ ULONG Size;
+ struct __HEAP_SUBALLOC *Sub;
+
+ /* this is only used in free blocks */
+ struct __HEAP_FRAGMENT *FreeNext;
+ struct __HEAP_FRAGMENT *FreePrev;
+} HEAP_FRAGMENT, *PHEAP_FRAGMENT, *LPHEAP_FRAGMENT;
+
+typedef struct __HEAP_SUBALLOC
+{
+ ULONG Magic;
+ ULONG NumberFree;
+ struct __HEAP_SUBALLOC *Next;
+
+ struct __HEAP_SUBALLOC *Prev;
+ struct __HEAP_FRAGMENT *FirstFree;
+ struct __HEAP_BUCKET *Bucket;
+ ULONG Bitmap;
+} HEAP_SUBALLOC, *PHEAP_SUBALLOC, *LPHEAP_SUBALLOC;
+
+typedef struct __HEAP_BUCKET
+{
+ struct __HEAP_SUBALLOC *FirstFree;
+ ULONG Size;
+ ULONG Number;
+ ULONG TotalSize;
+} HEAP_BUCKET, *PHEAP_BUCKET, *LPHEAP_BUCKET;
+
+typedef struct __HEAP
+{
+ ULONG Magic;
+ LPVOID End;
+ ULONG Flags;
+ CRITICAL_SECTION Synchronize;
+ HEAP_BUCKET Bucket[8];
+ struct __HEAP *NextHeap;
+ LPVOID LastBlock;
+ /* this has to aligned on an 8 byte boundary */
+ HEAP_BLOCK Start __attribute__((aligned (8)));
+} HEAP, *PHEAP;
+
+PHEAP __ProcessHeap;
+
+#endif /* __INCLUDE_KERNEL32_HEAP_H */
--- /dev/null
+
+#ifndef __PEB_DEFINED
+#define __PEB_DEFINED
+
+#include "heap.h"
+
+typedef void* HANDLE_TABLE;
+
+typedef struct _pPebInfo {
+ LPWSTR lpCommandLine;
+ DWORD cb;
+ HANDLE hStdInput; //18
+ HANDLE hStdOutput;
+ HANDLE hStdError;
+ LPWSTR lpEnvironment;
+ DWORD dwX;
+ DWORD dwY;
+ DWORD dwXSize;
+ DWORD dwYSize;
+ DWORD dwXCountChars;
+ DWORD dwYCountChars;
+ DWORD dwFillAttribute;
+ DWORD dwFlags;
+ DWORD wShowWindow;
+ LPTSTR lpTitle;
+ LPTSTR lpDesktop;
+ LPTSTR reserved;
+ DWORD cbReserved2;
+ LPTSTR lpReserved1;
+} PEBINFO;
+
+typedef struct _NT_PEB
+{
+
+ LONG ImageBaseAddress;
+ void *HeapIndex;
+ DWORD dwTlsBits[2]; // tls in use bits
+ WORD NumberOfProcessors;
+ WORD NtGlobalFlag;
+ DWORD dwCriticalSectionTimeout;
+ DWORD dwHeapReserve;
+ DWORD dwHeapCommit;
+ DWORD dwHeapDecommitFreeBlockThreshold;
+ DWORD dwNumberOfHeaps;
+ DWORD dwMaxiumNumberOfHeaps;
+ PEBINFO *pPebInfo;
+ HEAP *pProcessHeap;
+ HANDLE_TABLE htGDISharedHandleTable;
+ ATOMTABLE LocalAtomTable;
+ CRITICAL_SECTION *pCriticalSection;
+ WORD wMajorVersion;
+ WORD wMinorVersion;
+ WORD wBuildNumber;
+ WORD wPlatformId;
+
+} NT_PEB;
+
+NT_PEB *GetPeb()
+{
+ return NULL;
+}
+
+#endif
--- /dev/null
+/*
+This file contains a proposal for Thread Environment Block.
+*/
+#ifndef __TEB_DEFINED
+#define __TEB_DEFINED
+
+
+typedef struct _NT_TIB {
+
+ struct _EXCEPTION_REGISTRATION_RECORD *ExceptionList;
+
+ void *StackBase;
+ void *StackLimit;
+ void *SubSystemTib;
+ union {
+ void *FiberData;
+ DWORD Version;
+ };
+ void *ArbitraryUserPointer;
+ struct _NT_TIB *Self;
+
+} NT_TIB;
+
+
+
+
+
+typedef struct _NT_TEB
+{
+
+ NT_TIB Tib;
+ DWORD dwProcessId;
+ DWORD dwThreadId;
+ HANDLE hRPC;
+ NT_PEB *pPeb;
+ DWORD dwErrCode;
+ WORD nMutexCount;
+ LCID Locale;
+ //HQUEUE MessageQueue
+ DWORD dwTlsIndex ;
+ LPVOID TlsData[512];
+
+
+} NT_TEB;
+
+
+// should be an inline asm macro
+
+NT_TEB *GetTeb()
+{
+ return NULL;
+}
+
+#endif
+
+
--- /dev/null
+/*
+ Messages.h
+
+ Windows32 API message definitions
+
+ Copyright (C) 1996 Free Software Foundation, Inc.
+
+ Author: Scott Christley <scottc@net-community.com>
+
+ This file is part of the Windows32 API Library.
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 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
+ Library General Public License for more details.
+
+ If you are interested in a warranty or support for this source code,
+ contact Scott Christley <scottc@net-community.com> for more information.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this library; see the file COPYING.LIB.
+ If not, write to the Free Software Foundation,
+ 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+*/
+/* WARNING: This file is automatically generated. */
+
+#ifndef _GNU_H_WINDOWS32_MESSAGES
+#define _GNU_H_WINDOWS32_MESSAGES
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+
+/* Application bar */
+
+/* Application bar notifications */
+
+/* Animation Control */
+#define ACM_OPENW (1127)
+#define ACM_OPENA (1124)
+#ifdef UNICODE
+#define ACM_OPEN ACM_OPENW
+#else
+#define ACM_OPEN ACM_OPENA
+#endif /* UNICODE */
+#define ACM_PLAY (1125)
+#define ACM_STOP (1126)
+#define ACN_START (1)
+#define ACN_STOP (2)
+
+/* Buttons */
+#define BM_CLICK (245)
+#define BM_GETCHECK (240)
+#define BM_GETIMAGE (246)
+#define BM_GETSTATE (242)
+#define BM_SETCHECK (241)
+#define BM_SETIMAGE (247)
+#define BM_SETSTATE (243)
+#define BM_SETSTYLE (244)
+#define BN_CLICKED (0)
+#define BN_DBLCLK (5)
+#define BN_DISABLE (4)
+#define BN_DOUBLECLICKED (5)
+#define BN_HILITE (2)
+#define BN_KILLFOCUS (7)
+#define BN_PAINT (1)
+#define BN_PUSHED (2)
+#define BN_SETFOCUS (6)
+#define BN_UNHILITE (3)
+#define BN_UNPUSHED (3)
+
+/* Combo Box */
+#define CB_ADDSTRING (323)
+#define CB_DELETESTRING (324)
+#define CB_DIR (325)
+#define CB_FINDSTRING (332)
+#define CB_FINDSTRINGEXACT (344)
+#define CB_GETCOUNT (326)
+#define CB_GETCURSEL (327)
+#define CB_GETDROPPEDCONTROLRECT (338)
+#define CB_GETDROPPEDSTATE (343)
+#define CB_GETDROPPEDWIDTH (351)
+#define CB_GETEDITSEL (320)
+#define CB_GETEXTENDEDUI (342)
+#define CB_GETHORIZONTALEXTENT (349)
+#define CB_GETITEMDATA (336)
+#define CB_GETITEMHEIGHT (340)
+#define CB_GETLBTEXT (328)
+#define CB_GETLBTEXTLEN (329)
+#define CB_GETLOCALE (346)
+#define CB_GETTOPINDEX (347)
+#define CB_INITSTORAGE (353)
+#define CB_INSERTSTRING (330)
+#define CB_LIMITTEXT (321)
+#define CB_RESETCONTENT (331)
+#define CB_SELECTSTRING (333)
+#define CB_SETCURSEL (334)
+#define CB_SETDROPPEDWIDTH (352)
+#define CB_SETEDITSEL (322)
+#define CB_SETEXTENDEDUI (341)
+#define CB_SETHORIZONTALEXTENT (350)
+#define CB_SETITEMDATA (337)
+#define CB_SETITEMHEIGHT (339)
+#define CB_SETLOCALE (345)
+#define CB_SETTOPINDEX (348)
+#define CB_SHOWDROPDOWN (335)
+
+/* Combo Box notifications */
+#define CBN_CLOSEUP (8)
+#define CBN_DBLCLK (2)
+#define CBN_DROPDOWN (7)
+#define CBN_EDITCHANGE (5)
+#define CBN_EDITUPDATE (6)
+#define CBN_ERRSPACE (-1)
+#define CBN_KILLFOCUS (4)
+#define CBN_SELCHANGE (1)
+#define CBN_SELENDCANCEL (10)
+#define CBN_SELENDOK (9)
+#define CBN_SETFOCUS (3)
+
+/* Control Panel */
+
+/* Device messages */
+
+/* Drag list box */
+#define DL_BEGINDRAG (1157)
+#define DL_CANCELDRAG (1160)
+#define DL_DRAGGING (1158)
+#define DL_DROPPED (1159)
+
+/* Default push button */
+#define DM_GETDEFID (1024)
+#define DM_REPOSITION (1026)
+#define DM_SETDEFID (1025)
+
+/* RTF control */
+#define EM_CANPASTE (1074)
+#define EM_CANUNDO (198)
+#define EM_CHARFROMPOS (215)
+#define EM_DISPLAYBAND (1075)
+#define EM_EMPTYUNDOBUFFER (205)
+#define EM_EXGETSEL (1076)
+#define EM_EXLIMITTEXT (1077)
+#define EM_EXLINEFROMCHAR (1078)
+#define EM_EXSETSEL (1079)
+#define EM_FINDTEXT (1080)
+#define EM_FINDTEXTEX (1103)
+#define EM_FINDWORDBREAK (1100)
+#define EM_FMTLINES (200)
+#define EM_FORMATRANGE (1081)
+#define EM_GETCHARFORMAT (1082)
+#define EM_GETEVENTMASK (1083)
+#define EM_GETFIRSTVISIBLELINE (206)
+#define EM_GETHANDLE (189)
+#define EM_GETLIMITTEXT (213)
+#define EM_GETLINE (196)
+#define EM_GETLINECOUNT (186)
+#define EM_GETMARGINS (212)
+#define EM_GETMODIFY (184)
+#define EM_GETIMECOLOR (1129)
+#define EM_GETIMEOPTIONS (1131)
+#define EM_GETOPTIONS (1102)
+#define EM_GETOLEINTERFACE (1084)
+#define EM_GETPARAFORMAT (1085)
+#define EM_GETPASSWORDCHAR (210)
+#define EM_GETPUNCTUATION (1125)
+#define EM_GETRECT (178)
+#define EM_GETSEL (176)
+#define EM_GETSELTEXT (1086)
+#define EM_GETTEXTRANGE (1099)
+#define EM_GETTHUMB (190)
+#define EM_GETWORDBREAKPROC (209)
+#define EM_GETWORDBREAKPROCEX (1104)
+#define EM_GETWORDWRAPMODE (1127)
+#define EM_HIDESELECTION (1087)
+#define EM_LIMITTEXT (197)
+#define EM_LINEFROMCHAR (201)
+#define EM_LINEINDEX (187)
+#define EM_LINELENGTH (193)
+#define EM_LINESCROLL (182)
+#define EM_PASTESPECIAL (1088)
+#define EM_POSFROMCHAR (214)
+#define EM_REPLACESEL (194)
+#define EM_REQUESTRESIZE (1089)
+#define EM_SCROLL (181)
+#define EM_SCROLLCARET (183)
+#define EM_SELECTIONTYPE (1090)
+#define EM_SETBKGNDCOLOR (1091)
+#define EM_SETCHARFORMAT (1092)
+#define EM_SETEVENTMASK (1093)
+#define EM_SETHANDLE (188)
+#define EM_SETIMECOLOR (1128)
+#define EM_SETIMEOPTIONS (1130)
+#define EM_SETLIMITTEXT (197)
+#define EM_SETMARGINS (211)
+#define EM_SETMODIFY (185)
+#define EM_SETOLECALLBACK (1094)
+#define EM_SETOPTIONS (1101)
+#define EM_SETPARAFORMAT (1095)
+#define EM_SETPASSWORDCHAR (204)
+#define EM_SETPUNCTUATION (1124)
+#define EM_SETREADONLY (207)
+#define EM_SETRECT (179)
+#define EM_SETRECTNP (180)
+#define EM_SETSEL (177)
+#define EM_SETTABSTOPS (203)
+#define EM_SETTARGETDEVICE (1096)
+#define EM_SETWORDBREAKPROC (208)
+#define EM_SETWORDBREAKPROCEX (1105)
+#define EM_SETWORDWRAPMODE (1126)
+#define EM_STREAMIN (1097)
+#define EM_STREAMOUT (1098)
+#define EM_UNDO (199)
+
+/* Edit control */
+#define EN_CHANGE (768)
+#define EN_CORRECTTEXT (1797)
+#define EN_DROPFILES (1795)
+#define EN_ERRSPACE (1280)
+#define EN_HSCROLL (1537)
+#define EN_IMECHANGE (1799)
+#define EN_KILLFOCUS (512)
+#define EN_MAXTEXT (1281)
+#define EN_MSGFILTER (1792)
+#define EN_OLEOPFAILED (1801)
+#define EN_PROTECTED (1796)
+#define EN_REQUESTRESIZE (1793)
+#define EN_SAVECLIPBOARD (1800)
+#define EN_SELCHANGE (1794)
+#define EN_SETFOCUS (256)
+#define EN_STOPNOUNDO (1798)
+#define EN_UPDATE (1024)
+#define EN_VSCROLL (1538)
+
+/* File Manager extensions */
+
+/* File Manager extensions DLL events */
+
+/* Header control */
+#define HDM_DELETEITEM (4610)
+#define HDM_GETITEMW (4619)
+#define HDM_INSERTITEMW (4618)
+#define HDM_SETITEMW (4620)
+#define HDM_GETITEMA (4611)
+#define HDM_INSERTITEMA (4609)
+#define HDM_SETITEMA (4612)
+#ifdef UNICODE
+#define HDM_GETITEM HDM_GETITEMW
+#define HDM_INSERTITEM HDM_INSERTITEMW
+#define HDM_SETITEM HDM_SETITEMW
+#else
+#define HDM_GETITEM HDM_GETITEMA
+#define HDM_INSERTITEM HDM_INSERTITEMA
+#define HDM_SETITEM HDM_SETITEMA
+#endif /* UNICODE */
+#define HDM_GETITEMCOUNT (4608)
+#define HDM_HITTEST (4614)
+#define HDM_LAYOUT (4613)
+
+/* Header control notifications */
+#define HDN_BEGINTRACKW (-326)
+#define HDN_DIVIDERDBLCLICKW (-325)
+#define HDN_ENDTRACKW (-327)
+#define HDN_ITEMCHANGEDW (-321)
+#define HDN_ITEMCHANGINGW (-320)
+#define HDN_ITEMCLICKW (-322)
+#define HDN_ITEMDBLCLICKW (-323)
+#define HDN_TRACKW (-328)
+#define HDN_BEGINTRACKA (-306)
+#define HDN_DIVIDERDBLCLICKA (-305)
+#define HDN_ENDTRACKA (-307)
+#define HDN_ITEMCHANGEDA (-301)
+#define HDN_ITEMCHANGINGA (-300)
+#define HDN_ITEMCLICKA (-302)
+#define HDN_ITEMDBLCLICKA (-303)
+#define HDN_TRACKA (-308)
+#ifdef UNICODE
+#define HDN_BEGINTRACK HDN_BEGINTRACKW
+#define HDN_DIVIDERDBLCLICK HDN_DIVIDERDBLCLICKW
+#define HDN_ENDTRACK HDN_ENDTRACKW
+#define HDN_ITEMCHANGED HDN_ITEMCHANGEDW
+#define HDN_ITEMCHANGING HDN_ITEMCHANGINGW
+#define HDN_ITEMCLICK HDN_ITEMCLICKW
+#define HDN_ITEMDBLCLICK HDN_ITEMDBLCLICKW
+#define HDN_TRACK HDN_TRACKW
+#else
+#define HDN_BEGINTRACK HDN_BEGINTRACKA
+#define HDN_DIVIDERDBLCLICK HDN_DIVIDERDBLCLICKA
+#define HDN_ENDTRACK HDN_ENDTRACKA
+#define HDN_ITEMCHANGED HDN_ITEMCHANGEDA
+#define HDN_ITEMCHANGING HDN_ITEMCHANGINGA
+#define HDN_ITEMCLICK HDN_ITEMCLICKA
+#define HDN_ITEMDBLCLICK HDN_ITEMDBLCLICKA
+#define HDN_TRACK HDN_TRACKA
+#endif /* UNICODE */
+
+/* Hot key control */
+#define HKM_GETHOTKEY (1026)
+#define HKM_SETHOTKEY (1025)
+#define HKM_SETRULES (1027)
+
+/* List box */
+#define LB_ADDFILE (406)
+#define LB_ADDSTRING (384)
+#define LB_DELETESTRING (386)
+#define LB_DIR (397)
+#define LB_FINDSTRING (399)
+#define LB_FINDSTRINGEXACT (418)
+#define LB_GETANCHORINDEX (413)
+#define LB_GETCARETINDEX (415)
+#define LB_GETCOUNT (395)
+#define LB_GETCURSEL (392)
+#define LB_GETHORIZONTALEXTENT (403)
+#define LB_GETITEMDATA (409)
+#define LB_GETITEMHEIGHT (417)
+#define LB_GETITEMRECT (408)
+#define LB_GETLOCALE (422)
+#define LB_GETSEL (391)
+#define LB_GETSELCOUNT (400)
+#define LB_GETSELITEMS (401)
+#define LB_GETTEXT (393)
+#define LB_GETTEXTLEN (394)
+#define LB_GETTOPINDEX (398)
+#define LB_INITSTORAGE (424)
+#define LB_INSERTSTRING (385)
+#define LB_ITEMFROMPOINT (425)
+#define LB_RESETCONTENT (388)
+#define LB_SELECTSTRING (396)
+#define LB_SELITEMRANGE (411)
+#define LB_SELITEMRANGEEX (387)
+#define LB_SETANCHORINDEX (412)
+#define LB_SETCARETINDEX (414)
+#define LB_SETCOLUMNWIDTH (405)
+#define LB_SETCOUNT (423)
+#define LB_SETCURSEL (390)
+#define LB_SETHORIZONTALEXTENT (404)
+#define LB_SETITEMDATA (410)
+#define LB_SETITEMHEIGHT (416)
+#define LB_SETLOCALE (421)
+#define LB_SETSEL (389)
+#define LB_SETTABSTOPS (402)
+#define LB_SETTOPINDEX (407)
+
+/* List box notifications */
+#define LBN_DBLCLK (2)
+#define LBN_ERRSPACE (-2)
+#define LBN_KILLFOCUS (5)
+#define LBN_SELCANCEL (3)
+#define LBN_SELCHANGE (1)
+#define LBN_SETFOCUS (4)
+
+/* List view control */
+#define LVM_ARRANGE (4118)
+#define LVM_CREATEDRAGIMAGE (4129)
+#define LVM_DELETEALLITEMS (4105)
+#define LVM_DELETECOLUMN (4124)
+#define LVM_DELETEITEM (4104)
+#define LVM_ENSUREVISIBLE (4115)
+#define LVM_GETBKCOLOR (4096)
+#define LVM_GETCALLBACKMASK (4106)
+#define LVM_GETCOLUMNWIDTH (4125)
+#define LVM_GETCOUNTPERPAGE (4136)
+#define LVM_GETEDITCONTROL (4120)
+#define LVM_GETIMAGELIST (4098)
+#define LVM_EDITLABELW (4214)
+#define LVM_FINDITEMW (4179)
+#define LVM_GETCOLUMNW (4191)
+#define LVM_GETISEARCHSTRINGW (4213)
+#define LVM_GETITEMW (4171)
+#define LVM_GETITEMTEXTW (4211)
+#define LVM_GETSTRINGWIDTHW (4183)
+#define LVM_INSERTCOLUMNW (4193)
+#define LVM_INSERTITEMW (4173)
+#define LVM_SETCOLUMNW (4192)
+#define LVM_SETITEMW (4172)
+#define LVM_SETITEMTEXTW (4212)
+#define LVM_EDITLABELA (4119)
+#define LVM_FINDITEMA (4109)
+#define LVM_GETCOLUMNA (4121)
+#define LVM_GETISEARCHSTRINGA (4148)
+#define LVM_GETITEMA (4101)
+#define LVM_GETITEMTEXTA (4141)
+#define LVM_GETSTRINGWIDTHA (4113)
+#define LVM_INSERTCOLUMNA (4123)
+#define LVM_INSERTITEMA (4103)
+#define LVM_SETCOLUMNA (4122)
+#define LVM_SETITEMA (4102)
+#define LVM_SETITEMTEXTA (4142)
+#ifdef UNICODE
+#define LVM_EDITLABEL LVM_EDITLABELW
+#define LVM_FINDITEM LVM_FINDITEMW
+#define LVM_GETCOLUMN LVM_GETCOLUMNW
+#define LVM_GETISEARCHSTRING LVM_GETISEARCHSTRINGW
+#define LVM_GETITEM LVM_GETITEMW
+#define LVM_GETITEMTEXT LVM_GETITEMTEXTW
+#define LVM_GETSTRINGWIDTH LVM_GETSTRINGWIDTHW
+#define LVM_INSERTCOLUMN LVM_INSERTCOLUMNW
+#define LVM_INSERTITEM LVM_INSERTITEMW
+#define LVM_SETCOLUMN LVM_SETCOLUMNW
+#define LVM_SETITEM LVM_SETITEMW
+#define LVM_SETITEMTEXT LVM_SETITEMTEXTW
+#else
+#define LVM_EDITLABEL LVM_EDITLABELA
+#define LVM_FINDITEM LVM_FINDITEMA
+#define LVM_GETCOLUMN LVM_GETCOLUMNA
+#define LVM_GETISEARCHSTRING LVM_GETISEARCHSTRINGA
+#define LVM_GETITEM LVM_GETITEMA
+#define LVM_GETITEMTEXT LVM_GETITEMTEXTA
+#define LVM_GETSTRINGWIDTH LVM_GETSTRINGWIDTHA
+#define LVM_INSERTCOLUMN LVM_INSERTCOLUMNA
+#define LVM_INSERTITEM LVM_INSERTITEMA
+#define LVM_SETCOLUMN LVM_SETCOLUMNA
+#define LVM_SETITEM LVM_SETITEMA
+#define LVM_SETITEMTEXT LVM_SETITEMTEXTA
+#endif /* UNICODE */
+#define LVM_GETITEMCOUNT (4100)
+#define LVM_GETITEMPOSITION (4112)
+#define LVM_GETITEMRECT (4110)
+#define LVM_GETITEMSPACING (4147)
+#define LVM_GETITEMSTATE (4140)
+#define LVM_GETNEXTITEM (4108)
+#define LVM_GETORIGIN (4137)
+#define LVM_GETSELECTEDCOUNT (4146)
+#define LVM_GETTEXTBKCOLOR (4133)
+#define LVM_GETTEXTCOLOR (4131)
+#define LVM_GETTOPINDEX (4135)
+#define LVM_GETVIEWRECT (4130)
+#define LVM_HITTEST (4114)
+#define LVM_REDRAWITEMS (4117)
+#define LVM_SCROLL (4116)
+#define LVM_SETBKCOLOR (4097)
+#define LVM_SETCALLBACKMASK (4107)
+#define LVM_SETCOLUMNWIDTH (4126)
+#define LVM_SETIMAGELIST (4099)
+#define LVM_SETITEMCOUNT (4143)
+#define LVM_SETITEMPOSITION (4111)
+#define LVM_SETITEMPOSITION32 (4145)
+#define LVM_SETITEMSTATE (4139)
+#define LVM_SETTEXTBKCOLOR (4134)
+#define LVM_SETTEXTCOLOR (4132)
+#define LVM_SORTITEMS (4144)
+#define LVM_UPDATE (4138)
+
+/* List view control notifications */
+#define LVN_BEGINDRAG (-109)
+#define LVN_BEGINRDRAG (-111)
+#define LVN_COLUMNCLICK (-108)
+#define LVN_DELETEALLITEMS (-104)
+#define LVN_DELETEITEM (-103)
+#define LVN_BEGINLABELEDITW (-175)
+#define LVN_ENDLABELEDITW (-176)
+#define LVN_GETDISPINFOW (-177)
+#define LVN_SETDISPINFOW (-178)
+#define LVN_BEGINLABELEDITA (-105)
+#define LVN_ENDLABELEDITA (-106)
+#define LVN_GETDISPINFOA (-150)
+#define LVN_SETDISPINFOA (-151)
+#ifdef UNICODE
+#define LVN_BEGINLABELEDIT LVN_BEGINLABELEDITW
+#define LVN_ENDLABELEDIT LVN_ENDLABELEDITW
+#define LVN_GETDISPINFO LVN_GETDISPINFOW
+#define LVN_SETDISPINFO LVN_SETDISPINFOW
+#else
+#define LVN_BEGINLABELEDIT LVN_BEGINLABELEDITA
+#define LVN_ENDLABELEDIT LVN_ENDLABELEDITA
+#define LVN_GETDISPINFO LVN_GETDISPINFOA
+#define LVN_SETDISPINFO LVN_SETDISPINFOA
+#endif /* UNICODE */
+#define LVN_INSERTITEM (-102)
+#define LVN_ITEMCHANGED (-101)
+#define LVN_ITEMCHANGING (-100)
+#define LVN_KEYDOWN (-155)
+
+/* Control notification */
+#define NM_CLICK (-2)
+#define NM_DBLCLK (-3)
+#define NM_KILLFOCUS (-8)
+#define NM_OUTOFMEMORY (-1)
+#define NM_RCLICK (-5)
+#define NM_RDBLCLK (-6)
+#define NM_RETURN (-4)
+#define NM_SETFOCUS (-7)
+
+/* Power status */
+
+/* Progress bar control */
+#define PBM_DELTAPOS (1027)
+#define PBM_SETPOS (1026)
+#define PBM_SETRANGE (1025)
+#define PBM_SETSTEP (1028)
+#define PBM_STEPIT (1029)
+
+/* Property sheets */
+#define PSM_ADDPAGE (1127)
+#define PSM_APPLY (1134)
+#define PSM_CANCELTOCLOSE (1131)
+#define PSM_CHANGED (1128)
+#define PSM_GETTABCONTROL (1140)
+#define PSM_GETCURRENTPAGEHWND (1142)
+#define PSM_ISDIALOGMESSAGE (1141)
+#define PSM_PRESSBUTTON (1137)
+#define PSM_QUERYSIBLINGS (1132)
+#define PSM_REBOOTSYSTEM (1130)
+#define PSM_REMOVEPAGE (1126)
+#define PSM_RESTARTWINDOWS (1129)
+#define PSM_SETCURSEL (1125)
+#define PSM_SETCURSELID (1138)
+#define PSM_SETFINISHTEXTW (1145)
+#define PSM_SETTITLEW (1144)
+#define PSM_SETFINISHTEXTA (1139)
+#define PSM_SETTITLEA (1135)
+#ifdef UNICODE
+#define PSM_SETFINISHTEXT PSM_SETFINISHTEXTW
+#define PSM_SETTITLE PSM_SETTITLEW
+#else
+#define PSM_SETFINISHTEXT PSM_SETFINISHTEXTA
+#define PSM_SETTITLE PSM_SETTITLEA
+#endif /* UNICODE */
+#define PSM_SETWIZBUTTONS (1136)
+#define PSM_UNCHANGED (1133)
+
+/* Property sheet notifications */
+#define PSN_APPLY (-202)
+#define PSN_HELP (-205)
+#define PSN_KILLACTIVE (-201)
+#define PSN_QUERYCANCEL (-209)
+#define PSN_RESET (-203)
+#define PSN_SETACTIVE (-200)
+#define PSN_WIZBACK (-206)
+#define PSN_WIZFINISH (-208)
+#define PSN_WIZNEXT (-207)
+
+/* Status window */
+#define SB_GETBORDERS (1031)
+#define SB_GETPARTS (1030)
+#define SB_GETRECT (1034)
+#define SB_GETTEXTW (1037)
+#define SB_GETTEXTLENGTHW (1036)
+#define SB_SETTEXTW (1035)
+#define SB_GETTEXTA (1026)
+#define SB_GETTEXTLENGTHA (1027)
+#define SB_SETTEXTA (1025)
+#ifdef UNICODE
+#define SB_GETTEXT SB_GETTEXTW
+#define SB_GETTEXTLENGTH SB_GETTEXTLENGTHW
+#define SB_SETTEXT SB_SETTEXTW
+#else
+#define SB_GETTEXT SB_GETTEXTA
+#define SB_GETTEXTLENGTH SB_GETTEXTLENGTHA
+#define SB_SETTEXT SB_SETTEXTA
+#endif /* UNICODE */
+#define SB_SETMINHEIGHT (1032)
+#define SB_SETPARTS (1028)
+#define SB_SIMPLE (1033)
+
+/* Scroll bar control */
+#define SBM_ENABLE_ARROWS (228)
+#define SBM_GETPOS (225)
+#define SBM_GETRANGE (227)
+#define SBM_GETSCROLLINFO (234)
+#define SBM_SETPOS (224)
+#define SBM_SETRANGE (226)
+#define SBM_SETRANGEREDRAW (230)
+#define SBM_SETSCROLLINFO (233)
+
+/* Static control */
+#define STM_GETICON (369)
+#define STM_GETIMAGE (371)
+#define STM_SETICON (368)
+#define STM_SETIMAGE (370)
+
+/* Static control notifications */
+#define STN_CLICKED (0)
+#define STN_DBLCLK (1)
+#define STN_DISABLE (3)
+#define STN_ENABLE (2)
+
+/* Toolbar control */
+#define TB_ADDBITMAP (1043)
+#define TB_ADDBUTTONS (1044)
+#define TB_AUTOSIZE (1057)
+#define TB_BUTTONCOUNT (1048)
+#define TB_BUTTONSTRUCTSIZE (1054)
+#define TB_CHANGEBITMAP (1067)
+#define TB_CHECKBUTTON (1026)
+#define TB_COMMANDTOINDEX (1049)
+#define TB_CUSTOMIZE (1051)
+#define TB_DELETEBUTTON (1046)
+#define TB_ENABLEBUTTON (1025)
+#define TB_GETBITMAP (1068)
+#define TB_GETBITMAPFLAGS (1065)
+#define TB_GETBUTTON (1047)
+#define TB_ADDSTRINGW (1101)
+#define TB_GETBUTTONTEXTW (1099)
+#define TB_SAVERESTOREW (1100)
+#define TB_ADDSTRINGA (1052)
+#define TB_GETBUTTONTEXTA (1069)
+#define TB_SAVERESTOREA (1050)
+#ifdef UNICODE
+#define TB_ADDSTRING TB_ADDSTRINGW
+#define TB_GETBUTTONTEXT TB_GETBUTTONTEXTW
+#define TB_SAVERESTORE TB_SAVERESTOREW
+#else
+#define TB_ADDSTRING TB_ADDSTRINGA
+#define TB_GETBUTTONTEXT TB_GETBUTTONTEXTA
+#define TB_SAVERESTORE TB_SAVERESTOREA
+#endif /* UNICODE */
+#define TB_GETITEMRECT (1053)
+#define TB_GETROWS (1064)
+#define TB_GETSTATE (1042)
+#define TB_GETTOOLTIPS (1059)
+#define TB_HIDEBUTTON (1028)
+#define TB_INDETERMINATE (1029)
+#define TB_INSERTBUTTON (1045)
+#define TB_ISBUTTONCHECKED (1034)
+#define TB_ISBUTTONENABLED (1033)
+#define TB_ISBUTTONHIDDEN (1036)
+#define TB_ISBUTTONINDETERMINATE (1037)
+#define TB_ISBUTTONPRESSED (1035)
+#define TB_PRESSBUTTON (1027)
+#define TB_SETBITMAPSIZE (1056)
+#define TB_SETBUTTONSIZE (1055)
+#define TB_SETCMDID (1066)
+#define TB_SETPARENT (1061)
+#define TB_SETROWS (1063)
+#define TB_SETSTATE (1041)
+#define TB_SETTOOLTIPS (1060)
+
+/* Track bar control */
+#define TBM_CLEARSEL (1043)
+#define TBM_CLEARTICS (1033)
+#define TBM_GETCHANNELRECT (1050)
+#define TBM_GETLINESIZE (1048)
+#define TBM_GETNUMTICS (1040)
+#define TBM_GETPAGESIZE (1046)
+#define TBM_GETPOS (1024)
+#define TBM_GETPTICS (1038)
+#define TBM_GETRANGEMAX (1026)
+#define TBM_GETRANGEMIN (1025)
+#define TBM_GETSELEND (1042)
+#define TBM_GETSELSTART (1041)
+#define TBM_GETTHUMBLENGTH (1052)
+#define TBM_GETTHUMBRECT (1049)
+#define TBM_GETTIC (1027)
+#define TBM_GETTICPOS (1039)
+#define TBM_SETLINESIZE (1047)
+#define TBM_SETPAGESIZE (1045)
+#define TBM_SETPOS (1029)
+#define TBM_SETRANGE (1030)
+#define TBM_SETRANGEMAX (1032)
+#define TBM_SETRANGEMIN (1031)
+#define TBM_SETSEL (1034)
+#define TBM_SETSELEND (1036)
+#define TBM_SETSELSTART (1035)
+#define TBM_SETTHUMBLENGTH (1051)
+#define TBM_SETTIC (1028)
+#define TBM_SETTICFREQ (1044)
+
+/* Tool bar control notifications */
+#define TBN_BEGINADJUST (-703)
+#define TBN_BEGINDRAG (-701)
+#define TBN_CUSTHELP (-709)
+#define TBN_ENDADJUST (-704)
+#define TBN_ENDDRAG (-702)
+#define TBN_GETBUTTONINFOW (-720)
+#define TBN_GETBUTTONINFOA (-700)
+#ifdef UNICODE
+#define TBN_GETBUTTONINFO TBN_GETBUTTONINFOW
+#else
+#define TBN_GETBUTTONINFO TBN_GETBUTTONINFOA
+#endif /* UNICODE */
+#define TBN_QUERYDELETE (-707)
+#define TBN_QUERYINSERT (-706)
+#define TBN_RESET (-705)
+#define TBN_TOOLBARCHANGE (-708)
+
+/* Tab control */
+#define TCM_ADJUSTRECT (4904)
+#define TCM_DELETEALLITEMS (4873)
+#define TCM_DELETEITEM (4872)
+#define TCM_GETCURFOCUS (4911)
+#define TCM_GETCURSEL (4875)
+#define TCM_GETIMAGELIST (4866)
+#define TCM_GETITEMW (4924)
+#define TCM_INSERTITEMW (4926)
+#define TCM_SETITEMW (4925)
+#define TCM_GETITEMA (4869)
+#define TCM_INSERTITEMA (4871)
+#define TCM_SETITEMA (4870)
+#ifdef UNICODE
+#define TCM_GETITEM TCM_GETITEM
+#define TCM_INSERTITEM TCM_INSERTITEMW
+#define TCM_SETITEM TCM_SETITEMW
+#else
+#define TCM_GETITEM TCM_GETITEMA
+#define TCM_INSERTITEM TCM_INSERTITEMA
+#define TCM_SETITEM TCM_SETITEMA
+#endif /* UNICODE */
+#define TCM_GETITEMCOUNT (4868)
+#define TCM_GETITEMRECT (4874)
+#define TCM_GETROWCOUNT (4908)
+#define TCM_GETTOOLTIPS (4909)
+#define TCM_HITTEST (4877)
+#define TCM_REMOVEIMAGE (4906)
+#define TCM_SETCURFOCUS (4912)
+#define TCM_SETCURSEL (4876)
+#define TCM_SETIMAGELIST (4867)
+#define TCM_SETITEMEXTRA (4878)
+#define TCM_SETITEMSIZE (4905)
+#define TCM_SETPADDING (4907)
+#define TCM_SETTOOLTIPS (4910)
+
+/* Tab control notifications */
+#define TCN_KEYDOWN (-550)
+#define TCN_SELCHANGE (-551)
+#define TCN_SELCHANGING (-552)
+
+/* Tool tip control */
+#define TTM_ACTIVATE (1025)
+#define TTM_ADDTOOLW (1074)
+#define TTM_DELTOOLW (1075)
+#define TTM_ENUMTOOLSW (1082)
+#define TTM_GETCURRENTTOOLW (1083)
+#define TTM_GETTEXTW (1080)
+#define TTM_GETTOOLINFOW (1077)
+#define TTM_HITTESTW (1079)
+#define TTM_NEWTOOLRECTW (1076)
+#define TTM_SETTOOLINFOW (1078)
+#define TTM_UPDATETIPTEXTW (1081)
+#define TTM_ADDTOOLA (1028)
+#define TTM_DELTOOLA (1029)
+#define TTM_ENUMTOOLSA (1038)
+#define TTM_GETCURRENTTOOLA (1039)
+#define TTM_GETTEXTA (1035)
+#define TTM_GETTOOLINFOA (1032)
+#define TTM_HITTESTA (1034)
+#define TTM_NEWTOOLRECTA (1030)
+#define TTM_SETTOOLINFOA (1033)
+#define TTM_UPDATETIPTEXTA (1036)
+#ifdef UNICODE
+#define TTM_ADDTOOL TTM_ADDTOOLW
+#define TTM_DELTOOL TTM_DELTOOLW
+#define TTM_ENUMTOOLS TTM_ENUMTOOLSW
+#define TTM_GETCURRENTTOOL TTM_GETCURRENTTOOLW
+#define TTM_GETTEXT TTM_GETTEXTW
+#define TTM_GETTOOLINFO TTM_GETTOOLINFOW
+#define TTM_HITTEST TTM_HITTESTW
+#define TTM_NEWTOOLRECT TTM_NEWTOOLRECTW
+#define TTM_SETTOOLINFO TTM_SETTOOLINFOW
+#define TTM_UPDATETIPTEXT TTM_UPDATETIPTEXTW
+#else
+#define TTM_ADDTOOL TTM_ADDTOOLA
+#define TTM_DELTOOL TTM_DELTOOLA
+#define TTM_ENUMTOOLS TTM_ENUMTOOLSA
+#define TTM_GETCURRENTTOOL TTM_GETCURRENTTOOLA
+#define TTM_GETTEXT TTM_GETTEXTA
+#define TTM_GETTOOLINFO TTM_GETTOOLINFOA
+#define TTM_HITTEST TTM_HITTESTA
+#define TTM_NEWTOOLRECT TTM_NEWTOOLRECTA
+#define TTM_SETTOOLINFO TTM_SETTOOLINFOA
+#define TTM_UPDATETIPTEXT TTM_UPDATETIPTEXTA
+#endif /* UNICODE */
+#define TTM_GETTOOLCOUNT (1037)
+#define TTM_RELAYEVENT (1031)
+#define TTM_SETDELAYTIME (1027)
+#define TTM_WINDOWFROMPOINT (1040)
+
+/* Tool tip control notification */
+#define TTN_NEEDTEXTW (-530)
+#define TTN_NEEDTEXTA (-520)
+#ifdef UNICODE
+#define TTN_NEEDTEXT TTN_NEEDTEXTW
+#else
+#define TTN_NEEDTEXT TTN_NEEDTEXTA
+#endif /* UNICODE */
+#define TTN_POP (-522)
+#define TTN_SHOW (-521)
+
+/* Tree view control */
+#define TVM_CREATEDRAGIMAGE (4370)
+#define TVM_DELETEITEM (4353)
+#define TVM_ENDEDITLABELNOW (4374)
+#define TVM_ENSUREVISIBLE (4372)
+#define TVM_EXPAND (4354)
+#define TVM_GETCOUNT (4357)
+#define TVM_GETEDITCONTROL (4367)
+#define TVM_GETIMAGELIST (4360)
+#define TVM_GETINDENT (4358)
+#define TVM_GETITEMRECT (4356)
+#define TVM_GETNEXTITEM (4362)
+#define TVM_GETVISIBLECOUNT (4368)
+#define TVM_HITTEST (4369)
+#define TVM_EDITLABELW (4417)
+#define TVM_GETISEARCHSTRINGW (4416)
+#define TVM_GETITEMW (4414)
+#define TVM_INSERTITEMW (4402)
+#define TVM_SETITEMW (4415)
+#define TVM_EDITLABELA (4366)
+#define TVM_GETISEARCHSTRINGA (4375)
+#define TVM_GETITEMA (4364)
+#define TVM_INSERTITEMA (4352)
+#define TVM_SETITEMA (4365)
+#ifdef UNICODE
+#define TVM_EDITLABEL TVM_EDITLABELW
+#define TVM_GETISEARCHSTRING TVM_GETISEARCHSTRINGW
+#define TVM_GETITEM TVM_GETITEMW
+#define TVM_INSERTITEM TVM_INSERTITEMW
+#define TVM_SETITEM TVM_SETITEMW
+#else
+#define TVM_EDITLABEL TVM_EDITLABELA
+#define TVM_GETISEARCHSTRING TVM_GETISEARCHSTRINGA
+#define TVM_GETITEM TVM_GETITEMA
+#define TVM_INSERTITEM TVM_INSERTITEMA
+#define TVM_SETITEM TVM_SETITEMA
+#endif /* UNICODE */
+#define TVM_SELECTITEM (4363)
+#define TVM_SETIMAGELIST (4361)
+#define TVM_SETINDENT (4359)
+#define TVM_SORTCHILDREN (4371)
+#define TVM_SORTCHILDRENCB (4373)
+
+/* Tree view control notification */
+#define TVN_KEYDOWN (-412)
+#define TVN_BEGINDRAGW (-456)
+#define TVN_BEGINLABELEDITW (-459)
+#define TVN_BEGINRDRAGW (-457)
+#define TVN_DELETEITEMW (-458)
+#define TVN_ENDLABELEDITW (-460)
+#define TVN_GETDISPINFOW (-452)
+#define TVN_ITEMEXPANDEDW (-455)
+#define TVN_ITEMEXPANDINGW (-454)
+#define TVN_SELCHANGEDW (-451)
+#define TVN_SELCHANGINGW (-450)
+#define TVN_SETDISPINFOW (-453)
+#define TVN_BEGINDRAGA (-407)
+#define TVN_BEGINLABELEDITA (-410)
+#define TVN_BEGINRDRAGA (-408)
+#define TVN_DELETEITEMA (-409)
+#define TVN_ENDLABELEDITA (-411)
+#define TVN_GETDISPINFOA (-403)
+#define TVN_ITEMEXPANDEDA (-406)
+#define TVN_ITEMEXPANDINGA (-405)
+#define TVN_SELCHANGEDA (-402)
+#define TVN_SELCHANGINGA (-401)
+#define TVN_SETDISPINFOA (-404)
+#ifdef UNICODE
+#define TVN_BEGINDRAG TVN_BEGINDRAGW
+#define TVN_BEGINLABELEDIT TVN_BEGINLABELEDITW
+#define TVN_BEGINRDRAG TVN_BEGINRDRAGW
+#define TVN_DELETEITEM TVN_DELETEITEMW
+#define TVN_ENDLABELEDIT TVN_ENDLABELEDITW
+#define TVN_GETDISPINFO TVN_GETDISPINFOW
+#define TVN_ITEMEXPANDED TVN_ITEMEXPANDEDW
+#define TVN_ITEMEXPANDING TVN_ITEMEXPANDINGW
+#define TVN_SELCHANGED TVN_SELCHANGEDW
+#define TVN_SELCHANGING TVN_SELCHANGINGW
+#define TVN_SETDISPINFO TVN_SETDISPINFOW
+#else
+#define TVN_BEGINDRAG TVN_BEGINDRAGA
+#define TVN_BEGINLABELEDIT TVN_BEGINLABELEDITA
+#define TVN_BEGINRDRAG TVN_BEGINRDRAGA
+#define TVN_DELETEITEM TVN_DELETEITEMA
+#define TVN_ENDLABELEDIT TVN_ENDLABELEDITA
+#define TVN_GETDISPINFO TVN_GETDISPINFOA
+#define TVN_ITEMEXPANDED TVN_ITEMEXPANDEDA
+#define TVN_ITEMEXPANDING TVN_ITEMEXPANDINGA
+#define TVN_SELCHANGED TVN_SELCHANGEDA
+#define TVN_SELCHANGING TVN_SELCHANGINGA
+#define TVN_SETDISPINFO TVN_SETDISPINFOA
+#endif /* UNICODE */
+
+/* Up/down control */
+#define UDM_GETACCEL (1132)
+#define UDM_GETBASE (1134)
+#define UDM_GETBUDDY (1130)
+#define UDM_GETPOS (1128)
+#define UDM_GETRANGE (1126)
+#define UDM_SETACCEL (1131)
+#define UDM_SETBASE (1133)
+#define UDM_SETBUDDY (1129)
+#define UDM_SETPOS (1127)
+#define UDM_SETRANGE (1125)
+
+/* Up/down control notification */
+#define UDN_DELTAPOS (-722)
+
+/* Window messages */
+
+#define WM_ACTIVATE (6)
+#define WM_ACTIVATEAPP (28)
+#define WM_ASKCBFORMATNAME (780)
+#define WM_CANCELJOURNAL (75)
+#define WM_CANCELMODE (31)
+#define WM_CAPTURECHANGED (533)
+#define WM_CHANGECBCHAIN (781)
+#define WM_CHAR (258)
+#define WM_CHARTOITEM (47)
+#define WM_CHILDACTIVATE (34)
+#define WM_CHOOSEFONT_GETLOGFONT (1025)
+#define WM_CHOOSEFONT_SETLOGFONT (1125)
+#define WM_CHOOSEFONT_SETFLAGS (1126)
+#define WM_CLEAR (771)
+#define WM_CLOSE (16)
+#define WM_COMMAND (273)
+#define WM_COMPACTING (65)
+#define WM_COMPAREITEM (57)
+#define WM_CONTEXTMENU (123)
+#define WM_COPY (769)
+#define WM_COPYDATA (74)
+#define WM_CREATE (1)
+#define WM_CTLCOLORBTN (309)
+#define WM_CTLCOLORDLG (310)
+#define WM_CTLCOLOREDIT (307)
+#define WM_CTLCOLORLISTBOX (308)
+#define WM_CTLCOLORMSGBOX (306)
+#define WM_CTLCOLORSCROLLBAR (311)
+#define WM_CTLCOLORSTATIC (312)
+#define WM_CUT (768)
+#define WM_DEADCHAR (259)
+#define WM_DELETEITEM (45)
+#define WM_DESTROY (2)
+#define WM_DESTROYCLIPBOARD (775)
+#define WM_DEVICECHANGE (537)
+#define WM_DEVMODECHANGE (27)
+#define WM_DISPLAYCHANGE (126)
+#define WM_DRAWCLIPBOARD (776)
+#define WM_DRAWITEM (43)
+#define WM_DROPFILES (563)
+#define WM_ENABLE (10)
+#define WM_ENDSESSION (22)
+#define WM_ENTERIDLE (289)
+#define WM_ENTERMENULOOP (529)
+#define WM_ENTERSIZEMOVE (561)
+#define WM_ERASEBKGND (20)
+#define WM_EXITMENULOOP (530)
+#define WM_EXITSIZEMOVE (562)
+#define WM_FONTCHANGE (29)
+#define WM_GETDLGCODE (135)
+#define WM_GETFONT (49)
+#define WM_GETHOTKEY (51)
+#define WM_GETICON (127)
+#define WM_GETMINMAXINFO (36)
+#define WM_GETTEXT (13)
+#define WM_GETTEXTLENGTH (14)
+#define WM_HELP (83)
+#define WM_HOTKEY (786)
+#define WM_HSCROLL (276)
+#define WM_HSCROLLCLIPBOARD (782)
+#define WM_ICONERASEBKGND (39)
+#define WM_IME_CHAR (646)
+#define WM_IME_COMPOSITION (271)
+#define WM_IME_COMPOSITIONFULL (644)
+#define WM_IME_CONTROL (643)
+#define WM_IME_ENDCOMPOSITION (270)
+#define WM_IME_KEYDOWN (656)
+#define WM_IME_KEYUP (657)
+#define WM_IME_NOTIFY (642)
+#define WM_IME_SELECT (645)
+#define WM_IME_SETCONTEXT (641)
+#define WM_IME_STARTCOMPOSITION (269)
+#define WM_INITDIALOG (272)
+#define WM_INITMENU (278)
+#define WM_INITMENUPOPUP (279)
+#define WM_INPUTLANGCHANGE (81)
+#define WM_INPUTLANGCHANGEREQUEST (80)
+#define WM_KEYDOWN (256)
+#define WM_KEYUP (257)
+#define WM_KILLFOCUS (8)
+#define WM_LBUTTONDBLCLK (515)
+#define WM_LBUTTONDOWN (513)
+#define WM_LBUTTONUP (514)
+#define WM_MBUTTONDBLCLK (521)
+#define WM_MBUTTONDOWN (519)
+#define WM_MBUTTONUP (520)
+#define WM_MDIACTIVATE (546)
+#define WM_MDICASCADE (551)
+#define WM_MDICREATE (544)
+#define WM_MDIDESTROY (545)
+#define WM_MDIGETACTIVE (553)
+#define WM_MDIICONARRANGE (552)
+#define WM_MDIMAXIMIZE (549)
+#define WM_MDINEXT (548)
+#define WM_MDIREFRESHMENU (564)
+#define WM_MDIRESTORE (547)
+#define WM_MDISETMENU (560)
+#define WM_MDITILE (550)
+#define WM_MEASUREITEM (44)
+#define WM_MENUCHAR (288)
+#define WM_MENUSELECT (287)
+#define WM_MOUSEACTIVATE (33)
+#define WM_MOUSEMOVE (512)
+#define WM_MOVE (3)
+#define WM_MOVING (534)
+#define WM_NCACTIVATE (134)
+#define WM_NCCALCSIZE (131)
+#define WM_NCCREATE (129)
+#define WM_NCDESTROY (130)
+#define WM_NCHITTEST (132)
+#define WM_NCLBUTTONDBLCLK (163)
+#define WM_NCLBUTTONDOWN (161)
+#define WM_NCLBUTTONUP (162)
+#define WM_NCMBUTTONDBLCLK (169)
+#define WM_NCMBUTTONDOWN (167)
+#define WM_NCMBUTTONUP (168)
+#define WM_NCMOUSEMOVE (160)
+#define WM_NCPAINT (133)
+#define WM_NCRBUTTONDBLCLK (166)
+#define WM_NCRBUTTONDOWN (164)
+#define WM_NCRBUTTONUP (165)
+#define WM_NEXTDLGCTL (40)
+#define WM_NOTIFY (78)
+#define WM_NOTIFYFORMAT (85)
+#define WM_NULL (0)
+#define WM_PAINT (15)
+#define WM_PAINTCLIPBOARD (777)
+#define WM_PAINTICON (38)
+#define WM_PALETTECHANGED (785)
+#define WM_PALETTEISCHANGING (784)
+#define WM_PARENTNOTIFY (528)
+#define WM_PASTE (770)
+#define WM_PENWINFIRST (896)
+#define WM_PENWINLAST (911)
+#define WM_POWER (72)
+#define WM_POWERBROADCAST (536)
+#define WM_PRINT (791)
+#define WM_PRINTCLIENT (792)
+#define WM_PSD_ENVSTAMPRECT (1029)
+#define WM_PSD_FULLPAGERECT (1025)
+#define WM_PSD_GREEKTEXTRECT (1028)
+#define WM_PSD_MARGINRECT (1027)
+#define WM_PSD_MINMARGINRECT (1026)
+#define WM_PSD_PAGESETUPDLG (1024)
+#define WM_PSD_YAFULLPAGERECT (1030)
+#define WM_QUERYDRAGICON (55)
+#define WM_QUERYENDSESSION (17)
+#define WM_QUERYNEWPALETTE (783)
+#define WM_QUERYOPEN (19)
+#define WM_QUEUESYNC (35)
+#define WM_QUIT (18)
+#define WM_RBUTTONDBLCLK (518)
+#define WM_RBUTTONDOWN (516)
+#define WM_RBUTTONUP (517)
+#define WM_RENDERALLFORMATS (774)
+#define WM_RENDERFORMAT (773)
+#define WM_SETCURSOR (32)
+#define WM_SETFOCUS (7)
+#define WM_SETFONT (48)
+#define WM_SETHOTKEY (50)
+#define WM_SETICON (128)
+#define WM_SETREDRAW (11)
+#define WM_SETTEXT (12)
+#define WM_SETTINGCHANGE (26)
+#define WM_SHOWWINDOW (24)
+#define WM_SIZE (5)
+#define WM_SIZECLIPBOARD (779)
+#define WM_SIZING (532)
+#define WM_SPOOLERSTATUS (42)
+#define WM_STYLECHANGED (125)
+#define WM_STYLECHANGING (124)
+#define WM_SYSCHAR (262)
+#define WM_SYSCOLORCHANGE (21)
+#define WM_SYSCOMMAND (274)
+#define WM_SYSDEADCHAR (263)
+#define WM_SYSKEYDOWN (260)
+#define WM_SYSKEYUP (261)
+#define WM_TCARD (82)
+#define WM_TIMECHANGE (30)
+#define WM_TIMER (275)
+#define WM_UNDO (772)
+#define WM_USER (1024)
+#define WM_USERCHANGED (84)
+#define WM_VKEYTOITEM (46)
+#define WM_VSCROLL (277)
+#define WM_VSCROLLCLIPBOARD (778)
+#define WM_WINDOWPOSCHANGED (71)
+#define WM_WINDOWPOSCHANGING (70)
+#define WM_WININICHANGE (26)
+
+/* Window message ranges */
+#define WM_KEYFIRST (256)
+#define WM_KEYLAST (264)
+#define WM_MOUSEFIRST (512)
+#define WM_MOUSELAST (521)
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* _GNU_H_WINDOWS32_MESSAGES */
--- /dev/null
+/*\r
+ *\r
+ */\r
+\r
+#ifdef i386\r
+#define PAGESIZE (4096)\r
+#endif\r
--- /dev/null
+/*
+ Sockets.h
+
+ Windows Sockets specification version 1.1
+
+ Copyright (C) 1996 Free Software Foundation, Inc.
+ Thanks to Linux header files for supplying many needed definitions
+
+ Author: Scott Christley <scottc@net-community.com>
+ Date: 1996
+
+ This file is part of the Windows32 API Library.
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 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
+ Library General Public License for more details.
+
+ If you are interested in a warranty or support for this source code,
+ contact Scott Christley <scottc@net-community.com> for more information.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this library; see the file COPYING.LIB.
+ If not, write to the Free Software Foundation,
+ 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+*/
+
+/*-
+ * Portions Copyright (c) 1980, 1983, 1988, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * -
+ * Portions Copyright (c) 1993 by Digital Equipment Corporation.
+ *
+ * Permission to use, copy, modify and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies, and that
+ * the name of Digital Equipment Corporation not be used in advertising or
+ * publicity pertaining to distribution of the document or software without
+ * specific, written prior permission.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL
+ * WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL DIGITAL EQUIPMENT
+ * CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+ * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+ * SOFTWARE.
+ * -
+ * --Copyright--
+ */
+
+#ifndef _GNU_H_WINDOWS32_SOCKETS
+#define _GNU_H_WINDOWS32_SOCKETS
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/* BSD */
+#ifndef _SYS_TYPES_H
+typedef unsigned char u_char;
+typedef unsigned short u_short;
+typedef unsigned int u_int;
+typedef unsigned long u_long;
+#endif
+
+/*
+ Default maximium number of sockets.
+ Define this before including Sockets.h to increase; this does not
+ mean that the underlying Windows Sockets implementation has to
+ support that many!
+ */
+#ifndef FD_SETSIZE
+#define FD_SETSIZE 64
+#endif /* !FD_SETSIZE */
+
+/*
+ These macros are critical to the usage of Windows Sockets.
+ According to the documentation, a SOCKET is no longer represented
+ by a "small non-negative integer"; so all programs MUST use these
+ macros for setting, initializing, clearing and checking the
+ fd_set structures.
+ */
+
+typedef u_int SOCKET;
+
+/* fd_set may have been defined by the newlib <sys/types.h>. */
+#ifdef fd_set
+#undef fd_set
+#endif
+typedef struct fd_set {
+ u_int fd_count;
+ SOCKET fd_array[FD_SETSIZE];
+} fd_set;
+
+/* Internal function, not documented except in winsock.h */
+extern int PASCAL __WSAFDIsSet(SOCKET, fd_set*);
+
+#ifdef FD_CLR
+#undef FD_CLR
+#endif
+#define FD_CLR(fd, set) do { \
+ u_int __i; \
+ for (__i = 0; __i < ((fd_set*)(set))->fd_count ; __i++) { \
+ if (((fd_set*)(set))->fd_array[__i] == fd) { \
+ while (__i < ((fd_set*)(set))->fd_count-1) { \
+ ((fd_set*)(set))->fd_array[__i] = \
+ ((fd_set*)(set))->fd_array[__i+1]; \
+ __i++; \
+ } \
+ ((fd_set*)(set))->fd_count--; \
+ break; \
+ } \
+ } \
+} while(0)
+
+#ifdef FD_SET
+#undef FD_SET
+#endif
+#define FD_SET(fd, set) do { \
+ if (((fd_set*)(set))->fd_count < FD_SETSIZE) \
+ ((fd_set*)(set))->fd_array[((fd_set*)(set))->fd_count++]=(fd);\
+} while(0)
+
+#ifdef FD_ZERO
+#undef FD_ZERO
+#endif
+#define FD_ZERO(set) (((fd_set*)(set))->fd_count=0)
+
+#ifdef FD_ISSET
+#undef FD_ISSET
+#endif
+#define FD_ISSET(fd, set) __WSAFDIsSet((SOCKET)(fd), (fd_set*)(set))
+
+/*
+ time structures
+ */
+struct timeval {
+ long tv_sec; /* seconds */
+ long tv_usec; /* microseconds */
+};
+struct timezone {
+ int tz_minuteswest; /* minutes west of Greenwich */
+ int tz_dsttime; /* type of dst correction */
+};
+
+/*
+ Operations on timevals.
+
+ NB: timercmp does not work for >= or <=.
+ */
+#define timerisset(tvp) ((tvp)->tv_sec || (tvp)->tv_usec)
+#define timercmp(tvp, uvp, cmp) \
+ (((tvp)->tv_sec == (uvp)->tv_sec && (tvp)->tv_usec cmp (uvp)->tv_usec) \
+ || (tvp)->tv_sec cmp (uvp)->tv_sec)
+#define timerclear(tvp) ((tvp)->tv_sec = (tvp)->tv_usec = 0)
+
+/*
+ ioctl command encoding.
+ Some of this is different than what Linux has
+ */
+#define IOCPARM_MASK 0x7f
+#define IOC_VOID 0x20000000
+#define IOC_OUT 0x40000000
+#define IOC_IN 0x80000000
+#define IOC_INOUT (IOC_IN | IOC_OUT)
+
+/* _IO(magic, subcode) */
+#define _IO(c,d) (IOC_VOID | ((c)<<8) | (d))
+/* _IOXX(magic, subcode, arg_t) */
+#define _IOW(c,d,t) (IOC_IN | (((long)sizeof(t) & IOCPARM_MASK)<<16) | \
+ ((c)<<8) | (d))
+#define _IOR(c,d,t) (IOC_OUT | (((long)sizeof(t) & IOCPARM_MASK)<<16) | \
+ ((c)<<8) | (d))
+
+/*
+ This stuff is hard-coded on Linux
+ But winsock.h uses the macros defined above
+ */
+#define FIONREAD _IOR('f', 127, u_long)
+#define FIONBIO _IOW('f', 126, u_long)
+#define FIOASYNC _IOW('f', 125, u_long)
+
+#define SIOCSHIWAT _IOW('s', 0, u_long)
+#define SIOCGHIWAT _IOR('s', 1, u_long)
+#define SIOCSLOWAT _IOW('s', 2, u_long)
+#define SIOCGLOWAT _IOR('s', 3, u_long)
+#define SIOCATMARK _IOR('s', 7, u_long)
+
+/*
+ Structures returned by network data base library, taken from the
+ BSD file netdb.h. All addresses are supplied in host order, and
+ returned in network order (suitable for use in system calls).
+
+ Slight modifications for differences between Linux and winsock.h
+ */
+
+struct hostent {
+ char *h_name; /* official name of host */
+ char **h_aliases; /* alias list */
+ short h_addrtype; /* host address type */
+ short h_length; /* length of address */
+ char **h_addr_list; /* list of addresses */
+#define h_addr h_addr_list[0] /* address, for backward compat */
+};
+
+/*
+ * Assumption here is that a network number
+ * fits in an unsigned long -- someday that won't be true!
+ */
+struct netent {
+ char *n_name; /* official name of net */
+ char **n_aliases; /* alias list */
+ short n_addrtype; /* net address type */
+ u_long n_net; /* network # */
+};
+
+struct servent {
+ char *s_name; /* official service name */
+ char **s_aliases; /* alias list */
+ short s_port; /* port # */
+ char *s_proto; /* protocol to use */
+};
+
+struct protoent {
+ char *p_name; /* official protocol name */
+ char **p_aliases; /* alias list */
+ short p_proto; /* protocol # */
+};
+
+/*
+ Standard well-known IP protocols.
+ For some reason there are differences between Linx and winsock.h
+ */
+enum {
+ IPPROTO_IP = 0,
+ IPPROTO_ICMP = 1,
+ IPPROTO_GGP = 2, /* huh? */
+ IPPROTO_IPIP = 4,
+ IPPROTO_TCP = 6, /* Transmission Control Protocol */
+ IPPROTO_EGP = 8,
+ IPPROTO_PUP = 12,
+ IPPROTO_UDP = 17, /* User Datagram Protocol */
+ IPPROTO_IDP = 22,
+ IPPROTO_ND = 77, /* This one was in winsock.h */
+
+ IPPROTO_RAW = 255, /* raw IP packets */
+ IPPROTO_MAX
+};
+
+/* Standard well-known ports */
+enum {
+ IPPORT_ECHO = 7,
+ IPPORT_DISCARD = 9,
+ IPPORT_SYSTAT = 11,
+ IPPORT_DAYTIME = 13,
+ IPPORT_NETSTAT = 15,
+ IPPORT_FTP = 21,
+ IPPORT_TELNET = 23,
+ IPPORT_SMTP = 25,
+ IPPORT_TIMESERVER = 37,
+ IPPORT_NAMESERVER = 42,
+ IPPORT_WHOIS = 43,
+ IPPORT_MTP = 57,
+
+ IPPORT_TFTP = 69,
+ IPPORT_RJE = 77,
+ IPPORT_FINGER = 79,
+ IPPORT_TTYLINK = 87,
+ IPPORT_SUPDUP = 95,
+
+ IPPORT_EXECSERVER = 512,
+ IPPORT_LOGINSERVER = 513,
+ IPPORT_CMDSERVER = 514,
+ IPPORT_EFSSERVER = 520,
+
+ /* UDP ports. */
+ IPPORT_BIFFUDP = 512,
+ IPPORT_WHOSERVER = 513,
+ IPPORT_ROUTESERVER = 520,
+
+ /* Ports less than this value are reservered for privileged processes. */
+ IPPORT_RESERVED = 1024,
+
+ /* Ports greater than this value are reserved for
+ (non-privileged) processes */
+ IPPORT_USERRESERVED = 5000
+};
+
+/* Link numbers. */
+#define IMPLINK_IP 155
+#define IMPLINK_LOWEXPER 156
+#define IMPLINK_HIGHEXPER 158
+
+/* Linux uses a simple unsigned long int, but winsock.h ... */
+struct in_addr {
+ union {
+ struct { u_char s_b1,s_b2,s_b3,s_b4; } S_un_b;
+ struct { u_short s_w1,s_w2; } S_un_w;
+ u_long S_addr;
+ } S_un;
+#define s_addr S_un.S_addr
+#define s_host S_un.S_un_b.s_b2
+#define s_net S_un.S_un_b.s_b1
+#define s_imp S_un.S_un_w.s_w2
+#define s_impno S_un.S_un_b.s_b4
+#define s_lh S_un.S_un_b.s_b3
+};
+
+/*
+ Definitions of bits in internet address integers.
+ On subnets, host and network parts are found according
+ to the subnet mask, not these masks.
+ */
+#define IN_CLASSA(i) (((long)(i) & 0x80000000) == 0)
+#define IN_CLASSA_NET 0xff000000
+#define IN_CLASSA_NSHIFT 24
+#define IN_CLASSA_HOST 0x00ffffff
+#define IN_CLASSA_MAX 128
+
+#define IN_CLASSB(i) (((long)(i) & 0xc0000000) == 0x80000000)
+#define IN_CLASSB_NET 0xffff0000
+#define IN_CLASSB_NSHIFT 16
+#define IN_CLASSB_HOST 0x0000ffff
+#define IN_CLASSB_MAX 65536
+
+#define IN_CLASSC(i) (((long)(i) & 0xe0000000) == 0xc0000000)
+#define IN_CLASSC_NET 0xffffff00
+#define IN_CLASSC_NSHIFT 8
+#define IN_CLASSC_HOST 0x000000ff
+
+#define INADDR_ANY (u_long)0x00000000
+#define INADDR_LOOPBACK 0x7f000001
+#define INADDR_BROADCAST (u_long)0xffffffff
+#define INADDR_NONE 0xffffffff
+
+/*
+ Structure describing an Internet (IP) socket address.
+ */
+struct sockaddr_in {
+ short sin_family;
+ u_short sin_port;
+ struct in_addr sin_addr;
+ char sin_zero[8];
+};
+
+/*
+ EVERYTHING FROM THIS POINT IS MAINLY SPECIFIC TO Win32
+
+ Structure which holds the detail for the underlying Window Sockets
+ implementation. Set when WSAStartup() is called.
+ */
+#define WSADESCRIPTION_LEN 256
+#define WSASYS_STATUS_LEN 128
+
+typedef struct WSAData {
+ WORD wVersion;
+ WORD wHighVersion;
+ char szDescription[WSADESCRIPTION_LEN+1];
+ char szSystemStatus[WSASYS_STATUS_LEN+1];
+ unsigned short iMaxSockets;
+ unsigned short iMaxUdpDg;
+ char *lpVendorInfo;
+} WSADATA, *LPWSADATA;
+
+#define IP_OPTIONS 1
+#define IP_MULTICAST_IF 2
+#define IP_MULTICAST_TTL 3
+#define IP_MULTICAST_LOOP 4
+#define IP_ADD_MEMBERSHIP 5
+#define IP_DROP_MEMBERSHIP 6
+
+#define IP_DEFAULT_MULTICAST_TTL 1
+#define IP_DEFAULT_MULTICAST_LOOP 1
+#define IP_MAX_MEMBERSHIPS 20
+
+struct ip_mreq {
+ struct in_addr imr_multiaddr;
+ struct in_addr imr_interface;
+};
+
+/*
+ * Definitions related to sockets: types, address families, options,
+ * taken from the BSD file sys/socket.h.
+ */
+
+/*
+ * This is used instead of -1, since the
+ * SOCKET type is unsigned.
+ */
+#define INVALID_SOCKET (SOCKET)(~0)
+#define SOCKET_ERROR (-1)
+
+/* Socket types. */
+#define SOCK_STREAM 1
+#define SOCK_DGRAM 2
+#define SOCK_RAW 3
+#define SOCK_RDM 4
+#define SOCK_SEQPACKET 5
+
+/* For setsockoptions(2) */
+#define SO_DEBUG 0x0001
+#define SO_ACCEPTCONN 0x0002
+#define SO_REUSEADDR 0x0004
+#define SO_KEEPALIVE 0x0008
+#define SO_DONTROUTE 0x0010
+#define SO_BROADCAST 0x0020
+#define SO_USELOOPBACK 0x0040
+#define SO_LINGER 0x0080
+#define SO_OOBINLINE 0x0100
+
+#define SO_DONTLINGER (u_int)(~SO_LINGER)
+
+/*
+ * Additional options.
+ */
+#define SO_SNDBUF 0x1001 /* send buffer size */
+#define SO_RCVBUF 0x1002 /* receive buffer size */
+#define SO_SNDLOWAT 0x1003 /* send low-water mark */
+#define SO_RCVLOWAT 0x1004 /* receive low-water mark */
+#define SO_SNDTIMEO 0x1005 /* send timeout */
+#define SO_RCVTIMEO 0x1006 /* receive timeout */
+#define SO_ERROR 0x1007 /* get error status and clear */
+#define SO_TYPE 0x1008 /* get socket type */
+
+/*
+ * Options for connect and disconnect data and options. Used only by
+ * non-TCP/IP transports such as DECNet, OSI TP4, etc.
+ */
+#define SO_CONNDATA 0x7000
+#define SO_CONNOPT 0x7001
+#define SO_DISCDATA 0x7002
+#define SO_DISCOPT 0x7003
+#define SO_CONNDATALEN 0x7004
+#define SO_CONNOPTLEN 0x7005
+#define SO_DISCDATALEN 0x7006
+#define SO_DISCOPTLEN 0x7007
+
+/*
+ * Option for opening sockets for synchronous access.
+ */
+#define SO_OPENTYPE 0x7008
+
+#define SO_SYNCHRONOUS_ALERT 0x10
+#define SO_SYNCHRONOUS_NONALERT 0x20
+
+/*
+ * Other NT-specific options.
+ */
+#define SO_MAXDG 0x7009
+#define SO_MAXPATHDG 0x700A
+
+/*
+ * TCP options.
+ */
+#define TCP_NODELAY 0x0001
+#define TCP_BSDURGENT 0x7000
+
+/*
+ * Address families.
+ */
+#define AF_UNSPEC 0 /* unspecified */
+#define AF_UNIX 1 /* local to host (pipes, portals) */
+#define AF_INET 2 /* internetwork: UDP, TCP, etc. */
+#define AF_IMPLINK 3 /* arpanet imp addresses */
+#define AF_PUP 4 /* pup protocols: e.g. BSP */
+#define AF_CHAOS 5 /* mit CHAOS protocols */
+#define AF_IPX 6 /* IPX and SPX */
+#define AF_NS 6 /* XEROX NS protocols */
+#define AF_ISO 7 /* ISO protocols */
+#define AF_OSI AF_ISO /* OSI is ISO */
+#define AF_ECMA 8 /* european computer manufacturers */
+#define AF_DATAKIT 9 /* datakit protocols */
+#define AF_CCITT 10 /* CCITT protocols, X.25 etc */
+#define AF_SNA 11 /* IBM SNA */
+#define AF_DECnet 12 /* DECnet */
+#define AF_DLI 13 /* Direct data link interface */
+#define AF_LAT 14 /* LAT */
+#define AF_HYLINK 15 /* NSC Hyperchannel */
+#define AF_APPLETALK 16 /* AppleTalk */
+#define AF_NETBIOS 17 /* NetBios-style addresses */
+
+#define AF_MAX 18
+
+/*
+ * Structure used by kernel to store most
+ * addresses.
+ */
+struct sockaddr {
+ u_short sa_family;
+ char sa_data[14];
+};
+
+/*
+ * Structure used by kernel to pass protocol
+ * information in raw sockets.
+ */
+struct sockproto {
+ u_short sp_family;
+ u_short sp_protocol;
+};
+
+/*
+ * Protocol families, same as address families for now.
+ */
+#define PF_UNSPEC AF_UNSPEC
+#define PF_UNIX AF_UNIX
+#define PF_INET AF_INET
+#define PF_IMPLINK AF_IMPLINK
+#define PF_PUP AF_PUP
+#define PF_CHAOS AF_CHAOS
+#define PF_NS AF_NS
+#define PF_IPX AF_IPX
+#define PF_ISO AF_ISO
+#define PF_OSI AF_OSI
+#define PF_ECMA AF_ECMA
+#define PF_DATAKIT AF_DATAKIT
+#define PF_CCITT AF_CCITT
+#define PF_SNA AF_SNA
+#define PF_DECnet AF_DECnet
+#define PF_DLI AF_DLI
+#define PF_LAT AF_LAT
+#define PF_HYLINK AF_HYLINK
+#define PF_APPLETALK AF_APPLETALK
+
+#define PF_MAX AF_MAX
+
+/*
+ * Structure used for manipulating linger option.
+ */
+struct linger {
+ u_short l_onoff;
+ u_short l_linger;
+};
+
+/*
+ * Level number for (get/set)sockopt() to apply to socket itself.
+ */
+#define SOL_SOCKET 0xffff /* options for socket level */
+
+/*
+ * Maximum queue length specifiable by listen.
+ */
+#define SOMAXCONN 5
+
+#define MSG_OOB 0x1 /* process out-of-band data */
+#define MSG_PEEK 0x2 /* peek at incoming message */
+#define MSG_DONTROUTE 0x4 /* send without using routing tables */
+
+#define MSG_MAXIOVLEN 16
+
+#define MSG_PARTIAL 0x8000 /* partial send or recv for message xport */
+
+/*
+ * Define constant based on rfc883, used by gethostbyxxxx() calls.
+ */
+#define MAXGETHOSTSTRUCT 1024
+#ifndef MAXHOSTNAMELEN
+#define MAXHOSTNAMELEN MAXGETHOSTSTRUCT
+#endif
+
+/*
+ * Define flags to be used with the WSAAsyncSelect() call.
+ */
+#define FD_READ 0x01
+#define FD_WRITE 0x02
+#define FD_OOB 0x04
+#define FD_ACCEPT 0x08
+#define FD_CONNECT 0x10
+#define FD_CLOSE 0x20
+
+/*
+ * All Windows Sockets error constants are biased by WSABASEERR from
+ * the "normal"
+ */
+#define WSABASEERR 10000
+/*
+ * Windows Sockets definitions of regular Microsoft C error constants
+ */
+#define WSAEINTR (WSABASEERR+4)
+#define WSAEBADF (WSABASEERR+9)
+#define WSAEACCES (WSABASEERR+13)
+#define WSAEFAULT (WSABASEERR+14)
+#define WSAEINVAL (WSABASEERR+22)
+#define WSAEMFILE (WSABASEERR+24)
+
+/*
+ * Windows Sockets definitions of regular Berkeley error constants
+ */
+#define WSAEWOULDBLOCK (WSABASEERR+35)
+#define WSAEINPROGRESS (WSABASEERR+36)
+#define WSAEALREADY (WSABASEERR+37)
+#define WSAENOTSOCK (WSABASEERR+38)
+#define WSAEDESTADDRREQ (WSABASEERR+39)
+#define WSAEMSGSIZE (WSABASEERR+40)
+#define WSAEPROTOTYPE (WSABASEERR+41)
+#define WSAENOPROTOOPT (WSABASEERR+42)
+#define WSAEPROTONOSUPPORT (WSABASEERR+43)
+#define WSAESOCKTNOSUPPORT (WSABASEERR+44)
+#define WSAEOPNOTSUPP (WSABASEERR+45)
+#define WSAEPFNOSUPPORT (WSABASEERR+46)
+#define WSAEAFNOSUPPORT (WSABASEERR+47)
+#define WSAEADDRINUSE (WSABASEERR+48)
+#define WSAEADDRNOTAVAIL (WSABASEERR+49)
+#define WSAENETDOWN (WSABASEERR+50)
+#define WSAENETUNREACH (WSABASEERR+51)
+#define WSAENETRESET (WSABASEERR+52)
+#define WSAECONNABORTED (WSABASEERR+53)
+#define WSAECONNRESET (WSABASEERR+54)
+#define WSAENOBUFS (WSABASEERR+55)
+#define WSAEISCONN (WSABASEERR+56)
+#define WSAENOTCONN (WSABASEERR+57)
+#define WSAESHUTDOWN (WSABASEERR+58)
+#define WSAETOOMANYREFS (WSABASEERR+59)
+#define WSAETIMEDOUT (WSABASEERR+60)
+#define WSAECONNREFUSED (WSABASEERR+61)
+#define WSAELOOP (WSABASEERR+62)
+#define WSAENAMETOOLONG (WSABASEERR+63)
+#define WSAEHOSTDOWN (WSABASEERR+64)
+#define WSAEHOSTUNREACH (WSABASEERR+65)
+#define WSAENOTEMPTY (WSABASEERR+66)
+#define WSAEPROCLIM (WSABASEERR+67)
+#define WSAEUSERS (WSABASEERR+68)
+#define WSAEDQUOT (WSABASEERR+69)
+#define WSAESTALE (WSABASEERR+70)
+#define WSAEREMOTE (WSABASEERR+71)
+
+#define WSAEDISCON (WSABASEERR+101)
+
+/*
+ * Extended Windows Sockets error constant definitions
+ */
+#define WSASYSNOTREADY (WSABASEERR+91)
+#define WSAVERNOTSUPPORTED (WSABASEERR+92)
+#define WSANOTINITIALISED (WSABASEERR+93)
+
+/*
+ * Error return codes from gethostbyname() and gethostbyaddr()
+ * (when using the resolver). Note that these errors are
+ * retrieved via WSAGetLastError() and must therefore follow
+ * the rules for avoiding clashes with error numbers from
+ * specific implementations or language run-time systems.
+ * For this reason the codes are based at WSABASEERR+1001.
+ * Note also that [WSA]NO_ADDRESS is defined only for
+ * compatibility purposes.
+ */
+
+#define h_errno WSAGetLastError()
+
+/* Authoritative Answer: Host not found */
+#define WSAHOST_NOT_FOUND (WSABASEERR+1001)
+#define HOST_NOT_FOUND WSAHOST_NOT_FOUND
+
+/* Non-Authoritative: Host not found, or SERVERFAIL */
+#define WSATRY_AGAIN (WSABASEERR+1002)
+#define TRY_AGAIN WSATRY_AGAIN
+
+/* Non recoverable errors, FORMERR, REFUSED, NOTIMP */
+#define WSANO_RECOVERY (WSABASEERR+1003)
+#define NO_RECOVERY WSANO_RECOVERY
+
+/* Valid name, no data record of requested type */
+#define WSANO_DATA (WSABASEERR+1004)
+#define NO_DATA WSANO_DATA
+
+/* no address, look for MX record */
+#define WSANO_ADDRESS WSANO_DATA
+#define NO_ADDRESS WSANO_ADDRESS
+
+/*
+ * Windows Sockets errors redefined as regular Berkeley error constants.
+ * These are commented out in Windows NT to avoid conflicts with errno.h.
+ * Use the WSA constants instead.
+ */
+#if 0
+#define EWOULDBLOCK WSAEWOULDBLOCK
+#define EINPROGRESS WSAEINPROGRESS
+#define EALREADY WSAEALREADY
+#define ENOTSOCK WSAENOTSOCK
+#define EDESTADDRREQ WSAEDESTADDRREQ
+#define EMSGSIZE WSAEMSGSIZE
+#define EPROTOTYPE WSAEPROTOTYPE
+#define ENOPROTOOPT WSAENOPROTOOPT
+#define EPROTONOSUPPORT WSAEPROTONOSUPPORT
+#define ESOCKTNOSUPPORT WSAESOCKTNOSUPPORT
+#define EOPNOTSUPP WSAEOPNOTSUPP
+#define EPFNOSUPPORT WSAEPFNOSUPPORT
+#define EAFNOSUPPORT WSAEAFNOSUPPORT
+#define EADDRINUSE WSAEADDRINUSE
+#define EADDRNOTAVAIL WSAEADDRNOTAVAIL
+#define ENETDOWN WSAENETDOWN
+#define ENETUNREACH WSAENETUNREACH
+#define ENETRESET WSAENETRESET
+#define ECONNABORTED WSAECONNABORTED
+#define ECONNRESET WSAECONNRESET
+#define ENOBUFS WSAENOBUFS
+#define EISCONN WSAEISCONN
+#define ENOTCONN WSAENOTCONN
+#define ESHUTDOWN WSAESHUTDOWN
+#define ETOOMANYREFS WSAETOOMANYREFS
+#define ETIMEDOUT WSAETIMEDOUT
+#define ECONNREFUSED WSAECONNREFUSED
+#define ELOOP WSAELOOP
+#define ENAMETOOLONG WSAENAMETOOLONG
+#define EHOSTDOWN WSAEHOSTDOWN
+#define EHOSTUNREACH WSAEHOSTUNREACH
+#define ENOTEMPTY WSAENOTEMPTY
+#define EPROCLIM WSAEPROCLIM
+#define EUSERS WSAEUSERS
+#define EDQUOT WSAEDQUOT
+#define ESTALE WSAESTALE
+#define EREMOTE WSAEREMOTE
+#endif
+
+/* Socket function prototypes */
+
+SOCKET PASCAL accept (SOCKET s, struct sockaddr *addr,
+ int *addrlen);
+
+int PASCAL bind (SOCKET s, const struct sockaddr *addr, int namelen);
+
+int PASCAL closesocket (SOCKET s);
+
+int PASCAL connect (SOCKET s, const struct sockaddr *name, int namelen);
+
+int PASCAL ioctlsocket (SOCKET s, long cmd, u_long *argp);
+
+int PASCAL getpeername (SOCKET s, struct sockaddr *name,
+ int * namelen);
+
+int PASCAL getsockname (SOCKET s, struct sockaddr *name,
+ int * namelen);
+
+int PASCAL getsockopt (SOCKET s, int level, int optname,
+ char * optval, int *optlen);
+
+u_long PASCAL htonl (u_long hostlong);
+
+/* For some reason WSOCK.LIB has htons defined as a 4 byte paramter?! */
+#ifdef _WIN32
+u_short PASCAL htons (u_long hostshort);
+#else
+u_short PASCAL htons (u_short hostshort);
+#endif /* _WIN32 */
+
+unsigned long PASCAL inet_addr (const char * cp);
+
+char * PASCAL inet_ntoa (struct in_addr in);
+
+int PASCAL listen (SOCKET s, int backlog);
+
+u_long PASCAL ntohl (u_long netlong);
+
+/* For some reason WSOCK.LIB has ntohs defined as a 4 byte paramter?! */
+#ifdef _WIN32
+u_short PASCAL ntohs (u_long netshort);
+#else
+u_short PASCAL ntohs (u_short netshort);
+#endif /* _WIN32 */
+
+int PASCAL recv (SOCKET s, char * buf, int len, int flags);
+
+int PASCAL recvfrom (SOCKET s, char * buf, int len, int flags,
+ struct sockaddr *from, int * fromlen);
+
+int PASCAL select (int nfds, fd_set *readfds, fd_set *writefds,
+ fd_set *exceptfds, const struct timeval *timeout);
+
+int PASCAL send (SOCKET s, const char * buf, int len, int flags);
+
+int PASCAL sendto (SOCKET s, const char * buf, int len, int flags,
+ const struct sockaddr *to, int tolen);
+
+int PASCAL setsockopt (SOCKET s, int level, int optname,
+ const char * optval, int optlen);
+
+int PASCAL shutdown (SOCKET s, int how);
+
+SOCKET PASCAL socket (int af, int type, int protocol);
+
+/* Database function prototypes */
+
+struct hostent * PASCAL gethostbyaddr(const char * addr,
+ int len, int type);
+
+struct hostent * PASCAL gethostbyname(const char * name);
+
+int PASCAL gethostname (char * name, int namelen);
+
+struct servent * PASCAL getservbyport(int port, const char * proto);
+
+struct servent * PASCAL getservbyname(const char * name,
+ const char * proto);
+
+struct protoent * PASCAL getprotobynumber(int proto);
+
+struct protoent * PASCAL getprotobyname(const char * name);
+
+/* Microsoft Windows Extension function prototypes */
+
+/* int PASCAL WSAStartup(WORD wVersionRequired, LPWSADATA lpWSAData); */
+int PASCAL WSAStartup(int wVersionRequired, LPWSADATA lpWSAData);
+
+
+int PASCAL WSACleanup(void);
+
+void PASCAL WSASetLastError(int iError);
+
+int PASCAL WSAGetLastError(void);
+
+WINBOOL PASCAL WSAIsBlocking(void);
+
+int PASCAL WSAUnhookBlockingHook(void);
+
+FARPROC PASCAL WSASetBlockingHook(FARPROC lpBlockFunc);
+
+int PASCAL WSACancelBlockingCall(void);
+
+HANDLE PASCAL WSAAsyncGetServByName(HWND hWnd, u_int wMsg,
+ const char * name,
+ const char * proto,
+ char * buf, int buflen);
+
+HANDLE PASCAL WSAAsyncGetServByPort(HWND hWnd, u_int wMsg, int port,
+ const char * proto, char * buf,
+ int buflen);
+
+HANDLE PASCAL WSAAsyncGetProtoByName(HWND hWnd, u_int wMsg,
+ const char * name, char * buf,
+ int buflen);
+
+HANDLE PASCAL WSAAsyncGetProtoByNumber(HWND hWnd, u_int wMsg,
+ int number, char * buf,
+ int buflen);
+
+HANDLE PASCAL WSAAsyncGetHostByName(HWND hWnd, u_int wMsg,
+ const char * name, char * buf,
+ int buflen);
+
+HANDLE PASCAL WSAAsyncGetHostByAddr(HWND hWnd, u_int wMsg,
+ const char * addr, int len, int type,
+ char * buf, int buflen);
+
+int PASCAL WSACancelAsyncRequest(HANDLE hAsyncTaskHandle);
+
+int PASCAL WSAAsyncSelect(SOCKET s, HWND hWnd, u_int wMsg,
+ long lEvent);
+
+int PASCAL WSARecvEx (SOCKET s, char * buf, int len, int *flags);
+
+/* Microsoft Windows Extended data types */
+typedef struct sockaddr SOCKADDR;
+typedef struct sockaddr *PSOCKADDR;
+typedef struct sockaddr *LPSOCKADDR;
+
+typedef struct sockaddr_in SOCKADDR_IN;
+typedef struct sockaddr_in *PSOCKADDR_IN;
+typedef struct sockaddr_in *LPSOCKADDR_IN;
+
+typedef struct linger LINGER;
+typedef struct linger *PLINGER;
+typedef struct linger *LPLINGER;
+
+typedef struct in_addr IN_ADDR;
+typedef struct in_addr *PIN_ADDR;
+typedef struct in_addr *LPIN_ADDR;
+
+typedef struct fd_set FD_SET;
+typedef struct fd_set *PFD_SET;
+typedef struct fd_set *LPFD_SET;
+
+typedef struct hostent HOSTENT;
+typedef struct hostent *PHOSTENT;
+typedef struct hostent *LPHOSTENT;
+
+typedef struct servent SERVENT;
+typedef struct servent *PSERVENT;
+typedef struct servent *LPSERVENT;
+
+typedef struct protoent PROTOENT;
+typedef struct protoent *PPROTOENT;
+typedef struct protoent *LPPROTOENT;
+
+typedef struct timeval TIMEVAL;
+typedef struct timeval *PTIMEVAL;
+typedef struct timeval *LPTIMEVAL;
+
+/*
+ * Windows message parameter composition and decomposition
+ * macros.
+ *
+ * WSAMAKEASYNCREPLY is intended for use by the Windows Sockets implementation
+ * when constructing the response to a WSAAsyncGetXByY() routine.
+ */
+#define WSAMAKEASYNCREPLY(buflen,error) MAKELONG(buflen,error)
+/*
+ * WSAMAKESELECTREPLY is intended for use by the Windows Sockets implementation
+ * when constructing the response to WSAAsyncSelect().
+ */
+#define WSAMAKESELECTREPLY(event,error) MAKELONG(event,error)
+/*
+ * WSAGETASYNCBUFLEN is intended for use by the Windows Sockets application
+ * to extract the buffer length from the lParam in the response
+ * to a WSAGetXByY().
+ */
+#define WSAGETASYNCBUFLEN(lParam) LOWORD(lParam)
+/*
+ * WSAGETASYNCERROR is intended for use by the Windows Sockets application
+ * to extract the error code from the lParam in the response
+ * to a WSAGetXByY().
+ */
+#define WSAGETASYNCERROR(lParam) HIWORD(lParam)
+/*
+ * WSAGETSELECTEVENT is intended for use by the Windows Sockets application
+ * to extract the event code from the lParam in the response
+ * to a WSAAsyncSelect().
+ */
+#define WSAGETSELECTEVENT(lParam) LOWORD(lParam)
+/*
+ * WSAGETSELECTERROR is intended for use by the Windows Sockets application
+ * to extract the error code from the lParam in the response
+ * to a WSAAsyncSelect().
+ */
+#define WSAGETSELECTERROR(lParam) HIWORD(lParam)
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* _GNU_H_WINDOWS32_SOCKETS */
--- /dev/null
+/*
+ * Adapted from linux for the reactos kernel, march 1998 -- David Welch
+ * Removed extern specifier from ___strtok and ___wcstok, june 1998 -- Boudewijn Dekker
+ * Added stricmp and strnicmp -- Boudewijn Dekker
+ */
+
+
+
+
+#ifndef _LINUX_STRING_H_
+#define _LINUX_STRING_H_
+
+#include <types.h> /* for size_t */
+
+
+#ifndef NULL
+#define NULL ((void *) 0)
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+char * ___strtok; // removed extern specifier 02-06-98, BD
+
+extern char * strcpy(char *,const char *);
+extern char * strncpy(char *,const char *, __kernel_size_t);
+extern char * strcat(char *, const char *);
+extern char * strncat(char *, const char *, __kernel_size_t);
+extern char * strchr(const char *,int);
+extern char * strrchr(const char *,int);
+extern char * strpbrk(const char *,const char *);
+extern char * strtok(char *,const char *);
+extern char * strstr(const char *,const char *);
+extern __kernel_size_t strlen(const char *);
+extern __kernel_size_t strnlen(const char *,__kernel_size_t);
+extern __kernel_size_t strspn(const char *,const char *);
+extern int strcmp(const char *,const char *);
+extern int strncmp(const char *,const char *,__kernel_size_t);
+extern int stricmp(const char* cs,const char * ct)
+extern int strnicmp(const char* cs,const char * ct, size_t count);
+
+extern void * memset(void *,int,__kernel_size_t);
+extern void * memcpy(void *,const void *,__kernel_size_t);
+extern void * memmove(void *,const void *,__kernel_size_t);
+extern void * memscan(void *,int,__kernel_size_t);
+extern int memcmp(const void *,const void *,__kernel_size_t);
+
+
+/*
+ * Include machine specific inline routines
+ */
+#ifndef _I386_STRING_H_
+#define _I386_STRING_H_
+
+/*
+ * On a 486 or Pentium, we are better off not using the
+ * byte string operations. But on a 386 or a PPro the
+ * byte string ops are faster than doing it by hand
+ * (MUCH faster on a Pentium).
+ *
+ * Also, the byte strings actually work correctly. Forget
+ * the i486 routines for now as they may be broken..
+ */
+#if FIXED_486_STRING && (CPU == 486 || CPU == 586)
+ #include <asm/string-486.h>
+#else
+
+/*
+ * This string-include defines all string functions as inline
+ * functions. Use gcc. It also assumes ds=es=data space, this should be
+ * normal. Most of the string-functions are rather heavily hand-optimized,
+ * see especially strtok,strstr,str[c]spn. They should work, but are not
+ * very easy to understand. Everything is done entirely within the register
+ * set, making the functions fast and clean. String instructions have been
+ * used through-out, making for "slightly" unclear code :-)
+ *
+ * Copyright (C) 1991, 1992 Linus Torvalds
+ */
+
+#define __HAVE_ARCH_STRCPY
+extern inline char * strcpy(char * dest,const char *src)
+{
+__asm__ __volatile__(
+ "cld\n"
+ "1:\tlodsb\n\t"
+ "stosb\n\t"
+ "testb %%al,%%al\n\t"
+ "jne 1b"
+ : /* no output */
+ :"S" (src),"D" (dest):"si","di","ax","memory");
+return dest;
+}
+
+#define __HAVE_ARCH_STRNCPY
+extern inline char * strncpy(char * dest,const char *src,size_t count)
+{
+__asm__ __volatile__(
+ "cld\n"
+ "1:\tdecl %2\n\t"
+ "js 2f\n\t"
+ "lodsb\n\t"
+ "stosb\n\t"
+ "testb %%al,%%al\n\t"
+ "jne 1b\n\t"
+ "rep\n\t"
+ "stosb\n"
+ "2:"
+ : /* no output */
+ :"S" (src),"D" (dest),"c" (count):"si","di","ax","cx","memory");
+return dest;
+}
+
+#define __HAVE_ARCH_STRCAT
+extern inline char * strcat(char * dest,const char * src)
+{
+__asm__ __volatile__(
+ "cld\n\t"
+ "repne\n\t"
+ "scasb\n\t"
+ "decl %1\n"
+ "1:\tlodsb\n\t"
+ "stosb\n\t"
+ "testb %%al,%%al\n\t"
+ "jne 1b"
+ : /* no output */
+ :"S" (src),"D" (dest),"a" (0),"c" (0xffffffff):"si","di","ax","cx");
+return dest;
+}
+
+#define __HAVE_ARCH_STRNCAT
+extern inline char * strncat(char * dest,const char * src,size_t count)
+{
+__asm__ __volatile__(
+ "cld\n\t"
+ "repne\n\t"
+ "scasb\n\t"
+ "decl %1\n\t"
+ "movl %4,%3\n"
+ "1:\tdecl %3\n\t"
+ "js 2f\n\t"
+ "lodsb\n\t"
+ "stosb\n\t"
+ "testb %%al,%%al\n\t"
+ "jne 1b\n"
+ "2:\txorl %2,%2\n\t"
+ "stosb"
+ : /* no output */
+ :"S" (src),"D" (dest),"a" (0),"c" (0xffffffff),"g" (count)
+ :"si","di","ax","cx","memory");
+return dest;
+}
+
+#define __HAVE_ARCH_STRCMP
+extern inline int strcmp(const char * cs,const char * ct)
+{
+register int __res;
+__asm__ __volatile__(
+ "cld\n"
+ "1:\tlodsb\n\t"
+ "scasb\n\t"
+ "jne 2f\n\t"
+ "testb %%al,%%al\n\t"
+ "jne 1b\n\t"
+ "xorl %%eax,%%eax\n\t"
+ "jmp 3f\n"
+ "2:\tsbbl %%eax,%%eax\n\t"
+ "orb $1,%%eax\n"
+ "3:"
+ :"=a" (__res):"S" (cs),"D" (ct):"si","di");
+return __res;
+}
+
+#define __HAVE_ARCH_STRNCMP
+extern inline int strncmp(const char * cs,const char * ct,size_t count)
+{
+register int __res;
+__asm__ __volatile__(
+ "cld\n"
+ "1:\tdecl %3\n\t"
+ "js 2f\n\t"
+ "lodsb\n\t"
+ "scasb\n\t"
+ "jne 3f\n\t"
+ "testb %%al,%%al\n\t"
+ "jne 1b\n"
+ "2:\txorl %%eax,%%eax\n\t"
+ "jmp 4f\n"
+ "3:\tsbbl %%eax,%%eax\n\t"
+ "orb $1,%%al\n"
+ "4:"
+ :"=a" (__res):"S" (cs),"D" (ct),"c" (count):"si","di","cx");
+return __res;
+}
+
+#define __HAVE_ARCH_STRCHR
+extern inline char * strchr(const char * s, int c)
+{
+register char * __res;
+__asm__ __volatile__(
+ "cld\n\t"
+ "movb %%al,%%ah\n"
+ "1:\tlodsb\n\t"
+ "cmpb %%ah,%%al\n\t"
+ "je 2f\n\t"
+ "testb %%al,%%al\n\t"
+ "jne 1b\n\t"
+ "movl $1,%1\n"
+ "2:\tmovl %1,%0\n\t"
+ "decl %0"
+ :"=a" (__res):"S" (s),"0" (c):"si");
+return __res;
+}
+
+#define __HAVE_ARCH_STRRCHR
+extern inline char * strrchr(const char * s, int c)
+{
+register char * __res;
+__asm__ __volatile__(
+ "cld\n\t"
+ "movb %%al,%%ah\n"
+ "1:\tlodsb\n\t"
+ "cmpb %%ah,%%al\n\t"
+ "jne 2f\n\t"
+ "leal -1(%%esi),%0\n"
+ "2:\ttestb %%al,%%al\n\t"
+ "jne 1b"
+ :"=d" (__res):"0" (0),"S" (s),"a" (c):"ax","si");
+return __res;
+}
+
+#define __HAVE_ARCH_STRSPN
+extern inline size_t strspn(const char * cs, const char * ct)
+{
+register char * __res;
+__asm__ __volatile__(
+ "cld\n\t"
+ "movl %4,%%edi\n\t"
+ "repne\n\t"
+ "scasb\n\t"
+ "notl %%ecx\n\t"
+ "decl %%ecx\n\t"
+ "movl %%ecx,%%edx\n"
+ "1:\tlodsb\n\t"
+ "testb %%al,%%al\n\t"
+ "je 2f\n\t"
+ "movl %4,%%edi\n\t"
+ "movl %%edx,%%ecx\n\t"
+ "repne\n\t"
+ "scasb\n\t"
+ "je 1b\n"
+ "2:\tdecl %0"
+ :"=S" (__res):"a" (0),"c" (0xffffffff),"0" (cs),"g" (ct)
+ :"ax","cx","dx","di");
+return __res-cs;
+}
+
+#define __HAVE_ARCH_STRCSPN
+extern inline size_t strcspn(const char * cs, const char * ct)
+{
+register char * __res;
+__asm__ __volatile__(
+ "cld\n\t"
+ "movl %4,%%edi\n\t"
+ "repne\n\t"
+ "scasb\n\t"
+ "notl %%ecx\n\t"
+ "decl %%ecx\n\t"
+ "movl %%ecx,%%edx\n"
+ "1:\tlodsb\n\t"
+ "testb %%al,%%al\n\t"
+ "je 2f\n\t"
+ "movl %4,%%edi\n\t"
+ "movl %%edx,%%ecx\n\t"
+ "repne\n\t"
+ "scasb\n\t"
+ "jne 1b\n"
+ "2:\tdecl %0"
+ :"=S" (__res):"a" (0),"c" (0xffffffff),"0" (cs),"g" (ct)
+ :"ax","cx","dx","di");
+return __res-cs;
+}
+
+#define __HAVE_ARCH_STRPBRK
+extern inline char * strpbrk(const char * cs,const char * ct)
+{
+register char * __res;
+__asm__ __volatile__(
+ "cld\n\t"
+ "movl %4,%%edi\n\t"
+ "repne\n\t"
+ "scasb\n\t"
+ "notl %%ecx\n\t"
+ "decl %%ecx\n\t"
+ "movl %%ecx,%%edx\n"
+ "1:\tlodsb\n\t"
+ "testb %%al,%%al\n\t"
+ "je 2f\n\t"
+ "movl %4,%%edi\n\t"
+ "movl %%edx,%%ecx\n\t"
+ "repne\n\t"
+ "scasb\n\t"
+ "jne 1b\n\t"
+ "decl %0\n\t"
+ "jmp 3f\n"
+ "2:\txorl %0,%0\n"
+ "3:"
+ :"=S" (__res):"a" (0),"c" (0xffffffff),"0" (cs),"g" (ct)
+ :"ax","cx","dx","di");
+return __res;
+}
+
+#define __HAVE_ARCH_STRSTR
+extern inline char * strstr(const char * cs,const char * ct)
+{
+register char * __res;
+__asm__ __volatile__(
+ "cld\n\t" \
+ "movl %4,%%edi\n\t"
+ "repne\n\t"
+ "scasb\n\t"
+ "notl %%ecx\n\t"
+ "decl %%ecx\n\t" /* NOTE! This also sets Z if searchstring='' */
+ "movl %%ecx,%%edx\n"
+ "1:\tmovl %4,%%edi\n\t"
+ "movl %%esi,%%eax\n\t"
+ "movl %%edx,%%ecx\n\t"
+ "repe\n\t"
+ "cmpsb\n\t"
+ "je 2f\n\t" /* also works for empty string, see above */
+ "xchgl %%eax,%%esi\n\t"
+ "incl %%esi\n\t"
+ "cmpb $0,-1(%%eax)\n\t"
+ "jne 1b\n\t"
+ "xorl %%eax,%%eax\n\t"
+ "2:"
+ :"=a" (__res):"0" (0),"c" (0xffffffff),"S" (cs),"g" (ct)
+ :"cx","dx","di","si");
+return __res;
+}
+
+#define __HAVE_ARCH_STRLEN
+extern inline size_t strlen(const char * s)
+{
+register int __res;
+__asm__ __volatile__(
+ "cld\n\t"
+ "repne\n\t"
+ "scasb\n\t"
+ "notl %0\n\t"
+ "decl %0"
+ :"=c" (__res):"D" (s),"a" (0),"0" (0xffffffff):"di");
+return __res;
+}
+
+#define __HAVE_ARCH_STRTOK
+extern inline char * strtok(char * s,const char * ct)
+{
+register char * __res;
+__asm__ __volatile__(
+ "testl %1,%1\n\t"
+ "jne 1f\n\t"
+ "testl %0,%0\n\t"
+ "je 8f\n\t"
+ "movl %0,%1\n"
+ "1:\txorl %0,%0\n\t"
+ "movl $-1,%%ecx\n\t"
+ "xorl %%eax,%%eax\n\t"
+ "cld\n\t"
+ "movl %4,%%edi\n\t"
+ "repne\n\t"
+ "scasb\n\t"
+ "notl %%ecx\n\t"
+ "decl %%ecx\n\t"
+ "je 7f\n\t" /* empty delimiter-string */
+ "movl %%ecx,%%edx\n"
+ "2:\tlodsb\n\t"
+ "testb %%al,%%al\n\t"
+ "je 7f\n\t"
+ "movl %4,%%edi\n\t"
+ "movl %%edx,%%ecx\n\t"
+ "repne\n\t"
+ "scasb\n\t"
+ "je 2b\n\t"
+ "decl %1\n\t"
+ "cmpb $0,(%1)\n\t"
+ "je 7f\n\t"
+ "movl %1,%0\n"
+ "3:\tlodsb\n\t"
+ "testb %%al,%%al\n\t"
+ "je 5f\n\t"
+ "movl %4,%%edi\n\t"
+ "movl %%edx,%%ecx\n\t"
+ "repne\n\t"
+ "scasb\n\t"
+ "jne 3b\n\t"
+ "decl %1\n\t"
+ "cmpb $0,(%1)\n\t"
+ "je 5f\n\t"
+ "movb $0,(%1)\n\t"
+ "incl %1\n\t"
+ "jmp 6f\n"
+ "5:\txorl %1,%1\n"
+ "6:\tcmpb $0,(%0)\n\t"
+ "jne 7f\n\t"
+ "xorl %0,%0\n"
+ "7:\ttestl %0,%0\n\t"
+ "jne 8f\n\t"
+ "movl %0,%1\n"
+ "8:"
+ :"=b" (__res),"=S" (___strtok)
+ :"0" (___strtok),"1" (s),"g" (ct)
+ :"ax","cx","dx","di","memory");
+return __res;
+}
+
+
+#define __HAVE_ARCH_STRICMP
+extern inline int stricmp(const char* cs,const char * ct)
+{
+register int __res;
+
+
+__asm__ __volatile__(
+ "cld\n"
+ "1:\tmovb (%%esi), %%eax\n\t"
+ "movb (%%edi), %%dl \n\t"
+ "cmpb $0x5A, %%al\n\t"
+ "ja 2f\t\n"
+ "cmpb $0x40, %%al\t\n"
+ "jbe 2f\t\n"
+ "addb $0x20, %%al\t\n"
+ "2:\t cmpb $0x5A, %%dl\t\n"
+ "ja 3f\t\n"
+ "cmpb $0x40, %%dl\t\n"
+ "jbe 3f\t\n"
+ "addb $0x20, %%dl\t\n"
+ "3:\t inc %%esi\t\n"
+ "inc %%edi\t\n"
+ "cmpb %%al, %%dl\t\n"
+ "jne 4f\n\t"
+ "cmpb $00, %%al\n\t"
+ "jne 1b\n\t"
+ "xorl %%eax,%%eax\n\t"
+ "jmp 5f\n"
+ "4:\tsbbl %%eax,%%eax\n\t"
+ "orb $1,%%eax\n"
+ "5:"
+ :"=a" (__res):"S" (cs),"D" (ct):"si","di");
+
+return __res;
+}
+
+
+#define __HAVE_ARCH_STRNICMP
+extern inline int strnicmp(const char* cs,const char * ct, size_t count)
+{
+register int __res;
+
+
+__asm__ __volatile__(
+ "cld\n"
+ "1:\t decl %3\n\t"
+ "js 6f\n\t"
+ "movb (%%esi), %%al\n\t"
+ "movb (%%edi), %%dl \n\t"
+ "cmpb $0x5A, %%al\n\t"
+ "ja 2f\t\n"
+ "cmpb $0x40, %%al\t\n"
+ "jbe 2f\t\n"
+ "addb $0x20, %%al\t\n"
+ "2:\t cmpb $0x5A, %%dl\t\n"
+ "ja 3f\t\n"
+ "cmpb $0x40, %%dl\t\n"
+ "jbe 3f\t\n"
+ "addb $0x20, %%dl\t\n"
+ "3:\t inc %%esi\t\n"
+ "inc %%edi\t\n"
+ "cmpb %%al, %%dl\t\n"
+ "jne 4f\n\t"
+ "cmpb $00, %%al\n\t"
+ "jne 1b\n\t"
+ "6:xorl %%eax,%%eax\n\t"
+ "jmp 5f\n"
+ "4:\tsbbl %%eax,%%eax\n\t"
+ "orb $1,%%eax\n"
+ "5:"
+ :"=a" (__res):"S" (cs),"D" (ct), "c" (count):"si","di", "cx");
+
+
+return __res;
+}
+
+
+
+
+
+
+extern inline void * __memcpy(void * to, const void * from, size_t n)
+{
+__asm__ __volatile__(
+ "cld\n\t"
+ "rep ; movsl\n\t"
+ "testb $2,%b1\n\t"
+ "je 1f\n\t"
+ "movsw\n"
+ "1:\ttestb $1,%b1\n\t"
+ "je 2f\n\t"
+ "movsb\n"
+ "2:"
+ : /* no output */
+ :"c" (n/4), "q" (n),"D" ((long) to),"S" ((long) from)
+ : "cx","di","si","memory");
+return (to);
+}
+
+/*
+ * This looks horribly ugly, but the compiler can optimize it totally,
+ * as the count is constant.
+ */
+extern inline void * __constant_memcpy(void * to, const void * from, size_t n)
+{
+ switch (n) {
+ case 0:
+ return to;
+ case 1:
+ *(unsigned char *)to = *(const unsigned char *)from;
+ return to;
+ case 2:
+ *(unsigned short *)to = *(const unsigned short *)from;
+ return to;
+ case 3:
+ *(unsigned short *)to = *(const unsigned short *)from;
+ *(2+(unsigned char *)to) = *(2+(const unsigned char *)from);
+ return to;
+ case 4:
+ *(unsigned long *)to = *(const unsigned long *)from;
+ return to;
+ case 8:
+ *(unsigned long *)to = *(const unsigned long *)from;
+ *(1+(unsigned long *)to) = *(1+(const unsigned long *)from);
+ return to;
+ case 12:
+ *(unsigned long *)to = *(const unsigned long *)from;
+ *(1+(unsigned long *)to) = *(1+(const unsigned long *)from);
+ *(2+(unsigned long *)to) = *(2+(const unsigned long *)from);
+ return to;
+ case 16:
+ *(unsigned long *)to = *(const unsigned long *)from;
+ *(1+(unsigned long *)to) = *(1+(const unsigned long *)from);
+ *(2+(unsigned long *)to) = *(2+(const unsigned long *)from);
+ *(3+(unsigned long *)to) = *(3+(const unsigned long *)from);
+ return to;
+ case 20:
+ *(unsigned long *)to = *(const unsigned long *)from;
+ *(1+(unsigned long *)to) = *(1+(const unsigned long *)from);
+ *(2+(unsigned long *)to) = *(2+(const unsigned long *)from);
+ *(3+(unsigned long *)to) = *(3+(const unsigned long *)from);
+ *(4+(unsigned long *)to) = *(4+(const unsigned long *)from);
+ return to;
+ }
+#define COMMON(x) \
+__asm__("cld\n\t" \
+ "rep ; movsl" \
+ x \
+ : /* no outputs */ \
+ : "c" (n/4),"D" ((long) to),"S" ((long) from) \
+ : "cx","di","si","memory");
+
+ switch (n % 4) {
+ case 0: COMMON(""); return to;
+ case 1: COMMON("\n\tmovsb"); return to;
+ case 2: COMMON("\n\tmovsw"); return to;
+ case 3: COMMON("\n\tmovsw\n\tmovsb"); return to;
+ }
+#undef COMMON
+}
+
+#define __HAVE_ARCH_MEMCPY
+#define memcpy(t, f, n) \
+(__builtin_constant_p(n) ? \
+ __constant_memcpy((t),(f),(n)) : \
+ __memcpy((t),(f),(n)))
+
+#define __HAVE_ARCH_MEMMOVE
+extern inline void * memmove(void * dest,const void * src, size_t n)
+{
+if (dest<src)
+__asm__ __volatile__(
+ "cld\n\t"
+ "rep\n\t"
+ "movsb"
+ : /* no output */
+ :"c" (n),"S" (src),"D" (dest)
+ :"cx","si","di");
+else
+__asm__ __volatile__(
+ "std\n\t"
+ "rep\n\t"
+ "movsb\n\t"
+ "cld"
+ : /* no output */
+ :"c" (n),
+ "S" (n-1+(const char *)src),
+ "D" (n-1+(char *)dest)
+ :"cx","si","di","memory");
+return dest;
+}
+
+#define memcmp __builtin_memcmp
+
+#define __HAVE_ARCH_MEMCHR
+extern inline void * memchr(const void * cs,int c,size_t count)
+{
+register void * __res;
+if (!count)
+ return NULL;
+__asm__ __volatile__(
+ "cld\n\t"
+ "repne\n\t"
+ "scasb\n\t"
+ "je 1f\n\t"
+ "movl $1,%0\n"
+ "1:\tdecl %0"
+ :"=D" (__res):"a" (c),"D" (cs),"c" (count)
+ :"cx");
+return __res;
+}
+
+extern inline void * __memset_generic(void * s, char c,size_t count)
+{
+__asm__ __volatile__(
+ "cld\n\t"
+ "rep\n\t"
+ "stosb"
+ : /* no output */
+ :"a" (c),"D" (s),"c" (count)
+ :"cx","di","memory");
+return s;
+}
+
+/* we might want to write optimized versions of these later */
+#define __constant_count_memset(s,c,count) __memset_generic((s),(c),(count))
+
+/*
+ * memset(x,0,y) is a reasonably common thing to do, so we want to fill
+ * things 32 bits at a time even when we don't know the size of the
+ * area at compile-time..
+ */
+extern inline void * __constant_c_memset(void * s, unsigned long c, size_t count)
+{
+__asm__ __volatile__(
+ "cld\n\t"
+ "rep ; stosl\n\t"
+ "testb $2,%b1\n\t"
+ "je 1f\n\t"
+ "stosw\n"
+ "1:\ttestb $1,%b1\n\t"
+ "je 2f\n\t"
+ "stosb\n"
+ "2:"
+ : /* no output */
+ :"a" (c), "q" (count), "c" (count/4), "D" ((long) s)
+ :"cx","di","memory");
+return (s);
+}
+
+/* Added by Gertjan van Wingerde to make minix and sysv module work */
+#define __HAVE_ARCH_STRNLEN
+extern inline size_t strnlen(const char * s, size_t count)
+{
+register int __res;
+__asm__ __volatile__(
+ "movl %1,%0\n\t"
+ "jmp 2f\n"
+ "1:\tcmpb $0,(%0)\n\t"
+ "je 3f\n\t"
+ "incl %0\n"
+ "2:\tdecl %2\n\t"
+ "cmpl $-1,%2\n\t"
+ "jne 1b\n"
+ "3:\tsubl %1,%0"
+ :"=a" (__res)
+ :"c" (s),"d" (count)
+ :"dx");
+return __res;
+}
+/* end of additional stuff */
+
+/*
+ * This looks horribly ugly, but the compiler can optimize it totally,
+ * as we by now know that both pattern and count is constant..
+ */
+extern inline void * __constant_c_and_count_memset(void * s, unsigned long pattern, size_t count)
+{
+ switch (count) {
+ case 0:
+ return s;
+ case 1:
+ *(unsigned char *)s = pattern;
+ return s;
+ case 2:
+ *(unsigned short *)s = pattern;
+ return s;
+ case 3:
+ *(unsigned short *)s = pattern;
+ *(2+(unsigned char *)s) = pattern;
+ return s;
+ case 4:
+ *(unsigned long *)s = pattern;
+ return s;
+ }
+#define COMMON(x) \
+__asm__("cld\n\t" \
+ "rep ; stosl" \
+ x \
+ : /* no outputs */ \
+ : "a" (pattern),"c" (count/4),"D" ((long) s) \
+ : "cx","di","memory")
+
+ switch (count % 4) {
+ case 0: COMMON(""); return s;
+ case 1: COMMON("\n\tstosb"); return s;
+ case 2: COMMON("\n\tstosw"); return s;
+ case 3: COMMON("\n\tstosw\n\tstosb"); return s;
+ }
+#undef COMMON
+}
+
+#define __constant_c_x_memset(s, c, count) \
+(__builtin_constant_p(count) ? \
+ __constant_c_and_count_memset((s),(c),(count)) : \
+ __constant_c_memset((s),(c),(count)))
+
+#define __memset(s, c, count) \
+(__builtin_constant_p(count) ? \
+ __constant_count_memset((s),(c),(count)) : \
+ __memset_generic((s),(c),(count)))
+
+#define __HAVE_ARCH_MEMSET
+#define memset(s, c, count) \
+(__builtin_constant_p(c) ? \
+ __constant_c_x_memset((s),(0x01010101UL*(unsigned char)c),(count)) : \
+ __memset((s),(c),(count)))
+
+/*
+ * find the first occurrence of byte 'c', or 1 past the area if none
+ */
+#define __HAVE_ARCH_MEMSCAN
+extern inline void * memscan(void * addr, int c, size_t size)
+{
+ if (!size)
+ return addr;
+ __asm__("cld
+ repnz; scasb
+ jnz 1f
+ dec %%edi
+1: "
+ : "=D" (addr), "=c" (size)
+ : "0" (addr), "1" (size), "a" (c));
+ return addr;
+}
+
+
+
+
+
+#endif
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _LINUX_STRING_H_ */
+
+
--- /dev/null
+/*
+ Structures.h
+
+ Declarations for all the Windows32 API Structures
+
+ Copyright (C) 1996 Free Software Foundation, Inc.
+
+ Author: Scott Christley <scottc@net-community.com>
+ Date: 1996
+
+ This file is part of the Windows32 API Library.
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 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
+ Library General Public License for more details.
+
+ If you are interested in a warranty or support for this source code,
+ contact Scott Christley <scottc@net-community.com> for more information.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this library; see the file COPYING.LIB.
+ If not, write to the Free Software Foundation,
+ 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+*/
+
+#ifndef _GNU_H_WINDOWS32_STRUCTURES
+#define _GNU_H_WINDOWS32_STRUCTURES
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+typedef struct _ABC {
+ int abcA;
+ UINT abcB;
+ int abcC;
+} ABC, *LPABC;
+
+typedef struct _ABCFLOAT {
+ FLOAT abcfA;
+ FLOAT abcfB;
+ FLOAT abcfC;
+} ABCFLOAT, *LPABCFLOAT;
+
+typedef struct tagACCEL {
+ BYTE fVirt;
+ WORD key;
+ WORD cmd;
+} ACCEL, *LPACCEL;
+
+typedef struct _ACE_HEADER {
+ BYTE AceType;
+ BYTE AceFlags;
+ WORD AceSize;
+} ACE_HEADER;
+
+typedef DWORD ACCESS_MASK;
+typedef ACCESS_MASK REGSAM;
+
+typedef struct _ACCESS_ALLOWED_ACE {
+ ACE_HEADER Header;
+ ACCESS_MASK Mask;
+ DWORD SidStart;
+} ACCESS_ALLOWED_ACE;
+
+typedef struct _ACCESS_DENIED_ACE {
+ ACE_HEADER Header;
+ ACCESS_MASK Mask;
+ DWORD SidStart;
+} ACCESS_DENIED_ACE;
+
+typedef struct tagACCESSTIMEOUT {
+ UINT cbSize;
+ DWORD dwFlags;
+ DWORD iTimeOutMSec;
+} ACCESSTIMEOUT;
+
+typedef struct _ACL {
+ BYTE AclRevision;
+ BYTE Sbz1;
+ WORD AclSize;
+ WORD AceCount;
+ WORD Sbz2;
+} ACL, *PACL;
+
+typedef struct _ACL_REVISION_INFORMATION {
+ DWORD AclRevision;
+} ACL_REVISION_INFORMATION;
+
+typedef struct _ACL_SIZE_INFORMATION {
+ DWORD AceCount;
+ DWORD AclBytesInUse;
+ DWORD AclBytesFree;
+} ACL_SIZE_INFORMATION;
+
+typedef struct _ACTION_HEADER {
+ ULONG transport_id;
+ USHORT action_code;
+ USHORT reserved;
+} ACTION_HEADER;
+
+typedef struct _ADAPTER_STATUS {
+ UCHAR adapter_address[6];
+ UCHAR rev_major;
+ UCHAR reserved0;
+ UCHAR adapter_type;
+ UCHAR rev_minor;
+ WORD duration;
+ WORD frmr_recv;
+ WORD frmr_xmit;
+ WORD iframe_recv_err;
+ WORD xmit_aborts;
+ DWORD xmit_success;
+ DWORD recv_success;
+ WORD iframe_xmit_err;
+ WORD recv_buff_unavail;
+ WORD t1_timeouts;
+ WORD ti_timeouts;
+ DWORD reserved1;
+ WORD free_ncbs;
+ WORD max_cfg_ncbs;
+ WORD max_ncbs;
+ WORD xmit_buf_unavail;
+ WORD max_dgram_size;
+ WORD pending_sess;
+ WORD max_cfg_sess;
+ WORD max_sess;
+ WORD max_sess_pkt_size;
+ WORD name_count;
+} ADAPTER_STATUS;
+
+typedef struct _ADDJOB_INFO_1 {
+ LPTSTR Path;
+ DWORD JobId;
+} ADDJOB_INFO_1;
+
+typedef struct tagANIMATIONINFO {
+ UINT cbSize;
+ int iMinAnimate;
+} ANIMATIONINFO, *LPANIMATIONINFO;
+
+typedef struct _RECT {
+ LONG left;
+ LONG top;
+ LONG right;
+ LONG bottom;
+} RECT, *LPRECT, *PRECT;
+
+typedef struct _RECTL {
+ LONG left;
+ LONG top;
+ LONG right;
+ LONG bottom;
+} RECTL;
+
+typedef struct _AppBarData {
+ DWORD cbSize;
+ HWND hWnd;
+ UINT uCallbackMessage;
+ UINT uEdge;
+ RECT rc;
+ LPARAM lParam;
+} APPBARDATA, *PAPPBARDATA;
+
+typedef struct tagBITMAP
+{
+ LONG bmType;
+ LONG bmWidth;
+ LONG bmHeight;
+ LONG bmWidthBytes;
+ WORD bmPlanes;
+ WORD bmBitsPixel;
+ LPVOID bmBits;
+} BITMAP, *PBITMAP, *NPBITMAP, *LPBITMAP;
+
+typedef struct tagBITMAPCOREHEADER {
+ DWORD bcSize;
+ WORD bcWidth;
+ WORD bcHeight;
+ WORD bcPlanes;
+ WORD bcBitCount;
+} BITMAPCOREHEADER;
+
+typedef struct tagRGBTRIPLE {
+ BYTE rgbtBlue;
+ BYTE rgbtGreen;
+ BYTE rgbtRed;
+} RGBTRIPLE;
+
+typedef struct _BITMAPCOREINFO {
+ BITMAPCOREHEADER bmciHeader;
+ RGBTRIPLE bmciColors[1];
+} BITMAPCOREINFO, *PBITMAPCOREINFO, *LPBITMAPCOREINFO;
+
+typedef struct tagBITMAPFILEHEADER {
+ WORD bfType;
+ DWORD bfSize;
+ WORD bfReserved1;
+ WORD bfReserved2;
+ DWORD bfOffBits;
+} BITMAPFILEHEADER __attribute__((packed));
+
+typedef struct tagBITMAPINFOHEADER {
+ DWORD biSize;
+ LONG biWidth;
+ LONG biHeight;
+ WORD biPlanes;
+ WORD biBitCount;
+ DWORD biCompression;
+ DWORD biSizeImage;
+ LONG biXPelsPerMeter;
+ LONG biYPelsPerMeter;
+ DWORD biClrUsed;
+ DWORD biClrImportant;
+} BITMAPINFOHEADER, *LPBITMAPINFOHEADER, *PBITMAPINFO;
+
+typedef struct tagRGBQUAD {
+ BYTE rgbBlue;
+ BYTE rgbGreen;
+ BYTE rgbRed;
+ BYTE rgbReserved;
+} RGBQUAD;
+
+typedef struct tagBITMAPINFO {
+ BITMAPINFOHEADER bmiHeader;
+ RGBQUAD bmiColors[1];
+} BITMAPINFO, *LPBITMAPINFO;
+
+typedef long FXPT2DOT30, * LPFXPT2DOT30;
+
+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 bV4Size;
+ LONG bV4Width;
+ LONG bV4Height;
+ WORD bV4Planes;
+ WORD bV4BitCount;
+ DWORD bV4V4Compression;
+ DWORD bV4SizeImage;
+ LONG bV4XPelsPerMeter;
+ LONG bV4YPelsPerMeter;
+ DWORD bV4ClrUsed;
+ DWORD bV4ClrImportant;
+ DWORD bV4RedMask;
+ DWORD bV4GreenMask;
+ DWORD bV4BlueMask;
+ DWORD bV4AlphaMask;
+ DWORD bV4CSType;
+ CIEXYZTRIPLE bV4Endpoints;
+ DWORD bV4GammaRed;
+ DWORD bV4GammaGreen;
+ DWORD bV4GammaBlue;
+} BITMAPV4HEADER, *LPBITMAPV4HEADER, *PBITMAPV4HEADER;
+
+typedef struct _BLOB {
+ ULONG cbSize;
+ BYTE *pBlobData;
+} BLOB;
+
+typedef struct _SHITEMID {
+ USHORT cb;
+ BYTE abID[1];
+} SHITEMID, * LPSHITEMID;
+typedef const SHITEMID * LPCSHITEMID;
+
+typedef struct _ITEMIDLIST {
+ SHITEMID mkid;
+} ITEMIDLIST, * LPITEMIDLIST;
+typedef const ITEMIDLIST * LPCITEMIDLIST;
+
+typedef struct _browseinfo {
+ HWND hwndOwner;
+ LPCITEMIDLIST pidlRoot;
+ LPSTR pszDisplayName;
+ LPCSTR lpszTitle;
+ UINT ulFlags;
+ BFFCALLBACK lpfn;
+ LPARAM lParam;
+ int iImage;
+} BROWSEINFO, *PBROWSEINFO, *LPBROWSEINFO;
+
+typedef struct _FILETIME {
+ DWORD dwLowDateTime;
+ DWORD dwHighDateTime;
+} FILETIME, *LPFILETIME, *PFILETIME;
+
+typedef struct _BY_HANDLE_FILE_INFORMATION {
+ DWORD dwFileAttributes;
+ FILETIME ftCreationTime;
+ FILETIME ftLastAccessTime;
+ FILETIME ftLastWriteTime;
+ DWORD dwVolumeSerialNumber;
+ DWORD nFileSizeHigh;
+ DWORD nFileSizeLow;
+ DWORD nNumberOfLinks;
+ DWORD nFileIndexHigh;
+ DWORD nFileIndexLow;
+} BY_HANDLE_FILE_INFORMATION, *LPBY_HANDLE_FILE_INFORMATION;
+
+typedef struct _FIXED {
+ WORD fract;
+ short value;
+} FIXED;
+
+typedef struct tagPOINT {
+ LONG x;
+ LONG y;
+} POINT, *LPPOINT, *PPOINT;
+
+typedef struct tagPOINTFX {
+ FIXED x;
+ FIXED y;
+} POINTFX;
+
+typedef struct _POINTL {
+ LONG x;
+ LONG y;
+} POINTL;
+
+typedef struct tagPOINTS {
+ SHORT x;
+ SHORT y;
+} POINTS;
+
+typedef struct _tagCANDIDATEFORM {
+ DWORD dwIndex;
+ DWORD dwStyle;
+ POINT ptCurrentPos;
+ RECT rcArea;
+} CANDIDATEFORM, *LPCANDIDATEFORM;
+
+typedef struct _tagCANDIDATELIST {
+ DWORD dwSize;
+ DWORD dwStyle;
+ DWORD dwCount;
+ DWORD dwSelection;
+ DWORD dwPageStart;
+ DWORD dwPageSize;
+ 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 tagCBT_CREATEWND {
+ LPCREATESTRUCT lpcs;
+ HWND hwndInsertAfter;
+} CBT_CREATEWND;
+
+typedef struct tagCBTACTIVATESTRUCT {
+ WINBOOL fMouse;
+ HWND hWndActive;
+} CBTACTIVATESTRUCT;
+
+typedef struct _CHAR_INFO {
+ union {
+ WCHAR UnicodeChar;
+ CHAR AsciiChar;
+ } Char;
+ WORD Attributes;
+} CHAR_INFO, *PCHAR_INFO;
+
+typedef struct _charformat {
+ UINT cbSize;
+ DWORD dwMask;
+ DWORD dwEffects;
+ LONG yHeight;
+ LONG yOffset;
+ COLORREF crTextColor;
+ BYTE bCharSet;
+ BYTE bPitchAndFamily;
+ TCHAR szFaceName[LF_FACESIZE];
+} CHARFORMAT;
+
+typedef struct _charrange {
+ LONG cpMin;
+ LONG cpMax;
+} CHARRANGE;
+
+typedef struct tagCHARSET {
+ DWORD aflBlock[3];
+ DWORD flLang;
+} CHARSET;
+
+typedef struct tagFONTSIGNATURE {
+ DWORD fsUsb[4];
+ DWORD fsCsb[2];
+} FONTSIGNATURE, *LPFONTSIGNATURE;
+
+typedef struct {
+ UINT ciCharset;
+ UINT ciACP;
+ FONTSIGNATURE fs;
+} CHARSETINFO, *LPCHARSETINFO;
+
+typedef struct {
+ DWORD lStructSize;
+ HWND hwndOwner;
+ HWND hInstance;
+ COLORREF rgbResult;
+ COLORREF* lpCustColors;
+ DWORD Flags;
+ LPARAM lCustData;
+ LPCCHOOKPROC lpfnHook;
+ LPCTSTR lpTemplateName;
+} CHOOSECOLOR, *LPCHOOSECOLOR;
+
+typedef struct tagLOGFONT {
+ LONG lfHeight;
+ LONG lfWidth;
+ LONG lfEscapement;
+ LONG lfOrientation;
+ LONG lfWeight;
+ BYTE lfItalic;
+ BYTE lfUnderline;
+ BYTE lfStrikeOut;
+ BYTE lfCharSet;
+ BYTE lfOutPrecision;
+ BYTE lfClipPrecision;
+ BYTE lfQuality;
+ BYTE lfPitchAndFamily;
+ TCHAR lfFaceName[LF_FACESIZE];
+} LOGFONT, *LPLOGFONT, *PLOGFONT;
+
+typedef struct {
+ DWORD lStructSize;
+ HWND hwndOwner;
+ HDC hDC;
+ LPLOGFONT lpLogFont;
+ INT iPointSize;
+ DWORD Flags;
+ DWORD rgbColors;
+ LPARAM lCustData;
+ LPCFHOOKPROC lpfnHook;
+ LPCTSTR lpTemplateName;
+ HINSTANCE hInstance;
+ LPTSTR lpszStyle;
+ WORD nFontType;
+ WORD ___MISSING_ALIGNMENT__;
+ INT nSizeMin;
+ INT nSizeMax;
+} CHOOSEFONT, *LPCHOOSEFONT;
+
+typedef struct _IDA {
+ UINT cidl;
+ UINT aoffset[1];
+} CIDA, * LPIDA;
+
+typedef struct tagCLIENTCREATESTRUCT {
+ HANDLE hWindowMenu;
+ UINT idFirstChild;
+} CLIENTCREATESTRUCT;
+
+typedef CLIENTCREATESTRUCT *LPCLIENTCREATESTRUCT;
+
+typedef struct _CMInvokeCommandInfo {
+ DWORD cbSize;
+ DWORD fMask;
+ HWND hwnd;
+ LPCSTR lpVerb;
+ LPCSTR lpParameters;
+ LPCSTR lpDirectory;
+ int nShow;
+ DWORD dwHotKey;
+ HANDLE hIcon;
+} CMINVOKECOMMANDINFO, *LPCMINVOKECOMMANDINFO;
+
+typedef struct tagCOLORADJUSTMENT {
+ WORD caSize;
+ WORD caFlags;
+ WORD caIlluminantIndex;
+ WORD caRedGamma;
+ WORD caGreenGamma;
+ WORD caBlueGamma;
+ WORD caReferenceBlack;
+ WORD caReferenceWhite;
+ SHORT caContrast;
+ SHORT caBrightness;
+ SHORT caColorfulness;
+ SHORT caRedGreenTint;
+} COLORADJUSTMENT, *LPCOLORADJUSTMENT;
+
+typedef struct _COLORMAP {
+ COLORREF from;
+ COLORREF to;
+} COLORMAP, * LPCOLORMAP;
+
+typedef struct _DCB {
+ DWORD DCBlength;
+ DWORD BaudRate;
+ DWORD fBinary: 1;
+ DWORD fParity: 1;
+ DWORD fOutxCtsFlow:1;
+ DWORD fOutxDsrFlow:1;
+ DWORD fDtrControl:2;
+ DWORD fDsrSensitivity:1;
+ DWORD fTXContinueOnXoff:1;
+ DWORD fOutX: 1;
+ DWORD fInX: 1;
+ DWORD fErrorChar: 1;
+ DWORD fNull: 1;
+ DWORD fRtsControl:2;
+ DWORD fAbortOnError:1;
+ DWORD fDummy2:17;
+ WORD wReserved;
+ WORD XonLim;
+ WORD XoffLim;
+ BYTE ByteSize;
+ BYTE Parity;
+ BYTE StopBits;
+ char XonChar;
+ char XoffChar;
+ char ErrorChar;
+ char EofChar;
+ char EvtChar;
+ WORD wReserved1;
+} DCB, *LPDCB;
+
+typedef struct _COMM_CONFIG {
+ DWORD dwSize;
+ WORD wVersion;
+ WORD wReserved;
+ DCB dcb;
+ DWORD dwProviderSubType;
+ DWORD dwProviderOffset;
+ DWORD dwProviderSize;
+ WCHAR wcProviderData[1];
+} COMMCONFIG, *LPCOMMCONFIG;
+
+typedef struct _COMMPROP {
+ WORD wPacketLength;
+ WORD wPacketVersion;
+ DWORD dwServiceMask;
+ DWORD dwReserved1;
+ DWORD dwMaxTxQueue;
+ DWORD dwMaxRxQueue;
+ DWORD dwMaxBaud;
+ DWORD dwProvSubType;
+ DWORD dwProvCapabilities;
+ DWORD dwSettableParams;
+ DWORD dwSettableBaud;
+ WORD wSettableData;
+ WORD wSettableStopParity;
+ DWORD dwCurrentTxQueue;
+ DWORD dwCurrentRxQueue;
+ DWORD dwProvSpec1;
+ DWORD dwProvSpec2;
+ WCHAR wcProvChar[1];
+} COMMPROP, *LPCOMMPROP;
+
+typedef struct _COMMTIMEOUTS {
+ DWORD ReadIntervalTimeout;
+ DWORD ReadTotalTimeoutMultiplier;
+ DWORD ReadTotalTimeoutConstant;
+ DWORD WriteTotalTimeoutMultiplier;
+ DWORD WriteTotalTimeoutConstant;
+} COMMTIMEOUTS,*LPCOMMTIMEOUTS;
+
+typedef struct tagCOMPAREITEMSTRUCT {
+ UINT CtlType;
+ UINT CtlID;
+ HWND hwndItem;
+ UINT itemID1;
+ DWORD itemData1;
+ UINT itemID2;
+ DWORD itemData2;
+} COMPAREITEMSTRUCT;
+
+typedef struct {
+ COLORREF crText;
+ COLORREF crBackground;
+ DWORD dwEffects;
+} COMPCOLOR;
+
+typedef struct _tagCOMPOSITIONFORM {
+ DWORD dwStyle;
+ POINT ptCurrentPos;
+ RECT rcArea;
+} COMPOSITIONFORM, *LPCOMPOSITIONFORM;
+
+typedef struct _COMSTAT {
+ DWORD fCtsHold : 1;
+ DWORD fDsrHold : 1;
+ DWORD fRlsdHold : 1;
+ DWORD fXoffHold : 1;
+ DWORD fXoffSent : 1;
+ DWORD fEof : 1;
+ DWORD fTxim : 1;
+ DWORD fReserved : 25;
+ DWORD cbInQue;
+ DWORD cbOutQue;
+} COMSTAT, *LPCOMSTAT;
+
+typedef struct _CONSOLE_CURSOR_INFO {
+ DWORD dwSize;
+ WINBOOL bVisible;
+} CONSOLE_CURSOR_INFO, *PCONSOLE_CURSOR_INFO;
+
+typedef struct _COORD {
+ SHORT X;
+ SHORT Y;
+} COORD;
+
+typedef struct _SMALL_RECT {
+ SHORT Left;
+ SHORT Top;
+ SHORT Right;
+ SHORT Bottom;
+} SMALL_RECT, *PSMALL_RECT;
+
+typedef struct _CONSOLE_SCREEN_BUFFER_INFO {
+ COORD dwSize;
+ COORD dwCursorPosition;
+ WORD wAttributes;
+ SMALL_RECT srWindow;
+ COORD dwMaximumWindowSize;
+} CONSOLE_SCREEN_BUFFER_INFO, *PCONSOLE_SCREEN_BUFFER_INFO ;
+
+#ifdef __i386__
+
+typedef struct _FLOATING_SAVE_AREA {
+ DWORD ControlWord;
+ DWORD StatusWord;
+ DWORD TagWord;
+ DWORD ErrorOffset;
+ DWORD ErrorSelector;
+ DWORD DataOffset;
+ DWORD DataSelector;
+ BYTE RegisterArea[80];
+ DWORD Cr0NpxState;
+} FLOATING_SAVE_AREA;
+
+typedef struct _CONTEXT {
+ DWORD ContextFlags;
+
+ DWORD Dr0;
+ DWORD Dr1;
+ DWORD Dr2;
+ DWORD Dr3;
+ DWORD Dr6;
+ DWORD Dr7;
+
+ FLOATING_SAVE_AREA FloatSave;
+
+ DWORD SegGs;
+ DWORD SegFs;
+ DWORD SegEs;
+ DWORD SegDs;
+
+ DWORD Edi;
+ DWORD Esi;
+ DWORD Ebx;
+ DWORD Edx;
+ DWORD Ecx;
+ DWORD Eax;
+
+ DWORD Ebp;
+ DWORD Eip;
+ DWORD SegCs;
+ DWORD EFlags;
+ DWORD Esp;
+ DWORD SegSs;
+} CONTEXT, *PCONTEXT, *LPCONTEXT;
+
+#else /* __ppc__ */
+
+typedef struct
+ {
+ /* Floating point registers returned when CONTEXT_FLOATING_POINT is set */
+ double Fpr0;
+ double Fpr1;
+ double Fpr2;
+ double Fpr3;
+ double Fpr4;
+ double Fpr5;
+ double Fpr6;
+ double Fpr7;
+ double Fpr8;
+ double Fpr9;
+ double Fpr10;
+ double Fpr11;
+ double Fpr12;
+ double Fpr13;
+ double Fpr14;
+ double Fpr15;
+ double Fpr16;
+ double Fpr17;
+ double Fpr18;
+ double Fpr19;
+ double Fpr20;
+ double Fpr21;
+ double Fpr22;
+ double Fpr23;
+ double Fpr24;
+ double Fpr25;
+ double Fpr26;
+ double Fpr27;
+ double Fpr28;
+ double Fpr29;
+ double Fpr30;
+ double Fpr31;
+ double Fpscr;
+
+ /* Integer registers returned when CONTEXT_INTEGER is set. */
+ DWORD Gpr0;
+ DWORD Gpr1;
+ DWORD Gpr2;
+ DWORD Gpr3;
+ DWORD Gpr4;
+ DWORD Gpr5;
+ DWORD Gpr6;
+ DWORD Gpr7;
+ DWORD Gpr8;
+ DWORD Gpr9;
+ DWORD Gpr10;
+ DWORD Gpr11;
+ DWORD Gpr12;
+ DWORD Gpr13;
+ DWORD Gpr14;
+ DWORD Gpr15;
+ DWORD Gpr16;
+ DWORD Gpr17;
+ DWORD Gpr18;
+ DWORD Gpr19;
+ DWORD Gpr20;
+ DWORD Gpr21;
+ DWORD Gpr22;
+ DWORD Gpr23;
+ DWORD Gpr24;
+ DWORD Gpr25;
+ DWORD Gpr26;
+ DWORD Gpr27;
+ DWORD Gpr28;
+ DWORD Gpr29;
+ DWORD Gpr30;
+ DWORD Gpr31;
+
+ DWORD Cr; /* Condition register */
+ DWORD Xer; /* Fixed point exception register */
+
+ /* The following are set when CONTEXT_CONTROL is set. */
+ DWORD Msr; /* Machine status register */
+ DWORD Iar; /* Instruction address register */
+ DWORD Lr; /* Link register */
+ DWORD Ctr; /* Control register */
+
+ /* Control which context values are returned */
+ DWORD ContextFlags;
+ DWORD Fill[3];
+
+ /* Registers returned if CONTEXT_DEBUG_REGISTERS is set. */
+ DWORD Dr0; /* Breakpoint Register 1 */
+ DWORD Dr1; /* Breakpoint Register 2 */
+ DWORD Dr2; /* Breakpoint Register 3 */
+ DWORD Dr3; /* Breakpoint Register 4 */
+ DWORD Dr4; /* Breakpoint Register 5 */
+ DWORD Dr5; /* Breakpoint Register 6 */
+ DWORD Dr6; /* Debug Status Register */
+ DWORD Dr7; /* Debug Control Register */
+} CONTEXT, *PCONTEXT, *LPCONTEXT;
+#endif
+
+typedef struct _LIST_ENTRY {
+ struct _LIST_ENTRY *Flink;
+ struct _LIST_ENTRY *Blink;
+} LIST_ENTRY, *PLIST_ENTRY;
+
+typedef struct _CRITICAL_SECTION_DEBUG {
+ WORD Type;
+ WORD CreatorBackTraceIndex;
+ struct _CRITICAL_SECTION *CriticalSection;
+ LIST_ENTRY ProcessLocksList;
+ DWORD EntryCount;
+ DWORD ContentionCount;
+ DWORD Depth;
+ PVOID OwnerBackTrace[ 5 ];
+} CRITICAL_SECTION_DEBUG, *PCRITICAL_SECTION_DEBUG;
+
+typedef struct _CRITICAL_SECTION {
+ PCRITICAL_SECTION_DEBUG DebugInfo;
+ LONG LockCount;
+ LONG RecursionCount;
+ HANDLE OwningThread;
+ HANDLE LockSemaphore;
+ DWORD Reserved;
+} CRITICAL_SECTION, *PCRITICAL_SECTION, *LPCRITICAL_SECTION;
+
+typedef struct _SECURITY_QUALITY_OF_SERVICE {
+ DWORD Length;
+ SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
+ /* SECURITY_CONTEXT_TRACKING_MODE ContextTrackingMode; */
+ WINBOOL ContextTrackingMode;
+ BOOLEAN EffectiveOnly;
+} SECURITY_QUALITY_OF_SERVICE;
+
+typedef struct tagCONVCONTEXT {
+ UINT cb;
+ UINT wFlags;
+ UINT wCountryID;
+ int iCodePage;
+ DWORD dwLangID;
+ DWORD dwSecurity;
+ SECURITY_QUALITY_OF_SERVICE qos;
+} CONVCONTEXT;
+
+typedef CONVCONTEXT *PCONVCONTEXT;
+
+typedef struct tagCONVINFO {
+ DWORD cb;
+ DWORD hUser;
+ HCONV hConvPartner;
+ HSZ hszSvcPartner;
+ HSZ hszServiceReq;
+ HSZ hszTopic;
+ HSZ hszItem;
+ UINT wFmt;
+ UINT wType;
+ UINT wStatus;
+ UINT wConvst;
+ UINT wLastError;
+ HCONVLIST hConvList;
+ CONVCONTEXT ConvCtxt;
+ HWND hwnd;
+ HWND hwndPartner;
+} CONVINFO;
+
+typedef struct tagCOPYDATASTRUCT {
+ DWORD dwData;
+ DWORD cbData;
+ PVOID lpData;
+} COPYDATASTRUCT;
+
+typedef struct _cpinfo {
+ UINT MaxCharSize;
+ BYTE DefaultChar[MAX_DEFAULTCHAR];
+ BYTE LeadByte[MAX_LEADBYTES];
+} CPINFO, *LPCPINFO;
+
+typedef struct tagCPLINFO {
+ int idIcon;
+ int idName;
+ int idInfo;
+ LONG lData;
+} CPLINFO;
+
+typedef struct _CREATE_PROCESS_DEBUG_INFO {
+ HANDLE hFile;
+ HANDLE hProcess;
+ HANDLE hThread;
+ LPVOID lpBaseOfImage;
+ DWORD dwDebugInfoFileOffset;
+ DWORD nDebugInfoSize;
+ LPVOID lpThreadLocalBase;
+ LPTHREAD_START_ROUTINE lpStartAddress;
+ LPVOID lpImageName;
+ WORD fUnicode;
+} CREATE_PROCESS_DEBUG_INFO;
+
+typedef struct _CREATE_THREAD_DEBUG_INFO {
+ HANDLE hThread;
+ LPVOID lpThreadLocalBase;
+ LPTHREAD_START_ROUTINE lpStartAddress;
+} CREATE_THREAD_DEBUG_INFO;
+
+/*
+ TODO: sockets
+typedef struct _SOCKET_ADDRESS {
+ LPSOCKADDR lpSockaddr ;
+ INT iSockaddrLength ;
+} SOCKET_ADDRESS, *PSOCKET_ADDRESS, *LPSOCKET_ADDRESS;
+*/
+
+/*
+typedef struct _CSADDR_INFO {
+ SOCKET_ADDRESS LocalAddr;
+ SOCKET_ADDRESS RemoteAddr;
+ INT iSocketType;
+ INT iProtocol;
+} CSADDR_INFO;
+*/
+
+typedef struct _currencyfmt {
+ UINT NumDigits;
+ UINT LeadingZero;
+ UINT Grouping;
+ LPTSTR lpDecimalSep;
+ LPTSTR lpThousandSep;
+ UINT NegativeOrder;
+ UINT PositiveOrder;
+ LPTSTR lpCurrencySymbol;
+} CURRENCYFMT;
+
+typedef struct tagCURSORSHAPE {
+ int xHotSpot;
+ int yHotSpot;
+ int cx;
+ int cy;
+ int cbWidth;
+ BYTE Planes;
+ BYTE BitsPixel;
+} CURSORSHAPE, *LPCURSORSHAPE;
+
+typedef struct tagCWPRETSTRUCT {
+ LRESULT lResult;
+ LPARAM lParam;
+ WPARAM wParam;
+ DWORD message;
+ HWND hwnd;
+} CWPRETSTRUCT;
+
+typedef struct tagCWPSTRUCT {
+ LPARAM lParam;
+ WPARAM wParam;
+ UINT message;
+ HWND hwnd;
+} CWPSTRUCT;
+
+typedef struct _DATATYPES_INFO_1 {
+ LPTSTR pName;
+} DATATYPES_INFO_1;
+
+typedef struct {
+ unsigned short bAppReturnCode:8,
+ reserved:6,
+ fBusy:1,
+ fAck:1;
+} DDEACK;
+
+typedef struct {
+ unsigned short reserved:14,
+ fDeferUpd:1,
+ fAckReq:1;
+ short cfFormat;
+} DDEADVISE;
+
+typedef struct {
+ unsigned short unused:12,
+ fResponse:1,
+ fRelease:1,
+ reserved:1,
+ fAckReq:1;
+ short cfFormat;
+ BYTE Value[1];
+} DDEDATA;
+
+typedef struct {
+ unsigned short unused:13,
+ fRelease:1,
+ fDeferUpd:1,
+ fAckReq:1;
+ short cfFormat;
+} DDELN;
+
+typedef struct tagDDEML_MSG_HOOK_DATA {
+ UINT uiLo;
+ UINT uiHi;
+ DWORD cbData;
+ DWORD Data[8];
+} DDEML_MSG_HOOK_DATA;
+
+typedef struct {
+ unsigned short unused:13,
+ fRelease:1,
+ fReserved:2;
+ short cfFormat;
+ BYTE Value[1];
+} DDEPOKE;
+
+typedef struct {
+ unsigned short unused:12,
+ fAck:1,
+ fRelease:1,
+ fReserved:1,
+ fAckReq:1;
+ short cfFormat;
+ BYTE rgb[1];
+} DDEUP;
+
+typedef struct _EXCEPTION_RECORD {
+ DWORD ExceptionCode;
+ DWORD ExceptionFlags;
+ struct _EXCEPTION_RECORD *ExceptionRecord;
+ PVOID ExceptionAddress;
+ DWORD NumberParameters;
+ DWORD ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
+} EXCEPTION_RECORD, *PEXCEPTION_RECORD, *LPEXCEPTION_RECORD;
+
+typedef struct _EXCEPTION_DEBUG_INFO {
+ EXCEPTION_RECORD ExceptionRecord;
+ DWORD dwFirstChance;
+} EXCEPTION_DEBUG_INFO;
+
+typedef struct _EXIT_PROCESS_DEBUG_INFO {
+ DWORD dwExitCode;
+} EXIT_PROCESS_DEBUG_INFO;
+
+typedef struct _EXIT_THREAD_DEBUG_INFO {
+ DWORD dwExitCode;
+} EXIT_THREAD_DEBUG_INFO;
+
+typedef struct _LOAD_DLL_DEBUG_INFO {
+ HANDLE hFile;
+ LPVOID lpBaseOfDll;
+ DWORD dwDebugInfoFileOffset;
+ DWORD nDebugInfoSize;
+ LPVOID lpImageName;
+ WORD fUnicode;
+} LOAD_DLL_DEBUG_INFO;
+
+typedef struct _UNLOAD_DLL_DEBUG_INFO {
+ LPVOID lpBaseOfDll;
+} UNLOAD_DLL_DEBUG_INFO;
+
+typedef struct _OUTPUT_DEBUG_STRING_INFO {
+ LPSTR lpDebugStringData;
+ WORD fUnicode;
+ WORD nDebugStringLength;
+} OUTPUT_DEBUG_STRING_INFO;
+
+typedef struct _RIP_INFO {
+ DWORD dwError;
+ DWORD dwType;
+} RIP_INFO;
+
+typedef struct _DEBUG_EVENT {
+ DWORD dwDebugEventCode;
+ DWORD dwProcessId;
+ DWORD dwThreadId;
+ union {
+ EXCEPTION_DEBUG_INFO Exception;
+ CREATE_THREAD_DEBUG_INFO CreateThread;
+ CREATE_PROCESS_DEBUG_INFO CreateProcessInfo;
+ EXIT_THREAD_DEBUG_INFO ExitThread;
+ EXIT_PROCESS_DEBUG_INFO ExitProcess;
+ LOAD_DLL_DEBUG_INFO LoadDll;
+ UNLOAD_DLL_DEBUG_INFO UnloadDll;
+ OUTPUT_DEBUG_STRING_INFO DebugString;
+ RIP_INFO RipInfo;
+ } u;
+} DEBUG_EVENT, *LPDEBUG_EVENT;
+
+typedef struct tagDEBUGHOOKINFO {
+ DWORD idThread;
+ DWORD idThreadInstaller;
+ LPARAM lParam;
+ WPARAM wParam;
+ int code;
+} DEBUGHOOKINFO;
+
+typedef struct tagDELETEITEMSTRUCT {
+ UINT CtlType;
+ UINT CtlID;
+ UINT itemID;
+ HWND hwndItem;
+ UINT itemData;
+} DELETEITEMSTRUCT;
+
+typedef struct _DEV_BROADCAST_HDR {
+ ULONG dbch_size;
+ ULONG dbch_devicetype;
+ ULONG dbch_reserved;
+} DEV_BROADCAST_HDR;
+typedef DEV_BROADCAST_HDR *PDEV_BROADCAST_HDR;
+
+typedef struct _DEV_BROADCAST_OEM {
+ ULONG dbco_size;
+ ULONG dbco_devicetype;
+ ULONG dbco_reserved;
+ ULONG dbco_identifier;
+ ULONG dbco_suppfunc;
+} DEV_BROADCAST_OEM;
+typedef DEV_BROADCAST_OEM *PDEV_BROADCAST_OEM;
+
+typedef struct _DEV_BROADCAST_PORT {
+ ULONG dbcp_size;
+ ULONG dbcp_devicetype;
+ ULONG dbcp_reserved;
+ char dbcp_name[1];
+} DEV_BROADCAST_PORT;
+typedef DEV_BROADCAST_PORT *PDEV_BROADCAST_PORT;
+
+struct _DEV_BROADCAST_USERDEFINED {
+ struct _DEV_BROADCAST_HDR dbud_dbh;
+ char dbud_szName[1];
+ BYTE dbud_rgbUserDefined[1];
+};
+
+typedef struct _DEV_BROADCAST_VOLUME {
+ ULONG dbcv_size;
+ ULONG dbcv_devicetype;
+ ULONG dbcv_reserved;
+ ULONG dbcv_unitmask;
+ USHORT dbcv_flags;
+} DEV_BROADCAST_VOLUME;
+typedef DEV_BROADCAST_VOLUME *PDEV_BROADCAST_VOLUME;
+
+typedef struct _devicemode {
+ BCHAR dmDeviceName[CCHDEVICENAME];
+ WORD dmSpecVersion;
+ WORD dmDriverVersion;
+ WORD dmSize;
+ WORD dmDriverExtra;
+ DWORD dmFields;
+ short dmOrientation;
+ short dmPaperSize;
+ short dmPaperLength;
+ short dmPaperWidth;
+ short dmScale;
+ short dmCopies;
+ short dmDefaultSource;
+ short dmPrintQuality;
+ short dmColor;
+ short dmDuplex;
+ short dmYResolution;
+ short dmTTOption;
+ short dmCollate;
+ BCHAR dmFormName[CCHFORMNAME];
+ WORD dmLogPixels;
+ DWORD dmBitsPerPel;
+ DWORD dmPelsWidth;
+ DWORD dmPelsHeight;
+ DWORD dmDisplayFlags;
+ DWORD dmDisplayFrequency;
+ DWORD dmICMMethod;
+ DWORD dmICMIntent;
+ DWORD dmMediaType;
+ DWORD dmDitherType;
+ DWORD dmICCManufacturer;
+ DWORD dmICCModel;
+} DEVMODE, *LPDEVMODE;
+
+typedef struct tagDEVNAMES {
+ WORD wDriverOffset;
+ WORD wDeviceOffset;
+ WORD wOutputOffset;
+ WORD wDefault;
+} DEVNAMES, *LPDEVNAMES;
+
+typedef struct tagDIBSECTION {
+ BITMAP dsBm;
+ BITMAPINFOHEADER dsBmih;
+ DWORD dsBitfields[3];
+ HANDLE dshSection;
+ DWORD dsOffset;
+} DIBSECTION;
+
+typedef struct _LARGE_INTEGER {
+ DWORD LowPart;
+ LONG HighPart;
+} LARGE_INTEGER, *PLARGE_INTEGER;
+
+typedef struct _DISK_GEOMETRY {
+ LARGE_INTEGER Cylinders;
+ MEDIA_TYPE MediaType;
+ DWORD TracksPerCylinder;
+ DWORD SectorsPerTrack;
+ DWORD BytesPerSector;
+} DISK_GEOMETRY ;
+
+typedef struct _DISK_PERFORMANCE {
+ LARGE_INTEGER BytesRead;
+ LARGE_INTEGER BytesWritten;
+ LARGE_INTEGER ReadTime;
+ LARGE_INTEGER WriteTime;
+ DWORD ReadCount;
+ DWORD WriteCount;
+ DWORD QueueDepth;
+} DISK_PERFORMANCE ;
+
+typedef struct {
+ DWORD style;
+ DWORD dwExtendedStyle;
+ short x;
+ short y;
+ short cx;
+ short cy;
+ WORD id;
+} DLGITEMTEMPLATE PACKED;
+
+typedef DLGITEMTEMPLATE *LPDLGITEMTEMPLATE;
+typedef DLGITEMTEMPLATE *PDLGITEMTEMPLATE;
+
+typedef struct {
+ DWORD style;
+ DWORD dwExtendedStyle;
+ WORD cdit;
+ short x;
+ short y;
+ short cx;
+ short cy;
+} DLGTEMPLATE PACKED;
+
+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_2 {
+ LPTSTR pDocName;
+ LPTSTR pOutputFile;
+ LPTSTR pDatatype;
+ DWORD dwMode;
+ DWORD JobId;
+} DOC_INFO_2;
+
+typedef struct {
+ int cbSize;
+ LPCTSTR lpszDocName;
+ LPCTSTR lpszOutput;
+ LPCTSTR lpszDatatype;
+ DWORD fwType;
+} DOCINFO;
+
+typedef struct {
+ UINT uNotification;
+ HWND hWnd;
+ POINT ptCursor;
+} DRAGLISTINFO, *LPDRAGLISTINFO;
+
+typedef struct tagDRAWITEMSTRUCT {
+ UINT CtlType;
+ UINT CtlID;
+ UINT itemID;
+ UINT itemAction;
+ UINT itemState;
+ HWND hwndItem;
+ HDC hDC;
+ RECT rcItem;
+ DWORD itemData;
+} DRAWITEMSTRUCT, *LPDRAWITEMSTRUCT, *PDRAWITEMSTRUCT;
+
+typedef struct {
+ UINT cbSize;
+ int iTabLength;
+ int iLeftMargin;
+ int iRightMargin;
+ UINT uiLengthDrawn;
+} DRAWTEXTPARAMS, *LPDRAWTEXTPARAMS;
+
+typedef struct _PARTITION_INFORMATION {
+ BYTE PartitionType;
+ BOOLEAN BootIndicator;
+ BOOLEAN RecognizedPartition;
+ BOOLEAN RewritePartition;
+ LARGE_INTEGER StartingOffset;
+ LARGE_INTEGER PartitionLength;
+ LARGE_INTEGER HiddenSectors;
+} PARTITION_INFORMATION ;
+
+typedef struct _DRIVE_LAYOUT_INFORMATION {
+ DWORD PartitionCount;
+ DWORD Signature;
+ PARTITION_INFORMATION PartitionEntry[1];
+} DRIVE_LAYOUT_INFORMATION;
+
+typedef struct _DRIVER_INFO_1 {
+ LPTSTR pName;
+} DRIVER_INFO_1;
+
+typedef struct _DRIVER_INFO_2 {
+ DWORD cVersion;
+ LPTSTR pName;
+ LPTSTR pEnvironment;
+ LPTSTR pDriverPath;
+ LPTSTR pDataFile;
+ LPTSTR pConfigFile;
+} DRIVER_INFO_2;
+
+typedef struct _DRIVER_INFO_3 {
+ DWORD cVersion;
+ LPTSTR pName;
+ LPTSTR pEnvironment;
+ LPTSTR pDriverPath;
+ LPTSTR pDataFile;
+ LPTSTR pConfigFile;
+ LPTSTR pHelpFile;
+ LPTSTR pDependentFiles;
+ LPTSTR pMonitorName;
+ LPTSTR pDefaultDataType;
+} DRIVER_INFO_3;
+
+typedef struct _editstream {
+ DWORD dwCookie;
+ DWORD dwError;
+ EDITSTREAMCALLBACK pfnCallback;
+} EDITSTREAM;
+
+typedef struct tagEMR
+{
+ DWORD iType;
+ DWORD nSize;
+} EMR, *PEMR;
+
+typedef struct tagEMRANGLEARC
+{
+ EMR emr;
+ POINTL ptlCenter;
+ DWORD nRadius;
+ FLOAT eStartAngle;
+ FLOAT eSweepAngle;
+} EMRANGLEARC, *PEMRANGLEARC;
+
+typedef struct tagEMRARC
+{
+ EMR emr;
+ RECTL rclBox;
+ POINTL ptlStart;
+ POINTL ptlEnd;
+} EMRARC, *PEMRARC,
+ EMRARCTO, *PEMRARCTO,
+ EMRCHORD, *PEMRCHORD,
+ EMRPIE, *PEMRPIE;
+
+typedef struct _XFORM
+{
+ FLOAT eM11;
+ FLOAT eM12;
+ FLOAT eM21;
+ FLOAT eM22;
+ FLOAT eDx;
+ FLOAT eDy;
+} XFORM, *PXFORM, *LPXFORM;
+
+typedef struct tagEMRBITBLT
+{
+ EMR emr;
+ RECTL rclBounds;
+ LONG xDest;
+ LONG yDest;
+ LONG cxDest;
+ LONG cyDest;
+ DWORD dwRop;
+ LONG xSrc;
+ LONG ySrc;
+ XFORM xformSrc;
+ COLORREF crBkColorSrc;
+ DWORD iUsageSrc;
+ DWORD offBmiSrc;
+ DWORD offBitsSrc;
+ DWORD cbBitsSrc;
+} EMRBITBLT, *PEMRBITBLT;
+
+typedef struct tagLOGBRUSH {
+ UINT lbStyle;
+ COLORREF lbColor;
+ LONG lbHatch;
+} LOGBRUSH;
+
+typedef struct tagEMRCREATEBRUSHINDIRECT
+{
+ EMR emr;
+ DWORD ihBrush;
+ LOGBRUSH lb;
+} EMRCREATEBRUSHINDIRECT, *PEMRCREATEBRUSHINDIRECT;
+
+typedef LONG LCSCSTYPE;
+typedef LONG LCSGAMUTMATCH;
+
+typedef struct tagLOGCOLORSPACE {
+ DWORD lcsSignature;
+ DWORD lcsVersion;
+ DWORD lcsSize;
+
+ LCSCSTYPE lcsCSType;
+ LCSGAMUTMATCH lcsIntent;
+ CIEXYZTRIPLE lcsEndpoints;
+ DWORD lcsGammaRed;
+ DWORD lcsGammaGreen;
+ DWORD lcsGammaBlue;
+ TCHAR lcsFilename[MAX_PATH];
+} LOGCOLORSPACE, *LPLOGCOLORSPACE;
+
+typedef struct tagEMRCREATECOLORSPACE
+{
+ EMR emr;
+ DWORD ihCS;
+ LOGCOLORSPACE lcs;
+} EMRCREATECOLORSPACE, *PEMRCREATECOLORSPACE;
+
+typedef struct tagEMRCREATEDIBPATTERNBRUSHPT
+{
+ EMR emr;
+ DWORD ihBrush;
+ DWORD iUsage;
+ DWORD offBmi;
+ DWORD cbBmi;
+ DWORD offBits;
+ DWORD cbBits;
+} EMRCREATEDIBPATTERNBRUSHPT,
+ PEMRCREATEDIBPATTERNBRUSHPT;
+
+typedef struct tagEMRCREATEMONOBRUSH
+{
+ EMR emr;
+ DWORD ihBrush;
+ DWORD iUsage;
+ DWORD offBmi;
+ DWORD cbBmi;
+ DWORD offBits;
+ DWORD cbBits;
+} EMRCREATEMONOBRUSH, *PEMRCREATEMONOBRUSH;
+
+typedef struct tagPALETTEENTRY {
+ BYTE peRed;
+ BYTE peGreen;
+ BYTE peBlue;
+ BYTE peFlags;
+} PALETTEENTRY, *LPPALETTEENTRY, *PPALETTEENTRY;
+
+typedef struct tagLOGPALETTE {
+ WORD palVersion;
+ WORD palNumEntries;
+ PALETTEENTRY palPalEntry[1];
+} LOGPALETTE, *LPLOGPALETTE, *PLOGPALETTE;
+
+typedef struct tagEMRCREATEPALETTE
+{
+ EMR emr;
+ DWORD ihPal;
+ LOGPALETTE lgpl;
+} EMRCREATEPALETTE, *PEMRCREATEPALETTE;
+
+typedef struct tagLOGPEN {
+ UINT lopnStyle;
+ POINT lopnWidth;
+ COLORREF lopnColor;
+} LOGPEN;
+
+typedef struct tagEMRCREATEPEN
+{
+ EMR emr;
+ DWORD ihPen;
+ LOGPEN lopn;
+} EMRCREATEPEN, *PEMRCREATEPEN;
+
+typedef struct tagEMRELLIPSE
+{
+ EMR emr;
+ RECTL rclBox;
+} EMRELLIPSE, *PEMRELLIPSE,
+ EMRRECTANGLE, *PEMRRECTANGLE;
+
+typedef struct tagEMREOF
+{
+ EMR emr;
+ DWORD nPalEntries;
+ DWORD offPalEntries;
+ DWORD nSizeLast;
+} EMREOF, *PEMREOF;
+
+typedef struct tagEMREXCLUDECLIPRECT
+{
+ EMR emr;
+ RECTL rclClip;
+} EMREXCLUDECLIPRECT, *PEMREXCLUDECLIPRECT,
+ EMRINTERSECTCLIPRECT, *PEMRINTERSECTCLIPRECT;
+
+typedef struct tagPANOSE {
+ BYTE bFamilyType;
+ BYTE bSerifStyle;
+ BYTE bWeight;
+ BYTE bProportion;
+ BYTE bContrast;
+ BYTE bStrokeVariation;
+ BYTE bArmStyle;
+ BYTE bLetterform;
+ BYTE bMidline;
+ BYTE bXHeight;
+} PANOSE;
+
+typedef struct tagEXTLOGFONT {
+ LOGFONT elfLogFont;
+ BCHAR elfFullName[LF_FULLFACESIZE];
+ BCHAR elfStyle[LF_FACESIZE];
+ DWORD elfVersion;
+ DWORD elfStyleSize;
+ DWORD elfMatch;
+ DWORD elfReserved;
+ BYTE elfVendorId[ELF_VENDOR_SIZE];
+ DWORD elfCulture;
+ PANOSE elfPanose;
+} EXTLOGFONT;
+
+typedef struct tagEMREXTCREATEFONTINDIRECTW
+{
+ EMR emr;
+ DWORD ihFont;
+ EXTLOGFONT elfw;
+} EMREXTCREATEFONTINDIRECTW,
+ PEMREXTCREATEFONTINDIRECTW;
+
+typedef struct tagEXTLOGPEN {
+ UINT elpPenStyle;
+ UINT elpWidth;
+ UINT elpBrushStyle;
+ COLORREF elpColor;
+ LONG elpHatch;
+ DWORD elpNumEntries;
+ DWORD elpStyleEntry[1];
+} EXTLOGPEN;
+
+typedef struct tagEMREXTCREATEPEN
+{
+ EMR emr;
+ DWORD ihPen;
+ DWORD offBmi;
+ DWORD cbBmi;
+ DWORD offBits;
+ DWORD cbBits;
+ EXTLOGPEN elp;
+} EMREXTCREATEPEN, *PEMREXTCREATEPEN;
+
+typedef struct tagEMREXTFLOODFILL
+{
+ EMR emr;
+ POINTL ptlStart;
+ COLORREF crColor;
+ DWORD iMode;
+} EMREXTFLOODFILL, *PEMREXTFLOODFILL;
+
+typedef struct tagEMREXTSELECTCLIPRGN
+{
+ EMR emr;
+ DWORD cbRgnData;
+ DWORD iMode;
+ BYTE RgnData[1];
+} EMREXTSELECTCLIPRGN, *PEMREXTSELECTCLIPRGN;
+
+typedef struct tagEMRTEXT
+{
+ POINTL ptlReference;
+ DWORD nChars;
+ DWORD offString;
+ DWORD fOptions;
+ RECTL rcl;
+ DWORD offDx;
+} EMRTEXT, *PEMRTEXT;
+
+typedef struct tagEMREXTTEXTOUTA
+{
+ EMR emr;
+ RECTL rclBounds;
+ DWORD iGraphicsMode;
+ FLOAT exScale;
+ FLOAT eyScale;
+ EMRTEXT emrtext;
+} EMREXTTEXTOUTA, *PEMREXTTEXTOUTA,
+ EMREXTTEXTOUTW, *PEMREXTTEXTOUTW;
+
+typedef struct tagEMRFILLPATH
+{
+ EMR emr;
+ RECTL rclBounds;
+} EMRFILLPATH, *PEMRFILLPATH,
+ EMRSTROKEANDFILLPATH, *PEMRSTROKEANDFILLPATH,
+ EMRSTROKEPATH, *PEMRSTROKEPATH;
+
+typedef struct tagEMRFILLRGN
+{
+ EMR emr;
+ RECTL rclBounds;
+ DWORD cbRgnData;
+ DWORD ihBrush;
+ BYTE RgnData[1];
+} EMRFILLRGN, *PEMRFILLRGN;
+
+typedef struct tagEMRFORMAT {
+ DWORD dSignature;
+ DWORD nVersion;
+ DWORD cbData;
+ DWORD offData;
+} EMRFORMAT;
+
+typedef struct tagSIZE {
+ LONG cx;
+ LONG cy;
+} SIZE, *PSIZE, *LPSIZE, SIZEL, *PSIZEL, *LPSIZEL;
+
+typedef struct tagEMRFRAMERGN
+{
+ EMR emr;
+ RECTL rclBounds;
+ DWORD cbRgnData;
+ DWORD ihBrush;
+ SIZEL szlStroke;
+ BYTE RgnData[1];
+} EMRFRAMERGN, *PEMRFRAMERGN;
+
+typedef struct tagEMRGDICOMMENT
+{
+ EMR emr;
+ DWORD cbData;
+ BYTE Data[1];
+} EMRGDICOMMENT, *PEMRGDICOMMENT;
+
+typedef struct tagEMRINVERTRGN
+{
+ EMR emr;
+ RECTL rclBounds;
+ DWORD cbRgnData;
+ BYTE RgnData[1];
+} EMRINVERTRGN, *PEMRINVERTRGN,
+ EMRPAINTRGN, *PEMRPAINTRGN;
+
+typedef struct tagEMRLINETO
+{
+ EMR emr;
+ POINTL ptl;
+} EMRLINETO, *PEMRLINETO,
+ EMRMOVETOEX, *PEMRMOVETOEX;
+
+typedef struct tagEMRMASKBLT
+{
+ EMR emr;
+ RECTL rclBounds;
+ LONG xDest;
+ LONG yDest;
+ LONG cxDest;
+ LONG cyDest;
+ DWORD dwRop;
+ LONG xSrc;
+ LONG ySrc;
+ XFORM xformSrc;
+ COLORREF crBkColorSrc;
+ DWORD iUsageSrc;
+ DWORD offBmiSrc;
+ DWORD cbBmiSrc;
+ DWORD offBitsSrc;
+ DWORD cbBitsSrc;
+ LONG xMask;
+ LONG yMask;
+ DWORD iUsageMask;
+ DWORD offBmiMask;
+ DWORD cbBmiMask;
+ DWORD offBitsMask;
+ DWORD cbBitsMask;
+} EMRMASKBLT, *PEMRMASKBLT;
+
+typedef struct tagEMRMODIFYWORLDTRANSFORM
+{
+ EMR emr;
+ XFORM xform;
+ DWORD iMode;
+} EMRMODIFYWORLDTRANSFORM,
+ PEMRMODIFYWORLDTRANSFORM;
+
+typedef struct tagEMROFFSETCLIPRGN
+{
+ EMR emr;
+ POINTL ptlOffset;
+} EMROFFSETCLIPRGN, *PEMROFFSETCLIPRGN;
+
+typedef struct tagEMRPLGBLT
+{
+ EMR emr;
+ RECTL rclBounds;
+ POINTL aptlDest[3];
+ LONG xSrc;
+ LONG ySrc;
+ LONG cxSrc;
+ LONG cySrc;
+ XFORM xformSrc;
+ COLORREF crBkColorSrc;
+ DWORD iUsageSrc;
+ DWORD offBmiSrc;
+ DWORD cbBmiSrc;
+ DWORD offBitsSrc;
+ DWORD cbBitsSrc;
+ LONG xMask;
+ LONG yMask;
+ DWORD iUsageMask;
+ DWORD offBmiMask;
+ DWORD cbBmiMask;
+ DWORD offBitsMask;
+ DWORD cbBitsMask;
+} EMRPLGBLT, *PEMRPLGBLT;
+
+typedef struct tagEMRPOLYDRAW
+{
+ EMR emr;
+ RECTL rclBounds;
+ DWORD cptl;
+ POINTL aptl[1];
+ BYTE abTypes[1];
+} EMRPOLYDRAW, *PEMRPOLYDRAW;
+
+typedef struct tagEMRPOLYDRAW16
+{
+ EMR emr;
+ RECTL rclBounds;
+ DWORD cpts;
+ POINTS apts[1];
+ BYTE abTypes[1];
+} EMRPOLYDRAW16, *PEMRPOLYDRAW16;
+
+typedef struct tagEMRPOLYLINE
+{
+ EMR emr;
+ RECTL rclBounds;
+ DWORD cptl;
+ POINTL aptl[1];
+} EMRPOLYLINE, *PEMRPOLYLINE,
+ EMRPOLYBEZIER, *PEMRPOLYBEZIER,
+ EMRPOLYGON, *PEMRPOLYGON,
+ EMRPOLYBEZIERTO, *PEMRPOLYBEZIERTO,
+ EMRPOLYLINETO, *PEMRPOLYLINETO;
+
+typedef struct tagEMRPOLYLINE16
+{
+ EMR emr;
+ RECTL rclBounds;
+ DWORD cpts;
+ POINTL apts[1];
+} EMRPOLYLINE16, *PEMRPOLYLINE16,
+ EMRPOLYBEZIER16, *PEMRPOLYBEZIER16,
+ EMRPOLYGON16, *PEMRPOLYGON16,
+ EMRPOLYBEZIERTO16, *PEMRPOLYBEZIERTO16,
+ EMRPOLYLINETO16, *PEMRPOLYLINETO16;
+
+typedef struct tagEMRPOLYPOLYLINE
+{
+ EMR emr;
+ RECTL rclBounds;
+ DWORD nPolys;
+ DWORD cptl;
+ DWORD aPolyCounts[1];
+ POINTL aptl[1];
+} EMRPOLYPOLYLINE, *PEMRPOLYPOLYLINE,
+ EMRPOLYPOLYGON, *PEMRPOLYPOLYGON;
+
+typedef struct tagEMRPOLYPOLYLINE16
+{
+ EMR emr;
+ RECTL rclBounds;
+ DWORD nPolys;
+ DWORD cpts;
+ DWORD aPolyCounts[1];
+ POINTS apts[1];
+} EMRPOLYPOLYLINE16, *PEMRPOLYPOLYLINE16,
+ EMRPOLYPOLYGON16, *PEMRPOLYPOLYGON16;
+
+typedef struct tagEMRPOLYTEXTOUTA
+{
+ EMR emr;
+ RECTL rclBounds;
+ DWORD iGraphicsMode;
+ FLOAT exScale;
+ FLOAT eyScale;
+ LONG cStrings;
+ EMRTEXT aemrtext[1];
+} EMRPOLYTEXTOUTA, *PEMRPOLYTEXTOUTA,
+ EMRPOLYTEXTOUTW, *PEMRPOLYTEXTOUTW;
+
+typedef struct tagEMRRESIZEPALETTE
+{
+ EMR emr;
+ DWORD ihPal;
+ DWORD cEntries;
+} EMRRESIZEPALETTE, *PEMRRESIZEPALETTE;
+
+typedef struct tagEMRRESTOREDC
+{
+ EMR emr;
+ LONG iRelative;
+} EMRRESTOREDC, *PEMRRESTOREDC;
+
+typedef struct tagEMRROUNDRECT
+{
+ EMR emr;
+ RECTL rclBox;
+ SIZEL szlCorner;
+} EMRROUNDRECT, *PEMRROUNDRECT;
+
+typedef struct tagEMRSCALEVIEWPORTEXTEX
+{
+ EMR emr;
+ LONG xNum;
+ LONG xDenom;
+ LONG yNum;
+ LONG yDenom;
+} EMRSCALEVIEWPORTEXTEX, *PEMRSCALEVIEWPORTEXTEX,
+ EMRSCALEWINDOWEXTEX, *PEMRSCALEWINDOWEXTEX;
+
+typedef struct tagEMRSELECTCOLORSPACE
+{
+ EMR emr;
+ DWORD ihCS;
+} EMRSELECTCOLORSPACE, *PEMRSELECTCOLORSPACE,
+ EMRDELETECOLORSPACE, *PEMRDELETECOLORSPACE;
+typedef struct tagEMRSELECTOBJECT
+{
+ EMR emr;
+ DWORD ihObject;
+} EMRSELECTOBJECT, *PEMRSELECTOBJECT,
+ EMRDELETEOBJECT, *PEMRDELETEOBJECT;
+
+typedef struct tagEMRSELECTPALETTE
+{
+ EMR emr;
+ DWORD ihPal;
+} EMRSELECTPALETTE, *PEMRSELECTPALETTE;
+
+typedef struct tagEMRSETARCDIRECTION
+{
+ EMR emr;
+ DWORD iArcDirection;
+} EMRSETARCDIRECTION, *PEMRSETARCDIRECTION;
+
+typedef struct tagEMRSETTEXTCOLOR
+{
+ EMR emr;
+ COLORREF crColor;
+} EMRSETBKCOLOR, *PEMRSETBKCOLOR,
+ EMRSETTEXTCOLOR, *PEMRSETTEXTCOLOR;
+
+typedef struct tagEMRSETCOLORADJUSTMENT
+{
+ EMR emr;
+ COLORADJUSTMENT ColorAdjustment;
+} EMRSETCOLORADJUSTMENT, *PEMRSETCOLORADJUSTMENT;
+
+typedef struct tagEMRSETDIBITSTODEVICE
+{
+ EMR emr;
+ RECTL rclBounds;
+ LONG xDest;
+ LONG yDest;
+ LONG xSrc;
+ LONG ySrc;
+ LONG cxSrc;
+ LONG cySrc;
+ DWORD offBmiSrc;
+ DWORD cbBmiSrc;
+ DWORD offBitsSrc;
+ DWORD cbBitsSrc;
+ DWORD iUsageSrc;
+ DWORD iStartScan;
+ DWORD cScans;
+} EMRSETDIBITSTODEVICE, *PEMRSETDIBITSTODEVICE;
+
+typedef struct tagEMRSETMAPPERFLAGS
+{
+ EMR emr;
+ DWORD dwFlags;
+} EMRSETMAPPERFLAGS, *PEMRSETMAPPERFLAGS;
+
+typedef struct tagEMRSETMITERLIMIT
+{
+ EMR emr;
+ FLOAT eMiterLimit;
+} EMRSETMITERLIMIT, *PEMRSETMITERLIMIT;
+
+typedef struct tagEMRSETPALETTEENTRIES
+{
+ EMR emr;
+ DWORD ihPal;
+ DWORD iStart;
+ DWORD cEntries;
+ PALETTEENTRY aPalEntries[1];
+} EMRSETPALETTEENTRIES, *PEMRSETPALETTEENTRIES;
+
+typedef struct tagEMRSETPIXELV
+{
+ EMR emr;
+ POINTL ptlPixel;
+ COLORREF crColor;
+} EMRSETPIXELV, *PEMRSETPIXELV;
+
+typedef struct tagEMRSETVIEWPORTEXTEX
+{
+ EMR emr;
+ SIZEL szlExtent;
+} EMRSETVIEWPORTEXTEX, *PEMRSETVIEWPORTEXTEX,
+ EMRSETWINDOWEXTEX, *PEMRSETWINDOWEXTEX;
+
+typedef struct tagEMRSETVIEWPORTORGEX
+{
+ EMR emr;
+ POINTL ptlOrigin;
+} EMRSETVIEWPORTORGEX, *PEMRSETVIEWPORTORGEX,
+ EMRSETWINDOWORGEX, *PEMRSETWINDOWORGEX,
+ EMRSETBRUSHORGEX, *PEMRSETBRUSHORGEX;
+
+typedef struct tagEMRSETWORLDTRANSFORM
+{
+ EMR emr;
+ XFORM xform;
+} EMRSETWORLDTRANSFORM, *PEMRSETWORLDTRANSFORM;
+
+typedef struct tagEMRSTRETCHBLT
+{
+ EMR emr;
+ RECTL rclBounds;
+ LONG xDest;
+ LONG yDest;
+ LONG cxDest;
+ LONG cyDest;
+ DWORD dwRop;
+ LONG xSrc;
+ LONG ySrc;
+ XFORM xformSrc;
+ COLORREF crBkColorSrc;
+ DWORD iUsageSrc;
+ DWORD offBmiSrc;
+ DWORD cbBmiSrc;
+ DWORD offBitsSrc;
+ DWORD cbBitsSrc;
+ LONG cxSrc;
+ LONG cySrc;
+} EMRSTRETCHBLT, *PEMRSTRETCHBLT;
+
+typedef struct tagEMRSTRETCHDIBITS
+{
+ EMR emr;
+ RECTL rclBounds;
+ LONG xDest;
+ LONG yDest;
+ LONG xSrc;
+ LONG ySrc;
+ LONG cxSrc;
+ LONG cySrc;
+ DWORD offBmiSrc;
+ DWORD cbBmiSrc;
+ DWORD offBitsSrc;
+ DWORD cbBitsSrc;
+ DWORD iUsageSrc;
+ DWORD dwRop;
+ LONG cxDest;
+ LONG cyDest;
+} EMRSTRETCHDIBITS, *PEMRSTRETCHDIBITS;
+
+typedef struct tagABORTPATH
+{
+ EMR emr;
+} EMRABORTPATH, *PEMRABORTPATH,
+ EMRBEGINPATH, *PEMRBEGINPATH,
+ EMRENDPATH, *PEMRENDPATH,
+ EMRCLOSEFIGURE, *PEMRCLOSEFIGURE,
+ EMRFLATTENPATH, *PEMRFLATTENPATH,
+ EMRWIDENPATH, *PEMRWIDENPATH,
+ EMRSETMETARGN, *PEMRSETMETARGN,
+ EMRSAVEDC, *PEMRSAVEDC,
+ EMRREALIZEPALETTE, *PEMRREALIZEPALETTE;
+
+typedef struct tagEMRSELECTCLIPPATH
+{
+ EMR emr;
+ DWORD iMode;
+} EMRSELECTCLIPPATH, *PEMRSELECTCLIPPATH,
+ EMRSETBKMODE, *PEMRSETBKMODE,
+ EMRSETMAPMODE, *PEMRSETMAPMODE,
+ EMRSETPOLYFILLMODE, *PEMRSETPOLYFILLMODE,
+ EMRSETROP2, *PEMRSETROP2,
+ EMRSETSTRETCHBLTMODE, *PEMRSETSTRETCHBLTMODE,
+ EMRSETTEXTALIGN, *PEMRSETTEXTALIGN,
+ EMRENABLEICM, *PEMRENABLEICM;
+
+typedef struct tagNMHDR {
+ HWND hwndFrom;
+ UINT idFrom;
+ UINT code;
+} NMHDR;
+
+typedef struct _encorrecttext {
+ NMHDR nmhdr;
+ CHARRANGE chrg;
+ WORD seltyp;
+} ENCORRECTTEXT;
+
+typedef struct _endropfiles {
+ NMHDR nmhdr;
+ HANDLE hDrop;
+ LONG cp;
+ WINBOOL fProtected;
+} ENDROPFILES;
+
+typedef struct {
+ NMHDR nmhdr;
+ LONG cObjectCount;
+ LONG cch;
+} ENSAVECLIPBOARD;
+
+typedef struct {
+ NMHDR nmhdr;
+ LONG iob;
+ LONG lOper;
+ HRESULT hr;
+} ENOLEOPFAILED;
+
+typedef struct tagENHMETAHEADER {
+ DWORD iType;
+ DWORD nSize;
+ RECTL rclBounds;
+ RECTL rclFrame;
+ DWORD dSignature;
+ DWORD nVersion;
+ DWORD nBytes;
+ DWORD nRecords;
+ WORD nHandles;
+ WORD sReserved;
+ DWORD nDescription;
+ DWORD offDescription;
+ DWORD nPalEntries;
+ SIZEL szlDevice;
+ SIZEL szlMillimeters;
+} ENHMETAHEADER, *LPENHMETAHEADER;
+
+typedef struct tagENHMETARECORD {
+ DWORD iType;
+ DWORD nSize;
+ DWORD dParm[1];
+} ENHMETARECORD, *PENHMETARECORD, *LPENHMETARECORD;
+
+typedef struct _enprotected {
+ NMHDR nmhdr;
+ UINT msg;
+ WPARAM wParam;
+ LPARAM lParam;
+ CHARRANGE chrg;
+} ENPROTECTED;
+
+typedef struct _SERVICE_STATUS {
+ DWORD dwServiceType;
+ DWORD dwCurrentState;
+ DWORD dwControlsAccepted;
+ DWORD dwWin32ExitCode;
+ DWORD dwServiceSpecificExitCode;
+ DWORD dwCheckPoint;
+ DWORD dwWaitHint;
+} SERVICE_STATUS, *LPSERVICE_STATUS;
+
+typedef struct _ENUM_SERVICE_STATUS {
+ LPTSTR lpServiceName;
+ LPTSTR lpDisplayName;
+ SERVICE_STATUS ServiceStatus;
+} ENUM_SERVICE_STATUS, *LPENUM_SERVICE_STATUS;
+
+typedef struct tagENUMLOGFONT {
+ LOGFONT elfLogFont;
+ BCHAR elfFullName[LF_FULLFACESIZE];
+ BCHAR elfStyle[LF_FACESIZE];
+} ENUMLOGFONT;
+
+typedef struct tagENUMLOGFONTEX {
+ LOGFONT elfLogFont;
+ BCHAR elfFullName[LF_FULLFACESIZE];
+ BCHAR elfStyle[LF_FACESIZE];
+ BCHAR elfScript[LF_FACESIZE];
+} ENUMLOGFONTEX;
+
+typedef struct _EVENTLOGRECORD {
+ DWORD Length;
+ DWORD Reserved;
+ DWORD RecordNumber;
+ DWORD TimeGenerated;
+ DWORD TimeWritten;
+ DWORD EventID;
+ WORD EventType;
+ WORD NumStrings;
+ WORD EventCategory;
+ WORD ReservedFlags;
+ DWORD ClosingRecordNumber;
+ DWORD StringOffset;
+ DWORD UserSidLength;
+ DWORD UserSidOffset;
+ DWORD DataLength;
+ DWORD DataOffset;
+
+/*
+ Then follow:
+
+ TCHAR SourceName[]
+ TCHAR Computername[]
+ SID UserSid
+ TCHAR Strings[]
+ BYTE Data[]
+ CHAR Pad[]
+ DWORD Length;
+*/
+
+} EVENTLOGRECORD;
+
+typedef struct tagEVENTMSG {
+ UINT message;
+ UINT paramL;
+ UINT paramH;
+ DWORD time;
+ HWND hwnd;
+} EVENTMSG;
+
+typedef struct _EXCEPTION_POINTERS {
+ PEXCEPTION_RECORD ExceptionRecord;
+ PCONTEXT ContextRecord;
+} EXCEPTION_POINTERS, *PEXCEPTION_POINTERS, *LPEXCEPTION_POINTERS;
+
+typedef struct _EXT_BUTTON {
+ WORD idCommand;
+ WORD idsHelp;
+ WORD fsStyle;
+} EXT_BUTTON, *LPEXT_BUTTON;
+
+typedef struct tagFILTERKEYS {
+ UINT cbSize;
+ DWORD dwFlags;
+ DWORD iWaitMSec;
+ DWORD iDelayMSec;
+ DWORD iRepeatMSec;
+ DWORD iBounceMSec;
+} FILTERKEYS;
+
+typedef struct _FIND_NAME_BUFFER {
+ UCHAR length;
+ UCHAR access_control;
+ UCHAR frame_control;
+ UCHAR destination_addr[6];
+ UCHAR source_addr[6];
+ UCHAR routing_info[18];
+} FIND_NAME_BUFFER;
+
+typedef struct _FIND_NAME_HEADER {
+ WORD node_count;
+ UCHAR reserved;
+ UCHAR unique_group;
+} FIND_NAME_HEADER;
+
+typedef struct {
+ DWORD lStructSize;
+ HWND hwndOwner;
+ HINSTANCE hInstance;
+ DWORD Flags;
+ LPTSTR lpstrFindWhat;
+ LPTSTR lpstrReplaceWith;
+ WORD wFindWhatLen;
+ WORD wReplaceWithLen;
+ LPARAM lCustData;
+ LPFRHOOKPROC lpfnHook;
+ LPCTSTR lpTemplateName;
+} FINDREPLACE, *LPFINDREPLACE;
+
+typedef struct _findtext {
+ CHARRANGE chrg;
+ LPSTR lpstrText;
+} FINDTEXT;
+
+typedef struct _findtextex {
+ CHARRANGE chrg;
+ LPSTR lpstrText;
+ CHARRANGE chrgText;
+} FINDTEXTEX;
+
+typedef struct _FMS_GETDRIVEINFO {
+ DWORD dwTotalSpace;
+ DWORD dwFreeSpace;
+ TCHAR szPath[260];
+ TCHAR szVolume[14];
+ TCHAR szShare[128];
+} FMS_GETDRIVEINFO;
+
+typedef struct _FMS_GETFILESEL {
+ FILETIME ftTime;
+ DWORD dwSize;
+ BYTE bAttr;
+ TCHAR szName[260];
+} FMS_GETFILESEL;
+
+typedef struct _FMS_LOAD {
+ DWORD dwSize;
+ TCHAR szMenuName[MENU_TEXT_LEN];
+ HMENU hMenu;
+ UINT wMenuDelta;
+} FMS_LOAD;
+
+typedef struct _FMS_TOOLBARLOAD {
+ DWORD dwSize;
+ LPEXT_BUTTON lpButtons;
+ WORD cButtons;
+ WORD cBitmaps;
+ WORD idBitmap;
+ HBITMAP hBitmap;
+} FMS_TOOLBARLOAD;
+
+typedef struct _FOCUS_EVENT_RECORD {
+ WINBOOL bSetFocus;
+} FOCUS_EVENT_RECORD;
+
+typedef struct _FORM_INFO_1 {
+ DWORD Flags;
+ LPTSTR pName;
+ SIZEL Size;
+ RECTL ImageableArea;
+} FORM_INFO_1;
+
+typedef struct _FORMAT_PARAMETERS {
+ MEDIA_TYPE MediaType;
+ DWORD StartCylinderNumber;
+ DWORD EndCylinderNumber;
+ DWORD StartHeadNumber;
+ DWORD EndHeadNumber;
+} FORMAT_PARAMETERS ;
+
+typedef struct _formatrange {
+ HDC hdc;
+ HDC hdcTarget;
+ RECT rc;
+ RECT rcPage;
+ CHARRANGE chrg;
+} FORMATRANGE;
+
+typedef struct tagGCP_RESULTS {
+ DWORD lStructSize;
+ LPTSTR lpOutString;
+ UINT *lpOrder;
+ INT *lpDx;
+ INT *lpCaretPos;
+ LPTSTR lpClass;
+ UINT *lpGlyphs;
+ UINT nGlyphs;
+ UINT nMaxFit;
+} GCP_RESULTS, *LPGCP_RESULTS;
+
+typedef struct _GENERIC_MAPPING {
+ ACCESS_MASK GenericRead;
+ ACCESS_MASK GenericWrite;
+ ACCESS_MASK GenericExecute;
+ ACCESS_MASK GenericAll;
+} GENERIC_MAPPING, *PGENERIC_MAPPING;
+
+typedef struct _GLYPHMETRICS {
+ UINT gmBlackBoxX;
+ UINT gmBlackBoxY;
+ POINT gmptGlyphOrigin;
+ short gmCellIncX;
+ short gmCellIncY;
+} GLYPHMETRICS, *LPGLYPHMETRICS;
+
+typedef struct tagHANDLETABLE {
+ HGDIOBJ objectHandle[1];
+} HANDLETABLE, *LPHANDLETABLE;
+
+typedef struct _HD_HITTESTINFO {
+ POINT pt;
+ UINT flags;
+ int iItem;
+} HD_HITTESTINFO;
+
+typedef struct _HD_ITEM {
+ UINT mask;
+ int cxy;
+ LPTSTR pszText;
+ HBITMAP hbm;
+ int cchTextMax;
+ int fmt;
+ LPARAM lParam;
+} HD_ITEM;
+
+typedef struct _WINDOWPOS {
+ HWND hwnd;
+ HWND hwndInsertAfter;
+ int x;
+ int y;
+ int cx;
+ int cy;
+ UINT flags;
+} WINDOWPOS, *PWINDOWPOS, *LPWINDOWPOS;
+
+typedef struct _HD_LAYOUT {
+ RECT * prc;
+ WINDOWPOS * pwpos;
+} HD_LAYOUT;
+
+typedef struct _HD_NOTIFY {
+ NMHDR hdr;
+ int iItem;
+ int iButton;
+ HD_ITEM * pitem;
+} HD_NOTIFY;
+
+typedef struct tagHELPINFO {
+ UINT cbSize;
+ int iContextType;
+ int iCtrlId;
+ HANDLE hItemHandle;
+ DWORD dwContextId;
+ POINT MousePos;
+} HELPINFO, *LPHELPINFO;
+
+typedef struct {
+ int wStructSize;
+ int x;
+ int y;
+ int dx;
+ int dy;
+ int wMax;
+ TCHAR rgchMember[2];
+} HELPWININFO;
+
+typedef struct tagHIGHCONTRAST {
+ UINT cbSize;
+ DWORD dwFlags;
+ LPTSTR lpszDefaultScheme;
+} HIGHCONTRAST, * LPHIGHCONTRAST;
+
+typedef struct tagHSZPAIR {
+ HSZ hszSvc;
+ HSZ hszTopic;
+} HSZPAIR;
+
+typedef struct _ICONINFO {
+ WINBOOL fIcon;
+ DWORD xHotspot;
+ DWORD yHotspot;
+ HBITMAP hbmMask;
+ HBITMAP hbmColor;
+} ICONINFO, *PICONINFO;
+
+typedef struct tagICONMETRICS {
+ UINT cbSize;
+ int iHorzSpacing;
+ int iVertSpacing;
+ int iTitleWrap;
+ LOGFONT lfFont;
+} ICONMETRICS, *LPICONMETRICS;
+
+typedef struct _IMAGEINFO {
+ HBITMAP hbmImage;
+ HBITMAP hbmMask;
+ int Unused1;
+ int Unused2;
+ RECT rcImage;
+} IMAGEINFO;
+
+typedef struct _KEY_EVENT_RECORD {
+ WINBOOL bKeyDown;
+ WORD wRepeatCount;
+ WORD wVirtualKeyCode;
+ WORD wVirtualScanCode;
+
+ char AsciiChar;
+ char pad;
+#if 0
+ union {
+ WCHAR UnicodeChar;
+ CHAR AsciiChar;
+ } uChar;
+#endif
+ DWORD dwControlKeyState;
+} KEY_EVENT_RECORD PACKED;
+
+typedef struct _MOUSE_EVENT_RECORD {
+ COORD dwMousePosition;
+ DWORD dwButtonState;
+ DWORD dwControlKeyState;
+ DWORD dwEventFlags;
+} MOUSE_EVENT_RECORD;
+
+typedef struct _WINDOW_BUFFER_SIZE_RECORD {
+ COORD dwSize;
+} WINDOW_BUFFER_SIZE_RECORD;
+
+typedef struct _MENU_EVENT_RECORD {
+ UINT dwCommandId;
+} MENU_EVENT_RECORD, *PMENU_EVENT_RECORD;
+
+typedef struct _INPUT_RECORD {
+ WORD EventType;
+ union {
+#ifndef __cplus_plus
+ /* this will be the wrong size in c++ */
+ KEY_EVENT_RECORD KeyEvent;
+#endif
+ MOUSE_EVENT_RECORD MouseEvent;
+ WINDOW_BUFFER_SIZE_RECORD WindowBufferSizeEvent;
+ MENU_EVENT_RECORD MenuEvent;
+ FOCUS_EVENT_RECORD FocusEvent;
+ } Event;
+} INPUT_RECORD, *PINPUT_RECORD;
+
+typedef struct _SYSTEMTIME {
+ WORD wYear;
+ WORD wMonth;
+ WORD wDayOfWeek;
+ WORD wDay;
+ WORD wHour;
+ WORD wMinute;
+ WORD wSecond;
+ WORD wMilliseconds;
+} SYSTEMTIME, *LPSYSTEMTIME;
+
+typedef struct _JOB_INFO_1 {
+ DWORD JobId;
+ LPTSTR pPrinterName;
+ LPTSTR pMachineName;
+ LPTSTR pUserName;
+ LPTSTR pDocument;
+ LPTSTR pDatatype;
+ LPTSTR pStatus;
+ DWORD Status;
+ DWORD Priority;
+ DWORD Position;
+ DWORD TotalPages;
+ DWORD PagesPrinted;
+ SYSTEMTIME Submitted;
+} JOB_INFO_1;
+
+typedef struct _SID_IDENTIFIER_AUTHORITY {
+ BYTE Value[6];
+} SID_IDENTIFIER_AUTHORITY, *PSID_IDENTIFIER_AUTHORITY,
+ *LPSID_IDENTIFIER_AUTHORITY;
+
+typedef struct _SID {
+ BYTE Revision;
+ BYTE SubAuthorityCount;
+ SID_IDENTIFIER_AUTHORITY IdentifierAuthority;
+ DWORD SubAuthority[ANYSIZE_ARRAY];
+} SID, *PSID;
+
+typedef WORD SECURITY_DESCRIPTOR_CONTROL, *PSECURITY_DESCRIPTOR_CONTROL;
+
+typedef struct _SECURITY_DESCRIPTOR {
+ BYTE Revision;
+ BYTE Sbz1;
+ SECURITY_DESCRIPTOR_CONTROL Control;
+ PSID Owner;
+ PSID Group;
+ PACL Sacl;
+ PACL Dacl;
+} SECURITY_DESCRIPTOR, *PSECURITY_DESCRIPTOR;
+
+typedef struct _JOB_INFO_2 {
+ DWORD JobId;
+ LPTSTR pPrinterName;
+ LPTSTR pMachineName;
+ LPTSTR pUserName;
+ LPTSTR pDocument;
+ LPTSTR pNotifyName;
+ LPTSTR pDatatype;
+ LPTSTR pPrintProcessor;
+ LPTSTR pParameters;
+ LPTSTR pDriverName;
+ LPDEVMODE pDevMode;
+ LPTSTR 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_2;
+
+typedef struct tagKERNINGPAIR {
+ WORD wFirst;
+ WORD wSecond;
+ int iKernAmount;
+} KERNINGPAIR, *LPKERNINGPAIR;
+
+typedef struct _LANA_ENUM {
+ UCHAR length;
+ 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];
+ DWORD lsCsbDefault[2];
+ DWORD lsCsbSupported[2];
+} LOCALESIGNATURE;
+
+typedef struct _LOCALGROUP_MEMBERS_INFO_0 {
+ PSID lgrmi0_sid;
+} LOCALGROUP_MEMBERS_INFO_0;
+
+typedef struct _LOCALGROUP_MEMBERS_INFO_3 {
+ LPWSTR lgrmi3_domainandname;
+} LOCALGROUP_MEMBERS_INFO_3;
+
+typedef long FXPT16DOT16, * LPFXPT16DOT16;
+
+typedef LARGE_INTEGER LUID, *PLUID;
+
+typedef struct _LUID_AND_ATTRIBUTES {
+ LUID Luid;
+ DWORD Attributes;
+} LUID_AND_ATTRIBUTES;
+
+typedef LUID_AND_ATTRIBUTES LUID_AND_ATTRIBUTES_ARRAY[ANYSIZE_ARRAY];
+typedef LUID_AND_ATTRIBUTES_ARRAY *PLUID_AND_ATTRIBUTES_ARRAY;
+
+typedef struct _LV_COLUMN {
+ UINT mask;
+ int fmt;
+ int cx;
+ LPTSTR pszText;
+ int cchTextMax;
+ int iSubItem;
+} LV_COLUMN;
+
+typedef struct _LV_ITEM {
+ UINT mask;
+ int iItem;
+ int iSubItem;
+ UINT state;
+ UINT stateMask;
+ LPTSTR pszText;
+ int cchTextMax;
+ int iImage;
+ LPARAM lParam;
+} LV_ITEM;
+
+typedef struct tagLV_DISPINFO {
+ NMHDR hdr;
+ LV_ITEM item;
+} LV_DISPINFO;
+
+typedef struct _LV_FINDINFO {
+ UINT flags;
+ LPCTSTR psz;
+ LPARAM lParam;
+ POINT pt;
+ UINT vkDirection;
+} LV_FINDINFO;
+
+typedef struct _LV_HITTESTINFO {
+ POINT pt;
+ UINT flags;
+ int iItem;
+} LV_HITTESTINFO;
+
+typedef struct tagLV_KEYDOWN {
+ NMHDR hdr;
+ WORD wVKey;
+ UINT flags;
+} LV_KEYDOWN;
+
+typedef struct _MAT2 {
+ FIXED eM11;
+ FIXED eM12;
+ FIXED eM21;
+ FIXED eM22;
+} MAT2;
+
+typedef struct tagMDICREATESTRUCT {
+ LPCTSTR szClass;
+ LPCTSTR szTitle;
+ HANDLE hOwner;
+ int x;
+ int y;
+ int cx;
+ int cy;
+ DWORD style;
+ LPARAM lParam;
+} MDICREATESTRUCT;
+
+typedef MDICREATESTRUCT *LPMDICREATESTRUCT;
+
+typedef struct tagMEASUREITEMSTRUCT {
+ UINT CtlType;
+ UINT CtlID;
+ UINT itemID;
+ UINT itemWidth;
+ UINT itemHeight;
+ DWORD itemData;
+} MEASUREITEMSTRUCT, *LPMEASUREITEMSTRUCT;
+
+typedef struct _MEMORY_BASIC_INFORMATION {
+ PVOID BaseAddress;
+ PVOID AllocationBase;
+ DWORD AllocationProtect;
+ DWORD RegionSize;
+ DWORD State;
+ DWORD Protect;
+ DWORD Type;
+} MEMORY_BASIC_INFORMATION;
+typedef MEMORY_BASIC_INFORMATION *PMEMORY_BASIC_INFORMATION;
+
+typedef struct _MEMORYSTATUS {
+ DWORD dwLength;
+ DWORD dwMemoryLoad;
+ DWORD dwTotalPhys;
+ DWORD dwAvailPhys;
+ DWORD dwTotalPageFile;
+ DWORD dwAvailPageFile;
+ DWORD dwTotalVirtual;
+ DWORD dwAvailVirtual;
+} MEMORYSTATUS, *LPMEMORYSTATUS;
+
+typedef struct {
+ WORD wVersion;
+ WORD wOffset;
+ DWORD dwHelpId;
+} MENUEX_TEMPLATE_HEADER;
+
+typedef struct {
+ DWORD dwType;
+ DWORD dwState;
+ UINT uId;
+ BYTE bResInfo;
+ WCHAR szText[1];
+ DWORD dwHelpId;
+} MENUEX_TEMPLATE_ITEM;
+
+typedef struct tagMENUITEMINFO {
+ UINT cbSize;
+ UINT fMask;
+ UINT fType;
+ UINT fState;
+ UINT wID;
+ HMENU hSubMenu;
+ HBITMAP hbmpChecked;
+ HBITMAP hbmpUnchecked;
+ DWORD dwItemData;
+ LPTSTR dwTypeData;
+ UINT cch;
+} MENUITEMINFO, *LPMENUITEMINFO;
+typedef MENUITEMINFO CONST *LPCMENUITEMINFO;
+
+typedef struct {
+ WORD mtOption;
+ WORD mtID;
+ WCHAR mtString[1];
+} MENUITEMTEMPLATE;
+
+typedef struct {
+ WORD versionNumber;
+ WORD offset;
+} MENUITEMTEMPLATEHEADER;
+typedef VOID MENUTEMPLATE, *LPMENUTEMPLATE;
+
+typedef struct tagMETAFILEPICT {
+ LONG mm;
+ LONG xExt;
+ LONG yExt;
+ HMETAFILE hMF;
+} METAFILEPICT, *PMETAFILEPICT, *LPMETAFILEPICT;
+
+typedef struct tagMETAHEADER {
+ WORD mtType;
+ WORD mtHeaderSize;
+ WORD mtVersion;
+ DWORD mtSize;
+ WORD mtNoObjects;
+ DWORD mtMaxRecord;
+ WORD mtNoParameters;
+} METAHEADER PACKED;
+
+typedef struct tagMETARECORD {
+ DWORD rdSize;
+ WORD rdFunction;
+ WORD rdParm[1];
+} METARECORD, *LPMETARECORD;
+
+typedef struct tagMINIMIZEDMETRICS {
+ UINT cbSize;
+ int iWidth;
+ int iHorzGap;
+ int iVertGap;
+ int iArrange;
+} MINIMIZEDMETRICS, *LPMINIMIZEDMETRICS;
+
+typedef struct tagMINMAXINFO {
+ POINT ptReserved;
+ POINT ptMaxSize;
+ POINT ptMaxPosition;
+ POINT ptMinTrackSize;
+ POINT ptMaxTrackSize;
+} MINMAXINFO;
+
+typedef struct modemdevcaps_tag {
+ DWORD dwActualSize;
+ DWORD dwRequiredSize;
+ DWORD dwDevSpecificOffset;
+ DWORD dwDevSpecificSize;
+
+ DWORD dwModemProviderVersion;
+ DWORD dwModemManufacturerOffset;
+ DWORD dwModemManufacturerSize;
+ DWORD dwModemModelOffset;
+ DWORD dwModemModelSize;
+ DWORD dwModemVersionOffset;
+ DWORD dwModemVersionSize;
+
+ DWORD dwDialOptions;
+ DWORD dwCallSetupFailTimer;
+ DWORD dwInactivityTimeout;
+ DWORD dwSpeakerVolume;
+ DWORD dwSpeakerMode;
+ DWORD dwModemOptions;
+ DWORD dwMaxDTERate;
+ DWORD dwMaxDCERate;
+
+ BYTE abVariablePortion [1];
+} MODEMDEVCAPS, *PMODEMDEVCAPS, *LPMODEMDEVCAPS;
+
+typedef struct modemsettings_tag {
+ DWORD dwActualSize;
+ DWORD dwRequiredSize;
+ DWORD dwDevSpecificOffset;
+ DWORD dwDevSpecificSize;
+
+ DWORD dwCallSetupFailTimer;
+ DWORD dwInactivityTimeout;
+ DWORD dwSpeakerVolume;
+ DWORD dwSpeakerMode;
+ DWORD dwPreferredModemOptions;
+
+ DWORD dwNegotiatedModemOptions;
+ DWORD dwNegotiatedDCERate;
+
+ BYTE abVariablePortion[1];
+} MODEMSETTINGS, *PMODEMSETTINGS, *LPMODEMSETTINGS;
+
+typedef struct tagMONCBSTRUCT {
+ UINT cb;
+ DWORD dwTime;
+ HANDLE hTask;
+ DWORD dwRet;
+ UINT wType;
+ UINT wFmt;
+ HCONV hConv;
+ HSZ hsz1;
+ HSZ hsz2;
+ HDDEDATA hData;
+ DWORD dwData1;
+ DWORD dwData2;
+ CONVCONTEXT cc;
+ DWORD cbData;
+ DWORD Data[8];
+} MONCBSTRUCT;
+
+typedef struct tagMONCONVSTRUCT {
+ UINT cb;
+ WINBOOL fConnect;
+ DWORD dwTime;
+ HANDLE hTask;
+ HSZ hszSvc;
+ HSZ hszTopic;
+ HCONV hConvClient;
+ HCONV hConvServer;
+} MONCONVSTRUCT;
+
+typedef struct tagMONERRSTRUCT {
+ UINT cb;
+ UINT wLastError;
+ DWORD dwTime;
+ HANDLE hTask;
+} MONERRSTRUCT;
+
+typedef struct tagMONHSZSTRUCT {
+ UINT cb;
+ WINBOOL fsAction;
+ DWORD dwTime;
+ HSZ hsz;
+ HANDLE hTask;
+ TCHAR str[1];
+} MONHSZSTRUCT;
+
+typedef struct _MONITOR_INFO_1 {
+ LPTSTR pName;
+} MONITOR_INFO_1;
+
+typedef struct _MONITOR_INFO_2 {
+ LPTSTR pName;
+ LPTSTR pEnvironment ;
+ LPTSTR pDLLName ;
+} MONITOR_INFO_2;
+
+typedef struct tagMONLINKSTRUCT {
+ UINT cb;
+ DWORD dwTime;
+ HANDLE hTask;
+ WINBOOL fEstablished;
+ WINBOOL fNoData;
+ HSZ hszSvc;
+ HSZ hszTopic;
+ HSZ hszItem;
+ UINT wFmt;
+ WINBOOL fServer;
+ HCONV hConvServer;
+ HCONV hConvClient;
+} MONLINKSTRUCT;
+
+typedef struct tagMONMSGSTRUCT {
+ UINT cb;
+ HWND hwndTo;
+ DWORD dwTime;
+ HANDLE hTask;
+ UINT wMsg;
+ WPARAM wParam;
+ LPARAM lParam;
+ DDEML_MSG_HOOK_DATA dmhd;
+} MONMSGSTRUCT;
+
+typedef struct tagMOUSEHOOKSTRUCT {
+ POINT pt;
+ HWND hwnd;
+ UINT wHitTestCode;
+ DWORD dwExtraInfo;
+} MOUSEHOOKSTRUCT, *PMOUSEHOOKSTRUCT, *LPMOUSEHOOKSTRUCT;
+
+typedef struct _MOUSEKEYS {
+ DWORD cbSize;
+ DWORD dwFlags;
+ DWORD iMaxSpeed;
+ DWORD iTimeToMaxSpeed;
+ DWORD iCtrlSpeed;
+ DWORD dwReserved1;
+ DWORD dwReserved2;
+} MOUSEKEYS;
+
+typedef struct tagMSG {
+ HWND hwnd;
+ UINT message;
+ WPARAM wParam;
+ LPARAM lParam;
+ DWORD time;
+ POINT pt;
+} MSG, *LPMSG;
+
+typedef void CALLBACK (*MSGBOXCALLBACK) (LPHELPINFO lpHelpInfo);
+
+typedef struct {
+ UINT cbSize;
+ HWND hwndOwner;
+ HINSTANCE hInstance;
+ LPCSTR lpszText;
+ LPCSTR lpszCaption;
+ DWORD dwStyle;
+ LPCSTR lpszIcon;
+ DWORD dwContextHelpId;
+ MSGBOXCALLBACK lpfnMsgBoxCallback;
+ DWORD dwLanguageId;
+} MSGBOXPARAMS, *PMSGBOXPARAMS, *LPMSGBOXPARAMS;
+
+typedef struct _msgfilter {
+ NMHDR nmhdr;
+ UINT msg;
+ WPARAM wParam;
+ LPARAM lParam;
+} MSGFILTER;
+
+typedef struct tagMULTIKEYHELP {
+ DWORD mkSize;
+ TCHAR mkKeylist;
+ TCHAR szKeyphrase[1];
+} MULTIKEYHELP;
+
+typedef struct _NAME_BUFFER {
+ UCHAR name[NCBNAMSZ];
+ UCHAR name_num;
+ UCHAR name_flags;
+} NAME_BUFFER;
+
+typedef struct _NCB {
+ UCHAR ncb_command;
+ UCHAR ncb_retcode;
+ UCHAR ncb_lsn;
+ UCHAR ncb_num;
+ PUCHAR ncb_buffer;
+ WORD ncb_length;
+ UCHAR ncb_callname[NCBNAMSZ];
+ UCHAR ncb_name[NCBNAMSZ];
+ UCHAR ncb_rto;
+ UCHAR ncb_sto;
+ void (*ncb_post) (struct _NCB *);
+ UCHAR ncb_lana_num;
+ UCHAR ncb_cmd_cplt;
+ UCHAR ncb_reserve[10];
+ HANDLE ncb_event;
+} NCB;
+
+typedef struct _NCCALCSIZE_PARAMS {
+ RECT rgrc[3];
+ PWINDOWPOS lppos;
+} NCCALCSIZE_PARAMS;
+
+typedef struct _NDDESHAREINFO {
+ LONG lRevision;
+ LPTSTR lpszShareName;
+ LONG lShareType;
+ LPTSTR lpszAppTopicList;
+ LONG fSharedFlag;
+ LONG fService;
+ LONG fStartAppFlag;
+ LONG nCmdShow;
+ LONG qModifyId[2];
+ LONG cNumItems;
+ LPTSTR lpszItemList;
+}NDDESHAREINFO;
+
+typedef struct _NETRESOURCE {
+ DWORD dwScope;
+ DWORD dwType;
+ DWORD dwDisplayType;
+ DWORD dwUsage;
+ LPTSTR lpLocalName;
+ LPTSTR lpRemoteName;
+ LPTSTR lpComment;
+ LPTSTR lpProvider;
+} NETRESOURCE, *LPNETRESOURCE;
+
+typedef struct tagNEWCPLINFO {
+ DWORD dwSize;
+ DWORD dwFlags;
+ DWORD dwHelpContext;
+ LONG lData;
+ HICON hIcon;
+ TCHAR szName[32];
+ TCHAR szInfo[64];
+ TCHAR szHelpFile[128];
+} NEWCPLINFO;
+
+typedef struct tagNEWTEXTMETRIC {
+ LONG tmHeight;
+ LONG tmAscent;
+ LONG tmDescent;
+ LONG tmInternalLeading;
+ LONG tmExternalLeading;
+ LONG tmAveCharWidth;
+ LONG tmMaxCharWidth;
+ LONG tmWeight;
+ LONG tmOverhang;
+ LONG tmDigitizedAspectX;
+ LONG tmDigitizedAspectY;
+ BCHAR tmFirstChar;
+ BCHAR tmLastChar;
+ BCHAR tmDefaultChar;
+ BCHAR tmBreakChar;
+ BYTE tmItalic;
+ BYTE tmUnderlined;
+ BYTE tmStruckOut;
+ BYTE tmPitchAndFamily;
+ BYTE tmCharSet;
+ DWORD ntmFlags;
+ UINT ntmSizeEM;
+ UINT ntmCellHeight;
+ UINT ntmAvgWidth;
+} NEWTEXTMETRIC;
+
+
+typedef struct tagNEWTEXTMETRICEX {
+ NEWTEXTMETRIC ntmentm;
+ FONTSIGNATURE ntmeFontSignature;
+} NEWTEXTMETRICEX;
+
+typedef struct tagNM_LISTVIEW {
+ NMHDR hdr;
+ int iItem;
+ int iSubItem;
+ UINT uNewState;
+ UINT uOldState;
+ UINT uChanged;
+ POINT ptAction;
+ LPARAM lParam;
+} NM_LISTVIEW;
+
+typedef struct _TREEITEM *HTREEITEM;
+
+typedef struct _TV_ITEM {
+ UINT mask;
+ HTREEITEM hItem;
+ UINT state;
+ UINT stateMask;
+ LPTSTR pszText;
+ int cchTextMax;
+ int iImage;
+ int iSelectedImage;
+ int cChildren;
+ LPARAM lParam;
+} TV_ITEM, *LPTV_ITEM;
+
+typedef struct _NM_TREEVIEW {
+ NMHDR hdr;
+ UINT action;
+ TV_ITEM itemOld;
+ TV_ITEM itemNew;
+ POINT ptDrag;
+} NM_TREEVIEW;
+typedef NM_TREEVIEW *LPNM_TREEVIEW;
+
+typedef struct _NM_UPDOWN {
+ NMHDR hdr;
+ int iPos;
+ int iDelta;
+} NM_UPDOWNW;
+
+typedef struct tagNONCLIENTMETRICS {
+ UINT cbSize;
+ int iBorderWidth;
+ int iScrollWidth;
+ int iScrollHeight;
+ int iCaptionWidth;
+ int iCaptionHeight;
+ LOGFONT lfCaptionFont;
+ int iSmCaptionWidth;
+ int iSmCaptionHeight;
+ LOGFONT lfSmCaptionFont;
+ int iMenuWidth;
+ int iMenuHeight;
+ LOGFONT lfMenuFont;
+ LOGFONT lfStatusFont;
+ LOGFONT lfMessageFont;
+} NONCLIENTMETRICS, * LPNONCLIENTMETRICS;
+
+typedef struct _SERVICE_ADDRESS {
+ DWORD dwAddressType;
+ DWORD dwAddressFlags;
+ DWORD dwAddressLength;
+ DWORD dwPrincipalLength;
+ BYTE *lpAddress;
+ BYTE *lpPrincipal;
+} SERVICE_ADDRESS;
+
+typedef struct _SERVICE_ADDRESSES {
+ DWORD dwAddressCount;
+ SERVICE_ADDRESS Addresses[1];
+} SERVICE_ADDRESSES, *LPSERVICE_ADDRESSES;
+
+typedef struct _GUID
+{
+ unsigned long Data1;
+ unsigned short Data2;
+ unsigned short Data3;
+ unsigned char Data4[8];
+} GUID, *LPGUID;
+typedef GUID CLSID, *LPCLSID;
+
+typedef struct _SERVICE_INFO {
+ LPGUID lpServiceType;
+ LPTSTR lpServiceName;
+ LPTSTR lpComment;
+ LPTSTR lpLocale;
+ DWORD dwDisplayHint;
+ DWORD dwVersion;
+ DWORD dwTime;
+ LPTSTR lpMachineName;
+ LPSERVICE_ADDRESSES lpServiceAddress;
+ BLOB ServiceSpecificInfo;
+} SERVICE_INFO;
+
+typedef struct _NS_SERVICE_INFO {
+ DWORD dwNameSpace;
+ SERVICE_INFO ServiceInfo;
+} NS_SERVICE_INFO;
+
+typedef struct _numberfmt {
+ UINT NumDigits;
+ UINT LeadingZero;
+ UINT Grouping;
+ LPTSTR lpDecimalSep;
+ LPTSTR lpThousandSep;
+ UINT NegativeOrder;
+} NUMBERFMT;
+
+typedef struct _OFSTRUCT {
+ BYTE cBytes;
+ BYTE fFixedDisk;
+ WORD nErrCode;
+ WORD Reserved1;
+ WORD Reserved2;
+ CHAR szPathName[OFS_MAXPATHNAME];
+} OFSTRUCT, *LPOFSTRUCT;
+
+typedef struct tagOFN {
+ DWORD lStructSize;
+ HWND hwndOwner;
+ HINSTANCE hInstance;
+ LPCTSTR lpstrFilter;
+ LPTSTR lpstrCustomFilter;
+ DWORD nMaxCustFilter;
+ DWORD nFilterIndex;
+ LPTSTR lpstrFile;
+ DWORD nMaxFile;
+ LPTSTR lpstrFileTitle;
+ DWORD nMaxFileTitle;
+ LPCTSTR lpstrInitialDir;
+ LPCTSTR lpstrTitle;
+ DWORD Flags;
+ WORD nFileOffset;
+ WORD nFileExtension;
+ LPCTSTR lpstrDefExt;
+ DWORD lCustData;
+ LPOFNHOOKPROC lpfnHook;
+ LPCTSTR lpTemplateName;
+} OPENFILENAME, *LPOPENFILENAME;
+
+typedef struct _OFNOTIFY {
+ NMHDR hdr;
+ LPOPENFILENAME lpOFN;
+ LPTSTR pszFile;
+} OFNOTIFY, *LPOFNOTIFY;
+
+typedef struct _OSVERSIONINFO {
+ DWORD dwOSVersionInfoSize;
+ DWORD dwMajorVersion;
+ DWORD dwMinorVersion;
+ DWORD dwBuildNumber;
+ DWORD dwPlatformId;
+ TCHAR szCSDVersion[ 128 ];
+} OSVERSIONINFO, *POSVERSIONINFO, *LPOSVERSIONINFO;
+
+typedef struct tagTEXTMETRIC {
+ LONG tmHeight;
+ LONG tmAscent;
+ LONG tmDescent;
+ LONG tmInternalLeading;
+ LONG tmExternalLeading;
+ LONG tmAveCharWidth;
+ LONG tmMaxCharWidth;
+ LONG tmWeight;
+ LONG tmOverhang;
+ LONG tmDigitizedAspectX;
+ LONG tmDigitizedAspectY;
+ BCHAR tmFirstChar;
+ BCHAR tmLastChar;
+ BCHAR tmDefaultChar;
+ BCHAR tmBreakChar;
+ BYTE tmItalic;
+ BYTE tmUnderlined;
+ BYTE tmStruckOut;
+ BYTE tmPitchAndFamily;
+ BYTE tmCharSet;
+} TEXTMETRIC, *LPTEXTMETRIC;
+
+typedef struct _OUTLINETEXTMETRIC {
+ UINT otmSize;
+ TEXTMETRIC otmTextMetrics;
+ BYTE otmFiller;
+ PANOSE otmPanoseNumber;
+ UINT otmfsSelection;
+ UINT otmfsType;
+ int otmsCharSlopeRise;
+ int otmsCharSlopeRun;
+ int otmItalicAngle;
+ UINT otmEMSquare;
+ int otmAscent;
+ int otmDescent;
+ UINT otmLineGap;
+ UINT otmsCapEmHeight;
+ UINT otmsXHeight;
+ RECT otmrcFontBox;
+ int otmMacAscent;
+ int otmMacDescent;
+ UINT otmMacLineGap;
+ UINT otmusMinimumPPEM;
+ POINT otmptSubscriptSize;
+ POINT otmptSubscriptOffset;
+ POINT otmptSuperscriptSize;
+ POINT otmptSuperscriptOffset;
+ UINT otmsStrikeoutSize;
+ int otmsStrikeoutPosition;
+ int otmsUnderscoreSize;
+ int otmsUnderscorePosition;
+ PSTR otmpFamilyName;
+ PSTR otmpFaceName;
+ PSTR otmpStyleName;
+ PSTR otmpFullName;
+} OUTLINETEXTMETRIC, *LPOUTLINETEXTMETRIC;
+
+typedef struct _OVERLAPPED {
+ DWORD Internal;
+ DWORD InternalHigh;
+ DWORD Offset;
+ DWORD OffsetHigh;
+ HANDLE hEvent;
+} OVERLAPPED, *LPOVERLAPPED;
+
+typedef struct tagPSD {
+ DWORD lStructSize;
+ HWND hwndOwner;
+ HGLOBAL hDevMode;
+ HGLOBAL hDevNames;
+ DWORD Flags;
+ POINT ptPaperSize;
+ RECT rtMinMargin;
+ RECT rtMargin;
+ HINSTANCE hInstance;
+ LPARAM lCustData;
+ LPPAGESETUPHOOK lpfnPageSetupHook;
+ LPPAGEPAINTHOOK lpfnPagePaintHook;
+ LPCTSTR lpPageSetupTemplateName;
+ HGLOBAL hPageSetupTemplate;
+} PAGESETUPDLG, *LPPAGESETUPDLG;
+
+typedef struct tagPAINTSTRUCT {
+ HDC hdc;
+ WINBOOL fErase;
+ RECT rcPaint;
+ WINBOOL fRestore;
+ WINBOOL fIncUpdate;
+ BYTE rgbReserved[32];
+} PAINTSTRUCT, *LPPAINTSTRUCT;
+
+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 _PERF_COUNTER_BLOCK {
+ DWORD ByteLength;
+} PERF_COUNTER_BLOCK;
+
+typedef struct _PERF_COUNTER_DEFINITION {
+ DWORD ByteLength;
+ DWORD CounterNameTitleIndex;
+ LPWSTR CounterNameTitle;
+ DWORD CounterHelpTitleIndex;
+ LPWSTR CounterHelpTitle;
+ DWORD DefaultScale;
+ DWORD DetailLevel;
+ DWORD CounterType;
+ DWORD CounterSize;
+ DWORD CounterOffset;
+} PERF_COUNTER_DEFINITION;
+
+typedef struct _PERF_DATA_BLOCK {
+ WCHAR Signature[4];
+ DWORD LittleEndian;
+ DWORD Version;
+ DWORD Revision;
+ DWORD TotalByteLength;
+ DWORD HeaderLength;
+ DWORD NumObjectTypes;
+ DWORD DefaultObject;
+ SYSTEMTIME SystemTime;
+ LARGE_INTEGER PerfTime;
+ LARGE_INTEGER PerfFreq;
+ LARGE_INTEGER PerfTime100nSec;
+ DWORD SystemNameLength;
+ DWORD SystemNameOffset;
+} PERF_DATA_BLOCK;
+
+typedef struct _PERF_INSTANCE_DEFINITION {
+ DWORD ByteLength;
+ DWORD ParentObjectTitleIndex;
+ DWORD ParentObjectInstance;
+ DWORD UniqueID;
+ DWORD NameOffset;
+ DWORD NameLength;
+} PERF_INSTANCE_DEFINITION;
+
+typedef struct _PERF_OBJECT_TYPE {
+ DWORD TotalByteLength;
+ DWORD DefinitionLength;
+ DWORD HeaderLength;
+ DWORD ObjectNameTitleIndex;
+ LPWSTR ObjectNameTitle;
+ DWORD ObjectHelpTitleIndex;
+ LPWSTR ObjectHelpTitle;
+ DWORD DetailLevel;
+ DWORD NumCounters;
+ DWORD DefaultCounter;
+ DWORD NumInstances;
+ DWORD CodePage;
+ LARGE_INTEGER PerfTime;
+ LARGE_INTEGER PerfFreq;
+} PERF_OBJECT_TYPE;
+
+typedef struct _POLYTEXT {
+ int x;
+ int y;
+ UINT n;
+ LPCTSTR lpstr;
+ UINT uiFlags;
+ RECT rcl;
+ int *pdx;
+} POLYTEXT;
+
+typedef struct _PORT_INFO_1 {
+ LPTSTR pName;
+} PORT_INFO_1;
+
+typedef struct _PORT_INFO_2 {
+ LPSTR pPortName;
+ LPSTR pMonitorName;
+ LPSTR pDescription;
+ DWORD fPortType;
+ DWORD Reserved;
+} PORT_INFO_2;
+
+typedef struct _PREVENT_MEDIA_REMOVAL {
+ BOOLEAN PreventMediaRemoval;
+} PREVENT_MEDIA_REMOVAL ;
+
+typedef struct tagPD {
+ 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;
+ LPCTSTR lpPrintTemplateName;
+ LPCTSTR lpSetupTemplateName;
+ HANDLE hPrintTemplate;
+ HANDLE hSetupTemplate;
+} PRINTDLG PACKED, *LPPRINTDLG PACKED;
+
+typedef struct _PRINTER_DEFAULTS {
+ LPTSTR pDatatype;
+ LPDEVMODE pDevMode;
+ ACCESS_MASK DesiredAccess;
+} PRINTER_DEFAULTS;
+
+typedef struct _PRINTER_INFO_1 {
+ DWORD Flags;
+ LPTSTR pDescription;
+ LPTSTR pName;
+ LPTSTR pComment;
+} PRINTER_INFO_1, *PPRINTER_INFO_1, *LPPRINTER_INFO_1;
+
+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;
+ PSECURITY_DESCRIPTOR pSecurityDescriptor;
+ DWORD Attributes;
+ DWORD Priority;
+ DWORD DefaultPriority;
+ DWORD StartTime;
+ DWORD UntilTime;
+ DWORD Status;
+ DWORD cJobs;
+ DWORD AveragePPM;
+} PRINTER_INFO_2;
+
+typedef struct _PRINTER_INFO_3 {
+ PSECURITY_DESCRIPTOR pSecurityDescriptor;
+} PRINTER_INFO_3;
+
+typedef struct _PRINTER_INFO_4 {
+ LPTSTR pPrinterName;
+ LPTSTR pServerName;
+ DWORD Attributes;
+} PRINTER_INFO_4;
+
+typedef struct _PRINTER_INFO_5 {
+ LPTSTR pPrinterName;
+ LPTSTR pPortName;
+ DWORD Attributes;
+ DWORD DeviceNotSelectedTimeout;
+ DWORD TransmissionRetryTimeout;
+} PRINTER_INFO_5;
+
+typedef struct _PRINTER_NOTIFY_INFO_DATA {
+ WORD Type;
+ WORD Field;
+ DWORD Reserved;
+ DWORD Id;
+ union {
+ DWORD adwData[2];
+ struct {
+ DWORD cbBuf;
+ LPVOID pBuf;
+ } Data;
+ } NotifyData;
+} PRINTER_NOTIFY_INFO_DATA;
+
+typedef struct _PRINTER_NOTIFY_INFO {
+ DWORD Version;
+ DWORD Flags;
+ DWORD Count;
+ PRINTER_NOTIFY_INFO_DATA aData[1];
+} PRINTER_NOTIFY_INFO;
+
+typedef struct _PRINTER_NOTIFY_OPTIONS_TYPE {
+ WORD Type;
+ WORD Reserved0;
+ DWORD Reserved1;
+ DWORD Reserved2;
+ DWORD Count;
+ PWORD pFields;
+} PRINTER_NOTIFY_OPTIONS_TYPE, *PPRINTER_NOTIFY_OPTIONS_TYPE;
+
+typedef struct _PRINTER_NOTIFY_OPTIONS {
+ DWORD Version;
+ DWORD Flags;
+ DWORD Count;
+ PPRINTER_NOTIFY_OPTIONS_TYPE pTypes;
+} PRINTER_NOTIFY_OPTIONS;
+
+typedef struct _PRINTPROCESSOR_INFO_1 {
+ LPTSTR pName;
+} PRINTPROCESSOR_INFO_1;
+
+typedef struct _PRIVILEGE_SET {
+ DWORD PrivilegeCount;
+ DWORD Control;
+ LUID_AND_ATTRIBUTES Privilege[ANYSIZE_ARRAY];
+} PRIVILEGE_SET, *PPRIVILEGE_SET, *LPPRIVILEGE_SET;
+
+typedef struct _PROCESS_HEAP_ENTRY {
+ PVOID lpData;
+ DWORD cbData;
+ BYTE cbOverhead;
+ BYTE iRegionIndex;
+ WORD wFlags;
+ DWORD dwCommittedSize;
+ DWORD dwUnCommittedSize;
+ LPVOID lpFirstBlock;
+ LPVOID lpLastBlock;
+ HANDLE hMem;
+} PROCESS_HEAPENTRY, *LPPROCESS_HEAP_ENTRY;
+
+typedef struct _PROCESS_INFORMATION {
+ HANDLE hProcess;
+ HANDLE hThread;
+ DWORD dwProcessId;
+ DWORD dwThreadId;
+} PROCESS_INFORMATION, *LPPROCESS_INFORMATION;
+
+typedef UINT CALLBACK (*LPFNPSPCALLBACK) (HWND, UINT, LPVOID);
+
+typedef struct _PROPSHEETPAGE {
+ DWORD dwSize;
+ DWORD dwFlags;
+ HINSTANCE hInstance;
+ union {
+ LPCTSTR pszTemplate;
+ LPCDLGTEMPLATE pResource;
+ } u1;
+ union {
+ HICON hIcon;
+ LPCTSTR pszIcon;
+ } u2;
+ LPCTSTR pszTitle;
+ DLGPROC pfnDlgProc;
+ LPARAM lParam;
+ LPFNPSPCALLBACK pfnCallback;
+ UINT * pcRefParent;
+} PROPSHEETPAGE, *LPPROPSHEETPAGE;
+typedef const PROPSHEETPAGE *LPCPROPSHEETPAGE;
+
+typedef struct _PSP *HPROPSHEETPAGE;
+typedef struct _PROPSHEETHEADER {
+ DWORD dwSize;
+ DWORD dwFlags;
+ HWND hwndParent;
+ HINSTANCE hInstance;
+ union {
+ HICON hIcon;
+ LPCTSTR pszIcon;
+ } u1;
+ LPCTSTR pszCaption;
+ UINT nPages;
+ union {
+ UINT nStartPage;
+ LPCTSTR pStartPage;
+ } u2;
+ union {
+ LPCPROPSHEETPAGE ppsp;
+ HPROPSHEETPAGE *phpage;
+ } u3;
+ PFNPROPSHEETCALLBACK pfnCallback;
+} PROPSHEETHEADER, *LPPROPSHEETHEADER;
+typedef const PROPSHEETHEADER *LPCPROPSHEETHEADER;
+
+/* PropertySheet callbacks */
+typedef WINBOOL CALLBACK (*LPFNADDPROPSHEETPAGE) (HPROPSHEETPAGE, LPARAM);
+typedef WINBOOL CALLBACK (*LPFNADDPROPSHEETPAGES) (LPVOID,
+ LPFNADDPROPSHEETPAGE,
+ LPARAM);
+
+typedef struct _PROTOCOL_INFO {
+ DWORD dwServiceFlags;
+ INT iAddressFamily;
+ INT iMaxSockAddr;
+ INT iMinSockAddr;
+ INT iSocketType;
+ INT iProtocol;
+ DWORD dwMessageSize;
+ LPTSTR lpProtocol;
+} PROTOCOL_INFO;
+
+typedef struct _PROVIDOR_INFO_1 {
+ LPTSTR pName;
+ LPTSTR pEnvironment ;
+ LPTSTR pDLLName ;
+} PROVIDOR_INFO_1;
+
+typedef struct _PSHNOTIFY {
+ NMHDR hdr;
+ LPARAM lParam;
+} PSHNOTIFY, *LPPSHNOTIFY;
+
+typedef struct _punctuation {
+ UINT iSize;
+ LPSTR szPunctuation;
+} PUNCTUATION;
+
+typedef struct _QUERY_SERVICE_CONFIG {
+ DWORD dwServiceType;
+ DWORD dwStartType;
+ DWORD dwErrorControl;
+ LPTSTR lpBinaryPathName;
+ LPTSTR lpLoadOrderGroup;
+ DWORD dwTagId;
+ LPTSTR lpDependencies;
+ LPTSTR lpServiceStartName;
+ LPTSTR lpDisplayName;
+} QUERY_SERVICE_CONFIG, *LPQUERY_SERVICE_CONFIG;
+
+typedef struct _QUERY_SERVICE_LOCK_STATUS {
+ DWORD fIsLocked;
+ LPTSTR lpLockOwner;
+ DWORD dwLockDuration;
+} QUERY_SERVICE_LOCK_STATUS, *LPQUERY_SERVICE_LOCK_STATUS ;
+
+typedef struct _RASAMB {
+ DWORD dwSize;
+ DWORD dwError;
+ TCHAR szNetBiosError[ NETBIOS_NAME_LEN + 1 ];
+ BYTE bLana;
+} RASAMB;
+
+typedef struct _RASCONN {
+ DWORD dwSize;
+ HRASCONN hrasconn;
+ TCHAR szEntryName[RAS_MaxEntryName + 1];
+
+ CHAR szDeviceType[ RAS_MaxDeviceType + 1 ];
+ CHAR szDeviceName[ RAS_MaxDeviceName + 1 ];
+} RASCONN ;
+
+typedef struct _RASCONNSTATUS {
+ DWORD dwSize;
+ RASCONNSTATE rasconnstate;
+ DWORD dwError;
+ TCHAR szDeviceType[RAS_MaxDeviceType + 1];
+ TCHAR szDeviceName[RAS_MaxDeviceName + 1];
+} RASCONNSTATUS;
+
+typedef struct _RASDIALEXTENSIONS {
+ DWORD dwSize;
+ DWORD dwfOptions;
+ HWND hwndParent;
+ DWORD reserved;
+} RASDIALEXTENSIONS;
+
+typedef struct _RASDIALPARAMS {
+ 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 {
+ DWORD dwSize;
+ TCHAR szEntryName[RAS_MaxEntryName + 1];
+}RASENTRYNAME;
+
+typedef struct _RASPPPIP {
+ DWORD dwSize;
+ DWORD dwError;
+ TCHAR szIpAddress[ RAS_MaxIpAddress + 1 ];
+} RASPPPIP;
+
+typedef struct _RASPPPIPX {
+ DWORD dwSize;
+ DWORD dwError;
+ TCHAR szIpxAddress[ RAS_MaxIpxAddress + 1 ];
+} RASPPPIPX;
+
+typedef struct _RASPPPNBF {
+ DWORD dwSize;
+ DWORD dwError;
+ DWORD dwNetBiosError;
+ TCHAR szNetBiosError[ NETBIOS_NAME_LEN + 1 ];
+ TCHAR szWorkstationName[ NETBIOS_NAME_LEN + 1 ];
+ BYTE bLana;
+} RASPPPNBF;
+
+typedef struct _RASTERIZER_STATUS {
+ short nSize;
+ short wFlags;
+ short nLanguageID;
+} RASTERIZER_STATUS, *LPRASTERIZER_STATUS;
+
+typedef struct _REASSIGN_BLOCKS {
+ WORD Reserved;
+ WORD Count;
+ DWORD BlockNumber[1];
+} REASSIGN_BLOCKS ;
+
+typedef struct _REMOTE_NAME_INFO {
+ LPTSTR lpUniversalName;
+ LPTSTR lpConnectionName;
+ LPTSTR lpRemainingPath;
+} REMOTE_NAME_INFO;
+
+/*
+ TODO: OLE
+typedef struct _reobject {
+ DWORD cbStruct;
+ LONG cp;
+ CLSID clsid;
+ LPOLEOBJECT poleobj;
+ LPSTORAGE pstg;
+ LPOLECLIENTSITE polesite;
+ SIZEL sizel;
+ DWORD dvaspect;
+ DWORD dwFlags;
+ DWORD dwUser;
+} REOBJECT;
+*/
+
+typedef struct _repastespecial {
+ DWORD dwAspect;
+ DWORD dwParam;
+} REPASTESPECIAL;
+
+typedef struct _reqresize {
+ NMHDR nmhdr;
+ RECT rc;
+} REQRESIZE;
+
+typedef struct _RGNDATAHEADER {
+ DWORD dwSize;
+ DWORD iType;
+ DWORD nCount;
+ DWORD nRgnSize;
+ RECT rcBound;
+} RGNDATAHEADER;
+
+typedef struct _RGNDATA {
+ RGNDATAHEADER rdh;
+ char Buffer[1];
+} RGNDATA, *LPRGNDATA;
+
+typedef struct tagSCROLLINFO {
+ UINT cbSize;
+ UINT fMask;
+ int nMin;
+ int nMax;
+ UINT nPage;
+ int nPos;
+ int nTrackPos;
+} SCROLLINFO, *LPSCROLLINFO;
+typedef SCROLLINFO const *LPCSCROLLINFO;
+
+typedef struct _SECURITY_ATTRIBUTES {
+ DWORD nLength;
+ LPVOID lpSecurityDescriptor;
+ WINBOOL bInheritHandle;
+} SECURITY_ATTRIBUTES, *LPSECURITY_ATTRIBUTES;
+
+typedef DWORD SECURITY_INFORMATION, *PSECURITY_INFORMATION;
+
+typedef struct _selchange {
+ NMHDR nmhdr;
+ CHARRANGE chrg;
+ WORD seltyp;
+} SELCHANGE;
+
+typedef struct tagSERIALKEYS {
+ DWORD cbSize;
+ DWORD dwFlags;
+ LPSTR lpszActivePort;
+ LPSTR lpszPort;
+ DWORD iBaudRate;
+ DWORD iPortState;
+} SERIALKEYS, * LPSERIALKEYS;
+
+typedef struct _SERVICE_TABLE_ENTRY {
+ LPTSTR lpServiceName;
+ LPSERVICE_MAIN_FUNCTION lpServiceProc;
+} SERVICE_TABLE_ENTRY, *LPSERVICE_TABLE_ENTRY;
+
+typedef struct _SERVICE_TYPE_VALUE_ABS {
+ DWORD dwNameSpace;
+ DWORD dwValueType;
+ DWORD dwValueSize;
+ LPTSTR lpValueName;
+ PVOID lpValue;
+} SERVICE_TYPE_VALUE_ABS;
+
+typedef struct _SERVICE_TYPE_INFO_ABS {
+ LPTSTR lpTypeName;
+ DWORD dwValueCount;
+ SERVICE_TYPE_VALUE_ABS Values[1];
+} SERVICE_TYPE_INFO_ABS;
+
+typedef struct _SESSION_BUFFER {
+ UCHAR lsn;
+ UCHAR state;
+ UCHAR local_name[NCBNAMSZ];
+ UCHAR remote_name[NCBNAMSZ];
+ UCHAR rcvs_outstanding;
+ UCHAR sends_outstanding;
+} SESSION_BUFFER;
+
+typedef struct _SESSION_HEADER {
+ UCHAR sess_name;
+ UCHAR num_sess;
+ UCHAR rcv_dg_outstanding;
+ UCHAR rcv_any_outstanding;
+} SESSION_HEADER;
+
+typedef struct _SET_PARTITION_INFORMATION {
+ BYTE PartitionType;
+} SET_PARTITION_INFORMATION ;
+
+typedef enum tagSHCONTF {
+ SHCONTF_FOLDERS = 32,
+ SHCONTF_NONFOLDERS = 64,
+ SHCONTF_INCLUDEHIDDEN = 128,
+} SHCONTF;
+
+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,
+} SHGNO;
+
+typedef struct _SHNAMEMAPPING {
+ LPSTR pszOldPath;
+ LPSTR pszNewPath;
+ int cchOldPath;
+ int cchNewPath;
+} SHNAMEMAPPING, *LPSHNAMEMAPPING;
+
+typedef struct _SID_AND_ATTRIBUTES {
+ PSID Sid;
+ DWORD Attributes;
+} SID_AND_ATTRIBUTES ;
+
+typedef SID_AND_ATTRIBUTES SID_AND_ATTRIBUTES_ARRAY[ANYSIZE_ARRAY];
+typedef SID_AND_ATTRIBUTES_ARRAY *PSID_AND_ATTRIBUTES_ARRAY;
+
+typedef struct _SINGLE_LIST_ENTRY {
+ struct _SINGLE_LIST_ENTRY *Next;
+} SINGLE_LIST_ENTRY, *PSINGLE_LIST_ENTRY;
+
+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 _STARTUPINFO {
+ DWORD cb;
+ LPTSTR lpReserved;
+ LPTSTR lpDesktop;
+ LPTSTR lpTitle;
+ DWORD dwX;
+ DWORD dwY;
+ DWORD dwXSize;
+ DWORD dwYSize;
+ DWORD dwXCountChars;
+ DWORD dwYCountChars;
+ DWORD dwFillAttribute;
+ DWORD dwFlags;
+ WORD wShowWindow;
+ WORD cbReserved2;
+ LPBYTE lpReserved2;
+ HANDLE hStdInput;
+ HANDLE hStdOutput;
+ HANDLE hStdError;
+} STARTUPINFO, *LPSTARTUPINFO;
+
+typedef struct tagSTICKYKEYS {
+ DWORD cbSize;
+ DWORD dwFlags;
+} STICKYKEYS, *LPSTICKYKEYS;
+
+typedef struct _STRRET {
+ UINT uType;
+ union
+ {
+ LPWSTR pOleStr;
+ UINT uOffset;
+ char cStr[MAX_PATH];
+ } DUMMYUNIONNAME;
+} STRRET, *LPSTRRET;
+
+typedef struct _tagSTYLEBUF {
+ DWORD dwStyle;
+ CHAR szDescription[32];
+} STYLEBUF, *LPSTYLEBUF;
+
+typedef struct tagSTYLESTRUCT {
+ DWORD styleOld;
+ DWORD styleNew;
+} STYLESTRUCT, * LPSTYLESTRUCT;
+
+typedef struct _SYSTEM_AUDIT_ACE {
+ ACE_HEADER Header;
+ ACCESS_MASK Mask;
+ DWORD SidStart;
+} SYSTEM_AUDIT_ACE;
+
+typedef struct _SYSTEM_INFO
+{
+ union
+ {
+ DWORD dwOemId;
+ struct
+ {
+ WORD wProcessorArchitecture;
+ WORD wReserved;
+ }
+ s;
+ }
+ u;
+ DWORD dwPageSize;
+ LPVOID lpMinimumApplicationAddress;
+ LPVOID lpMaximumApplicationAddress;
+ DWORD dwActiveProcessorMask;
+ DWORD dwNumberOfProcessors;
+ DWORD dwProcessorType;
+ DWORD dwAllocationGranularity;
+ WORD wProcessorLevel;
+ WORD wProcessorRevision;
+} SYSTEM_INFO, *LPSYSTEM_INFO;
+
+typedef struct _SYSTEM_POWER_STATUS {
+ BYTE ACLineStatus;
+ BYTE BatteryFlag;
+ BYTE BatteryLifePercent;
+ BYTE Reserved1;
+ DWORD BatteryLifeTime;
+ DWORD BatteryFullLifeTime;
+} SYSTEM_POWER_STATUS;
+typedef struct SYSTEM_POWER_STATUS *LPSYSTEM_POWER_STATUS;
+
+typedef struct _TAPE_ERASE {
+ ULONG Type;
+} TAPE_ERASE;
+
+typedef struct _TAPE_GET_DRIVE_PARAMETERS {
+ BOOLEAN ECC;
+ BOOLEAN Compression;
+ BOOLEAN DataPadding;
+ BOOLEAN ReportSetmarks;
+ ULONG DefaultBlockSize;
+ ULONG MaximumBlockSize;
+ ULONG MinimumBlockSize;
+ ULONG MaximumPartitionCount;
+ ULONG FeaturesLow;
+ ULONG FeaturesHigh;
+ ULONG EOTWarningZoneSize;
+} TAPE_GET_DRIVE_PARAMETERS;
+
+typedef struct _TAPE_GET_MEDIA_PARAMETERS {
+ LARGE_INTEGER Capacity;
+ LARGE_INTEGER Remaining;
+ DWORD BlockSize;
+ DWORD PartitionCount;
+ BOOLEAN WriteProtected;
+} TAPE_GET_MEDIA_PARAMETERS;
+
+typedef struct _TAPE_GET_POSITION {
+ ULONG Type;
+ ULONG Partition;
+ ULONG OffsetLow;
+ ULONG OffsetHigh;
+} TAPE_GET_POSITION;
+
+typedef struct _TAPE_PREPARE {
+ ULONG Operation;
+} TAPE_PREPARE;
+
+typedef struct _TAPE_SET_DRIVE_PARAMETERS {
+ BOOLEAN ECC;
+ BOOLEAN Compression;
+ BOOLEAN DataPadding;
+ BOOLEAN ReportSetmarks;
+ ULONG EOTWarningZoneSize;
+} TAPE_SET_DRIVE_PARAMETERS;
+
+typedef struct _TAPE_SET_MEDIA_PARAMETERS {
+ ULONG BlockSize;
+} TAPE_SET_MEDIA_PARAMETERS;
+
+typedef struct _TAPE_SET_POSITION {
+ ULONG Method;
+ ULONG Partition;
+ ULONG OffsetLow;
+ ULONG OffsetHigh;
+} TAPE_SET_POSITION;
+
+typedef struct _TAPE_WRITE_MARKS {
+ ULONG Type;
+ ULONG Count;
+} TAPE_WRITE_MARKS;
+
+typedef struct {
+ HINSTANCE hInst;
+ UINT nID;
+} TBADDBITMAP, *LPTBADDBITMAP;
+
+typedef struct _TBBUTTON {
+ int iBitmap;
+ int idCommand;
+ BYTE fsState;
+ BYTE fsStyle;
+ DWORD dwData;
+ int iString;
+} TBBUTTON, * PTBBUTTON, * LPTBBUTTON;
+typedef const TBBUTTON * LPCTBBUTTON;
+
+typedef struct {
+ NMHDR hdr;
+ int iItem;
+ TBBUTTON tbButton;
+ int cchText;
+ LPTSTR pszText;
+} TBNOTIFY, *LPTBNOTIFY;
+
+typedef struct {
+ HKEY hkr;
+ LPCTSTR pszSubKey;
+ LPCTSTR pszValueName;
+} TBSAVEPARAMS;
+
+typedef struct _TC_HITTESTINFO {
+ POINT pt;
+ UINT flags;
+} TC_HITTESTINFO;
+
+typedef struct _TC_ITEM {
+ UINT mask;
+ UINT lpReserved1;
+ UINT lpReserved2;
+ LPTSTR pszText;
+ int cchTextMax;
+ int iImage;
+ LPARAM lParam;
+} TC_ITEM;
+
+typedef struct _TC_ITEMHEADER {
+ UINT mask;
+ UINT lpReserved1;
+ UINT lpReserved2;
+ LPTSTR pszText;
+ int cchTextMax;
+ int iImage;
+} TC_ITEMHEADER;
+
+typedef struct _TC_KEYDOWN {
+ NMHDR hdr;
+ WORD wVKey;
+ UINT flags;
+} TC_KEYDOWN;
+
+typedef struct _textrange {
+ CHARRANGE chrg;
+ LPSTR lpstrText;
+} TEXTRANGE;
+
+typedef struct _TIME_ZONE_INFORMATION {
+ LONG Bias;
+ WCHAR StandardName[ 32 ];
+ SYSTEMTIME StandardDate;
+ LONG StandardBias;
+ WCHAR DaylightName[ 32 ];
+ SYSTEMTIME DaylightDate;
+ LONG DaylightBias;
+} TIME_ZONE_INFORMATION, *LPTIME_ZONE_INFORMATION;
+
+typedef struct tagTOGGLEKEYS {
+ DWORD cbSize;
+ DWORD dwFlags;
+} TOGGLEKEYS;
+
+typedef struct _TOKEN_SOURCE {
+ CHAR SourceName[8];
+ LUID SourceIdentifier;
+} TOKEN_SOURCE;
+
+typedef struct _TOKEN_CONTROL {
+ LUID TokenId;
+ LUID AuthenticationId;
+ LUID ModifiedId;
+ TOKEN_SOURCE TokenSource;
+} TOKEN_CONTROL ;
+
+typedef struct _TOKEN_DEFAULT_DACL {
+ PACL DefaultDacl;
+} TOKEN_DEFAULT_DACL;
+
+typedef struct _TOKEN_GROUPS {
+ DWORD GroupCount;
+ SID_AND_ATTRIBUTES Groups[ANYSIZE_ARRAY];
+} TOKEN_GROUPS, *PTOKEN_GROUPS, *LPTOKEN_GROUPS;
+
+typedef struct _TOKEN_OWNER {
+ PSID Owner;
+} TOKEN_OWNER;
+
+typedef struct _TOKEN_PRIMARY_GROUP {
+ PSID PrimaryGroup;
+} TOKEN_PRIMARY_GROUP;
+
+typedef struct _TOKEN_PRIVILEGES {
+ DWORD PrivilegeCount;
+ LUID_AND_ATTRIBUTES Privileges[ANYSIZE_ARRAY];
+} TOKEN_PRIVILEGES, *PTOKEN_PRIVILEGES, *LPTOKEN_PRIVILEGES;
+
+typedef struct _TOKEN_STATISTICS {
+ LUID TokenId;
+ LUID AuthenticationId;
+ LARGE_INTEGER ExpirationTime;
+ TOKEN_TYPE TokenType;
+ SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
+ DWORD DynamicCharged;
+ DWORD DynamicAvailable;
+ DWORD GroupCount;
+ DWORD PrivilegeCount;
+ LUID ModifiedId;
+} TOKEN_STATISTICS;
+
+typedef struct _TOKEN_USER {
+ SID_AND_ATTRIBUTES User;
+} TOKEN_USER;
+
+typedef struct {
+ UINT cbSize;
+ UINT uFlags;
+ HWND hwnd;
+ UINT uId;
+ RECT rect;
+ HINSTANCE hinst;
+ LPTSTR lpszText;
+} TOOLINFO, *PTOOLINFO, *LPTOOLINFO;
+
+typedef struct {
+ NMHDR hdr;
+ LPTSTR lpszText;
+ char szText[80];
+ HINSTANCE hinst;
+ UINT uFlags;
+} TOOLTIPTEXT, *LPTOOLTIPTEXT;
+
+typedef struct tagTPMPARAMS {
+ UINT cbSize;
+ RECT rcExclude;
+} TPMPARAMS, *LPTPMPARAMS;
+
+typedef struct _TRANSMIT_FILE_BUFFERS {
+ PVOID Head;
+ DWORD HeadLength;
+ PVOID Tail;
+ DWORD TailLength;
+} TRANSMIT_FILE_BUFFERS;
+
+typedef struct _TT_HITTESTINFO {
+ HWND hwnd;
+ POINT pt;
+ TOOLINFO ti;
+} TTHITTESTINFO, * LPHITTESTINFO;
+
+typedef struct tagTTPOLYCURVE {
+ WORD wType;
+ WORD cpfx;
+ POINTFX apfx[1];
+} TTPOLYCURVE, * LPTTPOLYCURVE;
+
+typedef struct _TTPOLYGONHEADER {
+ DWORD cb;
+ DWORD dwType;
+ POINTFX pfxStart;
+} TTPOLYGONHEADER, * LPTTPOLYGONHEADER;
+
+typedef struct _TV_DISPINFO {
+ NMHDR hdr;
+ TV_ITEM item;
+} TV_DISPINFO;
+
+typedef struct _TVHITTESTINFO {
+ POINT pt;
+ UINT flags;
+ HTREEITEM hItem;
+} TV_HITTESTINFO, *LPTV_HITTESTINFO;
+
+typedef struct _TV_INSERTSTRUCT {
+ HTREEITEM hParent;
+ HTREEITEM hInsertAfter;
+ TV_ITEM item;
+} TV_INSERTSTRUCT, *LPTV_INSERTSTRUCT;
+
+typedef struct _TV_KEYDOWN {
+ NMHDR hdr;
+ WORD wVKey;
+ UINT flags;
+} TV_KEYDOWN;
+
+typedef struct _TV_SORTCB {
+ HTREEITEM hParent;
+ PFNTVCOMPARE lpfnCompare;
+ LPARAM lParam;
+} TV_SORTCB, *LPTV_SORTCB;
+
+typedef struct {
+ UINT nSec;
+ UINT nInc;
+} UDACCEL;
+
+typedef struct _ULARGE_INTEGER {
+ DWORD LowPart;
+ DWORD HighPart;
+} ULARGE_INTEGER, *PULARGE_INTEGER;
+
+typedef struct _UNIVERSAL_NAME_INFO {
+ LPTSTR lpUniversalName;
+} UNIVERSAL_NAME_INFO;
+
+typedef struct tagUSEROBJECTFLAGS {
+ WINBOOL fInherit;
+ WINBOOL fReserved;
+ DWORD dwFlags;
+} USEROBJECTFLAGS;
+
+typedef struct value_ent {
+ LPTSTR ve_valuename;
+ DWORD ve_valuelen;
+ DWORD ve_valueptr;
+ DWORD ve_type;
+} VALENT, *PVALENT;
+
+typedef struct _VERIFY_INFORMATION {
+ LARGE_INTEGER StartingOffset;
+ DWORD Length;
+} VERIFY_INFORMATION ;
+
+typedef struct _VS_FIXEDFILEINFO {
+ DWORD dwSignature;
+ DWORD dwStrucVersion;
+ DWORD dwFileVersionMS;
+ DWORD dwFileVersionLS;
+ DWORD dwProductVersionMS;
+ DWORD dwProductVersionLS;
+ DWORD dwFileFlagsMask;
+ DWORD dwFileFlags;
+ DWORD dwFileOS;
+ DWORD dwFileType;
+ DWORD dwFileSubtype;
+ DWORD dwFileDateMS;
+ DWORD dwFileDateLS;
+} VS_FIXEDFILEINFO;
+
+typedef struct _WIN32_FIND_DATA {
+ DWORD dwFileAttributes;
+ FILETIME ftCreationTime;
+ FILETIME ftLastAccessTime;
+ FILETIME ftLastWriteTime;
+ DWORD nFileSizeHigh;
+ DWORD nFileSizeLow;
+ DWORD dwReserved0;
+ DWORD dwReserved1;
+ TCHAR cFileName[ MAX_PATH ];
+ TCHAR cAlternateFileName[ 14 ];
+} WIN32_FIND_DATA, *LPWIN32_FIND_DATA, *PWIN32_FIND_DATA;
+
+typedef struct _WIN32_STREAM_ID {
+ DWORD dwStreamId;
+ DWORD dwStreamAttributes;
+ LARGE_INTEGER Size;
+ DWORD dwStreamNameSize;
+ WCHAR *cStreamName ;
+} WIN32_STREAM_ID;
+
+typedef struct _WINDOWPLACEMENT {
+ UINT length;
+ UINT flags;
+ UINT showCmd;
+ POINT ptMinPosition;
+ POINT ptMaxPosition;
+ RECT rcNormalPosition;
+} WINDOWPLACEMENT;
+
+typedef struct _WNDCLASS {
+ UINT style;
+ WNDPROC lpfnWndProc;
+ int cbClsExtra;
+ int cbWndExtra;
+ HANDLE hInstance;
+ HICON hIcon;
+ HCURSOR hCursor;
+ HBRUSH hbrBackground;
+ LPCTSTR lpszMenuName;
+ LPCTSTR lpszClassName;
+} WNDCLASS, *LPWNDCLASS;
+
+typedef struct _WNDCLASSEX {
+ UINT cbSize;
+ UINT style;
+ WNDPROC lpfnWndProc;
+ int cbClsExtra;
+ int cbWndExtra;
+ HANDLE hInstance;
+ HICON hIcon;
+ HCURSOR hCursor;
+ HBRUSH hbrBackground;
+ LPCTSTR lpszMenuName;
+ LPCTSTR lpszClassName;
+ HICON hIconSm;
+} WNDCLASSEX, *LPWNDCLASSEX;
+
+typedef struct _CONNECTDLGSTRUCT {
+ DWORD cbStructure;
+ HWND hwndOwner;
+ LPNETRESOURCE lpConnRes;
+ DWORD dwFlags;
+ DWORD dwDevNum;
+} CONNECTDLGSTRUCT, *LPCONNECTDLGSTRUCT;
+
+typedef struct _DISCDLGSTRUCT {
+ DWORD cbStructure;
+ HWND hwndOwner;
+ LPTSTR lpLocalName;
+ LPTSTR lpRemoteName;
+ DWORD dwFlags;
+} DISCDLGSTRUCT, *LPDISCDLGSTRUCT;
+
+typedef struct _NETINFOSTRUCT{
+ DWORD cbStructure;
+ DWORD dwProviderVersion;
+ DWORD dwStatus;
+ DWORD dwCharacteristics;
+ DWORD dwHandle;
+ WORD wNetType;
+ DWORD dwPrinters;
+ DWORD dwDrives;
+} NETINFOSTRUCT, *LPNETINFOSTRUCT;
+
+typedef struct _NETCONNECTINFOSTRUCT{
+ DWORD cbStructure;
+ DWORD dwFlags;
+ DWORD dwSpeed;
+ DWORD dwDelay;
+ DWORD dwOptDataSize;
+} NETCONNECTINFOSTRUCT, *LPNETCONNECTINFOSTRUCT;
+
+typedef int CALLBACK (*ENUMMETAFILEPROC) (HDC, HANDLETABLE,
+ METARECORD, int, LPARAM);
+typedef int CALLBACK (*ENHMETAFILEPROC) (HDC, HANDLETABLE,
+ ENHMETARECORD, int, LPARAM);
+
+typedef int CALLBACK (*ENUMFONTSPROC) (LPLOGFONT, LPTEXTMETRIC, DWORD, LPARAM);
+typedef int CALLBACK (*FONTENUMPROC) (ENUMLOGFONT *, NEWTEXTMETRIC *,
+ int, LPARAM);
+typedef int CALLBACK (*FONTENUMEXPROC) (ENUMLOGFONTEX *, NEWTEXTMETRICEX *,
+ int, LPARAM);
+
+typedef VOID CALLBACK (*LPOVERLAPPED_COMPLETION_ROUTINE) (DWORD, DWORD,
+ LPOVERLAPPED);
+
+/*
+ Structures for the extensions to OpenGL
+ */
+typedef struct _POINTFLOAT
+{
+ FLOAT x;
+ FLOAT y;
+} POINTFLOAT, *PPOINTFLOAT;
+
+typedef struct _GLYPHMETRICSFLOAT
+{
+ FLOAT gmfBlackBoxX;
+ FLOAT gmfBlackBoxY;
+ POINTFLOAT gmfptGlyphOrigin;
+ FLOAT gmfCellIncX;
+ FLOAT gmfCellIncY;
+} GLYPHMETRICSFLOAT, *PGLYPHMETRICSFLOAT, *LPGLYPHMETRICSFLOAT;
+
+typedef struct tagLAYERPLANEDESCRIPTOR
+{
+ WORD nSize;
+ WORD nVersion;
+ DWORD dwFlags;
+ BYTE iPixelType;
+ BYTE cColorBits;
+ BYTE cRedBits;
+ BYTE cRedShift;
+ BYTE cGreenBits;
+ BYTE cGreenShift;
+ BYTE cBlueBits;
+ BYTE cBlueShift;
+ BYTE cAlphaBits;
+ BYTE cAlphaShift;
+ BYTE cAccumBits;
+ BYTE cAccumRedBits;
+ BYTE cAccumGreenBits;
+ BYTE cAccumBlueBits;
+ BYTE cAccumAlphaBits;
+ BYTE cDepthBits;
+ BYTE cStencilBits;
+ BYTE cAuxBuffers;
+ BYTE iLayerPlane;
+ BYTE bReserved;
+ COLORREF crTransparent;
+} LAYERPLANEDESCRIPTOR, *PLAYERPLANEDESCRIPTOR, *LPLAYERPLANEDESCRIPTOR;
+
+typedef struct tagPIXELFORMATDESCRIPTOR
+{
+ WORD nSize;
+ WORD nVersion;
+ DWORD dwFlags;
+ BYTE iPixelType;
+ BYTE cColorBits;
+ BYTE cRedBits;
+ BYTE cRedShift;
+ BYTE cGreenBits;
+ BYTE cGreenShift;
+ BYTE cBlueBits;
+ BYTE cBlueShift;
+ BYTE cAlphaBits;
+ BYTE cAlphaShift;
+ BYTE cAccumBits;
+ BYTE cAccumRedBits;
+ BYTE cAccumGreenBits;
+ BYTE cAccumBlueBits;
+ BYTE cAccumAlphaBits;
+ BYTE cDepthBits;
+ BYTE cStencilBits;
+ BYTE cAuxBuffers;
+ BYTE iLayerType;
+ BYTE bReserved;
+ DWORD dwLayerMask;
+ DWORD dwVisibleMask;
+ DWORD dwDamageMask;
+} PIXELFORMATDESCRIPTOR, *PPIXELFORMATDESCRIPTOR, *LPPIXELFORMATDESCRIPTOR;
+
+typedef struct
+{
+ LPWSTR usri2_name;
+ LPWSTR usri2_password;
+ DWORD usri2_password_age;
+ DWORD usri2_priv;
+ LPWSTR usri2_home_dir;
+ LPWSTR usri2_comment;
+ DWORD usri2_flags;
+ LPWSTR usri2_script_path;
+ DWORD usri2_auth_flags;
+ LPWSTR usri2_full_name;
+ LPWSTR usri2_usr_comment;
+ LPWSTR usri2_parms;
+ LPWSTR usri2_workstations;
+ DWORD usri2_last_logon;
+ DWORD usri2_last_logoff;
+ DWORD usri2_acct_expires;
+ DWORD usri2_max_storage;
+ DWORD usri2_units_per_week;
+ PBYTE usri2_logon_hours;
+ DWORD usri2_bad_pw_count;
+ DWORD usri2_num_logons;
+ LPWSTR usri2_logon_server;
+ DWORD usri2_country_code;
+ DWORD usri2_code_page;
+} USER_INFO_2, *PUSER_INFO_2, *LPUSER_INFO_2;
+
+typedef struct
+{
+ LPWSTR usri0_name;
+} USER_INFO_0, *PUSER_INFO_0, *LPUSER_INFO_0;
+
+typedef struct
+{
+ LPWSTR usri3_name;
+ LPWSTR usri3_password;
+ DWORD usri3_password_age;
+ DWORD usri3_priv;
+ LPWSTR usri3_home_dir;
+ LPWSTR usri3_comment;
+ DWORD usri3_flags;
+ LPWSTR usri3_script_path;
+ DWORD usri3_auth_flags;
+ LPWSTR usri3_full_name;
+ LPWSTR usri3_usr_comment;
+ LPWSTR usri3_parms;
+ LPWSTR usri3_workstations;
+ DWORD usri3_last_logon;
+ DWORD usri3_last_logoff;
+ DWORD usri3_acct_expires;
+ DWORD usri3_max_storage;
+ DWORD usri3_units_per_week;
+ PBYTE usri3_logon_hours;
+ DWORD usri3_bad_pw_count;
+ DWORD usri3_num_logons;
+ LPWSTR usri3_logon_server;
+ DWORD usri3_country_code;
+ DWORD usri3_code_page;
+ DWORD usri3_user_id;
+ DWORD usri3_primary_group_id;
+ LPWSTR usri3_profile;
+ LPWSTR usri3_home_dir_drive;
+ DWORD usri3_password_expired;
+} USER_INFO_3, *PUSER_INFO_3, *LPUSER_INFO_3;
+
+typedef struct
+{
+ LPWSTR grpi2_name;
+ LPWSTR grpi2_comment;
+ DWORD grpi2_group_id;
+ DWORD grpi2_attributes;
+} GROUP_INFO_2, *PGROUP_INFO_2;
+
+typedef struct
+{
+ LPWSTR lgrpi0_name;
+} LOCALGROUP_INFO_0, *PLOCALGROUP_INFO_0, *LPLOCALGROUP_INFO_0;
+
+/* PE executable header. */
+
+typedef struct
+{
+ WORD e_magic; /* Magic number, 0x5a4d */
+ WORD e_cblp; /* Bytes on last page of file, 0x90 */
+ WORD e_cp; /* Pages in file, 0x3 */
+ WORD e_crlc; /* Relocations, 0x0 */
+ WORD e_cparhdr; /* Size of header in paragraphs, 0x4 */
+ WORD e_minalloc; /* Minimum extra paragraphs needed, 0x0 */
+ WORD e_maxalloc; /* Maximum extra paragraphs needed, 0xFFFF */
+ WORD e_ss; /* Initial (relative) SS value, 0x0 */
+ WORD e_sp; /* Initial SP value, 0xb8 */
+ WORD e_csum; /* Checksum, 0x0 */
+ WORD e_ip; /* Initial IP value, 0x0 */
+ WORD e_cs; /* Initial (relative) CS value, 0x0 */
+ WORD e_lfarlc; /* File address of relocation table, 0x40 */
+ WORD e_ovno; /* Overlay number, 0x0 */
+ WORD e_res[4]; /* Reserved words, all 0x0 */
+ WORD e_oemid; /* OEM identifier (for e_oeminfo), 0x0 */
+ WORD e_oeminfo; /* OEM information; e_oemid specific, 0x0 */
+ WORD e_res2[10]; /* Reserved words, all 0x0 */
+ LONG e_lfanew; /* File address of new exe header, 0x80 */
+ /* We leave out the next two fields, since they aren't in the
+ Windows header file. */
+ /* DWORD dos_message[16]; * text which always follows dos header */
+ /* DWORD nt_signature; * required NT signature, 0x4550 */
+} IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* _GNU_H_WINDOWS32_STRUCTURES */
+
--- /dev/null
+/*
+ * Added wide character type wchar_t, june 1998 -- Boudewijn Dekker
+ */
+#ifndef _LINUX_TYPES_H
+#define _LINUX_TYPES_H
+
+#ifndef NULL
+# define NULL ((void *) 0)
+#endif
+
+
+#ifndef _I386_TYPES_H
+#define _I386_TYPES_H
+
+/*
+ * __xx is ok: it doesn't pollute the POSIX namespace. Use these in the
+ * header files exported to user space
+ */
+
+typedef __signed__ char __s8;
+typedef unsigned char __u8;
+
+typedef __signed__ short __s16;
+typedef unsigned short __u16;
+
+typedef __signed__ int __s32;
+typedef unsigned int __u32;
+
+#if defined(__GNUC__) && !defined(__STRICT_ANSI__)
+typedef __signed__ long long __s64;
+typedef unsigned long long __u64;
+#endif
+
+/*
+ * These aren't exported outside the kernel to avoid name space clashes
+ */
+#ifdef __KERNEL__
+
+typedef signed char s8;
+typedef unsigned char u8;
+
+typedef signed short s16;
+typedef unsigned short u16;
+
+typedef signed int s32;
+typedef unsigned int u32;
+
+typedef signed long long s64;
+typedef unsigned long long u64;
+
+#endif /* __KERNEL__ */
+
+#endif
+
+
+typedef unsigned int size_t;
+typedef size_t __kernel_size_t;
+typedef unsigned short wchar_t;
+
+
+#endif /* _LINUX_TYPES_H */
--- /dev/null
+/*
+ UnicodeFunctions.h
+
+ Declarations for all the Windows32 API Unicode Functions
+
+ Copyright (C) 1996 Free Software Foundation, Inc.
+
+ Author: Scott Christley <scottc@net-community.com>
+ Date: 1996
+
+ This file is part of the Windows32 API Library.
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Library General Public
+ License as published by the Free Software Foundation; either
+ version 2 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
+ Library General Public License for more details.
+
+ If you are interested in a warranty or support for this source code,
+ contact Scott Christley <scottc@net-community.com> for more information.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this library; see the file COPYING.LIB.
+ If not, write to the Free Software Foundation,
+ 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+*/
+
+#ifndef _GNU_H_WINDOWS32_UNICODEFUNCTIONS
+#define _GNU_H_WINDOWS32_UNICODEFUNCTIONS
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+WINBOOL
+STDCALL
+GetBinaryTypeW(
+ LPCWSTR lpApplicationName,
+ LPDWORD lpBinaryType
+ );
+
+DWORD
+STDCALL
+GetShortPathNameW(
+ LPCWSTR lpszLongPath,
+ LPWSTR lpszShortPath,
+ DWORD cchBuffer
+ );
+
+LPWSTR
+STDCALL
+GetEnvironmentStringsW(
+ VOID
+ );
+
+WINBOOL
+STDCALL
+FreeEnvironmentStringsW(
+ LPWSTR
+ );
+
+DWORD
+STDCALL
+FormatMessageW(
+ DWORD dwFlags,
+ LPCVOID lpSource,
+ DWORD dwMessageId,
+ DWORD dwLanguageId,
+ LPWSTR lpBuffer,
+ DWORD nSize,
+ va_list *Arguments
+ );
+
+HANDLE
+STDCALL
+CreateMailslotW(
+ LPCWSTR lpName,
+ DWORD nMaxMessageSize,
+ DWORD lReadTimeout,
+ LPSECURITY_ATTRIBUTES lpSecurityAttributes
+ );
+
+int
+STDCALL
+lstrcmpW(
+ LPCWSTR lpString1,
+ LPCWSTR lpString2
+ );
+
+int
+STDCALL
+lstrcmpiW(
+ LPCWSTR lpString1,
+ LPCWSTR lpString2
+ );
+
+LPWSTR
+STDCALL
+lstrcpynW(
+ LPWSTR lpString1,
+ LPCWSTR lpString2,
+ int iMaxLength
+ );
+
+LPWSTR
+STDCALL
+lstrcpyW(
+ LPWSTR lpString1,
+ LPCWSTR lpString2
+ );
+
+LPWSTR
+STDCALL
+lstrcatW(
+ LPWSTR lpString1,
+ LPCWSTR lpString2
+ );
+
+int
+STDCALL
+lstrlenW(
+ LPCWSTR lpString
+ );
+
+HANDLE
+STDCALL
+CreateMutexW(
+ LPSECURITY_ATTRIBUTES lpMutexAttributes,
+ WINBOOL bInitialOwner,
+ LPCWSTR lpName
+ );
+
+HANDLE
+STDCALL
+OpenMutexW(
+ DWORD dwDesiredAccess,
+ WINBOOL bInheritHandle,
+ LPCWSTR lpName
+ );
+
+HANDLE
+STDCALL
+CreateEventW(
+ LPSECURITY_ATTRIBUTES lpEventAttributes,
+ WINBOOL bManualReset,
+ WINBOOL bInitialState,
+ LPCWSTR lpName
+ );
+
+HANDLE
+STDCALL
+OpenEventW(
+ DWORD dwDesiredAccess,
+ WINBOOL bInheritHandle,
+ LPCWSTR lpName
+ );
+
+HANDLE
+STDCALL
+CreateSemaphoreW(
+ LPSECURITY_ATTRIBUTES lpSemaphoreAttributes,
+ LONG lInitialCount,
+ LONG lMaximumCount,
+ LPCWSTR lpName
+ );
+
+HANDLE
+STDCALL
+OpenSemaphoreW(
+ DWORD dwDesiredAccess,
+ WINBOOL bInheritHandle,
+ LPCWSTR lpName
+ );
+
+HANDLE
+STDCALL
+CreateFileMappingW(
+ HANDLE hFile,
+ LPSECURITY_ATTRIBUTES lpFileMappingAttributes,
+ DWORD flProtect,
+ DWORD dwMaximumSizeHigh,
+ DWORD dwMaximumSizeLow,
+ LPCWSTR lpName
+ );
+
+HANDLE
+STDCALL
+OpenFileMappingW(
+ DWORD dwDesiredAccess,
+ WINBOOL bInheritHandle,
+ LPCWSTR lpName
+ );
+
+DWORD
+STDCALL
+GetLogicalDriveStringsW(
+ DWORD nBufferLength,
+ LPWSTR lpBuffer
+ );
+
+HINSTANCE
+STDCALL
+LoadLibraryW(
+ LPCWSTR lpLibFileName
+ );
+
+HINSTANCE
+STDCALL
+LoadLibraryExW(
+ LPCWSTR lpLibFileName,
+ HANDLE hFile,
+ DWORD dwFlags
+ );
+
+DWORD
+STDCALL
+GetModuleFileNameW(
+ HINSTANCE hModule,
+ LPWSTR lpFilename,
+ DWORD nSize
+ );
+
+HMODULE
+STDCALL
+GetModuleHandleW(
+ LPCWSTR lpModuleName
+ );
+
+VOID
+STDCALL
+FatalAppExitW(
+ UINT uAction,
+ LPCWSTR lpMessageText
+ );
+
+LPWSTR
+STDCALL
+GetCommandLineW(
+ VOID
+ );
+
+DWORD
+STDCALL
+GetEnvironmentVariableW(
+ LPCWSTR lpName,
+ LPWSTR lpBuffer,
+ DWORD nSize
+ );
+
+WINBOOL
+STDCALL
+SetEnvironmentVariableW(
+ LPCWSTR lpName,
+ LPCWSTR lpValue
+ );
+
+DWORD
+STDCALL
+ExpandEnvironmentStringsW(
+ LPCWSTR lpSrc,
+ LPWSTR lpDst,
+ DWORD nSize
+ );
+
+VOID
+STDCALL
+OutputDebugStringW(
+ LPCWSTR lpOutputString
+ );
+
+HRSRC
+STDCALL
+FindResourceW(
+ HINSTANCE hModule,
+ LPCWSTR lpName,
+ LPCWSTR lpType
+ );
+
+HRSRC
+STDCALL
+FindResourceExW(
+ HINSTANCE hModule,
+ LPCWSTR lpType,
+ LPCWSTR lpName,
+ WORD wLanguage
+ );
+
+WINBOOL
+STDCALL
+EnumResourceTypesW(
+ HINSTANCE hModule,
+ ENUMRESTYPEPROC lpEnumFunc,
+ LONG lParam
+ );
+
+WINBOOL
+STDCALL
+EnumResourceNamesW(
+ HINSTANCE hModule,
+ LPCWSTR lpType,
+ ENUMRESNAMEPROC lpEnumFunc,
+ LONG lParam
+ );
+
+WINBOOL
+STDCALL
+EnumResourceLanguagesW(
+ HINSTANCE hModule,
+ LPCWSTR lpType,
+ LPCWSTR lpName,
+ ENUMRESLANGPROC lpEnumFunc,
+ LONG lParam
+ );
+
+HANDLE
+STDCALL
+BeginUpdateResourceW(
+ LPCWSTR pFileName,
+ WINBOOL bDeleteExistingResources
+ );
+
+WINBOOL
+STDCALL
+UpdateResourceW(
+ HANDLE hUpdate,
+ LPCWSTR lpType,
+ LPCWSTR lpName,
+ WORD wLanguage,
+ LPVOID lpData,
+ DWORD cbData
+ );
+
+WINBOOL
+STDCALL
+EndUpdateResourceW(
+ HANDLE hUpdate,
+ WINBOOL fDiscard
+ );
+
+ATOM
+STDCALL
+GlobalAddAtomW(
+ LPCWSTR lpString
+ );
+
+ATOM
+STDCALL
+GlobalFindAtomW(
+ LPCWSTR lpString
+ );
+
+UINT
+STDCALL
+GlobalGetAtomNameW(
+ ATOM nAtom,
+ LPWSTR lpBuffer,
+ int nSize
+ );
+
+ATOM
+STDCALL
+AddAtomW(
+ LPCWSTR lpString
+ );
+
+ATOM
+STDCALL
+FindAtomW(
+ LPCWSTR lpString
+ );
+
+UINT
+STDCALL
+GetAtomNameW(
+ ATOM nAtom,
+ LPWSTR lpBuffer,
+ int nSize
+ );
+
+UINT
+STDCALL
+GetProfileIntW(
+ LPCWSTR lpAppName,
+ LPCWSTR lpKeyName,
+ INT nDefault
+ );
+
+DWORD
+STDCALL
+GetProfileStringW(
+ LPCWSTR lpAppName,
+ LPCWSTR lpKeyName,
+ LPCWSTR lpDefault,
+ LPWSTR lpReturnedString,
+ DWORD nSize
+ );
+
+WINBOOL
+STDCALL
+WriteProfileStringW(
+ LPCWSTR lpAppName,
+ LPCWSTR lpKeyName,
+ LPCWSTR lpString
+ );
+
+DWORD
+STDCALL
+GetProfileSectionW(
+ LPCWSTR lpAppName,
+ LPWSTR lpReturnedString,
+ DWORD nSize
+ );
+
+WINBOOL
+STDCALL
+WriteProfileSectionW(
+ LPCWSTR lpAppName,
+ LPCWSTR lpString
+ );
+
+UINT
+STDCALL
+GetPrivateProfileIntW(
+ LPCWSTR lpAppName,
+ LPCWSTR lpKeyName,
+ INT nDefault,
+ LPCWSTR lpFileName
+ );
+
+DWORD
+STDCALL
+GetPrivateProfileStringW(
+ LPCWSTR lpAppName,
+ LPCWSTR lpKeyName,
+ LPCWSTR lpDefault,
+ LPWSTR lpReturnedString,
+ DWORD nSize,
+ LPCWSTR lpFileName
+ );
+
+WINBOOL
+STDCALL
+WritePrivateProfileStringW(
+ LPCWSTR lpAppName,
+ LPCWSTR lpKeyName,
+ LPCWSTR lpString,
+ LPCWSTR lpFileName
+ );
+
+DWORD
+STDCALL
+GetPrivateProfileSectionW(
+ LPCWSTR lpAppName,
+ LPWSTR lpReturnedString,
+ DWORD nSize,
+ LPCWSTR lpFileName
+ );
+
+WINBOOL
+STDCALL
+WritePrivateProfileSectionW(
+ LPCWSTR lpAppName,
+ LPCWSTR lpString,
+ LPCWSTR lpFileName
+ );
+
+UINT
+STDCALL
+GetDriveTypeW(
+ LPCWSTR lpRootPathName
+ );
+
+UINT
+STDCALL
+GetSystemDirectoryW(
+ LPWSTR lpBuffer,
+ UINT uSize
+ );
+
+DWORD
+STDCALL
+GetTempPathW(
+ DWORD nBufferLength,
+ LPWSTR lpBuffer
+ );
+
+UINT
+STDCALL
+GetTempFileNameW(
+ LPCWSTR lpPathName,
+ LPCWSTR lpPrefixString,
+ UINT uUnique,
+ LPWSTR lpTempFileName
+ );
+
+UINT
+STDCALL
+GetWindowsDirectoryW(
+ LPWSTR lpBuffer,
+ UINT uSize
+ );
+
+WINBOOL
+STDCALL
+SetCurrentDirectoryW(
+ LPCWSTR lpPathName
+ );
+
+DWORD
+STDCALL
+GetCurrentDirectoryW(
+ DWORD nBufferLength,
+ LPWSTR lpBuffer
+ );
+
+WINBOOL
+STDCALL
+GetDiskFreeSpaceW(
+ LPCWSTR lpRootPathName,
+ LPDWORD lpSectorsPerCluster,
+ LPDWORD lpBytesPerSector,
+ LPDWORD lpNumberOfFreeClusters,
+ LPDWORD lpTotalNumberOfClusters
+ );
+
+WINBOOL
+STDCALL
+CreateDirectoryW(
+ LPCWSTR lpPathName,
+ LPSECURITY_ATTRIBUTES lpSecurityAttributes
+ );
+
+WINBOOL
+STDCALL
+CreateDirectoryExW(
+ LPCWSTR lpTemplateDirectory,
+ LPCWSTR lpNewDirectory,
+ LPSECURITY_ATTRIBUTES lpSecurityAttributes
+ );
+
+WINBOOL
+STDCALL
+RemoveDirectoryW(
+ LPCWSTR lpPathName
+ );
+
+DWORD
+STDCALL
+GetFullPathNameW(
+ LPCWSTR lpFileName,
+ DWORD nBufferLength,
+ LPWSTR lpBuffer,
+ LPWSTR *lpFilePart
+ );
+
+WINBOOL
+STDCALL
+DefineDosDeviceW(
+ DWORD dwFlags,
+ LPCWSTR lpDeviceName,
+ LPCWSTR lpTargetPath
+ );
+
+DWORD
+STDCALL
+QueryDosDeviceW(
+ LPCWSTR lpDeviceName,
+ LPWSTR lpTargetPath,
+ DWORD ucchMax
+ );
+
+HANDLE
+STDCALL
+CreateFileW(
+ LPCWSTR lpFileName,
+ DWORD dwDesiredAccess,
+ DWORD dwShareMode,
+ LPSECURITY_ATTRIBUTES lpSecurityAttributes,
+ DWORD dwCreationDisposition,
+ DWORD dwFlagsAndAttributes,
+ HANDLE hTemplateFile
+ );
+
+WINBOOL
+STDCALL
+SetFileAttributesW(
+ LPCWSTR lpFileName,
+ DWORD dwFileAttributes
+ );
+
+DWORD
+STDCALL
+GetFileAttributesW(
+ LPCWSTR lpFileName
+ );
+
+DWORD
+STDCALL
+GetCompressedFileSizeW(
+ LPCWSTR lpFileName,
+ LPDWORD lpFileSizeHigh
+ );
+
+WINBOOL
+STDCALL
+DeleteFileW(
+ LPCWSTR lpFileName
+ );
+
+DWORD
+STDCALL
+SearchPathW(
+ LPCWSTR lpPath,
+ LPCWSTR lpFileName,
+ LPCWSTR lpExtension,
+ DWORD nBufferLength,
+ LPWSTR lpBuffer,
+ LPWSTR *lpFilePart
+ );
+
+WINBOOL
+STDCALL
+CopyFileW(
+ LPCWSTR lpExistingFileName,
+ LPCWSTR lpNewFileName,
+ WINBOOL bFailIfExists
+ );
+
+WINBOOL
+STDCALL
+MoveFileW(
+ LPCWSTR lpExistingFileName,
+ LPCWSTR lpNewFileName
+ );
+
+WINBOOL
+STDCALL
+MoveFileExW(
+ LPCWSTR lpExistingFileName,
+ LPCWSTR lpNewFileName,
+ DWORD dwFlags
+ );
+
+HANDLE
+STDCALL
+CreateNamedPipeW(
+ LPCWSTR lpName,
+ DWORD dwOpenMode,
+ DWORD dwPipeMode,
+ DWORD nMaxInstances,
+ DWORD nOutBufferSize,
+ DWORD nInBufferSize,
+ DWORD nDefaultTimeOut,
+ LPSECURITY_ATTRIBUTES lpSecurityAttributes
+ );
+
+WINBOOL
+STDCALL
+GetNamedPipeHandleStateW(
+ HANDLE hNamedPipe,
+ LPDWORD lpState,
+ LPDWORD lpCurInstances,
+ LPDWORD lpMaxCollectionCount,
+ LPDWORD lpCollectDataTimeout,
+ LPWSTR lpUserName,
+ DWORD nMaxUserNameSize
+ );
+
+WINBOOL
+STDCALL
+CallNamedPipeW(
+ LPCWSTR lpNamedPipeName,
+ LPVOID lpInBuffer,
+ DWORD nInBufferSize,
+ LPVOID lpOutBuffer,
+ DWORD nOutBufferSize,
+ LPDWORD lpBytesRead,
+ DWORD nTimeOut
+ );
+
+WINBOOL
+STDCALL
+WaitNamedPipeW(
+ LPCWSTR lpNamedPipeName,
+ DWORD nTimeOut
+ );
+
+WINBOOL
+STDCALL
+SetVolumeLabelW(
+ LPCWSTR lpRootPathName,
+ LPCWSTR lpVolumeName
+ );
+
+WINBOOL
+STDCALL
+GetVolumeInformationW(
+ LPCWSTR lpRootPathName,
+ LPWSTR lpVolumeNameBuffer,
+ DWORD nVolumeNameSize,
+ LPDWORD lpVolumeSerialNumber,
+ LPDWORD lpMaximumComponentLength,
+ LPDWORD lpFileSystemFlags,
+ LPWSTR lpFileSystemNameBuffer,
+ DWORD nFileSystemNameSize
+ );
+
+WINBOOL
+STDCALL
+ClearEventLogW (
+ HANDLE hEventLog,
+ LPCWSTR lpBackupFileName
+ );
+
+WINBOOL
+STDCALL
+BackupEventLogW (
+ HANDLE hEventLog,
+ LPCWSTR lpBackupFileName
+ );
+
+HANDLE
+STDCALL
+OpenEventLogW (
+ LPCWSTR lpUNCServerName,
+ LPCWSTR lpSourceName
+ );
+
+HANDLE
+STDCALL
+RegisterEventSourceW (
+ LPCWSTR lpUNCServerName,
+ LPCWSTR lpSourceName
+ );
+
+HANDLE
+STDCALL
+OpenBackupEventLogW (
+ LPCWSTR lpUNCServerName,
+ LPCWSTR lpFileName
+ );
+
+WINBOOL
+STDCALL
+ReadEventLogW (
+ HANDLE hEventLog,
+ DWORD dwReadFlags,
+ DWORD dwRecordOffset,
+ LPVOID lpBuffer,
+ DWORD nNumberOfBytesToRead,
+ DWORD *pnBytesRead,
+ DWORD *pnMinNumberOfBytesNeeded
+ );
+
+WINBOOL
+STDCALL
+ReportEventW (
+ HANDLE hEventLog,
+ WORD wType,
+ WORD wCategory,
+ DWORD dwEventID,
+ PSID lpUserSid,
+ WORD wNumStrings,
+ DWORD dwDataSize,
+ LPCWSTR *lpStrings,
+ LPVOID lpRawData
+ );
+
+WINBOOL
+STDCALL
+AccessCheckAndAuditAlarmW (
+ LPCWSTR SubsystemName,
+ LPVOID HandleId,
+ LPWSTR ObjectTypeName,
+ LPWSTR ObjectName,
+ PSECURITY_DESCRIPTOR SecurityDescriptor,
+ DWORD DesiredAccess,
+ PGENERIC_MAPPING GenericMapping,
+ WINBOOL ObjectCreation,
+ LPDWORD GrantedAccess,
+ LPBOOL AccessStatus,
+ LPBOOL pfGenerateOnClose
+ );
+
+WINBOOL
+STDCALL
+ObjectOpenAuditAlarmW (
+ LPCWSTR SubsystemName,
+ LPVOID HandleId,
+ LPWSTR ObjectTypeName,
+ LPWSTR ObjectName,
+ PSECURITY_DESCRIPTOR pSecurityDescriptor,
+ HANDLE ClientToken,
+ DWORD DesiredAccess,
+ DWORD GrantedAccess,
+ PPRIVILEGE_SET Privileges,
+ WINBOOL ObjectCreation,
+ WINBOOL AccessGranted,
+ LPBOOL GenerateOnClose
+ );
+
+WINBOOL
+STDCALL
+ObjectPrivilegeAuditAlarmW (
+ LPCWSTR SubsystemName,
+ LPVOID HandleId,
+ HANDLE ClientToken,
+ DWORD DesiredAccess,
+ PPRIVILEGE_SET Privileges,
+ WINBOOL AccessGranted
+ );
+
+WINBOOL
+STDCALL
+ObjectCloseAuditAlarmW (
+ LPCWSTR SubsystemName,
+ LPVOID HandleId,
+ WINBOOL GenerateOnClose
+ );
+
+WINBOOL
+STDCALL
+PrivilegedServiceAuditAlarmW (
+ LPCWSTR SubsystemName,
+ LPCWSTR ServiceName,
+ HANDLE ClientToken,
+ PPRIVILEGE_SET Privileges,
+ WINBOOL AccessGranted
+ );
+
+WINBOOL
+STDCALL
+SetFileSecurityW (
+ LPCWSTR lpFileName,
+ SECURITY_INFORMATION SecurityInformation,
+ PSECURITY_DESCRIPTOR pSecurityDescriptor
+ );
+
+WINBOOL
+STDCALL
+GetFileSecurityW (
+ LPCWSTR lpFileName,
+ SECURITY_INFORMATION RequestedInformation,
+ PSECURITY_DESCRIPTOR pSecurityDescriptor,
+ DWORD nLength,
+ LPDWORD lpnLengthNeeded
+ );
+
+HANDLE
+STDCALL
+FindFirstChangeNotificationW(
+ LPCWSTR lpPathName,
+ WINBOOL bWatchSubtree,
+ DWORD dwNotifyFilter
+ );
+
+WINBOOL
+STDCALL
+IsBadStringPtrW(
+ LPCWSTR lpsz,
+ UINT ucchMax
+ );
+
+WINBOOL
+STDCALL
+LookupAccountSidW(
+ LPCWSTR lpSystemName,
+ PSID Sid,
+ LPWSTR Name,
+ LPDWORD cbName,
+ LPWSTR ReferencedDomainName,
+ LPDWORD cbReferencedDomainName,
+ PSID_NAME_USE peUse
+ );
+
+WINBOOL
+STDCALL
+LookupAccountNameW(
+ LPCWSTR lpSystemName,
+ LPCWSTR lpAccountName,
+ PSID Sid,
+ LPDWORD cbSid,
+ LPWSTR ReferencedDomainName,
+ LPDWORD cbReferencedDomainName,
+ PSID_NAME_USE peUse
+ );
+
+WINBOOL
+STDCALL
+LookupPrivilegeValueW(
+ LPCWSTR lpSystemName,
+ LPCWSTR lpName,
+ PLUID lpLuid
+ );
+
+WINBOOL
+STDCALL
+LookupPrivilegeNameW(
+ LPCWSTR lpSystemName,
+ PLUID lpLuid,
+ LPWSTR lpName,
+ LPDWORD cbName
+ );
+
+WINBOOL
+STDCALL
+LookupPrivilegeDisplayNameW(
+ LPCWSTR lpSystemName,
+ LPCWSTR lpName,
+ LPWSTR lpDisplayName,
+ LPDWORD cbDisplayName,
+ LPDWORD lpLanguageId
+ );
+
+WINBOOL
+STDCALL
+BuildCommDCBW(
+ LPCWSTR lpDef,
+ LPDCB lpDCB
+ );
+
+WINBOOL
+STDCALL
+BuildCommDCBAndTimeoutsW(
+ LPCWSTR lpDef,
+ LPDCB lpDCB,
+ LPCOMMTIMEOUTS lpCommTimeouts
+ );
+
+WINBOOL
+STDCALL
+CommConfigDialogW(
+ LPCWSTR lpszName,
+ HWND hWnd,
+ LPCOMMCONFIG lpCC
+ );
+
+WINBOOL
+STDCALL
+GetDefaultCommConfigW(
+ LPCWSTR lpszName,
+ LPCOMMCONFIG lpCC,
+ LPDWORD lpdwSize
+ );
+
+WINBOOL
+STDCALL
+SetDefaultCommConfigW(
+ LPCWSTR lpszName,
+ LPCOMMCONFIG lpCC,
+ DWORD dwSize
+ );
+
+WINBOOL
+STDCALL
+GetComputerNameW (
+ LPWSTR lpBuffer,
+ LPDWORD nSize
+ );
+
+WINBOOL
+STDCALL
+SetComputerNameW (
+ LPCWSTR lpComputerName
+ );
+
+WINBOOL
+STDCALL
+GetUserNameW (
+ LPWSTR lpBuffer,
+ LPDWORD nSize
+ );
+
+int
+STDCALL
+wvsprintfW(
+ LPWSTR,
+ LPCWSTR,
+ va_list arglist);
+
+int
+CDECL
+wsprintfW(LPWSTR, LPCWSTR, ...);
+
+HKL
+STDCALL
+LoadKeyboardLayoutW(
+ LPCWSTR pwszKLID,
+ UINT Flags);
+
+WINBOOL
+STDCALL
+GetKeyboardLayoutNameW(
+ LPWSTR pwszKLID);
+
+HDESK
+STDCALL
+CreateDesktopW(
+ LPWSTR lpszDesktop,
+ LPWSTR lpszDevice,
+ LPDEVMODE pDevmode,
+ DWORD dwFlags,
+ DWORD dwDesiredAccess,
+ LPSECURITY_ATTRIBUTES lpsa);
+
+HDESK
+STDCALL
+OpenDesktopW(
+ LPWSTR lpszDesktop,
+ DWORD dwFlags,
+ WINBOOL fInherit,
+ DWORD dwDesiredAccess);
+
+WINBOOL
+STDCALL
+EnumDesktopsW(
+ HWINSTA hwinsta,
+ DESKTOPENUMPROC lpEnumFunc,
+ LPARAM lParam);
+
+HWINSTA
+STDCALL
+CreateWindowStationW(
+ LPWSTR lpwinsta,
+ DWORD dwReserved,
+ DWORD dwDesiredAccess,
+ LPSECURITY_ATTRIBUTES lpsa);
+
+HWINSTA
+STDCALL
+OpenWindowStationW(
+ LPWSTR lpszWinSta,
+ WINBOOL fInherit,
+ DWORD dwDesiredAccess);
+
+WINBOOL
+STDCALL
+EnumWindowStationsW(
+ ENUMWINDOWSTATIONPROC lpEnumFunc,
+ LPARAM lParam);
+
+WINBOOL
+STDCALL
+GetUserObjectInformationW(
+ HANDLE hObj,
+ int nIndex,
+ PVOID pvInfo,
+ DWORD nLength,
+ LPDWORD lpnLengthNeeded);
+
+WINBOOL
+STDCALL
+SetUserObjectInformationW(
+ HANDLE hObj,
+ int nIndex,
+ PVOID pvInfo,
+ DWORD nLength);
+
+UINT
+STDCALL
+RegisterWindowMessageW(
+ LPCWSTR lpString);
+
+WINBOOL
+STDCALL
+GetMessageW(
+ LPMSG lpMsg,
+ HWND hWnd ,
+ UINT wMsgFilterMin,
+ UINT wMsgFilterMax);
+
+LONG
+STDCALL
+DispatchMessageW(
+ CONST MSG *lpMsg);
+
+WINBOOL
+STDCALL
+PeekMessageW(
+ LPMSG lpMsg,
+ HWND hWnd ,
+ UINT wMsgFilterMin,
+ UINT wMsgFilterMax,
+ UINT wRemoveMsg);
+
+LRESULT
+STDCALL
+SendMessageW(
+ HWND hWnd,
+ UINT Msg,
+ WPARAM wParam,
+ LPARAM lParam);
+
+LRESULT
+STDCALL
+SendMessageTimeoutW(
+ HWND hWnd,
+ UINT Msg,
+ WPARAM wParam,
+ LPARAM lParam,
+ UINT fuFlags,
+ UINT uTimeout,
+ LPDWORD lpdwResult);
+
+WINBOOL
+STDCALL
+SendNotifyMessageW(
+ HWND hWnd,
+ UINT Msg,
+ WPARAM wParam,
+ LPARAM lParam);
+
+WINBOOL
+STDCALL
+SendMessageCallbackW(
+ HWND hWnd,
+ UINT Msg,
+ WPARAM wParam,
+ LPARAM lParam,
+ SENDASYNCPROC lpResultCallBack,
+ DWORD dwData);
+
+WINBOOL
+STDCALL
+PostMessageW(
+ HWND hWnd,
+ UINT Msg,
+ WPARAM wParam,
+ LPARAM lParam);
+
+WINBOOL
+STDCALL
+PostThreadMessageW(
+ DWORD idThread,
+ UINT Msg,
+ WPARAM wParam,
+ LPARAM lParam);
+
+LRESULT
+STDCALL
+DefWindowProcW(
+ HWND hWnd,
+ UINT Msg,
+ WPARAM wParam,
+ LPARAM lParam);
+
+LRESULT
+STDCALL
+CallWindowProcW(
+ WNDPROC lpPrevWndFunc,
+ HWND hWnd,
+ UINT Msg,
+ WPARAM wParam,
+ LPARAM lParam);
+
+ATOM
+STDCALL
+RegisterClassW(
+ CONST WNDCLASS *lpWndClass);
+
+WINBOOL
+STDCALL
+UnregisterClassW(
+ LPCWSTR lpClassName,
+ HINSTANCE hInstance);
+
+WINBOOL
+STDCALL
+GetClassInfoW(
+ HINSTANCE hInstance ,
+ LPCWSTR lpClassName,
+ LPWNDCLASS lpWndClass);
+
+ATOM
+STDCALL
+RegisterClassExW(CONST WNDCLASSEX *);
+
+WINBOOL
+STDCALL
+GetClassInfoExW(HINSTANCE, LPCWSTR, LPWNDCLASSEX);
+
+HWND
+STDCALL
+CreateWindowExW(
+ DWORD dwExStyle,
+ LPCWSTR lpClassName,
+ LPCWSTR lpWindowName,
+ DWORD dwStyle,
+ int X,
+ int Y,
+ int nWidth,
+ int nHeight,
+ HWND hWndParent ,
+ HMENU hMenu,
+ HINSTANCE hInstance,
+ LPVOID lpParam);
+
+HWND
+STDCALL
+CreateDialogParamW(
+ HINSTANCE hInstance,
+ LPCWSTR lpTemplateName,
+ HWND hWndParent ,
+ DLGPROC lpDialogFunc,
+ LPARAM dwInitParam);
+
+HWND
+STDCALL
+CreateDialogIndirectParamW(
+ HINSTANCE hInstance,
+ LPCDLGTEMPLATE lpTemplate,
+ HWND hWndParent,
+ DLGPROC lpDialogFunc,
+ LPARAM dwInitParam);
+
+int
+STDCALL
+DialogBoxParamW(
+ HINSTANCE hInstance,
+ LPCWSTR lpTemplateName,
+ HWND hWndParent ,
+ DLGPROC lpDialogFunc,
+ LPARAM dwInitParam);
+
+int
+STDCALL
+DialogBoxIndirectParamW(
+ HINSTANCE hInstance,
+ LPCDLGTEMPLATE hDialogTemplate,
+ HWND hWndParent ,
+ DLGPROC lpDialogFunc,
+ LPARAM dwInitParam);
+
+WINBOOL
+STDCALL
+SetDlgItemTextW(
+ HWND hDlg,
+ int nIDDlgItem,
+ LPCWSTR lpString);
+
+UINT
+STDCALL
+GetDlgItemTextW(
+ HWND hDlg,
+ int nIDDlgItem,
+ LPWSTR lpString,
+ int nMaxCount);
+
+LONG
+STDCALL
+SendDlgItemMessageW(
+ HWND hDlg,
+ int nIDDlgItem,
+ UINT Msg,
+ WPARAM wParam,
+ LPARAM lParam);
+
+LRESULT
+STDCALL
+DefDlgProcW(
+ HWND hDlg,
+ UINT Msg,
+ WPARAM wParam,
+ LPARAM lParam);
+
+WINBOOL
+STDCALL
+CallMsgFilterW(
+ LPMSG lpMsg,
+ int nCode);
+
+UINT
+STDCALL
+RegisterClipboardFormatW(
+ LPCWSTR lpszFormat);
+
+int
+STDCALL
+GetClipboardFormatNameW(
+ UINT format,
+ LPWSTR lpszFormatName,
+ int cchMaxCount);
+
+WINBOOL
+STDCALL
+CharToOemW(
+ LPCWSTR lpszSrc,
+ LPSTR lpszDst);
+
+WINBOOL
+STDCALL
+OemToCharW(
+ LPCSTR lpszSrc,
+ LPWSTR lpszDst);
+
+WINBOOL
+STDCALL
+CharToOemBuffW(
+ LPCWSTR lpszSrc,
+ LPSTR lpszDst,
+ DWORD cchDstLength);
+
+WINBOOL
+STDCALL
+OemToCharBuffW(
+ LPCSTR lpszSrc,
+ LPWSTR lpszDst,
+ DWORD cchDstLength);
+
+LPWSTR
+STDCALL
+CharUpperW(
+ LPWSTR lpsz);
+
+DWORD
+STDCALL
+CharUpperBuffW(
+ LPWSTR lpsz,
+ DWORD cchLength);
+
+LPWSTR
+STDCALL
+CharLowerW(
+ LPWSTR lpsz);
+
+DWORD
+STDCALL
+CharLowerBuffW(
+ LPWSTR lpsz,
+ DWORD cchLength);
+
+LPWSTR
+STDCALL
+CharNextW(
+ LPCWSTR lpsz);
+
+LPWSTR
+STDCALL
+CharPrevW(
+ LPCWSTR lpszStart,
+ LPCWSTR lpszCurrent);
+
+WINBOOL
+STDCALL
+IsCharAlphaW(
+ WCHAR ch);
+
+WINBOOL
+STDCALL
+IsCharAlphaNumericW(
+ WCHAR ch);
+
+WINBOOL
+STDCALL
+IsCharUpperW(
+ WCHAR ch);
+
+WINBOOL
+STDCALL
+IsCharLowerW(
+ WCHAR ch);
+
+int
+STDCALL
+GetKeyNameTextW(
+ LONG lParam,
+ LPWSTR lpString,
+ int nSize
+ );
+
+SHORT
+STDCALL
+VkKeyScanW(
+ WCHAR ch);
+
+SHORT
+STDCALL VkKeyScanExW(
+ WCHAR ch,
+ HKL dwhkl);
+
+UINT
+STDCALL
+MapVirtualKeyW(
+ UINT uCode,
+ UINT uMapType);
+
+UINT
+STDCALL
+MapVirtualKeyExW(
+ UINT uCode,
+ UINT uMapType,
+ HKL dwhkl);
+
+HACCEL
+STDCALL
+LoadAcceleratorsW(
+ HINSTANCE hInstance,
+ LPCWSTR lpTableName);
+
+HACCEL
+STDCALL
+CreateAcceleratorTableW(
+ LPACCEL, int);
+
+int
+STDCALL
+CopyAcceleratorTableW(
+ HACCEL hAccelSrc,
+ LPACCEL lpAccelDst,
+ int cAccelEntries);
+
+int
+STDCALL
+TranslateAcceleratorW(
+ HWND hWnd,
+ HACCEL hAccTable,
+ LPMSG lpMsg);
+
+HMENU
+STDCALL
+LoadMenuW(
+ HINSTANCE hInstance,
+ LPCWSTR lpMenuName);
+
+HMENU
+STDCALL
+LoadMenuIndirectW(
+ CONST MENUTEMPLATE *lpMenuTemplate);
+
+WINBOOL
+STDCALL
+ChangeMenuW(
+ HMENU hMenu,
+ UINT cmd,
+ LPCWSTR lpszNewItem,
+ UINT cmdInsert,
+ UINT flags);
+
+int
+STDCALL
+GetMenuStringW(
+ HMENU hMenu,
+ UINT uIDItem,
+ LPWSTR lpString,
+ int nMaxCount,
+ UINT uFlag);
+
+WINBOOL
+STDCALL
+InsertMenuW(
+ HMENU hMenu,
+ UINT uPosition,
+ UINT uFlags,
+ UINT uIDNewItem,
+ LPCWSTR lpNewItem
+ );
+
+WINBOOL
+STDCALL
+AppendMenuW(
+ HMENU hMenu,
+ UINT uFlags,
+ UINT uIDNewItem,
+ LPCWSTR lpNewItem
+ );
+
+WINBOOL
+STDCALL
+ModifyMenuW(
+ HMENU hMnu,
+ UINT uPosition,
+ UINT uFlags,
+ UINT uIDNewItem,
+ LPCWSTR lpNewItem
+ );
+
+WINBOOL
+STDCALL
+InsertMenuItemW(
+ HMENU,
+ UINT,
+ WINBOOL,
+ LPCMENUITEMINFO
+ );
+
+WINBOOL
+STDCALL
+GetMenuItemInfoW(
+ HMENU,
+ UINT,
+ WINBOOL,
+ LPMENUITEMINFO
+ );
+
+WINBOOL
+STDCALL
+SetMenuItemInfoW(
+ HMENU,
+ UINT,
+ WINBOOL,
+ LPCMENUITEMINFO
+ );
+
+int
+STDCALL
+DrawTextW(
+ HDC hDC,
+ LPCWSTR lpString,
+ int nCount,
+ LPRECT lpRect,
+ UINT uFormat);
+
+int
+STDCALL
+DrawTextExW(HDC, LPWSTR, int, LPRECT, UINT, LPDRAWTEXTPARAMS);
+
+WINBOOL
+STDCALL
+GrayStringW(
+ HDC hDC,
+ HBRUSH hBrush,
+ GRAYSTRINGPROC lpOutputFunc,
+ LPARAM lpData,
+ int nCount,
+ int X,
+ int Y,
+ int nWidth,
+ int nHeight);
+
+WINBOOL STDCALL DrawStateW(HDC, HBRUSH, DRAWSTATEPROC, LPARAM, WPARAM, int, int, int, int, UINT);
+
+LONG
+STDCALL
+TabbedTextOutW(
+ HDC hDC,
+ int X,
+ int Y,
+ LPCWSTR lpString,
+ int nCount,
+ int nTabPositions,
+ LPINT lpnTabStopPositions,
+ int nTabOrigin);
+
+DWORD
+STDCALL
+GetTabbedTextExtentW(
+ HDC hDC,
+ LPCWSTR lpString,
+ int nCount,
+ int nTabPositions,
+ LPINT lpnTabStopPositions);
+
+WINBOOL
+STDCALL
+SetPropW(
+ HWND hWnd,
+ LPCWSTR lpString,
+ HANDLE hData);
+
+HANDLE
+STDCALL
+GetPropW(
+ HWND hWnd,
+ LPCWSTR lpString);
+
+HANDLE
+STDCALL
+RemovePropW(
+ HWND hWnd,
+ LPCWSTR lpString);
+
+int
+STDCALL
+EnumPropsExW(
+ HWND hWnd,
+ PROPENUMPROCEX lpEnumFunc,
+ LPARAM lParam);
+
+int
+STDCALL
+EnumPropsW(
+ HWND hWnd,
+ PROPENUMPROC lpEnumFunc);
+
+WINBOOL
+STDCALL
+SetWindowTextW(
+ HWND hWnd,
+ LPCWSTR lpString);
+
+int
+STDCALL
+GetWindowTextW(
+ HWND hWnd,
+ LPWSTR lpString,
+ int nMaxCount);
+
+int
+STDCALL
+GetWindowTextLengthW(
+ HWND hWnd);
+
+int
+STDCALL
+MessageBoxW(
+ HWND hWnd ,
+ LPCWSTR lpText,
+ LPCWSTR lpCaption,
+ UINT uType);
+
+int
+STDCALL
+MessageBoxExW(
+ HWND hWnd ,
+ LPCWSTR lpText,
+ LPCWSTR lpCaption,
+ UINT uType,
+ WORD wLanguageId);
+
+int
+STDCALL
+MessageBoxIndirectW(LPMSGBOXPARAMS);
+
+LONG
+STDCALL
+GetWindowLongW(
+ HWND hWnd,
+ int nIndex);
+
+LONG
+STDCALL
+SetWindowLongW(
+ HWND hWnd,
+ int nIndex,
+ LONG dwNewLong);
+
+DWORD
+STDCALL
+GetClassLongW(
+ HWND hWnd,
+ int nIndex);
+
+DWORD
+STDCALL
+SetClassLongW(
+ HWND hWnd,
+ int nIndex,
+ LONG dwNewLong);
+
+HWND
+STDCALL
+FindWindowW(
+ LPCWSTR lpClassName ,
+ LPCWSTR lpWindowName);
+
+HWND
+STDCALL
+FindWindowExW(HWND, HWND, LPCWSTR, LPCWSTR);
+
+int
+STDCALL
+GetClassNameW(
+ HWND hWnd,
+ LPWSTR lpClassName,
+ int nMaxCount);
+
+HHOOK
+STDCALL
+SetWindowsHookExW(
+ int idHook,
+ HOOKPROC lpfn,
+ HINSTANCE hmod,
+ DWORD dwThreadId);
+
+HBITMAP
+STDCALL
+LoadBitmapW(
+ HINSTANCE hInstance,
+ LPCWSTR lpBitmapName);
+
+HCURSOR
+STDCALL
+LoadCursorW(
+ HINSTANCE hInstance,
+ LPCWSTR lpCursorName);
+
+HCURSOR
+STDCALL
+LoadCursorFromFileW(
+ LPCWSTR lpFileName);
+
+HICON
+STDCALL
+LoadIconW(
+ HINSTANCE hInstance,
+ LPCWSTR lpIconName);
+
+HANDLE
+STDCALL
+LoadImageW(
+ HINSTANCE,
+ LPCWSTR,
+ UINT,
+ int,
+ int,
+ UINT);
+
+int
+STDCALL
+LoadStringW(
+ HINSTANCE hInstance,
+ UINT uID,
+ LPWSTR lpBuffer,
+ int nBufferMax);
+
+WINBOOL
+STDCALL
+IsDialogMessageW(
+ HWND hDlg,
+ LPMSG lpMsg);
+
+int
+STDCALL
+DlgDirListW(
+ HWND hDlg,
+ LPWSTR lpPathSpec,
+ int nIDListBox,
+ int nIDStaticPath,
+ UINT uFileType);
+
+WINBOOL
+STDCALL
+DlgDirSelectExW(
+ HWND hDlg,
+ LPWSTR lpString,
+ int nCount,
+ int nIDListBox);
+
+int
+STDCALL
+DlgDirListComboBoxW(
+ HWND hDlg,
+ LPWSTR lpPathSpec,
+ int nIDComboBox,
+ int nIDStaticPath,
+ UINT uFiletype);
+
+WINBOOL
+STDCALL
+DlgDirSelectComboBoxExW(
+ HWND hDlg,
+ LPWSTR lpString,
+ int nCount,
+ int nIDComboBox);
+
+LRESULT
+STDCALL
+DefFrameProcW(
+ HWND hWnd,
+ HWND hWndMDIClient ,
+ UINT uMsg,
+ WPARAM wParam,
+ LPARAM lParam);
+
+LRESULT
+STDCALL
+DefMDIChildProcW(
+ HWND hWnd,
+ UINT uMsg,
+ WPARAM wParam,
+ LPARAM lParam);
+
+HWND
+STDCALL
+CreateMDIWindowW(
+ LPWSTR lpClassName,
+ LPWSTR lpWindowName,
+ DWORD dwStyle,
+ int X,
+ int Y,
+ int nWidth,
+ int nHeight,
+ HWND hWndParent,
+ HINSTANCE hInstance,
+ LPARAM lParam
+ );
+
+WINBOOL
+STDCALL
+WinHelpW(
+ HWND hWndMain,
+ LPCWSTR lpszHelp,
+ UINT uCommand,
+ DWORD dwData
+ );
+
+LONG
+STDCALL
+ChangeDisplaySettingsW(
+ LPDEVMODE lpDevMode,
+ DWORD dwFlags);
+
+WINBOOL
+STDCALL
+EnumDisplaySettingsW(
+ LPCWSTR lpszDeviceName,
+ DWORD iModeNum,
+ LPDEVMODE lpDevMode);
+
+WINBOOL
+STDCALL
+SystemParametersInfoW(
+ UINT uiAction,
+ UINT uiParam,
+ PVOID pvParam,
+ UINT fWinIni);
+
+int
+STDCALL
+AddFontResourceW(LPCWSTR);
+
+HMETAFILE
+STDCALL
+CopyMetaFileW(HMETAFILE, LPCWSTR);
+
+HFONT
+STDCALL
+CreateFontIndirectW(CONST LOGFONT *);
+
+HFONT
+STDCALL
+CreateFontW(int, int, int, int, int, DWORD,
+ DWORD, DWORD, DWORD, DWORD, DWORD,
+ DWORD, DWORD, LPCWSTR);
+
+HDC
+STDCALL
+CreateICW(LPCWSTR, LPCWSTR , LPCWSTR , CONST DEVMODE *);
+
+HDC
+STDCALL
+CreateMetaFileW(LPCWSTR);
+
+WINBOOL
+STDCALL
+CreateScalableFontResourceW(DWORD, LPCWSTR, LPCWSTR, LPCWSTR);
+
+int
+STDCALL
+DeviceCapabilitiesW(LPCWSTR, LPCWSTR, WORD,
+ LPWSTR, CONST DEVMODE *);
+
+int
+STDCALL
+EnumFontFamiliesExW(HDC, LPLOGFONT, FONTENUMEXPROC, LPARAM, DWORD);
+
+int
+STDCALL
+EnumFontFamiliesW(HDC, LPCWSTR, FONTENUMPROC, LPARAM);
+
+int
+STDCALL
+EnumFontsW(HDC, LPCWSTR, ENUMFONTSPROC, LPARAM);
+
+WINBOOL
+STDCALL
+GetCharWidthW(HDC, UINT, UINT, LPINT);
+
+WINBOOL
+STDCALL
+GetCharWidth32W(HDC, UINT, UINT, LPINT);
+
+WINBOOL
+STDCALL
+GetCharWidthFloatW(HDC, UINT, UINT, PFLOAT);
+
+WINBOOL
+STDCALL
+GetCharABCWidthsW(HDC, UINT, UINT, LPABC);
+
+WINBOOL
+STDCALL
+GetCharABCWidthsFloatW(HDC, UINT, UINT, LPABCFLOAT);
+
+DWORD
+STDCALL
+GetGlyphOutlineW(HDC, UINT, UINT, LPGLYPHMETRICS, DWORD, LPVOID, CONST MAT2 *);
+
+HMETAFILE
+STDCALL
+GetMetaFileW(LPCWSTR);
+
+UINT
+STDCALL
+GetOutlineTextMetricsW(HDC, UINT, LPOUTLINETEXTMETRIC);
+
+WINBOOL
+STDCALL GetTextExtentPointW(
+ HDC,
+ LPCWSTR,
+ int,
+ LPSIZE
+ );
+
+WINBOOL
+STDCALL
+GetTextExtentPoint32W(
+ HDC,
+ LPCWSTR,
+ int,
+ LPSIZE
+ );
+
+WINBOOL
+STDCALL
+GetTextExtentExPointW(
+ HDC,
+ LPCWSTR,
+ int,
+ int,
+ LPINT,
+ LPINT,
+ LPSIZE
+ );
+
+DWORD
+STDCALL
+GetCharacterPlacementW(HDC, LPCWSTR, int, int, LPGCP_RESULTS, DWORD);
+
+HDC
+STDCALL
+ResetDCW(HDC, CONST DEVMODE *);
+
+WINBOOL
+STDCALL
+RemoveFontResourceW(LPCWSTR);
+
+HENHMETAFILE
+STDCALL
+CopyEnhMetaFileW(HENHMETAFILE, LPCWSTR);
+
+HDC
+STDCALL
+CreateEnhMetaFileW(HDC, LPCWSTR, CONST RECT *, LPCWSTR);
+
+HENHMETAFILE
+STDCALL
+GetEnhMetaFileW(LPCWSTR);
+
+UINT
+STDCALL
+GetEnhMetaFileDescriptionW(HENHMETAFILE, UINT, LPWSTR );
+
+WINBOOL
+STDCALL
+GetTextMetricsW(HDC, LPTEXTMETRIC);
+
+int
+STDCALL
+StartDocW(HDC, CONST DOCINFO *);
+
+int
+STDCALL
+GetObjectW(HGDIOBJ, int, LPVOID);
+
+WINBOOL
+STDCALL
+TextOutW(HDC, int, int, LPCWSTR, int);
+
+WINBOOL
+STDCALL
+ExtTextOutW(HDC, int, int, UINT, CONST RECT *,LPCWSTR, UINT, CONST INT *);
+
+WINBOOL
+STDCALL
+PolyTextOutW(HDC, CONST POLYTEXT *, int);
+
+int
+STDCALL
+GetTextFaceW(HDC, int, LPWSTR);
+
+DWORD
+STDCALL
+GetKerningPairsW(HDC, DWORD, LPKERNINGPAIR);
+
+WINBOOL
+STDCALL
+GetLogColorSpaceW(HCOLORSPACE,LPLOGCOLORSPACE,DWORD);
+
+HCOLORSPACE
+STDCALL
+CreateColorSpaceW(LPLOGCOLORSPACE);
+
+WINBOOL
+STDCALL
+GetICMProfileW(HDC,DWORD,LPWSTR);
+
+WINBOOL
+STDCALL
+SetICMProfileW(HDC,LPWSTR);
+
+WINBOOL
+STDCALL
+UpdateICMRegKeyW(DWORD, DWORD, LPWSTR, UINT);
+
+int
+STDCALL
+EnumICMProfilesW(HDC,ICMENUMPROC,LPARAM);
+
+HPROPSHEETPAGE
+STDCALL
+CreatePropertySheetPageW(LPCPROPSHEETPAGE lppsp);
+
+int
+STDCALL
+PropertySheetW(LPCPROPSHEETHEADER lppsph);
+
+HIMAGELIST
+STDCALL
+ImageList_LoadImageW(HINSTANCE hi,
+LPCWSTR lpbmp,
+int cx,
+int cGrow,
+COLORREF crMask,
+UINT uType,
+UINT uFlags);
+
+HWND
+STDCALL
+CreateStatusWindowW(LONG style, LPCWSTR lpszText, HWND hwndParent, UINT wID);
+
+void
+STDCALL
+DrawStatusTextW(HDC hDC, LPRECT lprc, LPCWSTR pszText, UINT uFlags);
+
+WINBOOL
+STDCALL
+GetOpenFileNameW(LPOPENFILENAME);
+
+WINBOOL
+STDCALL
+GetSaveFileNameW(LPOPENFILENAME);
+
+short
+STDCALL
+GetFileTitleW(LPCWSTR, LPWSTR, WORD);
+
+WINBOOL
+STDCALL
+ChooseColorW(LPCHOOSECOLOR);
+
+HWND
+STDCALL
+ReplaceTextW(LPFINDREPLACE);
+
+WINBOOL
+STDCALL
+ChooseFontW(LPCHOOSEFONT);
+
+HWND
+STDCALL
+FindTextW(LPFINDREPLACE);
+
+WINBOOL
+STDCALL
+PrintDlgW(LPPRINTDLG);
+
+WINBOOL
+STDCALL
+PageSetupDlgW(LPPAGESETUPDLG);
+
+WINBOOL
+STDCALL
+CreateProcessW(
+ LPCWSTR lpApplicationName,
+ LPWSTR lpCommandLine,
+ LPSECURITY_ATTRIBUTES lpProcessAttributes,
+ LPSECURITY_ATTRIBUTES lpThreadAttributes,
+ WINBOOL bInheritHandles,
+ DWORD dwCreationFlags,
+ LPVOID lpEnvironment,
+ LPCWSTR lpCurrentDirectory,
+ LPSTARTUPINFO lpStartupInfo,
+ LPPROCESS_INFORMATION lpProcessInformation
+ );
+
+VOID
+STDCALL
+GetStartupInfoW(
+ LPSTARTUPINFO lpStartupInfo
+ );
+
+HANDLE
+STDCALL
+FindFirstFileW(
+ LPCWSTR lpFileName,
+ LPWIN32_FIND_DATA lpFindFileData
+ );
+
+WINBOOL
+STDCALL
+FindNextFileW(
+ HANDLE hFindFile,
+ LPWIN32_FIND_DATA lpFindFileData
+ );
+
+WINBOOL
+STDCALL
+GetVersionExW(
+ LPOSVERSIONINFO lpVersionInformation
+ );
+
+#define CreateWindowW(lpClassName, lpWindowName, dwStyle, x, y,\
+nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam)\
+CreateWindowExW(0L, lpClassName, lpWindowName, dwStyle, x, y,\
+nWidth, nHeight, hWndParent, hMenu, hInstance, lpParam)
+
+#define CreateDialogW(hInstance, lpName, hWndParent, lpDialogFunc) \
+CreateDialogParamW(hInstance, lpName, hWndParent, lpDialogFunc, 0L)
+
+#define CreateDialogIndirectW(hInstance, lpTemplate, hWndParent, lpDialogFunc) \
+CreateDialogIndirectParamW(hInstance, lpTemplate, hWndParent, lpDialogFunc, 0L)
+
+#define DialogBoxW(hInstance, lpTemplate, hWndParent, lpDialogFunc) \
+DialogBoxParamW(hInstance, lpTemplate, hWndParent, lpDialogFunc, 0L)
+
+#define DialogBoxIndirectW(hInstance, lpTemplate, hWndParent, lpDialogFunc) \
+DialogBoxIndirectParamW(hInstance, lpTemplate, hWndParent, lpDialogFunc, 0L)
+
+HDC
+STDCALL
+CreateDCW(LPCWSTR, LPCWSTR , LPCWSTR , CONST DEVMODE *);
+
+HFONT
+STDCALL
+CreateFontA(int, int, int, int, int, DWORD,
+ DWORD, DWORD, DWORD, DWORD, DWORD,
+ DWORD, DWORD, LPCSTR);
+
+DWORD
+STDCALL
+VerInstallFileW(
+ DWORD uFlags,
+ LPWSTR szSrcFileName,
+ LPWSTR szDestFileName,
+ LPWSTR szSrcDir,
+ LPWSTR szDestDir,
+ LPWSTR szCurDir,
+ LPWSTR szTmpFile,
+ PUINT lpuTmpFileLen
+ );
+
+DWORD
+STDCALL
+GetFileVersionInfoSizeW(
+ LPWSTR lptstrFilename,
+ LPDWORD lpdwHandle
+ );
+
+WINBOOL
+STDCALL
+GetFileVersionInfoW(
+ LPWSTR lptstrFilename,
+ DWORD dwHandle,
+ DWORD dwLen,
+ LPVOID lpData
+ );
+
+DWORD
+STDCALL
+VerLanguageNameW(
+ DWORD wLang,
+ LPWSTR szLang,
+ DWORD nSize
+ );
+
+WINBOOL
+STDCALL
+VerQueryValueW(
+ const LPVOID pBlock,
+ LPWSTR lpSubBlock,
+ LPVOID * lplpBuffer,
+ PUINT puLen
+ );
+
+DWORD
+STDCALL
+VerFindFileW(
+ DWORD uFlags,
+ LPWSTR szFileName,
+ LPWSTR szWinDir,
+ LPWSTR szAppDir,
+ LPWSTR szCurDir,
+ PUINT lpuCurDirLen,
+ LPWSTR szDestDir,
+ PUINT lpuDestDirLen
+ );
+
+LONG
+STDCALL
+RegSetValueExW (
+ HKEY hKey,
+ LPCWSTR lpValueName,
+ DWORD Reserved,
+ DWORD dwType,
+ CONST BYTE* lpData,
+ DWORD cbData
+ );
+
+LONG
+STDCALL
+RegUnLoadKeyW (
+ HKEY hKey,
+ LPCWSTR lpSubKey
+ );
+
+WINBOOL
+STDCALL
+InitiateSystemShutdownW(
+ LPWSTR lpMachineName,
+ LPWSTR lpMessage,
+ DWORD dwTimeout,
+ WINBOOL bForceAppsClosed,
+ WINBOOL bRebootAfterShutdown
+ );
+
+WINBOOL
+STDCALL
+AbortSystemShutdownW(
+ LPWSTR lpMachineName
+ );
+
+LONG
+STDCALL
+RegRestoreKeyW (
+ HKEY hKey,
+ LPCWSTR lpFile,
+ DWORD dwFlags
+ );
+
+LONG
+STDCALL
+RegSaveKeyW (
+ HKEY hKey,
+ LPCWSTR lpFile,
+ LPSECURITY_ATTRIBUTES lpSecurityAttributes
+ );
+
+LONG
+STDCALL
+RegSetValueW (
+ HKEY hKey,
+ LPCWSTR lpSubKey,
+ DWORD dwType,
+ LPCWSTR lpData,
+ DWORD cbData
+ );
+
+LONG
+STDCALL
+RegQueryValueW (
+ HKEY hKey,
+ LPCWSTR lpSubKey,
+ LPWSTR lpValue,
+ PLONG lpcbValue
+ );
+
+LONG
+STDCALL
+RegQueryMultipleValuesW (
+ HKEY hKey,
+ PVALENT val_list,
+ DWORD num_vals,
+ LPWSTR lpValueBuf,
+ LPDWORD ldwTotsize
+ );
+
+LONG
+STDCALL
+RegQueryValueExW (
+ HKEY hKey,
+ LPCWSTR lpValueName,
+ LPDWORD lpReserved,
+ LPDWORD lpType,
+ LPBYTE lpData,
+ LPDWORD lpcbData
+ );
+
+LONG
+STDCALL
+RegReplaceKeyW (
+ HKEY hKey,
+ LPCWSTR lpSubKey,
+ LPCWSTR lpNewFile,
+ LPCWSTR lpOldFile
+ );
+
+LONG
+STDCALL
+RegConnectRegistryW (
+ LPWSTR lpMachineName,
+ HKEY hKey,
+ PHKEY phkResult
+ );
+
+LONG
+STDCALL
+RegCreateKeyW (
+ HKEY hKey,
+ LPCWSTR lpSubKey,
+ PHKEY phkResult
+ );
+
+LONG
+STDCALL
+RegCreateKeyExW (
+ HKEY hKey,
+ LPCWSTR lpSubKey,
+ DWORD Reserved,
+ LPWSTR lpClass,
+ DWORD dwOptions,
+ REGSAM samDesired,
+ LPSECURITY_ATTRIBUTES lpSecurityAttributes,
+ PHKEY phkResult,
+ LPDWORD lpdwDisposition
+ );
+
+LONG
+STDCALL
+RegDeleteKeyW (
+ HKEY hKey,
+ LPCWSTR lpSubKey
+ );
+
+LONG
+STDCALL
+RegDeleteValueW (
+ HKEY hKey,
+ LPCWSTR lpValueName
+ );
+
+LONG
+STDCALL
+RegEnumKeyW (
+ HKEY hKey,
+ DWORD dwIndex,
+ LPWSTR lpName,
+ DWORD cbName
+ );
+
+LONG
+STDCALL
+RegEnumKeyExW (
+ HKEY hKey,
+ DWORD dwIndex,
+ LPWSTR lpName,
+ LPDWORD lpcbName,
+ LPDWORD lpReserved,
+ LPWSTR lpClass,
+ LPDWORD lpcbClass,
+ PFILETIME lpftLastWriteTime
+ );
+
+LONG
+STDCALL
+RegEnumValueW (
+ HKEY hKey,
+ DWORD dwIndex,
+ LPWSTR lpValueName,
+ LPDWORD lpcbValueName,
+ LPDWORD lpReserved,
+ LPDWORD lpType,
+ LPBYTE lpData,
+ LPDWORD lpcbData
+ );
+
+LONG
+STDCALL
+RegLoadKeyW (
+ HKEY hKey,
+ LPCWSTR lpSubKey,
+ LPCWSTR lpFile
+ );
+
+LONG
+STDCALL
+RegOpenKeyW (
+ HKEY hKey,
+ LPCWSTR lpSubKey,
+ PHKEY phkResult
+ );
+
+LONG
+STDCALL
+RegOpenKeyExW (
+ HKEY hKey,
+ LPCWSTR lpSubKey,
+ DWORD ulOptions,
+ REGSAM samDesired,
+ PHKEY phkResult
+ );
+
+LONG
+STDCALL
+RegQueryInfoKeyW (
+ HKEY hKey,
+ LPWSTR lpClass,
+ LPDWORD lpcbClass,
+ LPDWORD lpReserved,
+ LPDWORD lpcSubKeys,
+ LPDWORD lpcbMaxSubKeyLen,
+ LPDWORD lpcbMaxClassLen,
+ LPDWORD lpcValues,
+ LPDWORD lpcbMaxValueNameLen,
+ LPDWORD lpcbMaxValueLen,
+ LPDWORD lpcbSecurityDescriptor,
+ PFILETIME lpftLastWriteTime
+ );
+
+int
+STDCALL
+CompareStringW(
+ LCID Locale,
+ DWORD dwCmpFlags,
+ LPCWSTR lpString1,
+ int cchCount1,
+ LPCWSTR lpString2,
+ int cchCount2);
+
+int
+STDCALL
+LCMapStringW(
+ LCID Locale,
+ DWORD dwMapFlags,
+ LPCWSTR lpSrcStr,
+ int cchSrc,
+ LPWSTR lpDestStr,
+ int cchDest);
+
+
+int
+STDCALL
+GetLocaleInfoW(
+ LCID Locale,
+ LCTYPE LCType,
+ LPWSTR lpLCData,
+ int cchData);
+
+WINBOOL
+STDCALL
+SetLocaleInfoW(
+ LCID Locale,
+ LCTYPE LCType,
+ LPCWSTR lpLCData);
+
+int
+STDCALL
+GetTimeFormatW(
+ LCID Locale,
+ DWORD dwFlags,
+ CONST SYSTEMTIME *lpTime,
+ LPCWSTR lpFormat,
+ LPWSTR lpTimeStr,
+ int cchTime);
+
+int
+STDCALL
+GetDateFormatW(
+ LCID Locale,
+ DWORD dwFlags,
+ CONST SYSTEMTIME *lpDate,
+ LPCWSTR lpFormat,
+ LPWSTR lpDateStr,
+ int cchDate);
+
+int
+STDCALL
+GetNumberFormatW(
+ LCID Locale,
+ DWORD dwFlags,
+ LPCWSTR lpValue,
+ CONST NUMBERFMT *lpFormat,
+ LPWSTR lpNumberStr,
+ int cchNumber);
+
+int
+STDCALL
+GetCurrencyFormatW(
+ LCID Locale,
+ DWORD dwFlags,
+ LPCWSTR lpValue,
+ CONST CURRENCYFMT *lpFormat,
+ LPWSTR lpCurrencyStr,
+ int cchCurrency);
+
+WINBOOL
+STDCALL
+EnumCalendarInfoW(
+ CALINFO_ENUMPROC lpCalInfoEnumProc,
+ LCID Locale,
+ CALID Calendar,
+ CALTYPE CalType);
+
+WINBOOL
+STDCALL
+EnumTimeFormatsW(
+ TIMEFMT_ENUMPROC lpTimeFmtEnumProc,
+ LCID Locale,
+ DWORD dwFlags);
+
+WINBOOL
+STDCALL
+EnumDateFormatsW(
+ DATEFMT_ENUMPROC lpDateFmtEnumProc,
+ LCID Locale,
+ DWORD dwFlags);
+
+WINBOOL
+STDCALL
+GetStringTypeExW(
+ LCID Locale,
+ DWORD dwInfoType,
+ LPCWSTR lpSrcStr,
+ int cchSrc,
+ LPWORD lpCharType);
+
+WINBOOL
+STDCALL
+GetStringTypeW(
+ DWORD dwInfoType,
+ LPCWSTR lpSrcStr,
+ int cchSrc,
+ LPWORD lpCharType);
+
+int
+STDCALL
+FoldStringW(
+ DWORD dwMapFlags,
+ LPCWSTR lpSrcStr,
+ int cchSrc,
+ LPWSTR lpDestStr,
+ int cchDest);
+
+WINBOOL
+STDCALL
+EnumSystemLocalesW(
+ LOCALE_ENUMPROC lpLocaleEnumProc,
+ DWORD dwFlags);
+
+WINBOOL
+STDCALL
+EnumSystemCodePagesW(
+ CODEPAGE_ENUMPROC lpCodePageEnumProc,
+ DWORD dwFlags);
+
+WINBOOL
+STDCALL
+PeekConsoleInputW(
+ HANDLE hConsoleInput,
+ PINPUT_RECORD lpBuffer,
+ DWORD nLength,
+ LPDWORD lpNumberOfEventsRead
+ );
+
+WINBOOL
+STDCALL
+ReadConsoleInputW(
+ HANDLE hConsoleInput,
+ PINPUT_RECORD lpBuffer,
+ DWORD nLength,
+ LPDWORD lpNumberOfEventsRead
+ );
+
+WINBOOL
+STDCALL
+WriteConsoleInputW(
+ HANDLE hConsoleInput,
+ CONST INPUT_RECORD *lpBuffer,
+ DWORD nLength,
+ LPDWORD lpNumberOfEventsWritten
+ );
+
+WINBOOL
+STDCALL
+ReadConsoleOutputW(
+ HANDLE hConsoleOutput,
+ PCHAR_INFO lpBuffer,
+ COORD dwBufferSize,
+ COORD dwBufferCoord,
+ PSMALL_RECT lpReadRegion
+ );
+
+WINBOOL
+STDCALL
+WriteConsoleOutputW(
+ HANDLE hConsoleOutput,
+ CONST CHAR_INFO *lpBuffer,
+ COORD dwBufferSize,
+ COORD dwBufferCoord,
+ PSMALL_RECT lpWriteRegion
+ );
+
+WINBOOL
+STDCALL
+ReadConsoleOutputCharacterW(
+ HANDLE hConsoleOutput,
+ LPWSTR lpCharacter,
+ DWORD nLength,
+ COORD dwReadCoord,
+ LPDWORD lpNumberOfCharsRead
+ );
+
+WINBOOL
+STDCALL
+WriteConsoleOutputCharacterW(
+ HANDLE hConsoleOutput,
+ LPCWSTR lpCharacter,
+ DWORD nLength,
+ COORD dwWriteCoord,
+ LPDWORD lpNumberOfCharsWritten
+ );
+
+WINBOOL
+STDCALL
+FillConsoleOutputCharacterW(
+ HANDLE hConsoleOutput,
+ WCHAR cCharacter,
+ DWORD nLength,
+ COORD dwWriteCoord,
+ LPDWORD lpNumberOfCharsWritten
+ );
+
+WINBOOL
+STDCALL
+ScrollConsoleScreenBufferW(
+ HANDLE hConsoleOutput,
+ CONST SMALL_RECT *lpScrollRectangle,
+ CONST SMALL_RECT *lpClipRectangle,
+ COORD dwDestinationOrigin,
+ CONST CHAR_INFO *lpFill
+ );
+
+DWORD
+STDCALL
+GetConsoleTitleW(
+ LPWSTR lpConsoleTitle,
+ DWORD nSize
+ );
+
+WINBOOL
+STDCALL
+SetConsoleTitleW(
+ LPCWSTR lpConsoleTitle
+ );
+
+WINBOOL
+STDCALL
+ReadConsoleW(
+ HANDLE hConsoleInput,
+ LPVOID lpBuffer,
+ DWORD nNumberOfCharsToRead,
+ LPDWORD lpNumberOfCharsRead,
+ LPVOID lpReserved
+ );
+
+WINBOOL
+STDCALL
+WriteConsoleW(
+ HANDLE hConsoleOutput,
+ CONST VOID *lpBuffer,
+ DWORD nNumberOfCharsToWrite,
+ LPDWORD lpNumberOfCharsWritten,
+ LPVOID lpReserved
+ );
+
+DWORD STDCALL
+WNetAddConnectionW(
+ LPCWSTR lpRemoteName,
+ LPCWSTR lpPassword,
+ LPCWSTR lpLocalName
+ );
+
+DWORD STDCALL
+WNetAddConnection2W(
+ LPNETRESOURCE lpNetResource,
+ LPCWSTR lpPassword,
+ LPCWSTR lpUserName,
+ DWORD dwFlags
+ );
+
+DWORD STDCALL
+WNetAddConnection3W(
+ HWND hwndOwner,
+ LPNETRESOURCE lpNetResource,
+ LPCWSTR lpPassword,
+ LPCWSTR lpUserName,
+ DWORD dwFlags
+ );
+
+DWORD STDCALL
+WNetCancelConnectionW(
+ LPCWSTR lpName,
+ WINBOOL fForce
+ );
+
+DWORD STDCALL
+WNetCancelConnection2W(
+ LPCWSTR lpName,
+ DWORD dwFlags,
+ WINBOOL fForce
+ );
+
+DWORD STDCALL
+WNetGetConnectionW(
+ LPCWSTR lpLocalName,
+ LPWSTR lpRemoteName,
+ LPDWORD lpnLength
+ );
+
+DWORD STDCALL
+WNetUseConnectionW(
+ HWND hwndOwner,
+ LPNETRESOURCE lpNetResource,
+ LPCWSTR lpUserID,
+ LPCWSTR lpPassword,
+ DWORD dwFlags,
+ LPWSTR lpAccessName,
+ LPDWORD lpBufferSize,
+ LPDWORD lpResult
+ );
+
+DWORD STDCALL
+WNetSetConnectionW(
+ LPCWSTR lpName,
+ DWORD dwProperties,
+ LPVOID pvValues
+ );
+
+DWORD STDCALL
+WNetConnectionDialog1W(
+ LPCONNECTDLGSTRUCT lpConnDlgStruct
+ );
+
+DWORD STDCALL
+WNetDisconnectDialog1W(
+ LPDISCDLGSTRUCT lpConnDlgStruct
+ );
+
+DWORD STDCALL
+WNetOpenEnumW(
+ DWORD dwScope,
+ DWORD dwType,
+ DWORD dwUsage,
+ LPNETRESOURCE lpNetResource,
+ LPHANDLE lphEnum
+ );
+
+DWORD STDCALL
+WNetEnumResourceW(
+ HANDLE hEnum,
+ LPDWORD lpcCount,
+ LPVOID lpBuffer,
+ LPDWORD lpBufferSize
+ );
+
+DWORD STDCALL
+WNetGetUniversalNameW(
+ LPCWSTR lpLocalPath,
+ DWORD dwInfoLevel,
+ LPVOID lpBuffer,
+ LPDWORD lpBufferSize
+ );
+
+DWORD STDCALL
+WNetGetUserW(
+ LPCWSTR lpName,
+ LPWSTR lpUserName,
+ LPDWORD lpnLength
+ );
+
+DWORD STDCALL
+WNetGetProviderNameW(
+ DWORD dwNetType,
+ LPWSTR lpProviderName,
+ LPDWORD lpBufferSize
+ );
+
+DWORD STDCALL
+WNetGetNetworkInformationW(
+ LPCWSTR lpProvider,
+ LPNETINFOSTRUCT lpNetInfoStruct
+ );
+
+DWORD STDCALL
+WNetGetLastErrorW(
+ LPDWORD lpError,
+ LPWSTR lpErrorBuf,
+ DWORD nErrorBufSize,
+ LPWSTR lpNameBuf,
+ DWORD nNameBufSize
+ );
+
+DWORD STDCALL
+MultinetGetConnectionPerformanceW(
+ LPNETRESOURCE lpNetResource,
+ LPNETCONNECTINFOSTRUCT lpNetConnectInfoStruct
+ );
+
+WINBOOL
+STDCALL
+ChangeServiceConfigW(
+ SC_HANDLE hService,
+ DWORD dwServiceType,
+ DWORD dwStartType,
+ DWORD dwErrorControl,
+ LPCWSTR lpBinaryPathName,
+ LPCWSTR lpLoadOrderGroup,
+ LPDWORD lpdwTagId,
+ LPCWSTR lpDependencies,
+ LPCWSTR lpServiceStartName,
+ LPCWSTR lpPassword,
+ LPCWSTR lpDisplayName
+ );
+
+SC_HANDLE
+STDCALL
+CreateServiceW(
+ SC_HANDLE hSCManager,
+ LPCWSTR lpServiceName,
+ LPCWSTR lpDisplayName,
+ DWORD dwDesiredAccess,
+ DWORD dwServiceType,
+ DWORD dwStartType,
+ DWORD dwErrorControl,
+ LPCWSTR lpBinaryPathName,
+ LPCWSTR lpLoadOrderGroup,
+ LPDWORD lpdwTagId,
+ LPCWSTR lpDependencies,
+ LPCWSTR lpServiceStartName,
+ LPCWSTR lpPassword
+ );
+
+WINBOOL
+STDCALL
+EnumDependentServicesW(
+ SC_HANDLE hService,
+ DWORD dwServiceState,
+ LPENUM_SERVICE_STATUS lpServices,
+ DWORD cbBufSize,
+ LPDWORD pcbBytesNeeded,
+ LPDWORD lpServicesReturned
+ );
+
+WINBOOL
+STDCALL
+EnumServicesStatusW(
+ SC_HANDLE hSCManager,
+ DWORD dwServiceType,
+ DWORD dwServiceState,
+ LPENUM_SERVICE_STATUS lpServices,
+ DWORD cbBufSize,
+ LPDWORD pcbBytesNeeded,
+ LPDWORD lpServicesReturned,
+ LPDWORD lpResumeHandle
+ );
+
+WINBOOL
+STDCALL
+GetServiceKeyNameW(
+ SC_HANDLE hSCManager,
+ LPCWSTR lpDisplayName,
+ LPWSTR lpServiceName,
+ LPDWORD lpcchBuffer
+ );
+
+WINBOOL
+STDCALL
+GetServiceDisplayNameW(
+ SC_HANDLE hSCManager,
+ LPCWSTR lpServiceName,
+ LPWSTR lpDisplayName,
+ LPDWORD lpcchBuffer
+ );
+
+SC_HANDLE
+STDCALL
+OpenSCManagerW(
+ LPCWSTR lpMachineName,
+ LPCWSTR lpDatabaseName,
+ DWORD dwDesiredAccess
+ );
+
+SC_HANDLE
+STDCALL
+OpenServiceW(
+ SC_HANDLE hSCManager,
+ LPCWSTR lpServiceName,
+ DWORD dwDesiredAccess
+ );
+
+WINBOOL
+STDCALL
+QueryServiceConfigW(
+ SC_HANDLE hService,
+ LPQUERY_SERVICE_CONFIG lpServiceConfig,
+ DWORD cbBufSize,
+ LPDWORD pcbBytesNeeded
+ );
+
+WINBOOL
+STDCALL
+QueryServiceLockStatusW(
+ SC_HANDLE hSCManager,
+ LPQUERY_SERVICE_LOCK_STATUS lpLockStatus,
+ DWORD cbBufSize,
+ LPDWORD pcbBytesNeeded
+ );
+
+SERVICE_STATUS_HANDLE
+STDCALL
+RegisterServiceCtrlHandlerW(
+ LPCWSTR lpServiceName,
+ LPHANDLER_FUNCTION lpHandlerProc
+ );
+
+WINBOOL
+STDCALL
+StartServiceCtrlDispatcherW(
+ LPSERVICE_TABLE_ENTRY lpServiceStartTable
+ );
+
+WINBOOL
+STDCALL
+StartServiceW(
+ SC_HANDLE hService,
+ DWORD dwNumServiceArgs,
+ LPCWSTR *lpServiceArgVectors
+ );
+
+/* Extensions to OpenGL */
+
+WINBOOL STDCALL
+wglUseFontBitmapsW(HDC, DWORD, DWORD, DWORD);
+
+WINBOOL STDCALL
+wglUseFontOutlinesW(HDC, DWORD, DWORD, DWORD, FLOAT,
+ FLOAT, int, LPGLYPHMETRICSFLOAT);
+
+/* ------------------------------------- */
+/* From shellapi.h in old Cygnus headers */
+
+unsigned int WINAPI
+DragQueryFileW(HDROP, unsigned int, LPCWSTR, unsigned int);
+
+HICON WINAPI
+ExtractAssociatedIconW (HINSTANCE, LPCWSTR, WORD *);
+
+HICON WINAPI
+ExtractIconW (HINSTANCE, const LPCWSTR, unsigned int);
+
+HINSTANCE WINAPI
+FindExecutableW (const LPCWSTR, const LPCWSTR, LPCWSTR);
+
+int WINAPI
+ShellAboutW (HWND, const LPCWSTR, const LPCWSTR, HICON);
+
+HINSTANCE WINAPI
+ShellExecuteW (HWND, const LPCWSTR, const LPCWSTR, LPCWSTR, const LPCWSTR, int);
+
+/* end of stuff from shellapi.h in old Cygnus headers */
+/* -------------------------------------------------- */
+/* From ddeml.h in old Cygnus headers */
+
+HSZ WINAPI
+DdeCreateStringHandleW (DWORD, LPCWSTR, int);
+
+UINT WINAPI
+DdeInitializeW (DWORD *, CALLB, DWORD, DWORD);
+
+DWORD WINAPI
+DdeQueryStringW (DWORD, HSZ, LPCWSTR, DWORD, int);
+
+/* 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, STARTUPINFO*,
+ PROCESS_INFORMATION*);
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* _GNU_H_WINDOWS32_UNICODEFUNCTIONS */
--- /dev/null
+/* \r
+ windows.h\r
+\r
+ Include this file if you wish to use the Windows32 API Library\r
+\r
+ Copyright (C) 1996 Free Software Foundation\r
+\r
+ Author: Scott Christley <scottc@net-community.com>\r
+ Date: 1996\r
+ \r
+ This file is part of the Windows32 API Library.\r
+\r
+ This library is free software; you can redistribute it and/or\r
+ modify it under the terms of the GNU Library General Public\r
+ License as published by the Free Software Foundation; either\r
+ version 2 of the License, or (at your option) any later version.\r
+ \r
+ This library is distributed in the hope that it will be useful,\r
+ but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\r
+ Library General Public License for more details.\r
+\r
+ If you are interested in a warranty or support for this source code,\r
+ contact Scott Christley <scottc@net-community.com> for more information.\r
+ \r
+ You should have received a copy of the GNU Library General Public\r
+ License along with this library; see the file COPYING.LIB.\r
+ If not, write to the Free Software Foundation, \r
+ 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.\r
+*/ \r
+\r
+#ifndef _GNU_H_WINDOWS_H\r
+#define _GNU_H_WINDOWS_H\r
+\r
+#ifndef RC_INVOKED\r
+#include <limits.h>\r
+#include <stdarg.h>\r
+#endif\r
+\r
+/* Base definitions */\r
+#include <base.h>\r
+\r
+/* WIN32 messages */\r
+#include <messages.h>\r
+\r
+/* WIN32 definitions */\r
+#include <defines.h>\r
+\r
+#ifndef RC_INVOKED\r
+\r
+/* WIN32 structures */\r
+#include <structs.h>\r
+\r
+/* WIN32 functions */\r
+#include <funcs.h>\r
+\r
+#endif /* ! defined (RC_INVOKED) */\r
+\r
+/* WIN32 error codes */\r
+#include <errors.h>\r
+\r
+#ifndef RC_INVOKED\r
+\r
+/* Windows sockets specification version 1.1 */\r
+#ifdef Win32_Winsock\r
+#include <sockets.h>\r
+#endif\r
+\r
+/* There is a conflict with BOOL between Objective-C and Win32,\r
+ so the Windows32 API Library defines and uses WINBOOL.\r
+ However, if we are not using Objective-C then define the normal\r
+ windows BOOL so Win32 programs compile normally. If you are\r
+ using Objective-C then you must use WINBOOL for Win32 operations.\r
+*/\r
+#ifndef __OBJC__\r
+typedef WINBOOL BOOL;\r
+#endif /* !__OBJC__ */\r
+\r
+/* How do we get the VM page size on NT? */\r
+#ifndef vm_page_size\r
+#define vm_page_size 4096\r
+#endif\r
+\r
+#endif /* ! defined (RC_INVOKED) */\r
+\r
+#endif /* _GNU_H_WINDOWS_H */\r
--- /dev/null
+/*
+ * Adapted from linux for the reactos kernel, march 1998 -- David Welch
+ * Added wide character string functions, june 1998 -- Boudewijn Dekker
+ * Removed extern specifier from ___wcstok, june 1998 -- Boudewijn Dekker
+ * Added wcsicmp and wcsnicmp -- Boudewijn Dekker
+ */
+
+#ifndef _LINUX_WSTRING_H_
+#define _LINUX_WSTRING_H_
+
+#include <types.h> /* for size_t */
+
+#ifndef NULL
+#define NULL ((void *) 0)
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+wchar_t * ___wcstok;
+extern wchar_t * wcscpy(wchar_t *,const wchar_t *);
+extern wchar_t * wcsncpy(wchar_t *,const wchar_t *, __kernel_size_t);
+extern wchar_t * wcscat(wchar_t *, const wchar_t *);
+extern wchar_t * wcsncat(wchar_t *, const wchar_t *, __kernel_size_t);
+extern int wcscmp(const wchar_t *,const wchar_t *);
+extern int wcsncmp(const wchar_t *,const wchar_t *,__kernel_size_t);
+extern wchar_t * wcschr(const wchar_t *,int);
+extern wchar_t * wcsrchr(const wchar_t *,int);
+extern wchar_t * wcspbrk(const wchar_t *,const wchar_t *);
+extern wchar_t * wcstok(wchar_t *,const wchar_t *);
+extern wchar_t * wcsstr(const wchar_t *,const wchar_t *);
+extern size_t wcsnlen(const wchar_t * s, size_t count);
+extern int wcsicmp(const wchar_t* cs,const wchar_t * ct);
+extern int wcsnicmp(const wchar_t* cs,const wchar_t * ct, size_t count);
+
+
+/*
+ * Include machine specific inline routines
+ */
+#ifndef _I386_STRING_H_
+#define _I386_STRING_H_
+
+/*
+ * On a 486 or Pentium, we are better off not using the
+ * byte string operations. But on a 386 or a PPro the
+ * byte string ops are faster than doing it by hand
+ * (MUCH faster on a Pentium).
+ *
+ * Also, the byte strings actually work correctly. Forget
+ * the i486 routines for now as they may be broken..
+ */
+
+#if FIXED_486_STRING && (CPU == 486 || CPU == 586)
+ #include <asm/string-486.h>
+#else
+
+/*
+ * This string-include defines all string functions as inline
+ * functions. Use gcc. It also assumes ds=es=data space, this should be
+ * normal. Most of the string-functions are rather heavily hand-optimized,
+ * see especially wcstok,wcsstr,wcs[c]spn. They should work, but are not
+ * very easy to understand. Everything is done entirely within the register
+ * set, making the functions fast and clean. String instructions have been
+ * used through-out, making for "slightly" unclear code :-)
+ *
+ * Copyright (C) 1991, 1992 Linus Torvalds
+ */
+
+
+
+#define __HAVE_ARCH_WCSCPY
+inline wchar_t * wcscpy(wchar_t * dest,const wchar_t *src)
+{
+__asm__ __volatile__(
+ "cld\n"
+ "1:\tlodsw\n\t"
+ "stosw\n\t"
+ "testw %%eax,%%eax\n\t"
+ "jne 1b"
+ : /* no output */
+ :"S" (src),"D" (dest):"esi","edi","eax","memory");
+return dest;
+}
+
+#define __HAVE_ARCH_WCSNCPY
+inline wchar_t * wcsncpy(wchar_t * dest,const wchar_t *src,size_t count)
+{
+__asm__ __volatile__(
+ "cld\n"
+ "1:\tdecl %2\n\t"
+ "js 2f\n\t"
+ "lodsw\n\t"
+ "stosw\n\t"
+ "testw %%eax,%%eax\n\t"
+ "jne 1b\n\t"
+ "rep\n\t"
+ "stosw\n"
+ "2:"
+ : /* no output */
+ :"S" (src),"D" (dest),"c" (count):"esi","edi","eax","ecx","memory");
+return dest;
+}
+
+#define __HAVE_ARCH_WCSCAT
+inline wchar_t * wcscat(wchar_t * dest,const wchar_t * src)
+{
+__asm__ __volatile__(
+ "cld\n\t"
+ "repnz\n\t"
+ "scasw\n\t"
+ "decl %1\n"
+ "decl %1\n\t"
+ "1:\tlodsw\n\t"
+ "stosw\n\t"
+ "testw %%eax,%%eax\n\t"
+ "jne 1b"
+ : /* no output */
+ :"S" (src),"D" (dest),"a" (0),"c" (0xffffffff):"esi","edi","eax","ecx");
+return dest;
+}
+
+#define __HAVE_ARCH_WCSNCAT
+inline wchar_t * wcsncat(wchar_t * dest,const wchar_t * src,size_t count)
+{
+__asm__ __volatile__(
+ "cld\n\t"
+ "repnz\n\t"
+ "scasw\n\t"
+ "decl %1\n\t"
+ "movl %4,%3\n"
+ "decl %1\n\t"
+ "1:\tdecl %3\n\t"
+ "js 2f\n\t"
+ "lodsw\n\t"
+ "stosw\n\t"
+ "testw %%eax,%%eax\n\t"
+ "jne 1b\n"
+ "2:\txorl %2,%2\n\t"
+ "stosw"
+ : /* no output */
+ :"S" (src),"D" (dest),"a" (0),"c" (0xffffffff),"g" (count)
+ :"esi","edi","eax","ecx","memory");
+return dest;
+}
+
+#define __HAVE_ARCH_WCSCMP
+inline int wcscmp(const wchar_t* cs,const wchar_t * ct)
+{
+register int __res;
+__asm__ __volatile__(
+ "cld\n"
+ "1:\tlodsw\n\t"
+ "scasw\n\t"
+ "jne 2f\n\t"
+ "testw %%eax,%%eax\n\t"
+ "jne 1b\n\t"
+ "xorl %%eax,%%eax\n\t"
+ "jmp 3f\n"
+ "2:\tsbbl %%eax,%%eax\n\t"
+ "orw $1,%%eax\n"
+ "3:"
+ :"=a" (__res):"S" (cs),"D" (ct):"esi","edi");
+return __res;
+}
+
+#define __HAVE_ARCH_WCSNCMP
+inline int wcsncmp(const wchar_t * cs,const wchar_t * ct,size_t count)
+{
+register int __res;
+__asm__ __volatile__(
+ "cld\n"
+ "1:\tdecl %3\n\t"
+ "js 2f\n\t"
+ "lodsw\n\t"
+ "scasw\n\t"
+ "jne 3f\n\t"
+ "testw %%eax,%%eax\n\t"
+ "jne 1b\n"
+ "2:\txorl %%eax,%%eax\n\t"
+ "jmp 4f\n"
+ "3:\tsbbl %%eax,%%eax\n\t"
+ "orw $1,%%eax\n"
+ "4:"
+ :"=a" (__res):"S" (cs),"D" (ct),"c" (count):"esi","edi","ecx");
+return __res;
+}
+
+#define __HAVE_ARCH_WCSCHR
+inline wchar_t * wcschr(const wchar_t * s, int c)
+{
+register wchar_t * __res;
+__asm__ __volatile__(
+ "cld\n\t"
+ "movw %%eax,%%edx\n"
+ "1:\tlodsw\n\t"
+ "cmpw %%edx,%%eax\n\t"
+ "je 2f\n\t"
+ "testw %%eax,%%eax\n\t"
+ "jne 1b\n\t"
+ "movl $1,%1\n"
+ "2:\tmovl %1,%0\n\t"
+ "decl %0\n\t"
+ "decl %0\n\t"
+ :"=a" (__res):"S" (s),"0" (c):"esi");
+return __res;
+}
+
+#define __HAVE_ARCH_WCSRCHR
+inline wchar_t * wcsrchr(const wchar_t * s, int c)
+{
+register wchar_t * __res;
+__asm__ __volatile__(
+ "cld\n\t"
+ "movw %%eax,%%edx\n"
+ "1:\tlodsw\n\t"
+ "cmpw %%edx,%%eax\n\t"
+ "jne 2f\n\t"
+ "leal -2(%%esi),%0\n"
+ "2:\ttestw %%eax,%%eax\n\t"
+ "jne 1b"
+ :"=d" (__res):"0" (0),"S" (s),"a" (c):"eax","esi");
+return __res;
+}
+
+#define __HAVE_ARCH_WCSSPN
+inline size_t wcsspn(const wchar_t * cs, const wchar_t * ct)
+{
+register wchar_t * __res;
+__asm__ __volatile__(
+ "cld\n\t"
+ "movl %4,%%edi\n\t"
+ "repne\n\t"
+ "scasw\n\t"
+ "notl %%ecx\n\t"
+ "decl %%ecx\n\t"
+ "movl %%ecx,%%edx\n"
+ "1:\tlodsw\n\t"
+ "testw %%eax,%%eax\n\t"
+ "je 2f\n\t"
+ "movl %4,%%edi\n\t"
+ "movl %%edx,%%ecx\n\t"
+ "repne\n\t"
+ "scasb\n\t"
+ "je 1b\n"
+ "2:\tdecl %0"
+ :"=S" (__res):"a" (0),"c" (0xffffffff),"0" (cs),"g" (ct)
+ :"eax","ecx","edx","edi");
+return __res-cs;
+}
+
+#define __HAVE_ARCH_WCSCSPN
+inline size_t wcscspn(const wchar_t * cs, const wchar_t * ct)
+{
+register wchar_t * __res;
+__asm__ __volatile__(
+ "cld\n\t"
+ "movl %4,%%edi\n\t"
+ "repne\n\t"
+ "scasw\n\t"
+ "notl %%ecx\n\t"
+ "decl %%ecx\n\t"
+ "movl %%ecx,%%edx\n"
+ "1:\tlodsw\n\t"
+ "testw %%eax,%%eax\n\t"
+ "je 2f\n\t"
+ "movl %4,%%edi\n\t"
+ "movl %%edx,%%ecx\n\t"
+ "repne\n\t"
+ "scasw\n\t"
+ "jne 1b\n"
+ "2:\tdecl %0"
+ :"=S" (__res):"a" (0),"c" (0xffffffff),"0" (cs),"g" (ct)
+ :"eax","ecx","edx","edi");
+return __res-cs;
+}
+
+#define __HAVE_ARCH_STRPBRK
+inline wchar_t * wcspbrk(const wchar_t * cs,const wchar_t * ct)
+{
+register wchar_t * __res;
+__asm__ __volatile__(
+ "cld\n\t"
+ "movl %4,%%edi\n\t"
+ "repne\n\t"
+ "scasw\n\t"
+ "notl %%ecx\n\t"
+ "decl %%ecx\n\t"
+ "movl %%ecx,%%edx\n"
+ "1:\tlodsw\n\t"
+ "testw %%eax,%%eax\n\t"
+ "je 2f\n\t"
+ "movl %4,%%edi\n\t"
+ "movl %%edx,%%ecx\n\t"
+ "repne\n\t"
+ "scasw\n\t"
+ "jne 1b\n\t"
+ "decl %0\n\t"
+ "jmp 3f\n"
+ "2:\txorl %0,%0\n"
+ "3:"
+ :"=S" (__res):"a" (0),"c" (0xffffffff),"0" (cs),"g" (ct)
+ :"eax","ecx","edx","edi");
+return __res;
+}
+
+#define __HAVE_ARCH_WCSSTR
+inline wchar_t * wcsstr(const wchar_t * cs,const wchar_t * ct)
+{
+register wchar_t * __res;
+__asm__ __volatile__(
+ "cld\n\t" \
+ "movl %4,%%edi\n\t"
+ "repne\n\t"
+ "scasw\n\t"
+ "notl %%ecx\n\t"
+ "decl %%ecx\n\t" /* NOTE! This also sets Z if searchstring='' */
+ "movl %%ecx,%%edx\n"
+ "1:\tmovl %4,%%edi\n\t"
+ "movl %%esi,%%eax\n\t"
+ "movl %%edx,%%ecx\n\t"
+ "repe\n\t"
+ "cmpsw\n\t"
+ "je 2f\n\t" /* also works for empty string, see above */
+ "xchgl %%eax,%%esi\n\t"
+ "incl %%esi\n\t"
+ "cmpw $0,-1(%%eax)\n\t"
+ "jne 1b\n\t"
+ "xorl %%eax,%%eax\n\t"
+ "2:"
+ :"=a" (__res):"0" (0),"c" (0xffffffff),"S" (cs),"g" (ct)
+ :"ecx","edx","edi","esi");
+return __res;
+}
+
+
+#define __HAVE_ARCH_WCSLEN
+inline size_t wcslen(const wchar_t * s)
+{
+register int __res;
+__asm__ __volatile__(
+ "cld\n\t"
+ "repne\n\t"
+ "scasw\n\t"
+ "notl %0\n\t"
+ "decl %0"
+ :"=c" (__res):"D" (s),"a" (0),"0" (0xffffffff):"edi");
+return __res;
+}
+
+
+
+#define __HAVE_ARCH_WCSTOK
+
+
+inline wchar_t * wcstok(wchar_t * s,const wchar_t * ct)
+{
+
+register wchar_t * __res;
+__asm__ __volatile__(
+ "testl %1,%1\n\t"
+ "jne 1f\n\t"
+ "testl %0,%0\n\t"
+ "je 8f\n\t"
+ "movl %0,%1\n"
+ "1:\txorl %0,%0\n\t"
+ "movl $-1,%%ecx\n\t"
+ "xorl %%eax,%%eax\n\t"
+ "cld\n\t"
+ "movl %4,%%edi\n\t"
+ "repnz\n\t"
+ "scasw\n\t"
+ "notl %%ecx\n\t"
+ "decl %%ecx\n\t"
+ "decl %%ecx\n\t"
+ "je 7f\n\t" /* empty delimiter-string */
+ "movl %%ecx,%%edx\n"
+ "2:\tlodsw\n\t"
+ "testw %%eax,%%eax\n\t"
+ "je 7f\n\t"
+ "movl %4,%%edi\n\t"
+ "movl %%edx,%%ecx\n\t"
+ "repne\n\t"
+ "scasw\n\t"
+ "je 2b\n\t"
+ "decl %1\n\t"
+ "decl %1\n\t"
+ "cmpw $0,(%1)\n\t"
+ "je 7f\n\t"
+ "movl %1,%0\n"
+ "3:\tlodsw\n\t"
+ "testw %%eax,%%eax\n\t"
+ "je 5f\n\t"
+ "movl %4,%%edi\n\t"
+ "movl %%edx,%%ecx\n\t"
+ "repne\n\t"
+ "scasw\n\t"
+ "jne 3b\n\t"
+ "decl %1\n\t"
+ "decl %1\n\t"
+ "decl %1\n\t"
+ "decl %1\n\t"
+ "cmpw $0,(%1)\n\t"
+ "je 5f\n\t"
+ "movw $0,(%1)\n\t"
+ "incl %1\n\t"
+ "incl %1\n\t"
+ "jmp 6f\n"
+ "5:\txorl %1,%1\n"
+ "6:\tcmpw $0,(%0)\n\t"
+ "jne 7f\n\t"
+ "xorl %0,%0\n"
+ "7:\ttestl %0,%0\n\t"
+ "jne 8f\n\t"
+ "movl %0,%1\n"
+ "8:"
+ :"=b" (__res),"=S" (___wcstok)
+ :"0" (___wcstok),"1" (s),"g" (ct)
+ :"eax","ecx","edx","edi","memory");
+
+return __res;
+}
+
+
+#define __HAVE_ARCH_WCSNNLEN
+inline size_t wcsnlen(const wchar_t * s, size_t count)
+{
+register int __res;
+__asm__ __volatile__(
+ "movl %1,%0\n\t"
+ "jmp 2f\n"
+ "1:\tcmpw $0,(%0)\n\t"
+ "je 3f\n\t"
+ "incl %0\n"
+ "2:\tdecl %2\n\t"
+ "cmpl $-1,%2\n\t"
+ "jne 1b\n"
+ "3:\tsubl %1,%0"
+ :"=a" (__res)
+ :"c" (s),"d" (count)
+ :"edx");
+return __res;
+}
+
+
+
+#define __HAVE_ARCH_WCSICMP
+inline int wcsicmp(const wchar_t* cs,const wchar_t * ct)
+{
+register int __res;
+
+
+__asm__ __volatile__(
+ "cld\n"
+ "1:\tmovw (%%esi), %%eax\n\t"
+ "movw (%%edi), %%edx \n\t"
+ "cmpw $0x5A, %%eax\n\t"
+ "ja 2f\t\n"
+ "cmpw $0x40, %%eax\t\n"
+ "jbe 2f\t\n"
+ "addw $0x20, %%eax\t\n"
+ "2:\t cmpw $0x5A, %%edx\t\n"
+ "ja 3f\t\n"
+ "cmpw $0x40, %%edx\t\n"
+ "jbe 3f\t\n"
+ "addw $0x20, %%edx\t\n"
+ "3:\t inc %%esi\t\n"
+ "inc %%esi\t\n"
+ "inc %%edi\t\n"
+ "inc %%edi\t\n"
+ "cmpw %%eax, %%edx\t\n"
+ "jne 4f\n\t"
+ "cmpw $00, %%eax\n\t"
+ "jne 1b\n\t"
+ "xorl %%eax,%%eax\n\t"
+ "jmp 5f\n"
+ "4:\tsbbl %%eax,%%eax\n\t"
+ "orw $1,%%eax\n"
+ "5:"
+ :"=a" (__res):"S" (cs),"D" (ct):"esi","edi");
+
+return __res;
+}
+
+
+#define __HAVE_ARCH_WCSNICMP
+inline int wcsnicmp(const wchar_t* cs,const wchar_t * ct, size_t count)
+{
+register int __res;
+
+
+__asm__ __volatile__(
+ "cld\n"
+ "1:\t decl %3\n\t"
+ "js 6f\n\t"
+ "movw (%%esi), %%eax\n\t"
+ "movw (%%edi), %%edx \n\t"
+ "cmpw $0x5A, %%eax\n\t"
+ "ja 2f\t\n"
+ "cmpw $0x40, %%eax\t\n"
+ "jbe 2f\t\n"
+ "addw $0x20, %%eax\t\n"
+ "2:\t cmpw $0x5A, %%edx\t\n"
+ "ja 3f\t\n"
+ "cmpw $0x40, %%edx\t\n"
+ "jbe 3f\t\n"
+ "addw $0x20, %%edx\t\n"
+ "3:\t inc %%esi\t\n"
+ "inc %%esi\t\n"
+ "inc %%edi\t\n"
+ "inc %%edi\t\n"
+ "cmpw %%eax, %%edx\t\n"
+ "jne 4f\n\t"
+ "cmpw $00, %%eax\n\t"
+ "jne 1b\n\t"
+ "6:xorl %%eax,%%eax\n\t"
+ "jmp 5f\n"
+ "4:\tsbbl %%eax,%%eax\n\t"
+ "orw $1,%%eax\n"
+ "5:"
+ :"=a" (__res):"S" (cs),"D" (ct), "c" (count):"esi","edi", "ecx");
+
+
+return __res;
+}
+
+#endif
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
--- /dev/null
+
+/*
+ * Win32 File Api functions
+ * Author: Boudewijn Dekker
+ * to do: many more to add ..
+ */
+
+
+#include <windows.h>
+
+// AnsiOrOemtoUnicode
+// pupose: internal procedure used in file api
+
+NTSTATUS AnsiOrOemtoUnicode(PUNICODE_STRING DestinationString,PANSI_STRING SourceString, BOOLEAN AllocateDestinationString);
+
+
+BOOLEAN bIsFileApiAnsi; // set the file api to ansi or oem
+
+
+NTSTATUS AnsiOrOemtoUnicode(PUNICODE_STRING DestinationString,PANSI_STRING SourceString, BOOLEAN AllocateDestinationString)
+{
+ if ( bIsFileApiAnsi ) {
+ return __AnsiStringToUnicodeString(DestinationString, SourceString, AllocateDestinationString);
+ else
+ return __OemStringToUnicodeString(DestinationString, SourceString, AllocateDestinationString);
+
+}
+
+
+WINBASEAPI
+VOID
+WINAPI
+SetFileApisToOEM(VOID)
+{
+ bIsFileApiAnsi = FALSE;
+ return;
+}
+
+
+
+WINBASEAPI
+VOID
+WINAPI
+SetFileApisToANSI(VOID)
+{
+ bIsFileApiAnsi = TRUE;
+ return;
+}
+
+
+WINBASEAPI
+BOOLEAN
+WINAPI
+AreFileApisANSI(VOID)
+{
+ return bIsFileApiAnsi;
+
+}
--- /dev/null
+/*
+* created: Boudewijn Dekker
+* org. source: WINE
+* date: june 1998
+* todo: check the _lopen for correctness
+*/
+
+#include <windows.h>
+#include <string.h>
+#include <wstring.h>
+
+
+
+
+long _hread(
+ HFILE hFile,
+ LPVOID lpBuffer,
+ long lBytes
+ )
+{
+ DWORD NumberOfBytesRead;
+ if ( ReadFile((HANDLE)hFile,(LPCVOID)lpBuffer,(DWORD)lBytes,&NumberOfBytesRead, NULL) == FALSE )
+ return -1;
+ else
+ return NumberOfBytesRead;
+
+}
+
+long
+_lread(HFILE fd,LPVOID buffer,long count)
+{
+ return _hread(fd,buffer, count);
+}
+
+
+long _hwrite(
+ HFILE hFile,
+ LPCSTR lpBuffer,
+ long lBytes
+ )
+{
+
+ DWORD NumberOfBytesWritten;
+ if ( lBytes == 0 ) {
+ if ( SetEndOfFile((HANDLE) hFile ) == FALSE )
+ return -1;
+ else
+ return 0;
+ }
+ if ( WriteFile((HANDLE)hFile,(LPCVOID)lpBuffer,(DWORD)lBytes, &NumberOfBytesWritten,NULL) == FALSE )
+ return -1;
+ else
+ return NumberOfBytesWritten;
+
+}
+
+
+long _lwrite(
+ HFILE hFile,
+ LPCSTR lpBuffer,
+ long lBytes
+ )
+{
+ return _hwrite(hFile,lpBuffer,lBytes);
+}
+
+#define OF_OPENMASK (OF_READ|OF_READWRITE|OF_WRITE|OF_CREATE)
+#define OF_FILEMASK (OF_DELETE|OF_PARSE)
+#define OF_MASK (OF_OPENMASK|OF_FILEMASK)
+
+HFILE _open( LPCSTR lpPathName, int iReadWrite )
+{
+
+
+
+ HFILE fd;
+ int nFunction;
+
+
+
+
+ /* Don't assume a 1:1 relationship between OF_* modes and O_* modes */
+ /* Here we translate the read/write permission bits (which had better */
+ /* be the low 2 bits. If not, we're in trouble. Other bits are */
+ /* passed through unchanged */
+
+ nFunction = wFunction & 3;
+
+ switch (wFunction & 3) {
+ case OF_READ:
+ nFunction |= O_RDONLY;
+ break;
+ case OF_READWRITE:
+ nFunction |= O_RDWR;
+ break;
+ case OF_WRITE:
+ nFunction |= O_WRONLY;
+ break;
+ default:
+ //ERRSTR((LF_ERROR, "_lopen: bad file open mode %x\n", wFunction));
+ return HFILE_ERROR;
+ }
+ SetLastError(0);
+ fd = CreateFileA( filename,nFunction,OPEN_EXISTING,
+ NULL,OPEN_EXISTING,NULL,NULL);
+ if (fd == INVALID_HANDLE_VALUE )
+ return HFILE_ERROR;
+ return fd;
+}
+
+int _creat(const char *filename, int pmode)
+{
+ SetLastError(0);
+ return CreateFileA( filename,GENERIC_READ & GENERIC_WRITE,FILE_SHARE_WRITE,
+ NULL,CREATE_ALWAYS,pmode & 0x00003FB7,NULL);
+}
+
+
+int _lclose(
+ HFILE hFile
+ )
+{
+ if ( CloseHandle((HANDLE)hFile) )
+ return 0;
+ else
+ rerturn -1;
+}
+
+LONG _llseek(
+ HFILE hFile,
+ LONG lOffset,
+ int iOrigin
+ )
+{
+ return SetFilePointer((HANDLE) hFile, lOffset, NULL,(DWORD)iOrigin );
+}
+
+
--- /dev/null
+all: dummy
+
+OBJECTS = file/file.o file/lfile.o mem/virtual.o mem/local.o mem/global.o
+
+kernel32_lib: $(OBJECTS)
+ $(LD) --oformat=coff-go32 -Ttext b0000000 $(LDFLAGS) $(OBJECTS) -o kernel32.dll
+
+dummy:
+
+include ../../rules.mak
--- /dev/null
+/*\r
+ * Win32 Global/Local heap functions (GlobalXXX, LocalXXX).\r
+ * These functions included in Win32 for compatibility with 16 bit Windows\r
+ * Especially the moveable blocks and handles are oldish. \r
+ * But the ability to directly allocate memory with GPTR and LPTR is widely\r
+ * used.\r
+ */\r
+\r
+#include <windows.h>\r
+\r
+#define MAGIC_GLOBAL_USED 0x5342BEEF\r
+#define GLOBAL_LOCK_MAX 0xFF\r
+\r
+typedef struct __GLOBAL_LOCAL_HANDLE\r
+{\r
+ ULONG Magic;\r
+ LPVOID Pointer;\r
+ BYTE Flags;\r
+ BYTE LockCount;\r
+} GLOBAL_HANDLE, LOCAL_HANDLE, *PGLOBAL_HANDLE, *PLOCAL_HANDLE;\r
+\r
+/*********************************************************************\r
+* GlobalAlloc -- KERNEL32 *\r
+*********************************************************************/\r
+HGLOBAL WINAPI GlobalAlloc(UINT flags, DWORD size)\r
+{\r
+ PGLOBAL_HANDLE phandle;\r
+ LPVOID palloc;\r
+\r
+ aprintf("GlobalAlloc( 0x%X, 0x%lX )\n", flags, size );\r
+\r
+ if((flags & GMEM_MOVEABLE)==0) /* POINTER */\r
+ {\r
+ palloc=HeapAlloc(__ProcessHeap, 0, size);\r
+ return (HGLOBAL) palloc;\r
+ }\r
+ else /* HANDLE */\r
+ {\r
+ HeapLock(__ProcessHeap);\r
+\r
+\r
+ phandle=__HeapAllocFragment(__ProcessHeap, 0, sizeof(GLOBAL_HANDLE));\r
+ if(size)\r
+ {\r
+ palloc=HeapAlloc(__ProcessHeap, 0, size+sizeof(HANDLE));\r
+ *(PHANDLE)palloc=(HANDLE) &(phandle->Pointer);\r
+ phandle->Pointer=palloc+sizeof(HANDLE);\r
+ }\r
+ else\r
+ phandle->Pointer=NULL;\r
+ phandle->Magic=MAGIC_GLOBAL_USED;\r
+ phandle->Flags=flags>>8;\r
+ phandle->LockCount=0;\r
+ HeapUnlock(__ProcessHeap);\r
+\r
+ return (HGLOBAL) &(phandle->Pointer);\r
+ }\r
+}\r
+\r
+/*********************************************************************\r
+* GlobalLock -- KERNEL32 *\r
+*********************************************************************/\r
+LPVOID WINAPI GlobalLock(HGLOBAL hmem)\r
+{\r
+ PGLOBAL_HANDLE phandle;\r
+ LPVOID palloc;\r
+\r
+ aprintf("GlobalLock( 0x%lX )\n", (ULONG) hmem );\r
+\r
+ if(((ULONG)hmem%8)==0)\r
+ return (LPVOID) hmem;\r
+\r
+ HeapLock(__ProcessHeap);\r
+ phandle=(PGLOBAL_HANDLE)(((LPVOID) hmem)-4);\r
+ if(phandle->Magic==MAGIC_GLOBAL_USED)\r
+ {\r
+ if(phandle->LockCount<GLOBAL_LOCK_MAX)\r
+ phandle->LockCount++;\r
+ palloc=phandle->Pointer;\r
+ }\r
+ else\r
+ {\r
+ dprintf("GlobalLock: invalid handle\n");\r
+ palloc=(LPVOID) hmem;\r
+ }\r
+ HeapUnlock(__ProcessHeap);\r
+ return palloc;\r
+}\r
+\r
+/*********************************************************************\r
+* GlobalUnlock -- KERNEL32 *\r
+*********************************************************************/\r
+BOOL WINAPI GlobalUnlock(HGLOBAL hmem)\r
+{\r
+ PGLOBAL_HANDLE phandle;\r
+ BOOL locked;\r
+\r
+ aprintf("GlobalUnlock( 0x%lX )\n", (ULONG) hmem );\r
+\r
+ if(((ULONG)hmem%8)==0)\r
+ return FALSE;\r
+\r
+ HeapLock(__ProcessHeap);\r
+ phandle=(PGLOBAL_HANDLE)(((LPVOID) hmem)-4);\r
+ if(phandle->Magic==MAGIC_GLOBAL_USED)\r
+ {\r
+ if((phandle->LockCount<GLOBAL_LOCK_MAX)&&(phandle->LockCount>0))\r
+ phandle->LockCount--;\r
+\r
+ locked=(phandle->LockCount==0) ? TRUE : FALSE;\r
+ }\r
+ else\r
+ {\r
+ dprintf("GlobalUnlock: invalid handle\n");\r
+ locked=FALSE;\r
+ }\r
+ HeapUnlock(__ProcessHeap);\r
+ return locked;\r
+}\r
+\r
+/*********************************************************************\r
+* GlobalHandle -- KERNEL32 *\r
+*********************************************************************/\r
+HGLOBAL WINAPI GlobalHandle(LPCVOID pmem)\r
+{\r
+ aprintf("GlobalHandle( 0x%lX )\n", (ULONG) pmem );\r
+\r
+ if(((ULONG)pmem%8)==0) /* FIXED */\r
+ return (HGLOBAL) pmem;\r
+ else /* MOVEABLE */\r
+ return (HGLOBAL) *(LPVOID *)(pmem-sizeof(HANDLE));\r
+}\r
+\r
+/*********************************************************************\r
+* GlobalReAlloc -- KERNEL32 *\r
+*********************************************************************/\r
+HGLOBAL WINAPI GlobalReAlloc(HGLOBAL hmem, DWORD size, UINT flags)\r
+{\r
+ LPVOID palloc;\r
+ HGLOBAL hnew;\r
+ PGLOBAL_HANDLE phandle;\r
+\r
+ aprintf("GlobalReAlloc( 0x%lX, 0x%lX, 0x%X )\n", (ULONG) hmem, size, flags );\r
+\r
+ hnew=NULL;\r
+ HeapLock(__ProcessHeap);\r
+ if(flags & GMEM_MODIFY) /* modify flags */\r
+ {\r
+ if( (((ULONG)hmem%8)==0) && (flags & GMEM_MOVEABLE))\r
+ {\r
+ /* make a fixed block moveable\r
+ * actually only NT is able to do this. And it's soo simple\r
+ */\r
+ size=HeapSize(__ProcessHeap, 0, (LPVOID) hmem);\r
+ hnew=GlobalAlloc( flags, size);\r
+ palloc=GlobalLock(hnew);\r
+ memcpy(palloc, (LPVOID) hmem, size);\r
+ GlobalUnlock(hnew);\r
+ GlobalFree(hmem);\r
+ }\r
+ else if((((ULONG)hmem%8) != 0)&&(flags & GMEM_DISCARDABLE))\r
+ {\r
+ /* change the flags to make our block "discardable" */\r
+ phandle=(PGLOBAL_HANDLE)(((LPVOID) hmem)-4);\r
+ phandle->Flags = phandle->Flags | (GMEM_DISCARDABLE >> 8);\r
+ hnew=hmem;\r
+ }\r
+ else\r
+ {\r
+ SetLastError(ERROR_INVALID_PARAMETER);\r
+ hnew=NULL;\r
+ }\r
+ }\r
+ else\r
+ {\r
+ if(((ULONG)hmem%8)!=0)\r
+ {\r
+ /* reallocate fixed memory */\r
+ hnew=(HANDLE)HeapReAlloc(__ProcessHeap, 0, (LPVOID) hmem, size);\r
+ }\r
+ else\r
+ {\r
+ /* reallocate a moveable block */\r
+ phandle=(PGLOBAL_HANDLE)(((LPVOID) hmem)-4);\r
+ if(phandle->LockCount!=0)\r
+ SetLastError(ERROR_INVALID_HANDLE);\r
+ else if(size!=0)\r
+ {\r
+ hnew=hmem;\r
+ if(phandle->Pointer)\r
+ {\r
+ palloc=HeapReAlloc(__ProcessHeap, 0,\r
+ phandle->Pointer-sizeof(HANDLE),\r
+ size+sizeof(HANDLE) );\r
+ phandle->Pointer=palloc+sizeof(HANDLE);\r
+ }\r
+ else\r
+ {\r
+ palloc=HeapAlloc(__ProcessHeap, 0, size+sizeof(HANDLE));\r
+ *(PHANDLE)palloc=hmem;\r
+ phandle->Pointer=palloc+sizeof(HANDLE);\r
+ }\r
+ }\r
+ else\r
+ {\r
+ if(phandle->Pointer)\r
+ {\r
+ HeapFree(__ProcessHeap, 0, phandle->Pointer-sizeof(HANDLE));\r
+ phandle->Pointer=NULL;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ HeapUnlock(__ProcessHeap);\r
+ return hnew;\r
+}\r
+\r
+/*********************************************************************\r
+* GlobalFree -- KERNEL32 *\r
+*********************************************************************/\r
+HGLOBAL WINAPI GlobalFree(HGLOBAL hmem)\r
+{\r
+ PGLOBAL_HANDLE phandle;\r
+\r
+ aprintf("GlobalFree( 0x%lX )\n", (ULONG) hmem );\r
+\r
+ if(((ULONG)hmem%4)==0) /* POINTER */\r
+ {\r
+ HeapFree(__ProcessHeap, 0, (LPVOID) hmem);\r
+ }\r
+ else /* HANDLE */\r
+ {\r
+ HeapLock(__ProcessHeap);\r
+ phandle=(PGLOBAL_HANDLE)(((LPVOID) hmem)-4);\r
+ if(phandle->Magic==MAGIC_GLOBAL_USED)\r
+ {\r
+ HeapLock(__ProcessHeap);\r
+ if(phandle->LockCount!=0)\r
+ SetLastError(ERROR_INVALID_HANDLE);\r
+ if(phandle->Pointer)\r
+ HeapFree(__ProcessHeap, 0, phandle->Pointer-sizeof(HANDLE));\r
+ __HeapFreeFragment(__ProcessHeap, 0, phandle);\r
+ }\r
+ HeapUnlock(__ProcessHeap);\r
+ }\r
+ return hmem;\r
+}\r
+\r
+/*********************************************************************\r
+* GlobalSize -- KERNEL32 *\r
+*********************************************************************/\r
+DWORD WINAPI GlobalSize(HGLOBAL hmem)\r
+{\r
+ DWORD retval;\r
+ PGLOBAL_HANDLE phandle;\r
+\r
+ aprintf("GlobalSize( 0x%lX )\n", (ULONG) hmem );\r
+\r
+ if(((ULONG)hmem%8)==0)\r
+ {\r
+ retval=HeapSize(__ProcessHeap, 0, hmem);\r
+ }\r
+ else\r
+ {\r
+ HeapLock(__ProcessHeap);\r
+ phandle=(PGLOBAL_HANDLE)(((LPVOID) hmem)-4);\r
+ if(phandle->Magic==MAGIC_GLOBAL_USED)\r
+ {\r
+ retval=HeapSize(__ProcessHeap, 0, (phandle->Pointer)-sizeof(HANDLE))-4;\r
+ }\r
+ else\r
+ {\r
+ dprintf("GlobalSize: invalid handle\n");\r
+ retval=0;\r
+ }\r
+ HeapUnlock(__ProcessHeap);\r
+ }\r
+ return retval;\r
+}\r
+\r
+/*********************************************************************\r
+* GlobalWire -- KERNEL32 *\r
+*********************************************************************/\r
+LPVOID WINAPI GlobalWire(HGLOBAL hmem)\r
+{\r
+ return GlobalLock( hmem );\r
+}\r
+\r
+/*********************************************************************\r
+* GlobalUnWire -- KERNEL32 *\r
+*********************************************************************/\r
+BOOL WINAPI GlobalUnWire(HGLOBAL hmem)\r
+{\r
+ return GlobalUnlock( hmem);\r
+}\r
+\r
+/*********************************************************************\r
+* GlobalFix -- KERNEL32 *\r
+*********************************************************************/\r
+VOID WINAPI GlobalFix(HGLOBAL hmem)\r
+{\r
+ GlobalLock( hmem );\r
+}\r
+\r
+/*********************************************************************\r
+* GlobalUnfix -- KERNEL32 *\r
+*********************************************************************/\r
+VOID WINAPI GlobalUnfix(HGLOBAL hmem)\r
+{\r
+ GlobalUnlock( hmem);\r
+}\r
+\r
+/*********************************************************************\r
+* GlobalFlags -- KERNEL32 *\r
+*********************************************************************/\r
+UINT WINAPI GlobalFlags(HGLOBAL hmem)\r
+{\r
+ return LocalFlags( (HLOCAL) hmem);\r
+}\r
+\r
--- /dev/null
+/*
+ * kernel/heap.c
+ * Copyright (C) 1996, Onno Hovers, All rights reserved
+ *
+ * This software is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this software; see the file COPYING.LIB. If
+ * not, write to the Free Software Foundation, Inc., 675 Mass Ave,
+ * Cambridge, MA 02139, USA.
+ *
+ * Win32 heap functions (HeapXXX).
+ *
+ */
+
+/*
+ * Adapted for the ReactOS system libraries by David Welch (welch@mcmail.com)
+ * Put the type definitions of the heap in a seperate header. Boudewijn Dekker
+ */
+
+#include <kernel32/heap.h>
+
+static HEAP_BUCKET __HeapDefaultBuckets[]=
+{
+ { NULL, 16, 18, 504 },
+ { NULL, 24, 30, 1016 },
+ { NULL, 32, 24, 1016 },
+ { NULL, 48, 17, 1016 },
+ { NULL, 64, 27, 2040 },
+ { NULL, 96, 19, 2040 },
+ { NULL, 128, 29, 4088 },
+ { NULL, 256, 15, 4088 },
+};
+
+
+static BOOL __HeapCommit(PHEAP pheap, LPVOID start, LPVOID end);
+static BOOL __HeapDecommit(PHEAP pheap, LPVOID start, LPVOID end);
+static LPVOID __HeapAlloc(PHEAP pheap, ULONG flags, ULONG size, ULONG tag);
+static VOID __HeapFreeRest(PHEAP pheap, PHEAP_BLOCK pfree, ULONG allocsize,
+ ULONG newsize);
+static LPVOID __HeapReAlloc(PHEAP pheap, ULONG flags, LPVOID pold, ULONG size);
+static BOOL __HeapFree(PHEAP pheap, ULONG flags, LPVOID pmem);
+static PHEAP_SUBALLOC __HeapAllocSub(PHEAP pheap, PHEAP_BUCKET pbucket);
+static LPVOID __HeapAllocFragment(PHEAP pheap, ULONG flags, ULONG size);
+static LPVOID __HeapReAllocFragment(PHEAP pheap, ULONG flags,
+ LPVOID pold, ULONG size);
+static BOOL __HeapFreeFragment(PHEAP pheap, ULONG flags, LPVOID ptr);
+static PHEAP __HeapPrepare(LPVOID base, ULONG minsize, ULONG maxsize,
+ ULONG flags);
+
+
+
+/*********************************************************************
+* __HeapCommit *
+* *
+* commits a range of memory in the heap *
+*********************************************************************/
+static BOOL __HeapCommit(PHEAP pheap, LPVOID start, LPVOID end)
+{
+ dprintf("__HeapCommit( 0x%lX, 0x%lX, 0x%lX)\n",
+ (ULONG) pheap, (ULONG) start, (ULONG) end);
+#ifdef NOT
+ __VirtualDump();
+#endif
+ if(end >= pheap->LastBlock)
+ pheap->LastBlock=end;
+ return __VirtualCommit(start, end-start, PAGE_READWRITE);
+}
+
+/*********************************************************************
+* __HeapDecommit *
+* *
+* decommits a range of memory in the heap *
+*********************************************************************/
+static BOOL __HeapDecommit(PHEAP pheap, LPVOID start, LPVOID end)
+{
+ dprintf("__HeapDecommit( 0x%lX, 0x%lX, 0x%lX)\n",
+ (ULONG) pheap, (ULONG) start, (ULONG) end);
+#ifdef NOT
+ __VirtualDump();
+#endif
+ if((end >= pheap->LastBlock)&&(start<= pheap->LastBlock))
+ pheap->LastBlock=start;
+ return __VirtualDecommit(start, end-start );
+}
+
+/*********************************************************************
+* __HeapAlloc *
+* *
+* allocates a range of memory from the heap *
+*********************************************************************/
+static LPVOID __HeapAlloc(PHEAP pheap, ULONG flags, ULONG size, ULONG tag)
+{
+ PHEAP_BLOCK pfree;
+ PHEAP_BLOCK palloc;
+ PHEAP_BLOCK pnext;
+ LPVOID commitstart;
+ LPVOID commitend;
+ ULONG freesize;
+ ULONG allocsize;
+
+ pfree=&(pheap->Start);
+ allocsize=SIZE_ROUND(size);
+ freesize=HEAP_SIZE(pfree);
+ /* look for a free region of memory: simple First Fit */
+ while( HEAP_ISALLOC(pfree) || ( freesize<allocsize ))
+ {
+ pfree=HEAP_NEXT(pfree);
+ if((LPVOID) pfree>=pheap->End)
+ return __ErrorReturnNull(ERROR_OUTOFMEMORY);
+ freesize=HEAP_SIZE(pfree);
+ }
+ palloc=pfree;
+
+ if(freesize>allocsize)
+ {
+ /* commit necessary memory */
+ commitstart=(LPVOID) ROUNDDOWN((ULONG) palloc+HEAP_ADMIN_SIZE,PAGESIZE);
+ commitend =(LPVOID) ROUNDUP ((ULONG) palloc+
+ allocsize+2*HEAP_ADMIN_SIZE, PAGESIZE);
+ if(commitstart<commitend)
+ if(!__HeapCommit(pheap, commitstart, commitend))
+ return __ErrorReturnNull(ERROR_OUTOFMEMORY);
+
+ /* split this block in two */
+ pfree= (LPVOID) palloc+ HEAP_ADMIN_SIZE + allocsize;
+
+ /* update admin */
+ pfree->Size =(freesize-allocsize-HEAP_ADMIN_SIZE) | HEAP_FREE_TAG;
+ pfree->PrevSize=(LPVOID)pfree-(LPVOID)palloc;
+
+ pnext=HEAP_NEXT(pfree);
+ if((LPVOID) pnext < pheap->End )
+ pnext->PrevSize=freesize-allocsize;
+ }
+ else
+ {
+ /* commit necessary memory */
+ commitstart=(LPVOID) ROUNDDOWN((ULONG) palloc+HEAP_ADMIN_SIZE, PAGESIZE);
+ commitend =(LPVOID) ROUNDUP((ULONG) palloc+HEAP_ADMIN_SIZE +allocsize,
+ PAGESIZE);
+ if(commitstart<commitend)
+ if(!__HeapCommit(pheap, commitstart, commitend))
+ return __ErrorReturnNull(ERROR_OUTOFMEMORY);
+ }
+ /* update our administration */
+ palloc->Size= size | tag;
+ if((flags | pheap->Flags)& HEAP_ZERO_MEMORY)
+ memset((LPVOID)palloc+HEAP_ADMIN_SIZE, 0, allocsize);
+ return (LPVOID)palloc+HEAP_ADMIN_SIZE;
+}
+
+/*********************************************************************
+* __HeapFreeRest *
+* *
+* used by realloc to free a part of the heap *
+*********************************************************************/
+static VOID __HeapFreeRest(PHEAP pheap, PHEAP_BLOCK pfree,
+ ULONG allocsize, ULONG newsize)
+{
+ PHEAP_BLOCK pnext;
+
+ if(allocsize==newsize)
+ {
+ pfree->PrevSize=allocsize+HEAP_ADMIN_SIZE;
+ return;
+ }
+
+ pfree->Size = (allocsize-newsize-HEAP_ADMIN_SIZE) | HEAP_FREE_TAG;
+ pfree->PrevSize = newsize+HEAP_ADMIN_SIZE;
+
+ pnext=HEAP_NEXT(pfree);
+ /* if there is a free region of memory after us, join it */
+ if(((LPVOID) pnext< pheap->End)&& HEAP_ISFREE(pnext))
+ {
+ pfree->Size = (HEAP_SIZE(pfree)+HEAP_SIZE(pnext) + HEAP_ADMIN_SIZE) |
+ HEAP_FREE_TAG;
+
+ pnext->Size=0;
+ pnext->PrevSize=0;
+ }
+
+ pnext=HEAP_NEXT(pfree);
+ if((LPVOID) pnext< pheap->End)
+ pnext->PrevSize=(LPVOID)pnext-(LPVOID)pfree;
+}
+
+/*********************************************************************
+* __HeapReAlloc *
+* *
+* reallocates a range of memory from the heap *
+*********************************************************************/
+
+static LPVOID __HeapReAlloc(PHEAP pheap, ULONG flags, LPVOID pold, DWORD size)
+{
+ PHEAP_BLOCK prealloc=(PHEAP_BLOCK)((LPVOID)pold-HEAP_ADMIN_SIZE);
+ PHEAP_BLOCK pnext;
+ LPVOID pmem;
+ LPVOID commitstart;
+ LPVOID commitend;
+ ULONG allocsize;
+ ULONG newsize;
+ ULONG oldsize;
+
+ /* check that this is a valid allocated block */
+ if(!HEAP_ISALLOC(prealloc))
+ return __ErrorReturnNull(ERROR_INVALID_PARAMETER);
+
+ allocsize = HEAP_RSIZE(prealloc);
+ newsize = SIZE_ROUND(size);
+ /*
+ * cases: size=0 free memory
+ * [ size<HEAP_FRAGMENT_THRESHOLD realloc ]
+ * newsize<previous size free rest
+ * newsize=previous size nop
+ * newsize>previous size try to merge
+ * else realloc
+ */
+ if(size==0)
+ {
+ dprintf("__HeapReAlloc: freeing memory\n");
+ __HeapFree(pheap, flags, pold);
+ return NULL;
+ }
+#ifdef NOT
+ else if(size < HEAP_FRAGMENT_THRESHOLD)
+ {
+ /* alloc a new fragment */
+ pmem=__HeapAllocFragment(pheap, flags, size);
+ if(pmem)
+ memcpy(pmem, pold, size);
+ return pmem;
+ }
+#endif
+ else if(newsize < allocsize )
+ {
+ dprintf("__HeapReAlloc: shrinking memory\n");
+ /* free remaining region of memory */
+ prealloc->Size=size | HEAP_NORMAL_TAG;
+ pnext=HEAP_NEXT(prealloc);
+ __HeapFreeRest(pheap, pnext, allocsize, newsize);
+
+ /* decommit unnecessary memory */
+ commitstart=(LPVOID) ROUNDUP((ULONG) pnext+HEAP_ADMIN_SIZE ,PAGESIZE);
+ commitend =(LPVOID) ROUNDDOWN((ULONG) pnext+HEAP_ADMIN_SIZE+
+ HEAP_SIZE(pnext), PAGESIZE);
+ if(commitstart<commitend)
+ __HeapDecommit(pheap, commitstart, commitend);
+ return pold;
+ }
+ else if(newsize == allocsize )
+ {
+ dprintf("__HeapReAlloc: no changes\n");
+ /* nothing to do */
+ prealloc->Size= size | HEAP_NORMAL_TAG;
+ return pold;
+ }
+ else if(newsize > allocsize)
+ {
+ /* try to merge */
+ pnext=HEAP_NEXT(prealloc);
+
+ if(((LPVOID) pnext< pheap->End)&& HEAP_ISFREE(pnext) &&
+ (HEAP_SIZE(pnext) + HEAP_ADMIN_SIZE >=newsize-allocsize))
+ {
+ dprintf("__HeapReAlloc: joining memory\n");
+ oldsize=HEAP_SIZE(prealloc);
+ prealloc->Size=size | HEAP_NORMAL_TAG;
+
+ /* commit new memory if necessary */
+ commitstart=(LPVOID) ROUNDDOWN((ULONG) pnext+HEAP_ADMIN_SIZE,
+ PAGESIZE);
+ commitend =(LPVOID) ROUNDUP((ULONG) pnext+newsize-allocsize+
+ HEAP_ADMIN_SIZE, PAGESIZE);
+ if(commitstart<commitend)
+ if(!__HeapCommit(pheap, commitstart, commitend))
+ return __ErrorReturnNull(ERROR_OUTOFMEMORY);
+
+ __HeapFreeRest(pheap, HEAP_NEXT(prealloc),
+ allocsize+HEAP_ADMIN_SIZE+HEAP_SIZE(pnext), newsize);
+
+ if((flags|pheap->Flags)&HEAP_ZERO_MEMORY)
+ memset(pold+oldsize, 0, size-oldsize);
+ return pold;
+ }
+ else
+ {
+ if((flags&HEAP_REALLOC_IN_PLACE_ONLY)==0)
+ {
+ dprintf("__HeapReAlloc: allocating new memory\n");
+ /* alloc a new piece of memory */
+ oldsize=HEAP_SIZE(prealloc);
+ pmem=__HeapAlloc(pheap, flags, size, HEAP_NORMAL_TAG);
+ if(pmem)
+ memcpy(pmem, pold, oldsize);
+ if((flags|pheap->Flags)&HEAP_ZERO_MEMORY)
+ memset(pmem + oldsize, 0, size-oldsize);
+ __HeapFree(pheap, flags, pold);
+ return pmem;
+ }
+ else
+ return __ErrorReturnNull(ERROR_OUTOFMEMORY);
+ }
+ }
+ return NULL;
+}
+
+/*********************************************************************
+* __HeapFree *
+* *
+* frees a range of memory from the heap *
+*********************************************************************/
+
+static BOOL __HeapFree(PHEAP pheap, ULONG flags, LPVOID ptr)
+{
+ PHEAP_BLOCK pfree=(PHEAP_BLOCK)((LPVOID)ptr-HEAP_ADMIN_SIZE);
+ PHEAP_BLOCK pprev;
+ PHEAP_BLOCK pnext;
+ LPVOID decommitstart;
+ LPVOID decommitend;
+
+ /* check that this is a valid allocated block */
+ if(!HEAP_ISALLOC(pfree))
+ return FALSE;
+
+ pfree->Size = HEAP_RSIZE(pfree) | HEAP_FREE_TAG;
+
+ /* if there is a free region of memory before us, join it */
+ pprev=HEAP_PREV(pfree);
+ pnext=HEAP_NEXT(pfree);
+ if((pprev!=pfree) && HEAP_ISFREE(pprev))
+ {
+ pprev->Size = (HEAP_SIZE(pprev)+HEAP_SIZE(pfree) + HEAP_ADMIN_SIZE) |
+ HEAP_FREE_TAG;
+ if((LPVOID) pnext<pheap->End)
+ pnext->PrevSize=(LPVOID)pnext-(LPVOID)pprev;
+
+ pfree->Size=0;
+ pfree->PrevSize=0;
+ pfree=pprev;
+ }
+ /* if there is a free region of memory after us, join it */
+ if(((LPVOID) pnext< pheap->End)&& HEAP_ISFREE(pnext))
+ {
+ pfree->Size = (HEAP_SIZE(pfree)+HEAP_SIZE(pnext) + HEAP_ADMIN_SIZE) |
+ HEAP_FREE_TAG;
+
+ pnext->Size=0;
+ pnext->PrevSize=0;
+
+ pnext=HEAP_NEXT(pfree);
+ if((LPVOID) pnext< pheap->End)
+ pnext->PrevSize=(LPVOID)pnext-(LPVOID)pfree;
+ }
+
+ /* decommit unnecessary memory */
+ decommitstart=(LPVOID) ROUNDUP((ULONG) pfree+HEAP_ADMIN_SIZE ,PAGESIZE);
+ decommitend =(LPVOID) ROUNDDOWN((ULONG) pfree+HEAP_ADMIN_SIZE+
+ HEAP_SIZE(pfree), PAGESIZE);
+ if(decommitstart<decommitend)
+ __HeapDecommit(pheap, decommitstart, decommitend);
+
+ return TRUE;
+}
+
+/*********************************************************************
+* __HeapAllocSub *
+* *
+* allocates a range of memory that is used to allocate small *
+* fragments *
+*********************************************************************/
+PHEAP_SUBALLOC __HeapAllocSub(PHEAP pheap, PHEAP_BUCKET pbucket)
+{
+ INT i;
+ INT add;
+ PHEAP_SUBALLOC psub;
+ PHEAP_FRAGMENT pprev;
+ PHEAP_FRAGMENT pnext;
+ PHEAP_FRAGMENT palloc;
+
+ psub=(PHEAP_SUBALLOC) __HeapAlloc(pheap, 0, pbucket->TotalSize,
+ HEAP_SUB_TAG);
+ if(!psub)
+ return __ErrorReturnNull(ERROR_OUTOFMEMORY);
+
+ /* initialize suballoc */
+ palloc=(PHEAP_FRAGMENT) ((LPVOID)psub + sizeof(HEAP_SUBALLOC));
+ psub->FirstFree=palloc;
+ psub->NumberFree=pbucket->Number;
+ psub->Bitmap=0;
+ psub->Next=pbucket->FirstFree;
+ psub->Prev=NULL;
+ psub->Bucket=pbucket;
+ pbucket->FirstFree=psub;
+
+ /* initialize free fragments */
+ add=pbucket->Size+HEAP_FRAG_ADMIN_SIZE;
+ pprev=NULL;
+ for(i=0;i<pbucket->Number;i++)
+ {
+ pnext=(PHEAP_FRAGMENT)((LPVOID)palloc+add);
+ palloc->Magic=HEAP_FRAG_MAGIC;
+ palloc->Number=i;
+ palloc->Size=pbucket->Size;
+ palloc->Sub=psub;
+ palloc->FreeNext=pnext;
+ palloc->FreePrev=pprev;
+ pprev=palloc;
+ palloc=pnext;
+ }
+ pprev->FreeNext=NULL;
+ return psub;
+}
+
+/*********************************************************************
+* __HeapAllocFragment *
+* *
+* allocates a small fragment of memory from the heap *
+*********************************************************************/
+static LPVOID __HeapAllocFragment(PHEAP pheap, ULONG flags, ULONG size )
+{
+ PHEAP_BUCKET pbucket;
+ PHEAP_SUBALLOC psub;
+ PHEAP_FRAGMENT palloc;
+ INT nalloc;
+
+ /* get bucket size */
+ pbucket=pheap->Bucket;
+ while(size>pbucket->Size)
+ {
+ pbucket++;
+ }
+ /* get suballoc */
+ psub = pbucket->FirstFree;
+ if(!psub)
+ psub = __HeapAllocSub(pheap, pbucket);
+ if(!psub)
+ return NULL;
+
+ /* do our bookkeeping */
+ palloc = psub->FirstFree;
+ psub->FirstFree = palloc->FreeNext;
+ nalloc = palloc->Number;
+ psub->NumberFree--;
+ psub->Bitmap|=(1<<nalloc);
+
+ /* advance freelist */
+ if(!psub->NumberFree)
+ pbucket->FirstFree=psub->Next;
+
+ /* initialize allocated block */
+ palloc->Magic=HEAP_FRAG_MAGIC;
+ palloc->Size=size;
+
+ if((flags|pheap->Flags)&HEAP_ZERO_MEMORY)
+ memset((LPVOID)palloc+HEAP_FRAG_ADMIN_SIZE, 0, pbucket->Size);
+ return (LPVOID) palloc+HEAP_FRAG_ADMIN_SIZE;
+}
+
+/*********************************************************************
+* __HeapReAllocFragment *
+* *
+* reallocates a small fragment of memory *
+*********************************************************************/
+static LPVOID __HeapReAllocFragment(PHEAP pheap, ULONG flags,
+ LPVOID pold, ULONG size )
+{
+ PHEAP_BUCKET pbucket;
+ PHEAP_SUBALLOC psub;
+ PHEAP_FRAGMENT pfrag=(PHEAP_FRAGMENT)
+ ((LPVOID)pold-HEAP_FRAG_ADMIN_SIZE);
+ LPVOID pmem;
+
+ /* sanity checks */
+ if(pfrag->Magic!=HEAP_FRAG_MAGIC)
+ return __ErrorReturnNull(ERROR_INVALID_PARAMETER);
+
+ /* get bucket size */
+ psub=pfrag->Sub;
+ pbucket=psub->Bucket;
+ if(size<=pbucket->Size)
+ {
+ pfrag->Size=size;
+ return pold;
+ }
+ else
+ {
+ if((flags&HEAP_REALLOC_IN_PLACE_ONLY)==0)
+ {
+ /* alloc a new piece of memory */
+ if(size>HEAP_FRAGMENT_THRESHOLD)
+ pmem=__HeapAlloc(pheap, flags, size, HEAP_NORMAL_TAG);
+ else
+ pmem=__HeapAllocFragment(pheap, flags, size);
+
+ if(pmem)
+ memcpy(pmem, pold, size);
+ if((flags|pheap->Flags)&HEAP_ZERO_MEMORY)
+ memset(pmem+pfrag->Size, 0, size-pfrag->Size);
+
+ __HeapFreeFragment(pheap, flags, pold);
+ return pmem;
+ }
+ }
+ return NULL;
+}
+
+/*********************************************************************
+* __HeapFreeFragment *
+* *
+* frees a small fragment of memory *
+*********************************************************************/
+static BOOL __HeapFreeFragment(PHEAP pheap, ULONG flags, LPVOID pfree )
+{
+ PHEAP_BUCKET pbucket;
+ PHEAP_SUBALLOC psub;
+ PHEAP_FRAGMENT pfrag=(PHEAP_FRAGMENT)
+ ((LPVOID)pfree-HEAP_FRAG_ADMIN_SIZE);
+ INT nalloc;
+
+ /* sanity checks */
+ if(pfrag->Magic!=HEAP_FRAG_MAGIC)
+ return __ErrorReturnFalse(ERROR_INVALID_PARAMETER);
+
+ /* get bucket size */
+ psub=pfrag->Sub;
+ pbucket=psub->Bucket;
+
+ nalloc=pfrag->Number;
+ if((psub->Bitmap&(1<<nalloc))==0)
+ return __ErrorReturnFalse(ERROR_INVALID_PARAMETER);
+ psub->NumberFree++;
+ if(psub->NumberFree==pbucket->Number)
+ {
+ /* free suballoc */
+ if(psub==pbucket->FirstFree)
+ pbucket->FirstFree=psub->Next;
+ if(psub->Prev)
+ psub->Prev->Next=psub->Next;
+ if(psub->Next)
+ psub->Next->Prev=psub->Prev;
+ if(!__HeapFree(pheap, flags, psub))
+ return FALSE;
+ }
+ else
+ {
+ /* free fragment */
+ psub->Bitmap&= ~(1<<nalloc);
+
+ if(psub->FirstFree)
+ {
+ pfrag->FreeNext = psub->FirstFree;
+ pfrag->FreePrev = NULL;
+ psub->FirstFree->FreePrev = pfrag;
+ psub->FirstFree = pfrag;
+ }
+ else
+ {
+ psub->FirstFree=pfrag;
+ pfrag->FreePrev=NULL;
+ pfrag->FreeNext=NULL;
+ }
+ }
+ return TRUE;
+}
+
+/*********************************************************************
+* __HeapPrepare *
+* *
+* Fills in all the data structures of a heap *
+*********************************************************************/
+PHEAP __HeapPrepare(LPVOID base, ULONG minsize, ULONG maxsize, ULONG flags)
+{
+ PHEAP pheap=(PHEAP) base;
+
+ pheap->Magic=MAGIC_HEAP;
+ pheap->End= ((LPVOID)pheap)+minsize;
+ pheap->Flags=flags;
+ pheap->LastBlock=(LPVOID)pheap + PAGESIZE;
+ memcpy(pheap->Bucket,__HeapDefaultBuckets,sizeof(__HeapDefaultBuckets));
+ if(__ProcessHeap)
+ {
+ pheap->NextHeap=__ProcessHeap->NextHeap;
+ __ProcessHeap->NextHeap=pheap;
+ }
+ else
+ {
+ pheap->NextHeap=0;
+ __ProcessHeap=pheap;
+ }
+ InitializeCriticalSection(&(pheap->Synchronize));
+ pheap->Start.Size= (minsize-sizeof(HEAP))|HEAP_FREE_TAG;
+ pheap->Start.PrevSize =0;
+
+ return pheap;
+}
+
+/*********************************************************************
+* __HeapInit *
+* *
+* Called by __VirtualInit to initialize the default process heap *
+*********************************************************************/
+
+VOID WINAPI __HeapInit(LPVOID base, ULONG minsize, ULONG maxsize)
+{
+ mmap(base, PAGESIZE, PROT_READ | PROT_WRITE, MAP_ANON | MAP_PRIVATE,
+ __DevZero, 0);
+
+ __HeapPrepare(base, minsize, maxsize, 0);
+}
+
+
+/*********************************************************************
+* HeapCreate -- KERNEL32 *
+*********************************************************************/
+
+HANDLE WINAPI HeapCreate(ULONG flags, ULONG minsize, ULONG maxsize)
+{
+ PHEAP pheap;
+
+ aprintf("HeapCreate( 0x%lX, 0x%lX, 0x%lX )\n", flags, minsize, maxsize);
+
+ pheap = __VirtualReserve(NULL, minsize, PAGE_READWRITE | MEM_TOP_DOWN);
+ __VirtualCommit(pheap, PAGESIZE, PAGE_READWRITE);
+ __VirtualDump();
+ return (HANDLE) __HeapPrepare(pheap, minsize, maxsize, flags);
+}
+
+/*********************************************************************
+* HeapDestroy -- KERNEL32 *
+*********************************************************************/
+BOOL WINAPI HeapDestroy(HANDLE hheap)
+{
+ PHEAP pheap=(PHEAP) hheap;
+
+ aprintf("HeapDestroy( 0x%lX )\n", (ULONG) hheap );
+
+ if(pheap->Magic!=MAGIC_HEAP)
+ return __ErrorReturnFalse(ERROR_INVALID_PARAMETER);
+
+ DeleteCriticalSection(&(pheap->Synchronize));
+ __VirtualRelease(pheap);
+
+ return TRUE;
+}
+
+/*********************************************************************
+* HeapAlloc -- KERNEL32 *
+*********************************************************************/
+LPVOID WINAPI HeapAlloc(HANDLE hheap, ULONG flags, ULONG size)
+{
+ PHEAP pheap=hheap;
+ LPVOID retval;
+
+ aprintf("HeapAlloc( 0x%lX, 0x%lX, 0x%lX )\n",
+ (ULONG) hheap, flags, (ULONG) size );
+#ifdef NOT
+ HeapValidate(hheap, 0, 0);
+#endif
+ if(( flags | pheap->Flags) & HEAP_NO_SERIALIZE )
+ EnterCriticalSection(&(pheap->Synchronize));
+
+ if(size>HEAP_FRAGMENT_THRESHOLD)
+ retval=__HeapAlloc(pheap, flags, size, HEAP_NORMAL_TAG);
+ else
+ retval=__HeapAllocFragment(pheap, flags, size);
+
+ if( (flags | pheap->Flags) & HEAP_NO_SERIALIZE )
+ LeaveCriticalSection(&(pheap->Synchronize));
+
+ aprintf("HeapAlloc returns 0x%lX\n", (ULONG) retval);
+ return retval;
+
+}
+
+/*********************************************************************
+* HeapReAlloc -- KERNEL32 *
+*********************************************************************/
+LPVOID WINAPI HeapReAlloc(HANDLE hheap, ULONG flags, LPVOID ptr, ULONG size)
+{
+ PHEAP pheap=hheap;
+ PHEAP_BLOCK pfree=((PHEAP_BLOCK)ptr-1);
+ LPVOID retval;
+
+ aprintf("HeapReAlloc( 0x%lX, 0x%lX, 0x%lX, 0x%lX )\n",
+ (ULONG) hheap, flags, (ULONG) ptr, size );
+#ifdef NOT
+ HeapValidate(hheap, 0, 0);
+#endif
+ if(( flags | pheap->Flags) & HEAP_NO_SERIALIZE )
+ EnterCriticalSection(&(pheap->Synchronize));
+
+ if(HEAP_ISNORMAL(pfree))
+ retval=__HeapReAlloc(pheap, flags, ptr, size);
+ else if(HEAP_ISFRAG(pfree))
+ retval=__HeapReAllocFragment(pheap, flags, ptr, size);
+ else
+ retval=__ErrorReturnNull(ERROR_INVALID_PARAMETER);
+
+ if( (flags| pheap->Flags) & HEAP_NO_SERIALIZE )
+ LeaveCriticalSection(&(pheap->Synchronize));
+
+ return retval;
+}
+
+/*********************************************************************
+* HeapFree -- KERNEL32 *
+*********************************************************************/
+BOOL WINAPI HeapFree(HANDLE hheap, ULONG flags, LPVOID ptr)
+{
+ PHEAP pheap=hheap;
+ PHEAP_BLOCK pfree=(PHEAP_BLOCK)((LPVOID)ptr-HEAP_ADMIN_SIZE);
+ BOOL retval;
+
+ aprintf("HeapFree( 0x%lX, 0x%lX, 0x%lX )\n",
+ (ULONG) hheap, flags, (ULONG) ptr );
+#ifdef NOT
+ HeapValidate(hheap, 0, 0);
+#endif
+ if(( flags | pheap->Flags) & HEAP_NO_SERIALIZE )
+ EnterCriticalSection(&(pheap->Synchronize));
+
+ if(HEAP_ISNORMAL(pfree))
+ retval=__HeapFree(pheap, flags, ptr);
+ else if(HEAP_ISFRAG(pfree))
+ retval=__HeapFreeFragment(pheap, flags, ptr);
+ else
+ retval=__ErrorReturnFalse(ERROR_INVALID_PARAMETER);
+
+ if( (flags| pheap->Flags) & HEAP_NO_SERIALIZE )
+ LeaveCriticalSection(&(pheap->Synchronize));
+
+ return retval;
+}
+
+/*********************************************************************
+* GetProcessHeap -- KERNEL32 *
+*********************************************************************/
+HANDLE WINAPI GetProcessHeap(VOID)
+{
+ aprintf("GetProcessHeap()\n");
+ return (HANDLE) __ProcessHeap;
+}
+
+/********************************************************************
+* GetProcessHeaps -- KERNEL32 *
+* *
+* NOTE in Win95 this function is not implemented and just returns *
+* ERROR_CALL_NOT_IMPLEMENTED *
+********************************************************************/
+DWORD WINAPI GetProcessHeaps(DWORD maxheaps, PHANDLE phandles )
+{
+ DWORD retval;
+ PHEAP pheap;
+
+ aprintf("GetProcessHeaps( %u, 0x%lX )\n", maxheaps, (ULONG) phandles );
+
+ pheap=__ProcessHeap;
+ retval=0;
+ while((pheap)&&(maxheaps))
+ {
+ *phandles=pheap;
+ phandles++;
+ maxheaps--;
+ retval++;
+ pheap=pheap->NextHeap;
+ }
+ while(pheap)
+ {
+ retval++;
+ pheap=pheap->NextHeap;
+ }
+
+
+ return retval;
+}
+
+/*********************************************************************
+* HeapLock -- KERNEL32 *
+*********************************************************************/
+
+BOOL WINAPI HeapLock(HANDLE hheap)
+{
+ PHEAP pheap=hheap;
+
+ aprintf("HeapLock( 0x%lX )\n", (ULONG) hheap );
+
+ EnterCriticalSection(&(pheap->Synchronize));
+ return TRUE;
+}
+
+/*********************************************************************
+* HeapUnlock -- KERNEL32 *
+*********************************************************************/
+
+BOOL WINAPI HeapUnlock(HANDLE hheap)
+{
+ PHEAP pheap=hheap;
+
+ aprintf("HeapUnlock( 0x%lX )\n", (ULONG) hheap );
+
+ LeaveCriticalSection(&(pheap->Synchronize));
+ return TRUE;
+}
+
+/*********************************************************************
+* HeapCompact -- KERNEL32 *
+* *
+* NT uses this function to compact moveable blocks and other things *
+* Here it does not compact, but it finds the largest free region *
+*********************************************************************/
+
+UINT HeapCompact(HANDLE hheap, DWORD flags)
+{
+ PHEAP pheap=hheap;
+ PHEAP_BLOCK pfree;
+ ULONG freesize;
+ ULONG largestfree;
+
+ if(( flags | pheap->Flags) & HEAP_NO_SERIALIZE )
+ EnterCriticalSection(&(pheap->Synchronize));
+
+ pfree=&(pheap->Start);
+ /* look for the largest free region of memory */
+ largestfree=0;
+ do
+ {
+ freesize=HEAP_SIZE(pfree);
+ if(HEAP_ISFREE(pfree) && freesize>largestfree)
+ largestfree=freesize;
+
+ pfree=HEAP_NEXT(pfree);
+ }
+ while( (LPVOID)pfree < pheap->End );
+
+ if( (flags| pheap->Flags) & HEAP_NO_SERIALIZE )
+ LeaveCriticalSection(&(pheap->Synchronize));
+
+ return largestfree;
+}
+
+/*********************************************************************
+* HeapSize -- KERNEL32 *
+*********************************************************************/
+DWORD WINAPI HeapSize(HANDLE hheap, DWORD flags, LPCVOID pmem)
+{
+ PHEAP pheap=(PHEAP) hheap;
+ PHEAP_BLOCK palloc=((PHEAP_BLOCK)pmem-1);
+ DWORD retval=0;
+
+ aprintf("HeapSize( 0x%lX, 0x%lX, 0x%lX )\n",
+ (ULONG) hheap, flags, (ULONG) pmem );
+
+ if(pheap->Magic!=MAGIC_HEAP)
+ { SetLastError(ERROR_INVALID_PARAMETER); return 0; }
+
+ if(( flags | pheap->Flags) & HEAP_NO_SERIALIZE )
+ EnterCriticalSection(&(pheap->Synchronize));
+
+ if((pmem> (LPVOID)pheap)&&(pmem < pheap->End))
+ {
+ if(HEAP_ISALLOC(palloc))
+ retval=HEAP_SIZE(palloc); /* normal allocation */
+ else if(HEAP_ISFRAG(palloc))
+ retval=HEAP_FRAG_SIZE(palloc); /* fragment */
+ else
+ { SetLastError(ERROR_INVALID_PARAMETER); retval = -1; }
+ }
+
+ if( (flags| pheap->Flags) & HEAP_NO_SERIALIZE )
+ LeaveCriticalSection(&(pheap->Synchronize));
+
+ return retval;
+}
+
+/*********************************************************************
+* HeapValidate -- KERNEL32 *
+* *
+* NOTE: only implemented in NT *
+*********************************************************************/
+BOOL WINAPI HeapValidate(HANDLE hheap, DWORD flags, LPCVOID pmem)
+{
+ PHEAP pheap=(PHEAP)hheap;
+ PHEAP_BLOCK pcheck;
+ PHEAP_BLOCK pprev;
+ PHEAP_BLOCK pnext;
+ PHEAP_SUBALLOC psub;
+ PHEAP_FRAGMENT pfrag;
+ PHEAP_FRAGMENT pnextfrag;
+ PHEAP_FRAGMENT pprevfrag;
+ PHEAP_BUCKET pbucket;
+ INT i;
+ INT number;
+ INT add;
+
+ if(( flags | pheap->Flags) & HEAP_NO_SERIALIZE )
+ EnterCriticalSection(&(pheap->Synchronize));
+
+ if(pmem==NULL)
+ {
+ pcheck=&(pheap->Start);
+ pprev=NULL;
+ /* verify all blocks */
+ do
+ {
+ pnext=HEAP_NEXT(pcheck);
+ if((pprev)&&(HEAP_PREV(pcheck)!=pprev))
+ {
+ dprintf("HeapValidate: linked list invalid, region 0x%lX,"
+ " previous region 0x%lX, list says 0x%lX\n",
+ (ULONG)pcheck, (ULONG)pprev, (ULONG) HEAP_PREV(pcheck));
+ return FALSE;
+ }
+ if(HEAP_ISSUB(pcheck))
+ {
+
+ /* check fragments */
+ psub=(PHEAP_SUBALLOC) ((PHEAP_BLOCK)pcheck+1);
+ pbucket=psub->Bucket;
+ pfrag=(PHEAP_FRAGMENT) ((LPVOID)psub + sizeof(HEAP_SUBALLOC));
+
+ if(psub->NumberFree>pbucket->Number)
+ return FALSE;
+
+ add=pbucket->Size+HEAP_FRAG_ADMIN_SIZE;
+ pprevfrag=NULL;
+ number=0;
+ for(i=0;i<pbucket->Number;i++)
+ {
+ pnextfrag=(PHEAP_FRAGMENT)((LPVOID)pfrag+add);
+ if(pfrag->Magic!=HEAP_FRAG_MAGIC)
+ {
+ dprintf("HeapValidate: fragment %d magic invalid, region 0x%lX,"
+ " previous region 0x%lX\n", i, (ULONG)pcheck, (ULONG)pprev);
+ return FALSE;
+ }
+ if(pfrag->Number!=i)
+ {
+ dprintf("HeapValidate: fragment %d number invalid, region 0x%lX,"
+ " previous region 0x%lX\n", i, (ULONG)pcheck, (ULONG)pprev);
+ return FALSE;
+ }
+ if((psub->Bitmap&(1<<i))==0)
+ number++;
+ if(pfrag->Sub!=psub)
+ {
+ dprintf("HeapValidate: fragment %d suballoc invalid, region 0x%lX,"
+ " previous region 0x%lX\n", i, (ULONG)pcheck, (ULONG)pprev);
+ return FALSE;
+ }
+ pprevfrag=pfrag;
+ pfrag=pnextfrag;
+ }
+ if(number!=psub->NumberFree)
+ {
+ dprintf("HeapValidate: invalid number of free fragments, region 0x%lX,"
+ " previous region 0x%lX\n", (ULONG)pcheck, (ULONG)pprev);
+ return FALSE;
+ }
+ dprintf("HeapValidate: [0x%08lX-0x%08lX] suballocated,"
+ " bucket size=%d, bitmap=0x%08lX\n",
+ (ULONG) pcheck, (ULONG) pnext, pbucket->Size, psub->Bitmap);
+ }
+ else if(HEAP_ISFREE(pcheck))
+ {
+ if(HEAP_RSIZE(pcheck)!=HEAP_SIZE(pcheck))
+ {
+ dprintf("HeapValidate: invalid size of free region 0x%lX,"
+ " previous region 0x%lX\n",
+ (ULONG) pcheck, (ULONG) pprev);
+ return FALSE;
+ }
+ dprintf("HeapValidate: [0x%08lX-0x%08lX] free\n",
+ (ULONG) pcheck, (ULONG) pnext );
+ }
+ else if(HEAP_ISNORMAL(pcheck))
+ {
+ dprintf("HeapValidate: [0x%08lX-0x%08lX] allocated\n",
+ (ULONG) pcheck, (ULONG) pnext );
+ }
+ else
+ {
+ dprintf("HeapValidate: invalid tag %x, region 0x%lX,"
+ " previous region 0x%lX\n", pcheck->Size>>28,
+ (ULONG)pcheck, (ULONG)pprev);
+ return FALSE;
+ }
+ pprev=pcheck;
+ pcheck=HEAP_NEXT(pcheck);
+ }
+ while( (LPVOID)pcheck < pheap->End );
+ }
+
+ if( (flags| pheap->Flags) & HEAP_NO_SERIALIZE )
+ LeaveCriticalSection(&(pheap->Synchronize));
+
+ return TRUE;
+}
+
--- /dev/null
+/*\r
+ * COPYRIGHT: See COPYING in the top level directory\r
+ * Copyright (C) 1996, Onno Hovers, All rights reserved\r
+ * PROJECT: ReactOS system libraries\r
+ * FILE: lib/kernel32/mem/local.cc\r
+ * PURPOSE: Manages the local heap\r
+ * PROGRAMER: Onno Hovers (original wfc version)\r
+ * David Welch (adapted for ReactOS)\r
+ * UPDATE HISTORY:\r
+ * 9/4/98: Adapted from the wfc project\r
+ */\r
+\r
+\r
+/* NOTES\r
+ * \r
+ * The local heap is the same as the global heap for win32 and both are only\r
+ * required for legacy apps\r
+ *\r
+ */\r
+\r
+/* INCLUDES ****************************************************************/\r
+\r
+#include <windows.h>\r
+#include <kernel32/heap.h>\r
+\r
+/* FUNCTIONS ***************************************************************/\r
+\r
+/*********************************************************************\r
+* LocalFlags -- KERNEL32 *\r
+*********************************************************************/\r
+UINT WINAPI LocalFlags(HLOCAL hmem)\r
+{\r
+ DWORD retval;\r
+ PGLOBAL_HANDLE phandle;\r
+ \r
+ if(((ULONG)hmem%8)==0)\r
+ {\r
+ retval=0;\r
+ }\r
+ else\r
+ {\r
+ HeapLock(__ProcessHeap);\r
+ phandle=(PGLOBAL_HANDLE)(((LPVOID) hmem)-4);\r
+ if(phandle->Magic==MAGIC_GLOBAL_USED)\r
+ { \r
+ retval=phandle->LockCount + (phandle->Flags<<8);\r
+ if(phandle->Pointer==0)\r
+ retval|= LMEM_DISCARDED;\r
+ }\r
+ else\r
+ {\r
+ dprintf("GlobalSize: invalid handle\n");\r
+ retval=0;\r
+ }\r
+ HeapUnlock(__ProcessHeap);\r
+ }\r
+ return retval;\r
+}\r
+\r
+\r
+/*********************************************************************\r
+* LocalAlloc -- KERNEL32 *\r
+*********************************************************************/\r
+HLOCAL WINAPI LocalAlloc(UINT flags, UINT size)\r
+{\r
+ return (HLOCAL) GlobalAlloc( flags, size );\r
+}\r
+\r
+/*********************************************************************\r
+* LocalLock -- KERNEL32 *\r
+*********************************************************************/\r
+LPVOID WINAPI LocalLock(HLOCAL hmem)\r
+{\r
+ return GlobalLock( (HGLOBAL) hmem );\r
+}\r
+\r
+/*********************************************************************\r
+* LocalUnlock -- KERNEL32 *\r
+*********************************************************************/\r
+BOOL WINAPI LocalUnlock(HLOCAL hmem)\r
+{\r
+ return GlobalUnlock( (HGLOBAL) hmem);\r
+}\r
+\r
+/*********************************************************************\r
+* LocalHandle -- KERNEL32 *\r
+*********************************************************************/\r
+HLOCAL WINAPI LocalHandle(LPCVOID pmem)\r
+{\r
+ return (HLOCAL) GlobalHandle(pmem);\r
+}\r
+\r
+/*********************************************************************\r
+* LocalReAlloc -- KERNEL32 *\r
+*********************************************************************/\r
+HLOCAL WINAPI LocalReAlloc(HLOCAL hmem, UINT size, UINT flags)\r
+{\r
+ return (HLOCAL) GlobalReAlloc( (HGLOBAL) hmem, size, flags);\r
+}\r
+\r
+/*********************************************************************\r
+* LocalFree -- KERNEL32 *\r
+*********************************************************************/\r
+HLOCAL WINAPI LocalFree(HLOCAL hmem)\r
+{\r
+ return (HLOCAL) GlobalFree( (HGLOBAL) hmem );\r
+}\r
+\r
+/*********************************************************************\r
+* LocalSize -- KERNEL32 *\r
+*********************************************************************/\r
+UINT WINAPI LocalSize(HLOCAL hmem)\r
+{\r
+ return GlobalSize( (HGLOBAL) hmem );\r
+}\r
+\r
+/*********************************************************************\r
+* LocalShrink -- KERNEL32 *\r
+*********************************************************************/\r
+UINT WINAPI LocalShrink(HLOCAL hmem, UINT newsize)\r
+{\r
+ return (__ProcessHeap->End - (LPVOID) __ProcessHeap);\r
+}\r
--- /dev/null
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS user mode libraries
+ * FILE: kernel32/mem/utils.cc
+ * PURPOSE: Various simple memory initalizations functions
+ */
+
+#include <windows.h>
+
+VOID ZeroMemory(PVOID Destination, DWORD Length)
+{
+ #ifdef __i386__
+
+ #endif /* __i386__ */
+}
+
+VOID CopyMemory(PVOID Destination, CONST VOID* Source, DWORD Length)
+{
+ #ifdef __i386__
+ #endif /* __i386__ */
+}
+
+
--- /dev/null
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS kernel
+ * FILE: lib/kernel32/mem/virtual.c
+ * PURPOSE: Passing the Virtualxxx functions onto the kernel
+ * PROGRAMMER: David Welch (welch@mcmail.com)
+ */
+
+/* INCLUDES ******************************************************************/
+
+#include <windows.h>
+
+/* FUNCTIONS *****************************************************************/
+
+WINBOOL STDCALL VirtualFree(LPVOID lpAddress, DWORD dwSize, DWORD dwFreeType)
+{
+ return(VirtualFreeEx(GetCurrentProcess(),lpAddress,dwSize,dwFreeType));
+}
+
--- /dev/null
+
+
+#include <Atom.h>
+#include <process.h>
+#include <thread.h>
+#include <wstring.h>
+
+
+/*
+ title: atom.c
+ author: Boudewijn Dekker
+ hsitory:copied from twin wine source
+ modified: -- add wide char support
+ -- removed ex functions
+ -- use a per process local atom table
+ todo :
+ check initatomtable
+ check if not calling down to ntdll conflicts with anything
+ check anis2unicode procedure
+*/
+
+
+/* system global and local atom tables */
+
+static ATOMTABLE GlobalAtomTable;
+
+/* internal functions */
+ATOM GLDeleteAtom(ATOMTABLE *at, ATOM nAtom);
+ATOM AWGLAddAtom( ATOMTABLE *at, const wchar_t *lpString);
+ATOM AWGLFindAtom(ATOMTABLE *at, const wchar_t *lpString);
+UINT AWGLGetAtomName(ATOMTABLE *at,ATOM atom, wchar_t *lpString, int nSize);
+
+static ATOMENTRY *GetAtomPointer(ATOMTABLE *,int);
+static ATOMID AtomHashString(const wchar_t *,int *);
+
+#define ATOMBASE 0xcc00
+
+
+
+ATOM
+STDCALL
+GlobalDeleteAtom(
+ ATOM nAtom
+ )
+{
+ return GLDeleteAtom(&GlobalAtomTable, nAtom);
+}
+
+
+BOOL
+STDCALL
+InitAtomTable(
+ DWORD nSize
+ )
+{
+// nSize should be a prime number
+
+ if ( nSize < 4 || nSize >= 512 ) {
+ nSize = 37;
+ }
+ /*
+ if ( GetTeb()->pPeb->LocalAtomTable == NULL ) {
+ GetTeb()->pPeb->LocalAtomTable = (ATOMTABLE *)malloc(nSize*sizeof(ATOMTABLE));
+ }
+
+ GetTeb()->pPeb->LocalAtomTable->TableSize = nSize;
+ */
+ return TRUE;
+}
+
+
+ATOM
+STDCALL
+DeleteAtom(
+ ATOM nAtom
+ )
+{
+ return GLDeleteAtom(&GetTeb()->pPeb->LocalAtomTable, nAtom);
+
+}
+
+
+
+
+ATOM
+STDCALL
+GlobalAddAtomA(
+ const char *lpString
+ )
+{
+
+ UINT BufLen = strlen(lpString);
+ wchar_t *lpBuffer = (wchar_t *)malloc(BufLen*sizeof(wchar_t));
+ ATOM atom;
+ ansi2unicode(lpBuffer, lpString,BufLen);
+ atom = AWGLAddAtom(&GlobalAtomTable,lpBuffer );
+ free(lpBuffer);
+ return atom;
+}
+
+
+
+
+
+ATOM
+STDCALL
+GlobalAddAtomW(
+ const wchar_t *lpString
+ )
+{
+ return AWGLAddAtom(&GlobalAtomTable, lpString);
+}
+
+
+ATOM
+STDCALL
+GlobalFindAtomA(
+ const char *lpString
+ )
+{
+ ATOM a;
+ UINT BufLen = strlen(lpString);
+ wchar_t *lpBuffer = (wchar_t *)malloc(BufLen*sizeof(wchar_t));
+ ansi2unicode(lpBuffer, lpString,BufLen);
+ a = AWGLFindAtom(&GlobalAtomTable, lpBuffer);
+ free(lpBuffer);
+ return a;
+}
+
+
+ATOM
+STDCALL
+GlobalFindAtomW(
+ const wchar_t *lpString
+ )
+{
+ return AWGLFindAtom(&GlobalAtomTable, lpString);
+}
+
+
+
+UINT
+STDCALL
+GlobalGetAtomNameA(
+ ATOM nAtom,
+ char *lpBuffer,
+ int nSize
+ )
+{
+
+ wchar_t *lpUnicode = (wchar_t *)malloc(nSize *sizeof(wchar_t));
+ UINT x = AWGLGetAtomName(&GlobalAtomTable,nAtom, lpUnicode,nSize);
+ unicode2ansi(lpBuffer,lpUnicode,nSize);
+ free(lpUnicode);
+ return x;
+}
+
+
+UINT
+STDCALL
+GlobalGetAtomNameW(
+ ATOM nAtom,
+ wchar_t * lpBuffer,
+ int nSize
+ )
+{
+ return AWGLGetAtomName(&GlobalAtomTable, nAtom, lpBuffer, nSize);
+}
+
+
+ATOM
+STDCALL
+AddAtomA(
+ const char *lpString
+ )
+{
+ UINT BufLen = strlen(lpString);
+ wchar_t *lpBuffer = (wchar_t*)malloc(BufLen*2);
+ ATOM a;
+ ansi2unicode(lpBuffer, lpString,BufLen);
+ a = AWGLAddAtom(&GetTeb()->pPeb->LocalAtomTable, lpBuffer);
+ free(lpBuffer);
+ return a;
+
+}
+
+
+ATOM
+STDCALL
+AddAtomW(
+ const wchar_t * lpString
+ )
+{
+ return AWGLAddAtom(&GetTeb()->pPeb->LocalAtomTable, lpString);
+}
+
+
+
+
+ATOM
+STDCALL
+FindAtomA(
+ const char *lpString
+ )
+{
+ UINT BufLen = strlen(lpString);
+ wchar_t *lpBuffer = (wchar_t *)malloc(BufLen*2);
+ ATOM a;
+ ansi2unicode(lpBuffer, lpString,BufLen);
+ a = AWGLFindAtom(&GetTeb()->pPeb->LocalAtomTable, lpBuffer);
+ free(lpBuffer);
+ return a;
+}
+
+
+ATOM
+STDCALL
+FindAtomW(
+ const wchar_t * lpString
+ )
+{
+ return AWGLFindAtom(&GetTeb()->pPeb->LocalAtomTable, lpString);
+}
+
+
+
+UINT
+STDCALL
+GetAtomNameA(
+ ATOM nAtom,
+ char *lpBuffer,
+ int nSize
+ )
+{
+ LPWSTR lpUnicode = (wchar_t *)malloc(nSize *2);
+ UINT x = AWGLGetAtomName(&GlobalAtomTable, nAtom,lpUnicode,nSize);
+ unicode2ansi(lpBuffer,lpUnicode,nSize);
+ free(lpUnicode);
+ return x;
+}
+
+
+UINT
+STDCALL
+GetAtomNameW(
+ ATOM nAtom,
+ wchar_t * lpBuffer,
+ int nSize
+ )
+{
+ return AWGLGetAtomName(&GetTeb()->pPeb->LocalAtomTable,nAtom,lpBuffer, nSize);
+}
+
+ATOM
+GLDeleteAtom(
+ ATOMTABLE *at, ATOM nAtom
+ )
+{
+
+ ATOMENTRY *lp;
+
+ /* a free slot has q == 0 && refcnt == 0 */
+ if((lp = GetAtomPointer(at,nAtom - ATOMBASE))) {
+ if(lp->idsize)
+ lp->refcnt--;
+
+ if(lp->refcnt == 0) {
+ free(at->AtomTable);
+ at->AtomTable = NULL;
+ free(at->AtomData);
+ at->AtomData = NULL;
+ return lp->q = 0;
+ }
+ }
+ return nAtom;
+
+
+
+}
+
+
+ATOM
+AWGLAddAtom(
+ ATOMTABLE *at, const wchar_t *lpString
+ )
+{
+ ATOM atom;
+ ATOMID q;
+ LPATOMENTRY lp,lpfree;
+ int index,freeindex;
+ int atomlen;
+ int newlen;
+
+
+
+ /* if we already have it, bump refcnt */
+ if((atom = AWGLFindAtom(at, lpString ))) {
+ lp = GetAtomPointer(at,atom - ATOMBASE);
+ if(lp->idsize) lp->refcnt++;
+ return atom;
+ }
+
+ /* add to a free slot */
+ q = AtomHashString(lpString,&atomlen);
+
+ lpfree = 0;
+ freeindex = 0;
+
+ for(index = 0;(lp = GetAtomPointer(at,index));index++) {
+ if(lp->q == 0 && lp->refcnt == 0) {
+ if(lp->idsize > atomlen) {
+ if ((lpfree == 0) ||
+ (lpfree->idsize > lp->idsize)) {
+ lpfree = lp;
+ freeindex = index;
+ }
+ }
+ }
+ }
+ /* intatoms do not take space in data, but do get new entries */
+ /* an INTATOM will have length of 0 */
+ if(lpfree && atomlen) {
+ lpfree->q = q;
+ lpfree->refcnt = 1;
+ wcsncpy(&at->AtomData[lpfree->idx],lpString,atomlen);
+ return freeindex + ATOMBASE;
+ }
+
+ /* no space was available, or we have an INTATOM */
+ /* so expand or create the table */
+ if(at->AtomTable == 0) {
+ at->AtomTable = (ATOMENTRY *) malloc(sizeof(ATOMENTRY));
+ at->TableSize = 1;
+ lp = at->AtomTable;
+ index = 0;
+ } else {
+ at->TableSize++;
+ at->AtomTable = (ATOMENTRY *) realloc(
+ (LPVOID) at->AtomTable,
+ at->TableSize * sizeof(ATOMENTRY));
+ lp = &at->AtomTable[at->TableSize - 1];
+ }
+
+ /* set in the entry */
+ lp->refcnt = 1;
+ lp->q = q;
+ lp->idsize = atomlen;
+ lp->idx = 0;
+
+ /* add an entry if not intatom... */
+ if(atomlen) {
+ newlen = at->DataSize + atomlen;
+
+ if(at->AtomData == 0) {
+ at->AtomData = (wchar_t *) malloc(newlen*2);
+ lp->idx = 0;
+ } else {
+
+ at->AtomData = (wchar_t *) realloc(at->AtomData,newlen*2);
+ lp->idx = at->DataSize;
+ }
+
+ wcscpy(&at->AtomData[lp->idx],lpString);
+ at->DataSize = newlen;
+ }
+
+ return index + ATOMBASE;
+}
+
+
+
+
+
+
+
+
+
+
+ATOM
+AWGLFindAtom(
+ ATOMTABLE *at, const wchar_t *lpString
+ )
+{
+
+ ATOMID q;
+ LPATOMENTRY lp;
+ int index;
+ int atomlen;
+
+
+
+
+ /* convert string to 'q', and get length */
+ q = AtomHashString(lpString,&atomlen);
+
+ /* find the q value, note: this could be INTATOM */
+ /* if q matches, then do case insensitive compare*/
+ for(index = 0;(lp = GetAtomPointer(at,index));index++) {
+ if(lp->q == q) {
+ if(HIWORD(lpString) == 0)
+ return ATOMBASE + index;
+ if(wcsicmp(&at->AtomData[lp->idx],lpString) == 0)
+ return ATOMBASE + index;
+ }
+ }
+ return 0;
+}
+
+
+UINT
+AWGLGetAtomName(ATOMTABLE *at, ATOM atom, wchar_t *lpString,int len)
+{
+
+ ATOMENTRY *lp;
+ wchar_t *atomstr;
+ int atomlen;
+
+
+
+ /* return the atom name, or create the INTATOM */
+ if((lp = GetAtomPointer(at,atom - ATOMBASE))) {
+ if(lp->idsize) {
+ atomlen = wcslen(atomstr = &at->AtomData[lp->idx]);
+ if (atomlen < len)
+ wcscpy(lpString,atomstr);
+ else {
+ wcsncpy(lpString,atomstr,len-1);
+ lpString[len-1] = '\0';
+ }
+ return (UINT)wcslen(lpString);
+ } else {
+ //wsprintf((wchar *)lpString,"#%d",lp->q);
+ return (UINT)wcslen(lpString);
+ }
+ }
+ return 0;
+}
+
+
+/********************************************************/
+/* convert alphanumeric string to a 'q' value. */
+/* 'q' values do not need to be unique, they just limit */
+/* the search we need to make to find a string */
+/********************************************************/
+
+static ATOMID
+AtomHashString(const wchar_t * lp,int *lplen)
+{
+ ATOMID q;
+ wchar_t *p,ch;
+ int len;
+
+ /* if we have an intatom... */
+ if(HIWORD(lp) == 0) {
+ if(lplen) *lplen = 0;
+ return (ATOMID)lp;
+ }
+
+ /* convert the string to an internal representation */
+ for(p=(wchar_t *)lp,q=0,len=0;(p++,ch=*p++);len++)
+ q = (q<<1) + iswlower(ch)?towupper(ch):ch;
+
+ /* 0 is reserved for empty slots */
+ if(q == 0)
+ q++;
+
+ /* avoid strlen later */
+ /* check out with unicode */
+ if(lplen) {
+ *lplen = ++len;
+ }
+ return q;
+}
+
+/********************************************************/
+/* convert an atom index into a pointer into an */
+/* atom table. This validates the pointer is in */
+/* range, and that the data is accessible */
+/********************************************************/
+
+static ATOMENTRY *
+GetAtomPointer(ATOMTABLE *at,int index)
+{
+ ATOMENTRY *lp;
+
+ /* if no table, then no pointers */
+ if(at->AtomTable == 0)
+ return 0;
+
+ /* bad index */
+ if((index < 0) || (index >= at->TableSize))
+ return 0;
+
+ /* we have a pointer */
+ lp = &at->AtomTable[index];
+
+
+ /* is the index past stored data, validity check */
+ /* LATER: is the size of the entry within the available space */
+ if(lp->idx > at->DataSize)
+ return 0;
+
+ return lp;
+}
+
+int ansi2unicode( wchar_t *uni, char *ansi, int s)
+{
+ register int i;
+
+ for(i=0;i<=s;i++)
+ uni[i] = (wchar_t)ansi[i];
+ return;
+}
+
+int unicode2ansi( char *ansi, wchar_t *uni, int s)
+{
+ register int i;
+
+ for(i=0;i<=s;i++)
+ ansi[i] = (char)uni[i];
+ return;
+}
+
+
+
+
+
--- /dev/null
+#include <process.h>
+/*
+ * Win32 Process Api functions
+ * Author: Boudewijn Dekker
+ * to do: many more to add ..
+ * open matters: ProcessInformation should be per process
+ and part of larger structure.
+ */
+
+
+
+
+#define NT_CURRENT_PROCESS 0xFFFFFFFF
+#define NT_CURRENT_THREAD 0xFFFFFFFE
+
+
+WINBASEAPI
+HANDLE
+WINAPI
+GetCurrentProcess()
+{
+ return NT_CURRENT_PROCESS;
+}
+
+WINBASEAPI
+DWORD
+WINAPI
+GetCurrentProcessId()
+{
+ return GetTeb()->dwProcessId;
+}
+
+
+WINBASEAPI
+HANDLE
+WINAPI
+GetCurrentThread()
+{
+ return NT_CURRENT_PROCESS;
+}
+
+WINBASEAPI
+DWORD
+WINAPI
+GetCurrentThreadId()
+{
+
+ return GetTeb()->dwThreadId;
+}
+
+UINT WinExec ( LPCSTR lpCmdLine, UINT uCmdShow )
+{
+ STARTUPINFO StartUpInfo;
+ StartupInfo.wShowWindow = uCmdShow ;
+ PROCESS_INFORMATION ProcessInformation;
+ StartupInfo.cb = sizeof(STARTUPINFO);
+ StartupInfo.dwFlags = 0;
+
+ HINSTANCE hInst = CreateProcess(NULL,lpCmdLine,NULL,NULL,FALSE,NULL,NULL,NULL,&StartupInfo, &ProcessInformation);
+ if ( hInst == NULL ) {
+ dosErr = GetLastError();
+ if ( dosErr == 0x000000C1 )
+ return 0; // out of resources
+ else
+ return dosErr;
+ }
+ if ( lpfuncGlobalRegisterWaitForInputIdle != NULL )
+ lpfuncGlobalRegisterWaitForInputIdle(0x00007530,ProcessInformation->hProcess);
+ NtClose(ProcessInformation->hProcess);
+ NtClose(ProcessInformation->hThread);
+ return;
+
+}
+
+
+
+VOID RegisterWaitForInputIdle(lpfuncRegisterWaitForInputIdle)
+{
+ lpfuncGlobalRegisterWaitForInputIdle = lpfuncRegisterWaitForInputIdle; //77F450C8
+}
+
+
+#define STARTF_IO 0x00000700
+
+VOID
+STDCALL
+GetStartupInfoW(
+ LPSTARTUPINFO lpStartupInfo
+ )
+{
+ NT_PEB *pPeb = GetTeb()->pPeb;
+
+ if (lpStartupInfo == NULL ) {
+ SetLastError(-1);
+ return;
+ }
+
+
+ lpStartupInfo->cb = pPeb->pPebInfo->cb;
+ lpStartupInfo->lpReserved = pPeb->pPebInfo->lpReserved1;
+ lpStartupInfo->lpDesktop = pPeb->pPebInfo->lpDesktop;
+ lpStartupInfo->lpTitle = pPeb->pPebInfo->lpTitle;
+ lpStartupInfo->dwX = pPeb->pPebInfo->dwX;
+ lpStartupInfo->dwY = pPeb->pPebInfo->dwY;
+ lpStartupInfo->dwXSize = pPeb->pPebInfo->dwXSize;
+ lpStartupInfo->dwYSize = pPeb->pPebInfo->dwYSize;
+ lpStartupInfo->dwXCountChars = pPeb->pPebInfo->dwXCountChars;
+ lpStartupInfo->dwYCountChars = pPeb->pPebInfo->dwYCountChars;
+ lpStartupInfo->dwFillAttribute = pPeb->pPebInfo->dwFillAttribute;
+ lpStartupInfo->dwFlags = pPeb->pPebInfo->dwFlags;
+ lpStartupInfo->wShowWindow = pPeb->pPebInfo->wShowWindow;
+ lpStartupInfo->cbReserved2 = pPeb->pPebInfo->cbReserved;
+ lpStartupInfo->lpReserved2 = pPeb->pPebInfo->lpReserved2;
+ if ( lpStartupInfo.dwFlags == STARTF_IO ) {
+ lpStartupInfo->hStdInput = pPeb->pPebInfo->hStdInput;
+ lpStartupInfo->hStdOutput = pPeb->pPebInfo->hStdOutput;
+ lpStartupInfo->hStdError = pPeb->pPebInfo->hStdError;
+ }
+
+
+}
+
+
+BOOL FlushInstructionCache(
+
+
+ HANDLE hProcess,
+ LPCVOID lpBaseAddress,
+ DWORD dwSize
+ )
+{
+ errCode = NtFlushInstructionCache(hProcess,lpBaseAddress,dwSize);
+ if ( errCode < 0 ) {
+ CompatibleError(errCode);
+ return FALSE;
+ }
+}
--- /dev/null
+#include <windows.h>
+#include <string.h>
+#include <wstring.h>
+
+int
+STDCALL
+lstrcmpA(
+ LPCSTR lpString1,
+ LPCSTR lpString2
+ )
+{
+ return strcmp(lpString1,lpString2);
+}
+
+int
+STDCALL
+lstrcmpiA(
+ LPCSTR lpString1,
+ LPCSTR lpString2
+ )
+{
+ return stricmp(lpString1,lpString2);
+}
+LPSTR
+STDCALL
+lstrcpynA(
+ LPSTR lpString1,
+ LPCSTR lpString2,
+ int iMaxLength
+ )
+{
+ return strncpy(lpString1,lpString2,iMaxLength);
+}
+
+LPSTR
+STDCALL
+lstrcpyA(
+ LPSTR lpString1,
+ LPCSTR lpString2
+ )
+{
+ return strcpy(lpString1,lpString2);
+}
+
+LPSTR
+STDCALL
+lstrcatA(
+ LPSTR lpString1,
+ LPCSTR lpString2
+ )
+{
+ return strcat(lpString1,lpString2);
+}
+
+int
+STDCALL
+lstrlenA(
+ LPCSTR lpString
+ )
+{
+ return strlen(lpString);
+}
+
+int
+STDCALL
+lstrcmpW(
+ LPCWSTR lpString1,
+ LPCWSTR lpString2
+ )
+{
+ return wcscmp(lpString1,lpString2);
+}
+
+int
+STDCALL
+lstrcmpiW(
+ LPCWSTR lpString1,
+ LPCWSTR lpString2
+ )
+{
+ return wcsicmp(lpString1,lpString2);
+
+}
+
+LPWSTR
+STDCALL
+lstrcpynW(
+ LPWSTR lpString1,
+ LPCWSTR lpString2,
+ int iMaxLength
+ )
+{
+ return wcsncpy(lpString1,lpString2,iMaxLength);
+}
+
+LPWSTR
+STDCALL
+lstrcpyW(
+ LPWSTR lpString1,
+ LPCWSTR lpString2
+ )
+{
+ return wcscpy(lpString1,lpString2);
+}
+
+LPWSTR
+STDCALL
+lstrcatW(
+ LPWSTR lpString1,
+ LPCWSTR lpString2
+ )
+{
+ return wcscat(lpString1,lpString2);
+}
+
+int
+STDCALL
+lstrlenW(
+ LPCWSTR lpString
+ )
+{
+ return wcslen(lpString);
+}
\ No newline at end of file
--- /dev/null
+
+/*
+author: Boudewijn Dekker
+original source : wine
+todo: improve debug info
+*/
+
+#include <thread.h>
+
+
+WINBASEAPI
+BOOL
+WINAPI
+SwitchToThread(
+ VOID
+ )
+{
+ return NtYieldExecution();
+}
+
+/* (WIN32) Thread Local Storage ******************************************** */
+
+DWORD WINAPI
+TlsAlloc(VOID)
+{
+ DWORD dwTlsIndex = GetTeb()->dwTlsIndex;
+ void **TlsData = GetTeb()->TlsData;
+
+ APISTR((LF_API, "TlsAlloc: (API)\n"));
+ if (dwTlsIndex < sizeof(TlsData) / sizeof(TlsData[0]))
+ {
+ TlsData[dwTlsIndex] = NULL;
+ return (dwTlsIndex++);
+ }
+ return (0xFFFFFFFFUL);
+}
+
+BOOL WINAPI
+TlsFree(DWORD dwTlsIndex)
+{
+ APISTR((LF_APISTUB, "TlsFree(DWORD=%ld)\n", dwTlsIndex));
+ return (TRUE);
+}
+
+LPVOID WINAPI
+TlsGetValue(DWORD dwTlsIndex)
+{
+
+ DWORD dwTlsIndex = GetTeb()->dwTlsIndex;
+ void **TlsData = GetTeb()->TlsData;
+
+ APISTR((LF_API, "TlsGetValue: (API) dwTlsIndex %ld\n", dwTlsIndex));
+ if (dwTlsIndex < sizeof(TlsData) / sizeof(TlsData[0]))
+ {
+ LOGSTR((LF_LOG, "TlsGetValue: (LOG) [%ld] = %p\n",
+ dwTlsIndex, TlsData[dwTlsIndex]));
+ SetLastError(NO_ERROR);
+ return (TlsData[dwTlsIndex]);
+ }
+ SetLastErrorEx(1, 0);
+ return (NULL);
+}
+
+BOOL WINAPI
+TlsSetValue(DWORD dwTlsIndex, LPVOID lpTlsValue)
+{
+
+ DWORD dwTlsIndex = GetTeb()->dwTlsIndex;
+ void **TlsData = GetTeb()->TlsData;
+
+ APISTR((LF_API, "TlsSetValue: (API) dwTlsIndex %ld lpTlsValue %p\n",
+ dwTlsIndex, lpTlsValue));
+ if (dwTlsIndex < sizeof(TlsData) / sizeof(TlsData[0]))
+ {
+ LOGSTR((LF_LOG, "TlsSetValue: (LOG) [%ld] = %p\n",
+ dwTlsIndex, lpTlsValue));
+ TlsData[dwTlsIndex] = lpTlsValue;
+ return (TRUE);
+ }
+ return (FALSE);
+}
+
+/*************************************************************/
\ No newline at end of file
--- /dev/null
+LIBRARIES = ntdll kernel32
+
+all: $(LIBRARIES)
+
+ntdll: dummy
+ make -C ntdll
+
+kernel32: dummy
+ make -C kernel32
+
+dummy:
+
--- /dev/null
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS version of ntdll
+ * FILE: lib/ntdll/genntdll.c
+ * PURPOSE: Generates the system call stubs in ntdll
+ * PROGRAMMER: David Welch (welch@welch)
+ */
+
+/* INCLUDE ******************************************************************/
+
+#include <stdio.h>
+#include <stdlib.h>
+
+/* FUNCTIONS ****************************************************************/
+
+int process(FILE* in, FILE* out)
+{
+ char line[255];
+ char* s;
+ char* name;
+ char* value;
+
+ fprintf(out,"/*\n");
+ fprintf(out," * Machine generated, don't edit\n");
+ fprintf(out," */\n\n");
+ fprintf(out,"#include <ntdll/napi.h>\n\n");
+
+ while (!feof(in) && fgets(line,255,in)!=NULL)
+ {
+ fgets(line,255,in);
+ if ((s=strchr(line,'\n'))!=NULL)
+ {
+ *s=0;
+ }
+ s=&line[0];
+ if ((*s)!='#')
+ {
+ name = strtok(s," \t");
+ value = strtok(NULL," \t");
+ printf("name %s value %s\n",name,value);
+
+ fprintf(out,"NTSTATUS %s(UCHAR first_arg)\n",name);
+ fprintf(out,"{\n");
+ fprintf(out,"\tMAKE_NTAPI_CALL(%s,first_arg);\n",value);
+ fprintf(out,"}\n");
+ }
+ }
+}
+
+void usage(void)
+{
+ printf("Usage: genntdll infile.cll outfile.c\n");
+}
+
+int main(int argc, char* argv[])
+{
+ FILE* in;
+ FILE* out;
+ int ret;
+
+ if (argc!=3)
+ {
+ usage();
+ return(1);
+ }
+
+ in = fopen(argv[1],"rb");
+ if (in==NULL)
+ {
+ perror("Failed to open input file");
+ return(1);
+ }
+
+ out = fopen(argv[2],"wb");
+ if (out==NULL)
+ {
+ perror("Failed to open output file");
+ return(1);
+ }
+
+ ret = process(in,out);
+
+ fclose(in);
+ fclose(out);
+
+ return(ret);
+}
--- /dev/null
+all: genntdll$(EXE_POSTFIX)
+
+genntdll$(EXE_POSTFIX): genntdll.c
+ $(NATIVE_CC) -g genntdll.c -o genntdll$(EXE_POSTFIX)
+dummy:
+
+include ../../rules.mak
--- /dev/null
+/*
+ * Machine generated, don't edit
+ */
+
+#include <ntdll/napi.h>
+
+NTSTATUS NtAlertThread(UCHAR first_arg)
+{
+ MAKE_NTAPI_CALL(4,first_arg);
+}
--- /dev/null
+#
+# This defines the kernel entry points used by ntdll
+#
+NtAlertThread 4
--- /dev/null
+ .file "ntdll.c"
+ .version "01.01"
+gcc2_compiled.:
+.text
+ .align 16
+.globl NtAlertThread
+ .type NtAlertThread,@function
+NtAlertThread:
+ subl $4,%esp
+ movb 8(%esp),%al
+ movb %al,3(%esp)
+ leal 3(%esp),%edx
+ movl $4,%eax
+#APP
+ int $0x2e
+
+#NO_APP
+ addl $4,%esp
+ ret
+.Lfe1:
+ .size NtAlertThread,.Lfe1-NtAlertThread
+ .ident "GCC: (GNU) 2.7.2.3"
--- /dev/null
+;\r
+; File:\r
+; boot.asm\r
+; Description:\r
+; DOS-C boot\r
+;\r
+; Copyright (c) 1997; \r
+; Svante Frey\r
+; All Rights Reserved\r
+;\r
+; This file is part of DOS-C.\r
+;\r
+; DOS-C is free software; you can redistribute it and/or\r
+; modify it under the terms of the GNU General Public License\r
+; as published by the Free Software Foundation; either version\r
+; 2, or (at your option) any later version.\r
+;\r
+; DOS-C is distributed in the hope that it will be useful, but\r
+; WITHOUT ANY WARRANTY; without even the implied warranty of\r
+; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See\r
+; the GNU General Public License for more details.\r
+;\r
+; You should have received a copy of the GNU General Public\r
+; License along with DOS-C; see the file COPYING. If not,\r
+; write to the Free Software Foundation, 675 Mass Ave,\r
+; Cambridge, MA 02139, USA.\r
+;\r
+; $Logfile: C:/dos-c/src/boot/boot.asv $\r
+;\r
+; $Header: /cygdrive/c/RCVS/CVS/ReactOS/reactos/loaders/boot/Attic/boot.asm,v 1.1 1996/01/23 01:02:19 rosmgr Exp $\r
+;\r
+; $Log: boot.asm,v $\r
+; Revision 1.1 1996/01/23 01:02:19 rosmgr\r
+; Initial revision\r
+;\r
+; \r
+; Rev 1.5 10 Jan 1997 4:58:06 patv\r
+; Corrected copyright\r
+; \r
+; Rev 1.4 10 Jan 1997 4:52:50 patv\r
+; Re-written to support C drive and eliminate restrictions on IPL.SYS\r
+; \r
+; Rev 1.3 29 Aug 1996 13:06:50 patv\r
+; Bug fixes for v0.91b\r
+; \r
+; Rev 1.2 01 Sep 1995 17:56:44 patv\r
+; First GPL release.\r
+; \r
+; Rev 1.1 30 Jul 1995 20:37:38 patv\r
+; Initialized stack before use.\r
+; \r
+; Rev 1.0 02 Jul 1995 10:57:52 patv\r
+; Initial revision.\r
+;\r
+\r
+section .text\r
+\r
+ org 0\r
+Entry: jmp real_start\r
+\r
+; bp is initialized to 7c00h\r
+%define oem [bp+3]\r
+%define bytesPerSector [bp+0bh]\r
+%define sectPerCluster [bp+0dh]\r
+%define resSectors [bp+0eh]\r
+%define nFats [bp+10h]\r
+%define nRootDir [bp+11h]\r
+%define nSectors [bp+13h]\r
+%define MID [bp+15h]\r
+%define sectPerFat [bp+16h]\r
+%define sectPerTrack [bp+18h]\r
+%define nHeads [bp+1ah]\r
+%define nHidden [bp+1ch]\r
+%define nHidden_hi [bp+1eh]\r
+%define nSectorHuge [bp+20h]\r
+%define drive [bp+24h]\r
+%define extBoot [bp+26h]\r
+%define volid [bp+27h]\r
+%define vollabel [bp+2bh]\r
+%define filesys 36h\r
+\r
+LOADSEG equ 2000h\r
+\r
+FATBUF equ 4000h ; offset of temporary buffer for FAT \r
+ ; chain\r
+RETRYCOUNT equ 5 ; number of retries on disk errors\r
+\r
+; Some extra variables that are created on the stack frame\r
+\r
+%define fat_start [bp-4] ; first FAT sector\r
+%define fat_start_hi [bp-2]\r
+%define root_dir_start [bp-8] ; first root directory sector\r
+%define root_dir_start_hi [bp-6]\r
+%define data_start [bp-12] ; first data sector\r
+%define data_start_hi [bp-10]\r
+\r
+;\r
+; Include macros for filesystem access\r
+;\r
+%include "boot.inc"\r
+\r
+;\r
+;\r
+;\r
+ TIMES 3eh-($-$$) DB 0\r
+\r
+%define tempbuf [bp+3eh]\r
+load_seg dw LOADSEG\r
+\r
+real_start: cli\r
+ cld\r
+ mov ax, cs\r
+ mov ss, ax ; initialize stack \r
+ mov bp, 7c00h\r
+ lea sp, [bp-20h]\r
+ sti\r
+\r
+ mov es, ax\r
+ mov ds, ax\r
+ mov drive, dl ; BIOS passes drive number in DL\r
+\r
+ GETDRIVEPARMS\r
+\r
+ FINDFILE ; locate file in root directory\r
+ jc boot_error ; fail if not found\r
+\r
+ GETFATCHAIN ; read FAT chain\r
+ LOADFILE ; load file (jumps to boot_sucess if successful)\r
+\r
+boot_error: mov cx, ERRMSGLEN\r
+ mov si, errmsg+7c00h\r
+\r
+next_char: lodsb ; print error message\r
+ mov ah, 0eh\r
+ xor bh, bh\r
+ int 10h\r
+ loop next_char\r
+\r
+ xor ah, ah\r
+ int 16h ; wait for keystroke\r
+ int 19h ; invoke bootstrap loader\r
+\r
+boot_success: mov dl, drive\r
+\r
+ db 0eah ; far jump to LOADSEG:0000\r
+ dw 0\r
+ dw LOADSEG\r
+\r
+\r
+; readDisk: Reads a number of sectors into memory.\r
+;\r
+; Call with: DX:AX = 32-bit DOS sector number\r
+; DI = number of sectors to read\r
+; ES:BX = destination buffer\r
+; ES must be 64k aligned (1000h, 2000h etc).\r
+;\r
+; Returns: CF set on error\r
+; ES:BX points one byte after the last byte read. \r
+\r
+readDisk:\r
+ push si\r
+read_next: push dx\r
+ push ax\r
+\r
+ ;\r
+ ; translate sector number to BIOS parameters\r
+ ;\r
+\r
+ ;\r
+ ; abs = sector offset in track\r
+ ; + head * sectPerTrack offset in cylinder\r
+ ; + track * sectPerTrack * nHeads offset in platter\r
+ ; \r
+ ; t1 = abs / sectPerTrack (ax has t1)\r
+ ; sector = abs mod sectPerTrack (cx has sector)\r
+ ;\r
+ div word sectPerTrack\r
+ mov cx, dx\r
+\r
+ ;\r
+ ; t1 = head + track * nHeads\r
+ ;\r
+ ; track = t1 / nHeads (ax has track)\r
+ ; head = t1 mod nHeads (dl has head)\r
+ ;\r
+ xor dx, dx\r
+ div word nHeads\r
+\r
+ ; the following manipulations are necessary in order to \r
+ ; properly place parameters into registers.\r
+ ; ch = cylinder number low 8 bits\r
+ ; cl = 7-6: cylinder high two bits\r
+ ; 5-0: sector\r
+ mov dh, dl ; save head into dh for bios\r
+ ror ah, 1 ; move track high bits into\r
+ ror ah, 1 ; bits 7-6 (assumes top = 0)\r
+ xchg al, ah ; swap for later\r
+ mov dl, byte sectPerTrack\r
+ sub dl, cl\r
+ inc cl ; sector offset from 1\r
+ or cx, ax ; merge cylinder into sector\r
+ mov al, dl ; al has # of sectors left\r
+\r
+ ; Calculate how many sectors can be transfered in this read\r
+ ; due to dma boundary conditions.\r
+ push dx\r
+\r
+ mov si, di ; temp register save\r
+ ; this computes remaining bytes because of modulo 65536\r
+ ; nature of dma boundary condition\r
+ mov ax, bx ; get offset pointer\r
+ neg ax ; and convert to bytes\r
+ jz ax_min_1 ; started at seg:0, skip ahead\r
+\r
+ xor dx, dx ; convert to sectors\r
+ div word bytesPerSector\r
+ \r
+ cmp ax, di ; check remainder vs. asked\r
+ jb ax_min_1 ; less, skip ahead\r
+ mov si, ax ; transfer only what we can\r
+\r
+ax_min_1: pop dx\r
+\r
+ ; Check that request sectors do not exceed track boundary\r
+ mov si, sectPerTrack\r
+ inc si\r
+ mov ax, cx ; get the sector/cyl byte\r
+ and ax, 03fh ; and mask out sector\r
+ sub si, ax ; si has how many we can read\r
+ mov ax, di\r
+ cmp si, di ; see if asked <= available\r
+ jge ax_min_2\r
+ mov ax, si ; get what can be xfered\r
+\r
+ax_min_2: mov si, RETRYCOUNT\r
+ mov ah, 2\r
+ mov dl, drive\r
+\r
+retry: push ax\r
+ int 13h\r
+ pop ax\r
+ jnc read_ok\r
+ push ax\r
+ xor ax, ax ; reset the drive\r
+ int 13h\r
+ pop ax\r
+ dec si\r
+ jnz retry\r
+ stc\r
+ pop ax\r
+ pop dx\r
+ pop si\r
+ ret\r
+\r
+read_next_jmp: jmp short read_next\r
+read_ok: xor ah, ah \r
+ mov si, ax ; AX = SI = number of sectors read \r
+ mul word bytesPerSector ; AX = number of bytes read\r
+ add bx, ax ; add number of bytes read to BX\r
+ jnc no_incr_es ; if overflow...\r
+\r
+ mov ax, es \r
+ add ah, 10h ; ...add 1000h to ES\r
+ mov es, ax\r
+ \r
+no_incr_es: pop ax\r
+ pop dx ; DX:AX = last sector number\r
+\r
+ add ax, si\r
+ adc dx, 0 ; DX:AX = next sector to read\r
+ sub di, si ; if there is anything left to read,\r
+ jg read_next_jmp ; continue\r
+\r
+ clc\r
+ pop si\r
+ ret\r
+\r
+errmsg db "Boot error"\r
+ERRMSGLEN equ $ - errmsg\r
+\r
+\r
+;filename db "OSLDR BIN"\r
+filename db "KERNEL BIN"\r
+\r
+ TIMES 510-($-$$) DB 0 \r
+sign dw 0aa55h\r
+ \r
+\r
+\r
+\r
+\r
--- /dev/null
+; To save space, functions that are just called once are \r
+; implemented as macros instead. Four bytes are saved by\r
+; avoiding the call / ret instructions.\r
+\r
+\r
+; FINDFILE: Searches for the file in the root directory.\r
+;\r
+; Returns:\r
+;\r
+; If file not found: CF set\r
+; \r
+; If file found: CF clear\r
+; AX = first cluster of file\r
+\r
+\r
+%macro FINDFILE 0 \r
+ ; First, read the whole root directory\r
+ ; into the temporary buffer.\r
+\r
+ mov ax, word root_dir_start\r
+ mov dx, word root_dir_start_hi\r
+ mov di, nRootDir\r
+ xor bx, bx\r
+ mov es, tempbuf\r
+ call readDisk\r
+ jc ffDone\r
+\r
+ xor di, di\r
+\r
+next_entry: mov cx, 11\r
+ mov si, filename+7c00h\r
+ push di\r
+ repe cmpsb\r
+ pop di\r
+ mov ax, [es:di+1ah] ; get cluster number from directory entry\r
+ clc\r
+ je ffDone\r
+\r
+ add di, 20h ; go to next directory entry\r
+ cmp byte [es:di], 0 ; if the first byte of the name is 0,\r
+ jnz next_entry ; there is no more files in the directory\r
+\r
+ stc\r
+ffDone:\r
+%endmacro \r
+\r
+; GETDRIVEPARMS: Calculate start of some disk areas.\r
+\r
+%macro GETDRIVEPARMS 0\r
+ mov si, word nHidden\r
+ mov di, word nHidden_hi\r
+ add si, word resSectors\r
+ adc di, 0 ; DI:SI = first FAT sector\r
+\r
+ mov word fat_start, si\r
+ mov word fat_start_hi, di\r
+\r
+ mov al, nFats\r
+ xor ah, ah\r
+ mul word sectPerFat ; DX:AX = total number of FAT sectors\r
+\r
+ add si, ax\r
+ adc di, dx ; DI:SI = first root directory sector\r
+ mov word root_dir_start, si\r
+ mov word root_dir_start_hi, di\r
+\r
+ ; Calculate how many sectors the root directory occupies.\r
+ mov bx, bytesPerSector\r
+ mov cl, 5 ; divide BX by 32\r
+ shr bx, cl ; BX = directory entries per sector\r
+\r
+ mov ax, nRootDir\r
+ xor dx, dx\r
+ div bx \r
+\r
+ mov nRootDir, ax ; AX = sectors per root directory\r
+\r
+ add si, ax \r
+ adc di, 0 ; DI:SI = first data sector\r
+\r
+ mov data_start, si\r
+ mov data_start_hi, di\r
+%endmacro\r
+\r
+; GETFATCHAIN: \r
+;\r
+; Reads the FAT chain and stores it in a temporary buffer in the first\r
+; 64 kb. The FAT chain is stored an array of 16-bit cluster numbers,\r
+; ending with 0.\r
+; \r
+; The file must fit in conventional memory, so it can't be larger than\r
+; 640 kb. The sector size must be at least 512 bytes, so the FAT chain\r
+; can't be larger than around 3 kb.\r
+;\r
+; Call with: AX = first cluster in chain\r
+;\r
+; Returns: CF clear on success, set on error\r
+\r
+%macro GETFATCHAIN 0 \r
+ push ax ; store first cluster number\r
+\r
+ ; Load the complete FAT into memory. The FAT can't be larger\r
+ ; than 128 kb, so it should fit in the temporary buffer.\r
+\r
+ mov es, tempbuf\r
+ xor bx, bx\r
+ mov di, sectPerFat\r
+ mov ax, word fat_start\r
+ mov dx, word fat_start_hi\r
+ call readDisk\r
+ pop ax ; restore first cluster number\r
+ jc boot_error\r
+\r
+ ; Set ES:DI to the temporary storage for the FAT chain.\r
+ push ds\r
+ push es\r
+ pop ds\r
+ pop es\r
+ mov di, FATBUF\r
+\r
+next_clust: stosw ; store cluster number\r
+ mov si, ax ; SI = cluster number\r
+ cmp byte extBoot, 29h\r
+ jne fat_12\r
+ cmp byte [bp+filesys+4], '6' ; check for FAT-16 system\r
+ je fat_16\r
+\r
+ ; This is a FAT-12 disk.\r
+\r
+fat_12: add si, si ; multiply cluster number by 3...\r
+ add si, ax\r
+ shr si, 1 ; ...and divide by 2\r
+ lodsw\r
+\r
+ ; If the cluster number was even, the cluster value is now in\r
+ ; bits 0-11 of AX. If the cluster number was odd, the cluster\r
+ ; value is in bits 4-15, and must be shifted right 4 bits. If\r
+ ; the number was odd, CF was set in the last shift instruction.\r
+\r
+ jnc fat_even\r
+ mov cl, 4 \r
+ shr ax, cl ; shift the cluster number \r
+ \r
+fat_even: and ah, 0fh ; mask off the highest 4 bits\r
+ cmp ax, 0fffh ; check for EOF\r
+ jmp short next_test\r
+\r
+ ; This is a FAT-16 disk. The maximal size of a 16-bit FAT\r
+ ; is 128 kb, so it may not fit within a single 64 kb segment.\r
+ \r
+fat_16: mov dx, tempbuf\r
+ add si, si ; multiply cluster number by two\r
+ jnc first_half ; if overflow...\r
+ add dh, 10h ; ...add 64 kb to segment value\r
+\r
+first_half: mov ds, dx ; DS:SI = pointer to next cluster\r
+ lodsw ; AX = next cluster\r
+\r
+ cmp ax, 0fff8h ; >= FFF8 = 16-bit EOF\r
+next_test: jb next_clust ; continue if not EOF\r
+\r
+finished: ; Mark end of FAT chain with 0, so we have a single\r
+ ; EOF marker for both FAT-12 and FAT-16 systems.\r
+\r
+ xor ax, ax\r
+ stosw\r
+fatError:\r
+%endmacro\r
+\r
+\r
+; loadFile: Loads the file into memory, one cluster at a time.\r
+\r
+%macro LOADFILE 0\r
+ mov es, tempbuf ; set ES:BX to load address\r
+ xor bx, bx\r
+\r
+ mov si, FATBUF ; set DS:SI to the FAT chain\r
+ push cs \r
+ pop ds \r
+\r
+next_cluster: lodsw ; AX = next cluster to read\r
+ or ax, ax ; if EOF...\r
+ je boot_success ; ...boot was successful\r
+\r
+ dec ax ; cluster numbers start with 2\r
+ dec ax\r
+\r
+ mov di, word sectPerCluster\r
+ and di, 0ffh ; DI = sectors per cluster\r
+ mul di \r
+ add ax, data_start\r
+ adc dx, data_start_hi ; DX:AX = first sector to read\r
+ call readDisk\r
+ jnc next_cluster \r
+\r
+%endmacro \r
--- /dev/null
+ 1 ;\r
+ 2 ; File:\r
+ 3 ; boot.asm\r
+ 4 ; Description:\r
+ 5 ; DOS-C boot\r
+ 6 ;\r
+ 7 ; Copyright (c) 1997; \r
+ 8 ; Svante Frey\r
+ 9 ; All Rights Reserved\r
+ 10 ;\r
+ 11 ; This file is part of DOS-C.\r
+ 12 ;\r
+ 13 ; DOS-C is free software; you can redistribute it and/or\r
+ 14 ; modify it under the terms of the GNU General Public License\r
+ 15 ; as published by the Free Software Foundation; either version\r
+ 16 ; 2, or (at your option) any later version.\r
+ 17 ;\r
+ 18 ; DOS-C is distributed in the hope that it will be useful, but\r
+ 19 ; WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ 20 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See\r
+ 21 ; the GNU General Public License for more details.\r
+ 22 ;\r
+ 23 ; You should have received a copy of the GNU General Public\r
+ 24 ; License along with DOS-C; see the file COPYING. If not,\r
+ 25 ; write to the Free Software Foundation, 675 Mass Ave,\r
+ 26 ; Cambridge, MA 02139, USA.\r
+ 27 ;\r
+ 28 ; $Logfile: C:/dos-c/src/boot/boot.asv $\r
+ 29 ;\r
+ 30 ; $Header: /cygdrive/c/RCVS/CVS/ReactOS/reactos/loaders/boot/Attic/boot.lst,v 1.1 1996/01/23 01:02:19 rosmgr Exp $\r
+ 31 ;\r
+ 32 ; $Log: boot.lst,v $\r
+ 32 ; Revision 1.1 1996/01/23 01:02:19 rosmgr\r
+ 32 ; Initial revision\r
+ 32 ;\r
+ 33 ; \r
+ 34 ; Rev 1.5 10 Jan 1997 4:58:06 patv\r
+ 35 ; Corrected copyright\r
+ 36 ; \r
+ 37 ; Rev 1.4 10 Jan 1997 4:52:50 patv\r
+ 38 ; Re-written to support C drive and eliminate restrictions on IPL.SYS\r
+ 39 ; \r
+ 40 ; Rev 1.3 29 Aug 1996 13:06:50 patv\r
+ 41 ; Bug fixes for v0.91b\r
+ 42 ; \r
+ 43 ; Rev 1.2 01 Sep 1995 17:56:44 patv\r
+ 44 ; First GPL release.\r
+ 45 ; \r
+ 46 ; Rev 1.1 30 Jul 1995 20:37:38 patv\r
+ 47 ; Initialized stack before use.\r
+ 48 ; \r
+ 49 ; Rev 1.0 02 Jul 1995 10:57:52 patv\r
+ 50 ; Initial revision.\r
+ 51 ;\r
+ 52 \r
+ 53 section .text\r
+ 54 \r
+ 55 org 0\r
+ 56 00000000 E93D00 Entry: jmp real_start\r
+ 57 \r
+ 58 ; bp is initialized to 7c00h\r
+ 59 %define oem [bp+3]\r
+ 60 %define bytesPerSector [bp+0bh]\r
+ 61 %define sectPerCluster [bp+0dh]\r
+ 62 %define resSectors [bp+0eh]\r
+ 63 %define nFats [bp+10h]\r
+ 64 %define nRootDir [bp+11h]\r
+ 65 %define nSectors [bp+13h]\r
+ 66 %define MID [bp+15h]\r
+ 67 %define sectPerFat [bp+16h]\r
+ 68 %define sectPerTrack [bp+18h]\r
+ 69 %define nHeads [bp+1ah]\r
+ 70 %define nHidden [bp+1ch]\r
+ 71 %define nHidden_hi [bp+1eh]\r
+ 72 %define nSectorHuge [bp+20h]\r
+ 73 %define drive [bp+24h]\r
+ 74 %define extBoot [bp+26h]\r
+ 75 %define volid [bp+27h]\r
+ 76 %define vollabel [bp+2bh]\r
+ 77 %define filesys 36h\r
+ 78 \r
+ 79 LOADSEG equ 2000h\r
+ 80 \r
+ 81 FATBUF equ 4000h ; offset of temporary buffer for FAT \r
+ 82 ; chain\r
+ 83 RETRYCOUNT equ 5 ; number of retries on disk errors\r
+ 84 \r
+ 85 ; Some extra variables that are created on the stack frame\r
+ 86 \r
+ 87 %define fat_start [bp-4] ; first FAT sector\r
+ 88 %define fat_start_hi [bp-2]\r
+ 89 %define root_dir_start [bp-8] ; first root directory sector\r
+ 90 %define root_dir_start_hi [bp-6]\r
+ 91 %define data_start [bp-12] ; first data sector\r
+ 92 %define data_start_hi [bp-10]\r
+ 93 \r
+ 94 ;\r
+ 95 ; Include macros for filesystem access\r
+ 96 ;\r
+ 97 %include "boot.inc"\r
+ 98 <1> ; To save space, functions that are just called once are \r
+ 99 <1> ; implemented as macros instead. Four bytes are saved by\r
+ 100 <1> ; avoiding the call / ret instructions.\r
+ 101 <1> \r
+ 102 <1> \r
+ 103 <1> ; FINDFILE: Searches for the file in the root directory.\r
+ 104 <1> ;\r
+ 105 <1> ; Returns:\r
+ 106 <1> ;\r
+ 107 <1> ; If file not found: CF set\r
+ 108 <1> ; \r
+ 109 <1> ; If file found: CF clear\r
+ 110 <1> ; AX = first cluster of file\r
+ 111 <1> \r
+ 112 <1> \r
+ 113 <1> %macro FINDFILE 0 \r
+ 114 <1> ; First, read the whole root directory\r
+ 115 <1> ; into the temporary buffer.\r
+ 116 <1> \r
+ 117 <1> mov ax, word root_dir_start\r
+ 118 <1> mov dx, word root_dir_start_hi\r
+ 119 <1> mov di, nRootDir\r
+ 120 <1> xor bx, bx\r
+ 121 <1> mov es, tempbuf\r
+ 122 <1> call readDisk\r
+ 123 <1> jc ffDone\r
+ 124 <1> \r
+ 125 <1> xor di, di\r
+ 126 <1> \r
+ 127 <1> next_entry: mov cx, 11\r
+ 128 <1> mov si, filename+7c00h\r
+ 129 <1> push di\r
+ 130 <1> repe cmpsb\r
+ 131 <1> pop di\r
+ 132 <1> mov ax, [es:di+1ah] ; get cluster number from directory entry\r
+ 133 <1> clc\r
+ 134 <1> je ffDone\r
+ 135 <1> \r
+ 136 <1> add di, 20h ; go to next directory entry\r
+ 137 <1> cmp byte [es:di], 0 ; if the first byte of the name is 0,\r
+ 138 <1> jnz next_entry ; there is no more files in the directory\r
+ 139 <1> \r
+ 140 <1> stc\r
+ 141 <1> ffDone:\r
+ 142 <1> %endmacro \r
+ 143 <1> \r
+ 144 <1> ; GETDRIVEPARMS: Calculate start of some disk areas.\r
+ 145 <1> \r
+ 146 <1> %macro GETDRIVEPARMS 0\r
+ 147 <1> mov si, word nHidden\r
+ 148 <1> mov di, word nHidden_hi\r
+ 149 <1> add si, word resSectors\r
+ 150 <1> adc di, 0 ; DI:SI = first FAT sector\r
+ 151 <1> \r
+ 152 <1> mov word fat_start, si\r
+ 153 <1> mov word fat_start_hi, di\r
+ 154 <1> \r
+ 155 <1> mov al, nFats\r
+ 156 <1> xor ah, ah\r
+ 157 <1> mul word sectPerFat ; DX:AX = total number of FAT sectors\r
+ 158 <1> \r
+ 159 <1> add si, ax\r
+ 160 <1> adc di, dx ; DI:SI = first root directory sector\r
+ 161 <1> mov word root_dir_start, si\r
+ 162 <1> mov word root_dir_start_hi, di\r
+ 163 <1> \r
+ 164 <1> ; Calculate how many sectors the root directory occupies.\r
+ 165 <1> mov bx, bytesPerSector\r
+ 166 <1> mov cl, 5 ; divide BX by 32\r
+ 167 <1> shr bx, cl ; BX = directory entries per sector\r
+ 168 <1> \r
+ 169 <1> mov ax, nRootDir\r
+ 170 <1> xor dx, dx\r
+ 171 <1> div bx \r
+ 172 <1> \r
+ 173 <1> mov nRootDir, ax ; AX = sectors per root directory\r
+ 174 <1> \r
+ 175 <1> add si, ax \r
+ 176 <1> adc di, 0 ; DI:SI = first data sector\r
+ 177 <1> \r
+ 178 <1> mov data_start, si\r
+ 179 <1> mov data_start_hi, di\r
+ 180 <1> %endmacro\r
+ 181 <1> \r
+ 182 <1> ; GETFATCHAIN: \r
+ 183 <1> ;\r
+ 184 <1> ; Reads the FAT chain and stores it in a temporary buffer in the first\r
+ 185 <1> ; 64 kb. The FAT chain is stored an array of 16-bit cluster numbers,\r
+ 186 <1> ; ending with 0.\r
+ 187 <1> ; \r
+ 188 <1> ; The file must fit in conventional memory, so it can't be larger than\r
+ 189 <1> ; 640 kb. The sector size must be at least 512 bytes, so the FAT chain\r
+ 190 <1> ; can't be larger than around 3 kb.\r
+ 191 <1> ;\r
+ 192 <1> ; Call with: AX = first cluster in chain\r
+ 193 <1> ;\r
+ 194 <1> ; Returns: CF clear on success, set on error\r
+ 195 <1> \r
+ 196 <1> %macro GETFATCHAIN 0 \r
+ 197 <1> push ax ; store first cluster number\r
+ 198 <1> \r
+ 199 <1> ; Load the complete FAT into memory. The FAT can't be larger\r
+ 200 <1> ; than 128 kb, so it should fit in the temporary buffer.\r
+ 201 <1> \r
+ 202 <1> mov es, tempbuf\r
+ 203 <1> xor bx, bx\r
+ 204 <1> mov di, sectPerFat\r
+ 205 <1> mov ax, word fat_start\r
+ 206 <1> mov dx, word fat_start_hi\r
+ 207 <1> call readDisk\r
+ 208 <1> pop ax ; restore first cluster number\r
+ 209 <1> jc boot_error\r
+ 210 <1> \r
+ 211 <1> ; Set ES:DI to the temporary storage for the FAT chain.\r
+ 212 <1> push ds\r
+ 213 <1> push es\r
+ 214 <1> pop ds\r
+ 215 <1> pop es\r
+ 216 <1> mov di, FATBUF\r
+ 217 <1> \r
+ 218 <1> next_clust: stosw ; store cluster number\r
+ 219 <1> mov si, ax ; SI = cluster number\r
+ 220 <1> cmp byte extBoot, 29h\r
+ 221 <1> jne fat_12\r
+ 222 <1> cmp byte [bp+filesys+4], '6' ; check for FAT-16 system\r
+ 223 <1> je fat_16\r
+ 224 <1> \r
+ 225 <1> ; This is a FAT-12 disk.\r
+ 226 <1> \r
+ 227 <1> fat_12: add si, si ; multiply cluster number by 3...\r
+ 228 <1> add si, ax\r
+ 229 <1> shr si, 1 ; ...and divide by 2\r
+ 230 <1> lodsw\r
+ 231 <1> \r
+ 232 <1> ; If the cluster number was even, the cluster value is now in\r
+ 233 <1> ; bits 0-11 of AX. If the cluster number was odd, the cluster\r
+ 234 <1> ; value is in bits 4-15, and must be shifted right 4 bits. If\r
+ 235 <1> ; the number was odd, CF was set in the last shift instruction.\r
+ 236 <1> \r
+ 237 <1> jnc fat_even\r
+ 238 <1> mov cl, 4 \r
+ 239 <1> shr ax, cl ; shift the cluster number \r
+ 240 <1> \r
+ 241 <1> fat_even: and ah, 0fh ; mask off the highest 4 bits\r
+ 242 <1> cmp ax, 0fffh ; check for EOF\r
+ 243 <1> jmp short next_test\r
+ 244 <1> \r
+ 245 <1> ; This is a FAT-16 disk. The maximal size of a 16-bit FAT\r
+ 246 <1> ; is 128 kb, so it may not fit within a single 64 kb segment.\r
+ 247 <1> \r
+ 248 <1> fat_16: mov dx, tempbuf\r
+ 249 <1> add si, si ; multiply cluster number by two\r
+ 250 <1> jnc first_half ; if overflow...\r
+ 251 <1> add dh, 10h ; ...add 64 kb to segment value\r
+ 252 <1> \r
+ 253 <1> first_half: mov ds, dx ; DS:SI = pointer to next cluster\r
+ 254 <1> lodsw ; AX = next cluster\r
+ 255 <1> \r
+ 256 <1> cmp ax, 0fff8h ; >= FFF8 = 16-bit EOF\r
+ 257 <1> next_test: jb next_clust ; continue if not EOF\r
+ 258 <1> \r
+ 259 <1> finished: ; Mark end of FAT chain with 0, so we have a single\r
+ 260 <1> ; EOF marker for both FAT-12 and FAT-16 systems.\r
+ 261 <1> \r
+ 262 <1> xor ax, ax\r
+ 263 <1> stosw\r
+ 264 <1> fatError:\r
+ 265 <1> %endmacro\r
+ 266 <1> \r
+ 267 <1> \r
+ 268 <1> ; loadFile: Loads the file into memory, one cluster at a time.\r
+ 269 <1> \r
+ 270 <1> %macro LOADFILE 0\r
+ 271 <1> mov es, tempbuf ; set ES:BX to load address\r
+ 272 <1> xor bx, bx\r
+ 273 <1> \r
+ 274 <1> mov si, FATBUF ; set DS:SI to the FAT chain\r
+ 275 <1> push cs \r
+ 276 <1> pop ds \r
+ 277 <1> \r
+ 278 <1> next_cluster: lodsw ; AX = next cluster to read\r
+ 279 <1> or ax, ax ; if EOF...\r
+ 280 <1> je boot_success ; ...boot was successful\r
+ 281 <1> \r
+ 282 <1> dec ax ; cluster numbers start with 2\r
+ 283 <1> dec ax\r
+ 284 <1> \r
+ 285 <1> mov di, word sectPerCluster\r
+ 286 <1> and di, 0ffh ; DI = sectors per cluster\r
+ 287 <1> mul di \r
+ 288 <1> add ax, data_start\r
+ 289 <1> adc dx, data_start_hi ; DX:AX = first sector to read\r
+ 290 <1> call readDisk\r
+ 291 <1> jnc next_cluster \r
+ 292 <1> \r
+ 293 <1> %endmacro \r
+ 294 \r
+ 295 ;\r
+ 296 ;\r
+ 297 ;\r
+ 298 00000003 00<rept> TIMES 3eh-($-$$) DB 0\r
+ 299 \r
+ 300 %define tempbuf [bp+3eh]\r
+ 301 0000003E 0020 load_seg dw LOADSEG\r
+ 302 \r
+ 303 00000040 FA real_start: cli\r
+ 304 00000041 FC cld\r
+ 305 00000042 8CC8 mov ax, cs\r
+ 306 00000044 8ED0 mov ss, ax ; initialize stack \r
+ 307 00000046 BD007C mov bp, 7c00h\r
+ 308 00000049 8D66E0 lea sp, [bp-20h]\r
+ 309 0000004C FB sti\r
+ 310 \r
+ 311 0000004D 8EC0 mov es, ax\r
+ 312 0000004F 8ED8 mov ds, ax\r
+ 313 00000051 885624 mov drive, dl ; BIOS passes drive number in DL\r
+ 314 \r
+ 315 GETDRIVEPARMS\r
+ 316 00000054 8B761C <1> mov si, word nHidden\r
+ 317 00000057 8B7E1E <1> mov di, word nHidden_hi\r
+ 318 0000005A 03760E <1> add si, word resSectors\r
+ 319 0000005D 81D70000 <1> adc di, 0\r
+ 320 <1> \r
+ 321 00000061 8976FC <1> mov word fat_start, si\r
+ 322 00000064 897EFE <1> mov word fat_start_hi, di\r
+ 323 <1> \r
+ 324 00000067 8A4610 <1> mov al, nFats\r
+ 325 0000006A 30E4 <1> xor ah, ah\r
+ 326 0000006C F76616 <1> mul word sectPerFat\r
+ 327 <1> \r
+ 328 0000006F 01C6 <1> add si, ax\r
+ 329 00000071 11D7 <1> adc di, dx\r
+ 330 00000073 8976F8 <1> mov word root_dir_start, si\r
+ 331 00000076 897EFA <1> mov word root_dir_start_hi, di\r
+ 332 <1> \r
+ 333 <1> \r
+ 334 00000079 8B5E0B <1> mov bx, bytesPerSector\r
+ 335 0000007C B105 <1> mov cl, 5\r
+ 336 0000007E D3EB <1> shr bx, cl\r
+ 337 <1> \r
+ 338 00000080 8B4611 <1> mov ax, nRootDir\r
+ 339 00000083 31D2 <1> xor dx, dx\r
+ 340 00000085 F7F3 <1> div bx\r
+ 341 <1> \r
+ 342 00000087 894611 <1> mov nRootDir, ax\r
+ 343 <1> \r
+ 344 0000008A 01C6 <1> add si, ax\r
+ 345 0000008C 81D70000 <1> adc di, 0\r
+ 346 <1> \r
+ 347 00000090 8976F4 <1> mov data_start, si\r
+ 348 00000093 897EF6 <1> mov data_start_hi, di\r
+ 349 \r
+ 350 FINDFILE ; locate file in root directory\r
+ 351 <1> \r
+ 352 <1> \r
+ 353 <1> \r
+ 354 00000096 8B46F8 <1> mov ax, word root_dir_start\r
+ 355 00000099 8B56FA <1> mov dx, word root_dir_start_hi\r
+ 356 0000009C 8B7E11 <1> mov di, nRootDir\r
+ 357 0000009F 31DB <1> xor bx, bx\r
+ 358 000000A1 8E463E <1> mov es, tempbuf\r
+ 359 000000A4 E8B900 <1> call readDisk\r
+ 360 000000A7 721E <1> jc ffDone\r
+ 361 <1> \r
+ 362 000000A9 31FF <1> xor di, di\r
+ 363 <1> \r
+ 364 000000AB B90B00 <1> next_entry: mov cx, 11\r
+ 365 000000AE BE[F17D] <1> mov si, filename+7c00h\r
+ 366 000000B1 57 <1> push di\r
+ 367 000000B2 F3A6 <1> repe cmpsb\r
+ 368 000000B4 5F <1> pop di\r
+ 369 000000B5 268B451A <1> mov ax, [es:di+1ah]\r
+ 370 000000B9 F8 <1> clc\r
+ 371 000000BA 740B <1> je ffDone\r
+ 372 <1> \r
+ 373 000000BC 81C72000 <1> add di, 20h\r
+ 374 000000C0 26803D00 <1> cmp byte [es:di], 0\r
+ 375 000000C4 75E5 <1> jnz next_entry\r
+ 376 <1> \r
+ 377 000000C6 F9 <1> stc\r
+ 378 <1> ffDone:\r
+ 379 000000C7 727A jc boot_error ; fail if not found\r
+ 380 \r
+ 381 GETFATCHAIN ; read FAT chain\r
+ 382 000000C9 50 <1> push ax\r
+ 383 <1> \r
+ 384 <1> \r
+ 385 <1> \r
+ 386 <1> \r
+ 387 000000CA 8E463E <1> mov es, tempbuf\r
+ 388 000000CD 31DB <1> xor bx, bx\r
+ 389 000000CF 8B7E16 <1> mov di, sectPerFat\r
+ 390 000000D2 8B46FC <1> mov ax, word fat_start\r
+ 391 000000D5 8B56FE <1> mov dx, word fat_start_hi\r
+ 392 000000D8 E88500 <1> call readDisk\r
+ 393 000000DB 58 <1> pop ax\r
+ 394 000000DC 7265 <1> jc boot_error\r
+ 395 <1> \r
+ 396 <1> \r
+ 397 000000DE 1E <1> push ds\r
+ 398 000000DF 06 <1> push es\r
+ 399 000000E0 1F <1> pop ds\r
+ 400 000000E1 07 <1> pop es\r
+ 401 000000E2 BF0040 <1> mov di, FATBUF\r
+ 402 <1> \r
+ 403 000000E5 AB <1> next_clust: stosw\r
+ 404 000000E6 89C6 <1> mov si, ax\r
+ 405 000000E8 807E2629 <1> cmp byte extBoot, 29h\r
+ 406 000000EC 7506 <1> jne fat_12\r
+ 407 000000EE 807E3A36 <1> cmp byte [bp+filesys+4], '6'\r
+ 408 000000F2 7415 <1> je fat_16\r
+ 409 <1> \r
+ 410 <1> \r
+ 411 <1> \r
+ 412 000000F4 01F6 <1> fat_12: add si, si\r
+ 413 000000F6 01C6 <1> add si, ax\r
+ 414 000000F8 D1EE <1> shr si, 1\r
+ 415 000000FA AD <1> lodsw\r
+ 416 <1> \r
+ 417 <1> \r
+ 418 <1> \r
+ 419 <1> \r
+ 420 <1> \r
+ 421 <1> \r
+ 422 000000FB 7304 <1> jnc fat_even\r
+ 423 000000FD B104 <1> mov cl, 4\r
+ 424 000000FF D3E8 <1> shr ax, cl\r
+ 425 <1> \r
+ 426 00000101 80E40F <1> fat_even: and ah, 0fh\r
+ 427 00000104 3DFF0F <1> cmp ax, 0fffh\r
+ 428 00000107 EB10 <1> jmp short next_test\r
+ 429 <1> \r
+ 430 <1> \r
+ 431 <1> \r
+ 432 <1> \r
+ 433 00000109 8B563E <1> fat_16: mov dx, tempbuf\r
+ 434 0000010C 01F6 <1> add si, si\r
+ 435 0000010E 7303 <1> jnc first_half\r
+ 436 00000110 80C610 <1> add dh, 10h\r
+ 437 <1> \r
+ 438 00000113 8EDA <1> first_half: mov ds, dx\r
+ 439 00000115 AD <1> lodsw\r
+ 440 <1> \r
+ 441 00000116 3DF8FF <1> cmp ax, 0fff8h\r
+ 442 00000119 72CA <1> next_test: jb next_clust\r
+ 443 <1> \r
+ 444 <1> finished:\r
+ 445 <1> \r
+ 446 <1> \r
+ 447 0000011B 31C0 <1> xor ax, ax\r
+ 448 0000011D AB <1> stosw\r
+ 449 <1> fatError:\r
+ 450 LOADFILE ; load file (jumps to boot_sucess if successful)\r
+ 451 0000011E 8E463E <1> mov es, tempbuf\r
+ 452 00000121 31DB <1> xor bx, bx\r
+ 453 <1> \r
+ 454 00000123 BE0040 <1> mov si, FATBUF\r
+ 455 00000126 0E <1> push cs\r
+ 456 00000127 1F <1> pop ds\r
+ 457 <1> \r
+ 458 00000128 AD <1> next_cluster: lodsw\r
+ 459 00000129 09C0 <1> or ax, ax\r
+ 460 0000012B 742B <1> je boot_success\r
+ 461 <1> \r
+ 462 0000012D 48 <1> dec ax\r
+ 463 0000012E 48 <1> dec ax\r
+ 464 <1> \r
+ 465 0000012F 8B7E0D <1> mov di, word sectPerCluster\r
+ 466 00000132 81E7FF00 <1> and di, 0ffh\r
+ 467 00000136 F7E7 <1> mul di\r
+ 468 00000138 0346F4 <1> add ax, data_start\r
+ 469 0000013B 1356F6 <1> adc dx, data_start_hi\r
+ 470 0000013E E81F00 <1> call readDisk\r
+ 471 00000141 73E5 <1> jnc next_cluster\r
+ 472 <1> \r
+ 473 \r
+ 474 00000143 B90A00 boot_error: mov cx, ERRMSGLEN\r
+ 475 00000146 BE[E77D] mov si, errmsg+7c00h\r
+ 476 \r
+ 477 00000149 AC next_char: lodsb ; print error message\r
+ 478 0000014A B40E mov ah, 0eh\r
+ 479 0000014C 30FF xor bh, bh\r
+ 480 0000014E CD10 int 10h\r
+ 481 00000150 E2F7 loop next_char\r
+ 482 \r
+ 483 00000152 30E4 xor ah, ah\r
+ 484 00000154 CD16 int 16h ; wait for keystroke\r
+ 485 00000156 CD19 int 19h ; invoke bootstrap loader\r
+ 486 \r
+ 487 00000158 8A5624 boot_success: mov dl, drive\r
+ 488 \r
+ 489 0000015B EA db 0eah ; far jump to LOADSEG:0000\r
+ 490 0000015C 0000 dw 0\r
+ 491 0000015E 0020 dw LOADSEG\r
+ 492 \r
+ 493 \r
+ 494 ; readDisk: Reads a number of sectors into memory.\r
+ 495 ;\r
+ 496 ; Call with: DX:AX = 32-bit DOS sector number\r
+ 497 ; DI = number of sectors to read\r
+ 498 ; ES:BX = destination buffer\r
+ 499 ; ES must be 64k aligned (1000h, 2000h etc).\r
+ 500 ;\r
+ 501 ; Returns: CF set on error\r
+ 502 ; ES:BX points one byte after the last byte read. \r
+ 503 \r
+ 504 readDisk:\r
+ 505 00000160 56 push si\r
+ 506 00000161 52 read_next: push dx\r
+ 507 00000162 50 push ax\r
+ 508 \r
+ 509 ;\r
+ 510 ; translate sector number to BIOS parameters\r
+ 511 ;\r
+ 512 \r
+ 513 ;\r
+ 514 ; abs = sector offset in track\r
+ 515 ; + head * sectPerTrack offset in cylinder\r
+ 516 ; + track * sectPerTrack * nHeads offset in platter\r
+ 517 ; \r
+ 518 ; t1 = abs / sectPerTrack (ax has t1)\r
+ 519 ; sector = abs mod sectPerTrack (cx has sector)\r
+ 520 ;\r
+ 521 00000163 F77618 div word sectPerTrack\r
+ 522 00000166 89D1 mov cx, dx\r
+ 523 \r
+ 524 ;\r
+ 525 ; t1 = head + track * nHeads\r
+ 526 ;\r
+ 527 ; track = t1 / nHeads (ax has track)\r
+ 528 ; head = t1 mod nHeads (dl has head)\r
+ 529 ;\r
+ 530 00000168 31D2 xor dx, dx\r
+ 531 0000016A F7761A div word nHeads\r
+ 532 \r
+ 533 ; the following manipulations are necessary in order to \r
+ 534 ; properly place parameters into registers.\r
+ 535 ; ch = cylinder number low 8 bits\r
+ 536 ; cl = 7-6: cylinder high two bits\r
+ 537 ; 5-0: sector\r
+ 538 0000016D 88D6 mov dh, dl ; save head into dh for bios\r
+ 539 0000016F D0CC ror ah, 1 ; move track high bits into\r
+ 540 00000171 D0CC ror ah, 1 ; bits 7-6 (assumes top = 0)\r
+ 541 00000173 86C4 xchg al, ah ; swap for later\r
+ 542 00000175 8A5618 mov dl, byte sectPerTrack\r
+ 543 00000178 28CA sub dl, cl\r
+ 544 0000017A FEC1 inc cl ; sector offset from 1\r
+ 545 0000017C 09C1 or cx, ax ; merge cylinder into sector\r
+ 546 0000017E 88D0 mov al, dl ; al has # of sectors left\r
+ 547 \r
+ 548 ; Calculate how many sectors can be transfered in this read\r
+ 549 ; due to dma boundary conditions.\r
+ 550 00000180 52 push dx\r
+ 551 \r
+ 552 00000181 89FE mov si, di ; temp register save\r
+ 553 ; this computes remaining bytes because of modulo 65536\r
+ 554 ; nature of dma boundary condition\r
+ 555 00000183 89D8 mov ax, bx ; get offset pointer\r
+ 556 00000185 F7D8 neg ax ; and convert to bytes\r
+ 557 00000187 740B jz ax_min_1 ; started at seg:0, skip ahead\r
+ 558 \r
+ 559 00000189 31D2 xor dx, dx ; convert to sectors\r
+ 560 0000018B F7760B div word bytesPerSector\r
+ 561 \r
+ 562 0000018E 39F8 cmp ax, di ; check remainder vs. asked\r
+ 563 00000190 7202 jb ax_min_1 ; less, skip ahead\r
+ 564 00000192 89C6 mov si, ax ; transfer only what we can\r
+ 565 \r
+ 566 00000194 5A ax_min_1: pop dx\r
+ 567 \r
+ 568 ; Check that request sectors do not exceed track boundary\r
+ 569 00000195 8B7618 mov si, sectPerTrack\r
+ 570 00000198 46 inc si\r
+ 571 00000199 89C8 mov ax, cx ; get the sector/cyl byte\r
+ 572 0000019B 253F00 and ax, 03fh ; and mask out sector\r
+ 573 0000019E 29C6 sub si, ax ; si has how many we can read\r
+ 574 000001A0 89F8 mov ax, di\r
+ 575 000001A2 39FE cmp si, di ; see if asked <= available\r
+ 576 000001A4 7D02 jge ax_min_2\r
+ 577 000001A6 89F0 mov ax, si ; get what can be xfered\r
+ 578 \r
+ 579 000001A8 BE0500 ax_min_2: mov si, RETRYCOUNT\r
+ 580 000001AB B402 mov ah, 2\r
+ 581 000001AD 8A5624 mov dl, drive\r
+ 582 \r
+ 583 000001B0 50 retry: push ax\r
+ 584 000001B1 CD13 int 13h\r
+ 585 000001B3 58 pop ax\r
+ 586 000001B4 7310 jnc read_ok\r
+ 587 000001B6 50 push ax\r
+ 588 000001B7 31C0 xor ax, ax ; reset the drive\r
+ 589 000001B9 CD13 int 13h\r
+ 590 000001BB 58 pop ax\r
+ 591 000001BC 4E dec si\r
+ 592 000001BD 75F1 jnz retry\r
+ 593 000001BF F9 stc\r
+ 594 000001C0 58 pop ax\r
+ 595 000001C1 5A pop dx\r
+ 596 000001C2 5E pop si\r
+ 597 000001C3 C3 ret\r
+ 598 \r
+ 599 000001C4 EB9B read_next_jmp: jmp short read_next\r
+ 600 000001C6 30E4 read_ok: xor ah, ah \r
+ 601 000001C8 89C6 mov si, ax ; AX = SI = number of sectors read \r
+ 602 000001CA F7660B mul word bytesPerSector ; AX = number of bytes read\r
+ 603 000001CD 01C3 add bx, ax ; add number of bytes read to BX\r
+ 604 000001CF 7307 jnc no_incr_es ; if overflow...\r
+ 605 \r
+ 606 000001D1 8CC0 mov ax, es \r
+ 607 000001D3 80C410 add ah, 10h ; ...add 1000h to ES\r
+ 608 000001D6 8EC0 mov es, ax\r
+ 609 \r
+ 610 000001D8 58 no_incr_es: pop ax\r
+ 611 000001D9 5A pop dx ; DX:AX = last sector number\r
+ 612 \r
+ 613 000001DA 01F0 add ax, si\r
+ 614 000001DC 81D20000 adc dx, 0 ; DX:AX = next sector to read\r
+ 615 000001E0 29F7 sub di, si ; if there is anything left to read,\r
+ 616 000001E2 7FE0 jg read_next_jmp ; continue\r
+ 617 \r
+ 618 000001E4 F8 clc\r
+ 619 000001E5 5E pop si\r
+ 620 000001E6 C3 ret\r
+ 621 \r
+ 622 000001E7 426F6F74206572726F- errmsg db "Boot error"\r
+ 623 000001F0 72 \r
+ 624 ERRMSGLEN equ $ - errmsg\r
+ 625 \r
+ 626 \r
+ 627 ;filename db "OSLDR BIN"\r
+ 628 000001F1 4B45524E454C202042- filename db "KERNEL BIN"\r
+ 629 000001FA 494E \r
+ 630 \r
+ 631 000001FC 00<rept> TIMES 510-($-$$) DB 0 \r
+ 632 000001FE 55AA sign dw 0aa55h\r
+ 633 \r
+ 634 \r
+ 635 \r
+ 636 \r
+ 637 \r
--- /dev/null
+#\r
+# makefile for DOS-C boot\r
+#\r
+# $Header: /cygdrive/c/RCVS/CVS/ReactOS/reactos/loaders/boot/Attic/boot.mak,v 1.1 1996/01/23 01:02:19 rosmgr Exp $\r
+#\r
+# $Log: boot.mak,v $\r
+# Revision 1.1 1996/01/23 01:02:19 rosmgr\r
+# Initial revision\r
+#\r
+#\r
+# Rev 1.3 10 Jan 1997 4:51:54 patv\r
+#Changed to use FreeDOS exe2bin and support new boot code\r
+#\r
+# Rev 1.2 17 Dec 1996 12:52:32 patv\r
+#Converted to FreeDOS exe2bin.\r
+#.\r
+#d\r
+#\r
+# Rev 1.1 29 Aug 1996 13:06:50 patv\r
+#Bug fixes for v0.91b\r
+#\r
+# Rev 1.0 02 Jul 1995 9:11:26 patv\r
+#Initial revision.\r
+#\r
+\r
+#\r
+# Uncomment the following for a debug version\r
+#\r
+#AFLAGS = /zi /DDEBUG\r
+#LFLAGS = /v\r
+\r
+PRODUCT = boot.bin\r
+\r
+all: $(PRODUCT)\r
+\r
+production: all\r
+ copy boot.bin ..\..\dist\boot.bin\r
+ del *.bin\r
+ del *.map\r
+\r
+boot.bin: boot.asm\r
+ tasm $(AFLAGS) boot,,\r
+ tlink $(LFLAGS) boot\r
+ ..\utils\exe2bin boot boot.bin\r
+ del boot.obj\r
+ del boot.exe\r
+\r
+clean:\r
+ del *.lst\r
+ del *.map\r
+ del *.bin\r
+ del *.bak\r
+ del *.las\r
+ del *.obj\r
+ del *.exe\r
+\1a
\ No newline at end of file
--- /dev/null
+\r
+ Start Stop Length Name Class\r
+\r
+ 00000H 001FFH 00200H TEXT TEXT\r
+\r
+Program entry point at 0000:0000\r
+Warning: No stack\r
+\r
--- /dev/null
+;\r
+; File:\r
+; boot.asm\r
+; Description:\r
+; DOS-C boot\r
+;\r
+; Copyright (c) 1997; \r
+; Svante Frey\r
+; All Rights Reserved\r
+;\r
+; This file is part of DOS-C.\r
+;\r
+; DOS-C is free software; you can redistribute it and/or\r
+; modify it under the terms of the GNU General Public License\r
+; as published by the Free Software Foundation; either version\r
+; 2, or (at your option) any later version.\r
+;\r
+; DOS-C is distributed in the hope that it will be useful, but\r
+; WITHOUT ANY WARRANTY; without even the implied warranty of\r
+; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See\r
+; the GNU General Public License for more details.\r
+;\r
+; You should have received a copy of the GNU General Public\r
+; License along with DOS-C; see the file COPYING. If not,\r
+; write to the Free Software Foundation, 675 Mass Ave,\r
+; Cambridge, MA 02139, USA.\r
+;\r
+; $Logfile: C:/dos-c/src/boot/boot.asv $\r
+;\r
+; $Header: /cygdrive/c/RCVS/CVS/ReactOS/reactos/loaders/boot/Attic/bootbk.asm,v 1.1 1996/01/23 01:02:19 rosmgr Exp $\r
+;\r
+; $Log: bootbk.asm,v $\r
+; Revision 1.1 1996/01/23 01:02:19 rosmgr\r
+; Initial revision\r
+;\r
+; \r
+; Rev 1.5 10 Jan 1997 4:58:06 patv\r
+; Corrected copyright\r
+; \r
+; Rev 1.4 10 Jan 1997 4:52:50 patv\r
+; Re-written to support C drive and eliminate restrictions on IPL.SYS\r
+; \r
+; Rev 1.3 29 Aug 1996 13:06:50 patv\r
+; Bug fixes for v0.91b\r
+; \r
+; Rev 1.2 01 Sep 1995 17:56:44 patv\r
+; First GPL release.\r
+; \r
+; Rev 1.1 30 Jul 1995 20:37:38 patv\r
+; Initialized stack before use.\r
+; \r
+; Rev 1.0 02 Jul 1995 10:57:52 patv\r
+; Initial revision.\r
+;\r
+\r
+.text\r
+\r
+BASE equ 0\r
+\r
+\r
+ org BASE\r
+Entry: jmp real_start\r
+\r
+; bp is initialized to 7c00h\r
+oem equ [bp+3]\r
+bytesPerSector equ [bp+0bh]\r
+sectPerCluster equ [bp+0dh]\r
+resSectors equ [bp+0eh]\r
+nFats equ [bp+10h]\r
+nRootDir equ [bp+11h]\r
+nSectors equ [bp+13h]\r
+MID equ [bp+15h]\r
+sectPerFat equ [bp+16h]\r
+sectPerTrack equ [bp+18h]\r
+nHeads equ [bp+1ah]\r
+nHidden equ [bp+1ch]\r
+nSectorHuge equ [bp+20h]\r
+drive equ [bp+24h]\r
+extBoot equ [bp+26h]\r
+volid equ [bp+27h]\r
+vollabel equ [bp+2bh]\r
+filesys equ [bp+36h]\r
+\r
+LOADSEG equ 2000h\r
+\r
+FATBUF equ 4000h ; offset of temporary buffer for FAT \r
+ ; chain\r
+RETRYCOUNT equ 5 ; number of retries on disk errors\r
+\r
+; Some extra variables that are created on the stack frame\r
+\r
+fat_start equ [bp-4] ; first FAT sector\r
+root_dir_start equ [bp-8] ; first root directory sector\r
+data_start equ [bp-12] ; first data sector\r
+\r
+\r
+;\r
+; Include macros for filesystem access\r
+;\r
+include boot.inc\r
+\r
+;\r
+;\r
+;\r
+ org BASE+3eh\r
+\r
+tempbuf equ [bp+3eh]\r
+load_seg dw LOADSEG\r
+\r
+real_start: cli\r
+ cld\r
+ mov ax, cs\r
+ mov ss, ax ; initialize stack \r
+ mov bp, 7c00h\r
+ lea sp, [bp-20h]\r
+ sti\r
+\r
+ mov es, ax\r
+ mov ds, ax\r
+ mov drive, dl ; BIOS passes drive number in DL\r
+\r
+ GETDRIVEPARMS\r
+\r
+ FINDFILE ; locate file in root directory\r
+ jc boot_error ; fail if not found\r
+\r
+ GETFATCHAIN ; read FAT chain\r
+ LOADFILE ; load file (jumps to boot_sucess if successful)\r
+\r
+boot_error: mov cx, ERRMSGLEN\r
+ mov si, offset errmsg+7c00h\r
+\r
+next_char: lodsb ; print error message\r
+ mov ah, 0eh\r
+ xor bh, bh\r
+ int 10h\r
+ loop next_char\r
+\r
+ xor ah, ah\r
+ int 16h ; wait for keystroke\r
+ int 19h ; invoke bootstrap loader\r
+\r
+boot_success: mov dl, drive\r
+\r
+ db 0eah ; far jump to LOADSEG:0000\r
+ dw 0\r
+ dw LOADSEG\r
+\r
+\r
+; readDisk: Reads a number of sectors into memory.\r
+;\r
+; Call with: DX:AX = 32-bit DOS sector number\r
+; DI = number of sectors to read\r
+; ES:BX = destination buffer\r
+; ES must be 64k aligned (1000h, 2000h etc).\r
+;\r
+; Returns: CF set on error\r
+; ES:BX points one byte after the last byte read. \r
+\r
+readDisk proc\r
+ push si\r
+read_next: push dx\r
+ push ax\r
+\r
+ ;\r
+ ; translate sector number to BIOS parameters\r
+ ;\r
+\r
+ ;\r
+ ; abs = sector offset in track\r
+ ; + head * sectPerTrack offset in cylinder\r
+ ; + track * sectPerTrack * nHeads offset in platter\r
+ ; \r
+ ; t1 = abs / sectPerTrack (ax has t1)\r
+ ; sector = abs mod sectPerTrack (cx has sector)\r
+ ;\r
+ div word ptr sectPerTrack\r
+ mov cx, dx\r
+\r
+ ;\r
+ ; t1 = head + track * nHeads\r
+ ;\r
+ ; track = t1 / nHeads (ax has track)\r
+ ; head = t1 mod nHeads (dl has head)\r
+ ;\r
+ xor dx, dx\r
+ div word ptr nHeads\r
+\r
+ ; the following manipulations are necessary in order to \r
+ ; properly place parameters into registers.\r
+ ; ch = cylinder number low 8 bits\r
+ ; cl = 7-6: cylinder high two bits\r
+ ; 5-0: sector\r
+ mov dh, dl ; save head into dh for bios\r
+ ror ah, 1 ; move track high bits into\r
+ ror ah, 1 ; bits 7-6 (assumes top = 0)\r
+ xchg al, ah ; swap for later\r
+ mov dl, byte ptr sectPerTrack\r
+ sub dl, cl\r
+ inc cl ; sector offset from 1\r
+ or cx, ax ; merge cylinder into sector\r
+ mov al, dl ; al has # of sectors left\r
+\r
+ ; Calculate how many sectors can be transfered in this read\r
+ ; due to dma boundary conditions.\r
+ push dx\r
+\r
+ mov si, di ; temp register save\r
+ ; this computes remaining bytes because of modulo 65536\r
+ ; nature of dma boundary condition\r
+ mov ax, bx ; get offset pointer\r
+ neg ax ; and convert to bytes\r
+ jz ax_min_1 ; started at seg:0, skip ahead\r
+\r
+ xor dx, dx ; convert to sectors\r
+ div word ptr bytesPerSector\r
+ \r
+ cmp ax, di ; check remainder vs. asked\r
+ jb ax_min_1 ; less, skip ahead\r
+ mov si, ax ; transfer only what we can\r
+\r
+ax_min_1: pop dx\r
+\r
+ ; Check that request sectors do not exceed track boundary\r
+ mov si, sectPerTrack\r
+ inc si\r
+ mov ax, cx ; get the sector/cyl byte\r
+ and ax, 03fh ; and mask out sector\r
+ sub si, ax ; si has how many we can read\r
+ mov ax, di\r
+ cmp si, di ; see if asked <= available\r
+ jge ax_min_2\r
+ mov ax, si ; get what can be xfered\r
+\r
+ax_min_2: mov si, RETRYCOUNT\r
+ mov ah, 2\r
+ mov dl, drive\r
+\r
+retry: push ax\r
+ int 13h\r
+ pop ax\r
+ jnc read_ok\r
+ push ax\r
+ xor ax, ax ; reset the drive\r
+ int 13h\r
+ pop ax\r
+ dec si\r
+ jnz retry\r
+ stc\r
+ pop ax\r
+ pop dx\r
+ pop si\r
+ ret\r
+\r
+read_next_jmp: jmp short read_next\r
+read_ok: xor ah, ah \r
+ mov si, ax ; AX = SI = number of sectors read \r
+ mul word ptr bytesPerSector ; AX = number of bytes read\r
+ add bx, ax ; add number of bytes read to BX\r
+ jnc no_incr_es ; if overflow...\r
+\r
+ mov ax, es \r
+ add ah, 10h ; ...add 1000h to ES\r
+ mov es, ax\r
+ \r
+no_incr_es: pop ax\r
+ pop dx ; DX:AX = last sector number\r
+\r
+ add ax, si\r
+ adc dx, 0 ; DX:AX = next sector to read\r
+ sub di, si ; if there is anything left to read,\r
+ jg read_next_jmp ; continue\r
+\r
+ clc\r
+ pop si\r
+ ret\r
+readDisk endp\r
+\r
+errmsg db "Boot error"\r
+ERRMSGLEN equ $ - errmsg\r
+\r
+\r
+;filename db "OSLDR BIN"\r
+filename db "KERNEL BIN"\r
+\r
+ org BASE+01feh\r
+sign dw 0aa55h\r
+\r
+TEXT ENDS\r
+ end\r
+\r
+\r
+\r
+\r
--- /dev/null
+;\r
+; Loads the kernel and any required modules\r
+;\r
+\r
+org 0\r
+\r
+;\r
+; Segment where we are loaded\r
+;\r
+LOADSEG equ 02000h\r
+\r
+;\r
+; Segment used for temporay storage\r
+;\r
+WORKSEG equ 01000h\r
+\r
+\r
+KERNELBASE equ 05000h\r
+\r
+;\r
+; Offsets of work areas\r
+;\r
+FAT_CHAIN equ 0h\r
+\r
+DIR_BUFFER equ 4000h\r
+END_DIR_BUFFER equ 0ffe0h\r
+\r
+FAT_SEG equ 03000h\r
+\r
+\r
+;\r
+; These are all on the stack\r
+;\r
+%define oem [bp+3]\r
+%define bytesPerSector [bp+0bh]\r
+%define sectPerCluster [bp+0dh]\r
+%define resSectors [bp+0eh]\r
+%define nFats [bp+10h]\r
+%define nRootDir [bp+11h]\r
+%define nSectors [bp+13h]\r
+%define MID [bp+15h]\r
+%define sectPerFat [bp+16h]\r
+%define sectPerTrack [bp+18h]\r
+%define nHeads [bp+1ah]\r
+%define nHidden [bp+1ch]\r
+%define nHidden_hi [bp+1eh]\r
+%define nSectorHuge [bp+20h]\r
+%define drive [bp+24h]\r
+%define extBoot [bp+26h]\r
+%define volid [bp+27h]\r
+%define vollabel [bp+2bh]\r
+%define filesys 36h\r
+\r
+RETRYCOUNT equ 5\r
+\r
+%define fat_start [bp-4] ; first FAT sector\r
+%define fat_start_hi [bp-2]\r
+%define root_dir_start [bp-8] ; first root directory sector\r
+%define root_dir_start_hi [bp-6]\r
+%define data_start [bp-12] ; first data sector\r
+%define data_start_hi [bp-10]\r
+\r
+\r
+entry:\r
+ mov drive,dl\r
+ \r
+ mov ax,LOADSEG\r
+ mov ds,ax\r
+\r
+\r
+ ;\r
+ ; Print out a message\r
+ ;\r
+ mov di,loadmsg\r
+ call printmsg\r
+\r
+\r
+ ;\r
+ ; Check here for shift pressed and if so display boot menu\r
+ ;\r
+\r
+ ;\r
+ ; Load the entire fat\r
+ ;\r
+; mov ax,fat_start\r
+; mov dx,fat_start_hi\r
+; mov di,sectPerFat\r
+; mov ax,FAT_SEG\r
+; mov es,ax\r
+; mov bx,0\r
+; call readDisk\r
+\r
+\r
+ ;\r
+ ; Load root directory\r
+ ;\r
+ mov ax,WORKSEG\r
+ mov es,ax\r
+\r
+ mov dx,root_dir_start_hi\r
+ mov ax,root_dir_start\r
+ mov bx,DIR_BUFFER\r
+ mov di,nRootDir\r
+ shr di,4\r
+ mov di,1\r
+ call readDisk\r
+ jc disk_error\r
+\r
+ ;\r
+ ; Look for a directory called boot\r
+ ; \r
+ mov di,DIR_BUFFER\r
+ cld\r
+ mov cx,4\r
+l1:\r
+ mov si,boot_dir_name\r
+; cmp byte [di],0\r
+; je boot_error\r
+ repe cmpsb\r
+ je found_it\r
+ or di,31\r
+ inc di\r
+ cmp di,END_DIR_BUFFER\r
+ jge boot_error\r
+ jmp l1\r
+\r
+\r
+boot_error:\r
+ mov di,errormsg\r
+ call printmsg\r
+l3:\r
+ jmp l3\r
+\r
+disk_error:\r
+ mov di,errormsg1\r
+ call printmsg\r
+ jmp l3\r
+\r
+\r
+\r
+found_it:\r
+ mov di,msg1\r
+ call printmsg\r
+\r
+ ;\r
+ ; Load the boot directory found above\r
+ ;\r
+ sub di,4\r
+ call readFile\r
+\r
+l2:\r
+ jmp l2\r
+\r
+;\r
+; readFile\r
+;\r
+%define file_length [di+01ch]\r
+%define start_cluster [di+01ah]\r
+readFile:\r
+ cmp byte extBoot, 29h\r
+ jne fat_12\r
+ cmp byte [bp+filesys+4], '6' ; check for FAT-16 system\r
+ je fat_16\r
+\r
+fat_12:\r
+ mov di,msg2\r
+ call printmsg\r
+l4:\r
+ jmp l4\r
+\r
+fat_16:\r
+ mov di,msg3\r
+ call printmsg\r
+ jmp l4\r
+ \r
+ \r
+\r
+; readDisk: Reads a number of sectors into memory.\r
+;\r
+; Call with: DX:AX = 32-bit DOS sector number\r
+; DI = number of sectors to read\r
+; ES:BX = destination buffer\r
+; ES must be 64k aligned (1000h, 2000h etc).\r
+;\r
+; Returns: CF set on error\r
+; ES:BX points one byte after the last byte read. \r
+\r
+readDisk:\r
+ push bp\r
+ push si\r
+read_next: push dx\r
+ push ax\r
+\r
+ ;\r
+ ; translate sector number to BIOS parameters\r
+ ;\r
+\r
+ ;\r
+ ; abs = sector offset in track\r
+ ; + head * sectPerTrack offset in cylinder\r
+ ; + track * sectPerTrack * nHeads offset in platter\r
+ ; \r
+ ; t1 = abs / sectPerTrack (ax has t1)\r
+ ; sector = abs mod sectPerTrack (cx has sector)\r
+ ;\r
+ div word sectPerTrack\r
+ mov cx, dx\r
+\r
+ ;\r
+ ; t1 = head + track * nHeads\r
+ ;\r
+ ; track = t1 / nHeads (ax has track)\r
+ ; head = t1 mod nHeads (dl has head)\r
+ ;\r
+ xor dx, dx\r
+ div word nHeads\r
+\r
+ ; the following manipulations are necessary in order to \r
+ ; properly place parameters into registers.\r
+ ; ch = cylinder number low 8 bits\r
+ ; cl = 7-6: cylinder high two bits\r
+ ; 5-0: sector\r
+ mov dh, dl ; save head into dh for bios\r
+ ror ah, 1 ; move track high bits into\r
+ ror ah, 1 ; bits 7-6 (assumes top = 0)\r
+ xchg al, ah ; swap for later\r
+ mov dl, byte sectPerTrack\r
+ sub dl, cl\r
+ inc cl ; sector offset from 1\r
+ or cx, ax ; merge cylinder into sector\r
+ mov al, dl ; al has # of sectors left\r
+\r
+ ; Calculate how many sectors can be transfered in this read\r
+ ; due to dma boundary conditions.\r
+ push dx\r
+\r
+ mov si, di ; temp register save\r
+ ; this computes remaining bytes because of modulo 65536\r
+ ; nature of dma boundary condition\r
+ mov ax, bx ; get offset pointer\r
+ neg ax ; and convert to bytes\r
+ jz ax_min_1 ; started at seg:0, skip ahead\r
+\r
+ xor dx, dx ; convert to sectors\r
+ div word bytesPerSector\r
+ \r
+ cmp ax, di ; check remainder vs. asked\r
+ jb ax_min_1 ; less, skip ahead\r
+ mov si, ax ; transfer only what we can\r
+\r
+ax_min_1: pop dx\r
+\r
+ ; Check that request sectors do not exceed track boundary\r
+ mov si, sectPerTrack\r
+ inc si\r
+ mov ax, cx ; get the sector/cyl byte\r
+ and ax, 03fh ; and mask out sector\r
+ sub si, ax ; si has how many we can read\r
+ mov ax, di\r
+ cmp si, di ; see if asked <= available\r
+ jge ax_min_2\r
+ mov ax, si ; get what can be xfered\r
+\r
+ax_min_2: mov si, RETRYCOUNT\r
+ mov ah, 2\r
+ mov dl, drive\r
+\r
+retry: push ax\r
+ int 13h\r
+ pop ax\r
+ jnc read_ok\r
+ push ax\r
+ xor ax, ax ; reset the drive\r
+ int 13h\r
+ pop ax\r
+ dec si\r
+ jnz retry\r
+ stc\r
+ pop ax\r
+ pop dx\r
+ pop si\r
+ pop bp\r
+ ret\r
+\r
+read_next_jmp: jmp short read_next\r
+read_ok: xor ah, ah \r
+ mov si, ax ; AX = SI = number of sectors read \r
+ mul word bytesPerSector ; AX = number of bytes read\r
+ add bx, ax ; add number of bytes read to BX\r
+ jnc no_incr_es ; if overflow...\r
+\r
+ mov ax, es \r
+ add ah, 10h ; ...add 1000h to ES\r
+ mov es, ax\r
+ \r
+no_incr_es: pop ax\r
+ pop dx ; DX:AX = last sector number\r
+\r
+ add ax, si\r
+ adc dx, 0 ; DX:AX = next sector to read\r
+ sub di, si ; if there is anything left to read,\r
+ jg read_next_jmp ; continue\r
+\r
+ clc\r
+ pop si\r
+ pop bp\r
+ ret\r
+\r
+;\r
+; Print string (DI = start) \r
+;\r
+printmsg:\r
+ push ax\r
+ push bx\r
+ push di\r
+ mov ah,0eh\r
+ mov bh,0\r
+ mov bl,07h\r
+.l1\r
+ mov al,[di]\r
+ cmp al,0\r
+ je .l2\r
+ inc di\r
+ int 10h\r
+ jmp .l1\r
+.l2\r
+ pop di\r
+ pop bx\r
+ pop ax\r
+ ret\r
+\r
+\r
+\r
+loadmsg db "Starting ReactOS...",0xd,0xa,0\r
+boot_dir_name db 'BOOT'\r
+errormsg db "Files missing on boot disk",0\r
+errormsg1 db "Disk read error",0\r
+msg1 db "Found boot directory",0xd,0xa,0\r
+msg2 db 'FAT12',0\r
+msg3 db 'FAT16',0\r
--- /dev/null
+Mem layout for osldr\r
+\r
+0000 - 07C0 = BIOS data and stack\r
+07C0 - 1000 = Boot sector\r
+1000 - 1400 = Tempory storage for fat chains\r
+1400 - 2000 = Tempory storage for directory entries\r
+2000 - 3000 = OSLDR\r
+3000 - 5000 = FAT\r
+5000 - a000 = Kernel and modules load area \r
+\r
+\r
+\r
--- /dev/null
+;\r
+; Pmode setup stub\r
+; (A20 enable code and PIC reprogram from linux bootsector)\r
+;\r
+\r
+;\r
+; Base address of the kernel\r
+;\r
+KERNEL_BASE equ 0c0000000h\r
+\r
+;\r
+; Segment selectors\r
+;\r
+USER_CS equ 08h\r
+USER_DS equ 010h\r
+KERNEL_CS equ 020h\r
+KERNEL_DS equ 028h\r
+ \r
+;\r
+; Space reserved in the gdt for tss descriptors\r
+;\r
+NR_TASKS equ 128\r
+\r
+;\r
+; We are a .com program\r
+;\r
+org 100h\r
+\r
+;\r
+; 16 bit code\r
+;\r
+BITS 16\r
+\r
+entry:\r
+ ;\r
+ ; Load stack\r
+ ;\r
+ cli\r
+ push ds\r
+ pop ss\r
+ mov sp,real_stack_end\r
+ sti\r
+\r
+ ;\r
+ ; Setup the loader space\r
+ ;\r
+ mov ebx,0\r
+ mov eax,0\r
+ mov ecx,0\r
+ mov edx,0\r
+ mov esi,0\r
+ mov edi,0\r
+\r
+ ;\r
+ ; Calculate the end of this module\r
+ ;\r
+ mov ax,ds\r
+ movzx ebx,ax\r
+ shl ebx,4\r
+ add ebx,_end\r
+\r
+ ;\r
+ ; Round up to the nearest page\r
+ ;\r
+ and ebx,~0xfff\r
+ add ebx,01000h\r
+\r
+ ;\r
+ ; Set the start of the page directory\r
+ ;\r
+ mov [kernel_page_directory_base],ebx\r
+\r
+ ;\r
+ ; Set the start of the continuous range of physical memory\r
+ ; occupied by the kernel\r
+ ;\r
+ mov [_start_mem],ebx\r
+ add ebx,01000h\r
+\r
+ ;\r
+ ; Calculate the start of the system page table (0xc0000000 upwards)\r
+ ;\r
+ mov [system_page_table_base],ebx\r
+ add ebx,01000h\r
+\r
+ ;\r
+ ; Calculate the start of the page table to map the first 4mb\r
+ ;\r
+ mov [lowmem_page_table_base],ebx\r
+ add ebx,01000h\r
+\r
+ ;\r
+ ; Set the position for the first module to be loaded\r
+ ;\r
+ mov [next_load_base],ebx\r
+\r
+ ;\r
+ ; Set the address of the start of kernel code\r
+ ;\r
+ mov [_start_kernel],ebx\r
+\r
+ ;\r
+ ; Make the argument list into a c string\r
+ ;\r
+ mov di,081h\r
+l1:\r
+ cmp byte [di],0dh\r
+ je l2\r
+ cmp byte [di],' '\r
+ jne l12\r
+ mov byte [di],0\r
+l12:\r
+ inc di\r
+ jmp l1\r
+l2:\r
+ mov byte [di],0\r
+ mov [end_cmd_line],di\r
+\r
+ mov dx,082h\r
+l14:\r
+ mov bx,dx\r
+ cmp byte [bx],0\r
+ je l16\r
+\r
+ ;\r
+ ; Process the arguments\r
+ ;\r
+ mov di,loading_msg\r
+ call _print_string\r
+ mov di,dx\r
+ call _print_string\r
+ mov ah,02h\r
+ mov dl,0dh\r
+ int 021h\r
+ mov ah,02h\r
+ mov dl,0ah\r
+ int 021h\r
+\r
+ ;\r
+ ; Load the file\r
+ ;\r
+ push di\r
+ mov dx,di\r
+ call _load_file\r
+ pop di\r
+\r
+ ;\r
+ ; Move onto the next module name in the command line\r
+ ;\r
+l15:\r
+ cmp di,[end_cmd_line]\r
+ je l16\r
+ cmp byte [di],0\r
+ je l17\r
+ inc di\r
+ jmp l15\r
+l17:\r
+ inc di\r
+ mov dx,di\r
+ jmp l14\r
+l16:\r
+\r
+ ;\r
+ ; Set the end of kernel memory \r
+ ;\r
+ mov eax,[next_load_base]\r
+ mov [_end_mem],eax\r
+\r
+ ;\r
+ ; Begin the pmode initalization\r
+ ;\r
+ jmp _to_pmode\r
+\r
+exit:\r
+ mov ax,04c00h\r
+ int 21h\r
+\r
+ ;\r
+ ; Any errors detected jump here\r
+ ;\r
+_error:\r
+ mov di,err_msg\r
+ call _print_string\r
+ jmp exit\r
+\r
+end_cmd_line dw 0\r
+\r
+\r
+;\r
+; Read in a file to kernel_base, set kernel base to the end of the file in\r
+; memory rounded up to the nearest page\r
+;\r
+; In:\r
+; DI = filename\r
+;\r
+_load_file:\r
+ inc dword [_nr_files]\r
+\r
+ ;\r
+ ; Open the file\r
+ ;\r
+ mov ah,03dh\r
+ mov al,0\r
+ mov dx,di\r
+ int 021h\r
+ jc _error\r
+ mov [file_handle],ax\r
+ \r
+ ;\r
+ ; Find filelength\r
+ ;\r
+ mov ah,042h\r
+ mov al,2\r
+ mov bx,[file_handle]\r
+ mov cx,0\r
+ mov dx,0\r
+ int 021h\r
+\r
+ ;\r
+ ; Convert the filelength in DX:AX to a dword in EBX\r
+ ;\r
+ movzx ebx,dx\r
+ shl ebx,16\r
+ mov bx,ax\r
+\r
+ ;\r
+ ; Record the length of the module in boot parameter table\r
+ ;\r
+ mov esi,[_nr_files]\r
+ dec esi\r
+ mov [_module_lengths+esi*4],ebx\r
+\r
+ ; \r
+ ; Convert the length into \r
+ ;\r
+ mov [size_mod_4k],ax\r
+ and word [size_mod_4k],0fffh\r
+\r
+ shr ax,12\r
+ mov [size_div_4k],ax\r
+\r
+ ;\r
+ ; Seek to beginning of file\r
+ ;\r
+ mov ah,042h\r
+ mov al,0\r
+ mov bx,[file_handle]\r
+ mov cx,0\r
+ mov dx,0\r
+ int 021h\r
+ jc _error\r
+\r
+ ;\r
+ ; Read in the module\r
+ ;\r
+ push ds\r
+\r
+ ;\r
+ ; Convert the linear point to the load address into a seg:off\r
+ ;\r
+ mov edi,[next_load_base]\r
+ call convert_to_seg\r
+ mov dx,di\r
+\r
+ ;\r
+ ; Move onto the next position in prepartion for a future read\r
+ ;\r
+ movzx eax,word [size_div_4k]\r
+ inc eax\r
+ mov bx,[size_mod_4k]\r
+ cmp bx,0\r
+ je l20\r
+ inc eax\r
+l20:\r
+ shl eax,12\r
+ add [next_load_base],eax\r
+\r
+ push fs\r
+ pop ds\r
+ \r
+ ;\r
+ ; We read the kernel in 4k chunks (because)\r
+ ;\r
+l6:\r
+ ;\r
+ ; Check if we have read it all\r
+ ;\r
+ mov ax,[es:size_div_4k]\r
+ cmp ax,0\r
+ je l5\r
+\r
+ ;\r
+ ; Make the call (dx was loaded above)\r
+ ;\r
+ mov ah,3fh\r
+ mov bx,[es:file_handle]\r
+ mov cx,01000h\r
+ int 21h \r
+\r
+ ;\r
+ ; We move onto the next pointer by altering ds\r
+ ;\r
+ mov ax,ds\r
+ add ax,0100h\r
+ mov ds,ax\r
+ dec word [es:size_div_4k]\r
+ jmp l6\r
+\r
+l5:\r
+ ;\r
+ ; Read the last section\r
+ ;\r
+ mov ah,3fh\r
+ mov bx,[es:file_handle]\r
+ mov cx,[es:size_mod_4k]\r
+ int 21h\r
+ pop ds\r
+ jnc _no_error\r
+ jmp _error\r
+\r
+_no_error:\r
+ ret\r
+\r
+;\r
+; In: EDI = address\r
+; Out: FS = segment\r
+; DI = base\r
+;\r
+convert_to_seg:\r
+ push eax\r
+\r
+ mov eax,edi\r
+ shr eax,16\r
+ shl eax,12\r
+ mov fs,ax\r
+\r
+ and edi,0ffffh\r
+\r
+ pop eax\r
+ ret\r
+\r
+;\r
+; Print string in DS:DI\r
+;\r
+_print_string:\r
+ push ax\r
+ push dx\r
+ push di\r
+ mov ah,02h\r
+l3:\r
+ mov dl,[di]\r
+ cmp dl,0\r
+ je l4\r
+ int 021h\r
+ inc di\r
+ jmp l3\r
+l4:\r
+ pop di\r
+ pop dx\r
+ pop ax\r
+ ret\r
+\r
+;\r
+; Handle of the currently open file\r
+;\r
+file_handle dw 0\r
+\r
+;\r
+; Size of the current file mod 4k\r
+;\r
+size_mod_4k dw 0\r
+\r
+;\r
+; Size of the current file divided by 4k\r
+;\r
+size_div_4k dw 0\r
+\r
+;\r
+;\r
+;\r
+last_addr dw 0\r
+\r
+;\r
+; Generic error message\r
+;\r
+err_msg db 'Error during operation',0\r
+\r
+;\r
+;\r
+;\r
+loading_msg db 'Loading: ',0\r
+\r
+filelength_lo dw 0\r
+filelength_hi dw 0\r
+\r
+kernel_page_directory_base dd 0\r
+system_page_table_base dd 0\r
+lowmem_page_table_base dd 0\r
+next_load_base dd 0\r
+_start_kernel dd 0\r
+\r
+boot_param_struct_base dd 0\r
+\r
+;\r
+; These variables are passed to the kernel (as a structure)\r
+;\r
+align 4\r
+_boot_param_struct:\r
+_magic:\r
+ dd 0\r
+_cursorx:\r
+ dd 0\r
+_cursory:\r
+ dd 0\r
+_nr_files:\r
+ dd 0\r
+_start_mem:\r
+ dd 0\r
+_end_mem:\r
+ dd 0\r
+_module_lengths:\r
+ times 64 dd 0\r
+_end_boot_param_struct\r
+ \r
+;\r
+; Needed for enabling the a20 address line\r
+;\r
+empty_8042:\r
+ jmp $+3\r
+ jmp $+3\r
+ in al,064h\r
+ test al,02h\r
+ jnz empty_8042\r
+ ret\r
+\r
+;\r
+; GDT descriptor\r
+;\r
+align 8\r
+gdt_descr:\r
+gdt_limit:\r
+ dw (((6+NR_TASKS)*8)-1)\r
+gdt_base:\r
+ dd gdt\r
+\r
+\r
+_to_pmode:\r
+ ;\r
+ ; Setup kernel parameters\r
+ ;\r
+ mov dword [_magic],0xdeadbeef\r
+\r
+ ;\r
+ ; Save cursor position\r
+ ;\r
+ mov ah,03h\r
+ mov bh,0h\r
+ int 010h\r
+ movzx eax,dl\r
+ mov [_cursorx],eax\r
+ movzx eax,dh\r
+ mov [_cursory],eax\r
+\r
+\r
+ mov bx,ds\r
+ movzx eax,bx\r
+ shl eax,4\r
+ add eax,_boot_param_struct\r
+ mov [boot_param_struct_base],eax \r
+\r
+ cli\r
+\r
+ ;\r
+ ; Zero out the kernel page directory\r
+ ;\r
+ ;\r
+ mov edi,[kernel_page_directory_base]\r
+ call convert_to_seg\r
+\r
+ mov cx,1024\r
+l10:\r
+ mov dword [fs:di],0\r
+ add di,4\r
+ loop l10\r
+\r
+ ;\r
+ ; Map in the lowmem page table (and reuse it for the identity map)\r
+ ;\r
+ mov edi,[kernel_page_directory_base]\r
+ call convert_to_seg\r
+\r
+ mov eax,[lowmem_page_table_base]\r
+ add eax,07h\r
+ mov [fs:di],eax\r
+ mov [fs:di+(0xd0000000/(1024*1024))],eax\r
+\r
+ ;\r
+ ; Map in the kernel page table\r
+ ;\r
+ mov eax,[system_page_table_base]\r
+ add eax,07h\r
+ mov [fs:di+3072],eax\r
+\r
+ ;\r
+ ; Setup the lowmem page table\r
+ ;\r
+ mov edi,[lowmem_page_table_base]\r
+ call convert_to_seg\r
+\r
+ mov ebx,0\r
+l9:\r
+ mov eax,ebx\r
+ shl eax,12 ; ebx = ebx * 4096\r
+ add eax,07h ; user, rw, present\r
+ mov [fs:edi+ebx*4],eax\r
+ inc ebx\r
+ cmp ebx,1024\r
+ jl l9\r
+\r
+ ;\r
+ ; Setup the system page table\r
+ ;\r
+ mov edi,[system_page_table_base]\r
+ call convert_to_seg\r
+\r
+ mov eax,07h\r
+l8:\r
+ mov edx,eax\r
+ add edx,[_start_kernel]\r
+ mov [fs:edi],edx\r
+ add edi,4\r
+ add eax,1000h\r
+ cmp eax,100007h\r
+ jl l8\r
+ \r
+ ;\r
+ ; Load the page directory into cr3\r
+ ;\r
+ mov eax,[kernel_page_directory_base]\r
+ mov cr3,eax\r
+\r
+ ;\r
+ ; Setup various variables\r
+ ;\r
+ mov bx,ds\r
+ movzx eax,bx\r
+ shl eax,4\r
+ add [gdt_base],eax\r
+\r
+ ;\r
+ ; Enable the A20 address line (to allow access to over 1mb)\r
+ ;\r
+ call empty_8042\r
+ mov al,0D1h ; command write\r
+ out 064h,al\r
+ call empty_8042\r
+ mov al,0DFh ; A20 on\r
+ out 060h,al\r
+ call empty_8042\r
+\r
+ ;\r
+ ; Reprogram the PIC because they overlap the Intel defined\r
+ ; exceptions \r
+ ;\r
+ mov al,011h ; initialization sequence\r
+ out 020h,al ; send it to 8259A-1\r
+ dw 0x00eb,0x00eb ; jmp $+2, jmp $+2\r
+ out 0A0h,al ; and to 8259A-2\r
+ dw 0x00eb,0x00eb\r
+ mov al,020h ; start of hardware int's (0x20)\r
+ out 021h,al\r
+ dw 0x00eb,0x00eb\r
+ mov al,028h ; start of hardware int's 2 (0x28)\r
+ out 0A1h,al\r
+ dw 0x00eb,0x00eb\r
+ mov al,04h ; 8259-1 is master\r
+ out 021h,al\r
+ dw 0x00eb,0x00eb\r
+ mov al,002h ; 8259-2 is slave\r
+ out 0A1h,al\r
+ dw 0x00eb,0x00eb\r
+ mov al,01h ; 8086 mode for both\r
+ out 021h,al\r
+ dw 0x00eb,0x00eb\r
+ out 0A1h,al\r
+ dw 0x00eb,0x00eb\r
+ mov al,0FFh ; mask off all interrupts for now\r
+ out 021h,al\r
+ dw 0x00eb,0x00eb\r
+ out 0A1h,al\r
+\r
+ ;\r
+ ; Load stack\r
+ ;\r
+ mov bx,ds\r
+ movzx eax,bx\r
+ shl eax,4\r
+ add eax,real_stack_end\r
+ mov [real_stack_base],eax\r
+ mov esp,[real_stack_base]\r
+ mov edx,[boot_param_struct_base]\r
+\r
+ ;\r
+ ; load gdt\r
+ ;\r
+ lgdt [gdt_descr]\r
+\r
+ ; \r
+ ; Enter pmode and clear prefetch queue\r
+ ;\r
+ mov eax,cr0\r
+ or eax,0x80000001\r
+ mov cr0,eax\r
+ jmp next\r
+next:\r
+ ;\r
+ ; NOTE: This must be position independant (no references to\r
+ ; non absolute variables)\r
+ ;\r
+\r
+ ;\r
+ ; Initalize segment registers\r
+ ;\r
+ mov ax,KERNEL_DS\r
+ mov ds,ax\r
+ mov ss,ax \r
+ mov es,ax\r
+ mov fs,ax\r
+\r
+ ;\r
+ ; Initalize eflags\r
+ ;\r
+ push dword 0\r
+ popf\r
+\r
+ ;\r
+ ; Jump to start of 32 bit code at c0000000\r
+ ;\r
+ push edx\r
+ push dword 0\r
+ jmp dword KERNEL_CS:KERNEL_BASE\r
+\r
+\r
+;\r
+; Our initial stack\r
+;\r
+real_stack times 1024 db 0\r
+real_stack_end:\r
+\r
+real_stack_base dd 0\r
+\r
+\r
+;\r
+; Global descriptor table\r
+;\r
+align 8\r
+gdt:\r
+ dw 0 ; Zero descriptor\r
+ dw 0\r
+ dw 0\r
+ dw 0\r
+ \r
+ dw 00000h ; User code descriptor\r
+ dw 00000h ; base: 0h limit: 3gb\r
+ dw 0fa00h\r
+ dw 000cch\r
+ \r
+ dw 00000h ; User data descriptor\r
+ dw 00000h ; base: 0h limit: 3gb\r
+ dw 0f200h\r
+ dw 000cch\r
+ \r
+ dw 00000h \r
+ dw 00000h \r
+ dw 00000h\r
+ dw 00000h\r
+\r
+ dw 0ffffh ; Kernel code descriptor \r
+ dw 00000h ; \r
+ dw 09a00h ; base 0h limit 4gb\r
+ dw 000cfh\r
+ \r
+ dw 0ffffh ; Kernel data descriptor\r
+ dw 00000h ; \r
+ dw 09200h ; base 0h limit 4gb\r
+ dw 000cfh\r
+\r
+ \r
+ times NR_TASKS*8 db 0\r
+\r
+_end:\r
+\r
+\r
--- /dev/null
+#
+#
+#
+
+all: loadros.com
+
+loadros.com: loadros.asm
+ nasm -fbin loadros.asm -o loadros.com
--- /dev/null
+#\r
+# Global makefile\r
+#\r
+\r
+#\r
+# Select your host\r
+#\r
+#HOST = djgpp-linux\r
+#HOST = mingw32-linux\r
+HOST = djgpp-msdos\r
+#HOST = mingw32-windows\r
+\r
+include rules.mak\r
+\r
+#\r
+# Required to run the system\r
+#\r
+COMPONENTS = kernel lib\r
+\r
+#\r
+# Select the loader(s) you want to build\r
+#\r
+LOADERS = dos\r
+\r
+#\r
+# Select the modules you want\r
+#\r
+MODULES = parallel keyboard\r
+\r
+all: $(COMPONENTS) $(LOADERS) $(MODULES)\r
+\r
+#\r
+# Device driver rules\r
+#\r
+\r
+parallel: dummy\r
+ make -C modules/parallel\r
+\r
+keyboard: dummy\r
+ make -C modules/keyboard\r
+\r
+mouse: dummy\r
+ make -C modules/mouse\r
+\r
+#\r
+# Kernel loaders\r
+#\r
+\r
+dos: dummy\r
+ make -C loaders/dos\r
+\r
+#\r
+# Required system components\r
+#\r
+\r
+kernel: dummy\r
+ make -C kernel\r
+\r
+lib: dummy\r
+ make -C lib\r
+\r
+dummy:\r
--- /dev/null
+#
+# Global makefile
+#
+
+#
+# Select your host
+#
+HOST = djgpp-linux
+#HOST = mingw32-linux
+#HOST = djgpp-msdos
+#HOST = mingw32-windows
+
+include rules.mak
+
+#
+# Required to run the system
+#
+COMPONENTS = kernel lib
+
+#
+# Select the loader(s) you want to build
+#
+LOADERS = dos
+
+#
+# Select the modules you want
+#
+MODULES = parallel keyboard
+
+all: $(COMPONENTS) $(LOADERS) $(MODULES)
+
+#
+# Device driver rules
+#
+
+parallel: dummy
+ make -C modules/parallel
+
+keyboard: dummy
+ make -C modules/keyboard
+
+mouse: dummy
+ make -C modules/mouse
+
+#
+# Kernel loaders
+#
+
+dos: dummy
+ make -C loaders/dos
+
+#
+# Required system components
+#
+
+kernel: dummy
+ make -C kernel
+
+lib: dummy
+ make -C lib
+
+dummy:
--- /dev/null
+DIRECTORIES\r
+\r
+system : compiled versions of the various system components and\r
+ libraries\r
+mkernel : microkernel source\r
+mkernel/hal : hardware abstraction layer source\r
+mkernel/mm : memory managment subsystem source\r
+mkernel/iomgr : IO manager subsystem source\r
+include : win32 headers\r
+include/internal : kernel private header files\r
+include/ntdll : system library private header files\r
+include/kernel32 : system library private header files\r
+include/user32 : user interface private header files\r
+include/gdi32 : graphics interface private header files\r
+include/ddk : header files for modules\r
+lib/ntdll : NT dll source\r
+lib/kernel32 : kernel32 source\r
+doc : documentation\r
+loaders/dos : DOS based loader\r
+loaders/boot : boot loader\r
--- /dev/null
+#
+# Important
+#
+.EXPORT_ALL_VARIABLES:
+
+
+#
+# Choose various options
+#
+ifeq ($(HOST),djgpp-linux)
+NASM_FORMAT = coff
+PREFIX = dos-
+KERNEL_BFD_TARGET = coff-i386
+EXE_POSTFIX =
+CP = cp
+endif
+
+ifeq ($(HOST),mingw32-linux)
+NASM_FORMAT = win32
+PREFIX = i386-mingw32
+KERNEL_BFD_TARGET = pe-i386
+EXE_POSTFIX
+CP = cp
+endif
+
+ifeq ($(HOST),djgpp-msdos)
+NASM_FORMAT = coff
+PREFIX =
+KERNEL_BFD_TARGET = coff-go32
+EXE_POSTFIX = .exe
+CP = copy
+endif
+
+ifeq ($(HOST),mingw32-windows)
+NASM_FORMAT = win32
+PREFIX =
+KERNEL_BFD_TARGET = pe-i386
+EXE_POSTFIX = .exe
+CP = copy
+endif
+
+#
+# Create variables for all the compiler tools
+#
+CC = $(PREFIX)gcc
+NATIVE_CC = gcc
+CFLAGS = -O2 -I../../include -I../include -fno-builtin -DCHECKED_BUILD $(DEFINES) -Wall -Wstrict-prototypes
+CXXFLAGS = $(CFLAGS)
+NASM = nasm
+NFLAGS = -i../include/ -f$(NASM_FORMAT)
+LD = $(PREFIX)ld
+NM = $(PREFIX)nm
+OBJCOPY = $(PREFIX)objcopy
+STRIP = $(PREFIX)strip
+AS = $(PREFIX)gcc -c -x assembler-with-cpp
+CPP = $(PREFIX)cpp
+
+%.o: %.cc
+ $(CC) $(CFLAGS) -c $< -o $@
+%.o: %.asm
+ $(NASM) $(NFLAGS) $< -o $@
+
+
+RULES_MAK_INCLUDED = 1