Major cleanup of NDK. I've decided that it would be much cleaner to accumulate all types, regardless of their um/km availabilty, into each header. Thus, umtypes.h now only contains the equivalent of ntdef.h and is automatically not-included if the DDK is. Similary, I've removed all the NTIFS hacks and added a single ifssupp.h file, which is automatically removed if the IFS is added. That file will be deleted then the Longhorn WDK is made public (it contains the IFS/DDK). Nothing has changed on the includer-side, the same rules still apply

svn path=/trunk/; revision=17420
This commit is contained in:
Alex Ionescu 2005-08-17 07:06:59 +00:00
parent eacc9d1b3a
commit e7d010c5de
25 changed files with 1616 additions and 1602 deletions

View file

@ -7,8 +7,12 @@
#define VERSION "0.0.3"
#ifndef PAGE_ROUND_UP
#define PAGE_ROUND_UP(x) ( (((ULONG_PTR)x)%PAGE_SIZE) ? ((((ULONG_PTR)x)&(~(PAGE_SIZE-1)))+PAGE_SIZE) : ((ULONG_PTR)x) )
#endif
#ifndef ROUND_UP
#define ROUND_UP(N, S) ((((N) + (S) - 1) / (S)) * (S))
#endif
#define TAG(A, B, C, D) (ULONG)(((A)<<0) + ((B)<<8) + ((C)<<16) + ((D)<<24))

View file

@ -2,7 +2,7 @@
#define __DISKDUMP_H
#include <ddk/ntddscsi.h>
#include <ndk/ketypes.h>
#include <ndk/ntndk.h>
#define MM_CORE_DUMP_HEADER_MAGIC (0xdeafbead)
#define MM_CORE_DUMP_HEADER_VERSION (0x1)

View file

@ -9,7 +9,7 @@
#ifndef _ARCH_KETYPES_H
#define _ARCH_KETYPES_H
/* Shared structure needed by Arch-specific headers */
/* Shared structures needed by Arch-specific headers */
typedef struct _KDPC_DATA
{
LIST_ENTRY DpcListHead;
@ -18,6 +18,12 @@ typedef struct _KDPC_DATA
ULONG DpcCount;
} KDPC_DATA, *PKDPC_DATA;
typedef struct _PP_LOOKASIDE_LIST
{
struct _GENERAL_LOOKASIDE *P;
struct _GENERAL_LOOKASIDE *L;
} PP_LOOKASIDE_LIST, *PPP_LOOKASIDE_LIST;
#ifdef _M_IX86
#include <ndk/i386/ketypes.h>
#else

View file

@ -0,0 +1,129 @@
/*
* PROJECT: ReactOS Native Headers
* FILE: include/ndk/cmtypes.h
* PURPOSE: Definitions for Config Manager Types not defined in DDK/IFS
* PROGRAMMER: Alex Ionescu (alex@relsoft.net)
* UPDATE HISTORY:
* Created 06/10/04
*/
#ifndef _CMTYPES_H
#define _CMTYPES_H
/* DEPENDENCIES **************************************************************/
/* EXPORTED DATA *************************************************************/
/* CONSTANTS *****************************************************************/
/* ENUMERATIONS **************************************************************/
#ifdef NTOS_MODE_USER
typedef enum _KEY_INFORMATION_CLASS
{
KeyBasicInformation,
KeyNodeInformation,
KeyFullInformation,
KeyNameInformation,
KeyCachedInformation,
KeyFlagsInformation
} KEY_INFORMATION_CLASS;
typedef enum _KEY_VALUE_INFORMATION_CLASS
{
KeyValueBasicInformation,
KeyValueFullInformation,
KeyValuePartialInformation,
KeyValueFullInformationAlign64,
KeyValuePartialInformationAlign64
} KEY_VALUE_INFORMATION_CLASS;
typedef enum _KEY_SET_INFORMATION_CLASS
{
KeyWriteTimeInformation,
KeyUserFlagsInformation,
MaxKeySetInfoClass
} KEY_SET_INFORMATION_CLASS;
/* TYPES *********************************************************************/
typedef struct _KEY_WRITE_TIME_INFORMATION
{
LARGE_INTEGER LastWriteTime;
} KEY_WRITE_TIME_INFORMATION, *PKEY_WRITE_TIME_INFORMATION;
typedef struct _KEY_USER_FLAGS_INFORMATION
{
ULONG UserFlags;
} KEY_USER_FLAGS_INFORMATION, *PKEY_USER_FLAGS_INFORMATION;
typedef struct _KEY_FULL_INFORMATION
{
LARGE_INTEGER LastWriteTime;
ULONG TitleIndex;
ULONG ClassOffset;
ULONG ClassLength;
ULONG SubKeys;
ULONG MaxNameLen;
ULONG MaxClassLen;
ULONG Values;
ULONG MaxValueNameLen;
ULONG MaxValueDataLen;
WCHAR Class[1];
} KEY_FULL_INFORMATION, *PKEY_FULL_INFORMATION;
typedef struct _KEY_NODE_INFORMATION
{
LARGE_INTEGER LastWriteTime;
ULONG TitleIndex;
ULONG ClassOffset;
ULONG ClassLength;
ULONG NameLength;
WCHAR Name[1];
} KEY_NODE_INFORMATION, *PKEY_NODE_INFORMATION;
typedef struct _KEY_VALUE_ENTRY
{
PUNICODE_STRING ValueName;
ULONG DataLength;
ULONG DataOffset;
ULONG Type;
} KEY_VALUE_ENTRY, *PKEY_VALUE_ENTRY;
typedef struct _KEY_VALUE_PARTIAL_INFORMATION
{
ULONG TitleIndex;
ULONG Type;
ULONG DataLength;
UCHAR Data[1];
} KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION;
typedef struct _KEY_VALUE_BASIC_INFORMATION
{
ULONG TitleIndex;
ULONG Type;
ULONG NameLength;
WCHAR Name[1];
} KEY_VALUE_BASIC_INFORMATION, *PKEY_VALUE_BASIC_INFORMATION;
typedef struct _KEY_VALUE_FULL_INFORMATION
{
ULONG TitleIndex;
ULONG Type;
ULONG DataOffset;
ULONG DataLength;
ULONG NameLength;
WCHAR Name[1];
} KEY_VALUE_FULL_INFORMATION, *PKEY_VALUE_FULL_INFORMATION;
typedef struct _KEY_BASIC_INFORMATION
{
LARGE_INTEGER LastWriteTime;
ULONG TitleIndex;
ULONG NameLength;
WCHAR Name[1];
} KEY_BASIC_INFORMATION, *PKEY_BASIC_INFORMATION;
#endif
#endif

View file

@ -11,36 +11,37 @@
#define _EXTYPES_H
/* DEPENDENCIES **************************************************************/
#include "ketypes.h"
/* EXPORTED DATA *************************************************************/
#ifndef NTOS_MODE_USER
extern POBJECT_TYPE NTOSAPI ExIoCompletionType;
extern NTOSAPI POBJECT_TYPE ExMutantObjectType;
extern NTOSAPI POBJECT_TYPE ExTimerType;
#endif
/* CONSTANTS *****************************************************************/
#ifndef NTOS_MODE_USER
#define INVALID_HANDLE_VALUE (HANDLE)-1
#endif
/* Increments */
#define MUTANT_INCREMENT 1
/* Callback Object Access Rights */
#define CALLBACK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x0001)
#define CALLBACK_EXECUTE (STANDARD_RIGHTS_EXECUTE|SYNCHRONIZE|0x0001)
#define CALLBACK_WRITE (STANDARD_RIGHTS_WRITE|SYNCHRONIZE|0x0001)
#define CALLBACK_READ (STANDARD_RIGHTS_READ|SYNCHRONIZE|0x0001)
/* Executive Object Access Rights */
#define CALLBACK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x0001)
#define CALLBACK_EXECUTE (STANDARD_RIGHTS_EXECUTE|SYNCHRONIZE|0x0001)
#define CALLBACK_WRITE (STANDARD_RIGHTS_WRITE|SYNCHRONIZE|0x0001)
#define CALLBACK_READ (STANDARD_RIGHTS_READ|SYNCHRONIZE|0x0001)
#ifdef NTOS_MODE_USER
#define EVENT_QUERY_STATE 0x0001
#define SEMAPHORE_QUERY_STATE 0x0001
#endif
/* ENUMERATIONS **************************************************************/
/* TYPES *********************************************************************/
/* You'll need the IFS for this, so use an equivalent version */
#ifndef _NTIFS_
typedef PVOID EX_RUNDOWN_REF;
typedef PVOID EX_PUSH_LOCK;
#endif
#ifndef NTOS_MODE_USER
typedef struct _EX_QUEUE_WORKER_INFO
{
UCHAR QueueDisabled:1;
@ -120,4 +121,5 @@ typedef struct _HANDLE_TABLE
} HANDLE_TABLE, *PHANDLE_TABLE;
#endif
#endif

View file

