//
// Dependencies
//
+#include <umtypes.h>
#include <cfg.h>
#if defined(_MSC_VER) && !defined(NTOS_MODE_USER)
#include <ntimage.h>
#endif
-#include "cmtypes.h"
-#include "ketypes.h"
-#include "pstypes.h"
-#include "potypes.h"
+#include <cmtypes.h>
+#include <ketypes.h>
+#include <potypes.h>
+#include <lpctypes.h>
//
// Atom and Language IDs
extern POBJECT_TYPE NTSYSAPI ExMutantObjectType;
extern POBJECT_TYPE NTSYSAPI ExTimerType;
+//
+// Exported NT Build Number
+//
+extern ULONG NTSYSAPI NtBuildNumber;
+
//
// Invalid Handle Value Constant
//
-#define INVALID_HANDLE_VALUE (HANDLE)-1
+#define INVALID_HANDLE_VALUE (HANDLE)-1
#endif
//
// Increments
//
-#define MUTANT_INCREMENT 1
+#define MUTANT_INCREMENT 1
//
// Callback Object Access Mask
//
-#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)
+#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)
//
// Event Object Access Masks
//
#ifdef NTOS_MODE_USER
-#define EVENT_QUERY_STATE 0x0001
+#define EVENT_QUERY_STATE 0x0001
//
// Semaphore Object Acess Masks
//
-#define SEMAPHORE_QUERY_STATE 0x0001
+#define SEMAPHORE_QUERY_STATE 0x0001
#endif
//
-// Port Object Access Masks (FIXME: lpctypes.h?)
+// Event Pair Access Masks
//
-#define PORT_ALL_ACCESS 0x1
+#define EVENT_PAIR_ALL_ACCESS 0x1F0000L
//
-// Event Pair Access Masks
+// Profile Object Access Masks
//
-#define EVENT_PAIR_ALL_ACCESS 0x1F0000L
+#define PROFILE_CONTROL 0x0001
+#define PROFILE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | PROFILE_CONTROL)
//
// Maximum Parameters for NtRaiseHardError
//
-#define MAXIMUM_HARDERROR_PARAMETERS 4
+#define MAXIMUM_HARDERROR_PARAMETERS 4
+
+//
+// Pushlock bits
+//
+#define EX_PUSH_LOCK_LOCK_V ((ULONG_PTR)0x0)
+#define EX_PUSH_LOCK_LOCK ((ULONG_PTR)0x1)
+#define EX_PUSH_LOCK_WAITING ((ULONG_PTR)0x2)
+#define EX_PUSH_LOCK_WAKING ((ULONG_PTR)0x4)
+#define EX_PUSH_LOCK_MULTIPLE_SHARED ((ULONG_PTR)0x8)
+#define EX_PUSH_LOCK_SHARE_INC ((ULONG_PTR)0x10)
+#define EX_PUSH_LOCK_PTR_BITS ((ULONG_PTR)0xf)
+
+//
+// Pushlock Wait Block Flags
+//
+#define EX_PUSH_LOCK_FLAGS_EXCLUSIVE 1
+#define EX_PUSH_LOCK_FLAGS_WAIT 2
//
// Shutdown types for NtShutdownSystem
SystemPrioritySeperation,
SystemPlugPlayBusInformation,
SystemDockInformation,
- _SystemPowerInformation, // FIXME
+ SystemPowerInformationNative,
SystemProcessorSpeedInformation,
SystemCurrentTimeZoneInformation,
SystemLookasideInformation,
} EX_FAST_REF, *PEX_FAST_REF;
//
-// FIXME
+// Executive Cache-Aware Rundown Reference Descriptor
//
-typedef struct _RUNDOWN_DESCRIPTOR
+typedef struct _EX_RUNDOWN_REF_CACHE_AWARE
{
- ULONG_PTR References;
+ union
+ {
+ ULONG_PTR Count;
+ PVOID Ptr;
+ };
+ PVOID PoolToFree;
+} EX_RUNDOWN_REF_CACHE_AWARE, *PEX_RUNDOWN_REF_CACHE_AWARE;
+
+//
+// Executive Rundown Wait Block
+//
+typedef struct _EX_RUNDOWN_WAIT_BLOCK
+{
+ ULONG_PTR Count;
KEVENT RundownEvent;
-} RUNDOWN_DESCRIPTOR, *PRUNDOWN_DESCRIPTOR;
+} EX_RUNDOWN_WAIT_BLOCK, *PEX_RUNDOWN_WAIT_BLOCK;
+
+//
+// Executive Pushlock
+//
+typedef struct _EX_PUSH_LOCK
+{
+ union
+ {
+ struct
+ {
+ ULONG_PTR Locked:1;
+ ULONG_PTR Waiting:1;
+ ULONG_PTR Waking:1;
+ ULONG_PTR MultipleShared:1;
+ ULONG_PTR Shared:sizeof (ULONG_PTR) * 8 - 4;
+ };
+ ULONG_PTR Value;
+ PVOID Ptr;
+ };
+} EX_PUSH_LOCK, *PEX_PUSH_LOCK;
+
+//
+// Executive Pushlock Wait Block
+//
+#ifndef __GNUC__ // WARNING! PUSHLOCKS WILL NOT WORK IN GCC FOR NOW!!!
+__declspec(align(16))
+#endif
+typedef struct _EX_PUSH_LOCK_WAIT_BLOCK
+{
+ union
+ {
+ KGATE WakeGate;
+ KEVENT WakeEvent;
+ };
+ struct _EX_PUSH_LOCK_WAIT_BLOCK *Next;
+ struct _EX_PUSH_LOCK_WAIT_BLOCK *Last;
+ struct _EX_PUSH_LOCK_WAIT_BLOCK *Previous;
+ LONG ShareCount;
+ LONG Flags;
+#if DBG
+ BOOL Signaled;
+ EX_PUSH_LOCK NewValue;
+ EX_PUSH_LOCK OldValue;
+ PEX_PUSH_LOCK PushLock;
+#endif
+} EX_PUSH_LOCK_WAIT_BLOCK, *PEX_PUSH_LOCK_WAIT_BLOCK;
//
// Callback Object
ULONG AllowMultipleCallbacks;
} CALLBACK_OBJECT , *PCALLBACK_OBJECT;
+//
+// Profile OBject
+//
+typedef struct _EPROFILE
+{
+ PEPROCESS Process;
+ PVOID ImageBase;
+ SIZE_T ImageSize;
+ PVOID Buffer;
+ ULONG BufferSize;
+ ULONG BucketSize;
+ PKPROFILE KeProfile;
+ PVOID LockedBuffer;
+ PMDL Mdl;
+ ULONG Segment;
+ KPROFILE_SOURCE ProfileSource;
+ KAFFINITY Affinity;
+} EPROFILE, *PEPROFILE;
+
//
// Handle Table Structures
//
#endif
+//
+// Hard Error LPC Message
+//
+typedef struct _HARDERROR_MSG
+{
+ PORT_MESSAGE h;
+ NTSTATUS Status;
+ LARGE_INTEGER ErrorTime;
+ ULONG ValidResponseOptions;
+ ULONG Response;
+ ULONG NumberOfParameters;
+ ULONG UnicodeStringParameterMask;
+ ULONG Parameters[MAXIMUM_HARDERROR_PARAMETERS];
+} HARDERROR_MSG, *PHARDERROR_MSG;
+
//
// Information Structures for NtQueryMutant
//
} SYSTEM_DOCK_INFORMATION, *PSYSTEM_DOCK_INFORMATION;
// Class 42
-// FIXME: Conflict with WINNT.H
-typedef struct __SYSTEM_POWER_INFORMATION
+typedef struct _SYSTEM_POWER_INFORMATION_NATIVE
{
BOOLEAN SystemSuspendSupported;
BOOLEAN SystemHibernateSupported;
BOOLEAN SystemAcOrDc;
BOOLEAN PowerDownDisabled;
LARGE_INTEGER SpindownDrives;
-} _SYSTEM_POWER_INFORMATION, *P_SYSTEM_POWER_INFORMATION;
+} SYSTEM_POWER_INFORMATION_NATIVE, *PSYSTEM_POWER_INFORMATION_NATIVE;
// Class 43
typedef struct _SYSTEM_LEGACY_DRIVER_INFORMATION