Fixup sysinfo.c SystemProcessInfo header.
[reactos.git] / reactos / include / ntos / zwtypes.h
index ea7dd8c..d523d84 100755 (executable)
@@ -1,24 +1,41 @@
-#ifndef __INCLUDE_DDK_ZWTYPES_H
-#define __INCLUDE_DDK_ZWTYPES_H
+#ifndef __INCLUDE_NTOS_ZWTYPES_H
+#define __INCLUDE_NTOS_ZWTYPES_H
 
 #ifndef __USE_W32API
 
-typedef enum _THREAD_STATE {
-       StateInitialized,
-       StateReady,
-       StateRunning,
-       StateStandby,
-       StateTerminated,
-       StateWait,
-       StateTransition,
-       StateUnknown
-} THREAD_STATE;
+typedef unsigned short LANGID;
+typedef LANGID *PLANGID;
+
+typedef struct _LDT_ENTRY {
+  WORD LimitLow;
+  WORD BaseLow;
+  union {
+    struct {
+      BYTE BaseMid;
+      BYTE Flags1;
+      BYTE Flags2;
+      BYTE BaseHi;
+    } Bytes;
+    struct {
+      DWORD BaseMid : 8;
+      DWORD Type : 5;
+      DWORD Dpl : 2;
+      DWORD Pres : 1;
+      DWORD LimitHi : 4;
+      DWORD Sys : 1;
+      DWORD Reserved_0 : 1;
+      DWORD Default_Big : 1;
+      DWORD Granularity : 1;
+      DWORD BaseHi : 8;
+    } Bits;
+  } HighWord;
+} LDT_ENTRY, *PLDT_ENTRY, *LPLDT_ENTRY;
 
 typedef enum _DEBUG_CONTROL_CODE
 {
   DebugGetTraceInformation = 1,
   DebugSetInternalBreakpoint,
-  DebugSetSpecialCalls,
+  DebugSetSpecialCall,
   DebugClearSpecialCalls,
   DebugQuerySpecialCalls,
   DebugDbgBreakPoint,
@@ -30,6 +47,7 @@ typedef enum _KPROFILE_SOURCE
   ProfileTime
 } KPROFILE_SOURCE;
 
+
 // file disposition values
 
 #define FILE_SUPERSEDE                  0x0000
@@ -202,113 +220,178 @@ enum _SYSTEM_INFORMATION_CLASS
 } SYSTEM_INFORMATION_CLASS;
 
 // SystemBasicInformation (0)
+// Modified by Andrew Greenwood (15th July 2003) to match Win 32 API headers
 typedef
 struct _SYSTEM_BASIC_INFORMATION
 {
-       ULONG           Reserved;
-       ULONG           TimerResolution;
-       ULONG           PageSize;
+       ULONG           Unknown;
+       ULONG           MaximumIncrement;
+       ULONG           PhysicalPageSize;
        ULONG           NumberOfPhysicalPages;
-       ULONG           LowestPhysicalPageNumber;
-       ULONG           HighestPhysicalPageNumber;
+       ULONG           LowestPhysicalPage;
+       ULONG           HighestPhysicalPage;
        ULONG           AllocationGranularity;
-       ULONG           MinimumUserModeAddress;
-       ULONG           MaximumUserModeAddress;
-       KAFFINITY       ActiveProcessorsAffinityMask;
-       CCHAR           NumberOfProcessors;
+       ULONG           LowestUserAddress;
+       ULONG           HighestUserAddress;
+       KAFFINITY       ActiveProcessors;
+       CCHAR           NumberProcessors;
 } SYSTEM_BASIC_INFORMATION, *PSYSTEM_BASIC_INFORMATION;
 
 // SystemProcessorInformation (1)