@ -33,45 +33,10 @@ List:
Priority 4:
- FIXED: Kernel and Memory Types are not architecture-specific (Eric) [ketypes.h, mmtypes.h]
- FIXED: Win32K Builds with windows.h (Filip) [extypes.h, ketypes.h]
- Move out stuff from umtypes.h into the actual header where they should go. Use ifdeffing
directly in that file to protect user-mode versus kernel-mode types. umtypes.h will only
end up containing the misc types that are needed for compatibility. This would create a
significant cleanup.
- FIXED: Modify design of NDK so that all the types are in their respective files (Alex) [*.h]
Priority 5:
- FIXED: LPC Types are totally wrong. (Alex) [lpctypes.h]
- Missing System Info Classes [zwtypes.h]
- FIXED: Process Priority Classes are messed up (Alex) [pstypes.h]
Generic Note:
One of the most difficult things is when certain structures require the IFS for some of their
members. Up until some time ago, the IFS was 1000$, so it was senseless to require it in order
to allow people to use the NDK. Recently, however, the IFS price went down to 100$. This is
still way too much. Even though the GNU NTIFS.H exists, I don't want to fallback on it. The
good news is that the WDK (Windows Driver Kit), which will supplant the DDK in about a year,
includes the IFS. At that point we can remove all the #ifndef/ifdef NTIFS hacks, since it'll
be OK to "force" IFS usage.
UPDATE:
However, I'm giving serious consideration of making the IFS a requirement, and suggesting
usage of the GNU IFS for anyone that needs it. The problem, however, is that the official
GNU IFS is outdated and quite invalid in many ways, compared to the ReactOS IFS (which still
isn't perfect yet). Also, this would include many more definitions then needed. A third
option that I'm considering is creating a new header, until the WDK is out, which will be
called ifstypes. It would be the brother of umtypes, but for kernel mode. Only a small
number of types will need to be included, and hence they will be easy to locate in case
the official ones change (by the time they do, the WDK will be out however, so no worries).
It would reduce all the ifdeffing to a single file.
UPDATE2:
No. This is a bad idea. I've just added a note to purge out large parts of umtypes.h into the
actual xxtypes.h files, and then use iffdefing. This is a direct contradiction to my idea of
generalizing all the IFS stuff together.
UPDATE3:
No. This is different...the user-mode types will always be unavailable in kernel-mode, and
dissipating them into the real files is a good thing, because they will never move out and
they are much easier to maintain. However, once the WDK comes out, all #ifdef ntifs will
become obsolete, and they will have to be hunted down and removed. Having a single file that
is automatically added if the IFS is not detected is much easier to remove once the time
comes.

View file

@ -9,4 +9,17 @@
#ifndef _I386_MMTYPES_H
#define _I386_MMTYPES_H
/* DEPENDENCIES **************************************************************/
/* EXPORTED DATA *************************************************************/
/* CONSTANTS *****************************************************************/
#define PAGE_SIZE 0x1000
#define PAGE_SHIFT 12L
/* ENUMERATIONS **************************************************************/
/* TYPES *********************************************************************/
#endif

View file

@ -0,0 +1,116 @@
/*
* PROJECT: ReactOS Native Headers
* FILE: include/ndk/ifssupp.h
* PURPOSE: Defintions present in IFS, required for NDK usage.
* PROGRAMMER: Alex Ionescu (alex@relsoft.net)
* UPDATE HISTORY:
* Created 08/16/05
*/
#ifndef _NTIFS_
#define _NTIFS_
/* DEPENDENCIES **************************************************************/
/* EXPORTED DATA *************************************************************/
/* CONSTANTS *****************************************************************/
/* TYPES *********************************************************************/
typedef PVOID PRTL_HEAP_PARAMETERS;
#if defined(USE_LPC6432)
#define LPC_CLIENT_ID CLIENT_ID64
#define LPC_SIZE_T ULONGLONG
#define LPC_PVOID ULONGLONG
#define LPC_HANDLE ULONGLONG
#else
#define LPC_CLIENT_ID CLIENT_ID
#define LPC_SIZE_T SIZE_T
#define LPC_PVOID PVOID
#define LPC_HANDLE HANDLE
#endif
typedef struct _PORT_MESSAGE
{
union
{
struct
{
CSHORT DataLength;
CSHORT TotalLength;
} s1;
ULONG Length;
} u1;
union
{
struct
{
CSHORT Type;
CSHORT DataInfoOffset;
} s2;
ULONG ZeroInit;
} u2;
union
{
LPC_CLIENT_ID ClientId;
double DoNotUseThisField;
};
ULONG MessageId;
union
{
LPC_SIZE_T ClientViewSize;
ULONG CallbackId;
};
} PORT_MESSAGE, *PPORT_MESSAGE;
typedef struct _PORT_VIEW
{
ULONG Length;
LPC_HANDLE SectionHandle;
ULONG SectionOffset;
LPC_SIZE_T ViewSize;
LPC_PVOID ViewBase;
LPC_PVOID ViewRemoteBase;
} PORT_VIEW, *PPORT_VIEW;
typedef struct _REMOTE_PORT_VIEW
{
ULONG Length;
LPC_SIZE_T ViewSize;
LPC_PVOID ViewBase;
} REMOTE_PORT_VIEW, *PREMOTE_PORT_VIEW;
typedef struct _KAPC_STATE
{
LIST_ENTRY ApcListHead[2];
PKPROCESS Process;
BOOLEAN KernelApcInProgress;
BOOLEAN KernelApcPending;
BOOLEAN UserApcPending;
} KAPC_STATE, *PKAPC_STATE, *RESTRICTED_POINTER PRKAPC_STATE;
typedef struct _KQUEUE
{
DISPATCHER_HEADER Header;
LIST_ENTRY EntryListHead;
ULONG CurrentCount;
ULONG MaximumCount;
LIST_ENTRY ThreadListHead;
} KQUEUE, *PKQUEUE, *RESTRICTED_POINTER PRKQUEUE;
typedef PVOID EX_RUNDOWN_REF;
typedef PVOID EX_PUSH_LOCK;
typedef struct _SECURITY_CLIENT_CONTEXT
{
SECURITY_QUALITY_OF_SERVICE SecurityQos;
PACCESS_TOKEN ClientToken;
BOOLEAN DirectlyAccessClientToken;
BOOLEAN DirectAccessEffectiveOnly;
BOOLEAN ServerIsRemote;
TOKEN_CONTROL ClientTokenControl;
} SECURITY_CLIENT_CONTEXT, *PSECURITY_CLIENT_CONTEXT;
#endif

View file

@ -11,17 +11,82 @@
#define _IOTYPES_H
/* DEPENDENCIES **************************************************************/
#include "potypes.h"
/* EXPORTED DATA *************************************************************/
#ifndef NTOS_MODE_USER
extern POBJECT_TYPE NTOSAPI IoAdapterObjectType;
extern POBJECT_TYPE NTOSAPI IoDeviceHandlerObjectType;
extern POBJECT_TYPE NTOSAPI IoDeviceObjectType;
extern POBJECT_TYPE NTOSAPI IoDriverObjectType;
extern POBJECT_TYPE NTOSAPI IoFileObjectType;
#endif
/* CONSTANTS *****************************************************************/
#ifdef NTOS_MODE_USER
/* Object Access Rights */
#define SYMBOLIC_LINK_QUERY 0x0001
#define SYMBOLIC_LINK_ALL_ACCESS STANDARD_RIGHTS_REQUIRED | 0x0001
#endif
/* File Result Flags */
#define FILE_SUPERSEDED 0x00000000
#define FILE_OPENED 0x00000001
#define FILE_CREATED 0x00000002
#define FILE_OVERWRITTEN 0x00000003
#define FILE_EXISTS 0x00000004
#define FILE_DOES_NOT_EXIST 0x00000005
/* Pipe Flags */
#define FILE_PIPE_BYTE_STREAM_MODE 0x00000000
#define FILE_PIPE_MESSAGE_MODE 0x00000001
#define FILE_PIPE_QUEUE_OPERATION 0x00000000
#define FILE_PIPE_COMPLETE_OPERATION 0x00000001
#define FILE_PIPE_INBOUND 0x00000000
#define FILE_PIPE_OUTBOUND 0x00000001
#define FILE_PIPE_FULL_DUPLEX 0x00000002
#define FILE_PIPE_CLIENT_END 0x00000000
#define FILE_PIPE_SERVER_END 0x00000001
/* File Attributes */
#define FILE_ATTRIBUTE_VALID_FLAGS 0x00007fb7
#define FILE_ATTRIBUTE_VALID_SET_FLAGS 0x000031a7
/* File Flags */
#define FILE_SUPERSEDE 0x00000000
#define FILE_OPEN 0x00000001
#define FILE_CREATE 0x00000002
#define FILE_OPEN_IF 0x00000003
#define FILE_OVERWRITE 0x00000004
#define FILE_OVERWRITE_IF 0x00000005
#define FILE_MAXIMUM_DISPOSITION 0x00000005
/* File Types */
#define FILE_DIRECTORY_FILE 0x00000001
#define FILE_WRITE_THROUGH 0x00000002
#define FILE_SEQUENTIAL_ONLY 0x00000004
#define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008
#define FILE_SYNCHRONOUS_IO_ALERT 0x00000010
#define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020
#define FILE_NON_DIRECTORY_FILE 0x00000040
#define FILE_CREATE_TREE_CONNECTION 0x00000080
#define FILE_COMPLETE_IF_OPLOCKED 0x00000100
#define FILE_NO_EA_KNOWLEDGE 0x00000200
#define FILE_OPEN_FOR_RECOVERY 0x00000400
#define FILE_RANDOM_ACCESS 0x00000800
#define FILE_DELETE_ON_CLOSE 0x00001000
#define FILE_OPEN_BY_FILE_ID 0x00002000
#define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000
#define FILE_NO_COMPRESSION 0x00008000
#define FILE_RESERVE_OPFILTER 0x00100000
#define FILE_OPEN_REPARSE_POINT 0x00200000
#define FILE_OPEN_NO_RECALL 0x00400000
#define FILE_OPEN_FOR_FREE_SPACE_QUERY 0x00800000
/* Device Charactertics */
#define FILE_REMOVABLE_MEDIA 0x00000001
#define FILE_REMOTE_DEVICE 0x00000010
/* Device Object Extension Flags */
#define DOE_UNLOAD_PENDING 0x1
#define DOE_DELETE_PENDING 0x2
@ -67,6 +132,90 @@ extern POBJECT_TYPE NTOSAPI IoFileObjectType;
#define DNUF_NOT_DISABLEABLE 0x0008
/* ENUMERATIONS **************************************************************/
#ifdef NTOS_MODE_USER
typedef enum _INTERFACE_TYPE
{
InterfaceTypeUndefined = -1,
Internal,
Isa,
Eisa,
MicroChannel,
TurboChannel,
PCIBus,
VMEBus,
NuBus,
PCMCIABus,
CBus,
MPIBus,
MPSABus,
ProcessorInternal,
InternalPowerBus,
PNPISABus,
PNPBus,
MaximumInterfaceType
}INTERFACE_TYPE, *PINTERFACE_TYPE;
typedef enum _FILE_INFORMATION_CLASS
{
FileDirectoryInformation = 1,
FileFullDirectoryInformation,
FileBothDirectoryInformation,
FileBasicInformation,
FileStandardInformation,
FileInternalInformation,
FileEaInformation,
FileAccessInformation,
FileNameInformation,
FileRenameInformation,
FileLinkInformation,
FileNamesInformation,
FileDispositionInformation,
FilePositionInformation,
FileFullEaInformation,
FileModeInformation,
FileAlignmentInformation,
FileAllInformation,
FileAllocationInformation,
FileEndOfFileInformation,
FileAlternateNameInformation,
FileStreamInformation,
FilePipeInformation,
FilePipeLocalInformation,
FilePipeRemoteInformation,
FileMailslotQueryInformation,
FileMailslotSetInformation,
FileCompressionInformation,
FileObjectIdInformation,
FileCompletionInformation,
FileMoveClusterInformation,
FileQuotaInformation,
FileReparsePointInformation,
FileNetworkOpenInformation,
FileAttributeTagInformation,
FileTrackingInformation,
FileIdBothDirectoryInformation,
FileIdFullDirectoryInformation,
FileValidDataLengthInformation,
FileShortNameInformation,
FileMaximumInformation
} FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS;
typedef enum _FSINFOCLASS
{
FileFsVolumeInformation = 1,
FileFsLabelInformation,
FileFsSizeInformation,
FileFsDeviceInformation,
FileFsAttributeInformation,
FileFsControlInformation,
FileFsFullSizeInformation,
FileFsObjectIdInformation,
FileFsDriverPathInformation,
FileFsMaximumInformation
} FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS;
#endif
typedef enum _PNP_DEVNODE_STATE
{
DeviceNodeUnspecified = 0x300,
@ -95,6 +244,279 @@ typedef enum _PNP_DEVNODE_STATE
/* TYPES *********************************************************************/
#ifdef NTOS_MODE_USER
typedef struct _FILE_BASIC_INFORMATION
{
LARGE_INTEGER CreationTime;
LARGE_INTEGER LastAccessTime;
LARGE_INTEGER LastWriteTime;
LARGE_INTEGER ChangeTime;
ULONG FileAttributes;
} FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION;
typedef struct _FILE_STANDARD_INFORMATION
{
LARGE_INTEGER AllocationSize;
LARGE_INTEGER EndOfFile;
ULONG NumberOfLinks;
BOOLEAN DeletePending;
BOOLEAN Directory;
} FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION;
typedef struct _FILE_NETWORK_OPEN_INFORMATION
{
LARGE_INTEGER CreationTime;
LARGE_INTEGER LastAccessTime;
LARGE_INTEGER LastWriteTime;
LARGE_INTEGER ChangeTime;
LARGE_INTEGER AllocationSize;
LARGE_INTEGER EndOfFile;
ULONG FileAttributes;
} FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION;
typedef struct _FILE_EA_INFORMATION
{
ULONG EaSize;
} FILE_EA_INFORMATION, *PFILE_EA_INFORMATION;
typedef struct _FILE_COMPRESSION_INFORMATION
{
LARGE_INTEGER CompressedFileSize;
USHORT CompressionFormat;
UCHAR CompressionUnitShift;
UCHAR ChunkShift;
UCHAR ClusterShift;
UCHAR Reserved[3];
} FILE_COMPRESSION_INFORMATION, *PFILE_COMPRESSION_INFORMATION;
typedef struct _FILE_POSITION_INFORMATION
{
LARGE_INTEGER CurrentByteOffset;
} FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION;
typedef struct _FILE_DISPOSITION_INFORMATION
{
BOOLEAN DeleteFile;
} FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION;
typedef struct _FILE_FULL_EA_INFORMATION
{
ULONG NextEntryOffset;
UCHAR Flags;
UCHAR EaNameLength;
USHORT EaValueLength;
CHAR EaName[1];
} FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION;
typedef struct _FILE_QUOTA_INFORMATION
{
ULONG NextEntryOffset;
ULONG SidLength;
LARGE_INTEGER ChangeTime;
LARGE_INTEGER QuotaUsed;
LARGE_INTEGER QuotaThreshold;
LARGE_INTEGER QuotaLimit;
SID Sid;
} FILE_QUOTA_INFORMATION, *PFILE_QUOTA_INFORMATION;
typedef struct _FILE_INTERNAL_INFORMATION
{
LARGE_INTEGER IndexNumber;
} FILE_INTERNAL_INFORMATION, *PFILE_INTERNAL_INFORMATION;
typedef struct _FILE_RENAME_INFORMATION
{
BOOLEAN ReplaceIfExists;
HANDLE RootDirectory;
ULONG FileNameLength;
WCHAR FileName[1];
} FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION;
typedef struct _FILE_PIPE_INFORMATION
{
ULONG ReadMode;
ULONG CompletionMode;
} FILE_PIPE_INFORMATION, *PFILE_PIPE_INFORMATION;
typedef struct _FILE_PIPE_LOCAL_INFORMATION
{
ULONG NamedPipeType;
ULONG NamedPipeConfiguration;
ULONG MaximumInstances;
ULONG CurrentInstances;
ULONG InboundQuota;
ULONG ReadDataAvailable;
ULONG OutboundQuota;
ULONG WriteQuotaAvailable;
ULONG NamedPipeState;
ULONG NamedPipeEnd;
} FILE_PIPE_LOCAL_INFORMATION, *PFILE_PIPE_LOCAL_INFORMATION;
typedef struct _FILE_PIPE_REMOTE_INFORMATION
{
LARGE_INTEGER CollectDataTime;
ULONG MaximumCollectionCount;
} FILE_PIPE_REMOTE_INFORMATION, *PFILE_PIPE_REMOTE_INFORMATION;
typedef struct _FILE_MAILSLOT_QUERY_INFORMATION
{
ULONG MaximumMessageSize;
ULONG MailslotQuota;
ULONG NextMessageSize;
ULONG MessagesAvailable;
LARGE_INTEGER ReadTimeout;
} FILE_MAILSLOT_QUERY_INFORMATION, *PFILE_MAILSLOT_QUERY_INFORMATION;
typedef struct _FILE_MAILSLOT_SET_INFORMATION
{
LARGE_INTEGER ReadTimeout;
} FILE_MAILSLOT_SET_INFORMATION, *PFILE_MAILSLOT_SET_INFORMATION;
typedef struct _FILE_BOTH_DIR_INFORMATION
{
ULONG NextEntryOffset;
ULONG FileIndex;
LARGE_INTEGER CreationTime;
LARGE_INTEGER LastAccessTime;
LARGE_INTEGER LastWriteTime;
LARGE_INTEGER ChangeTime;
LARGE_INTEGER EndOfFile;
LARGE_INTEGER AllocationSize;
ULONG FileAttributes;
ULONG FileNameLength;
ULONG EaSize;
CCHAR ShortNameLength;
WCHAR ShortName[12];
WCHAR FileName[1];
} FILE_BOTH_DIR_INFORMATION, *PFILE_BOTH_DIR_INFORMATION;
typedef struct _FILE_COMPLETION_INFORMATION
{
HANDLE Port;
PVOID Key;
} FILE_COMPLETION_INFORMATION, *PFILE_COMPLETION_INFORMATION;
typedef struct _FILE_LINK_INFORMATION
{
BOOLEAN ReplaceIfExists;
HANDLE RootDirectory;
ULONG FileNameLength;
WCHAR FileName[1];
} FILE_LINK_INFORMATION, *PFILE_LINK_INFORMATION;
typedef struct _FILE_NAME_INFORMATION
{
ULONG FileNameLength;
WCHAR FileName[1];
} FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION;
typedef struct _FILE_ALLOCATION_INFORMATION
{
LARGE_INTEGER AllocationSize;
} FILE_ALLOCATION_INFORMATION, *PFILE_ALLOCATION_INFORMATION;
typedef struct _FILE_END_OF_FILE_INFORMATION
{
LARGE_INTEGER EndOfFile;
} FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION;
typedef struct _FILE_VALID_DATA_LENGTH_INFORMATION
{
LARGE_INTEGER ValidDataLength;
} FILE_VALID_DATA_LENGTH_INFORMATION, *PFILE_VALID_DATA_LENGTH_INFORMATION;
typedef struct _FILE_FS_DEVICE_INFORMATION
{
DEVICE_TYPE DeviceType;
ULONG Characteristics;
} FILE_FS_DEVICE_INFORMATION, *PFILE_FS_DEVICE_INFORMATION;
typedef struct _FILE_FS_ATTRIBUTE_INFORMATION
{
ULONG FileSystemAttributes;
ULONG MaximumComponentNameLength;
ULONG FileSystemNameLength;
WCHAR FileSystemName[1];
} FILE_FS_ATTRIBUTE_INFORMATION, *PFILE_FS_ATTRIBUTE_INFORMATION;
typedef struct _FILE_FS_SIZE_INFORMATION
{
LARGE_INTEGER TotalAllocationUnits;
LARGE_INTEGER AvailableAllocationUnits;
ULONG SectorsPerAllocationUnit;
ULONG BytesPerSector;
} FILE_FS_SIZE_INFORMATION, *PFILE_FS_SIZE_INFORMATION;
typedef struct _FILE_FS_LABEL_INFORMATION
{
ULONG VolumeLabelLength;
WCHAR VolumeLabel[1];
} FILE_FS_LABEL_INFORMATION, *PFILE_FS_LABEL_INFORMATION;
typedef struct _FILE_FS_VOLUME_INFORMATION
{
LARGE_INTEGER VolumeCreationTime;
ULONG VolumeSerialNumber;
ULONG VolumeLabelLength;
BOOLEAN SupportsObjects;
WCHAR VolumeLabel[1];
} FILE_FS_VOLUME_INFORMATION, *PFILE_FS_VOLUME_INFORMATION;
typedef struct _FILE_PIPE_WAIT_FOR_BUFFER
{
LARGE_INTEGER Timeout;
ULONG NameLength;
BOOLEAN TimeoutSpecified;
WCHAR Name[1];
} FILE_PIPE_WAIT_FOR_BUFFER, *PFILE_PIPE_WAIT_FOR_BUFFER;
typedef struct _FILE_PIPE_PEEK_BUFFER
{
ULONG NamedPipeState;
ULONG ReadDataAvailable;
ULONG NumberOfMessages;
ULONG MessageLength;
CHAR Data[1];
} FILE_PIPE_PEEK_BUFFER, *PFILE_PIPE_PEEK_BUFFER;
typedef struct _IO_STATUS_BLOCK
{
union
{
NTSTATUS Status;
PVOID Pointer;
};
ULONG_PTR Information;
} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
typedef struct _IO_ERROR_LOG_PACKET
{
UCHAR MajorFunctionCode;
UCHAR RetryCount;
USHORT DumpDataSize;
USHORT NumberOfStrings;
USHORT StringOffset;
USHORT EventCategory;
NTSTATUS ErrorCode;
ULONG UniqueErrorValue;
NTSTATUS FinalStatus;
ULONG SequenceNumber;
ULONG IoControlCode;
LARGE_INTEGER DeviceOffset;
ULONG DumpData[1];
}IO_ERROR_LOG_PACKET, *PIO_ERROR_LOG_PACKET;
typedef struct _IO_ERROR_LOG_MESSAGE
{
USHORT Type;
USHORT Size;
USHORT DriverNameLength;
LARGE_INTEGER TimeStamp;
ULONG DriverNameOffset;
IO_ERROR_LOG_PACKET EntryData;
} IO_ERROR_LOG_MESSAGE, *PIO_ERROR_LOG_MESSAGE;
#endif
typedef struct _MAILSLOT_CREATE_PARAMETERS
{
ULONG MailslotQuota;
@ -115,6 +537,7 @@ typedef struct _NAMED_PIPE_CREATE_PARAMETERS
BOOLEAN TimeoutSpecified;
} NAMED_PIPE_CREATE_PARAMETERS, *PNAMED_PIPE_CREATE_PARAMETERS;
#ifndef NTOS_MODE_USER
typedef struct _IO_TIMER
{
USHORT Type;
@ -127,52 +550,33 @@ typedef struct _IO_TIMER
typedef struct _DEVICE_NODE
{
/* A tree structure. */
struct _DEVICE_NODE *Parent;
struct _DEVICE_NODE *PrevSibling;
struct _DEVICE_NODE *NextSibling;
struct _DEVICE_NODE *Child;
/* The level of deepness in the tree. */
UINT Level;
PPO_DEVICE_NOTIFY Notify;
/* State machine. */
struct _PO_DEVICE_NOTIFY *Notify;
PNP_DEVNODE_STATE State;
PNP_DEVNODE_STATE PreviousState;
PNP_DEVNODE_STATE StateHistory[20];
UINT StateHistoryEntry;
/* ? */
INT CompletionStatus;
/* ? */
PIRP PendingIrp;
/* See DNF_* flags below (WinDBG documentation has WRONG values) */
ULONG Flags;
/* See DNUF_* flags below (and IRP_MN_QUERY_PNP_DEVICE_STATE) */
ULONG UserFlags;
/* See CM_PROB_* values are defined in cfg.h */
ULONG Problem;
/* Pointer to the PDO corresponding to the device node. */
PDEVICE_OBJECT PhysicalDeviceObject;
/* Resource list as assigned by the PnP arbiter. See IRP_MN_START_DEVICE
and ARBITER_INTERFACE (not documented in DDK, but present in headers). */
PCM_RESOURCE_LIST ResourceList;
/* Resource list as assigned by the PnP arbiter (translated version). */
PCM_RESOURCE_LIST ResourceListTranslated;
/* Instance path relative to the Enum key in registry. */
UNICODE_STRING InstancePath;
/* Name of the driver service. */
UNICODE_STRING ServiceName;
/* ? */
PDEVICE_OBJECT DuplicatePDO;
/* See IRP_MN_QUERY_RESOURCE_REQUIREMENTS. */
PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements;
/* Information about bus for bus drivers. */
INTERFACE_TYPE InterfaceType;
ULONG BusNumber;
/* Information about underlying bus for child devices. */
INTERFACE_TYPE ChildInterfaceType;
ULONG ChildBusNumber;
USHORT ChildBusTypeIndex;
/* ? */
UCHAR RemovalPolicy;
UCHAR HardwareRemovalPolicy;
LIST_ENTRY TargetDeviceNotify;
@ -191,9 +595,7 @@ typedef struct _DEVICE_NODE
{
struct _DEVICE_NODE *NextResourceDeviceNode;
} OverUsed2;
/* See IRP_MN_QUERY_RESOURCES/IRP_MN_FILTER_RESOURCES. */
PCM_RESOURCE_LIST BootResources;
/* See the bitfields in DEVICE_CAPABILITIES structure. */
ULONG CapabilityFlags;
struct
{
@ -245,6 +647,77 @@ typedef struct _PRIVATE_DRIVER_EXTENSIONS
PVOID ClientIdentificationAddress;
CHAR Extension[1];
} PRIVATE_DRIVER_EXTENSIONS, *PPRIVATE_DRIVER_EXTENSIONS;
#endif
/* FUNCTION TYPES ************************************************************/
typedef VOID
(NTAPI *PIO_APC_ROUTINE)(
IN PVOID ApcContext,
IN PIO_STATUS_BLOCK IoStatusBlock,
IN ULONG Reserved);
/* I/O CONTROL CODES *********************************************************/
#ifdef NTOS_MODE_USER
/* Mailslots */
#define FSCTL_MAILSLOT_PEEK \
CTL_CODE(FILE_DEVICE_MAILSLOT, 0, METHOD_NEITHER, FILE_READ_DATA)
/* Pipes */
#define FSCTL_PIPE_ASSIGN_EVENT \
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_PIPE_DISCONNECT \
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_PIPE_LISTEN \
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_PIPE_PEEK \
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 3, METHOD_BUFFERED, FILE_READ_DATA)
#define FSCTL_PIPE_QUERY_EVENT \
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_PIPE_TRANSCEIVE \
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 5, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
#define FSCTL_PIPE_WAIT \
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_PIPE_IMPERSONATE \
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_PIPE_SET_CLIENT_PROCESS \
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_PIPE_QUERY_CLIENT_PROCESS \
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS)
#define FSCTL_PIPE_INTERNAL_READ \
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2045, METHOD_BUFFERED, FILE_READ_DATA)
#define FSCTL_PIPE_INTERNAL_WRITE \
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2046, METHOD_BUFFERED, FILE_WRITE_DATA)
#define FSCTL_PIPE_INTERNAL_TRANSCEIVE \
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2047, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
#define FSCTL_PIPE_INTERNAL_READ_OVFLOW \
CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2048, METHOD_BUFFERED, FILE_READ_DATA)
/* Tapes */
#define IOCTL_TAPE_ERASE \
CTL_CODE(FILE_DEVICE_TAPE, 0, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
#define IOCTL_TAPE_PREPARE \
CTL_CODE(FILE_DEVICE_TAPE, 1, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_TAPE_WRITE_MARKS \
CTL_CODE(FILE_DEVICE_TAPE, 2, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
#define IOCTL_TAPE_GET_POSITION \
CTL_CODE(FILE_DEVICE_TAPE, 3, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_TAPE_SET_POSITION \
CTL_CODE(FILE_DEVICE_TAPE, 4, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_TAPE_GET_DRIVE_PARAMS \
CTL_CODE(FILE_DEVICE_TAPE, 5, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_TAPE_SET_DRIVE_PARAMS \
CTL_CODE(FILE_DEVICE_TAPE, 6, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
#define IOCTL_TAPE_GET_MEDIA_PARAMS \
CTL_CODE(FILE_DEVICE_TAPE, 7, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_TAPE_SET_MEDIA_PARAMS \
CTL_CODE(FILE_DEVICE_TAPE, 8, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_TAPE_GET_STATUS \
CTL_CODE(FILE_DEVICE_TAPE, 9, METHOD_BUFFERED, FILE_READ_ACCESS)
#define IOCTL_TAPE_CREATE_PARTITION \
CTL_CODE(FILE_DEVICE_TAPE, 10, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS)
#endif
#endif

View file

@ -12,8 +12,6 @@
/* DEPENDENCIES **************************************************************/
#include "kdtypes.h"
/* FUNCTION TYPES ************************************************************/
/* PROTOTYPES ****************************************************************/
BYTE

View file

@ -12,8 +12,6 @@
/* DEPENDENCIES **************************************************************/
#include "ketypes.h"
/* FUNCTION TYPES ************************************************************/
/* PROTOTYPES ****************************************************************/
VOID

View file

@ -10,28 +10,24 @@
#define _KETYPES_H
/* DEPENDENCIES **************************************************************/
#include "haltypes.h"
#include "potypes.h"
#include "mmtypes.h"
#ifndef NTOS_MODE_USER
#include <arc/arc.h>
/*
* Architecture-specific types
* NB: Although KPROCESS is Arch-Specific,
* only some members are different and we will use #ifdef
* directly in the structure to avoid dependency-hell
*/
#include "arch/ketypes.h"
#endif
/* CONSTANTS *****************************************************************/
#define SSDT_MAX_ENTRIES 4
#define PROCESSOR_FEATURE_MAX 64
#define CONTEXT_DEBUGGER (CONTEXT_FULL | CONTEXT_FLOATING_POINT)
#define THREAD_WAIT_OBJECTS 4
#define THREAD_ALERT 0x4
#ifdef NTOS_MODE_USER
#define SharedUserData ((KUSER_SHARED_DATA * CONST) USER_SHARED_DATA)
#endif
/* EXPORTED DATA *************************************************************/
#ifndef NTOS_MODE_USER
extern CHAR NTOSAPI KeNumberProcessors;
extern LOADER_PARAMETER_BLOCK NTOSAPI KeLoaderBlock;
extern ULONG NTOSAPI KeDcacheFlushCount;
@ -43,11 +39,203 @@ extern ULONG NTOSAPI KeMinimumIncrement;
extern ULONG NTOSAPI NtBuildNumber;
extern SSDT_ENTRY NTOSAPI KeServiceDescriptorTable[SSDT_MAX_ENTRIES];
extern SSDT_ENTRY NTOSAPI KeServiceDescriptorTableShadow[SSDT_MAX_ENTRIES];
#endif
/* ENUMERATIONS **************************************************************/
#ifdef NTOS_MODE_USER
typedef enum _EVENT_TYPE
{
NotificationEvent,
SynchronizationEvent
} EVENT_TYPE;
typedef enum _TIMER_TYPE
{
NotificationTimer,
SynchronizationTimer
} TIMER_TYPE;
typedef enum _WAIT_TYPE
{
WaitAll,
WaitAny
} WAIT_TYPE;
typedef enum _MODE
{
KernelMode,
UserMode,
MaximumMode
} MODE;
typedef enum _KWAIT_REASON
{
Executive,
FreePage,
PageIn,
PoolAllocation,
DelayExecution,
Suspended,
UserRequest,
WrExecutive,
WrFreePage,
WrPageIn,
WrPoolAllocation,
WrDelayExecution,
WrSuspended,
WrUserRequest,
WrEventPair,
WrQueue,
WrLpcReceive,
WrLpcReply,
WrVirtualMemory,
WrPageOut,
WrRendezvous,
Spare2,
WrGuardedMutex,
Spare4,
Spare5,
Spare6,
WrKernel,
WrResource,
WrPushLock,
WrMutex,
WrQuantumEnd,
WrDispatchInt,
WrPreempted,
WrYieldExecution,
MaximumWaitReason
} KWAIT_REASON;
typedef enum _KPROFILE_SOURCE
{
ProfileTime,
ProfileAlignmentFixup,
ProfileTotalIssues,
ProfilePipelineDry,
ProfileLoadInstructions,
ProfilePipelineFrozen,
ProfileBranchInstructions,
ProfileTotalNonissues,
ProfileDcacheMisses,
ProfileIcacheMisses,
ProfileCacheMisses,
ProfileBranchMispredictions,
ProfileStoreInstructions,
ProfileFpInstructions,
ProfileIntegerInstructions,
Profile2Issue,
Profile3Issue,
Profile4Issue,
ProfileSpecialInstructions,
ProfileTotalCycles,
ProfileIcacheIssues,
ProfileDcacheAccesses,
ProfileMemoryBarrierCycles,
ProfileLoadLinkedIssues,
ProfileMaximum
} KPROFILE_SOURCE;
typedef enum _NT_PRODUCT_TYPE
{
NtProductWinNt = 1,
NtProductLanManNt,
NtProductServer
} NT_PRODUCT_TYPE, *PNT_PRODUCT_TYPE;
typedef enum _ALTERNATIVE_ARCHITECTURE_TYPE
{
StandardDesign,
NEC98x86,
EndAlternatives
} ALTERNATIVE_ARCHITECTURE_TYPE;
#endif
typedef enum _KTHREAD_STATE
{
Initialized,
Ready,
Running,
Standby,
Terminated,
Waiting,
Transition,
DeferredReady,
} KTHREAD_STATE, *PKTHREAD_STATE;
/* FUNCTION TYPES ************************************************************/
typedef VOID
(NTAPI *PKNORMAL_ROUTINE)(
IN PVOID NormalContext,
IN PVOID SystemArgument1,
IN PVOID SystemArgument2);
typedef VOID
(NTAPI *PTIMER_APC_ROUTINE)(
IN PVOID TimerContext,
IN ULONG TimerLowValue,
IN LONG TimerHighValue);
/* TYPES *********************************************************************/
typedef LONG KPRIORITY;
#ifdef NTOS_MODE_USER
typedef CCHAR KPROCESSOR_MODE;
typedef struct _KSYSTEM_TIME
{
ULONG LowPart;
LONG High1Time;
LONG High2Time;
} KSYSTEM_TIME, *PKSYSTEM_TIME;
typedef struct _KUSER_SHARED_DATA
{
ULONG TickCountLowDeprecated;
ULONG TickCountMultiplier;
volatile KSYSTEM_TIME InterruptTime;
volatile KSYSTEM_TIME SystemTime;
volatile KSYSTEM_TIME TimeZoneBias;
USHORT ImageNumberLow;
USHORT ImageNumberHigh;
WCHAR NtSystemRoot[260];
ULONG MaxStackTraceDepth;
ULONG CryptoExponent;
ULONG TimeZoneId;
ULONG LargePageMinimum;
ULONG Reserved2[7];
NT_PRODUCT_TYPE NtProductType;
BOOLEAN ProductTypeIsValid;
ULONG NtMajorVersion;
ULONG NtMinorVersion;
BOOLEAN ProcessorFeatures[PROCESSOR_FEATURE_MAX];
ULONG Reserved1;
ULONG Reserved3;
volatile ULONG TimeSlip;
ALTERNATIVE_ARCHITECTURE_TYPE AlternativeArchitecture;
LARGE_INTEGER SystemExpirationDate;
ULONG SuiteMask;
BOOLEAN KdDebuggerEnabled;
volatile ULONG ActiveConsoleId;
volatile ULONG DismountCount;
ULONG ComPlusPackage;
ULONG LastSystemRITEventTickCount;
ULONG NumberOfPhysicalPages;
BOOLEAN SafeBootMode;
ULONG TraceLogging;
ULONGLONG Fill0;
ULONGLONG SystemCall[4];
union {
volatile KSYSTEM_TIME TickCount;
volatile ULONG64 TickCountQuad;
};
} KUSER_SHARED_DATA, *PKUSER_SHARED_DATA;
#endif
#ifndef NTOS_MODE_USER
typedef struct _CONFIGURATION_COMPONENT_DATA
{
struct _CONFIGURATION_COMPONENT_DATA *Parent;
@ -63,27 +251,6 @@ typedef enum _KAPC_ENVIRONMENT
CurrentApcEnvironment
} KAPC_ENVIRONMENT;
/* We don't want to force NTIFS usage only for two structures */
#ifndef _NTIFS_
typedef struct _KAPC_STATE
{
LIST_ENTRY ApcListHead[2];
PKPROCESS Process;
BOOLEAN KernelApcInProgress;
BOOLEAN KernelApcPending;
BOOLEAN UserApcPending;
} KAPC_STATE, *PKAPC_STATE, *RESTRICTED_POINTER PRKAPC_STATE;
typedef struct _KQUEUE
{
DISPATCHER_HEADER Header;
LIST_ENTRY EntryListHead;
ULONG CurrentCount;
ULONG MaximumCount;
LIST_ENTRY ThreadListHead;
} KQUEUE, *PKQUEUE, *RESTRICTED_POINTER PRKQUEUE;
#endif
typedef struct _KNODE
{
SLIST_HEADER DeadStackList;
@ -319,17 +486,6 @@ typedef struct _KPROCESS
ULONG StackCount; /* 06C */
LIST_ENTRY ProcessListEntry; /* 070 */
} KPROCESS;
typedef enum _KTHREAD_STATE
{
Initialized,
Ready,
Running,
Standby,
Terminated,
Waiting,
Transition,
DeferredReady,
} KTHREAD_STATE, *PKTHREAD_STATE;
#endif /* !NTOS_MODE_USER */
#endif

View file

@ -34,12 +34,7 @@ typedef enum _LPC_TYPE
/* TYPES *********************************************************************/
/*
* Native Structures in IFS. Duplicated here for user-mode.
* Also duplicated if the IFS is not present. Until the WDK is
* released, we should not force the usage of a 100$ kit.
*/
#if defined(NTOS_MODE_USER) || !(defined(_NTIFS_))
#ifdef NTOS_MODE_USER
#if defined(USE_LPC6432)
#define LPC_CLIENT_ID CLIENT_ID64
@ -130,7 +125,6 @@ typedef struct _LPCP_PORT_QUEUE
LIST_ENTRY ReceiveHead;
} LPCP_PORT_QUEUE, *PLPCP_PORT_QUEUE;
#ifdef _NTIFS_
typedef struct _LPCP_PORT_OBJECT
{
ULONG Length;
@ -177,8 +171,6 @@ typedef struct _LPCP_CONNECTION_MESSAGE
} LPCP_CONNECTION_MESSAGE, *PLPCP_CONNECTION_MESSAGE;
#endif
#endif
/* CONSTANTS *****************************************************************/
#define PORT_MAXIMUM_MESSAGE_LENGTH 256

View file

@ -10,7 +10,6 @@
#define _MMTYPES_H
/* DEPENDENCIES **************************************************************/
#include "arch/mmtypes.h"
/* EXPORTED DATA *************************************************************/
@ -18,6 +17,34 @@
/* CONSTANTS *****************************************************************/
/* ENUMERATIONS **************************************************************/
#ifdef NTOS_MODE_USER
typedef enum _SECTION_INHERIT
{
ViewShare = 1,
ViewUnmap = 2
} SECTION_INHERIT;
typedef enum _POOL_TYPE
{
NonPagedPool,
PagedPool,
NonPagedPoolMustSucceed,
DontUseThisType,
NonPagedPoolCacheAligned,
PagedPoolCacheAligned,
NonPagedPoolCacheAlignedMustS,
MaxPoolType,
NonPagedPoolSession = 32,
PagedPoolSession,
NonPagedPoolMustSucceedSession,
DontUseThisTypeSession,
NonPagedPoolCacheAlignedSession,
PagedPoolCacheAlignedSession,
NonPagedPoolCacheAlignedMustSSession
} POOL_TYPE;
#endif
typedef enum _PP_NPAGED_LOOKASIDE_NUMBER
{
LookasideSmallIrpList = 0,
@ -32,6 +59,40 @@ typedef enum _PP_NPAGED_LOOKASIDE_NUMBER
/* TYPES *********************************************************************/
#ifdef NTOS_MODE_USER
typedef struct _VM_COUNTERS
{
SIZE_T PeakVirtualSize;
SIZE_T VirtualSize;
ULONG PageFaultCount;
SIZE_T PeakWorkingSetSize;
SIZE_T WorkingSetSize;
SIZE_T QuotaPeakPagedPoolUsage;
SIZE_T QuotaPagedPoolUsage;
SIZE_T QuotaPeakNonPagedPoolUsage;
SIZE_T QuotaNonPagedPoolUsage;
SIZE_T PagefileUsage;
SIZE_T PeakPagefileUsage;
} VM_COUNTERS, *PVM_COUNTERS;
typedef struct _VM_COUNTERS_EX
{
SIZE_T PeakVirtualSize;
SIZE_T VirtualSize;
ULONG PageFaultCount;
SIZE_T PeakWorkingSetSize;
SIZE_T WorkingSetSize;
SIZE_T QuotaPeakPagedPoolUsage;
SIZE_T QuotaPagedPoolUsage;
SIZE_T QuotaPeakNonPagedPoolUsage;
SIZE_T QuotaNonPagedPoolUsage;
SIZE_T PagefileUsage;
SIZE_T PeakPagefileUsage;
SIZE_T PrivateUsage;
} VM_COUNTERS_EX, *PVM_COUNTERS_EX;
#endif
#ifndef NTOS_MODE_USER
/* FIXME: Forced to do this for now, because of EPROCESS, will go away before 0.3.0 */
typedef struct _MADDRESS_SPACE
{
@ -43,12 +104,6 @@ typedef struct _MADDRESS_SPACE
ULONG PageTableRefCountTableSize;
} MADDRESS_SPACE, *PMADDRESS_SPACE;
typedef struct _PP_LOOKASIDE_LIST
{
struct _GENERAL_LOOKASIDE *P;
struct _GENERAL_LOOKASIDE *L;
} PP_LOOKASIDE_LIST, *PPP_LOOKASIDE_LIST;
typedef struct _ADDRESS_RANGE
{
ULONG BaseAddrLow;
@ -161,3 +216,4 @@ typedef struct _MMSUPPORT
} MMSUPPORT, *PMMSUPPORT;
#endif
#endif

View file

@ -16,43 +16,45 @@
/* Helper Header */
#include <helper.h>
/* A version of ntdef.h to be used with PSDK headers. */
#include "umtypes.h"
/* Kernel-Mode NDK */
#ifndef NTOS_MODE_USER
#include "kdtypes.h" /* Kernel Debugger Types */
#include "kdfuncs.h" /* Kernel Debugger Functions */
#include "cctypes.h" /* Cache Manager Types */
#include "dbgktypes.h" /* User-Mode Kernel Debugging Types */
#include "extypes.h" /* Executive Types */
#include "haltypes.h" /* Hardware Abstraction Layer Types */
#include "halfuncs.h" /* Hardware Abstraction Layer Functions */
#include "inbvfuncs.h" /* Initialization Boot Video Functions */
#include "iotypes.h" /* Input/Output Manager Types */
#include "iofuncs.h" /* Input/Output Manager Functions */
#include "ketypes.h" /* Kernel Types */
#include "kefuncs.h" /* Kernel Functions */
#include "mmtypes.h" /* Memory Manager Types */
#include "mmfuncs.h" /* Memory Manager Functions */
#include "obtypes.h" /* Object Manager Types */
#include "obfuncs.h" /* Object Manager Functions */
#include "potypes.h" /* Power Manager Types */
#include "psfuncs.h" /* Process Manager Functions */
#include "setypes.h" /* Security Subsystem Types */
#include "sefuncs.h" /* Security Subsystem Functions */
#else
/* User-Mode NDK */
#include "umtypes.h" /* Native Types in DDK/IFS but not in PSDK */
#include "umfuncs.h" /* User-Mode NT Library Functions */
#endif
#include "ifssupp.h" /* IFS Support Header */
#include "kdfuncs.h" /* Kernel Debugger Functions */
#include "cctypes.h" /* Cache Manager Types */
#include "potypes.h" /* Power Manager Types */
#include "dbgktypes.h" /* User-Mode Kernel Debugging Types */
#include "haltypes.h" /* Hardware Abstraction Layer Types */
#include "halfuncs.h" /* Hardware Abstraction Layer Functions */
#include "inbvfuncs.h" /* Initialization Boot Video Functions */
#include "iofuncs.h" /* Input/Output Manager Functions */
#include "kefuncs.h" /* Kernel Functions */
#include "mmfuncs.h" /* Memory Manager Functions */
#include "obfuncs.h" /* Object Manager Functions */
#include "psfuncs.h" /* Process Manager Functions */
#include "setypes.h" /* Security Subsystem Types */
#include "sefuncs.h" /* Security Subsystem Functions */
#endif /* !NTOS_MODE_USER */
/* Shared NDK */
#include "ldrfuncs.h" /* Loader Functions */
#include "extypes.h" /* Executive Types */
#include "cmtypes.h" /* Configuration Manager Types */
#include "kdtypes.h" /* Kernel Debugger Types */
#include "ketypes.h" /* Kernel Types */
#include "iotypes.h" /* Input/Output Manager Types */
#include "ldrtypes.h" /* Loader Types */
#include "lpctypes.h" /* Local Procedure Call Types */
#include "ldrfuncs.h" /* Loader Functions */
#include "mmtypes.h" /* Memory Manager Types */
#include "obtypes.h" /* Object Manager Types */
#include "pstypes.h" /* Process Manager Types */
#include "rtltypes.h" /* Runtime Library Types */
#include "rtlfuncs.h" /* Runtime Library Functions */
#include "lpctypes.h" /* Local Procedure Call Types */
#include "zwtypes.h" /* Native Types */
#include "zwfuncs.h" /* Native Functions (System Calls) */
#include "rtltypes.h" /* Runtime Library Types */
#include "rtlfuncs.h" /* Runtime Library Functions */
#include "umfuncs.h" /* User-Mode NT Library Functions */
#include "i386/floatsave.h" /* Floating Point Save Area Definitions for i386 */
#include "i386/segment.h" /* Kernel CPU Segment Definitions for i386 */

View file

@ -13,6 +13,35 @@
/* CONSTANTS *****************************************************************/
#ifdef NTOS_MODE_USER
/* Definitions for Object Creation */
#define OBJ_INHERIT 2L
#define OBJ_PERMANENT 16L
#define OBJ_EXCLUSIVE 32L
#define OBJ_CASE_INSENSITIVE 64L
#define OBJ_OPENIF 128L
#define OBJ_OPENLINK 256L
#define OBJ_VALID_ATTRIBUTES 498L
#define InitializeObjectAttributes(p,n,a,r,s) { \
(p)->Length = sizeof(OBJECT_ATTRIBUTES); \
(p)->RootDirectory = (r); \
(p)->Attributes = (a); \
(p)->ObjectName = (n); \
(p)->SecurityDescriptor = (s); \
(p)->SecurityQualityOfService = NULL; \
}
/* Directory Object Access Rights */
#define DIRECTORY_QUERY 0x0001
#define DIRECTORY_TRAVERSE 0x0002
#define DIRECTORY_CREATE_OBJECT 0x0004
#define DIRECTORY_CREATE_SUBDIRECTORY 0x0008
#define DIRECTORY_ALL_ACCESS STANDARD_RIGHTS_REQUIRED | 0xF
#endif
/* Duplication Flags */
#define DUPLICATE_SAME_ATTRIBUTES 0x00000004
/* Values for DosDeviceDriveType */
#define DOSDEVICE_DRIVE_UNKNOWN 0
#define DOSDEVICE_DRIVE_CALCULATE 1
@ -22,6 +51,7 @@
#define DOSDEVICE_DRIVE_CDROM 5
#define DOSDEVICE_DRIVE_RAMDISK 6
#ifndef NTOS_MODE_USER
/* Object Flags */
#define OB_FLAG_CREATE_INFO 0x01
#define OB_FLAG_KERNEL_MODE 0x02
@ -95,11 +125,10 @@ typedef PVOID
ULONG Attributes
);
typedef NTSTATUS
(STDCALL *OB_SECURITY_METHOD)(
PVOID Object,
SECURITY_OPERATION_CODE OperationType,
SECURITY_OPERATION_CODE OperationType,
SECURITY_INFORMATION SecurityInformation,
PSECURITY_DESCRIPTOR NewSecurityDescriptor,
PULONG ReturnLength,
@ -116,9 +145,18 @@ typedef NTSTATUS
PWSTR RemainingPath,
struct _OBJECT_ATTRIBUTES* ObjectAttributes
);
#endif
/* TYPES *********************************************************************/
#ifdef NTOS_MODE_USER
typedef struct _OBJECT_NAME_INFORMATION
{
UNICODE_STRING Name;
} OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION;
#endif
#ifndef NTOS_MODE_USER
typedef struct _OBJECT_BASIC_INFORMATION
{
ULONG Attributes;
@ -292,5 +330,6 @@ typedef struct _DEVICE_MAP
extern NTOSAPI POBJECT_TYPE ObDirectoryType;
extern NTOSAPI PDEVICE_MAP ObSystemDeviceMap;
#endif
#endif

View file

@ -11,13 +11,20 @@
/* DEPENDENCIES **************************************************************/
#include "ldrtypes.h"
#include "rtltypes.h"
#include "mmtypes.h"
#include "obtypes.h"
#include "extypes.h"
#ifndef NTOS_MODE_USER
#include "setypes.h"
#endif
/* EXPORTED DATA *************************************************************/
#ifndef NTOS_MODE_USER
extern NTOSAPI struct _EPROCESS* PsInitialSystemProcess;
extern NTOSAPI POBJECT_TYPE PsProcessType;
extern NTOSAPI POBJECT_TYPE PsThreadType;
#endif
/* CONSTANTS *****************************************************************/
@ -31,10 +38,16 @@ extern NTOSAPI POBJECT_TYPE PsThreadType;
#define JOB_OBJECT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|31)
#endif
#define THREAD_ALERT 0x4
#define USER_SHARED_DATA (0x7FFE0000)
#ifdef NTOS_MODE_USER
/* Macros for current Process/Thread built-in 'special' ID */
#define NtCurrentProcess() ((HANDLE)(LONG_PTR)-1)
#define ZwCurrentProcess() NtCurrentProcess()
#define NtCurrentThread() ((HANDLE)(LONG_PTR)-2)
#define ZwCurrentThread() NtCurrentThread()
#endif
/* Process priority classes */
#define PROCESS_PRIORITY_CLASS_INVALID 0
#define PROCESS_PRIORITY_CLASS_IDLE 1
@ -75,9 +88,74 @@ extern NTOSAPI POBJECT_TYPE PsThreadType;
/* ENUMERATIONS **************************************************************/
#ifdef NTOS_MODE_USER
typedef enum _PROCESSINFOCLASS
{
ProcessBasicInformation,
ProcessQuotaLimits,
ProcessIoCounters,
ProcessVmCounters,
ProcessTimes,
ProcessBasePriority,
ProcessRaisePriority,
ProcessDebugPort,
ProcessExceptionPort,
ProcessAccessToken,
ProcessLdtInformation,
ProcessLdtSize,
ProcessDefaultHardErrorMode,
ProcessIoPortHandlers,
ProcessPooledUsageAndLimits,
ProcessWorkingSetWatch,
ProcessUserModeIOPL,
ProcessEnableAlignmentFaultFixup,
ProcessPriorityClass,
ProcessWx86Information,
ProcessHandleCount,
ProcessAffinityMask,
ProcessPriorityBoost,
ProcessDeviceMap,
ProcessSessionInformation,
ProcessForegroundInformation,
ProcessWow64Information,
ProcessImageFileName,
ProcessLUIDDeviceMapsEnabled,
ProcessBreakOnTermination,
ProcessDebugObjectHandle,
ProcessDebugFlags,
ProcessHandleTracing,
MaxProcessInfoClass
} PROCESSINFOCLASS;
typedef enum _THREADINFOCLASS
{
ThreadBasicInformation,
ThreadTimes,
ThreadPriority,
ThreadBasePriority,
ThreadAffinityMask,
ThreadImpersonationToken,
ThreadDescriptorTableEntry,
ThreadEnableAlignmentFaultFixup,
ThreadEventPair_Reusable,
ThreadQuerySetWin32StartAddress,
ThreadZeroTlsCell,
ThreadPerformanceCount,
ThreadAmILastThread,
ThreadIdealProcessor,
ThreadPriorityBoost,
ThreadSetTlsArrayAddress,
ThreadIsIoPending,
ThreadHideFromDebugger,
ThreadBreakOnTermination,
MaxThreadInfoClass
} THREADINFOCLASS;
#endif
/* FUNCTION TYPES ************************************************************/
typedef VOID (NTAPI *PPEBLOCKROUTINE)(PVOID);
#ifndef NTOS_MODE_USER
typedef NTSTATUS
(NTAPI *PW32_PROCESS_CALLBACK)(
struct _EPROCESS *Process,
@ -89,9 +167,18 @@ typedef NTSTATUS
struct _ETHREAD *Thread,
BOOLEAN Create
);
#endif
/* TYPES *********************************************************************/
#ifdef NTOS_MODE_USER
typedef struct _CLIENT_ID
{
HANDLE UniqueProcess;
HANDLE UniqueThread;
} CLIENT_ID, *PCLIENT_ID;
#endif
struct _W32THREAD;
struct _W32PROCESS;
@ -118,7 +205,7 @@ typedef struct _PEB
HANDLE Mutant; /* 04h */
PVOID ImageBaseAddress; /* 08h */
PPEB_LDR_DATA Ldr; /* 0Ch */
PRTL_USER_PROCESS_PARAMETERS ProcessParameters; /* 10h */
struct _RTL_USER_PROCESS_PARAMETERS *ProcessParameters; /* 10h */
PVOID SubSystemData; /* 14h */
PVOID ProcessHeap; /* 18h */
PVOID FastPebLock; /* 1Ch */
@ -168,7 +255,7 @@ typedef struct _PEB
ULONG SessionId; /* 1D4h */
PVOID AppCompatInfo; /* 1D8h */
UNICODE_STRING CSDVersion; /* 1DCh */
} PEB;
} PEB, *PPEB;
typedef struct _GDI_TEB_BATCH
{
@ -276,14 +363,7 @@ typedef struct _TEB
PVOID WineDebugInfo; /* FBCh */
} TEB, *PTEB;
/* KERNEL MODE ONLY **********************************************************/
#ifndef NTOS_MODE_USER
#include "mmtypes.h"
#include "obtypes.h"
#include "extypes.h"
#include "setypes.h"
/* FIXME: see note in mmtypes.h */
#ifdef _NTOSKRNL_
#include <internal/mm.h>
@ -323,13 +403,6 @@ typedef struct _PS_IMPERSONATION_INFORMATION
} PS_IMPERSONATION_INFORMATION, *PPS_IMPERSONATION_INFORMATION;
#include <pshpack4.h>
/*
* NAME: ETHREAD
* DESCRIPTION: Internal Executive Thread Structure.
* PORTABILITY: Architecture Independent.
* KERNEL VERSION: 5.2
* DOCUMENTATION: http://reactos.com/wiki/index.php/ETHREAD
*/
typedef struct _ETHREAD
{
KTHREAD Tcb; /* 1C0 */
@ -373,7 +446,7 @@ typedef struct _ETHREAD
PKSTART_ROUTINE StartAddress; /* 21C */
union
{
PTHREAD_START_ROUTINE Win32StartAddress; /* 220 */
PVOID Win32StartAddress; /* 220 */
ULONG LpcReceivedMessageId; /* 220 */
};
LIST_ENTRY ThreadListEntry; /* 224 */
@ -431,13 +504,6 @@ typedef struct _ETHREAD
UCHAR ActiveFaultCount; /* 24E */
} ETHREAD;
/*
* NAME: EPROCESS
* DESCRIPTION: Internal Executive Process Structure.
* PORTABILITY: Architecture Independent.
* KERNEL VERSION: 5.2
* DOCUMENTATION: http://reactos.com/wiki/index.php/EPROCESS
*/
typedef struct _EPROCESS
{
KPROCESS Pcb; /* 000 */

View file

@ -10,8 +10,6 @@
#define _RTLFUNCS_H
/* DEPENDENCIES **************************************************************/
#include "rtltypes.h"
#include "pstypes.h"
#include <ntnls.h>
/* PROTOTYPES ****************************************************************/

View file

@ -10,7 +10,6 @@
#define _RTLTYPES_H
/* DEPENDENCIES **************************************************************/
#include "zwtypes.h"
#include "excpt.h"
/* EXPORTED DATA *************************************************************/
@ -52,6 +51,167 @@
#define RTL_RANGE_SHARED 0x01
#define RTL_RANGE_CONFLICT 0x02
/* Run-Time Library (RTL) Registry Constants */
#define RTL_REGISTRY_ABSOLUTE 0
#define RTL_REGISTRY_SERVICES 1
#define RTL_REGISTRY_CONTROL 2
#define RTL_REGISTRY_WINDOWS_NT 3
#define RTL_REGISTRY_DEVICEMAP 4
#define RTL_REGISTRY_USER 5
#define RTL_REGISTRY_MAXIMUM 6
#define RTL_REGISTRY_HANDLE 0x40000000
#define RTL_REGISTRY_OPTIONAL 0x80000000
#define RTL_QUERY_REGISTRY_SUBKEY 0x00000001
#define RTL_QUERY_REGISTRY_TOPKEY 0x00000002
#define RTL_QUERY_REGISTRY_REQUIRED 0x00000004
#define RTL_QUERY_REGISTRY_NOVALUE 0x00000008
#define RTL_QUERY_REGISTRY_NOEXPAND 0x00000010
#define RTL_QUERY_REGISTRY_DIRECT 0x00000020
#define RTL_QUERY_REGISTRY_DELETE 0x00000040
/* Version Constants */
#define VER_MINORVERSION 0x0000001
#define VER_MAJORVERSION 0x0000002
#define VER_BUILDNUMBER 0x0000004
#define VER_PLATFORMID 0x0000008
#define VER_SERVICEPACKMINOR 0x0000010
#define VER_SERVICEPACKMAJOR 0x0000020
#define VER_SUITENAME 0x0000040
#define VER_PRODUCT_TYPE 0x0000080
#define VER_PLATFORM_WIN32s 0
#define VER_PLATFORM_WIN32_WINDOWS 1
#define VER_PLATFORM_WIN32_NT 2
#define VER_EQUAL 1
#define VER_GREATER 2
#define VER_GREATER_EQUAL 3
#define VER_LESS 4
#define VER_LESS_EQUAL 5
#define VER_AND 6
#define VER_OR 7
#define VER_CONDITION_MASK 7
#define VER_NUM_BITS_PER_CONDITION_MASK 3
/* RTL String Hash Algorithms */
#define HASH_STRING_ALGORITHM_DEFAULT 0
#define HASH_STRING_ALGORITHM_X65599 1
#define HASH_STRING_ALGORITHM_INVALID 0xffffffff
#ifdef NTOS_MODE_USER
/* List Macros */
static __inline
VOID
InitializeListHead(
IN PLIST_ENTRY ListHead)
{
ListHead->Flink = ListHead->Blink = ListHead;
}
static __inline
VOID
InsertHeadList(
IN PLIST_ENTRY ListHead,
IN PLIST_ENTRY Entry)
{
PLIST_ENTRY OldFlink;
OldFlink = ListHead->Flink;
Entry->Flink = OldFlink;
Entry->Blink = ListHead;
OldFlink->Blink = Entry;
ListHead->Flink = Entry;
}
static __inline
VOID
InsertTailList(
IN PLIST_ENTRY ListHead,
IN PLIST_ENTRY Entry)
{
PLIST_ENTRY OldBlink;
OldBlink = ListHead->Blink;
Entry->Flink = ListHead;
Entry->Blink = OldBlink;
OldBlink->Flink = Entry;
ListHead->Blink = Entry;
}
#define IsListEmpty(ListHead) \
((ListHead)->Flink == (ListHead))
#define PopEntryList(ListHead) \
(ListHead)->Next; \
{ \
PSINGLE_LIST_ENTRY _FirstEntry; \
_FirstEntry = (ListHead)->Next; \
if (_FirstEntry != NULL) \
(ListHead)->Next = _FirstEntry->Next; \
}
#define PushEntryList(_ListHead, _Entry) \
(_Entry)->Next = (_ListHead)->Next; \
(_ListHead)->Next = (_Entry); \
static __inline
BOOLEAN
RemoveEntryList(
IN PLIST_ENTRY Entry)
{
PLIST_ENTRY OldFlink;
PLIST_ENTRY OldBlink;
OldFlink = Entry->Flink;
OldBlink = Entry->Blink;
OldFlink->Blink = OldBlink;
OldBlink->Flink = OldFlink;
return (OldFlink == OldBlink);
}
static __inline
PLIST_ENTRY
RemoveHeadList(
IN PLIST_ENTRY ListHead)
{
PLIST_ENTRY Flink;
PLIST_ENTRY Entry;
Entry = ListHead->Flink;
Flink = Entry->Flink;
ListHead->Flink = Flink;
Flink->Blink = ListHead;
return Entry;
}
static __inline
PLIST_ENTRY
RemoveTailList(
IN PLIST_ENTRY ListHead)
{
PLIST_ENTRY Blink;
PLIST_ENTRY Entry;
Entry = ListHead->Blink;
Blink = Entry->Blink;
ListHead->Blink = Blink;
Blink->Flink = ListHead;
return Entry;
}
#define IsFirstEntry(ListHead, Entry) \
((ListHead)->Flink == Entry)
#define IsLastEntry(ListHead, Entry) \
((ListHead)->Blink == Entry)
/*
* Constant String Macro
*/
#define RTL_CONSTANT_STRING(__SOURCE_STRING__) \
{ \
sizeof(__SOURCE_STRING__) - sizeof((__SOURCE_STRING__)[0]), \
sizeof(__SOURCE_STRING__), \
(__SOURCE_STRING__) \
}
#endif
/* FIXME: Rename these */
#define PDI_MODULES 0x01 /* The loaded modules of the process */
#define PDI_BACKTRACE 0x02 /* The heap stack back traces */
@ -68,6 +228,21 @@
/* ENUMERATIONS **************************************************************/
typedef enum _TABLE_SEARCH_RESULT
{
TableEmptyTree,
TableFoundNode,
TableInsertAsLeft,
TableInsertAsRight
} TABLE_SEARCH_RESULT;
typedef enum _RTL_GENERIC_COMPARE_RESULTS
{
GenericLessThan,
GenericGreaterThan,
GenericEqual
} RTL_GENERIC_COMPARE_RESULTS;
typedef enum
{
INVALID_PATH = 0,
@ -81,6 +256,10 @@ typedef enum
} DOS_PATHNAME_TYPE;
/* FUNCTION TYPES ************************************************************/
struct _RTL_AVL_TABLE;
struct _RTL_GENERIC_TABLE;
struct _RTL_RANGE;
typedef NTSTATUS
(*PHEAP_ENUMERATION_ROUTINE)(
IN PVOID HeapHandle,
@ -109,18 +288,219 @@ typedef VOID
PVOID Parameter
);
typedef NTSTATUS
(NTAPI *PRTL_AVL_MATCH_FUNCTION)(
struct _RTL_AVL_TABLE *Table,
PVOID UserData,
PVOID MatchData
);
typedef RTL_GENERIC_COMPARE_RESULTS
(NTAPI *PRTL_AVL_COMPARE_ROUTINE) (
struct _RTL_AVL_TABLE *Table,
PVOID FirstStruct,
PVOID SecondStruct
);
typedef RTL_GENERIC_COMPARE_RESULTS
(NTAPI *PRTL_GENERIC_COMPARE_ROUTINE) (
struct _RTL_GENERIC_TABLE *Table,
PVOID FirstStruct,
PVOID SecondStruct
);
typedef PVOID
(NTAPI *PRTL_GENERIC_ALLOCATE_ROUTINE) (
struct _RTL_GENERIC_TABLE *Table,
LONG ByteSize
);
typedef VOID
(NTAPI *PRTL_GENERIC_FREE_ROUTINE) (
struct _RTL_GENERIC_TABLE *Table,
PVOID Buffer
);
typedef VOID
(NTAPI *PRTL_AVL_ALLOCATE_ROUTINE) (
struct _RTL_AVL_TABLE *Table,
LONG ByteSize
);
typedef VOID
(NTAPI *PRTL_AVL_FREE_ROUTINE) (
struct _RTL_AVL_TABLE *Table,
PVOID Buffer
);
typedef NTSTATUS
(NTAPI *PRTL_QUERY_REGISTRY_ROUTINE)(
IN PWSTR ValueName,
IN ULONG ValueType,
IN PVOID ValueData,
IN ULONG ValueLength,
IN PVOID Context,
IN PVOID EntryContext
);
typedef NTSTATUS
(NTAPI * PRTL_HEAP_COMMIT_ROUTINE)(
IN PVOID Base,
IN OUT PVOID *CommitAddress,
IN OUT PSIZE_T CommitSize
);
typedef BOOLEAN
(NTAPI *PRTL_CONFLICT_RANGE_CALLBACK) (
PVOID Context,
struct _RTL_RANGE *Range
);
/* TYPES *********************************************************************/
typedef unsigned short RTL_ATOM;
typedef unsigned short *PRTL_ATOM;
#ifdef NTOS_MODE_USER
typedef OSVERSIONINFOW RTL_OSVERSIONINFOW;
typedef LPOSVERSIONINFOW PRTL_OSVERSIONINFOW;
typedef OSVERSIONINFOEXW RTL_OSVERSIONINFOEXW;
typedef LPOSVERSIONINFOEXW PRTL_OSVERSIONINFOEXW;
/* Once again, we don't want to force NTIFS for something like this */
#if !defined(_NTIFS_) && !defined(NTOS_MODE_USER)
typedef PVOID PRTL_HEAP_PARAMETERS;
#endif
typedef struct _RTL_HEAP_PARAMETERS
{
ULONG Length;
SIZE_T SegmentReserve;
SIZE_T SegmentCommit;
SIZE_T DeCommitFreeBlockThreshold;
SIZE_T DeCommitTotalFreeThreshold;
SIZE_T MaximumAllocationSize;
SIZE_T VirtualMemoryThreshold;
SIZE_T InitialCommit;
SIZE_T InitialReserve;
PRTL_HEAP_COMMIT_ROUTINE CommitRoutine;
SIZE_T Reserved[2];
} RTL_HEAP_PARAMETERS, *PRTL_HEAP_PARAMETERS;
typedef struct _RTL_BITMAP
{
ULONG SizeOfBitMap;
PULONG Buffer;
} RTL_BITMAP, *PRTL_BITMAP;
typedef struct _RTL_BITMAP_RUN
{
ULONG StartingIndex;
ULONG NumberOfBits;
} RTL_BITMAP_RUN, *PRTL_BITMAP_RUN;
typedef struct _COMPRESSED_DATA_INFO
{
USHORT CompressionFormatAndEngine;
UCHAR CompressionUnitShift;
UCHAR ChunkShift;
UCHAR ClusterShift;
UCHAR Reserved;
USHORT NumberOfChunks;
ULONG CompressedChunkSizes[ANYSIZE_ARRAY];
} COMPRESSED_DATA_INFO, *PCOMPRESSED_DATA_INFO;
typedef struct _GENERATE_NAME_CONTEXT
{
USHORT Checksum;
BOOLEAN CheckSumInserted;
UCHAR NameLength;
WCHAR NameBuffer[8];
ULONG ExtensionLength;
WCHAR ExtensionBuffer[4];
ULONG LastIndexValue;
} GENERATE_NAME_CONTEXT, *PGENERATE_NAME_CONTEXT;
typedef struct _RTL_SPLAY_LINKS
{
struct _RTL_SPLAY_LINKS *Parent;
struct _RTL_SPLAY_LINKS *LeftChild;
struct _RTL_SPLAY_LINKS *RightChild;
} RTL_SPLAY_LINKS, *PRTL_SPLAY_LINKS;
typedef ACL_REVISION_INFORMATION *PACL_REVISION_INFORMATION;
typedef ACL_SIZE_INFORMATION *PACL_SIZE_INFORMATION;
typedef struct _RTL_GENERIC_TABLE
{
PRTL_SPLAY_LINKS TableRoot;
LIST_ENTRY InsertOrderList;
PLIST_ENTRY OrderedPointer;
ULONG WhichOrderedElement;
ULONG NumberGenericTableElements;
PRTL_GENERIC_COMPARE_ROUTINE CompareRoutine;
PRTL_GENERIC_ALLOCATE_ROUTINE AllocateRoutine;
PRTL_GENERIC_FREE_ROUTINE FreeRoutine;
PVOID TableContext;
} RTL_GENERIC_TABLE, *PRTL_GENERIC_TABLE;
typedef struct _RTL_BALANCED_LINKS
{
struct _RTL_BALANCED_LINKS *Parent;
struct _RTL_BALANCED_LINKS *LeftChild;
struct _RTL_BALANCED_LINKS *RightChild;
CHAR Balance;
UCHAR Reserved[3];
} RTL_BALANCED_LINKS, *PRTL_BALANCED_LINKS;
typedef struct _RTL_AVL_TABLE
{
RTL_BALANCED_LINKS BalancedRoot;
PVOID OrderedPointer;
ULONG WhichOrderedElement;
ULONG NumberGenericTableElements;
ULONG DepthOfTree;
PRTL_BALANCED_LINKS RestartKey;
ULONG DeleteCount;
PRTL_AVL_COMPARE_ROUTINE CompareRoutine;
PRTL_AVL_ALLOCATE_ROUTINE AllocateRoutine;
PRTL_AVL_FREE_ROUTINE FreeRoutine;
PVOID TableContext;
} RTL_AVL_TABLE, *PRTL_AVL_TABLE;
typedef struct _RTL_QUERY_REGISTRY_TABLE
{
PRTL_QUERY_REGISTRY_ROUTINE QueryRoutine;
ULONG Flags;
PWSTR Name;
PVOID EntryContext;
ULONG DefaultType;
PVOID DefaultData;
ULONG DefaultLength;
} RTL_QUERY_REGISTRY_TABLE, *PRTL_QUERY_REGISTRY_TABLE;
typedef struct _UNICODE_PREFIX_TABLE_ENTRY
{
CSHORT NodeTypeCode;
CSHORT NameLength;
struct _UNICODE_PREFIX_TABLE_ENTRY *NextPrefixTree;
struct _UNICODE_PREFIX_TABLE_ENTRY *CaseMatch;
RTL_SPLAY_LINKS Links;
PUNICODE_STRING Prefix;
} UNICODE_PREFIX_TABLE_ENTRY, *PUNICODE_PREFIX_TABLE_ENTRY;
typedef struct _UNICODE_PREFIX_TABLE
{
CSHORT NodeTypeCode;
CSHORT NameLength;
PUNICODE_PREFIX_TABLE_ENTRY NextPrefixTree;
PUNICODE_PREFIX_TABLE_ENTRY LastNextEntry;
} UNICODE_PREFIX_TABLE, *PUNICODE_PREFIX_TABLE;
typedef struct _TIME_FIELDS
{
CSHORT Year;
CSHORT Month;
CSHORT Day;
CSHORT Hour;
CSHORT Minute;
CSHORT Second;
CSHORT Milliseconds;
CSHORT Weekday;
} TIME_FIELDS, *PTIME_FIELDS;
#endif
typedef struct _ACE
{
ACE_HEADER Header;
@ -269,12 +649,6 @@ typedef struct _RTL_RANGE
UCHAR Flags; /* RTL_RANGE_... flags */
} RTL_RANGE, *PRTL_RANGE;
typedef BOOLEAN
(NTAPI *PRTL_CONFLICT_RANGE_CALLBACK) (
PVOID Context,
PRTL_RANGE Range
);
typedef struct _RTL_RESOURCE
{
RTL_CRITICAL_SECTION Lock;
@ -381,6 +755,10 @@ typedef struct _RTL_ATOM_TABLE_ENTRY
WCHAR Name[1];
} RTL_ATOM_TABLE_ENTRY, *PRTL_ATOM_TABLE_ENTRY;
#ifdef NTOS_MODE_USER
typedef RTL_CRITICAL_SECTION FAST_MUTEX;
typedef RTL_HANDLE_TABLE HANDLE_TABLE, *PHANDLE_TABLE;
#endif
typedef struct _RTL_ATOM_TABLE
{
ULONG Signature;

View file

@ -8,9 +8,6 @@
#define _UMFUNCS_H
/* DEPENDENCIES **************************************************************/
#include "ldrtypes.h"
#include "lpctypes.h"
#include "rtltypes.h"
/* PROTOTYPES ****************************************************************/
@ -28,6 +25,7 @@ CsrClientConnectToServer(
PBOOLEAN ServerToServerCall
);
struct _CSR_API_MESSAGE;
NTSTATUS
STDCALL
CsrClientCallServer(

File diff suppressed because it is too large Load diff

View file

@ -10,9 +10,6 @@
#define _ZWFUNCS_H
/* DEPENDENCIES **************************************************************/
#include "lpctypes.h"
#include "zwtypes.h"
#include "kdtypes.h"
#define _WMIKM_
#include <evntrace.h>

View file

@ -10,7 +10,6 @@
#define _ZWTYPES_H
/* DEPENDENCIES **************************************************************/
#include "rtltypes.h"
#include <cfg.h>
/* EXPORTED DATA *************************************************************/
@ -285,8 +284,8 @@ typedef enum _PLUGPLAY_CONTROL_CLASS
/* TYPES *********************************************************************/
typedef unsigned short LANGID;
typedef LANGID *PLANGID;
typedef USHORT LANGID, *PLANGID;
typedef USHORT RTL_ATOM, *PRTL_ATOM;
typedef struct _PLUGPLAY_EVENT_BLOCK
{

View file

@ -115,6 +115,9 @@ typedef unsigned __int64 UINT64, *PUINT64;
typedef signed short INT16, *PINT16;
typedef unsigned short UINT16, *PUINT16;
typedef ULONG_PTR KAFFINITY;
typedef KAFFINITY *PKAFFINITY;
#ifdef __cplusplus
}
#endif

View file

@ -3338,6 +3338,7 @@ typedef struct _SYSTEM_BATTERY_STATE {
ULONG DefaultAlert2;
} SYSTEM_BATTERY_STATE, *PSYSTEM_BATTERY_STATE;
typedef DWORD EXECUTION_STATE;
typedef enum _POWER_INFORMATION_LEVEL {
SystemPowerPolicyAc,
SystemPowerPolicyDc,