mirror of
https://github.com/reactos/reactos.git
synced 2024-12-27 09:34:43 +00:00
Implemented ZwOpenProcess corrected
Implemented killing other threads (possible memory leaks) Made a start on a proper implementation of APCs (based on NT Insider article) svn path=/trunk/; revision=551
This commit is contained in:
parent
f2a6a55325
commit
5b3ccbfc02
22 changed files with 357 additions and 1536 deletions
|
@ -1,3 +1,9 @@
|
|||
9/6/99: Implemented ZwOpenProcess
|
||||
Partially implemented killing other threads (possible memory
|
||||
leaks)
|
||||
Made a start on a proper implemention of APCs (based on
|
||||
article in NT insider)
|
||||
|
||||
8/12/98: Corrected bug in shell (Read two keypresses and assumed they
|
||||
where the key going up and down respectively)
|
||||
Corrected race in dpc handling
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
0.0.14:
|
||||
0.0.14: Converted to PE format
|
||||
All system libraries are now dlls
|
||||
|
||||
|
||||
0.0.13: Mostly bugfixes (I think)
|
||||
|
|
|
@ -205,6 +205,7 @@ ExecuteKill(char * lpPid)
|
|||
DWORD dwProcessId;
|
||||
|
||||
dwProcessId = (DWORD) atol(lpPid);
|
||||
debug_printf("dwProcessId %d\n",dwProcessId);
|
||||
hProcess = OpenProcess(
|
||||
PROCESS_TERMINATE,
|
||||
FALSE,
|
||||
|
|
|
@ -1 +0,0 @@
|
|||
loadros kimage.bin ide.o vfatfsd.o keyboard.o
|
|
@ -1,94 +0,0 @@
|
|||
This is the file "copying.dj". It does NOT apply to any sources or
|
||||
|
||||
binaries copyrighted by UCB Berkeley, the Free Software Foundation, or
|
||||
|
||||
any other agency besides DJ Delorie and others who have agreed to
|
||||
|
||||
allow their sources to be distributed under these terms.
|
||||
|
||||
|
||||
|
||||
Copyright Information for sources and executables that are marked
|
||||
|
||||
Copyright (C) DJ Delorie
|
||||
|
||||
7 Kim Lane
|
||||
|
||||
Rochester NH 03867-2954
|
||||
|
||||
|
||||
|
||||
This document is Copyright (C) DJ Delorie and may be distributed
|
||||
|
||||
verbatim, but changing it is not allowed.
|
||||
|
||||
|
||||
|
||||
Source code copyright DJ Delorie is distributed under the terms of the
|
||||
|
||||
GNU General Public Licence, with the following exceptions:
|
||||
|
||||
|
||||
|
||||
* Sources used to build crt0.o, gcrt0.o, libc.a, libdbg.a, and
|
||||
|
||||
libemu.a are distributed under the terms of the GNU Library General
|
||||
|
||||
Public License, rather than the GNU GPL.
|
||||
|
||||
|
||||
|
||||
* Any existing copyright or authorship information in any given source
|
||||
|
||||
file must remain intact. If you modify a source file, a notice to that
|
||||
|
||||
effect must be added to the authorship information in the source file.
|
||||
|
||||
|
||||
|
||||
* Runtime binaries, as provided by DJ in DJGPP, may be distributed
|
||||
|
||||
without sources ONLY if the recipient is given sufficient information
|
||||
|
||||
to obtain a copy of djgpp themselves. This primarily applies to
|
||||
|
||||
go32-v2.exe, emu387.dxe, and stubedit.exe.
|
||||
|
||||
|
||||
|
||||
* Runtime objects and libraries, as provided by DJ in DJGPP, when
|
||||
|
||||
linked into an application, may be distributed without sources ONLY
|
||||
|
||||
if the recipient is given sufficient information to obtain a copy of
|
||||
|
||||
djgpp themselves. This primarily applies to crt0.o and libc.a.
|
||||
|
||||
|
||||
|
||||
-----
|
||||
|
||||
|
||||
|
||||
Changes to source code copyright BSD or FSF by DJ Delorie fall under
|
||||
|
||||
the terms of the original copyright.
|
||||
|
||||
|
||||
|
||||
A copy of the files "COPYING" and "COPYING.LIB" are included with this
|
||||
|
||||
document. If you did not receive a copy of these files, you may
|
||||
|
||||
obtain one from whence this document was obtained, or by writing:
|
||||
|
||||
|
||||
|
||||
Free Software Foundation
|
||||
|
||||
675 Mass Ave
|
||||
|
||||
Cambridge, MA 02139
|
||||
|
||||
USA
|
||||
|
|
@ -1,340 +0,0 @@
|
|||
|
||||
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.
|
||||
|
||||
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.)
|
||||
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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
|
||||
|
||||
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.
|
|
@ -207,15 +207,9 @@ enum
|
|||
IRP_MN_POWER_SEQUENCE,
|
||||
};
|
||||
|
||||
/*
|
||||
* PURPOSE: Used all over
|
||||
*/
|
||||
enum
|
||||
{
|
||||
KernelMode,
|
||||
UserMode,
|
||||
};
|
||||
|
||||
#define KernelMode (0)
|
||||
#define UserMode (1)
|
||||
|
||||
/*
|
||||
* PURPOSE: Arguments to MmProbeAndLockPages
|
||||
*/
|
||||
|
|
|
@ -17,173 +17,167 @@
|
|||
* FIXME: These may not be the actual values used by NT
|
||||
*/
|
||||
|
||||
#define STATUS_SUCCESS (0x0)
|
||||
#define STATUS_MORE_ENTRIES (0x105)
|
||||
#define STATUS_NOTIFY_ENUM_DIR (0x10C)
|
||||
#define STATUS_OBJECT_EXISTS (0x40000000)
|
||||
#define STATUS_THREAD_WAS_SUSPENDED (0x40000001)
|
||||
#define STATUS_WORKING_SET_LIMIT_RANGE (0x40000002)
|
||||
#define STATUS_SUCCESS (0x0)
|
||||
#define STATUS_MORE_ENTRIES (0x105)
|
||||
#define STATUS_NOTIFY_ENUM_DIR (0x10C)
|
||||
#define STATUS_OBJECT_EXISTS (0x40000000)
|
||||
#define STATUS_THREAD_WAS_SUSPENDED (0x40000001)
|
||||
#define STATUS_WORKING_SET_LIMIT_RANGE (0x40000002)
|
||||
|
||||
#define STATUS_UNSUCCESSFUL (0xC0000001)
|
||||
#define STATUS_NOT_IMPLEMENTED (0xC0000002)
|
||||
#define STATUS_INVALID_INFO_CLASS (0xC0000003)
|
||||
#define STATUS_INFO_LENGTH_MISMATCH (0xC0000004)
|
||||
#define STATUS_ACCESS_VIOLATION (0xC0000005)
|
||||
#define STATUS_IN_PAGE_ERROR (0xC0000006)
|
||||
#define STATUS_PAGEFILE_QUOTA (0xC0000007)
|
||||
#define STATUS_INVALID_HANDLE (0xC0000008)
|
||||
#define STATUS_BAD_INITIAL_STACK (0xC0000009)
|
||||
#define STATUS_BAD_INITIAL_PC (0xC000000A)
|
||||
#define STATUS_INVALID_CID (0xC000000B)
|
||||
#define STATUS_TIMER_NOT_CANCELED (0xC000000C)
|
||||
#define STATUS_INVALID_PARAMETER (0xC000000D)
|
||||
#define STATUS_NO_SUCH_DEVICE (0xC000000E)
|
||||
#define STATUS_NO_SUCH_FILE (0xC000000F)
|
||||
#define STATUS_UNSUCCESSFUL (0xC0000001)
|
||||
#define STATUS_NOT_IMPLEMENTED (0xC0000002)
|
||||
#define STATUS_INVALID_INFO_CLASS (0xC0000003)
|
||||
#define STATUS_INFO_LENGTH_MISMATCH (0xC0000004)
|
||||
#define STATUS_ACCESS_VIOLATION (0xC0000005)
|
||||
#define STATUS_IN_PAGE_ERROR (0xC0000006)
|
||||
#define STATUS_PAGEFILE_QUOTA (0xC0000007)
|
||||
#define STATUS_INVALID_HANDLE (0xC0000008)
|
||||
#define STATUS_BAD_INITIAL_STACK (0xC0000009)
|
||||
#define STATUS_BAD_INITIAL_PC (0xC000000A)
|
||||
#define STATUS_INVALID_CID (0xC000000B)
|
||||
#define STATUS_TIMER_NOT_CANCELED (0xC000000C)
|
||||
#define STATUS_INVALID_PARAMETER (0xC000000D)
|
||||
#define STATUS_NO_SUCH_DEVICE (0xC000000E)
|
||||
#define STATUS_NO_SUCH_FILE (0xC000000F)
|
||||
|
||||
#define STATUS_GUARD_PAGE_VIOLATION (0x80000001)
|
||||
#define STATUS_DATATYPE_MISALIGNMENT (0x80000002)
|
||||
#define STATUS_BREAKPOINT (0x80000003)
|
||||
#define STATUS_SINGLE_STEP (0x80000004)
|
||||
#define STATUS_BUFFER_OVERFLOW (0x80000005)
|
||||
#define STATUS_NO_MORE_FILES (0x80000006)
|
||||
#define STATUS_WAKE_SYSTEM_DEBUGGER (0x80000007)
|
||||
#define STATUS_GUARD_PAGE_VIOLATION (0x80000001)
|
||||
#define STATUS_DATATYPE_MISALIGNMENT (0x80000002)
|
||||
#define STATUS_BREAKPOINT (0x80000003)
|
||||
#define STATUS_SINGLE_STEP (0x80000004)
|
||||
#define STATUS_BUFFER_OVERFLOW (0x80000005)
|
||||
#define STATUS_NO_MORE_FILES (0x80000006)
|
||||
#define STATUS_WAKE_SYSTEM_DEBUGGER (0x80000007)
|
||||
|
||||
#define STATUS_IMAGE_NOT_AT_BASE (0x40000003)
|
||||
#define STATUS_RXACT_STATE_CREATED (0x40000004)
|
||||
#define STATUS_SEGMENT_NOTIFICATION (0x40000005)
|
||||
#define STATUS_LOCAL_USER_SESSION_KEY (0x40000006)
|
||||
#define STATUS_BAD_CURRENT_DIRECTORY (0x40000007)
|
||||
#define STATUS_SERIAL_MORE_WRITES (0x40000008)
|
||||
#define STATUS_REGISTRY_RECOVERED (0x40000009)
|
||||
#define STATUS_FT_READ_RECOVERING_FROM_BACKUP (0x4000000A)
|
||||
#define STATUS_FT_WRITE_RECOVERY (0x4000000B)
|
||||
#define STATUS_SERIAL_COUNTER_TIMEOUT (0x4000000C)
|
||||
#define STATUS_NULL_LM_PASSWORD (0x4000000D)
|
||||
#define STATUS_IMAGE_MACHINE_TYPE_MISMATCH (0x4000000E)
|
||||
#define STATUS_RECEIVE_PARTIAL (0x4000000F)
|
||||
#define STATUS_RECEIVE_EXPEDITED (0x40000010)
|
||||
#define STATUS_RECEIVE_PARTIAL_EXPEDITED (0x40000011)
|
||||
#define STATUS_EVENT_DONE (0x40000012)
|
||||
#define STATUS_EVENT_PENDING (0x40000013)
|
||||
#define STATUS_CHECKING_FILE_SYSTEM (0x40000014)
|
||||
#define STATUS_FATAL_APP_EXIT (0x40000015)
|
||||
#define STATUS_PREDEFINED_HANDLE (0x40000016)
|
||||
#define STATUS_WAS_UNLOCKED (0x40000017)
|
||||
#define STATUS_SERVICE_NOTIFICATION (0x40000018)
|
||||
#define STATUS_WAS_LOCKED (0x40000019)
|
||||
#define STATUS_LOG_HARD_ERROR (0x4000001A)
|
||||
#define STATUS_ALREADY_WIN32 (0x4000001B)
|
||||
#define STATUS_WX86_UNSIMULATE (0x4000001C)
|
||||
#define STATUS_WX86_CONTINUE (0x4000001D)
|
||||
#define STATUS_WX86_SINGLE_STEP (0x4000001E)
|
||||
#define STATUS_WX86_BREAKPOINT (0x4000001F)
|
||||
#define STATUS_WX86_EXCEPTION_CONTINUE (0x40000020)
|
||||
#define STATUS_WX86_EXCEPTION_LASTCHANCE (0x40000021)
|
||||
#define STATUS_WX86_EXCEPTION_CHAIN (0x40000022)
|
||||
#define STATUS_IMAGE_MACHINE_TYPE_MISMATCH_EXE (0x40000023)
|
||||
#define STATUS_NO_YIELD_PERFORMED (0x40000024)
|
||||
#define STATUS_TIMER_RESUME_IGNORED (0x40000025)
|
||||
#define STATUS_ARBITRATION_UNHANDLED (0x40000026)
|
||||
#define STATUS_CARDBUS_NOT_SUPPORTED (0x40000027)
|
||||
#define STATUS_WX86_CREATEWX86TIB (0x40000028)
|
||||
|
||||
#define STATUS_HANDLES_CLOSED (0x8000000A)
|
||||
#define STATUS_NO_INHERITANCE (0x8000000B)
|
||||
#define STATUS_GUID_SUBSTITUTION_MADE (0x8000000C)
|
||||
#define STATUS_PARTIAL_COPY (0x8000000D)
|
||||
#define STATUS_DEVICE_PAPER_EMPTY (0x8000000E)
|
||||
#define STATUS_DEVICE_POWERED_OFF (0x8000000F)
|
||||
#define STATUS_DEVICE_OFF_LINE (0x80000010)
|
||||
#define STATUS_DEVICE_BUSY (0x80000011)
|
||||
#define STATUS_NO_MORE_EAS (0x80000012)
|
||||
#define STATUS_INVALID_EA_NAME (0x80000013)
|
||||
#define STATUS_EA_LIST_INCONSISTENT (0x80000014)
|
||||
#define STATUS_INVALID_EA_FLAG (0x80000015)
|
||||
#define STATUS_VERIFY_REQUIRED (0x80000016)
|
||||
#define STATUS_EXTRANEOUS_INFORMATION (0x80000017)
|
||||
#define STATUS_RXACT_COMMIT_NECESSARY (0x80000018)
|
||||
|
||||
#define STATUS_NO_MORE_ENTRIES (0x8000001A)
|
||||
#define STATUS_FILEMARK_DETECTED (0x8000001B)
|
||||
#define STATUS_MEDIA_CHANGED (0x8000001C)
|
||||
#define STATUS_BUS_RESET (0x8000001D)
|
||||
#define STATUS_END_OF_MEDIA (0x8000001E)
|
||||
#define STATUS_BEGINNING_OF_MEDIA (0x8000001F)
|
||||
#define STATUS_MEDIA_CHECK (0x80000020)
|
||||
#define STATUS_SETMARK_DETECTED (0x80000021)
|
||||
#define STATUS_NO_DATA_DETECTED (0x80000022)
|
||||
#define STATUS_REDIRECTOR_HAS_OPEN_HANDLES (0x80000023)
|
||||
#define STATUS_SERVER_HAS_OPEN_HANDLES (0x80000024)
|
||||
#define STATUS_ALREADY_DISCONNECTED (0x80000025)
|
||||
#define STATUS_LONGJUMP (0x80000026)
|
||||
|
||||
#define STATUS_INVALID_DEVICE_REQUEST (0xc0000010)
|
||||
#define STATUS_END_OF_FILE (0xc0000011)
|
||||
#define STATUS_WRONG_VOLUME (0xc0000012)
|
||||
#define STATUS_NO_MEDIA_IN_DEVICE (0xc0000013)
|
||||
#define STATUS_UNRECOGNIZED_MEDIA (0xc0000014)
|
||||
#define STATUS_NONEXISTENT_SECTOR (0xc0000015)
|
||||
#define STATUS_MORE_PROCESSING_REQUIRED (0xc0000016)
|
||||
#define STATUS_NO_MEMORY (0xc0000017)
|
||||
#define STATUS_CONFLICTING_ADDRESSES (0xc0000018)
|
||||
#define STATUS_NOT_MAPPED_VIEW (0xc0000019)
|
||||
#define STATUS_UNABLE_TO_FREE_VM (0xc000001A)
|
||||
#define STATUS_UNABLE_TO_DELETE_SECTION (0xc000001B)
|
||||
#define STATUS_INVALID_SYSTEM_SERVICE (0xc000001C)
|
||||
#define STATUS_ILLEGAL_INSTRUCTION (0xc000001D)
|
||||
#define STATUS_INVALID_LOCK_SEQUENCE (0xc000001E)
|
||||
#define STATUS_INVALID_VIEW_SIZE (0xc000001F)
|
||||
|
||||
#define STATUS_INVALID_FILE_FOR_SECTION (0xc0000020)
|
||||
#define STATUS_ALREADY_COMMITTED (0xc0000021)
|
||||
#define STATUS_ACCESS_DENIED (0xc0000022)
|
||||
#define STATUS_BUFFER_TOO_SMALL (0xc0000023)
|
||||
#define STATUS_OBJECT_TYPE_MISMATCH (0xc0000024)
|
||||
#define STATUS_NONCONTINUABLE_EXCEPTION (0xc0000025)
|
||||
#define STATUS_INVALID_DISPOSITION (0xc0000026)
|
||||
#define STATUS_UNWIND (0xc0000027)
|
||||
#define STATUS_BAD_STACK (0xc0000028)
|
||||
#define STATUS_INVALID_UNWIND_TARGET (0xc0000029)
|
||||
#define STATUS_NOT_LOCKED (0xc000002A)
|
||||
#define STATUS_PARITY_ERROR (0xc000002B)
|
||||
#define STATUS_UNABLE_TO_DECOMMIT_VM (0xc000002C)
|
||||
#define STATUS_NOT_COMMITTED (0xc000002D)
|
||||
#define STATUS_INVALID_PORT_ATTRIBUTES (0xc000002E)
|
||||
#define STATUS_PORT_MESSAGE_TOO_LONG (0xc000002F)
|
||||
#define STATUS_INVALID_PARAMETER_MIX (0xc0000030)
|
||||
#define STATUS_INVALID_QUOTA_LOWER (0xc0000031)
|
||||
#define STATUS_DISK_CORRUPT_ERROR (0xc0000032)
|
||||
#define STATUS_OBJECT_NAME_INVALID (0xc0000033)
|
||||
#define STATUS_OBJECT_NAME_NOT_FOUND (0xc0000034)
|
||||
#define STATUS_OBJECT_NAME_COLLISION (0xc0000035)
|
||||
|
||||
#define STATUS_PORT_DISCONNECTED (0xc0000037)
|
||||
#define STATUS_DEVICE_ALREADY_ATTACHED (0xc0000038)
|
||||
#define STATUS_OBJECT_PATH_INVALID (0xc0000039)
|
||||
#define STATUS_OBJECT_PATH_NOT_FOUND (0xc000003A)
|
||||
#define STATUS_PATH_SYNTAX_BAD (0xc000003B)
|
||||
#define STATUS_DATA_OVERRUN (0xc000003C)
|
||||
#define STATUS_DATA_LATE_ERROR (0xc000003D)
|
||||
#define STATUS_DATA_ERROR (0xc000003E)
|
||||
#define STATUS_CRC_ERROR (0xc000003F)
|
||||
#define STATUS_SECTION_TOO_BIG (0xc0000040)
|
||||
#define STATUS_PORT_CONNECTION_REFUSED (0xc0000041)
|
||||
#define STATUS_INVALID_PORT_HANDLE (0xc0000042)
|
||||
#define STATUS_SHARING_VIOLATION (0xc0000043)
|
||||
#define STATUS_QUOTA_EXCEEDED (0xc0000044)
|
||||
#define STATUS_INVALID_PAGE_PROTECTION (0xc0000045)
|
||||
#define STATUS_MUTANT_NOT_OWNED (0xc0000046)
|
||||
#define STATUS_SEMAPHORE_LIMIT_EXCEEDED (0xc0000047)
|
||||
#define STATUS_PORT_ALREADY_SET (0xc0000048)
|
||||
|
||||
enum
|
||||
{
|
||||
|
||||
STATUS_IMAGE_NOT_AT_BASE = (0x40000003),
|
||||
STATUS_RXACT_STATE_CREATED,
|
||||
STATUS_SEGMENT_NOTIFICATION,
|
||||
STATUS_LOCAL_USER_SESSION_KEY,
|
||||
STATUS_BAD_CURRENT_DIRECTORY,
|
||||
STATUS_SERIAL_MORE_WRITES,
|
||||
STATUS_REGISTRY_RECOVERED,
|
||||
STATUS_FT_READ_RECOVERY_FROM_BACKUP,
|
||||
STATUS_FT_WRITE_RECOVERY,
|
||||
STATUS_SERIAL_COUNTER_TIMEOUT,
|
||||
STATUS_NULL_LM_PASSWORD,
|
||||
STATUS_IMAGE_MACHINE_TYPE_MISMATCH,
|
||||
STATUS_RECEIVE_PARTIAL,
|
||||
STATUS_RECEIVE_EXPEDITED,
|
||||
STATUS_RECEIVE_PARTIAL_EXPEDITED,
|
||||
STATUS_EVENT_DONE,
|
||||
STATUS_EVENT_PENDING,
|
||||
STATUS_CHECKING_FILE_SYSTEM,
|
||||
STATUS_FATAL_APP_EXIT,
|
||||
STATUS_PREDEFINED_HANDLE,
|
||||
STATUS_WAS_UNLOCKED,
|
||||
STATUS_SERVICE_NOTIFICATION,
|
||||
STATUS_WAS_LOCKED,
|
||||
STATUS_LOG_HARD_ERROR,
|
||||
STATUS_ALREADY_WIN32,
|
||||
STATUS_WX86_UNSIMULATE,
|
||||
STATUS_WX86_CONTINUE,
|
||||
STATUS_WX86_SINGLE_STEP,
|
||||
STATUS_WX86_BREAKPOINT,
|
||||
STATUS_WX86_EXCEPTION_CONTINUE,
|
||||
STATUS_WX86_EXCEPTION_LASTCHANCE,
|
||||
STATUS_WX86_EXCEPTION_CHAIN,
|
||||
STATUS_IMAGE_MACHINE_TYPE_MISMATCH_EXE,
|
||||
STATUS_NO_YIELD_PERFORMED,
|
||||
STATUS_TIMER_RESUME_IGNORED,
|
||||
STATUS_ARBITRATION_UNHANDLED,
|
||||
STATUS_CARDBUS_NOT_SUPPORTED,
|
||||
STATUS_WX86_CREATEWX86TIB,
|
||||
|
||||
|
||||
STATUS_HANDLES_CLOSED=0x8000000A,
|
||||
STATUS_NO_INHERITANCE,
|
||||
STATUS_GUID_SUBSTITUTION_MADE,
|
||||
STATUS_PARTIAL_COPY,
|
||||
STATUS_DEVICE_PAPER_EMPTY,
|
||||
STATUS_DEVICE_POWERED_OFF,
|
||||
STATUS_DEVICE_OFF_LINE,
|
||||
STATUS_DEVICE_BUSY,
|
||||
STATUS_NO_MORE_EAS,
|
||||
STATUS_INVALID_EA_NAME,
|
||||
STATUS_EA_LIST_INCONSISTENT,
|
||||
STATUS_INVALID_EA_FLAG,
|
||||
STATUS_VERIFY_REQUIRED,
|
||||
STATUS_EXTRANEOUS_INFORMATION,
|
||||
STATUS_RXACT_COMMIT_NECESSARY,
|
||||
|
||||
STATUS_NO_MORE_ENTRIES=0x8000001A,
|
||||
STATUS_FILEMARK_DETECTED,
|
||||
STATUS_MEDIA_CHANGED,
|
||||
STATUS_BUS_RESET,
|
||||
STATUS_END_OF_MEDIA,
|
||||
STATUS_BEGINNING_OF_MEDIA,
|
||||
STATUS_MEDIA_CHECK,
|
||||
STATUS_SETMARK_DETECTED,
|
||||
STATUS_NO_DATA_DETECTED,
|
||||
STATUS_REDIRECTOR_HAS_OPEN_HANDLES,
|
||||
STATUS_SERVER_HAS_OPEN_HANDLES,
|
||||
STATUS_ALREADY_DISCONNECTED,
|
||||
STATUS_LONGJUMP,
|
||||
|
||||
|
||||
// c0000010
|
||||
STATUS_INVALID_DEVICE_REQUEST,
|
||||
STATUS_END_OF_FILE,
|
||||
STATUS_WRONG_VOLUME,
|
||||
STATUS_NO_MEDIA_IN_DEVICE,
|
||||
STATUS_UNRECOGNIZED_MEDIA,
|
||||
STATUS_NONEXISTENT_SECTOR,
|
||||
STATUS_MORE_PROCESSING_REQUIRED,
|
||||
STATUS_NO_MEMORY,
|
||||
STATUS_CONFLICTING_ADDRESSES,
|
||||
STATUS_NOT_MAPPED_VIEW,
|
||||
STATUS_UNABLE_TO_FREE_VM,
|
||||
STATUS_UNABLE_TO_DELETE_SECTION,
|
||||
STATUS_INVALID_SYSTEM_SERVICE,
|
||||
STATUS_ILLEGAL_INSTRUCTION,
|
||||
STATUS_INVALID_LOCK_SEQUENCE,
|
||||
STATUS_INVALID_VIEW_SIZE,
|
||||
|
||||
// c0000020
|
||||
STATUS_INVALID_FILE_FOR_SECTION,
|
||||
STATUS_ALREADY_COMMITTED,
|
||||
STATUS_ACCESS_DENIED,
|
||||
STATUS_BUFFER_TOO_SMALL,
|
||||
STATUS_OBJECT_TYPE_MISMATCH,
|
||||
STATUS_NONCONTINUABLE_EXCEPTION,
|
||||
STATUS_INVALID_DISPOSITION,
|
||||
STATUS_UNWIND,
|
||||
STATUS_BAD_STACK,
|
||||
STATUS_INVALID_UNWIND_TARGET,
|
||||
STATUS_NOT_LOCKED,
|
||||
STATUS_PARITY_ERROR,
|
||||
STATUS_UNABLE_TO_DECOMMIT_VM,
|
||||
STATUS_NOT_COMMITTED,
|
||||
STATUS_INVALID_PORT_ATTRIBUTES,
|
||||
STATUS_PORT_MESSAGE_TOO_LONG,
|
||||
STATUS_INVALID_PARAMETER_MIX,
|
||||
STATUS_INVALID_QUOTA_LOWER,
|
||||
STATUS_DISK_CORRUPT_ERROR,
|
||||
STATUS_OBJECT_NAME_INVALID,
|
||||
STATUS_OBJECT_NAME_NOT_FOUND,
|
||||
STATUS_OBJECT_NAME_COLLISION,
|
||||
|
||||
STATUS_PORT_DISCONNECTED=0xC0000037L,
|
||||
STATUS_DEVICE_ALREADY_ATTACHED,
|
||||
STATUS_OBJECT_PATH_INVALID,
|
||||
STATUS_OBJECT_PATH_NOT_FOUND,
|
||||
STATUS_OBJECT_PATH_SYNTAX_BAD,
|
||||
STATUS_DATA_OVERRUN,
|
||||
STATUS_DATA_LATE_ERROR,
|
||||
STATUS_DATA_ERROR,
|
||||
STATUS_CRC_ERROR,
|
||||
STATUS_SECTION_TOO_BIG,
|
||||
STATUS_PORT_CONNECTION_REFUSED,
|
||||
STATUS_INVALID_PORT_HANDLE,
|
||||
STATUS_SHARING_VIOLATION,
|
||||
STATUS_QUOTA_EXCEEDED,
|
||||
STATUS_INVALID_PAGE_PROTECTION,
|
||||
STATUS_MUTANT_NOT_OWNED,
|
||||
STATUS_SEMAPHORE_LIMIT_EXCEEDED,
|
||||
STATUS_PORT_ALREADY_SET,
|
||||
STATUS_SECTION_NOT_IMAGE,
|
||||
STATUS_SUSPEND_COUNT_EXCEEDED,
|
||||
STATUS_THREAD_IS_TERMINATING,
|
||||
|
@ -478,56 +472,56 @@ enum
|
|||
STATUS_SHARED_IRQ_BUSY,
|
||||
STATUS_FT_ORPHANING,
|
||||
STATUS_BIOS_FAILED_TO_CONNECT_INTERRUPT,
|
||||
};
|
||||
|
||||
#define STATUS_PARTITION_FAILURE (0xC0000172)
|
||||
#define STATUS_INVALID_BLOCK_LENGTH (0xC0000173)
|
||||
#define STATUS_DEVICE_NOT_PARTITIONED (0xC0000174)
|
||||
#define STATUS_UNABLE_TO_LOCK_MEDIA (0xC0000175)
|
||||
#define STATUS_UNABLE_TO_UNLOAD_MEDIA (0xC0000176)
|
||||
#define STATUS_EOM_OVERFLOW (0xC0000177)
|
||||
#define STATUS_NO_MEDIA (0xC0000178)
|
||||
|
||||
#define STATUS_NO_SUCH_MEMBER (0xC000017A)
|
||||
#define STATUS_INVALID_MEMBER (0xC000017B)
|
||||
#define STATUS_KEY_DELETED (0xC000017C)
|
||||
#define STATUS_NO_LOG_SPACE (0xC000017D)
|
||||
#define STATUS_TOO_MANY_SIDS (0xC000017E)
|
||||
#define STATUS_LM_CROSS_ENCRYPTION_REQUIRED (0xC000017F)
|
||||
#define STATUS_KEY_HAS_CHILDREN (0xC0000180)
|
||||
#define STATUS_CHILD_MUST_BE_VOLATILE (0xC0000181)
|
||||
#define STATUS_DEVICE_CONFIGURATION_ERROR (0xC0000182)
|
||||
#define STATUS_DRIVER_INTERNAL_ERROR (0xC0000183)
|
||||
#define STATUS_INVALID_DEVICE_STATE (0xC0000184)
|
||||
#define STATUS_IO_DEVICE_ERROR (0xC0000185)
|
||||
#define STATUS_DEVICE_PROTOCOL_ERROR (0xC0000186)
|
||||
#define STATUS_BACKUP_CONTROLLER (0xC0000187)
|
||||
#define STATUS_LOG_FILE_FULL (0xC0000188)
|
||||
#define STATUS_TOO_LATE (0xC0000189)
|
||||
#define STATUS_NO_TRUST_LSA_SECRET (0xC000018A)
|
||||
#define STATUS_NO_TRUST_SAM_ACCOUNT (0xC000018B)
|
||||
#define STATUS_TRUSTED_DOMAIN_FAILURE (0xC000018C)
|
||||
#define STATUS_TRUSTED_RELATIONSHIP_FAILURE (0xC000018D)
|
||||
#define STATUS_EVENTLOG_FILE_CORRUPT (0xC000018E)
|
||||
#define STATUS_EVENTLOG_CANT_START (0xC000018F)
|
||||
#define STATUS_TRUST_FAILURE (0xC0000190)
|
||||
#define STATUS_MUTANT_LIMIT_EXCEEDED (0xC0000191)
|
||||
#define STATUS_NETLOGON_NOT_STARTED (0xC0000192)
|
||||
#define STATUS_ACCOUNT_EXPIRED (0xC0000193)
|
||||
#define STATUS_POSSIBLE_DEADLOCK (0xC0000194)
|
||||
#define STATUS_NETWORK_CREDENTIAL_CONFLICT (0xC0000195)
|
||||
#define STATUS_REMOTE_SESSION_LIMIT (0xC0000196)
|
||||
#define STATUS_EVENTLOG_FILE_CHANGED (0xC0000197)
|
||||
#define STATUS_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT (0xC0000198)
|
||||
#define STATUS_NOLOGON_WORKSTATION_TRUST_ACCOUNT (0xC0000199)
|
||||
#define STATUS_NOLOGON_SERVER_TRUST_ACCOUNT (0xC000019A)
|
||||
#define STATUS_DOMAIN_TRUST_INCONSISTENT (0xC000019B)
|
||||
#define STATUS_FS_DRIVER_REQUIRED (0xC000019C)
|
||||
|
||||
STATUS_PARTITION_FAILURE=0xC0000172,
|
||||
STATUS_INVALID_BLOCK_LENGTH,
|
||||
STATUS_DEVICE_NOT_PARTITIONED,
|
||||
STATUS_UNABLE_TO_LOCK_MEDIA,
|
||||
STATUS_UNABLE_TO_UNLOAD_MEDIA,
|
||||
STATUS_EOM_OVERFLOW,
|
||||
STATUS_NO_MEDIA,
|
||||
|
||||
STATUS_NO_SUCH_MEMBER=0xC000017A,
|
||||
STATUS_INVALID_MEMBER,
|
||||
STATUS_KEY_DELETED,
|
||||
STATUS_NO_LOG_SPACE,
|
||||
STATUS_TOO_MANY_SIDS,
|
||||
STATUS_LM_CROSS_ENCRYPTION_REQUIRED,
|
||||
STATUS_KEY_HAS_CHILDREN,
|
||||
STATUS_CHILD_MUST_BE_VOLATILE,
|
||||
STATUS_DEVICE_CONFIGURATION_ERROR,
|
||||
STATUS_DRIVER_INTERNAL_ERROR,
|
||||
STATUS_INVALID_DEVICE_STATE,
|
||||
STATUS_IO_DEVICE_ERROR,
|
||||
STATUS_DEVICE_PROTOCOL_ERROR,
|
||||
STATUS_BACKUP_CONTROLLER,
|
||||
STATUS_LOG_FILE_FULL,
|
||||
STATUS_TOO_LATE,
|
||||
STATUS_NO_TRUST_LSA_SECRET,
|
||||
STATUS_NO_TRUST_SAM_ACCOUNT,
|
||||
STATUS_TRUSTED_DOMAIN_FAILURE,
|
||||
STATUS_TRUSTED_RELATIONSHIP_FAILURE,
|
||||
STATUS_EVENTLOG_FILE_CORRUPT,
|
||||
STATUS_EVENTLOG_CANT_START,
|
||||
STATUS_TRUST_FAILURE,
|
||||
STATUS_MUTANT_LIMIT_EXCEEDED,
|
||||
STATUS_NETLOGON_NOT_STARTED,
|
||||
STATUS_ACCOUNT_EXPIRED,
|
||||
STATUS_POSSIBLE_DEADLOCK,
|
||||
STATUS_NETWORK_CREDENTIAL_CONFLICT,
|
||||
STATUS_REMOTE_SESSION_LIMIT,
|
||||
STATUS_EVENTLOG_FILE_CHANGED,
|
||||
STATUS_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT,
|
||||
STATUS_NOLOGON_WORKSTATION_TRUST_ACCOUNT,
|
||||
STATUS_NOLOGON_SERVER_TRUST_ACCOUNT,
|
||||
STATUS_DOMAIN_TRUST_INCONSISTENT,
|
||||
STATUS_FS_DRIVER_REQUIRED,
|
||||
|
||||
STATUS_RESOURCE_LANG_NOT_FOUND=0xC0000204,
|
||||
|
||||
#define STATUS_RESOURCE_LANG_NOT_FOUND (0xC0000204)
|
||||
|
||||
enum
|
||||
{
|
||||
RPC_NT_INVALID_STRING_BINDING=0xC0020001,
|
||||
RPC_NT_WRONG_KIND_OF_BINDING,
|
||||
RPC_NT_INVALID_BINDING,
|
||||
|
|
|
@ -424,6 +424,8 @@ WINBOOL STDCALL CreateProcessW(LPCWSTR lpApplicationName,
|
|||
IMAGE_DOS_HEADER DosHeader;
|
||||
HANDLE NTDllSection;
|
||||
ULONG InitialViewSize;
|
||||
PROCESS_BASIC_INFORMATION ProcessBasicInfo;
|
||||
ULONG retlen;
|
||||
|
||||
DPRINT("CreateProcessW(lpApplicationName '%w', lpCommandLine '%w')\n",
|
||||
lpApplicationName,lpCommandLine);
|
||||
|
@ -449,6 +451,14 @@ WINBOOL STDCALL CreateProcessW(LPCWSTR lpApplicationName,
|
|||
NULL,
|
||||
NULL,
|
||||
NULL);
|
||||
ZwQueryInformationProcess(hProcess,
|
||||
ProcessBasicInformation,
|
||||
&ProcessBasicInfo,
|
||||
sizeof(ProcessBasicInfo),
|
||||
&retlen);
|
||||
DPRINT("ProcessBasicInfo.UniqueProcessId %d\n",
|
||||
ProcessBasicInfo.UniqueProcessId);
|
||||
lpProcessInformation->dwProcessId = ProcessBasicInfo.UniqueProcessId;
|
||||
|
||||
/*
|
||||
* Map NT DLL into the process
|
||||
|
|
|
@ -158,12 +158,15 @@ HANDLE STDCALL OpenProcess(DWORD dwDesiredAccess,
|
|||
CLIENT_ID ClientId ;
|
||||
|
||||
ClientId.UniqueProcess = (HANDLE)dwProcessId;
|
||||
ClientId.UniqueThread = INVALID_HANDLE_VALUE;
|
||||
|
||||
ObjectAttributes.Length = sizeof(OBJECT_ATTRIBUTES);
|
||||
ObjectAttributes.RootDirectory = (HANDLE)NULL;
|
||||
ObjectAttributes.SecurityDescriptor = NULL;
|
||||
ObjectAttributes.SecurityQualityOfService = NULL;
|
||||
ObjectAttributes.ObjectName = NULL;
|
||||
|
||||
if ( bInheritHandle == TRUE )
|
||||
if (bInheritHandle == TRUE)
|
||||
ObjectAttributes.Attributes = OBJ_INHERIT;
|
||||
else
|
||||
ObjectAttributes.Attributes = 0;
|
||||
|
|
|
@ -177,7 +177,7 @@ static NTSTATUS LdrFindDll(PDLL* Dll, PCHAR Name)
|
|||
current = current->Next;
|
||||
} while (current != &LdrDllListHead);
|
||||
|
||||
DPRINT("Failed to find dll %s\n",Name);
|
||||
dprintf("Failed to find dll %s\n",Name);
|
||||
|
||||
return(LdrLoadDll(Dll, Name));
|
||||
}
|
||||
|
|
|
@ -16,7 +16,7 @@ include rules.mak
|
|||
#
|
||||
COMPONENTS = iface_native ntoskrnl
|
||||
DLLS = ntdll kernel32 crtdll fmifs
|
||||
#DLLS = crtdll mingw32
|
||||
#DLLS = advapi32
|
||||
SUBSYS = win32k
|
||||
|
||||
#
|
||||
|
|
|
@ -1,408 +0,0 @@
|
|||
#
|
||||
# This lists all the symbols exported from the kernel to services
|
||||
#
|
||||
# NOTE: Give an export the name you normally call the function with
|
||||
# This doesn't support overloading or class members
|
||||
# Also the function should be defined with asmlinkage
|
||||
#
|
||||
#
|
||||
#
|
||||
DbgPrint
|
||||
ExAcquireFastMutex
|
||||
ExAcquireFastMutexUnsafe
|
||||
ExAcquireResourceExclusive
|
||||
ExAcquireResourceExclusiveLite
|
||||
ExAcquireResourceSharedLite
|
||||
ExAcquireSharedStarveExclusive
|
||||
ExAcquireSharedWaitForExclusive
|
||||
ExAllocateFromNPagedLookasideList
|
||||
ExAllocateFromPagedLookasideList
|
||||
ExAllocateFromZone
|
||||
ExAllocatePool
|
||||
#ExAllocatePoolWithQuota
|
||||
#ExAllocatePoolWithQuotaTag
|
||||
ExAllocatePoolWithTag
|
||||
ExConvertExclusiveToSharedLite
|
||||
ExDeleteNPagedLookasideList
|
||||
ExDeletePagedLookasideList
|
||||
ExDeleteResource
|
||||
ExDeleteResourceLite
|
||||
ExExtendZone
|
||||
ExFreePool
|
||||
ExFreeToNPagedLookasideList
|
||||
ExFreeToPagedLookasideList
|
||||
ExFreeToZone
|
||||
ExGetCurrentResourceThread
|
||||
ExGetExclusiveWaiterCount
|
||||
ExGetSharedWaiterCount
|
||||
ExHookException
|
||||
ExInitializeFastMutex
|
||||
ExInitializeNPagedLookasideList
|
||||
ExInitializePagedLookasideList
|
||||
ExInitializeResource
|
||||
ExInitializeResourceLite
|
||||
ExInitializeSListHead
|
||||
ExInitializeWorkItem
|
||||
ExInitializeZone
|
||||
ExInterlockedAddLargeInteger
|
||||
ExInterlockedAddUlong
|
||||
ExInterlockedAllocateFromZone
|
||||
ExInterlockedDecrementLong
|
||||
ExInterlockedExchangeUlong
|
||||
ExInterlockedExtendZone
|
||||
ExInterlockedFreeToZone
|
||||
ExInterlockedIncrementLong
|
||||
ExInterlockedInsertHeadList
|
||||
ExInterlockedInsertTailList
|
||||
ExInterlockedPopEntryList
|
||||
ExInterlockedPopEntrySList
|
||||
ExInterlockedPushEntryList
|
||||
ExInterlockedPushEntrySList
|
||||
ExInterlockedRemoveHeadList
|
||||
ExIsFullZone
|
||||
ExIsObjectInFirstZoneSegment
|
||||
ExIsResourceAcquiredExclusiveLite
|
||||
ExIsResourceAcquiredSharedLite
|
||||
ExLocalTimeToSystemTime
|
||||
ExQueryDepthSListHead
|
||||
ExQueueWorkItem
|
||||
ExRaiseStatus
|
||||
ExReinitializeResourceLite
|
||||
ExReleaseFastMutex
|
||||
ExReleaseFastMutexUnsafe
|
||||
ExReleaseResource
|
||||
ExReleaseResourceForThread
|
||||
ExReleaseResourceForThreadLite
|
||||
ExSystemTimeToLocalTime
|
||||
ExTryToAcquireFastMutex
|
||||
ExTryToAcquireResourceExclusiveLite
|
||||
InterlockedCompareExchange
|
||||
InterlockedExchange
|
||||
InterlockedExchangeAdd
|
||||
InterlockedIncrement
|
||||
#HalAllocateCommonBuffer
|
||||
HalAssignSlotResources
|
||||
HalExamineMBR
|
||||
#HalFreeCommonBuffer
|
||||
#HalGetAdapter
|
||||
HalGetBusData
|
||||
HalGetBusDataByOffset
|
||||
HalGetDmaAlignmentRequirement
|
||||
HalGetInterruptVector
|
||||
HalMakeBeep
|
||||
HalQuerySystemInformation
|
||||
HalReadDmaCounter
|
||||
HalSetBusData
|
||||
HalSetBusDataByOffset
|
||||
HalTranslateBusAddress
|
||||
IoAcquireCancelSpinLock
|
||||
IoAllocateAdapterChannel
|
||||
IoAllocateController
|
||||
IoAllocateErrorLogEntry
|
||||
IoAllocateIrp
|
||||
IoAllocateMdl
|
||||
IoAssignArcName
|
||||
IoAssignResources
|
||||
IoAttachDevice
|
||||
IoAttachDeviceByPointer
|
||||
IoAttachDeviceToDeviceStack
|
||||
IoBuildAsynchronousFsdRequest
|
||||
IoBuildDeviceIoControlRequest
|
||||
IoBuildPartialMdl
|
||||
IoBuildSynchronousFsdRequest
|
||||
IoCallDriver
|
||||
IoCancelIrp
|
||||
IoCheckShareAccess
|
||||
IoCompleteRequest
|
||||
IoConnectInterrupt
|
||||
IoCreateController
|
||||
IoCreateDevice
|
||||
IoCreateNotificationEvent
|
||||
IoCreateStreamFileObject
|
||||
IoCreateSymbolicLink
|
||||
IoCreateSynchronizationEvent
|
||||
IoCreateUnprotectedSymbolicLink
|
||||
IoDeassignArcName
|
||||
IoDeleteController
|
||||
IoDeleteDevice
|
||||
IoDeleteSymbolicLink
|
||||
IoDetachDevice
|
||||
IoDisconnectInterrupt
|
||||
IoFlushAdapterBuffers
|
||||
IoFreeAdapterChannel
|
||||
IoFreeController
|
||||
IoFreeIrp
|
||||
IoFreeMapRegisters
|
||||
IoFreeMdl
|
||||
IoGetConfigurationInformation
|
||||
IoGetCurrentIrpStackLocation
|
||||
IoGetCurrentProcess
|
||||
IoGetDeviceObjectPointer
|
||||
IoGetDeviceToVerify
|
||||
IoGetFileObjectGenericMapping
|
||||
IoGetFunctionCodeFromCtlCode
|
||||
IoGetInitialStack
|
||||
IoGetNextIrpStackLocation
|
||||
IoGetRelatedDeviceObject
|
||||
IoInitializeDpcRequest
|
||||
IoInitializeIrp
|
||||
IoInitializeTimer
|
||||
IoIsErrorUserInduced
|
||||
IoIsTotalDeviceFailure
|
||||
IoMakeAssociatedIrp
|
||||
IoMapTransfer
|
||||
IoMarkIrpPending
|
||||
IoQueryDeviceDescription
|
||||
IoRaiseHardError
|
||||
IoRaiseInformationalHardError
|
||||
IoReadPartitionTable
|
||||
IoRegisterDriverReinitialization
|
||||
IoRegisterFileSystem
|
||||
IoRegisterShutdownNotification
|
||||
IoReleaseCancelSpinLock
|
||||
IoRemoveShareAccess
|
||||
IoReportResourceUsage
|
||||
IoRequestDpc
|
||||
IoSetCancelRoutine
|
||||
IoSetCompletionRoutine
|
||||
IoSetHardErrorOrVerifyDevice
|
||||
IoSetNextIrpStackLocation
|
||||
IoSetPartitionInformation
|
||||
IoSetShareAccess
|
||||
IoSizeOfIrp
|
||||
IoStartNextPacket
|
||||
IoStartNextPacketByKey
|
||||
IoStartPacket
|
||||
IoStartTimer
|
||||
IoStopTimer
|
||||
IoUnregisterShutdownNotification
|
||||
IoUpdateShareAccess
|
||||
IoWriteErrorLogEntry
|
||||
IoWritePartitionTable
|
||||
KeAcquireSpinLock
|
||||
KeAcquireSpinLockAtDpcLevel
|
||||
KeBugCheck
|
||||
KeBugCheckEx
|
||||
KeCancelTimer
|
||||
KeClearEvent
|
||||
KeDelayExecutionThread
|
||||
KeDeregisterBugCheckCallback
|
||||
KeEnterCriticalRegion
|
||||
KeFlushIoBuffers
|
||||
KeGetCurrentIrql
|
||||
KeGetCurrentProcessorNumber
|
||||
KeGetDcacheFillSize
|
||||
KeInitializeCallbackRecord
|
||||
KeInitializeDeviceQueue
|
||||
KeInitializeDpc
|
||||
KeInitializeEvent
|
||||
KeInitializeMutex
|
||||
KeInitializeSemaphore
|
||||
KeInitializeSpinLock
|
||||
KeInitializeTimer
|
||||
KeInitializeTimerEx
|
||||
KeInsertByKeyDeviceQueue
|
||||
KeInsertDeviceQueue
|
||||
KeInsertQueueDpc
|
||||
KeLeaveCriticalRegion
|
||||
KeLowerIrql
|
||||
KeQueryPerformanceCounter
|
||||
KeQuerySystemTime
|
||||
KeQueryTickCount
|
||||
KeQueryTimeIncrement
|
||||
KeRaiseIrql
|
||||
KeReadStateEvent
|
||||
KeReadStateMutex
|
||||
KeReadStateSemaphore
|
||||
KeReadStateTimer
|
||||
KeRegisterBugCheckCallback
|
||||
KeReleaseMutex
|
||||
KeReleaseSemaphore
|
||||
KeReleaseSpinLock
|
||||
KeReleaseSpinLockFromDpcLevel
|
||||
KeRemoveByKeyDeviceQueue
|
||||
KeRemoveDeviceQueue
|
||||
KeRemoveQueueDpc
|
||||
KeResetEvent
|
||||
KeSetBasePriorityThread
|
||||
KeSetEvent
|
||||
KeSetPriorityThread
|
||||
KeSetTimer
|
||||
KeSetTimerEx
|
||||
KeStallExecutionProcessor
|
||||
KeSynchronizeExecution
|
||||
KeWaitForMultipleObjects
|
||||
KeWaitForMutexObject
|
||||
KeWaitForSingleObject
|
||||
MmAllocateContiguousMemory
|
||||
MmAllocateNonCachedMemory
|
||||
MmBuildMdlForNonPagedPool
|
||||
MmCreateMdl
|
||||
MmFreeContiguousMemory
|
||||
MmFreeNonCachedMemory
|
||||
MmGetMdlByteCount
|
||||
MmGetMdlByteOffset
|
||||
MmGetMdlVirtualAddress
|
||||
MmGetPhysicalAddress
|
||||
MmGetSystemAddressForMdl
|
||||
MmInitializeMdl
|
||||
MmIsAddressValid
|
||||
MmIsNonPagedSystemAddressValid
|
||||
MmIsThisAnNtAsSystem
|
||||
MmLockPagableCodeSection
|
||||
MmLockPagableDataSection
|
||||
MmLockPagableSectionByHandle
|
||||
MmMapIoSpace
|
||||
MmMapLockedPages
|
||||
MmPageEntireDriver
|
||||
MmResetDriverPaging
|
||||
MmPrepareMdlForReuse
|
||||
MmProbeAndLockPages
|
||||
MmQuerySystemSize
|
||||
MmSizeOfMdl
|
||||
MmUnlockPages
|
||||
MmUnlockPagableImageSection
|
||||
MmUnmapIoSpace
|
||||
MmUnmapLockedPages
|
||||
NtCreateToken
|
||||
ObDereferenceObject
|
||||
ObReferenceObjectByHandle
|
||||
ObReferenceObjectByPointer
|
||||
PsCreateSystemThread
|
||||
PsGetCurrentProcess
|
||||
PsGetCurrentThread
|
||||
PsTerminateSystemThread
|
||||
InitializeListHead
|
||||
InitializeObjectAttributes
|
||||
InsertHeadList
|
||||
InsertTailList
|
||||
PopEntryList
|
||||
PushEntryList
|
||||
RemoveEntryList
|
||||
RemoveHeadList
|
||||
RemoveTailList
|
||||
RtlAnsiStringToUnicodeSize
|
||||
RtlAnsiStringToUnicodeString
|
||||
RtlAppendUnicodeStringToString
|
||||
RtlAppendUnicodeToString
|
||||
RtlCharToInteger
|
||||
RtlCheckRegistryKey
|
||||
RtlCompareMemory
|
||||
RtlCompareString
|
||||
RtlCompareUnicodeString
|
||||
RtlConvertLongToLargeInteger
|
||||
RtlConvertUlongToLargeInteger
|
||||
RtlCopyBytes
|
||||
RtlCopyMemory
|
||||
RtlCopyString
|
||||
RtlCopyUnicodeString
|
||||
RtlCreateRegistryKey
|
||||
RtlCreateSecurityDescriptor
|
||||
RtlDeleteRegistryValue
|
||||
RtlEnlargedIntegerMultiply
|
||||
RtlEnlargedUnsignedDivide
|
||||
RtlEnlargedUnsignedMultiply
|
||||
RtlEqualString
|
||||
RtlEqualUnicodeString
|
||||
RtlExtendedIntegerMultiply
|
||||
RtlExtendedLargeIntegerDivide
|
||||
RtlExtendedMagicDivide
|
||||
RtlFillMemory
|
||||
RtlFreeAnsiString
|
||||
RtlFreeUnicodeString
|
||||
RtlInitAnsiString
|
||||
RtlInitString
|
||||
RtlInitUnicodeString
|
||||
#RtlIntegerToUnicodeString
|
||||
RtlLargeIntegerAdd
|
||||
RtlLargeIntegerAnd
|
||||
RtlLargeIntegerArithmeticShift
|
||||
RtlLargeIntegerDivide
|
||||
RtlLargeIntegerEqualTo
|
||||
RtlLargeIntegerEqualToZero
|
||||
RtlLargeIntegerGreaterThan
|
||||
RtlLargeIntegerGreaterThanOrEqualTo
|
||||
RtlLargeIntegerGreaterThanOrEqualToZero
|
||||
RtlLargeIntegerGreaterThanZero
|
||||
RtlLargeIntegerLessThan
|
||||
RtlLargeIntegerLessThanOrEqualTo
|
||||
RtlLargeIntegerLessThanZero
|
||||
RtlLargeIntegerNegate
|
||||
RtlLargeIntegerNotEqualTo
|
||||
RtlLargeIntegerShiftLeft
|
||||
RtlLargeIntegerShiftRight
|
||||
RtlLargeIntegerSubtract
|
||||
RtlLengthSecurityDescriptor
|
||||
RtlMoveMemory
|
||||
RtlQueryRegistryValues
|
||||
RtlRetrieveUlong
|
||||
RtlRetrieveUshort
|
||||
RtlSetDaclSecurityDescriptor
|
||||
RtlStoreUlong
|
||||
RtlStoreUshort
|
||||
RtlTimeFieldsToTime
|
||||
RtlTimeToTimeFields
|
||||
RtlUnicodeStringToAnsiString
|
||||
RtlUnicodeStringToInteger
|
||||
RtlUpcaseUnicodeString
|
||||
RtlUpperString
|
||||
RtlValidSecurityDescriptor
|
||||
RtlWriteRegistryValue
|
||||
RtlZeroMemory
|
||||
SeAccessCheck
|
||||
SeAssignSecurity
|
||||
SeDeassignSecurity
|
||||
SeSinglePrivilegeCheck
|
||||
ZwClose
|
||||
ZwCreateDirectoryObject
|
||||
ZwCreateFile
|
||||
ZwCreateKey
|
||||
ZwCreateToken
|
||||
ZwDeleteKey
|
||||
ZwEnumerateKey
|
||||
ZwEnumerateValueKey
|
||||
ZwFlushKey
|
||||
ZwMakeTemporaryObject
|
||||
ZwMapViewOfSection
|
||||
ZwOpenFile
|
||||
ZwOpenKey
|
||||
ZwOpenSection
|
||||
ZwQueryInformationFile
|
||||
ZwQueryKey
|
||||
ZwQueryValueKey
|
||||
ZwReadFile
|
||||
ZwSetInformationFile
|
||||
ZwSetInformationThread
|
||||
ZwSetValueKey
|
||||
ZwUnmapViewOfSection
|
||||
ZwWriteFile
|
||||
isdigit
|
||||
islower
|
||||
isprint
|
||||
isspace
|
||||
isupper
|
||||
isxdigit
|
||||
memchr
|
||||
memcpy
|
||||
memmove
|
||||
memset
|
||||
sprintf
|
||||
tolower
|
||||
toupper
|
||||
towlower
|
||||
towupper
|
||||
vsprintf
|
||||
wcslen
|
||||
wcschr
|
||||
wcscpy
|
||||
wcsncat
|
||||
wcsncpy
|
||||
#wtolower
|
||||
tolower
|
||||
toupper
|
||||
memcpy
|
||||
strtok
|
||||
CcInitializeFileCache
|
||||
CcRequestCachePage
|
||||
CcReleaseCachePage
|
||||
CcReleaseFileCache
|
|
@ -256,22 +256,10 @@ asmlinkage void exception_handler(unsigned int edi,
|
|||
printk("Frames:\n");
|
||||
for (i = 0; i < 32; i++)
|
||||
{
|
||||
if (stack[i] > ((unsigned int) &stext) &&
|
||||
stack[i] < ((unsigned int) &etext))
|
||||
if (stack[i] > ((unsigned int) &stext))
|
||||
{
|
||||
for (sym = -1, j = 0; symbol_table[j].name; j++)
|
||||
{
|
||||
if (stack[i] >= symbol_table[j].value &&
|
||||
(sym == -1 ||
|
||||
symbol_table[j].value > symbol_table[sym].value))
|
||||
{
|
||||
sym = j;
|
||||
}
|
||||
}
|
||||
DbgPrint(" %.8x (%s+%d)\n",
|
||||
stack[i],
|
||||
symbol_table[sym].name,
|
||||
stack[i] - symbol_table[sym].value);
|
||||
DbgPrint(" %.8x\n",
|
||||
stack[i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -299,12 +299,12 @@ VOID IoCompleteRequest(PIRP Irp, CCHAR PriorityBoost)
|
|||
NULL,
|
||||
(PKNORMAL_ROUTINE)
|
||||
Irp->Overlay.AsynchronousParameters.UserApcRoutine,
|
||||
0,
|
||||
KernelMode,
|
||||
(PVOID)Irp);
|
||||
KeInsertQueueApc(&Irp->Tail.Apc,
|
||||
Irp->Overlay.AsynchronousParameters.UserApcContext,
|
||||
NULL,
|
||||
0);
|
||||
KernelMode);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -37,8 +37,8 @@ BOOLEAN KiTestAlert(PKTHREAD Thread,
|
|||
PKAPC Apc;
|
||||
PULONG Esp = (PULONG)UserContext->Esp;
|
||||
|
||||
current_entry = Thread->ApcState.ApcListHead[0].Flink;
|
||||
while (current_entry != &Thread->ApcState.ApcListHead[0])
|
||||
current_entry = Thread->ApcState.ApcListHead[1].Flink;
|
||||
while (current_entry != &Thread->ApcState.ApcListHead[1])
|
||||
{
|
||||
Apc = CONTAINING_RECORD(current_entry, KAPC, ApcListEntry);
|
||||
|
||||
|
@ -51,6 +51,7 @@ BOOLEAN KiTestAlert(PKTHREAD Thread,
|
|||
|
||||
current_entry = current_entry->Flink;
|
||||
}
|
||||
UserContext->Esp = (ULONG)Esp;
|
||||
return(TRUE);
|
||||
}
|
||||
|
||||
|
@ -61,11 +62,17 @@ VOID KeApcProlog2(PKAPC Apc)
|
|||
*/
|
||||
{
|
||||
DPRINT("KeApcProlog2(Apc %x)\n",Apc);
|
||||
KeEnterCriticalRegion();
|
||||
Apc->Thread->ApcState.KernelApcInProgress++;
|
||||
Apc->Thread->ApcState.KernelApcPending--;
|
||||
RemoveEntryList(&Apc->ApcListEntry);
|
||||
Apc->KernelRoutine(Apc,
|
||||
&Apc->NormalRoutine,
|
||||
&Apc->NormalContext,
|
||||
&Apc->SystemArgument2,
|
||||
&Apc->SystemArgument2);
|
||||
Apc->Thread->ApcState.KernelApcInProgress++;
|
||||
KeLeaveCriticalRegion();
|
||||
PsSuspendThread(CONTAINING_RECORD(Apc->Thread,ETHREAD,Tcb));
|
||||
}
|
||||
|
||||
|
@ -81,12 +88,6 @@ VOID KeDeliverKernelApc(PKAPC Apc)
|
|||
DPRINT("KeDeliverKernelApc(Apc %x)\n", Apc);
|
||||
|
||||
TargetThread = Apc->Thread;
|
||||
|
||||
if (TargetThread->KernelApcDisable <= 0)
|
||||
{
|
||||
DbgPrint("Queueing apc for thread %x\n", TargetThread);
|
||||
return;
|
||||
}
|
||||
|
||||
if (TargetThread == KeGetCurrentThread())
|
||||
{
|
||||
|
@ -130,10 +131,17 @@ VOID KeDeliverKernelApc(PKAPC Apc)
|
|||
PsResumeThread(CONTAINING_RECORD(TargetThread,ETHREAD,Tcb));
|
||||
}
|
||||
|
||||
void KeInsertQueueApc(PKAPC Apc,
|
||||
VOID KeInsertQueueApc(PKAPC Apc,
|
||||
PVOID SystemArgument1,
|
||||
PVOID SystemArgument2,
|
||||
UCHAR Mode)
|
||||
/*
|
||||
* FUNCTION: Queues an APC for execution
|
||||
* ARGUMENTS:
|
||||
* Apc = APC to be queued
|
||||
* SystemArgument[1-2] = TBD
|
||||
* Mode = TBD
|
||||
*/
|
||||
{
|
||||
KIRQL oldlvl;
|
||||
PKTHREAD TargetThread;
|
||||
|
@ -151,16 +159,31 @@ void KeInsertQueueApc(PKAPC Apc,
|
|||
}
|
||||
|
||||
TargetThread = Apc->Thread;
|
||||
InsertTailList(&TargetThread->ApcState.ApcListHead[0], &Apc->ApcListEntry);
|
||||
if (Apc->ApcMode == KernelMode)
|
||||
{
|
||||
InsertTailList(&TargetThread->ApcState.ApcListHead[0],
|
||||
&Apc->ApcListEntry);
|
||||
TargetThread->ApcState.KernelApcPending++;
|
||||
}
|
||||
else
|
||||
{
|
||||
InsertTailList(&TargetThread->ApcState.ApcListHead[1],
|
||||
&Apc->ApcListEntry);
|
||||
TargetThread->ApcState.UserApcPending++;
|
||||
}
|
||||
Apc->Inserted = TRUE;
|
||||
|
||||
DPRINT("TargetThread->KernelApcDisable %d\n",
|
||||
TargetThread->KernelApcDisable);
|
||||
DPRINT("Apc->KernelRoutine %x\n", Apc->KernelRoutine);
|
||||
if (Apc->KernelRoutine != NULL)
|
||||
if (Apc->ApcMode == KernelMode && TargetThread->KernelApcDisable >= 1)
|
||||
{
|
||||
KeDeliverKernelApc(Apc);
|
||||
}
|
||||
else
|
||||
{
|
||||
DPRINT("Queuing APC for later delivery\n");
|
||||
}
|
||||
KeLowerIrql(oldlvl);
|
||||
}
|
||||
|
||||
|
@ -172,6 +195,19 @@ VOID KeInitializeApc(PKAPC Apc,
|
|||
PKNORMAL_ROUTINE NormalRoutine,
|
||||
UCHAR Mode,
|
||||
PVOID Context)
|
||||
/*
|
||||
* FUNCTION: Initialize an APC object
|
||||
* ARGUMENTS:
|
||||
* Apc = Pointer to the APC object to initialized
|
||||
* Thread = Thread the APC is to be delivered to
|
||||
* StateIndex = TBD
|
||||
* KernelRoutine = Routine to be called for a kernel-mode APC
|
||||
* RundownRoutine = Routine to be called if the thread has exited with
|
||||
* the APC being executed
|
||||
* NormalRoutine = Routine to be called for a user-mode APC
|
||||
* Mode = APC mode
|
||||
* Context = Parameter to be passed to the APC routine
|
||||
*/
|
||||
{
|
||||
DPRINT("KeInitializeApc(Apc %x, Thread %x, StateIndex %d, "
|
||||
"KernelRoutine %x, RundownRoutine %x, NormalRoutine %x, Mode %d, "
|
||||
|
@ -210,7 +246,43 @@ NTSTATUS STDCALL ZwQueueApcThread(HANDLE ThreadHandle,
|
|||
PVOID SystemArgument1,
|
||||
PVOID SystemArgument2)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
PKAPC Apc;
|
||||
PETHREAD Thread;
|
||||
NTSTATUS Status;
|
||||
|
||||
Status = ObReferenceObjectByHandle(ThreadHandle,
|
||||
THREAD_ALL_ACCESS, /* FIXME */
|
||||
PsThreadType,
|
||||
UserMode,
|
||||
(PVOID*)&Thread,
|
||||
NULL);
|
||||
if (!NT_SUCCESS(Status))
|
||||
{
|
||||
return(Status);
|
||||
}
|
||||
|
||||
Apc = ExAllocatePool(NonPagedPool, sizeof(KAPC));
|
||||
if (Apc == NULL)
|
||||
{
|
||||
ObDereferenceObject(Thread);
|
||||
return(STATUS_NO_MEMORY);
|
||||
}
|
||||
|
||||
KeInitializeApc(Apc,
|
||||
&Thread->Tcb,
|
||||
0,
|
||||
NULL,
|
||||
NULL,
|
||||
ApcRoutine,
|
||||
UserMode,
|
||||
NormalContext);
|
||||
KeInsertQueueApc(Apc,
|
||||
SystemArgument1,
|
||||
SystemArgument2,
|
||||
UserMode);
|
||||
|
||||
ObDereferenceObject(Thread);
|
||||
return(STATUS_SUCCESS);
|
||||
}
|
||||
|
||||
NTSTATUS STDCALL NtTestAlert(VOID)
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
|
||||
#include <ddk/ntddk.h>
|
||||
|
||||
//#define NDEBUG
|
||||
#define NDEBUG
|
||||
#include <internal/debug.h>
|
||||
|
||||
/* FUNCTIONS *****************************************************************/
|
||||
|
|
|
@ -699,6 +699,7 @@ LdrPEProcessModule(PVOID ModuleLoadBase)
|
|||
}
|
||||
else
|
||||
{
|
||||
#if 0
|
||||
/* Get address for symbol */
|
||||
*SymbolNameBuf = '_';
|
||||
strcpy(SymbolNameBuf + 1, pName);
|
||||
|
@ -707,6 +708,9 @@ LdrPEProcessModule(PVOID ModuleLoadBase)
|
|||
{
|
||||
DbgPrint("Unresolved kernel symbol: %s\n", pName);
|
||||
}
|
||||
#else
|
||||
DbgPrint("Unresolved kernel symbol: %s\n", pName);
|
||||
#endif
|
||||
}
|
||||
ImportAddressList++;
|
||||
FunctionNameList++;
|
||||
|
@ -874,380 +878,7 @@ LdrPEGetEnclosingSectionHeader(DWORD RVA,
|
|||
return 0;
|
||||
}
|
||||
|
||||
/* ------------------------------------------- COFF Module support */
|
||||
|
||||
PMODULE_OBJECT
|
||||
LdrCOFFProcessModule(PVOID ModuleLoadBase)
|
||||
{
|
||||
BOOLEAN FoundEntry;
|
||||
char SymbolName[255];
|
||||
int i;
|
||||
ULONG EntryOffset;
|
||||
FILHDR *FileHeader;
|
||||
AOUTHDR *AOUTHeader;
|
||||
module *Module;
|
||||
PVOID EntryRoutine;
|
||||
HANDLE ModuleHandle;
|
||||
PMODULE_OBJECT ModuleObject;
|
||||
OBJECT_ATTRIBUTES ObjectAttributes;
|
||||
UNICODE_STRING ModuleName;
|
||||
WCHAR NameBuffer[60];
|
||||
|
||||
/* Get header pointers */
|
||||
FileHeader = ModuleLoadBase;
|
||||
AOUTHeader = ModuleLoadBase + FILHSZ;
|
||||
CHECKPOINT;
|
||||
|
||||
/* Check COFF magic value */
|
||||
if (I386BADMAG(*FileHeader))
|
||||
{
|
||||
DbgPrint("Module has bad magic value (%x)\n",
|
||||
FileHeader->f_magic);
|
||||
return 0;
|
||||
}
|
||||
CHECKPOINT;
|
||||
|
||||
/* Allocate and initialize a module definition structure */
|
||||
Module = (module *) ExAllocatePool(NonPagedPool, sizeof(module));
|
||||
if (Module == NULL)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
Module->sym_list = (SYMENT *)(ModuleLoadBase + FileHeader->f_symptr);
|
||||
Module->str_tab = (char *)(ModuleLoadBase + FileHeader->f_symptr +
|
||||
FileHeader->f_nsyms * SYMESZ);
|
||||
Module->scn_list = (SCNHDR *)(ModuleLoadBase + FILHSZ +
|
||||
FileHeader->f_opthdr);
|
||||
Module->size = 0;
|
||||
Module->raw_data_off = (ULONG) ModuleLoadBase;
|
||||
Module->nsyms = FileHeader->f_nsyms;
|
||||
CHECKPOINT;
|
||||
|
||||
/* Determine the length of the module */
|
||||
for (i = 0; i < FileHeader->f_nscns; i++)
|
||||
{
|
||||
DPRINT("Section name: %.8s\n", Module->scn_list[i].s_name);
|
||||
DPRINT("size %x vaddr %x size %x\n",
|
||||
Module->size,
|
||||
Module->scn_list[i].s_vaddr,
|
||||
Module->scn_list[i].s_size);
|
||||
if (Module->scn_list[i].s_flags & STYP_TEXT)
|
||||
{
|
||||
Module->text_base = Module->scn_list[i].s_vaddr;
|
||||
}
|
||||
if (Module->scn_list[i].s_flags & STYP_DATA)
|
||||
{
|
||||
Module->data_base = Module->scn_list[i].s_vaddr;
|
||||
}
|
||||
if (Module->scn_list[i].s_flags & STYP_BSS)
|
||||
{
|
||||
Module->bss_base = Module->scn_list[i].s_vaddr;
|
||||
}
|
||||
if (Module->size <
|
||||
(Module->scn_list[i].s_vaddr + Module->scn_list[i].s_size))
|
||||
{
|
||||
Module->size = Module->size + Module->scn_list[i].s_vaddr +
|
||||
Module->scn_list[i].s_size;
|
||||
}
|
||||
}
|
||||
CHECKPOINT;
|
||||
|
||||
/* Allocate a section for the module */
|
||||
Module->base = (unsigned int) MmAllocateSection(Module->size);
|
||||
if (Module->base == 0)
|
||||
{
|
||||
DbgPrint("Failed to alloc section for module\n");
|
||||
ExFreePool(Module);
|
||||
return 0;
|
||||
}
|
||||
CHECKPOINT;
|
||||
|
||||
/* Adjust section vaddrs for allocated area */
|
||||
Module->data_base = Module->data_base + Module->base;
|
||||
Module->text_base = Module->text_base + Module->base;
|
||||
Module->bss_base = Module->bss_base + Module->base;
|
||||
|
||||
/* Relocate module and fixup imports */
|
||||
for (i = 0; i < FileHeader->f_nscns; i++)
|
||||
{
|
||||
if (Module->scn_list[i].s_flags & STYP_TEXT ||
|
||||
Module->scn_list[i].s_flags & STYP_DATA)
|
||||
{
|
||||
memcpy((PVOID)(Module->base + Module->scn_list[i].s_vaddr),
|
||||
(PVOID)(ModuleLoadBase + Module->scn_list[i].s_scnptr),
|
||||
Module->scn_list[i].s_size);
|
||||
if (!LdrCOFFDoRelocations(Module, i))
|
||||
{
|
||||
DbgPrint("Relocation failed for section %s\n",
|
||||
Module->scn_list[i].s_name);
|
||||
|
||||
/* FIXME: unallocate all sections here */
|
||||
|
||||
ExFreePool(Module);
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
if (Module->scn_list[i].s_flags & STYP_BSS)
|
||||
{
|
||||
memset((PVOID)(Module->base + Module->scn_list[i].s_vaddr),
|
||||
0,
|
||||
Module->scn_list[i].s_size);
|
||||
}
|
||||
}
|
||||
|
||||
DPRINT("Module base: %x\n", Module->base);
|
||||
|
||||
/* Find the entry point */
|
||||
EntryOffset = 0L;
|
||||
FoundEntry = FALSE;
|
||||
for (i = 0; i < FileHeader->f_nsyms; i++)
|
||||
{
|
||||
LdrCOFFGetSymbolName(Module, i, SymbolName);
|
||||
if (!strcmp(SymbolName, "_DriverEntry"))
|
||||
{
|
||||
EntryOffset = Module->sym_list[i].e_value;
|
||||
FoundEntry = TRUE;
|
||||
DPRINT("Found entry at %x\n", EntryOffset);
|
||||
}
|
||||
}
|
||||
if (!FoundEntry)
|
||||
{
|
||||
DbgPrint("No module entry point defined\n");
|
||||
ExFreePool(Module);
|
||||
|
||||
/* FIXME: unallocate all sections here */
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Get the address of the module initalization routine */
|
||||
EntryRoutine = (PVOID)(Module->base + EntryOffset);
|
||||
|
||||
/* Create ModuleName string */
|
||||
wcscpy(NameBuffer, MODULE_ROOT_NAME);
|
||||
/* FIXME: someone who is interested needs to fix this. */
|
||||
wcscat(NameBuffer, L"BOGUS.o");
|
||||
ModuleName.Length = ModuleName.MaximumLength = wcslen(NameBuffer);
|
||||
ModuleName.Buffer = NameBuffer;
|
||||
DPRINT("Module name is: %w", NameBuffer);
|
||||
|
||||
/* Initialize ObjectAttributes for ModuleObject */
|
||||
InitializeObjectAttributes(&ObjectAttributes,
|
||||
&ModuleName,
|
||||
0,
|
||||
NULL,
|
||||
NULL);
|
||||
|
||||
/* Create module object */
|
||||
ModuleHandle = 0;
|
||||
ModuleObject = ObCreateObject(&ModuleHandle,
|
||||
OBJECT_TYPE_ALL_ACCESS,
|
||||
&ObjectAttributes,
|
||||
ObModuleType);
|
||||
|
||||
/* Initialize ModuleObject data */
|
||||
ModuleObject->Base = (PVOID) Module->base;
|
||||
ModuleObject->Flags = MODULE_FLAG_COFF;
|
||||
ModuleObject->EntryPoint = (PVOID) (Module->base + EntryOffset);
|
||||
DPRINT("entrypoint at %x\n", ModuleObject->EntryPoint);
|
||||
/* FIXME: the COFF headers need to be copied into the module
|
||||
space, and the ModuleObject needs to be set to point to them */
|
||||
|
||||
/* Cleanup */
|
||||
ExFreePool(Module);
|
||||
|
||||
return ModuleObject;
|
||||
}
|
||||
|
||||
/* LdrCOFFDoRelocations
|
||||
* FUNCTION: Do the relocations for a module section
|
||||
* ARGUMENTS:
|
||||
* Module = Pointer to the module
|
||||
* SectionIndex = Index of the section to be relocated
|
||||
* RETURNS: Success or failure
|
||||
*/
|
||||
|
||||
static BOOLEAN
|
||||
LdrCOFFDoRelocations(module *Module, unsigned int SectionIndex)
|
||||
{
|
||||
SCNHDR *Section = &Module->scn_list[SectionIndex];
|
||||
RELOC *Relocation = (RELOC *)(Module->raw_data_off + Section->s_relptr);
|
||||
int j;
|
||||
|
||||
DPRINT("SectionIndex %d Name %.8s Relocs %d\n",
|
||||
SectionIndex,
|
||||
Module->scn_list[SectionIndex].s_name,
|
||||
Section->s_nreloc);
|
||||
|
||||
for (j = 0; j < Section->s_nreloc; j++)
|
||||
{
|
||||
DPRINT("vaddr %x symndex %x",
|
||||
Relocation->r_vaddr,
|
||||
Relocation->r_symndx);
|
||||
|
||||
switch (Relocation->r_type)
|
||||
{
|
||||
case RELOC_ADDR32:
|
||||
if (!LdrCOFFDoAddr32Reloc(Module, Section, Relocation))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
break;
|
||||
|
||||
case RELOC_REL32:
|
||||
if (!LdrCOFFDoReloc32Reloc(Module, Section, Relocation))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
DbgPrint("%.8s: Unknown relocation type %x at %d in module\n",
|
||||
Module->scn_list[SectionIndex].s_name,
|
||||
Relocation->r_type,
|
||||
j);
|
||||
return FALSE;
|
||||
}
|
||||
Relocation++;
|
||||
}
|
||||
DPRINT("%.8s: relocations done\n", Module->scn_list[SectionIndex].s_name);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/*
|
||||
* FUNCTION: Performs a addr32 relocation on a loaded module
|
||||
* ARGUMENTS:
|
||||
* mod = module to perform the relocation on
|
||||
* scn = Section to perform the relocation in
|
||||
* reloc = Pointer to a data structure describing the relocation
|
||||
* RETURNS: Success or failure
|
||||
* NOTE: This fixes up a relocation needed when changing the base address of a
|
||||
* module
|
||||
*/
|
||||
|
||||
static BOOLEAN
|
||||
LdrCOFFDoAddr32Reloc(module *Module, SCNHDR *Section, RELOC *Relocation)
|
||||
{
|
||||
unsigned int Value;
|
||||
unsigned int *Location;
|
||||
|
||||
Value = LdrCOFFGetSymbolValue(Module, Relocation->r_symndx);
|
||||
Location = (unsigned int *)(Module->base + Relocation->r_vaddr);
|
||||
DPRINT("ADDR32 loc %x value %x *loc %x\n", Location, Value, *Location);
|
||||
*Location = (*Location) + Module->base;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/*
|
||||
* FUNCTION: Performs a reloc32 relocation on a loaded module
|
||||
* ARGUMENTS:
|
||||
* mod = module to perform the relocation on
|
||||
* scn = Section to perform the relocation in
|
||||
* reloc = Pointer to a data structure describing the relocation
|
||||
* RETURNS: Success or failure
|
||||
* NOTE: This fixes up an undefined reference to a kernel function in a module
|
||||
*/
|
||||
|
||||
static BOOLEAN
|
||||
LdrCOFFDoReloc32Reloc(module *Module, SCNHDR *Section, RELOC *Relocation)
|
||||
{
|
||||
char Name[255];
|
||||
unsigned int Value;
|
||||
unsigned int *Location;
|
||||
|
||||
memset(Name, 0, 255);
|
||||
LdrCOFFGetSymbolName(Module, Relocation->r_symndx, Name);
|
||||
Value = (unsigned int) LdrGetKernelSymbolAddr(Name);
|
||||
if (Value == 0L)
|
||||
{
|
||||
Value = LdrCOFFGetSymbolValueByName(Module, Name, Relocation->r_symndx);
|
||||
if (Value == 0L)
|
||||
{
|
||||
DbgPrint("Undefined symbol %s in module\n", Name);
|
||||
return FALSE;
|
||||
}
|
||||
Location = (unsigned int *)(Module->base + Relocation->r_vaddr);
|
||||
// (*Location) = (*Location) + Value + Module->base - Section->s_vaddr;
|
||||
(*Location) = (*Location);
|
||||
DPRINT("Module->base %x Section->s_vaddr %x\n",
|
||||
Module->base,
|
||||
Section->s_vaddr);
|
||||
}
|
||||
else
|
||||
{
|
||||
DPRINT("REL32 value %x name %s\n", Value, Name);
|
||||
Location = (unsigned int *)(Module->base + Relocation->r_vaddr);
|
||||
DPRINT("old %x ", *Location);
|
||||
DPRINT("Module->base %x Section->s_vaddr %x\n",
|
||||
Module->base,
|
||||
Section->s_vaddr);
|
||||
(*Location) = (*Location) + Value - Module->base + Section->s_vaddr;
|
||||
DPRINT("new %x\n", *Location);
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/*
|
||||
* FUNCTION: Get the name of a symbol from a loaded module by ordinal
|
||||
* ARGUMENTS:
|
||||
* mod = module
|
||||
* i = index of symbol
|
||||
* name (OUT) = pointer to a string where the symbol name will be
|
||||
* stored
|
||||
*/
|
||||
|
||||
static void
|
||||
LdrCOFFGetSymbolName(module *Module, unsigned int Idx, char *Name)
|
||||
{
|
||||
if (Module->sym_list[Idx].e.e_name[0] != 0)
|
||||
{
|
||||
strncpy(Name, Module->sym_list[Idx].e.e_name, 8);
|
||||
Name[8] = '\0';
|
||||
}
|
||||
else
|
||||
{
|
||||
strcpy(Name, &Module->str_tab[Module->sym_list[Idx].e.e.e_offset]);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* FUNCTION: Get the value of a module defined symbol
|
||||
* ARGUMENTS:
|
||||
* mod = module
|
||||
* i = index of symbol
|
||||
* RETURNS: The value of the symbol
|
||||
* NOTE: This fixes up references to known sections
|
||||
*/
|
||||
|
||||
static unsigned int
|
||||
LdrCOFFGetSymbolValue(module *Module, unsigned int Idx)
|
||||
{
|
||||
char Name[255];
|
||||
|
||||
LdrCOFFGetSymbolName(Module, Idx, Name);
|
||||
DPRINT("name %s ", Name);
|
||||
|
||||
/* Check if the symbol is a section we have relocated */
|
||||
if (strcmp(Name, ".text") == 0)
|
||||
{
|
||||
return Module->text_base;
|
||||
}
|
||||
if (strcmp(Name, ".data") == 0)
|
||||
{
|
||||
return Module->data_base;
|
||||
}
|
||||
if (strcmp(Name, ".bss") == 0)
|
||||
{
|
||||
return Module->bss_base;
|
||||
}
|
||||
|
||||
return Module->sym_list[Idx].e_value;
|
||||
}
|
||||
|
||||
#if 0
|
||||
/*
|
||||
* FUNCTION: Get the address of a kernel symbol
|
||||
* ARGUMENTS:
|
||||
|
@ -1287,27 +918,4 @@ LdrGetKernelSymbolAddr(char *Name)
|
|||
return 0L;
|
||||
}
|
||||
|
||||
static unsigned int
|
||||
LdrCOFFGetSymbolValueByName(module *Module,
|
||||
char *SymbolName,
|
||||
unsigned int Idx)
|
||||
{
|
||||
unsigned int i;
|
||||
char Name[255];
|
||||
|
||||
DPRINT("LdrCOFFGetSymbolValueByName(sname %s, idx %x)\n", SymbolName, Idx);
|
||||
|
||||
for (i = 0; i < Module->nsyms; i++)
|
||||
{
|
||||
LdrCOFFGetSymbolName(Module, i, Name);
|
||||
DPRINT("Scanning %s Value %x\n", Name, Module->sym_list[i].e_value);
|
||||
if (strcmp(Name, SymbolName) == 0)
|
||||
{
|
||||
DPRINT("Returning %x\n", Module->sym_list[i].e_value);
|
||||
return Module->sym_list[i].e_value;
|
||||
}
|
||||
}
|
||||
|
||||
return 0L;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
@ -15,7 +15,7 @@ RTL_OBJECTS = rtl/vsprintf.o rtl/lookas.o rtl/unicode.o rtl/strtok.o \
|
|||
rtl/wstring.o rtl/memcpy.o rtl/memmove.o rtl/memset.o \
|
||||
rtl/memchr.o
|
||||
|
||||
KE_OBJECTS = ke/main.o ke/timer.o ke/error.o ke/catch.o ke/exports.o \
|
||||
KE_OBJECTS = ke/main.o ke/timer.o ke/error.o ke/catch.o \
|
||||
ke/dpc.o ke/wait.o ke/kqueue.o ke/dispatch.o \
|
||||
ke/sem.o ke/critical.o ke/event.o ke/apc.o ke/bug.o \
|
||||
ke/mutex.o ke/kernel.o ke/ldt.o ke/apchelp.o \
|
||||
|
@ -122,17 +122,6 @@ CLEAN_FILES = objects/*.o cc/*.o cm/*.o dbg/*.o ex/*.o hal/x86/*.o io/*.o \
|
|||
temp.exp ntoskrnl.exe ntoskrnl.sym
|
||||
endif
|
||||
|
||||
utils/export/export$(EXE_POSTFIX): utils/export/export.c
|
||||
$(NATIVE_CC) -g utils/export/export.c -o utils/export/export$(EXE_POSTFIX)
|
||||
|
||||
ke/exports.o: exports.lst utils/export/export$(EXE_POSTFIX)
|
||||
ifeq ($(HOST),mingw32-windows)
|
||||
.\\utils\\export\\export$(EXE_POSTFIX) < exports.lst > ke\\exports.c
|
||||
else
|
||||
utils/export/export$(EXE_POSTFIX) < exports.lst > ke/exports.c
|
||||
endif
|
||||
$(CC) $(CFLAGS) -c ke/exports.c -o ke/exports.o
|
||||
|
||||
ntoskrnl.exe: $(OBJECTS) ntoskrnl.def
|
||||
$(LD) -r $(OBJECTS) -o ntoskrnl.o
|
||||
$(DLLTOOL) --dllname ntoskrnl.exe --def ntoskrnl.def \
|
||||
|
|
|
@ -25,12 +25,6 @@ extern ULONG PiNrThreads;
|
|||
|
||||
/* FUNCTIONS *****************************************************************/
|
||||
|
||||
VOID PiDeleteProcess(PVOID ObjectBody)
|
||||
{
|
||||
DPRINT("PiDeleteProcess(ObjectBody %x)\n",ObjectBody);
|
||||
(VOID)MmReleaseMmInfo((PEPROCESS)ObjectBody);
|
||||
}
|
||||
|
||||
VOID PsTerminateCurrentThread(NTSTATUS ExitStatus)
|
||||
/*
|
||||
* FUNCTION: Terminates the current thread
|
||||
|
@ -59,7 +53,14 @@ VOID PsTerminateOtherThread(PETHREAD Thread, NTSTATUS ExitStatus)
|
|||
* FUNCTION: Terminate a thread when calling from that thread's context
|
||||
*/
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
KIRQL oldlvl;
|
||||
|
||||
PiNrThreads--;
|
||||
KeRaiseIrql(DISPATCH_LEVEL, &oldlvl);
|
||||
Thread->Tcb.State = THREAD_STATE_TERMINATED;
|
||||
ObDereferenceObject(Thread->ThreadsProcess);
|
||||
Thread->ThreadsProcess = NULL;
|
||||
KeLowerIrql(oldlvl);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
#include <internal/string.h>
|
||||
#include <internal/id.h>
|
||||
|
||||
#define NDEBUG
|
||||
//#define NDEBUG
|
||||
#include <internal/debug.h>
|
||||
|
||||
/* GLOBALS ******************************************************************/
|
||||
|
@ -79,8 +79,6 @@ VOID PsInitProcessManagment(VOID)
|
|||
ID_PROCESS_OBJECT,
|
||||
sizeof(EPROCESS),
|
||||
FALSE);
|
||||
DPRINT("SystemProcess->Pcb.Type %x\n",
|
||||
SystemProcess->Pcb.Type);
|
||||
KProcess = &SystemProcess->Pcb;
|
||||
|
||||
InitializeListHead(&(KProcess->MemoryAreaList));
|
||||
|
@ -100,6 +98,17 @@ VOID PsInitProcessManagment(VOID)
|
|||
&SystemProcessHandle);
|
||||
}
|
||||
|
||||
VOID PiDeleteProcess(PVOID ObjectBody)
|
||||
{
|
||||
KIRQL oldIrql;
|
||||
|
||||
DPRINT("PiDeleteProcess(ObjectBody %x)\n",ObjectBody);
|
||||
KeAcquireSpinLock(&PsProcessListLock, &oldIrql);
|
||||
RemoveEntryList(&((PEPROCESS)ObjectBody)->Pcb.ProcessListEntry);
|
||||
KeReleaseSpinLock(&PsProcessListLock, oldIrql);
|
||||
(VOID)MmReleaseMmInfo((PEPROCESS)ObjectBody);
|
||||
}
|
||||
|
||||
PKPROCESS KeGetCurrentProcess(VOID)
|
||||
/*
|
||||
* FUNCTION: Returns a pointer to the current process
|
||||
|
@ -251,10 +260,17 @@ NTSTATUS STDCALL ZwOpenProcess (OUT PHANDLE ProcessHandle,
|
|||
IN POBJECT_ATTRIBUTES ObjectAttributes,
|
||||
IN PCLIENT_ID ClientId)
|
||||
{
|
||||
DPRINT("ZwOpenProcess(ProcessHandle %x, DesiredAccess %x, "
|
||||
"ObjectAttributes %x, ClientId %x { UniP %d, UniT %d })\n",
|
||||
ProcessHandle, DesiredAccess, ObjectAttributes, ClientId,
|
||||
ClientId->UniqueProcess, ClientId->UniqueThread);
|
||||
|
||||
|
||||
/*
|
||||
* Not of the exact semantics
|
||||
* Not sure of the exact semantics
|
||||
*/
|
||||
if (ObjectAttributes != NULL)
|
||||
if (ObjectAttributes != NULL && ObjectAttributes->ObjectName != NULL &&
|
||||
ObjectAttributes->ObjectName->Buffer != NULL)
|
||||
{
|
||||
NTSTATUS Status;
|
||||
PEPROCESS Process;
|
||||
|
@ -307,12 +323,14 @@ NTSTATUS STDCALL ZwOpenProcess (OUT PHANDLE ProcessHandle,
|
|||
FALSE,
|
||||
ProcessHandle);
|
||||
ObDereferenceObject(current);
|
||||
|
||||
DPRINT("*ProcessHandle %x\n", ProcessHandle);
|
||||
DPRINT("ZwOpenProcess() = %x\n", Status);
|
||||
return(Status);
|
||||
}
|
||||
current_entry = current_entry->Flink;
|
||||
}
|
||||
KeReleaseSpinLock(&PsProcessListLock, oldIrql);
|
||||
DPRINT("ZwOpenProcess() = STATUS_UNSUCCESSFUL\n");
|
||||
return(STATUS_UNSUCCESSFUL);
|
||||
}
|
||||
return(STATUS_UNSUCCESSFUL);
|
||||
|
|
|
@ -1,21 +0,0 @@
|
|||
DIRECTORIES
|
||||
|
||||
system : compiled versions of the various system components and
|
||||
libraries
|
||||
ntoskrnl : microkernel source
|
||||
ntoskrnl/hal : hardware abstraction layer source
|
||||
ntoskrnl/mm : memory managment subsystem source
|
||||
ntoskrnl/io : IO manager subsystem source
|
||||
include : win32 headers
|
||||
include/internal : kernel private header files
|
||||
include/ntdll : system library private header files
|
||||
include/kernel32 : system library private header files
|
||||
include/user32 : user interface private header files
|
||||
include/gdi32 : graphics interface private header files
|
||||
include/ddk : header files for modules
|
||||
lib/ntdll : NT dll source
|
||||
lib/kernel32 : kernel32 source
|
||||
doc : documentation
|
||||
loaders/dos : DOS based loader
|
||||
loaders/boot : boot loader
|
||||
services : various services (device drivers, filesystems etc)
|
Loading…
Reference in a new issue