-typedef
-struct _SYSTEM_PROCESSOR_INFORMATION
-{
-       USHORT  ProcessorArchitecture;
-       USHORT  ProcessorLevel;
-       USHORT  ProcessorRevision;
-       USHORT  Reserved;
-       ULONG   ProcessorFeatureBits;
+// Modified by Andrew Greenwood (15th July 2003) to match Win 32 API headers
+typedef struct _SYSTEM_PROCESSOR_INFORMATION {
+       USHORT  ProcessorArchitecture;
+       USHORT  ProcessorLevel;
+       USHORT  ProcessorRevision;
+       USHORT  Unknown;
+       ULONG  FeatureBits;
 } SYSTEM_PROCESSOR_INFORMATION, *PSYSTEM_PROCESSOR_INFORMATION;
 
 // SystemPerformanceInfo (2)
-typedef
-struct _SYSTEM_PERFORMANCE_INFORMATION
-{
-       LARGE_INTEGER   IdleProcessorTime;
-       LARGE_INTEGER   IoReadTransferCount;
-       LARGE_INTEGER   IoWriteTransferCount;
-       LARGE_INTEGER   IoOtherTransferCount;
-       ULONG           IoReadOperationCount;
-       ULONG           IoWriteOperationCount;
-       ULONG           IoOtherOperationCount;
-       ULONG           AvailablePages;
-       ULONG           CommitedPages;
-       ULONG           CommitLimit;
-       ULONG           PeakCommitment;
-       ULONG           PageFaultCount;
-       ULONG           CopyOnWriteCount;
-       ULONG           TransitionCount;
-       ULONG           CacheTransitionCount;
-       ULONG           DemandZeroCount;
-       ULONG           PageReadCount;
-       ULONG           PageReadIoCount;
-       ULONG           CacheReadCount;
-       ULONG           CacheIoCount;
-       ULONG           DirtyPagesWriteCount;
-       ULONG           DirtyWriteIoCount;
-       ULONG           MappedPagesWriteCount;
-       ULONG           MappedWriteIoCount;
-       ULONG           PagedPoolPages;
-       ULONG           NonPagedPoolPages;
-       ULONG           Unknown6;
-       ULONG           Unknown7;
-       ULONG           Unknown8;
-       ULONG           Unknown9;
-       ULONG           MmTotalSystemFreePtes;
-       ULONG           MmSystemCodepage;
-       ULONG           MmTotalSystemDriverPages;
-       ULONG           MmTotalSystemCodePages;
-       ULONG           Unknown10;
-       ULONG           Unknown11;
-       ULONG           Unknown12;
-       ULONG           MmSystemCachePage;
-       ULONG           MmPagedPoolPage;
-       ULONG           MmSystemDriverPage;
-       ULONG           CcFastReadNoWait;
-       ULONG           CcFastReadWait;
-       ULONG           CcFastReadResourceMiss;
-       ULONG           CcFastReadNotPossible;
-       ULONG           CcFastMdlReadNoWait;
-       ULONG           CcFastMdlReadWait;
-       ULONG           CcFastMdlReadResourceMiss;
-       ULONG           CcFastMdlReadNotPossible;
-       ULONG           CcMapDataNoWait;
-       ULONG           CcMapDataWait;
-       ULONG           CcMapDataNoWaitMiss;
-       ULONG           CcMapDataWaitMiss;
-       ULONG           CcPinMappedDataCount;
-       ULONG           CcPinReadNoWait;
-       ULONG           CcPinReadWait;
-       ULONG           CcPinReadNoWaitMiss;
-       ULONG           CcPinReadWaitMiss;
-       ULONG           CcCopyReadNoWait;
-       ULONG           CcCopyReadWait;
-       ULONG           CcCopyReadNoWaitMiss;
-       ULONG           CcCopyReadWaitMiss;
-       ULONG           CcMdlReadNoWait;
-       ULONG           CcMdlReadWait;
-       ULONG           CcMdlReadNoWaitMiss;
-       ULONG           CcMdlReadWaitMiss;
-       ULONG           CcReadaheadIos;
-       ULONG           CcLazyWriteIos;
-       ULONG           CcLazyWritePages;
-       ULONG           CcDataFlushes;
-       ULONG           CcDataPages;
-       ULONG           ContextSwitches;
-       ULONG           Unknown13;
-       ULONG           Unknown14;
-       ULONG           SystemCalls;
-
-} SYSTEM_PERFORMANCE_INFO, *PSYSTEM_PERFORMANCE_INFO;
+// Modified by Andrew Greenwood (15th July 2003) to match Win 32 API headers
+typedef struct _SYSTEM_PERFORMANCE_INFORMATION {
+       LARGE_INTEGER  IdleTime;
+       LARGE_INTEGER  ReadTransferCount;
+       LARGE_INTEGER  WriteTransferCount;
+       LARGE_INTEGER  OtherTransferCount;
+       ULONG  ReadOperationCount;
+       ULONG  WriteOperationCount;
+       ULONG  OtherOperationCount;
+       ULONG  AvailablePages;
+       ULONG  TotalCommittedPages;
+       ULONG  TotalCommitLimit;
+       ULONG  PeakCommitment;
+       ULONG  PageFaults;
+       ULONG  WriteCopyFaults;
+       ULONG  TransitionFaults;
+       ULONG  CacheTransitionFaults;
+       ULONG  DemandZeroFaults;
+       ULONG  PagesRead;
+       ULONG  PageReadIos;
+       ULONG    CacheReads;
+       ULONG    CacheIos;
+       ULONG  PagefilePagesWritten;
+       ULONG  PagefilePageWriteIos;
+       ULONG  MappedFilePagesWritten;
+       ULONG  MappedFilePageWriteIos;
+       ULONG  PagedPoolUsage;
+       ULONG  NonPagedPoolUsage;
+       ULONG  PagedPoolAllocs;
+       ULONG  PagedPoolFrees;
+       ULONG  NonPagedPoolAllocs;
+       ULONG  NonPagedPoolFrees;
+       ULONG  TotalFreeSystemPtes;
+       ULONG  SystemCodePage;
+       ULONG  TotalSystemDriverPages;
+       ULONG  TotalSystemCodePages;
+       ULONG  SmallNonPagedLookasideListAllocateHits;
+       ULONG  SmallPagedLookasideListAllocateHits;
+       ULONG  Reserved3;
+       ULONG  MmSystemCachePage;
+       ULONG  PagedPoolPage;
+       ULONG  SystemDriverPage;
+       ULONG  FastReadNoWait;
+       ULONG  FastReadWait;
+       ULONG  FastReadResourceMiss;
+       ULONG  FastReadNotPossible;
+       ULONG  FastMdlReadNoWait;
+       ULONG  FastMdlReadWait;
+       ULONG  FastMdlReadResourceMiss;
+       ULONG  FastMdlReadNotPossible;
+       ULONG  MapDataNoWait;
+       ULONG  MapDataWait;
+       ULONG  MapDataNoWaitMiss;
+       ULONG  MapDataWaitMiss;
+       ULONG  PinMappedDataCount;
+       ULONG  PinReadNoWait;
+       ULONG  PinReadWait;
+       ULONG  PinReadNoWaitMiss;
+       ULONG  PinReadWaitMiss;
+       ULONG  CopyReadNoWait;
+       ULONG  CopyReadWait;
+       ULONG  CopyReadNoWaitMiss;
+       ULONG  CopyReadWaitMiss;
+       ULONG  MdlReadNoWait;
+       ULONG  MdlReadWait;
+       ULONG  MdlReadNoWaitMiss;
+       ULONG  MdlReadWaitMiss;
+       ULONG  ReadAheadIos;
+       ULONG  LazyWriteIos;
+       ULONG  LazyWritePages;
+       ULONG  DataFlushes;
+       ULONG  DataPages;
+       ULONG  ContextSwitches;
+       ULONG  FirstLevelTbFills;
+       ULONG  SecondLevelTbFills;
+       ULONG  SystemCalls;
+} SYSTEM_PERFORMANCE_INFORMATION, *PSYSTEM_PERFORMANCE_INFORMATION;
+
+/*#ifndef __USE_W32API*/
+
+// SystemProcessThreadInfo (5)
+typedef struct _SYSTEM_THREAD_INFORMATION 
+{
+    LARGE_INTEGER KernelTime;
+    LARGE_INTEGER UserTime;
+    LARGE_INTEGER CreateTime;
+    ULONG WaitTime;
+    PVOID StartAddress;
+    CLIENT_ID ClientId;
+    KPRIORITY Priority;
+    LONG BasePriority;
+    ULONG ContextSwitches;
+    ULONG ThreadState;
+    ULONG WaitReason;
+} SYSTEM_THREAD_INFORMATION, *PSYSTEM_THREAD_INFORMATION;
+
+typedef struct _SYSTEM_PROCESS_INFORMATION
+{
+    ULONG NextEntryOffset;
+    ULONG NumberOfThreads;
+    LARGE_INTEGER SpareLi1;
+    LARGE_INTEGER SpareLi2;
+    LARGE_INTEGER SpareLi3;
+    LARGE_INTEGER CreateTime;
+    LARGE_INTEGER UserTime;
+    LARGE_INTEGER KernelTime;
+    UNICODE_STRING ImageName;
+    KPRIORITY BasePriority;
+    HANDLE UniqueProcessId;
+    HANDLE InheritedFromUniqueProcessId;
+    ULONG HandleCount;
+    ULONG SessionId;
+    ULONG PageDirectoryFrame;
+    
+    /* 
+     * This part corresponds to VM_COUNTERS_EX. 
+     * NOTE: *NOT* THE SAME AS VM_COUNTERS!
+     */
+    ULONG PeakVirtualSize;
+    ULONG VirtualSize;
+    ULONG PageFaultCount;
+    ULONG PeakWorkingSetSize;
+    ULONG WorkingSetSize;
+    ULONG QuotaPeakPagedPoolUsage;
+    ULONG QuotaPagedPoolUsage;
+    ULONG QuotaPeakNonPagedPoolUsage;
+    ULONG QuotaNonPagedPoolUsage;
+    ULONG PagefileUsage;
+    ULONG PeakPagefileUsage;
+    ULONG PrivateUsage;
+    
+    /* This part corresponds to IO_COUNTERS */
+    LARGE_INTEGER ReadOperationCount;
+    LARGE_INTEGER WriteOperationCount;
+    LARGE_INTEGER OtherOperationCount;
+    LARGE_INTEGER ReadTransferCount;
+    LARGE_INTEGER WriteTransferCount;
+    LARGE_INTEGER OtherTransferCount;
+    
+    /* Finally, the array of Threads */
+    SYSTEM_THREAD_INFORMATION TH[1];
+} SYSTEM_PROCESS_INFORMATION, *PSYSTEM_PROCESS_INFORMATION;
+
+/*#endif */
 
 // SystemModuleInformation (11)
 typedef struct _SYSTEM_MODULE_INFORMATION_ENTRY {
@@ -334,22 +417,23 @@ typedef struct _SYSTEM_MODULE_INFORMATION {
 // SystemHandleInformation (16)
 // (see ontypes.h)
 typedef
-struct _SYSTEM_HANDLE_ENTRY
+struct _SYSTEM_HANDLE_TABLE_ENTRY_INFO
 {
-       ULONG   OwnerPid;
-       BYTE    ObjectType;
-       BYTE    HandleFlags;
+       USHORT  UniqueProcessId;
+       USHORT  CreatorBackTraceIndex;
+       UCHAR   ObjectTypeIndex;
+       UCHAR   HandleAttributes;
        USHORT  HandleValue;
-       PVOID   ObjectPointer;
-       ULONG   AccessMask;
+       PVOID   Object;
+       ULONG   GrantedAccess;
        
-} SYSTEM_HANDLE_ENTRY, *PSYSTEM_HANDLE_ENTRY;
+} SYSTEM_HANDLE_TABLE_ENTRY_INFO, *PSYSTEM_HANDLE_TABLE_ENTRY_INFO;
 
 typedef
 struct _SYSTEM_HANDLE_INFORMATION
 {
-       ULONG                   Count;
-       SYSTEM_HANDLE_ENTRY     Handle [1];
+       ULONG   NumberOfHandles;
+       SYSTEM_HANDLE_TABLE_ENTRY_INFO  Handles[1];
        
 } SYSTEM_HANDLE_INFORMATION, *PSYSTEM_HANDLE_INFORMATION;
 
@@ -392,12 +476,12 @@ struct _SYSTEM_OBJECT_INFORMATION
 typedef
 struct _SYSTEM_PAGEFILE_INFORMATION
 {
-       ULONG           RelativeOffset;
-       ULONG           CurrentSizePages;
-       ULONG           TotalUsedPages;
-       ULONG           PeakUsedPages;
-       UNICODE_STRING  PagefileFileName;
-       
+       ULONG   NextEntryOffset;
+       ULONG   TotalSize;
+       ULONG   TotalInUse;
+       ULONG   PeakUsage;
+       UNICODE_STRING  PageFileName;
+
 } SYSTEM_PAGEFILE_INFORMATION, *PSYSTEM_PAGEFILE_INFORMATION;
 
 // SystemCacheInformation (21)
@@ -409,10 +493,25 @@ struct _SYSTEM_CACHE_INFORMATION
        ULONG   PageFaultCount;
        ULONG   MinimumWorkingSet;
        ULONG   MaximumWorkingSet;
-       ULONG   Unused[4];
+       ULONG   TransitionSharedPages;
+       ULONG   TransitionSharedPagesPeak;
+       ULONG   Unused[2];
 
 } SYSTEM_CACHE_INFORMATION;
 
+// SystemInterruptInformation (23)
+typedef
+struct _SYSTEM_INTERRUPT_INFORMATION
+{
+       ULONG   ContextSwitches;
+       ULONG   DpcCount;
+       ULONG   DpcRate;
+       ULONG   TimeIncrement;
+       ULONG   DpcBypassCount;
+       ULONG   ApcBypassCount;
+
+} SYSTEM_INTERRUPT_INFORMATION, *PSYSTEM_INTERRUPT_INFORMATION;
+
 // SystemDpcInformation (24)
 typedef
 struct _SYSTEM_DPC_INFORMATION
@@ -457,7 +556,7 @@ struct _SYSTEM_SET_TIME_ADJUSTMENT
        ULONG   TimeAdjustment;
        BOOLEAN TimeSynchronization;
        
-} SYSTEM_TIME_ADJUSTMENT_INFO, *PSYSTEM_TIME_ADJUSTMENT_INFO;
+} SYSTEM_SET_TIME_ADJUSTMENT, *PSYSTEM_SET_TIME_ADJUSTMENT;
 
 // atom information
 
@@ -481,6 +580,14 @@ typedef struct _SYSTEM_LOAD_AND_CALL_IMAGE
   UNICODE_STRING ModuleName;
 } SYSTEM_LOAD_AND_CALL_IMAGE, *PSYSTEM_LOAD_AND_CALL_IMAGE;
 
+// SystemRegistryQuotaInformation (37)
+typedef struct _SYSTEM_REGISTRY_QUOTA_INFORMATION {
+  ULONG  RegistryQuotaAllowed;
+  ULONG  RegistryQuotaUsed;
+  PVOID  Reserved1;
+} SYSTEM_REGISTRY_QUOTA_INFORMATION, *PSYSTEM_REGISTRY_QUOTA_INFORMATION;
+
+
 // SystemTimeZoneInformation (44)
 typedef
 struct _SYSTEM_TIME_ZONE_INFORMATION
@@ -581,17 +688,17 @@ typedef struct _MEMORY_WORKING_SET_LIST { // Information Class 1
 } MEMORY_WORKING_SET_LIST, *PMEMORY_WORKING_SET_LIST;
 
 // Information Class 2
-#define _MEMORY_SECTION_NAME_STATIC(__bufsize__) \
+/*#define _MEMORY_SECTION_NAME_STATIC(__bufsize__) \
  { \
  UNICODE_STRING SectionFileName; \
  WCHAR          NameBuffer[(__bufsize__)]; \
-} 
-
-#define MEMORY_SECTION_NAME_STATIC(__bufsize__) \
- struct _MEMORY_SECTION_NAME_STATIC((__bufsize__) 
+}*/
 
-typedef struct _MEMORY_SECTION_NAME_STATIC(ANYSIZE_ARRAY)
- MEMORY_SECTION_NAME, *PMEMORY_SECTION_NAME;
+typedef struct
+{
+       UNICODE_STRING SectionFileName;
+       WCHAR          NameBuffer[ANYSIZE_ARRAY];
+} MEMORY_SECTION_NAME, *PMEMORY_SECTION_NAME;
 
 // Information class 0
 typedef struct _PROCESS_BASIC_INFORMATION
@@ -600,8 +707,8 @@ typedef struct _PROCESS_BASIC_INFORMATION
        PPEB PebBaseAddress;
        KAFFINITY AffinityMask;
        KPRIORITY BasePriority;
-       ULONG UniqueProcessId;
-       ULONG InheritedFromUniqueProcessId;
+       HANDLE UniqueProcessId;
+       HANDLE InheritedFromUniqueProcessId;
 } PROCESS_BASIC_INFORMATION, *PPROCESS_BASIC_INFORMATION;
 
 // Information class 1
@@ -609,8 +716,8 @@ typedef struct _QUOTA_LIMITS
 {
        ULONG PagedPoolLimit;
        ULONG NonPagedPoolLimit;
-       ULONG MinimumWorkingSetSize;
-       ULONG MaximumWorkingSetSize;
+       SIZE_T MinimumWorkingSetSize;
+       SIZE_T MaximumWorkingSetSize;
        ULONG PagefileLimit;
        TIME TimeLimit;
 } QUOTA_LIMITS, *PQUOTA_LIMITS;
@@ -645,10 +752,10 @@ typedef struct _VM_COUNTERS_
 // Information class 4
 typedef struct _KERNEL_USER_TIMES
 {
-       TIME CreateTime;
-       TIME ExitTime;
-       TIME KernelTime;
-       TIME UserTime;
+       LARGE_INTEGER CreateTime;
+       LARGE_INTEGER ExitTime;
+       LARGE_INTEGER KernelTime;
+       LARGE_INTEGER UserTime;
 } KERNEL_USER_TIMES, *PKERNEL_USER_TIMES;
 
 // Information class 9
@@ -698,7 +805,7 @@ typedef struct _PROCESS_DEVICEMAP_INFORMATION
                        UCHAR DriveType[32];
                } Query;
        };
-} PROCESS_DEVICEMAP_INFORMATION, *pPROCESS_DEVICEMAP_INFORMATION;
+} PROCESS_DEVICEMAP_INFORMATION, *PPROCESS_DEVICEMAP_INFORMATION;
 
 // Information class 24
 typedef struct _PROCESS_SESSION_INFORMATION
@@ -723,23 +830,7 @@ typedef struct _THREAD_BASIC_INFORMATION
 
 // file information
 
-typedef struct _FILE_BASIC_INFORMATION
-{
-       LARGE_INTEGER CreationTime;
-       LARGE_INTEGER LastAccessTime;
-       LARGE_INTEGER LastWriteTime;
-       LARGE_INTEGER ChangeTime;
-       ULONG FileAttributes;
-} FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION;
 
-typedef struct _FILE_STANDARD_INFORMATION
-{
-       LARGE_INTEGER AllocationSize;
-       LARGE_INTEGER EndOfFile;
-       ULONG NumberOfLinks;
-       BOOLEAN DeletePending;
-       BOOLEAN Directory;
-} FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION;
 
 typedef struct _FILE_POSITION_INFORMATION
 {
@@ -761,24 +852,13 @@ typedef struct _FILE_END_OF_FILE_INFORMATION
        LARGE_INTEGER EndOfFile;
 } FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION;
 
-typedef struct _FILE_NETWORK_OPEN_INFORMATION
-{
-       TIME CreationTime;
-       TIME LastAccessTime;
-       TIME LastWriteTime;
-       TIME ChangeTime;
-       LARGE_INTEGER AllocationSize;
-       LARGE_INTEGER EndOfFile;
-       ULONG FileAttributes;
-} FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION;
-
 typedef struct _FILE_FULL_EA_INFORMATION
 {
        ULONG NextEntryOffset;
        UCHAR Flags;
        UCHAR EaNameLength;
        USHORT EaValueLength;
-       CHAR  EaName[0];
+       CHAR  EaName[1];
 } FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION;
 
 
@@ -887,7 +967,7 @@ typedef struct _FILE_COMPRESSION_INFORMATION {
 
 typedef struct _FILE_COMPLETION_INFORMATION { // Information Class 30
    HANDLE IoCompletionHandle;
-   ULONG CompletionKey;
+   PVOID CompletionKey;
 } FILE_COMPLETION_INFORMATION, *PFILE_COMPLETION_INFORMATION;
 
 typedef struct _FILE_ALL_INFORMATION {
@@ -949,21 +1029,14 @@ typedef struct _FILE_FS_LABEL_INFORMATION {
        WCHAR VolumeLabel[0];
 } FILE_FS_LABEL_INFORMATION, *PFILE_FS_LABEL_INFORMATION;
 
-// read file scatter / write file scatter
-//FIXME I am a win32 struct aswell
-
-typedef union _FILE_SEGMENT_ELEMENT {
-       PVOID Buffer;
-       ULONG Alignment;
-}FILE_SEGMENT_ELEMENT, *PFILE_SEGMENT_ELEMENT;
 
 typedef struct _FILE_DIRECTORY_INFORMATION {
        ULONG   NextEntryOffset;
        ULONG   FileIndex;
-       TIME CreationTime;
-       TIME LastAccessTime;
-       TIME LastWriteTime;
-       TIME ChangeTime;
+       LARGE_INTEGER CreationTime;
+       LARGE_INTEGER LastAccessTime;
+       LARGE_INTEGER LastWriteTime;
+       LARGE_INTEGER ChangeTime;
        LARGE_INTEGER EndOfFile;
        LARGE_INTEGER AllocationSize;
        ULONG FileAttributes;
@@ -974,10 +1047,10 @@ typedef struct _FILE_DIRECTORY_INFORMATION {
 typedef struct _FILE_FULL_DIRECTORY_INFORMATION {
        ULONG   NextEntryOffset;
        ULONG   FileIndex;
-       TIME CreationTime;
-       TIME LastAccessTime;
-       TIME LastWriteTime;
-       TIME ChangeTime;
+       LARGE_INTEGER CreationTime;
+       LARGE_INTEGER LastAccessTime;
+       LARGE_INTEGER LastWriteTime;
+       LARGE_INTEGER ChangeTime;
        LARGE_INTEGER EndOfFile;
        LARGE_INTEGER AllocationSize;
        ULONG FileAttributes;
@@ -991,12 +1064,12 @@ typedef struct _FILE_FULL_DIRECTORY_INFORMATION {
 typedef struct _FILE_BOTH_DIRECTORY_INFORMATION {
        ULONG           NextEntryOffset;
        ULONG           FileIndex;
-       TIME            CreationTime;
-       TIME            LastAccessTime;
-       TIME            LastWriteTime;
-       TIME            ChangeTime;
-       LARGE_INTEGER   EndOfFile;
-       LARGE_INTEGER   AllocationSize;
+       LARGE_INTEGER   CreationTime;
+       LARGE_INTEGER   LastAccessTime;
+       LARGE_INTEGER   LastWriteTime;
+       LARGE_INTEGER   ChangeTime;
+       LARGE_INTEGER   EndOfFile;
+       LARGE_INTEGER   AllocationSize;
        ULONG           FileAttributes;
        ULONG           FileNameLength;
        ULONG           EaSize;
@@ -1025,37 +1098,27 @@ typedef struct _FILE_BOTH_DIRECTORY_INFORMATION {
 */
 
 typedef struct _FILE_NOTIFY_INFORMATION {
-       ULONG Action;
-       ULONG FileNameLength;
-       WCHAR FileName[0]; 
-} FILE_NOTIFY_INFORMATION;
+   ULONG NextEntryOffset;
+   ULONG Action;
+   ULONG NameLength;
+   WCHAR Name[1];
+} FILE_NOTIFY_INFORMATION, *PFILE_NOTIFY_INFORMATION;
 
 #define FSCTL_GET_VOLUME_BITMAP                        0x9006F
 #define FSCTL_GET_RETRIEVAL_POINTERS           0x90073
 #define FSCTL_MOVE_FILE                                0x90074
 
-typedef struct _MAPPING_PAIR
-{
-       ULONGLONG       Vcn;
-       ULONGLONG       Lcn;
-} MAPPING_PAIR, *PMAPPING_PAIR;
-
-typedef struct _GET_RETRIEVAL_DESCRIPTOR
-{
-       ULONG           NumberOfPairs;
-       ULONGLONG       StartVcn;
-       MAPPING_PAIR    Pair[0]; // variable size 
-} GET_RETRIEVAL_DESCRIPTOR, *PGET_RETRIEVAL_DESCRIPTOR;
-
-typedef struct _MOVEFILE_DESCRIPTOR
-{
-       HANDLE            FileHandle;
-       ULONG             Reserved;
-       LARGE_INTEGER     StartVcn;
-       LARGE_INTEGER     TargetLcn;
-       ULONG             NumVcns;
-       ULONG             Reserved1;
-} MOVEFILE_DESCRIPTOR, *PMOVEFILE_DESCRIPTOR;
+/* Structure copied from ntifs.h (Must be in sync!) */
+#include <pshpack8.h>
+typedef struct _RETRIEVAL_POINTERS_BUFFER {
+    ULONG               ExtentCount;
+    LARGE_INTEGER       StartingVcn;
+    struct {
+        LARGE_INTEGER   NextVcn;
+        LARGE_INTEGER   Lcn;
+    } Extents[1];
+} RETRIEVAL_POINTERS_BUFFER, *PRETRIEVAL_POINTERS_BUFFER;
+#include <poppack.h>
 
 typedef struct _SECTION_BASIC_INFORMATION
 {
@@ -1083,7 +1146,7 @@ typedef enum _IO_COMPLETION_INFORMATION_CLASS {
 } IO_COMPLETION_INFORMATION_CLASS;
 
 typedef struct _IO_COMPLETION_BASIC_INFORMATION {
-   LONG SignalState;
+   LONG Depth;
 } IO_COMPLETION_BASIC_INFORMATION, *PIO_COMPLETION_BASIC_INFORMATION;
 
 #else /* __USE_W32API */
@@ -1092,17 +1155,31 @@ typedef struct _IO_COMPLETION_BASIC_INFORMATION {
 
 #endif /* __USE_W32API */
 
+#ifdef __USE_W32API
+#include <ddk/ntddk.h>
+#endif /* __USE_W32API */
+#ifndef NtCurrentProcess
 #define NtCurrentProcess() ( (HANDLE) 0xFFFFFFFF )
+#endif /* NtCurrentProcess */
+#ifndef NtCurrentThread
 #define NtCurrentThread() ( (HANDLE) 0xFFFFFFFE )
-#if 1
-extern ULONG NtBuildNumber;
-#else
+#endif /* NtCurrentThread */
+
+#ifdef __GNUC__
 #ifdef __NTOSKRNL__
-extern ULONG NtBuildNumber;
+extern ULONG EXPORTED NtBuildNumber;
 #else
-extern ULONG NtBuildNumber;
+extern ULONG IMPORTED NtBuildNumber;
 #endif
+#else
+/* Microsoft-style declarations */
+#ifdef __NTOSKRNL__
+extern EXPORTED ULONG NtBuildNumber;
+#else
+extern IMPORTED ULONG NtBuildNumber;
 #endif
+#endif /* __GNUC__ */
+
 
 // event access mask
 
@@ -1138,10 +1215,17 @@ extern ULONG NtBuildNumber;
 #define ProcessSessionInformation              24
 #define ProcessForegroundInformation           25
 #define ProcessWow64Information                        26
-/* ReactOS private. */
 #define ProcessImageFileName                   27
-#define ProcessDesktop                          28
-#define MaxProcessInfoClass                    29
+#define ProcessLUIDDeviceMapsEnabled            28
+#define ProcessBreakOnTermination               29
+#define ProcessDebugObjectHandle                30
+#define ProcessDebugFlags                       31
+#define ProcessHandleTracing                    32
+#define ProcessUnknown33                        33
+#define ProcessUnknown34                        34
+#define ProcessUnknown35                        35
+#define ProcessCookie                           36
+#define MaxProcessInfoClass                     36
 
 /*
  * thread query / set information class
@@ -1166,13 +1250,6 @@ extern ULONG NtBuildNumber;
 #define ThreadHideFromDebugger                 17
 #define MaxThreadInfoClass                     17
 
-// object handle information
-
-#define ObjectBasicInformation                 0
-#define ObjectNameInformation                  1
-#define ObjectTypeInformation                  2
-#define ObjectAllInformation                   3
-#define ObjectDataInformation                  4
 
 typedef struct _ATOM_TABLE_INFORMATION
 {
@@ -1190,9 +1267,9 @@ typedef enum _MUTANT_INFORMATION_CLASS
 
 typedef struct _MUTANT_BASIC_INFORMATION
 {
-  LONG Count;
-  BOOLEAN Owned;
-  BOOLEAN Abandoned;
+  LONG CurrentCount;
+  BOOLEAN OwnedByCaller;
+  BOOLEAN AbandonedState;
 } MUTANT_BASIC_INFORMATION, *PMUTANT_BASIC_INFORMATION;
 
 
@@ -1216,69 +1293,6 @@ struct _SYSTEM_PATH_INFORMATION
 
 } SYSTEM_PATH_INFORMATION, * PSYSTEM_PATH_INFORMATION;
 
-// SystemProcessInformation (5)
-
-#ifndef __USE_W32API
-
-typedef struct _SYSTEM_THREADS {
-       LARGE_INTEGER  KernelTime;
-       LARGE_INTEGER  UserTime;
-       LARGE_INTEGER  CreateTime;
-       ULONG  WaitTime;
-       PVOID  StartAddress;
-       CLIENT_ID  ClientId;
-       KPRIORITY  Priority;
-       KPRIORITY  BasePriority;
-       ULONG  ContextSwitchCount;
-       THREAD_STATE  State;
-       KWAIT_REASON  WaitReason;
-} SYSTEM_THREADS, *PSYSTEM_THREADS;
-
-#endif /* __USE_W32API */
-
-typedef struct _SYSTEM_PROCESSES_NT4
-{
- SIZE_T         NextEntryDelta;
- ULONG          ThreadCount;
- ULONG          Reserved1[6];
- TIME           CreateTime;
- TIME           UserTime;
- TIME           KernelTime;
- UNICODE_STRING ProcessName;
- KPRIORITY      BasePriority;
- ULONG          ProcessId;
- ULONG          InheritedFromProcessId;
- ULONG          HandleCount;
- ULONG          Reserved2[2];
- VM_COUNTERS    VmCounters;
- SYSTEM_THREADS Threads[ANYSIZE_ARRAY];
-} SYSTEM_PROCESSES_NT4, *PSYSTEM_PROCESSES_NT4;
-
-typedef struct _SYSTEM_PROCESSES_NT5
-{
- SIZE_T         NextEntryDelta;
- ULONG          ThreadCount;
- ULONG          Reserved1[6];
- TIME           CreateTime;
- TIME           UserTime;
- TIME           KernelTime;
- UNICODE_STRING ProcessName;
- KPRIORITY      BasePriority;
- ULONG          ProcessId;
- ULONG          InheritedFromProcessId;
- ULONG          HandleCount;
- ULONG          Reserved2[2];
- VM_COUNTERS    VmCounters;
- IO_COUNTERS    IoCounters;
- SYSTEM_THREADS Threads[ANYSIZE_ARRAY];
-} SYSTEM_PROCESSES_NT5, *PSYSTEM_PROCESSES_NT5;
-
-#ifndef __USE_W32API
-
-/* Not sure. What version are we emulating? */
-typedef SYSTEM_PROCESSES_NT5 SYSTEM_PROCESSES, *PSYSTEM_PROCESSES;
-
-#endif /* __USE_W32API */
 
 // SystemCallCountInformation (6)
 typedef
@@ -1306,17 +1320,17 @@ struct _SYSTEM_DEVICE_INFORMATION
 // SystemProcessorPerformanceInformation (8)
 // (one per processor in the system)
 typedef
-struct _SYSTEM_PROCESSORTIME_INFO
-{
-       TIME    TotalProcessorRunTime;
-       TIME    TotalProcessorTime;
-       TIME    TotalProcessorUserTime;
-       TIME    TotalDPCTime;
-       TIME    TotalInterruptTime;
-       ULONG   TotalInterrupts;
-       ULONG   Unused;
+struct _SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION
+{
+       LARGE_INTEGER   IdleTime;
+       LARGE_INTEGER   KernelTime;
+       LARGE_INTEGER   UserTime;
+       LARGE_INTEGER   DpcTime;
+       LARGE_INTEGER   InterruptTime;
+       ULONG   InterruptCount;
+       ULONG   Reserved;
 
-} SYSTEM_PROCESSORTIME_INFO, *PSYSTEM_PROCESSORTIME_INFO;
+} SYSTEM_PROCESSOR_PERFORMANCE_INFORMATION, *PSYSTEM_PROCESSOR_PERFORMANCE_INFORMATION;
 
 // SystemFlagsInformation (9)
 typedef
@@ -1538,17 +1552,19 @@ struct _SYSTEM_QUOTA_INFORMATION
 #define THREAD_WAIT_OBJECTS                    3
 //#define MAXIMUM_WAIT_OBJECTS                 64
 
-// object type  access rights
+// object type access rights
 
 #define OBJECT_TYPE_CREATE             0x0001
 #define OBJECT_TYPE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
 
 // directory access rights
 
+#ifndef __USE_W32API
 #define DIRECTORY_QUERY                                0x0001
 #define DIRECTORY_TRAVERSE                     0x0002
 #define DIRECTORY_CREATE_OBJECT                        0x0004
 #define DIRECTORY_CREATE_SUBDIRECTORY          0x0008
+#endif
 
 #define DIRECTORY_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0xF)
 
@@ -1558,30 +1574,63 @@ struct _SYSTEM_QUOTA_INFORMATION
 #define SYMBOLIC_LINK_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | 0x1)
 
 
-typedef struct _OBJECT_DATA_INFORMATION
-{
-       BOOLEAN bInheritHandle;
-       BOOLEAN bProtectFromClose;
-} OBJECT_DATA_INFORMATION, *POBJECT_DATA_INFORMATION;
+/* object information class */
 
+#ifndef __USE_W32API
 
-typedef struct _OBJECT_TYPE_INFORMATION
+typedef enum _OBJECT_INFORMATION_CLASS
 {
-       UNICODE_STRING  Name;
-       UNICODE_STRING Type;
-       ULONG TotalHandles;
-       ULONG ReferenceCount;
-} OBJECT_TYPE_INFORMATION, *POBJECT_TYPE_INFORMATION;
+  ObjectBasicInformation,
+  ObjectNameInformation,
+  ObjectTypeInformation,
+  ObjectAllTypesInformation,
+  ObjectHandleInformation
+} OBJECT_INFORMATION_CLASS;
 
 
 // directory information
 
-typedef struct _OBJDIR_INFORMATION {
+typedef struct _OBJECT_DIRECTORY_INFORMATION
+{
        UNICODE_STRING ObjectName;
        UNICODE_STRING ObjectTypeName; // Directory, Device ...
-       UCHAR          Data[0];
-} OBJDIR_INFORMATION, *POBJDIR_INFORMATION;
+} OBJECT_DIRECTORY_INFORMATION, *POBJECT_DIRECTORY_INFORMATION;
+
+
+/* system battery state */
+typedef struct _SYSTEM_BATTERY_STATE {
+       BOOLEAN  AcOnLine;
+       BOOLEAN  BatteryPresent;
+       BOOLEAN  Charging;
+       BOOLEAN  Discharging;
+       BOOLEAN  Spare1[4];
+       ULONG  MaxCapacity;
+       ULONG  RemainingCapacity;
+       ULONG  Rate;
+       ULONG  EstimatedTime;
+       ULONG  DefaultAlert1;
+       ULONG  DefaultAlert2;
+} SYSTEM_BATTERY_STATE, *PSYSTEM_BATTERY_STATE;
+
+
+// power information levels
+typedef enum _POWER_INFORMATION_LEVEL {
+       SystemPowerPolicyAc,
+       SystemPowerPolicyDc,
+       VerifySystemPolicyAc,
+       VerifySystemPolicyDc,
+       SystemPowerCapabilities,
+       SystemBatteryState,
+       SystemPowerStateHandler,
+       ProcessorStateHandler,
+       SystemPowerPolicyCurrent,
+       AdministratorPowerPolicy,
+       SystemReserveHiberFile,
+       ProcessorInformation,
+       SystemPowerInformationData
+} POWER_INFORMATION_LEVEL;
 
+#endif /* __USE_W32API */
 
 /*
         Action is one of the following values:
@@ -1602,14 +1651,6 @@ typedef struct _OBJDIR_INFORMATION {
 
 #define        FSCTL_READ_MFT_RECORD                   0x90068 // NTFS only
 
-typedef struct _BITMAP_DESCRIPTOR
-{
-       ULONGLONG       StartLcn;
-       ULONGLONG       ClustersToEndOfVol;
-       BYTE            Map[0]; // variable size
-} BITMAP_DESCRIPTOR, *PBITMAP_DESCRIPTOR;
-
-
 //typedef enum _TIMER_TYPE 
 //{
 //     NotificationTimer,
@@ -1627,8 +1668,72 @@ typedef enum _TIMER_INFORMATION_CLASS
   TimerBasicInformation
 } TIMER_INFORMATION_CLASS;
 
-typedef
-struct _LPC_PORT_BASIC_INFORMATION
+#ifndef __USE_W32API
+
+typedef enum
+{
+    UNUSED_MSG_TYPE        = 0x0, /* ReactOS */
+    LPC_NEW_MESSAGE        = 0x0, /* NT */
+    LPC_REQUEST            = 0x1,
+    LPC_REPLY              = 0x2,
+    LPC_DATAGRAM           = 0x3,
+    LPC_LOST_REPLY         = 0x4,
+    LPC_PORT_CLOSED        = 0x5,
+    LPC_CLIENT_DIED        = 0x6,
+    LPC_EXCEPTION          = 0x7,
+    LPC_DEBUG_EVENT        = 0x8,
+    LPC_ERROR_EVENT        = 0x9,
+    LPC_CONNECTION_REQUEST = 0xa,
+    LPC_CONNECTION_REFUSED = 0xb /* ReactOS only */
+
+} LPC_TYPE, *PLPC_TYPE;
+
+typedef struct _LPC_SECTION_WRITE
+{
+   ULONG Length;
+   HANDLE SectionHandle;
+   ULONG SectionOffset;
+   ULONG ViewSize;
+   PVOID ViewBase;
+   PVOID TargetViewBase;
+} LPC_SECTION_WRITE, *PLPC_SECTION_WRITE;
+
+typedef struct _LPC_SECTION_READ
+{
+   ULONG Length;
+   ULONG ViewSize;
+   PVOID ViewBase;
+} LPC_SECTION_READ, *PLPC_SECTION_READ;
+
+typedef struct _LPC_MESSAGE
+{
+   USHORT DataSize;
+   USHORT MessageSize;
+   USHORT MessageType;
+   USHORT VirtualRangesOffset;
+   CLIENT_ID ClientId;
+   ULONG MessageId;
+   ULONG SectionSize; /* CallbackID */
+} LPC_MESSAGE, *PLPC_MESSAGE;
+
+#define LPC_MESSAGE_BASE_SIZE sizeof(LPC_MESSAGE)
+
+#define PORT_MESSAGE_TYPE(m) (LPC_TYPE)((m).Header.MessageType)
+
+#define PORT_MAX_DATA_LENGTH    0x104
+#define PORT_MAX_MESSAGE_LENGTH 0x148
+
+#endif /* __USE_W32API */
+
+#define MAX_MESSAGE_DATA   (0x130)
+
+typedef struct _LPC_MAX_MESSAGE
+{
+   LPC_MESSAGE Header;
+   BYTE Data[MAX_MESSAGE_DATA];
+} LPC_MAX_MESSAGE, *PLPC_MAX_MESSAGE;
+
+typedef struct _LPC_PORT_BASIC_INFORMATION
 {
        DWORD   Unknown0;
        DWORD   Unknown1;
@@ -1647,23 +1752,110 @@ struct _LPC_PORT_BASIC_INFORMATION
 
 } LPC_PORT_BASIC_INFORMATION, * PLPC_PORT_BASIC_INFORMATION;
 
+
 typedef struct _KINTERRUPT
 {
    ULONG Vector;
    KAFFINITY ProcessorEnableMask;
-   PKSPIN_LOCK IrqLock;
+   KSPIN_LOCK SpinLock;
+   PKSPIN_LOCK ActualLock;
    BOOLEAN Shareable;
    BOOLEAN FloatingSave;
+   CHAR ProcessorNumber;
    PKSERVICE_ROUTINE ServiceRoutine;
    PVOID ServiceContext;
    LIST_ENTRY Entry;
+   KIRQL Irql;
    KIRQL SynchLevel;
+   KINTERRUPT_MODE InterruptMode;
 } KINTERRUPT;
 
 #ifndef __USE_W32API
 
 typedef struct _KINTERRUPT *PKINTERRUPT;
 
+typedef VOID STDCALL_FUNC
+(*PTIMER_APC_ROUTINE)(
+  IN PVOID  TimerContext,
+  IN ULONG  TimerLowValue,
+  IN LONG  TimerHighValue);
+
 #endif /* __USE_W32API */
 
+/* BEGIN REACTOS ONLY */
+
+typedef enum _TRAVERSE_METHOD {
+  TraverseMethodPreorder,
+  TraverseMethodInorder,
+  TraverseMethodPostorder
+} TRAVERSE_METHOD;
+
+typedef LONG STDCALL_FUNC
+(*PKEY_COMPARATOR)(IN PVOID  Key1,
+  IN PVOID  Key2);
+
+typedef BOOLEAN STDCALL_FUNC
+(*PTRAVERSE_ROUTINE)(IN PVOID  Context,
+  IN PVOID  Key,
+  IN PVOID  Value);
+
+struct _BINARY_TREE_NODE;
+
+typedef struct _BINARY_TREE
+{
+  struct _BINARY_TREE_NODE  * RootNode;
+  PKEY_COMPARATOR  Compare;
+  BOOLEAN  UseNonPagedPool;
+  union {
+    NPAGED_LOOKASIDE_LIST  NonPaged;
+    PAGED_LOOKASIDE_LIST  Paged;
+  } List;
+  union {
+    KSPIN_LOCK  NonPaged;
+    FAST_MUTEX  Paged;
+  } Lock;
+} BINARY_TREE, *PBINARY_TREE;
+
+
+struct _SPLAY_TREE_NODE;
+
+typedef struct _SPLAY_TREE
+{
+  struct _SPLAY_TREE_NODE  * RootNode;
+  PKEY_COMPARATOR  Compare;
+  BOOLEAN  Weighted;
+  BOOLEAN  UseNonPagedPool;
+  union {
+    NPAGED_LOOKASIDE_LIST  NonPaged;
+    PAGED_LOOKASIDE_LIST  Paged;
+  } List;
+  union {
+    KSPIN_LOCK  NonPaged;
+    FAST_MUTEX  Paged;
+  } Lock;
+  PVOID  Reserved[4];
+} SPLAY_TREE, *PSPLAY_TREE;
+
+
+typedef struct _HASH_TABLE
+{
+  // Size of hash table in number of bits
+  ULONG  HashTableSize;
+
+  // Use non-paged pool memory?
+  BOOLEAN  UseNonPagedPool;
+
+  // Lock for this structure
+  union {
+    KSPIN_LOCK  NonPaged;
+    FAST_MUTEX  Paged;
+  } Lock;
+
+  // Pointer to array of hash buckets with splay trees
+  PSPLAY_TREE  HashTrees;
+} HASH_TABLE, *PHASH_TABLE;
+
+
+/* END REACTOS ONLY */
+
 #endif