--- /dev/null
+/*
+ * PROJECT: ReactOS Native Headers
+ * FILE: include/ndk/dbgktypes.h
+ * PURPOSE: Definitions for User-Mode Kernel Debugging not in DDK/IFS
+ * PROGRAMMER: Alex Ionescu (alex@relsoft.net)
+ * UPDATE HISTORY:
+ * Created 25/06/05
+ */
+
+#ifndef _DBGKTYPES_H
+#define _DBGKTYPES_H
+
+/* DEPENDENCIES **************************************************************/
+
+/* EXPORTED DATA *************************************************************/
+
+/* CONSTANTS *****************************************************************/
+#define DEBUG_OBJECT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x0F)
+#define DEBUG_OBJECT_WAIT_STATE_CHANGE 0x0001
+#define DEBUG_OBJECT_ADD_REMOVE_PROCESS 0x0002
+
+/* ENUMERATIONS **************************************************************/
+
+typedef enum _DEBUGOBJECTINFOCLASS
+{
+ DebugObjectUnusedInformation,
+ DebugObjectKillProcessOnExitInformation
+} DEBUGOBJECTINFOCLASS, * PDEBUGOBJECTINFOCLASS;
+
+/* TYPES *********************************************************************/
+
+typedef struct _DEBUG_OBJECT_KILL_PROCESS_ON_EXIT_INFORMATION
+{
+ ULONG KillProcessOnExit;
+} DEBUG_OBJECT_KILL_PROCESS_ON_EXIT_INFORMATION, *
+PDEBUG_OBJECT_KILL_PROCESS_ON_EXIT_INFORMATION;
+
+typedef struct _DBGK_DEBUG_OBJECT
+{
+ KEVENT Event;
+ FAST_MUTEX Mutex;
+ LIST_ENTRY StateEventListEntry;
+ union
+ {
+ ULONG Flags;
+ struct
+ {
+ UCHAR DebuggerInactive :1;
+ UCHAR KillProcessOnExit :1;
+ };
+ };
+} DBGK_DEBUG_OBJECT, *PDBGK_DEBUG_OBJECT;
+
+typedef enum _DBG_STATE
+{
+ DbgIdle,
+ DbgReplyPending,
+ DbgCreateThreadStateChange,
+ DbgCreateProcessStateChange,
+ DbgExitThreadStateChange,
+ DbgExitProcessStateChange,
+ DbgExceptionStateChange,
+ DbgBreakpointStateChange,
+ DbgSingleStepStateChange,
+ DbgLoadDllStateChange,
+ DbgUnloadDllStateChange
+} DBG_STATE, *PDBG_STATE;
+
+typedef struct _DBGKM_EXCEPTION
+{
+ EXCEPTION_RECORD ExceptionRecord;
+ ULONG FirstChance;
+} DBGKM_EXCEPTION, *PDBGKM_EXCEPTION;
+
+typedef struct _DBGKM_CREATE_THREAD
+{
+ ULONG SubSystemKey;
+ PVOID StartAddress;
+} DBGKM_CREATE_THREAD, *PDBGKM_CREATE_THREAD;
+
+typedef struct _DBGKM_CREATE_PROCESS
+{
+ ULONG SubSystemKey;
+ HANDLE FileHandle;
+ PVOID BaseOfImage;
+ ULONG DebugInfoFileOffset;
+ ULONG DebugInfoSize;
+ DBGKM_CREATE_THREAD InitialThread;
+} DBGKM_CREATE_PROCESS, *PDBGKM_CREATE_PROCESS;
+
+typedef struct _DBGKM_EXIT_THREAD
+{
+ NTSTATUS ExitStatus;
+} DBGKM_EXIT_THREAD, *PDBGKM_EXIT_THREAD;
+
+typedef struct _DBGKM_EXIT_PROCESS
+{
+ NTSTATUS ExitStatus;
+} DBGKM_EXIT_PROCESS, *PDBGKM_EXIT_PROCESS;
+
+typedef struct _DBGKM_LOAD_DLL
+{
+ HANDLE FileHandle;
+ PVOID BaseOfDll;
+ ULONG DebugInfoFileOffset;
+ ULONG DebugInfoSize;
+} DBGKM_LOAD_DLL, *PDBGKM_LOAD_DLL;
+
+typedef struct _DBGKM_UNLOAD_DLL
+{
+ PVOID BaseAddress;
+} DBGKM_UNLOAD_DLL, *PDBGKM_UNLOAD_DLL;
+
+typedef struct _DBGUI_WAIT_STATE_CHANGE
+{
+ DBG_STATE NewState;
+ CLIENT_ID AppClientId;
+ union
+ {
+ struct
+ {
+ HANDLE HandleToThread;
+ DBGKM_CREATE_THREAD NewThread;
+ } CreateThread;
+ struct
+ {
+ HANDLE HandleToProcess;
+ HANDLE HandleToThread;
+ DBGKM_CREATE_PROCESS NewProcess;
+ } CreateProcessInfo;
+ DBGKM_EXIT_THREAD ExitThread;
+ DBGKM_EXIT_PROCESS ExitProcess;
+ DBGKM_EXCEPTION Exception;
+ DBGKM_LOAD_DLL LoadDll;
+ DBGKM_UNLOAD_DLL UnloadDll;
+ } StateInfo;
+} DBGUI_WAIT_STATE_CHANGE, * PDBGUI_WAIT_STATE_CHANGE;
+
+#endif
/* CONSTANTS *****************************************************************/
#define INVALID_HANDLE_VALUE (HANDLE)-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)
+
/* ENUMERATIONS **************************************************************/
/* TYPES *********************************************************************/
KEVENT RundownEvent;
} RUNDOWN_DESCRIPTOR, *PRUNDOWN_DESCRIPTOR;
+typedef struct _CALLBACK_OBJECT
+{
+ ULONG Name;
+ KSPIN_LOCK Lock;
+ LIST_ENTRY RegisteredCallbacks;
+ ULONG AllowMultipleCallbacks;
+} CALLBACK_OBJECT , *PCALLBACK_OBJECT;
+
typedef struct _HANDLE_TABLE_ENTRY
{
union
-#ifndef __NAPI_I386_FLOATSAVE_H__\r
-#define __NAPI_I386_FLOATSAVE_H__\r
+#ifndef _FLOATSAVE_H_\r
+#define _FLOATSAVE_H_\r
\r
#define FLOAT_SAVE_CONTROL (0xFFFF037F)\r
#define FLOAT_SAVE_STATUS (0xFFFF0000)\r
#define KERNEL_DS (0x10)\r
#define USER_CS (0x18 + 0x3)\r
#define USER_DS (0x20 + 0x3)\r
-#define RESERVED_FOR_TSS (0x28)\r
+#define TSS_SELECTOR (0x28)\r
#define PCR_SELECTOR (0x30)\r
#define TEB_SELECTOR (0x38 + 0x3)\r
+#define LDT_SELECTOR (0x48)\r
+#define TRAP_TSS_SELECTOR (0x50)\r
\r
#endif /* _ASM_SEGMENT_H */\r
#define _IOTYPES_H
/* DEPENDENCIES **************************************************************/
+#include "potypes.h"
/* EXPORTED DATA *************************************************************/
extern POBJECT_TYPE NTOSAPI IoAdapterObjectType;
extern POBJECT_TYPE NTOSAPI IoFileObjectType;
/* CONSTANTS *****************************************************************/
+
+/* Device Object Extension Flags */
#define DOE_UNLOAD_PENDING 0x1
#define DOE_DELETE_PENDING 0x2
#define DOE_REMOVE_PENDING 0x4
#define DOE_REMOVE_PROCESSED 0x8
#define DOE_START_PENDING 0x10
+/* Device Node Flags */
+#define DNF_PROCESSED 0x00000001
+#define DNF_STARTED 0x00000002
+#define DNF_START_FAILED 0x00000004
+#define DNF_ENUMERATED 0x00000008
+#define DNF_DELETED 0x00000010
+#define DNF_MADEUP 0x00000020
+#define DNF_START_REQUEST_PENDING 0x00000040
+#define DNF_NO_RESOURCE_REQUIRED 0x00000080
+#define DNF_INSUFFICIENT_RESOURCES 0x00000100
+#define DNF_RESOURCE_ASSIGNED 0x00000200
+#define DNF_RESOURCE_REPORTED 0x00000400
+#define DNF_HAL_NODE 0x00000800 // ???
+#define DNF_ADDED 0x00001000
+#define DNF_ADD_FAILED 0x00002000
+#define DNF_LEGACY_DRIVER 0x00004000
+#define DNF_STOPPED 0x00008000
+#define DNF_WILL_BE_REMOVED 0x00010000
+#define DNF_NEED_TO_ENUM 0x00020000
+#define DNF_NOT_CONFIGURED 0x00040000
+#define DNF_REINSTALL 0x00080000
+#define DNF_RESOURCE_REQUIREMENTS_NEED_FILTERED 0x00100000 // ???
+#define DNF_DISABLED 0x00200000
+#define DNF_RESTART_OK 0x00400000
+#define DNF_NEED_RESTART 0x00800000
+#define DNF_VISITED 0x01000000
+#define DNF_ASSIGNING_RESOURCES 0x02000000
+#define DNF_BEEING_ENUMERATED 0x04000000
+#define DNF_NEED_ENUMERATION_ONLY 0x08000000
+#define DNF_LOCKED 0x10000000
+#define DNF_HAS_BOOT_CONFIG 0x20000000
+#define DNF_BOOT_CONFIG_RESERVED 0x40000000
+#define DNF_HAS_PROBLEM 0x80000000 // ???
+/* For UserFlags field */
+#define DNUF_DONT_SHOW_IN_UI 0x0002
+#define DNUF_NOT_DISABLEABLE 0x0008
+
/* ENUMERATIONS **************************************************************/
+typedef enum _PNP_DEVNODE_STATE
+{
+ DeviceNodeUnspecified = 0x300,
+ DeviceNodeUninitialized = 0x301,
+ DeviceNodeInitialized = 0x302,
+ DeviceNodeDriversAdded = 0x303,
+ DeviceNodeResourcesAssigned = 0x304,
+ DeviceNodeStartPending = 0x305,
+ DeviceNodeStartCompletion = 0x306,
+ DeviceNodeStartPostWork = 0x307,
+ DeviceNodeStarted = 0x308,
+ DeviceNodeQueryStopped = 0x309,
+ DeviceNodeStopped = 0x30a,
+ DeviceNodeRestartCompletion = 0x30b,
+ DeviceNodeEnumeratePending = 0x30c,
+ DeviceNodeEnumerateCompletion = 0x30d,
+ DeviceNodeAwaitingQueuedDeletion = 0x30e,
+ DeviceNodeAwaitingQueuedRemoval = 0x30f,
+ DeviceNodeQueryRemoved = 0x310,
+ DeviceNodeRemovePendingCloses = 0x311,
+ DeviceNodeRemoved = 0x312,
+ DeviceNodeDeletePendingCloses = 0x313,
+ DeviceNodeDeleted = 0x314,
+ MaxDeviceNodeState = 0x315,
+} PNP_DEVNODE_STATE;
/* TYPES *********************************************************************/
typedef struct _IO_TIMER
{
- USHORT Type;
- USHORT TimerEnabled;
- LIST_ENTRY IoTimerList;
- PIO_TIMER_ROUTINE TimerRoutine;
- PVOID Context;
- PDEVICE_OBJECT DeviceObject;
+ USHORT Type;
+ USHORT TimerEnabled;
+ LIST_ENTRY IoTimerList;
+ PIO_TIMER_ROUTINE TimerRoutine;
+ PVOID Context;
+ PDEVICE_OBJECT DeviceObject;
} IO_TIMER, *PIO_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. */
+ 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;
+ LIST_ENTRY DeviceArbiterList;
+ LIST_ENTRY DeviceTranslatorList;
+ USHORT NoTranslatorMask;
+ USHORT QueryTranslatorMask;
+ USHORT NoArbiterMask;
+ USHORT QueryArbiterMask;
+ union
+ {
+ struct _DEVICE_NODE *LegacyDeviceNode;
+ PDEVICE_RELATIONS PendingDeviceRelations;
+ } OverUsed1;
+ union
+ {
+ 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
+ {
+ ULONG DockStatus;
+ LIST_ENTRY ListEntry;
+ WCHAR *SerialNumber;
+ } DockInfo;
+ ULONG DisableableDepends;
+ LIST_ENTRY PendedSetInterfaceState;
+ LIST_ENTRY LegacyBusListEntry;
+ ULONG DriverUnloadRetryCount;
+ struct _DEVICE_NODE *PreviousParent;
+ ULONG DeletedChidren;
+
+ /* FIXME: Not NT's */
+ GUID BusTypeGuid;
+ ULONG Address;
+} DEVICE_NODE, *PDEVICE_NODE;
+
+typedef struct _DEVOBJ_EXTENSION
+{
+ CSHORT Type;
+ USHORT Size;
+ PDEVICE_OBJECT DeviceObject;
+ ULONG PowerFlags;
+ struct DEVICE_OBJECT_POWER_EXTENSION *Dope;
+ ULONG ExtensionFlags;
+ struct _DEVICE_NODE *DeviceNode;
+ PDEVICE_OBJECT AttachedTo;
+ LONG StartIoCount;
+ LONG StartIoKey;
+ ULONG StartIoFlags;
+ struct _VPB *Vpb;
+} DEVOBJ_EXTENSION, *PDEVOBJ_EXTENSION;
+
+typedef struct _PRIVATE_DRIVER_EXTENSIONS
+{
+ struct _PRIVATE_DRIVER_EXTENSIONS *Link;
+ PVOID ClientIdentificationAddress;
+ CHAR Extension[1];
+} PRIVATE_DRIVER_EXTENSIONS, *PPRIVATE_DRIVER_EXTENSIONS;
+
#endif
/* DEPENDENCIES **************************************************************/
#include "haltypes.h"
+#include "potypes.h"
+#include "mmtypes.h"
#include <arc/arc.h>
/* CONSTANTS *****************************************************************/
#define THREAD_WAIT_OBJECTS 4
-/* FIXME: Create an ASM Offset File */
-#define KTSS_ESP0 (0x4)
-#define KTSS_CR3 (0x1C)
-#define KTSS_EFLAGS (0x24)
-#define KTSS_IOMAPBASE (0x66)
-
/* EXPORTED DATA *************************************************************/
extern CHAR NTOSAPI KeNumberProcessors;
extern LOADER_PARAMETER_BLOCK NTOSAPI KeLoaderBlock;
typedef struct _CONFIGURATION_COMPONENT_DATA
{
- struct _CONFIGURATION_COMPONENT_DATA *Parent;
- struct _CONFIGURATION_COMPONENT_DATA *Child;
- struct _CONFIGURATION_COMPONENT_DATA *Sibling;
- CONFIGURATION_COMPONENT Component;
+ struct _CONFIGURATION_COMPONENT_DATA *Parent;
+ struct _CONFIGURATION_COMPONENT_DATA *Child;
+ struct _CONFIGURATION_COMPONENT_DATA *Sibling;
+ CONFIGURATION_COMPONENT Component;
} CONFIGURATION_COMPONENT_DATA, *PCONFIGURATION_COMPONENT_DATA;
-
typedef enum _KAPC_ENVIRONMENT
{
OriginalApcEnvironment,
ULONG DpcCount;
} KDPC_DATA, *PKDPC_DATA;
+/* FIXME: Most of these should go to i386 directory */
+typedef struct _FNSAVE_FORMAT
+{
+ ULONG ControlWord;
+ ULONG StatusWord;
+ ULONG TagWord;
+ ULONG ErrorOffset;
+ ULONG ErrorSelector;
+ ULONG DataOffset;
+ ULONG DataSelector;
+ UCHAR RegisterArea[80];
+} FNSAVE_FORMAT, *PFNSAVE_FORMAT;
+
+typedef struct _FXSAVE_FORMAT
+{
+ USHORT ControlWord;
+ USHORT StatusWord;
+ USHORT TagWord;
+ USHORT ErrorOpcode;
+ ULONG ErrorOffset;
+ ULONG ErrorSelector;
+ ULONG DataOffset;
+ ULONG DataSelector;
+ ULONG MXCsr;
+ ULONG MXCsrMask;
+ UCHAR RegisterArea[128];
+ UCHAR Reserved3[128];
+ UCHAR Reserved4[224];
+ UCHAR Align16Byte[8];
+} FXSAVE_FORMAT, *PFXSAVE_FORMAT;
+
+typedef struct _FX_SAVE_AREA
+{
+ union
+ {
+ FNSAVE_FORMAT FnArea;
+ FXSAVE_FORMAT FxArea;
+ } U;
+ ULONG NpxSavedCpu;
+ ULONG Cr0NpxState;
+} FX_SAVE_AREA, *PFX_SAVE_AREA;
+
typedef struct _KTRAP_FRAME
{
PVOID DebugEbp;
} HighWord;
} LDT_ENTRY, *PLDT_ENTRY, *LPLDT_ENTRY;
+typedef struct _KGDTENTRY
+{
+ USHORT LimitLow;
+ USHORT BaseLow;
+ union {
+ struct {
+ UCHAR BaseMid;
+ UCHAR Flags1;
+ UCHAR Flags2;
+ UCHAR BaseHi;
+ } Bytes;
+ struct {
+ ULONG BaseMid : 8;
+ ULONG Type : 5;
+ ULONG Dpl : 2;
+ ULONG Pres : 1;
+ ULONG LimitHi : 4;
+ ULONG Sys : 1;
+ ULONG Reserved_0 : 1;
+ ULONG Default_Big : 1;
+ ULONG Granularity : 1;
+ ULONG BaseHi : 8;
+ } Bits;
+ } HighWord;
+} KGDTENTRY, *PKGDTENTRY;
+
+typedef struct _KIDTENTRY
+{
+ USHORT Offset;
+ USHORT Selector;
+ USHORT Access;
+ USHORT ExtendedOffset;
+} KIDTENTRY, *PKIDTENTRY;
+
+typedef struct _HARDWARE_PTE_X86
+{
+ ULONG Valid : 1;
+ ULONG Write : 1;
+ ULONG Owner : 1;
+ ULONG WriteThrough : 1;
+ ULONG CacheDisable : 1;
+ ULONG Accessed : 1;
+ ULONG Dirty : 1;
+ ULONG LargePage : 1;
+ ULONG Global : 1;
+ ULONG CopyOnWrite : 1;
+ ULONG Prototype : 1;
+ ULONG reserved : 1;
+ ULONG PageFrameNumber : 20;
+} HARDWARE_PTE_X86, *PHARDWARE_PTE_X86;
+
+#pragma pack(push,4)
+
+/* Fixme: Use correct types? */
+typedef struct _KPROCESSOR_STATE
+{
+ PCONTEXT ContextFrame;
+ PVOID SpecialRegisters;
+} KPROCESSOR_STATE;
+
+/* Processor Control Block */
+typedef struct _KPRCB
+{
+ USHORT MinorVersion;
+ USHORT MajorVersion;
+ struct _KTHREAD *CurrentThread;
+ struct _KTHREAD *NextThread;
+ struct _KTHREAD *IdleThread;
+ UCHAR Number;
+ UCHAR Reserved;
+ USHORT BuildType;
+ ULONG SetMember;
+ UCHAR CpuType;
+ UCHAR CpuID;
+ USHORT CpuStep;
+ KPROCESSOR_STATE ProcessorState;
+ ULONG KernelReserved[16];
+ ULONG HalReserved[16];
+ UCHAR PrcbPad0[92];
+ PVOID LockQueue[33]; // Used for Queued Spinlocks
+ struct _KTHREAD *NpxThread;
+ ULONG InterruptCount;
+ ULONG KernelTime;
+ ULONG UserTime;
+ ULONG DpcTime;
+ ULONG DebugDpcTime;
+ ULONG InterruptTime;
+ ULONG AdjustDpcThreshold;
+ ULONG PageColor;
+ UCHAR SkipTick;
+ UCHAR DebuggerSavedIRQL;
+ UCHAR Spare1[6];
+ struct _KNODE *ParentNode;
+ ULONG MultiThreadProcessorSet;
+ struct _KPRCB *MultiThreadSetMaster;
+ ULONG ThreadStartCount[2];
+ ULONG CcFastReadNoWait;
+ ULONG CcFastReadWait;
+ ULONG CcFastReadNotPossible;
+ ULONG CcCopyReadNoWait;
+ ULONG CcCopyReadWait;
+ ULONG CcCopyReadNoWaitMiss;
+ ULONG KeAlignmentFixupCount;
+ ULONG KeContextSwitches;
+ ULONG KeDcacheFlushCount;
+ ULONG KeExceptionDispatchCount;
+ ULONG KeFirstLevelTbFills;
+ ULONG KeFloatingEmulationCount;
+ ULONG KeIcacheFlushCount;
+ ULONG KeSecondLevelTbFills;
+ ULONG KeSystemCalls;
+ ULONG IoReadOperationCount;
+ ULONG IoWriteOperationCount;
+ ULONG IoOtherOperationCount;
+ LARGE_INTEGER IoReadTransferCount;
+ LARGE_INTEGER IoWriteTransferCount;
+ LARGE_INTEGER IoOtherTransferCount;
+ ULONG SpareCounter1[8];
+ PP_LOOKASIDE_LIST PPLookasideList[16];
+ PP_LOOKASIDE_LIST PPNPagedLookasideList[32];
+ PP_LOOKASIDE_LIST PPPagedLookasideList[32];
+ ULONG PacketBarrier;
+ ULONG ReverseStall;
+ PVOID IpiFrame;
+ UCHAR PrcbPad2[52];
+ PVOID CurrentPacket[3];
+ ULONG TargetSet;
+ ULONG_PTR WorkerRoutine;
+ ULONG IpiFrozen;
+ UCHAR PrcbPad3[40];
+ ULONG RequestSummary;
+ struct _KPRCB *SignalDone;
+ UCHAR PrcbPad4[56];
+ struct _KDPC_DATA DpcData[2];
+ PVOID DpcStack;
+ ULONG MaximumDpcQueueDepth;
+ ULONG DpcRequestRate;
+ ULONG MinimumDpcRate;
+ UCHAR DpcInterruptRequested;
+ UCHAR DpcThreadRequested;
+ UCHAR DpcRoutineActive;
+ UCHAR DpcThreadActive;
+ ULONG PrcbLock;
+ ULONG DpcLastCount;
+ ULONG TimerHand;
+ ULONG TimerRequest;
+ PVOID DpcThread;
+ struct _KEVENT *DpcEvent;
+ UCHAR ThreadDpcEnable;
+ BOOLEAN QuantumEnd;
+ UCHAR PrcbPad50;
+ UCHAR IdleSchedule;
+ ULONG DpcSetEventRequest;
+ UCHAR PrcbPad5[18];
+ LONG TickOffset;
+ struct _KDPC* CallDpc;
+ ULONG PrcbPad7[8];
+ LIST_ENTRY WaitListHead;
+ ULONG ReadySummary;
+ ULONG SelectNextLast;
+ LIST_ENTRY DispatcherReadyListHead[32];
+ SINGLE_LIST_ENTRY DeferredReadyListHead;
+ ULONG PrcbPad72[11];
+ PVOID ChainedInterruptList;
+ LONG LookasideIrpFloat;
+ LONG MmPageFaultCount;
+ LONG MmCopyOnWriteCount;
+ LONG MmTransitionCount;
+ LONG MmCacheTransitionCount;
+ LONG MmDemandZeroCount;
+ LONG MmPageReadCount;
+ LONG MmPageReadIoCount;
+ LONG MmCacheReadCount;
+ LONG MmCacheIoCount;
+ LONG MmDirtyPagesWriteCount;
+ LONG MmDirtyWriteIoCount;
+ LONG MmMappedPagesWriteCount;
+ LONG MmMappedWriteIoCount;
+ ULONG SpareFields0[1];
+ CHAR VendorString[13];
+ UCHAR InitialApicId;
+ UCHAR LogicalProcessorsPerPhysicalProcessor;
+ ULONG MHz;
+ ULONG FeatureBits;
+ LARGE_INTEGER UpdateSignature;
+ LARGE_INTEGER IsrTime;
+ LARGE_INTEGER SpareField1;
+ FX_SAVE_AREA NpxSaveArea;
+ PROCESSOR_POWER_STATE PowerState;
+} KPRCB, *PKPRCB;
+
+/*
+ * This is the complete, internal KPCR structure
+ */
+typedef struct _KIPCR {
+ KPCR_TIB Tib; /* 00 */
+ struct _KPCR *Self; /* 1C */
+ struct _KPRCB *Prcb; /* 20 */
+ KIRQL Irql; /* 24 */
+ ULONG IRR; /* 28 */
+ ULONG IrrActive; /* 2C */
+ ULONG IDR; /* 30 */
+ PVOID KdVersionBlock; /* 34 */
+ PUSHORT IDT; /* 38 */
+ PUSHORT GDT; /* 3C */
+ struct _KTSS *TSS; /* 40 */
+ USHORT MajorVersion; /* 44 */
+ USHORT MinorVersion; /* 46 */
+ KAFFINITY SetMember; /* 48 */
+ ULONG StallScaleFactor; /* 4C */
+ UCHAR SparedUnused; /* 50 */
+ UCHAR Number; /* 51 */
+ UCHAR Reserved; /* 52 */
+ UCHAR L2CacheAssociativity; /* 53 */
+ ULONG VdmAlert; /* 54 */
+ ULONG KernelReserved[14]; /* 58 */
+ ULONG L2CacheSize; /* 90 */
+ ULONG HalReserved[16]; /* 94 */
+ ULONG InterruptMode; /* D4 */
+ UCHAR KernelReserved2[0x48]; /* D8 */
+ KPRCB PrcbData; /* 120 */
+} KIPCR, *PKIPCR;
+
+#pragma pack(pop)
#include <pshpack1.h>
} KEXCEPTION_FRAME, *PKEXCEPTION_FRAME;
+typedef struct _KNODE
+{
+ SLIST_HEADER DeadStackList;
+ SLIST_HEADER PfnDereferenceSListHead;
+ ULONG ProcessorMask;
+ ULONG Color;
+ UCHAR Seed;
+ UCHAR NodeNumber;
+ ULONG Flags;
+ ULONG MmShiftedColor;
+ ULONG FreeCount[2];
+ struct _SINGLE_LIST_ENTRY *PfnDeferredList;
+} KNODE, *PKNODE;
+
+typedef struct _KPROFILE
+{
+ CSHORT Type;
+ CSHORT Size;
+ LIST_ENTRY ListEntry;
+ PVOID RegionStart;
+ PVOID RegionEnd;
+ ULONG BucketShift;
+ PVOID Buffer;
+ CSHORT Source;
+ ULONG Affinity;
+ BOOLEAN Active;
+ struct _KPROCESS *Process;
+} KPROFILE, *PKPROFILE;
+
typedef struct _KINTERRUPT
{
CSHORT Type;
KEVENT HighEvent;
} KEVENT_PAIR, *PKEVENT_PAIR;
-typedef enum _KOBJECTS {
- EventNotificationObject = 0,
- EventSynchronizationObject = 1,
- MutantObject = 2,
- ProcessObject = 3,
- QueueObject = 4,
- SemaphoreObject = 5,
- ThreadObject = 6,
- GateObject = 7,
- TimerNotificationObject = 8,
- TimerSynchronizationObject = 9,
- Spare2Object = 10,
- Spare3Object = 11,
- Spare4Object = 12,
- Spare5Object = 13,
- Spare6Object = 14,
- Spare7Object = 15,
- Spare8Object = 16,
- Spare9Object = 17,
- ApcObject = 18,
- DpcObject = 19,
- DeviceQueueObject = 20,
- EventPairObject = 21,
- InterruptObject = 22,
- ProfileObject = 23,
- ThreadedDpcObject = 24,
- MaximumKernelObject = 25
+typedef struct _KEXECUTE_OPTIONS
+{
+ UCHAR ExecuteDisable:1;
+ UCHAR ExecuteEnable:1;
+ UCHAR DisableThunkEmulation:1;
+ UCHAR Permanent:1;
+ UCHAR ExecuteDispatchEnable:1;
+ UCHAR ImageDispatchEnable:1;
+ UCHAR Spare:2;
+} KEXECUTE_OPTIONS, *PKEXECUTE_OPTIONS;
+
+typedef enum _KOBJECTS
+{
+ EventNotificationObject = 0,
+ EventSynchronizationObject = 1,
+ MutantObject = 2,
+ ProcessObject = 3,
+ QueueObject = 4,
+ SemaphoreObject = 5,
+ ThreadObject = 6,
+ GateObject = 7,
+ TimerNotificationObject = 8,
+ TimerSynchronizationObject = 9,
+ Spare2Object = 10,
+ Spare3Object = 11,
+ Spare4Object = 12,
+ Spare5Object = 13,
+ Spare6Object = 14,
+ Spare7Object = 15,
+ Spare8Object = 16,
+ Spare9Object = 17,
+ ApcObject = 18,
+ DpcObject = 19,
+ DeviceQueueObject = 20,
+ EventPairObject = 21,
+ InterruptObject = 22,
+ ProfileObject = 23,
+ ThreadedDpcObject = 24,
+ MaximumKernelObject = 25
} KOBJECTS;
-typedef enum _KTHREAD_STATE {
+#include <pshpack1.h>
+
+typedef struct _KTHREAD
+{
+ /* For waiting on thread exit */
+ DISPATCHER_HEADER DispatcherHeader; /* 00 */
+
+ /* List of mutants owned by the thread */
+ LIST_ENTRY MutantListHead; /* 10 */
+ PVOID InitialStack; /* 18 */
+ ULONG_PTR StackLimit; /* 1C */
+
+ /* Pointer to the thread's environment block in user memory */
+ struct _TEB *Teb; /* 20 */
+
+ /* Pointer to the thread's TLS array */
+ PVOID TlsArray; /* 24 */
+ PVOID KernelStack; /* 28 */
+ UCHAR DebugActive; /* 2C */
+
+ /* Thread state (one of THREAD_STATE_xxx constants below) */
+ UCHAR State; /* 2D */
+ BOOLEAN Alerted[2]; /* 2E */
+ UCHAR Iopl; /* 30 */
+ UCHAR NpxState; /* 31 */
+ CHAR Saturation; /* 32 */
+ CHAR Priority; /* 33 */
+ KAPC_STATE ApcState; /* 34 */
+ ULONG ContextSwitches; /* 4C */
+ LONG WaitStatus; /* 50 */
+ KIRQL WaitIrql; /* 54 */
+ CHAR WaitMode; /* 55 */
+ UCHAR WaitNext; /* 56 */
+ UCHAR WaitReason; /* 57 */
+ union { /* 58 */
+ PKWAIT_BLOCK WaitBlockList; /* 58 */
+ PKGATE GateObject; /* 58 */
+ }; /* 58 */
+ LIST_ENTRY WaitListEntry; /* 5C */
+ ULONG WaitTime; /* 64 */
+ CHAR BasePriority; /* 68 */
+ UCHAR DecrementCount; /* 69 */
+ UCHAR PriorityDecrement; /* 6A */
+ CHAR Quantum; /* 6B */
+ KWAIT_BLOCK WaitBlock[4]; /* 6C */
+ PVOID LegoData; /* CC */
+ union {
+ struct {
+ USHORT KernelApcDisable;
+ USHORT SpecialApcDisable;
+ };
+ ULONG CombinedApcDisable; /* D0 */
+ };
+ KAFFINITY UserAffinity; /* D4 */
+ UCHAR SystemAffinityActive;/* D8 */
+ UCHAR PowerState; /* D9 */
+ UCHAR NpxIrql; /* DA */
+ UCHAR Pad[1]; /* DB */
+ PVOID ServiceTable; /* DC */
+ PKQUEUE Queue; /* E0 */
+ KSPIN_LOCK ApcQueueLock; /* E4 */
+ KTIMER Timer; /* E8 */
+ LIST_ENTRY QueueListEntry; /* 110 */
+ KAFFINITY Affinity; /* 118 */
+ UCHAR Preempted; /* 11C */
+ UCHAR ProcessReadyQueue; /* 11D */
+ UCHAR KernelStackResident; /* 11E */
+ UCHAR NextProcessor; /* 11F */
+ PVOID CallbackStack; /* 120 */
+ struct _W32THREAD *Win32Thread; /* 124 */
+ struct _KTRAP_FRAME *TrapFrame; /* 128 */
+ PKAPC_STATE ApcStatePointer[2]; /* 12C */
+ UCHAR EnableStackSwap; /* 134 */
+ UCHAR LargeStack; /* 135 */
+ UCHAR ResourceIndex; /* 136 */
+ UCHAR PreviousMode; /* 137 */
+ ULONG KernelTime; /* 138 */
+ ULONG UserTime; /* 13C */
+ KAPC_STATE SavedApcState; /* 140 */
+ UCHAR Alertable; /* 158 */
+ UCHAR ApcStateIndex; /* 159 */
+ UCHAR ApcQueueable; /* 15A */
+ UCHAR AutoAlignment; /* 15B */
+ PVOID StackBase; /* 15C */
+ KAPC SuspendApc; /* 160 */
+ KSEMAPHORE SuspendSemaphore; /* 190 */
+ LIST_ENTRY ThreadListEntry; /* 1A4 */
+ CHAR FreezeCount; /* 1AC */
+ UCHAR SuspendCount; /* 1AD */
+ UCHAR IdealProcessor; /* 1AE */
+ UCHAR DisableBoost; /* 1AF */
+ UCHAR QuantumReset; /* 1B0 */
+} KTHREAD;
+
+#include <poppack.h>
+
+/*
+ * NAME: KPROCESS
+ * DESCRIPTION: Internal Kernel Process Structure.
+ * PORTABILITY: Architecture Dependent.
+ * KERNEL VERSION: 5.2
+ * DOCUMENTATION: http://reactos.com/wiki/index.php/KPROCESS
+ */
+typedef struct _KPROCESS
+{
+ DISPATCHER_HEADER Header; /* 000 */
+ LIST_ENTRY ProfileListHead; /* 010 */
+ PHYSICAL_ADDRESS DirectoryTableBase; /* 018 */
+ KGDTENTRY LdtDescriptor; /* 020 */
+ KIDTENTRY Int21Descriptor; /* 028 */
+ USHORT IopmOffset; /* 030 */
+ UCHAR Iopl; /* 032 */
+ UCHAR Unused; /* 033 */
+ ULONG ActiveProcessors; /* 034 */
+ ULONG KernelTime; /* 038 */
+ ULONG UserTime; /* 03C */
+ LIST_ENTRY ReadyListHead; /* 040 */
+ LIST_ENTRY SwapListEntry; /* 048 */
+ PVOID VdmTrapcHandler; /* 04C */
+ LIST_ENTRY ThreadListHead; /* 050 */
+ KSPIN_LOCK ProcessLock; /* 058 */
+ KAFFINITY Affinity; /* 05C */
+ union {
+ struct {
+ ULONG AutoAlignment:1; /* 060.0 */
+ ULONG DisableBoost:1; /* 060.1 */
+ ULONG DisableQuantum:1; /* 060.2 */
+ ULONG ReservedFlags:29; /* 060.3 */
+ };
+ ULONG ProcessFlags; /* 060 */
+ };
+ CHAR BasePriority; /* 064 */
+ CHAR QuantumReset; /* 065 */
+ UCHAR State; /* 066 */
+ UCHAR ThreadSeed; /* 067 */
+ UCHAR PowerState; /* 068 */
+ UCHAR IdealNode; /* 069 */
+ UCHAR Visited; /* 06A */
+ KEXECUTE_OPTIONS Flags; /* 06B */
+ ULONG StackCount; /* 06C */
+ LIST_ENTRY ProcessListEntry; /* 070 */
+} KPROCESS;
+
+typedef enum _KTHREAD_STATE
+{
Initialized,
Ready,
Running,
Transition,
DeferredReady,
} KTHREAD_STATE, *PKTHREAD_STATE;
+
#endif
IN ULONG Level,
OUT PIMAGE_RESOURCE_DATA_ENTRY *ResourceDataEntry
);
+
+NTSTATUS
+STDCALL
+LdrGetProcedureAddress(
+ IN PVOID BaseAddress,
+ IN PANSI_STRING Name,
+ IN ULONG Ordinal,
+ OUT PVOID *ProcedureAddress
+);
#endif
typedef struct _PP_LOOKASIDE_LIST
{
- struct _GENERAL_LOOKASIDE *P;
- struct _GENERAL_LOOKASIDE *L;
+ struct _GENERAL_LOOKASIDE *P;
+ struct _GENERAL_LOOKASIDE *L;
} PP_LOOKASIDE_LIST, *PPP_LOOKASIDE_LIST;
typedef struct _ADDRESS_RANGE
{
- ULONG BaseAddrLow;
- ULONG BaseAddrHigh;
- ULONG LengthLow;
- ULONG LengthHigh;
- ULONG Type;
+ ULONG BaseAddrLow;
+ ULONG BaseAddrHigh;
+ ULONG LengthLow;
+ ULONG LengthHigh;
+ ULONG Type;
} ADDRESS_RANGE, *PADDRESS_RANGE;
+typedef struct _MMADDRESS_NODE
+{
+ union
+ {
+ ULONG Balance:2;
+ struct _MMADDRESS_NODE *Parent;
+ } u1;
+ struct _MMADDRESS_NODE *LeftChild;
+ struct _MMADDRESS_NODE *RightChild;
+ ULONG StartingVpn;
+ ULONG EndingVpn;
+} MMADDRESS_NODE, *PMMADDRESS_NODE;
+
+typedef struct _MM_AVL_TABLE
+{
+ MMADDRESS_NODE BalancedRoot;
+ ULONG DepthOfTree:5;
+ ULONG Unused:3;
+ ULONG NumberGenericTableElements:24;
+ PVOID NodeHint;
+ PVOID NodeFreeHint;
+} MM_AVL_TABLE, *PMM_AVL_TABLE;
+
#endif
#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 */
#define DOSDEVICE_DRIVE_CDROM 5
#define DOSDEVICE_DRIVE_RAMDISK 6
+/* Object Flags */
+#define OB_FLAG_CREATE_INFO 0x01
+#define OB_FLAG_KERNEL_MODE 0x02
+#define OB_FLAG_CREATOR_INFO 0x04
+#define OB_FLAG_EXCLUSIVE 0x08
+#define OB_FLAG_PERMANENT 0x10
+#define OB_FLAG_SECURITY 0x20
+#define OB_FLAG_SINGLE_PROCESS 0x40
+
/* ENUMERATIONS **************************************************************/
+typedef enum _OB_OPEN_REASON
+{
+ ObCreateHandle,
+ ObOpenHandle,
+ ObDuplicateHandle,
+ ObInheritHandle,
+ ObMaxOpenReason
+} OB_OPEN_REASON;
+
+/* FUNCTION TYPES ************************************************************/
+
+/* Object Callbacks FIXME: Update these soon */
+typedef NTSTATUS
+(STDCALL *OB_OPEN_METHOD)(
+ OB_OPEN_REASON Reason,
+ PVOID ObjectBody,
+ PEPROCESS Process,
+ ULONG HandleCount,
+ ACCESS_MASK GrantedAccess
+);
+
+typedef NTSTATUS
+(STDCALL *OB_PARSE_METHOD)(
+ PVOID Object,
+ PVOID *NextObject,
+ PUNICODE_STRING FullPath,
+ PWSTR *Path,
+ ULONG Attributes
+);
+
+typedef VOID
+(STDCALL *OB_DELETE_METHOD)(
+ PVOID DeletedObject
+);
+
+typedef VOID
+(STDCALL *OB_CLOSE_METHOD)(
+ PVOID ClosedObject,
+ ULONG HandleCount
+);
+
+typedef VOID
+(STDCALL *OB_DUMP_METHOD)(VOID);
+
+typedef NTSTATUS
+(STDCALL *OB_OKAYTOCLOSE_METHOD)(VOID);
+
+typedef NTSTATUS
+(STDCALL *OB_QUERYNAME_METHOD)(
+ PVOID ObjectBody,
+ POBJECT_NAME_INFORMATION ObjectNameInfo,
+ ULONG Length,
+ PULONG ReturnLength
+);
+
+typedef PVOID
+(STDCALL *OB_FIND_METHOD)(
+ PVOID WinStaObject,
+ PWSTR Name,
+ ULONG Attributes
+);
+
+typedef NTSTATUS
+(STDCALL *OB_SECURITY_METHOD)(
+ PVOID ObjectBody,
+ SECURITY_OPERATION_CODE OperationCode,
+ SECURITY_INFORMATION SecurityInformation,
+ PSECURITY_DESCRIPTOR SecurityDescriptor,
+ PULONG BufferLength
+);
+
+/* FIXME: TEMPORARY HACK */
+typedef NTSTATUS
+(STDCALL *OB_CREATE_METHOD)(
+ PVOID ObjectBody,
+ PVOID Parent,
+ PWSTR RemainingPath,
+ struct _OBJECT_ATTRIBUTES* ObjectAttributes
+);
+
/* TYPES *********************************************************************/
typedef struct _OBJECT_BASIC_INFORMATION
ULONG SecurityDescriptorLength;
LARGE_INTEGER CreateTime;
} OBJECT_BASIC_INFORMATION, *POBJECT_BASIC_INFORMATION;
+
+typedef struct _OBJECT_HEADER_NAME_INFO
+{
+ struct _DIRECTORY_OBJECT *Directory;
+ UNICODE_STRING Name;
+ ULONG QueryReferences;
+ ULONG Reserved2;
+ ULONG DbgReferenceCount;
+} OBJECT_HEADER_NAME_INFO, *POBJECT_HEADER_NAME_INFO;
+
+typedef struct _OBJECT_CREATE_INFORMATION
+{
+ ULONG Attributes;
+ HANDLE RootDirectory;
+ PVOID ParseContext;
+ KPROCESSOR_MODE ProbeMode;
+ ULONG PagedPoolCharge;
+ ULONG NonPagedPoolCharge;
+ ULONG SecurityDescriptorCharge;
+ PSECURITY_DESCRIPTOR SecurityDescriptor;
+ PSECURITY_QUALITY_OF_SERVICE SecurityQos;
+ SECURITY_QUALITY_OF_SERVICE SecurityQualityOfService;
+} OBJECT_CREATE_INFORMATION, *POBJECT_CREATE_INFORMATION;
+
+typedef struct _OBJECT_TYPE_INITIALIZER
+{
+ WORD Length;
+ UCHAR UseDefaultObject;
+ UCHAR CaseInsensitive;
+ ULONG InvalidAttributes;
+ GENERIC_MAPPING GenericMapping;
+ ULONG ValidAccessMask;
+ UCHAR SecurityRequired;
+ UCHAR MaintainHandleCount;
+ UCHAR MaintainTypeList;
+ POOL_TYPE PoolType;
+ ULONG DefaultPagedPoolCharge;
+ ULONG DefaultNonPagedPoolCharge;
+ OB_DUMP_METHOD DumpProcedure;
+ OB_OPEN_METHOD OpenProcedure;
+ OB_CLOSE_METHOD CloseProcedure;
+ OB_DELETE_METHOD DeleteProcedure;
+ OB_PARSE_METHOD ParseProcedure;
+ OB_SECURITY_METHOD SecurityProcedure;
+ OB_QUERYNAME_METHOD QueryNameProcedure;
+ OB_OKAYTOCLOSE_METHOD OkayToCloseProcedure;
+} OBJECT_TYPE_INITIALIZER, *POBJECT_TYPE_INITIALIZER;
+
+typedef struct _OBJECT_TYPE
+{
+ ERESOURCE Mutex;
+ LIST_ENTRY TypeList;
+ UNICODE_STRING Name;
+ PVOID DefaultObject;
+ ULONG Index;
+ ULONG TotalNumberOfObjects;
+ ULONG TotalNumberOfHandles;
+ ULONG HighWaterNumberOfObjects;
+ ULONG HighWaterNumberOfHandles;
+ OBJECT_TYPE_INITIALIZER TypeInfo;
+ ULONG Key;
+ ERESOURCE ObjectLocks[4];
+} OBJECT_TYPE;
+
+typedef struct _OBJECT_HANDLE_COUNT_ENTRY
+{
+ struct _EPROCESS *Process;
+ ULONG HandleCount;
+} OBJECT_HANDLE_COUNT_ENTRY, *POBJECT_HANDLE_COUNT_ENTRY;
+
+typedef struct _OBJECT_HANDLE_COUNT_DATABASE
+{
+ ULONG CountEntries;
+ POBJECT_HANDLE_COUNT_ENTRY HandleCountEntries[1];
+} OBJECT_HANDLE_COUNT_DATABASE, *POBJECT_HANDLE_COUNT_DATABASE;
+
+typedef struct _OBJECT_HEADER_HANDLE_INFO
+{
+ union
+ {
+ POBJECT_HANDLE_COUNT_DATABASE HandleCountDatabase;
+ OBJECT_HANDLE_COUNT_ENTRY SingleEntry;
+ };
+} OBJECT_HEADER_HANDLE_INFO, *POBJECT_HEADER_HANDLE_INFO;
+
+typedef struct _OBJECT_HEADER_CREATOR_INFO
+{
+ LIST_ENTRY TypeList;
+ PVOID CreatorUniqueProcess;
+ USHORT CreatorBackTraceIndex;
+ USHORT Reserved;
+} OBJECT_HEADER_CREATOR_INFO, *POBJECT_HEADER_CREATOR_INFO;
+
+typedef struct _QUAD
+{
+ union
+ {
+ LONGLONG UseThisFieldToCopy;
+ float DoNotUseThisField;
+ };
+} QUAD, *PQUAD;
+
+typedef struct _OBJECT_HEADER
+{
+ LIST_ENTRY Entry; /* FIXME: REMOVE THIS SOON */
+ LONG PointerCount;
+ union {
+ LONG HandleCount;
+ PVOID NextToFree;
+ };
+ POBJECT_TYPE Type;
+ UCHAR NameInfoOffset;
+ UCHAR HandleInfoOffset;
+ UCHAR QuotaInfoOffset;
+ UCHAR Flags;
+ union {
+ POBJECT_CREATE_INFORMATION ObjectCreateInfo;
+ PVOID QuotaBlockCharged;
+ };
+ PSECURITY_DESCRIPTOR SecurityDescriptor;
+ QUAD Body;
+} OBJECT_HEADER, *POBJECT_HEADER;
-/* FIXME: Add Object Structures Here */
/*
* FIXME: These will eventually become centerfold in the compliant Ob Manager
* For now, they are only here so Device Map is properly defined before the header
ULONG Spare1[1];
} PROCESSOR_POWER_STATE, *PPROCESSOR_POWER_STATE;
+typedef struct _PO_DEVICE_NOTIFY
+{
+ LIST_ENTRY Link;
+ PDEVICE_OBJECT TargetDevice;
+ UCHAR WakeNeeded;
+ UCHAR OrderLevel;
+ PDEVICE_OBJECT DeviceObject;
+ PVOID Node;
+ PUSHORT DeviceName;
+ PUSHORT DriverName;
+ ULONG ChildCount;
+ ULONG ActiveChild;
+} PO_DEVICE_NOTIFY, *PPO_DEVICE_NOTIFY;
+
#endif
PVOID FlsSlots; /* FB4h */
PVOID WineDebugInfo; /* Needed for WINE DLL's */
} TEB, *PTEB;
-
+
+/* KERNEL MODE ONLY **********************************************************/
+#ifndef NTOS_MODE_USER
+
+#include "mmtypes.h"
+#include <internal/mm.h> /* FIXME: Forced to do this for now */
+#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 */
+ LARGE_INTEGER CreateTime; /* 1C0 */
+ LARGE_INTEGER ExitTime; /* 1C0 */
+ union {
+ LIST_ENTRY LpcReplyChain; /* 1C0 */
+ LIST_ENTRY KeyedWaitChain; /* 1C0 */
+ };
+ union {
+ NTSTATUS ExitStatus; /* 1C8 */
+ PVOID OfsChain; /* 1C8 */
+ };
+ LIST_ENTRY PostBlockList; /* 1CC */
+ union {
+ struct _TERMINATION_PORT *TerminationPort; /* 1D4 */
+ struct _ETHREAD *ReaperLink; /* 1D4 */
+ PVOID KeyedWaitValue; /* 1D4 */
+ };
+ KSPIN_LOCK ActiveTimerListLock; /* 1D8 */
+ LIST_ENTRY ActiveTimerListHead; /* 1D8 */
+ CLIENT_ID Cid; /* 1E0 */
+ union {
+ KSEMAPHORE LpcReplySemaphore; /* 1E4 */
+ KSEMAPHORE KeyedReplySemaphore; /* 1E4 */
+ };
+ union {
+ PVOID LpcReplyMessage; /* 200 */
+ PVOID LpcWaitingOnPort; /* 200 */
+ };
+ PPS_IMPERSONATION_INFORMATION ImpersonationInfo; /* 204 */
+ LIST_ENTRY IrpList; /* 208 */
+ ULONG TopLevelIrp; /* 210 */
+ PDEVICE_OBJECT DeviceToVerify; /* 214 */
+ struct _EPROCESS *ThreadsProcess; /* 218 */
+ PKSTART_ROUTINE StartAddress; /* 21C */
+ union {
+ PTHREAD_START_ROUTINE Win32StartAddress; /* 220 */
+ ULONG LpcReceivedMessageId; /* 220 */
+ };
+ LIST_ENTRY ThreadListEntry; /* 224 */
+ EX_RUNDOWN_REF RundownProtect; /* 22C */
+ EX_PUSH_LOCK ThreadLock; /* 230 */
+ ULONG LpcReplyMessageId; /* 234 */
+ ULONG ReadClusterSize; /* 238 */
+ ACCESS_MASK GrantedAccess; /* 23C */
+ union {
+ struct {
+ ULONG Terminated:1;
+ ULONG DeadThread:1;
+ ULONG HideFromDebugger:1;
+ ULONG ActiveImpersonationInfo:1;
+ ULONG SystemThread:1;
+ ULONG HardErrorsAreDisabled:1;
+ ULONG BreakOnTermination:1;
+ ULONG SkipCreationMsg:1;
+ ULONG SkipTerminationMsg:1;
+ };
+ ULONG CrossThreadFlags; /* 240 */
+ };
+ union {
+ struct {
+ ULONG ActiveExWorker:1;
+ ULONG ExWorkerCanWaitUser:1;
+ ULONG MemoryMaker:1;
+ ULONG KeyedEventInUse:1;
+ };
+ ULONG SameThreadPassiveFlags; /* 244 */
+ };
+ union {
+ struct {
+ ULONG LpcReceivedMsgIdValid:1;
+ ULONG LpcExitThreadCalled:1;
+ ULONG AddressSpaceOwner:1;
+ ULONG OwnsProcessWorkingSetExclusive:1;
+ ULONG OwnsProcessWorkingSetShared:1;
+ ULONG OwnsSystemWorkingSetExclusive:1;
+ ULONG OwnsSystemWorkingSetShared:1;
+ ULONG OwnsSessionWorkingSetExclusive:1;
+ ULONG OwnsSessionWorkingSetShared:1;
+ ULONG ApcNeeded:1;
+ };
+ ULONG SameThreadApcFlags; /* 248 */
+ };
+ UCHAR ForwardClusterOnly; /* 24C */
+ UCHAR DisablePageFaultClustering; /* 24D */
+ 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 */
+ EX_PUSH_LOCK ProcessLock; /* 078 */
+ LARGE_INTEGER CreateTime; /* 080 */
+ LARGE_INTEGER ExitTime; /* 088 */
+ EX_RUNDOWN_REF RundownProtect; /* 090 */
+ HANDLE UniqueProcessId; /* 094 */
+ LIST_ENTRY ActiveProcessLinks; /* 098 */
+ ULONG QuotaUsage[3]; /* 0A0 */
+ ULONG QuotaPeak[3]; /* 0AC */
+ ULONG CommitCharge; /* 0B8 */
+ ULONG PeakVirtualSize; /* 0BC */
+ ULONG VirtualSize; /* 0C0 */
+ LIST_ENTRY SessionProcessLinks; /* 0C4 */
+ PVOID DebugPort; /* 0CC */
+ PVOID ExceptionPort; /* 0D0 */
+ PHANDLE_TABLE ObjectTable; /* 0D4 */
+ EX_FAST_REF Token; /* 0D8 */
+ ULONG WorkingSetPage; /* 0DC */
+ KGUARDED_MUTEX AddressCreationLock; /* 0E0 */
+ KSPIN_LOCK HyperSpaceLock; /* 100 */
+ PETHREAD ForkInProgress; /* 104 */
+ ULONG HardwareTrigger; /* 108 */
+ MM_AVL_TABLE PhysicalVadroot; /* 10C */
+ PVOID CloneRoot; /* 110 */
+ ULONG NumberOfPrivatePages; /* 114 */
+ ULONG NumberOfLockedPages; /* 118 */
+ PVOID *Win32Process; /* 11C */
+ struct _EJOB *Job; /* 120 */
+ PVOID SectionObject; /* 124 */
+ PVOID SectionBaseAddress; /* 128 */
+ PEPROCESS_QUOTA_BLOCK QuotaBlock; /* 12C */
+ PPAGEFAULT_HISTORY WorkingSetWatch; /* 130 */
+ PVOID Win32WindowStation; /* 134 */
+ HANDLE InheritedFromUniqueProcessId; /* 138 */
+ PVOID LdtInformation; /* 13C */
+ PVOID VadFreeHint; /* 140 */
+ PVOID VdmObjects; /* 144 */
+ PVOID DeviceMap; /* 148 */
+ PVOID Spare0[3]; /* 14C */
+ union {
+ HARDWARE_PTE_X86 PagedirectoryPte; /* 158 */
+ ULONGLONG Filler; /* 158 */
+ };
+ ULONG Session; /* 160 */
+ CHAR ImageFileName[16]; /* 164 */
+ LIST_ENTRY JobLinks; /* 174 */
+ PVOID LockedPagesList; /* 17C */
+ LIST_ENTRY ThreadListHead; /* 184 */
+ PVOID SecurityPort; /* 188 */
+ PVOID PaeTop; /* 18C */
+ ULONG ActiveThreds; /* 190 */
+ ACCESS_MASK GrantedAccess; /* 194 */
+ ULONG DefaultHardErrorProcessing; /* 198 */
+ NTSTATUS LastThreadExitStatus; /* 19C */
+ struct _PEB* Peb; /* 1A0 */
+ EX_FAST_REF PrefetchTrace; /* 1A4 */
+ LARGE_INTEGER ReadOperationCount; /* 1A8 */
+ LARGE_INTEGER WriteOperationCount; /* 1B0 */
+ LARGE_INTEGER OtherOperationCount; /* 1B8 */
+ LARGE_INTEGER ReadTransferCount; /* 1C0 */
+ LARGE_INTEGER WriteTransferCount; /* 1C8 */
+ LARGE_INTEGER OtherTransferCount; /* 1D0 */
+ ULONG CommitChargeLimit; /* 1D8 */
+ ULONG CommitChargePeak; /* 1DC */
+ PVOID AweInfo; /* 1E0 */
+ SE_AUDIT_PROCESS_CREATION_INFO SeAuditProcessCreationInfo; /* 1E4 */
+ MMSUPPORT Vm; /* 1E8 */
+ LIST_ENTRY MmProcessLinks; /* 230 */
+ ULONG ModifiedPageCount; /* 238 */
+ ULONG JobStatus; /* 23C */
+ union {
+ struct {
+ ULONG CreateReported:1;
+ ULONG NoDebugInherit:1;
+ ULONG ProcessExiting:1;
+ ULONG ProcessDelete:1;
+ ULONG Wow64SplitPages:1;
+ ULONG VmDeleted:1;
+ ULONG OutswapEnabled:1;
+ ULONG Outswapped:1;
+ ULONG ForkFailed:1;
+ ULONG Wow64VaSpace4Gb:1;
+ ULONG AddressSpaceInitialized:2;
+ ULONG SetTimerResolution:1;
+ ULONG BreakOnTermination:1;
+ ULONG SessionCreationUnderway:1;
+ ULONG WriteWatch:1;
+ ULONG ProcessInSession:1;
+ ULONG OverrideAddressSpace:1;
+ ULONG HasAddressSpace:1;
+ ULONG LaunchPrefetched:1;
+ ULONG InjectInpageErrors:1;
+ ULONG VmTopDown:1;
+ ULONG ImageNotifyDone:1;
+ ULONG PdeUpdateNeeded:1;
+ ULONG VdmAllowed:1;
+ ULONG SmapAllowed:1;
+ ULONG CreateFailed:1;
+ ULONG DefaultIoPriority:3;
+ ULONG Spare1:1;
+ ULONG Spare2:1;
+ };
+ ULONG Flags; /* 240 */
+ };
+
+ NTSTATUS ExitStatus; /* 244 */
+ USHORT NextPageColor; /* 248 */
+ union {
+ struct {
+ UCHAR SubSystemMinorVersion; /* 24A */
+ UCHAR SubSystemMajorVersion; /* 24B */
+ };
+ USHORT SubSystemVersion; /* 24A */
+ };
+ UCHAR PriorityClass; /* 24C */
+ MM_AVL_TABLE VadRoot; /* 250 */
+ ULONG Cookie; /* 270 */
+
+/***************************************************************
+ * REACTOS SPECIFIC START
+ ***************************************************************/
+ /* FIXME WILL BE DEPRECATED WITH PUSHLOCK SUPPORT IN 0.3.0 */
+ KEVENT LockEvent; /* 274 */
+ ULONG LockCount; /* 284 */
+ struct _KTHREAD *LockOwner; /* 288 */
+
+ /* FIXME MOVE TO AVL TREES */
+ MADDRESS_SPACE AddressSpace; /* 28C */
+} EPROCESS;
+#include <poppack.h>
+
+#include <pshpack1.h>
+typedef struct _PS_JOB_TOKEN_FILTER
+{
+ UINT CapturedSidCount;
+ PSID_AND_ATTRIBUTES CapturedSids;
+ UINT CapturedSidsLength;
+ UINT CapturedGroupCount;
+ PSID_AND_ATTRIBUTES CapturedGroups;
+ UINT CapturedGroupsLength;
+ UINT CapturedPrivilegeCount;
+ PLUID_AND_ATTRIBUTES CapturedPrivileges;
+ UINT CapturedPrivilegesLength;
+} PS_JOB_TOKEN_FILTER, *PPS_JOB_TOKEN_FILTER;
+
+typedef struct _EJOB
+{
+ KEVENT Event;
+ LIST_ENTRY JobLinks;
+ LIST_ENTRY ProcessListHead;
+ ERESOURCE JobLock;
+ LARGE_INTEGER TotalUserTime;
+ LARGE_INTEGER TotalKernelTime;
+ LARGE_INTEGER ThisPeriodTotalUserTime;
+ LARGE_INTEGER ThisPeriodTotalKernelTime;
+ UINT TotalPageFaultCount;
+ UINT TotalProcesses;
+ UINT ActiveProcesses;
+ UINT TotalTerminatedProcesses;
+ LARGE_INTEGER PerProcessUserTimeLimit;
+ LARGE_INTEGER PerJobUserTimeLimit;
+ UINT LimitFlags;
+ UINT MinimumWorkingSetSize;
+ UINT MaximumWorkingSetSize;
+ UINT ActiveProcessLimit;
+ UINT Affinity;
+ BYTE PriorityClass;
+ UINT UIRestrictionsClass;
+ UINT SecurityLimitFlags;
+ PVOID Token;
+ PPS_JOB_TOKEN_FILTER Filter;
+ UINT EndOfJobTimeAction;
+ PVOID CompletionPort;
+ PVOID CompletionKey;
+ UINT SessionId;
+ UINT SchedulingClass;
+ ULONGLONG ReadOperationCount;
+ ULONGLONG WriteOperationCount;
+ ULONGLONG OtherOperationCount;
+ ULONGLONG ReadTransferCount;
+ ULONGLONG WriteTransferCount;
+ ULONGLONG OtherTransferCount;
+ IO_COUNTERS IoInfo;
+ UINT ProcessMemoryLimit;
+ UINT JobMemoryLimit;
+ UINT PeakProcessMemoryUsed;
+ UINT PeakJobMemoryUsed;
+ UINT CurrentJobMemoryUsed;
+ KGUARDED_MUTEX MemoryLimitsLock;
+ ULONG MemberLevel;
+ ULONG JobFlags;
+} EJOB, *PEJOB;
+#include <poppack.h>
+
+#endif
+
#endif
-/* $Id$
- *
+/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
* FILE: ntoskrnl/ex/callback.c
* PURPOSE: Executive callbacks
- *
- * PROGRAMMERS: David Welch (welch@mcmail.com)
- * Alex Ionescu (alex@relsoft.net)
- */
-
-
-/*
- * NOTE: These funtions are not implemented in NT4, but
- * they are implemented in Win2k.
+ * PROGRAMMERS: Alex Ionescu (alex@relsoft.net)
*/
/* INCLUDES *****************************************************************/
#include <ntoskrnl.h>
-#include <internal/callbacks.h>
+#define NDEBUG
#include <internal/debug.h>
+/* TYPES ********************************************************************/
+
+/* Mapping for Callback Object */
+GENERIC_MAPPING ExpCallbackMapping =
+{
+ CALLBACK_READ,
+ CALLBACK_WRITE,
+ CALLBACK_EXECUTE,
+ CALLBACK_ALL_ACCESS
+};
+
+/* Structure used to hold Callbacks */
+typedef struct _CALLBACK_REGISTRATION
+{
+ LIST_ENTRY RegisteredCallbacks;
+ PCALLBACK_OBJECT CallbackObject;
+ PCALLBACK_FUNCTION CallbackFunction;
+ PVOID CallbackContext;
+ ULONG InUse;
+ BOOLEAN PendingDeletion;
+} CALLBACK_REGISTRATION, *PCALLBACK_REGISTRATION;
+
+typedef struct
+{
+ PCALLBACK_OBJECT *CallbackObject;
+ PWSTR Name;
+} SYSTEM_CALLBACKS;
+
+/* Kernel Default Callbacks */
+PCALLBACK_OBJECT SetSystemTimeCallback;
+PCALLBACK_OBJECT SetSystemStateCallback;
+PCALLBACK_OBJECT PowerStateCallback;
+
+SYSTEM_CALLBACKS ExpInitializeCallback[] =
+{
+ {&SetSystemTimeCallback, L"\\Callback\\SetSystemTime"},
+ {&SetSystemStateCallback, L"\\Callback\\SetSystemState"},
+ {&PowerStateCallback, L"\\Callback\\PowerState"},
+ {NULL, NULL}
+};
+
+POBJECT_TYPE ExCallbackObjectType;
+KEVENT ExpCallbackEvent;
+
/* FUNCTIONS *****************************************************************/
/*
RtlZeroMemory(&ObjectTypeInitializer, sizeof(ObjectTypeInitializer));
RtlInitUnicodeString(&Name, L"Callback");
ObjectTypeInitializer.Length = sizeof(ObjectTypeInitializer);
- ObjectTypeInitializer.DefaultNonPagedPoolCharge = sizeof(_INT_CALLBACK_OBJECT);
+ ObjectTypeInitializer.DefaultNonPagedPoolCharge = sizeof(CALLBACK_OBJECT);
ObjectTypeInitializer.GenericMapping = ExpCallbackMapping;
ObjectTypeInitializer.PoolType = NonPagedPool;
ObjectTypeInitializer.UseDefaultObject = TRUE;
IN BOOLEAN AllowMultipleCallbacks
)
{
- PINT_CALLBACK_OBJECT Callback;
+ PCALLBACK_OBJECT Callback;
NTSTATUS Status;
HANDLE Handle;
ObjectAttributes,
KernelMode,
NULL,
- sizeof(_INT_CALLBACK_OBJECT),
+ sizeof(CALLBACK_OBJECT),
0,
0,
(PVOID *)&Callback );
IN PVOID Argument2
)
{
- PINT_CALLBACK_OBJECT CallbackObject = (PINT_CALLBACK_OBJECT)OpaqueCallbackObject;
+ PCALLBACK_OBJECT CallbackObject = (PCALLBACK_OBJECT)OpaqueCallbackObject;
PLIST_ENTRY RegisteredCallbacks;
PCALLBACK_REGISTRATION CallbackRegistration;
KIRQL OldIrql;
IN PVOID CallbackContext
)
{
- PINT_CALLBACK_OBJECT CallbackObject = (PINT_CALLBACK_OBJECT)OpaqueCallbackObject;
+ PCALLBACK_OBJECT CallbackObject = (PCALLBACK_OBJECT)OpaqueCallbackObject;
PCALLBACK_REGISTRATION CallbackRegistration = NULL;
KIRQL OldIrql;
)
{
PCALLBACK_REGISTRATION CallbackRegistration;
- PINT_CALLBACK_OBJECT CallbackObject;
+ PCALLBACK_OBJECT CallbackObject;
KIRQL OldIrql;
PAGED_CODE();
-/*
- * ReactOS kernel
- * Copyright (C) 1998, 1999, 2000, 2001 ReactOS Team
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
#ifndef __NTOSKRNL_INCLUDE_INTERNAL_ARCH_PS_H
#define __NTOSKRNL_INCLUDE_INTERNAL_ARCH_PS_H
#ifdef _M_IX86
-#include <internal/i386/ps.h>
#define KiArchContextSwitch KiSwapContext
#define KiArchInitThreadWithContext Ke386InitThreadWithContext
#else
--- /dev/null
+/*
+ * Definitions for the offsets of members in the KV86M_REGISTERS
+ */
+#define KV86M_REGISTERS_EBP (0x0)
+#define KV86M_REGISTERS_EDI (0x4)
+#define KV86M_REGISTERS_ESI (0x8)
+#define KV86M_REGISTERS_EDX (0xC)
+#define KV86M_REGISTERS_ECX (0x10)
+#define KV86M_REGISTERS_EBX (0x14)
+#define KV86M_REGISTERS_EAX (0x18)
+#define KV86M_REGISTERS_DS (0x1C)
+#define KV86M_REGISTERS_ES (0x20)
+#define KV86M_REGISTERS_FS (0x24)
+#define KV86M_REGISTERS_GS (0x28)
+#define KV86M_REGISTERS_EIP (0x2C)
+#define KV86M_REGISTERS_CS (0x30)
+#define KV86M_REGISTERS_EFLAGS (0x34)
+#define KV86M_REGISTERS_ESP (0x38)
+#define KV86M_REGISTERS_SS (0x3C)
+
+#define TF_SAVED_EXCEPTION_STACK (0x8C)
+#define TF_REGS (0x90)
+#define TF_ORIG_EBP (0x94)
+
+
+/* TSS Offsets */
+#define KTSS_ESP0 (0x4)
+#define KTSS_CR3 (0x1C)
+#define KTSS_EFLAGS (0x24)
+#define KTSS_IOMAPBASE (0x66)
+
+/*
+ * Defines for accessing KPCR and KTHREAD structure members
+ */
+#define KTHREAD_INITIAL_STACK 0x18
+#define KTHREAD_STACK_LIMIT 0x1C
+#define KTHREAD_TEB 0x20
+#define KTHREAD_KERNEL_STACK 0x28
+#define KTHREAD_NPX_STATE 0x31
+#define KTHREAD_STATE 0x2D
+#define KTHREAD_APCSTATE_PROCESS 0x34 + 0x10
+#define KTHREAD_PENDING_USER_APC 0x34 + 0x16
+#define KTHREAD_PENDING_KERNEL_APC 0x34 + 0x15
+#define KTHREAD_CONTEXT_SWITCHES 0x4C
+#define KTHREAD_WAIT_IRQL 0x54
+#define KTHREAD_SERVICE_TABLE 0xDC
+#define KTHREAD_PREVIOUS_MODE 0x137
+#define KTHREAD_TRAP_FRAME 0x128
+#define KTHREAD_CALLBACK_STACK 0x120
+
+#define KPROCESS_DIRECTORY_TABLE_BASE 0x18
+#define KPROCESS_LDT_DESCRIPTOR0 0x20
+#define KPROCESS_LDT_DESCRIPTOR1 0x24
+#define KPROCESS_IOPM_OFFSET 0x30
+
+#define KPCR_EXCEPTION_LIST 0x0
+#define KPCR_INITIAL_STACK 0x4
+#define KPCR_STACK_LIMIT 0x8
+#define KPCR_SELF 0x1C
+#define KPCR_GDT 0x3C
+#define KPCR_TSS 0x40
+#define KPCR_CURRENT_THREAD 0x124
+#define KPCR_NPX_THREAD 0x2A4
+
+/* FPU Save Area Offsets */
+#define FN_CONTROL_WORD 0x0
+#define FN_STATUS_WORD 0x4
+#define FN_TAG_WORD 0x8
+#define FN_DATA_SELECTOR 0x18
+#define FN_CR0_NPX_STATE 0x20C
+#define SIZEOF_FX_SAVE_AREA 528
+
+/* Trap Frame Offsets */
+#define KTRAP_FRAME_DEBUGEBP (0x0)
+#define KTRAP_FRAME_DEBUGEIP (0x4)
+#define KTRAP_FRAME_DEBUGARGMARK (0x8)
+#define KTRAP_FRAME_DEBUGPOINTER (0xC)
+#define KTRAP_FRAME_TEMPSS (0x10)
+#define KTRAP_FRAME_TEMPESP (0x14)
+#define KTRAP_FRAME_DR0 (0x18)
+#define KTRAP_FRAME_DR1 (0x1C)
+#define KTRAP_FRAME_DR2 (0x20)
+#define KTRAP_FRAME_DR3 (0x24)
+#define KTRAP_FRAME_DR6 (0x28)
+#define KTRAP_FRAME_DR7 (0x2C)
+#define KTRAP_FRAME_GS (0x30)
+#define KTRAP_FRAME_RESERVED1 (0x32)
+#define KTRAP_FRAME_ES (0x34)
+#define KTRAP_FRAME_RESERVED2 (0x36)
+#define KTRAP_FRAME_DS (0x38)
+#define KTRAP_FRAME_RESERVED3 (0x3A)
+#define KTRAP_FRAME_EDX (0x3C)
+#define KTRAP_FRAME_ECX (0x40)
+#define KTRAP_FRAME_EAX (0x44)
+#define KTRAP_FRAME_PREVIOUS_MODE (0x48)
+#define KTRAP_FRAME_EXCEPTION_LIST (0x4C)
+#define KTRAP_FRAME_FS (0x50)
+#define KTRAP_FRAME_RESERVED4 (0x52)
+#define KTRAP_FRAME_EDI (0x54)
+#define KTRAP_FRAME_ESI (0x58)
+#define KTRAP_FRAME_EBX (0x5C)
+#define KTRAP_FRAME_EBP (0x60)
+#define KTRAP_FRAME_ERROR_CODE (0x64)
+#define KTRAP_FRAME_EIP (0x68)
+#define KTRAP_FRAME_CS (0x6C)
+#define KTRAP_FRAME_EFLAGS (0x70)
+#define KTRAP_FRAME_ESP (0x74)
+#define KTRAP_FRAME_SS (0x78)
+#define KTRAP_FRAME_RESERVED5 (0x7A)
+#define KTRAP_FRAME_V86_ES (0x7C)
+#define KTRAP_FRAME_RESERVED6 (0x7E)
+#define KTRAP_FRAME_V86_DS (0x80)
+#define KTRAP_FRAME_RESERVED7 (0x82)
+#define KTRAP_FRAME_V86_FS (0x84)
+#define KTRAP_FRAME_RESERVED8 (0x86)
+#define KTRAP_FRAME_V86_GS (0x88)
+#define KTRAP_FRAME_RESERVED9 (0x8A)
+#define KTRAP_FRAME_SIZE (0x8C)
+++ /dev/null
-/*
- * ReactOS kernel
- * Copyright (C) 1998, 1999, 2000, 2001 ReactOS Team
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- *
- * PROJECT: ReactOS kernel
- * FILE: ntoskrnl/ex/callback.h
- * PURPOSE: Executive callbacks Header
- * PROGRAMMER: Alex Ionescu (alex@relsoft.net)
- * PORTABILITY: Checked.
- * UPDATE HISTORY:
- * Created 30/05/04
- */
-
-#ifndef __INCLUDE_INTERNAL_CALLBACKS_H
-#define __INCLUDE_INTERNAL_CALLBACKS_H
-
-/* Tag */
-#define CALLBACK_TAG TAG('C','L','B','K')
-
-/* ROS Callback Object */
-typedef struct _INT_CALLBACK_OBJECT {
- KSPIN_LOCK Lock;
- LIST_ENTRY RegisteredCallbacks;
- ULONG AllowMultipleCallbacks;
-} _INT_CALLBACK_OBJECT , *PINT_CALLBACK_OBJECT;
-
-/* Structure used to hold Callbacks */
-typedef struct _CALLBACK_REGISTRATION {
- LIST_ENTRY RegisteredCallbacks;
- PINT_CALLBACK_OBJECT CallbackObject;
- PCALLBACK_FUNCTION CallbackFunction;
- PVOID CallbackContext;
- ULONG InUse;
- BOOLEAN PendingDeletion;
-} CALLBACK_REGISTRATION, *PCALLBACK_REGISTRATION;
-
-/* Add 0x1 flag to differentiate */
-#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)
-
-/* Mapping for Callback Object */
-GENERIC_MAPPING ExpCallbackMapping =
-{
- CALLBACK_READ,
- CALLBACK_WRITE,
- CALLBACK_EXECUTE,
- CALLBACK_ALL_ACCESS
-};
-
-/* Kernel Default Callbacks */
-PINT_CALLBACK_OBJECT SetSystemTimeCallback;
-PINT_CALLBACK_OBJECT SetSystemStateCallback;
-PINT_CALLBACK_OBJECT PowerStateCallback;
-
-typedef struct {
- PINT_CALLBACK_OBJECT *CallbackObject;
- PWSTR Name;
-} SYSTEM_CALLBACKS;
-
-SYSTEM_CALLBACKS ExpInitializeCallback[] = {
- {&SetSystemTimeCallback, L"\\Callback\\SetSystemTime"},
- {&SetSystemStateCallback, L"\\Callback\\SetSystemState"},
- {&PowerStateCallback, L"\\Callback\\PowerState"},
- {NULL, NULL}
-};
-
-/* Callback Event */
-KEVENT ExpCallbackEvent;
-
-/* Callback Object */
-POBJECT_TYPE ExCallbackObjectType;
-
-#endif /* __INCLUDE_INTERNAL_CALLBACKS_H */
-
-/* EOF */
typedef struct _BCB
{
- LIST_ENTRY BcbSegmentListHead;
- LIST_ENTRY BcbRemoveListEntry;
- BOOLEAN RemoveOnClose;
- ULONG TimeStamp;
- PFILE_OBJECT FileObject;
- ULONG CacheSegmentSize;
- LARGE_INTEGER AllocationSize;
- LARGE_INTEGER FileSize;
- KSPIN_LOCK BcbLock;
- ULONG RefCount;
+ LIST_ENTRY BcbSegmentListHead;
+ LIST_ENTRY BcbRemoveListEntry;
+ BOOLEAN RemoveOnClose;
+ ULONG TimeStamp;
+ PFILE_OBJECT FileObject;
+ ULONG CacheSegmentSize;
+ LARGE_INTEGER AllocationSize;
+ LARGE_INTEGER FileSize;
+ KSPIN_LOCK BcbLock;
+ ULONG RefCount;
} BCB, *PBCB;
typedef struct _CACHE_SEGMENT
{
- /* Base address of the region where the cache segment data is mapped. */
- PVOID BaseAddress;
- /*
- * Memory area representing the region where the cache segment data is
- * mapped.
- */
- struct _MEMORY_AREA* MemoryArea;
- /* Are the contents of the cache segment data valid. */
- BOOLEAN Valid;
- /* Are the contents of the cache segment data newer than those on disk. */
- BOOLEAN Dirty;
- /* Page out in progress */
- BOOLEAN PageOut;
- ULONG MappedCount;
- /* Entry in the list of segments for this BCB. */
- LIST_ENTRY BcbSegmentListEntry;
- /* Entry in the list of segments which are dirty. */
- LIST_ENTRY DirtySegmentListEntry;
- /* Entry in the list of segments. */
- LIST_ENTRY CacheSegmentListEntry;
- LIST_ENTRY CacheSegmentLRUListEntry;
- /* Offset in the file which this cache segment maps. */
- ULONG FileOffset;
- /* Lock. */
- FAST_MUTEX Lock;
- /* Number of references. */
- ULONG ReferenceCount;
- /* Pointer to the BCB for the file which this cache segment maps data for. */
- PBCB Bcb;
- /* Pointer to the next cache segment in a chain. */
- struct _CACHE_SEGMENT* NextInChain;
+ /* Base address of the region where the cache segment data is mapped. */
+ PVOID BaseAddress;
+ /*
+ * Memory area representing the region where the cache segment data is
+ * mapped.
+ */
+ struct _MEMORY_AREA* MemoryArea;
+ /* Are the contents of the cache segment data valid. */
+ BOOLEAN Valid;
+ /* Are the contents of the cache segment data newer than those on disk. */
+ BOOLEAN Dirty;
+ /* Page out in progress */
+ BOOLEAN PageOut;
+ ULONG MappedCount;
+ /* Entry in the list of segments for this BCB. */
+ LIST_ENTRY BcbSegmentListEntry;
+ /* Entry in the list of segments which are dirty. */
+ LIST_ENTRY DirtySegmentListEntry;
+ /* Entry in the list of segments. */
+ LIST_ENTRY CacheSegmentListEntry;
+ LIST_ENTRY CacheSegmentLRUListEntry;
+ /* Offset in the file which this cache segment maps. */
+ ULONG FileOffset;
+ /* Lock. */
+ FAST_MUTEX Lock;
+ /* Number of references. */
+ ULONG ReferenceCount;
+ /* Pointer to the BCB for the file which this cache segment maps data for. */
+ PBCB Bcb;
+ /* Pointer to the next cache segment in a chain. */
+ struct _CACHE_SEGMENT* NextInChain;
} CACHE_SEGMENT, *PCACHE_SEGMENT;
typedef struct _INTERNAL_BCB
{
- PUBLIC_BCB PFCB;
- PCACHE_SEGMENT CacheSegment;
- BOOLEAN Dirty;
- CSHORT RefCount; /* (At offset 0x34 on WinNT4) */
+ PUBLIC_BCB PFCB;
+ PCACHE_SEGMENT CacheSegment;
+ BOOLEAN Dirty;
+ CSHORT RefCount; /* (At offset 0x34 on WinNT4) */
} INTERNAL_BCB, *PINTERNAL_BCB;
VOID
STDCALL
-CcMdlReadCompleteDev(IN PMDL MdlChain,
- IN PFILE_OBJECT FileObject);
+CcMdlReadCompleteDev(
+ IN PMDL MdlChain,
+ IN PFILE_OBJECT FileObject
+);
VOID
STDCALL
-CcMdlWriteCompleteDev(IN PLARGE_INTEGER FileOffset,
- IN PMDL MdlChain,
- IN PFILE_OBJECT FileObject);
+CcMdlWriteCompleteDev(
+ IN PLARGE_INTEGER FileOffset,
+ IN PMDL MdlChain,
+ IN PFILE_OBJECT FileObject
+);
NTSTATUS
CcRosFlushCacheSegment(PCACHE_SEGMENT CacheSegment);
NTSTATUS
-CcRosGetCacheSegment(PBCB Bcb,
- ULONG FileOffset,
- PULONG BaseOffset,
- PVOID* BaseAddress,
- PBOOLEAN UptoDate,
- PCACHE_SEGMENT* CacheSeg);
+CcRosGetCacheSegment(
+ PBCB Bcb,
+ ULONG FileOffset,
+ PULONG BaseOffset,
+ PVOID* BaseAddress,
+ PBOOLEAN UptoDate,
+ PCACHE_SEGMENT* CacheSeg
+);
+
VOID
CcInitView(VOID);
NTSTATUS
-CcRosFreeCacheSegment(PBCB, PCACHE_SEGMENT);
+CcRosFreeCacheSegment(
+ PBCB,
+ PCACHE_SEGMENT
+);
NTSTATUS
ReadCacheSegment(PCACHE_SEGMENT CacheSeg);
VOID CcInit(VOID);
NTSTATUS
-CcRosUnmapCacheSegment(PBCB Bcb, ULONG FileOffset, BOOLEAN NowDirty);
+CcRosUnmapCacheSegment(
+ PBCB Bcb,
+ ULONG FileOffset,
+ BOOLEAN NowDirty
+);
PCACHE_SEGMENT
-CcRosLookupCacheSegment(PBCB Bcb, ULONG FileOffset);
+CcRosLookupCacheSegment(
+ PBCB Bcb,
+ ULONG FileOffset
+);
NTSTATUS
-CcRosGetCacheSegmentChain(PBCB Bcb,
- ULONG FileOffset,
- ULONG Length,
- PCACHE_SEGMENT* CacheSeg);
+CcRosGetCacheSegmentChain(
+ PBCB Bcb,
+ ULONG FileOffset,
+ ULONG Length,
+ PCACHE_SEGMENT* CacheSeg
+);
VOID
CcInitCacheZeroPage(VOID);
NTSTATUS
-CcRosMarkDirtyCacheSegment(PBCB Bcb, ULONG FileOffset);
+CcRosMarkDirtyCacheSegment(
+ PBCB Bcb,
+ ULONG FileOffset
+);
NTSTATUS
-CcRosFlushDirtyPages(ULONG Target, PULONG Count);
+CcRosFlushDirtyPages(
+ ULONG Target,
+ PULONG Count
+);
VOID
CcRosDereferenceCache(PFILE_OBJECT FileObject);
CcRosSetRemoveOnClose(PSECTION_OBJECT_POINTERS SectionObjectPointer);
NTSTATUS
-CcRosReleaseCacheSegment (BCB* Bcb,
- CACHE_SEGMENT* CacheSeg,
- BOOLEAN Valid,
- BOOLEAN Dirty,
- BOOLEAN Mapped);
-
-NTSTATUS STDCALL
-CcRosRequestCacheSegment (BCB* Bcb,
- ULONG FileOffset,
- PVOID* BaseAddress,
- PBOOLEAN UptoDate,
- CACHE_SEGMENT** CacheSeg);
+CcRosReleaseCacheSegment(
+ BCB* Bcb,
+ CACHE_SEGMENT* CacheSeg,
+ BOOLEAN Valid,
+ BOOLEAN Dirty,
+ BOOLEAN Mapped
+);
+
+NTSTATUS
+STDCALL
+CcRosRequestCacheSegment(
+ BCB* Bcb,
+ ULONG FileOffset,
+ PVOID* BaseAddress,
+ PBOOLEAN UptoDate,
+ CACHE_SEGMENT** CacheSeg
+);
NTSTATUS
CcTryToInitializeFileCache(PFILE_OBJECT FileObject);
+++ /dev/null
-#ifndef __DEPRECATED_INTERNAL_CONFIG_H
-#define __DEPRECATED__INTERNAL_CONFIG_H
-
-/* Moved to /include/roscfg.h */
-#include <roscfg.h>
-
-#endif /* __DEPRECATED_INTERNAL_CONFIG_H */
-/*
- * ReactOS kernel
- * Copyright (C) 2000 David Welch <welch@cwcom.net>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
#ifndef __NTOSKRNL_INCLUDE_INTERNAL_DBGK_H
#define __NTOSKRNL_INCLUDE_INTERNAL_DBGK_H
-//
-// DebugObject access rights.
-// Note that DEBUG_OBJECT_ALL_ACCESS includes the specific rights 0x0F, but there are only two
-// debug object specific access rights that are ever checked by the kernel. This appears to be a bug.
-//
-#define DEBUG_OBJECT_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x0F)
-#define DEBUG_OBJECT_WAIT_STATE_CHANGE 0x0001 /* Required to call NtWaitForDebugEvent & NtContinueDebugEvent */
-#define DEBUG_OBJECT_ADD_REMOVE_PROCESS 0x0002 /* Required to call NtDebugActiveProcess & NtRemoveProcessDebug */
-
-typedef enum _DEBUGOBJECTINFOCLASS {
- DebugObjectUnusedInformation,
- DebugObjectKillProcessOnExitInformation
-} DEBUGOBJECTINFOCLASS, * PDEBUGOBJECTINFOCLASS;
-
-typedef struct _DEBUG_OBJECT_KILL_PROCESS_ON_EXIT_INFORMATION {
- ULONG KillProcessOnExit; // Interpreted as a BOOLEAN, TRUE -> process is terminated on NtRemoveProcessDebug.
-} DEBUG_OBJECT_KILL_PROCESS_ON_EXIT_INFORMATION, *
-PDEBUG_OBJECT_KILL_PROCESS_ON_EXIT_INFORMATION;
-
-//
-// Debug Object
-//
-typedef struct _DBGK_DEBUG_OBJECT {
- KEVENT Event;
- FAST_MUTEX Mutex;
- LIST_ENTRY StateEventListEntry;
- union {
- ULONG Flags;
- struct {
- UCHAR DebuggerInactive :1;
- UCHAR KillProcessOnExit :1;
- };
- };
-} DBGK_DEBUG_OBJECT, *PDBGK_DEBUG_OBJECT;
-
-//
-// DbgUi types for LPC debug port messages (KM -> UM).
-//
-// These also apply to Nt*Debug APIs with NT 5.01, 5.02, and later.
-//
-typedef enum _DBG_STATE {
- DbgIdle,
- DbgReplyPending,
- DbgCreateThreadStateChange,
- DbgCreateProcessStateChange,
- DbgExitThreadStateChange,
- DbgExitProcessStateChange,
- DbgExceptionStateChange,
- DbgBreakpointStateChange,
- DbgSingleStepStateChange,
- DbgLoadDllStateChange,
- DbgUnloadDllStateChange
-} DBG_STATE, *PDBG_STATE;
-
-typedef struct _DBGKM_EXCEPTION {
- EXCEPTION_RECORD ExceptionRecord;
- ULONG FirstChance;
-} DBGKM_EXCEPTION, *PDBGKM_EXCEPTION;
-
-typedef struct _DBGKM_CREATE_THREAD {
- ULONG SubSystemKey;
- PVOID StartAddress;
-} DBGKM_CREATE_THREAD, *PDBGKM_CREATE_THREAD;
-
-typedef struct _DBGKM_CREATE_PROCESS {
- ULONG SubSystemKey;
- HANDLE FileHandle;
- PVOID BaseOfImage;
- ULONG DebugInfoFileOffset;
- ULONG DebugInfoSize;
- DBGKM_CREATE_THREAD InitialThread;
-} DBGKM_CREATE_PROCESS, *PDBGKM_CREATE_PROCESS;
-
-typedef struct _DBGKM_EXIT_THREAD {
- NTSTATUS ExitStatus;
-} DBGKM_EXIT_THREAD, *PDBGKM_EXIT_THREAD;
-
-typedef struct _DBGKM_EXIT_PROCESS {
- NTSTATUS ExitStatus;
-} DBGKM_EXIT_PROCESS, *PDBGKM_EXIT_PROCESS;
-
-typedef struct _DBGKM_LOAD_DLL {
- HANDLE FileHandle;
- PVOID BaseOfDll;
- ULONG DebugInfoFileOffset;
- ULONG DebugInfoSize;
-} DBGKM_LOAD_DLL, *PDBGKM_LOAD_DLL;
-
-typedef struct _DBGKM_UNLOAD_DLL {
- PVOID BaseAddress;
-} DBGKM_UNLOAD_DLL, *PDBGKM_UNLOAD_DLL;
-
-typedef struct _DBGUI_WAIT_STATE_CHANGE {
- DBG_STATE NewState;
- CLIENT_ID AppClientId;
- union {
- struct {
- HANDLE HandleToThread;
- DBGKM_CREATE_THREAD NewThread;
- } CreateThread;
- struct {
- HANDLE HandleToProcess;
- HANDLE HandleToThread;
- DBGKM_CREATE_PROCESS NewProcess;
- } CreateProcessInfo;
- DBGKM_EXIT_THREAD ExitThread;
- DBGKM_EXIT_PROCESS ExitProcess;
- DBGKM_EXCEPTION Exception;
- DBGKM_LOAD_DLL LoadDll;
- DBGKM_UNLOAD_DLL UnloadDll;
- } StateInfo;
-} DBGUI_WAIT_STATE_CHANGE, * PDBGUI_WAIT_STATE_CHANGE;
-
-
VOID
STDCALL
DbgkCreateThread(PVOID StartAddress);
-/*
- * internal executive prototypes
- */
-
#ifndef __NTOSKRNL_INCLUDE_INTERNAL_EXECUTIVE_H
#define __NTOSKRNL_INCLUDE_INTERNAL_EXECUTIVE_H
typedef enum
{
- wmCenter = 0,
- wmTile,
- wmStretch
+ wmCenter = 0,
+ wmTile,
+ wmStretch
} WALLPAPER_MODE;
typedef struct _WINSTATION_OBJECT
{
- PVOID SharedHeap; /* points to kmode memory! */
-
- CSHORT Type;
- CSHORT Size;
- KSPIN_LOCK Lock;
- UNICODE_STRING Name;
- LIST_ENTRY DesktopListHead;
- PRTL_ATOM_TABLE AtomTable;
- PVOID HandleTable;
- HANDLE SystemMenuTemplate;
- PVOID SystemCursor;
- UINT CaretBlinkRate;
- HANDLE ShellWindow;
- HANDLE ShellListView;
-
- /* Wallpaper */
- HANDLE hbmWallpaper;
- ULONG cxWallpaper, cyWallpaper;
- WALLPAPER_MODE WallpaperMode;
-
- ULONG Flags;
- struct _DESKTOP_OBJECT* ActiveDesktop;
- /* FIXME: Clipboard */
- LIST_ENTRY HotKeyListHead;
- FAST_MUTEX HotKeyListLock;
+ PVOID SharedHeap; /* points to kmode memory! */
+
+ CSHORT Type;
+ CSHORT Size;
+ KSPIN_LOCK Lock;
+ UNICODE_STRING Name;
+ LIST_ENTRY DesktopListHead;
+ PRTL_ATOM_TABLE AtomTable;
+ PVOID HandleTable;
+ HANDLE SystemMenuTemplate;
+ PVOID SystemCursor;
+ UINT CaretBlinkRate;
+ HANDLE ShellWindow;
+ HANDLE ShellListView;
+
+ /* Wallpaper */
+ HANDLE hbmWallpaper;
+ ULONG cxWallpaper, cyWallpaper;
+ WALLPAPER_MODE WallpaperMode;
+
+ ULONG Flags;
+ struct _DESKTOP_OBJECT* ActiveDesktop;
+ /* FIXME: Clipboard */
+ LIST_ENTRY HotKeyListHead;
+ FAST_MUTEX HotKeyListLock;
} WINSTATION_OBJECT, *PWINSTATION_OBJECT;
typedef struct _DESKTOP_OBJECT
{
- PVOID DesktopHeap; /* points to kmode memory! */
-
- CSHORT Type;
- CSHORT Size;
- LIST_ENTRY ListEntry;
- KSPIN_LOCK Lock;
- UNICODE_STRING Name;
- /* Pointer to the associated window station. */
- struct _WINSTATION_OBJECT *WindowStation;
- /* Pointer to the active queue. */
- PVOID ActiveMessageQueue;
- /* Rectangle of the work area */
+ PVOID DesktopHeap; /* points to kmode memory! */
+
+ CSHORT Type;
+ CSHORT Size;
+ LIST_ENTRY ListEntry;
+ KSPIN_LOCK Lock;
+ UNICODE_STRING Name;
+ /* Pointer to the associated window station. */
+ struct _WINSTATION_OBJECT *WindowStation;
+ /* Pointer to the active queue. */
+ PVOID ActiveMessageQueue;
+ /* Rectangle of the work area */
#ifdef __WIN32K__
- RECT WorkArea;
+ RECT WorkArea;
#else
- LONG WorkArea[4];
+ LONG WorkArea[4];
#endif
- /* Handle of the desktop window. */
- HANDLE DesktopWindow;
- HANDLE PrevActiveWindow;
- /* Thread blocking input */
- PVOID BlockInputThread;
+ /* Handle of the desktop window. */
+ HANDLE DesktopWindow;
+ HANDLE PrevActiveWindow;
+ /* Thread blocking input */
+ PVOID BlockInputThread;
- LIST_ENTRY ShellHookWindows;
+ LIST_ENTRY ShellHookWindows;
} DESKTOP_OBJECT, *PDESKTOP_OBJECT;
-
-typedef VOID (*PLOOKASIDE_MINMAX_ROUTINE)(
- POOL_TYPE PoolType,
- ULONG Size,
- PUSHORT MinimumDepth,
- PUSHORT MaximumDepth);
-
/* GLOBAL VARIABLES *********************************************************/
extern TIME_ZONE_INFORMATION ExpTimeZoneInfo;
extern LARGE_INTEGER ExpTimeZoneBias;
extern ULONG ExpTimeZoneId;
-
extern POBJECT_TYPE ExEventPairObjectType;
/* INITIALIZATION FUNCTIONS *************************************************/
VOID
ExInit2(VOID);
+
VOID
ExInit3(VOID);
+
VOID
ExpInitTimeZoneInfo(VOID);
+
VOID
ExpInitializeWorkerThreads(VOID);
+
VOID
ExpInitLookasideLists(VOID);
+
VOID
ExpInitializeCallbacks(VOID);
+
VOID
ExpInitUuids(VOID);
+
VOID
STDCALL
ExpInitializeExecutive(VOID);
+VOID
+ExpInitializeEventImplementation(VOID);
+
+VOID
+ExpInitializeEventImplementation(VOID);
+
+VOID
+ExpInitializeEventPairImplementation(VOID);
+
+VOID
+ExpInitializeSemaphoreImplementation(VOID);
+
+VOID
+ExpInitializeMutantImplementation(VOID);
+
+VOID
+ExpInitializeTimerImplementation(VOID);
+
+VOID
+ExpInitializeProfileImplementation(VOID);
+
/* HANDLE TABLE FUNCTIONS ***************************************************/
#define EX_HANDLE_ENTRY_LOCKED (1 << ((sizeof(PVOID) * 8) - 1))
EX_HANDLE_ENTRY_INHERITABLE | \
EX_HANDLE_ENTRY_AUDITONCLOSE)
-typedef VOID (STDCALL PEX_DESTROY_HANDLE_CALLBACK)(PHANDLE_TABLE HandleTable, PVOID Object, ULONG GrantedAccess, PVOID Context);
-typedef BOOLEAN (STDCALL PEX_DUPLICATE_HANDLE_CALLBACK)(PHANDLE_TABLE HandleTable, PHANDLE_TABLE_ENTRY HandleTableEntry, PVOID Context);
-typedef BOOLEAN (STDCALL PEX_CHANGE_HANDLE_CALLBACK)(PHANDLE_TABLE HandleTable, PHANDLE_TABLE_ENTRY HandleTableEntry, PVOID Context);
+typedef VOID (STDCALL PEX_DESTROY_HANDLE_CALLBACK)(
+ PHANDLE_TABLE HandleTable,
+ PVOID Object,
+ ULONG GrantedAccess,
+ PVOID Context
+);
+
+typedef BOOLEAN (STDCALL PEX_DUPLICATE_HANDLE_CALLBACK)(
+ PHANDLE_TABLE HandleTable,
+ PHANDLE_TABLE_ENTRY HandleTableEntry,
+ PVOID Context
+);
+
+typedef BOOLEAN (STDCALL PEX_CHANGE_HANDLE_CALLBACK)(
+ PHANDLE_TABLE HandleTable,
+ PHANDLE_TABLE_ENTRY HandleTableEntry,
+ PVOID Context
+);
VOID
ExpInitializeHandleTables(VOID);
+
PHANDLE_TABLE
ExCreateHandleTable(IN PEPROCESS QuotaProcess OPTIONAL);
+
VOID
-ExDestroyHandleTable(IN PHANDLE_TABLE HandleTable,
- IN PEX_DESTROY_HANDLE_CALLBACK DestroyHandleCallback OPTIONAL,
- IN PVOID Context OPTIONAL);
+ExDestroyHandleTable(
+ IN PHANDLE_TABLE HandleTable,
+ IN PEX_DESTROY_HANDLE_CALLBACK DestroyHandleCallback OPTIONAL,
+ IN PVOID Context OPTIONAL
+);
+
PHANDLE_TABLE
-ExDupHandleTable(IN PEPROCESS QuotaProcess OPTIONAL,
- IN PEX_DUPLICATE_HANDLE_CALLBACK DuplicateHandleCallback OPTIONAL,
- IN PVOID Context OPTIONAL,
- IN PHANDLE_TABLE SourceHandleTable);
+ExDupHandleTable(
+ IN PEPROCESS QuotaProcess OPTIONAL,
+ IN PEX_DUPLICATE_HANDLE_CALLBACK DuplicateHandleCallback OPTIONAL,
+ IN PVOID Context OPTIONAL,
+ IN PHANDLE_TABLE SourceHandleTable
+);
+
BOOLEAN
-ExLockHandleTableEntry(IN PHANDLE_TABLE HandleTable,
- IN PHANDLE_TABLE_ENTRY Entry);
+ExLockHandleTableEntry(
+ IN PHANDLE_TABLE HandleTable,
+ IN PHANDLE_TABLE_ENTRY Entry
+);
+
VOID
-ExUnlockHandleTableEntry(IN PHANDLE_TABLE HandleTable,
- IN PHANDLE_TABLE_ENTRY Entry);
+ExUnlockHandleTableEntry(
+ IN PHANDLE_TABLE HandleTable,
+ IN PHANDLE_TABLE_ENTRY Entry
+);
+
LONG
-ExCreateHandle(IN PHANDLE_TABLE HandleTable,
- IN PHANDLE_TABLE_ENTRY Entry);
+ExCreateHandle(
+ IN PHANDLE_TABLE HandleTable,
+ IN PHANDLE_TABLE_ENTRY Entry
+);
+
BOOLEAN
-ExDestroyHandle(IN PHANDLE_TABLE HandleTable,
- IN LONG Handle);
+ExDestroyHandle(
+ IN PHANDLE_TABLE HandleTable,
+ IN LONG Handle
+);
+
VOID
-ExDestroyHandleByEntry(IN PHANDLE_TABLE HandleTable,
- IN PHANDLE_TABLE_ENTRY Entry,
- IN LONG Handle);
+ExDestroyHandleByEntry(
+ IN PHANDLE_TABLE HandleTable,
+ IN PHANDLE_TABLE_ENTRY Entry,
+ IN LONG Handle
+);
+
PHANDLE_TABLE_ENTRY
-ExMapHandleToPointer(IN PHANDLE_TABLE HandleTable,
- IN LONG Handle);
+ExMapHandleToPointer(
+ IN PHANDLE_TABLE HandleTable,
+ IN LONG Handle
+);
BOOLEAN
-ExChangeHandle(IN PHANDLE_TABLE HandleTable,
- IN LONG Handle,
- IN PEX_CHANGE_HANDLE_CALLBACK ChangeHandleCallback,
- IN PVOID Context);
+ExChangeHandle(
+ IN PHANDLE_TABLE HandleTable,
+ IN LONG Handle,
+ IN PEX_CHANGE_HANDLE_CALLBACK ChangeHandleCallback,
+ IN PVOID Context
+);
/* PSEH EXCEPTION HANDLING **************************************************/
static __inline _SEH_FILTER(_SEH_ExSystemExceptionFilter)
{
- return ExSystemExceptionFilter();
+ return ExSystemExceptionFilter();
}
/* OTHER FUNCTIONS **********************************************************/
LONGLONG
FASTCALL
-ExfpInterlockedExchange64(LONGLONG volatile * Destination,
- PLONGLONG Exchange);
+ExfpInterlockedExchange64(
+ LONGLONG volatile * Destination,
+ PLONGLONG Exchange
+);
NTSTATUS
ExpSetTimeZoneInformation(PTIME_ZONE_INFORMATION TimeZoneInformation);
#ifndef __INCLUDE_INTERNAL_IFS_H
#define __INCLUDE_INTERNAL_IFS_H
-/* Look for "FSrt" in mem view */
-#define IFS_POOL_TAG 0x74725346
-
typedef struct _FILE_LOCK_GRANTED {
LIST_ENTRY ListEntry;
FILE_LOCK_INFO Lock;
-/*
- * ReactOS kernel
- * Copyright (C) 1998, 1999, 2000, 2001 ReactOS Team
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
#ifndef __NTOSKRNL_INCLUDE_INTERNAL_I386_FPU_H
#define __NTOSKRNL_INCLUDE_INTERNAL_I386_FPU_H
-#define FN_CONTROL_WORD 0x0
-#define FN_STATUS_WORD 0x4
-#define FN_TAG_WORD 0x8
-#define FN_DATA_SELECTOR 0x18
-#define FN_CR0_NPX_STATE 0x20C
-#define SIZEOF_FX_SAVE_AREA 528
-
-#ifndef __ASM__
-
#include <internal/i386/ke.h>
-typedef struct _FNSAVE_FORMAT {
- ULONG ControlWord;
- ULONG StatusWord;
- ULONG TagWord;
- ULONG ErrorOffset;
- ULONG ErrorSelector;
- ULONG DataOffset;
- ULONG DataSelector;
- UCHAR RegisterArea[80];
-} FNSAVE_FORMAT, *PFNSAVE_FORMAT;
-
-typedef struct _FXSAVE_FORMAT {
- USHORT ControlWord;
- USHORT StatusWord;
- USHORT TagWord;
- USHORT ErrorOpcode;
- ULONG ErrorOffset;
- ULONG ErrorSelector;
- ULONG DataOffset;
- ULONG DataSelector;
- ULONG MXCsr;
- ULONG MXCsrMask;
- UCHAR RegisterArea[128];
- UCHAR Reserved3[128];
- UCHAR Reserved4[224];
- UCHAR Align16Byte[8];
-} FXSAVE_FORMAT, *PFXSAVE_FORMAT;
-
-typedef struct _FX_SAVE_AREA {
- union {
- FNSAVE_FORMAT FnArea;
- FXSAVE_FORMAT FxArea;
- } U;
- ULONG NpxSavedCpu;
- ULONG Cr0NpxState;
-} FX_SAVE_AREA, *PFX_SAVE_AREA;
-
-
extern ULONG HardwareMathSupport;
VOID
BOOL
KiContextToFxSaveArea(PFX_SAVE_AREA FxSaveArea, PCONTEXT Context);
-#endif /* !__ASM__ */
-
#endif /* __NTOSKRNL_INCLUDE_INTERNAL_I386_FPU_H */
+++ /dev/null
-/*
- *
- */
-
-#ifndef __INTERNAL_HAL_HAL_H
-#define __INTERNAL_HAL_HAL_H
-
-/*
- * FUNCTION: Probes for a BIOS32 extension
- */
-VOID Hal_bios32_probe(VOID);
-
-/*
- * FUNCTION: Determines if a a bios32 service is present
- */
-BOOLEAN Hal_bios32_is_service_present(ULONG service);
-
-VOID HalInitializeDisplay (PLOADER_PARAMETER_BLOCK LoaderBlock);
-VOID HalResetDisplay (VOID);
-
-VOID HalpInitBusHandlers (VOID);
-
-/* irql.c */
-VOID HalpInitPICs(VOID);
-
-/* udelay.c */
-VOID HalpCalibrateStallExecution(VOID);
-
-/* pci.c */
-VOID HalpInitPciBus (VOID);
-
-struct _ADAPTER_OBJECT {
- int Channel;
- PVOID PagePort;
- PVOID CountPort;
- PVOID OffsetPort;
- KSPIN_LOCK SpinLock;
- PVOID Buffer;
- BOOLEAN Inuse;
-};
-
-#endif /* __INTERNAL_HAL_HAL_H */
-/*
- * ReactOS kernel
- * Copyright (C) 1998, 1999, 2000, 2001 ReactOS Team
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
#ifndef __NTOSKRNL_INCLUDE_INTERNAL_I386_KE_H
#define __NTOSKRNL_INCLUDE_INTERNAL_I386_KE_H
#pragma GCC system_header
#endif
-#define KTRAP_FRAME_DEBUGEBP (0x0)
-#define KTRAP_FRAME_DEBUGEIP (0x4)
-#define KTRAP_FRAME_DEBUGARGMARK (0x8)
-#define KTRAP_FRAME_DEBUGPOINTER (0xC)
-#define KTRAP_FRAME_TEMPSS (0x10)
-#define KTRAP_FRAME_TEMPESP (0x14)
-#define KTRAP_FRAME_DR0 (0x18)
-#define KTRAP_FRAME_DR1 (0x1C)
-#define KTRAP_FRAME_DR2 (0x20)
-#define KTRAP_FRAME_DR3 (0x24)
-#define KTRAP_FRAME_DR6 (0x28)
-#define KTRAP_FRAME_DR7 (0x2C)
-#define KTRAP_FRAME_GS (0x30)
-#define KTRAP_FRAME_RESERVED1 (0x32)
-#define KTRAP_FRAME_ES (0x34)
-#define KTRAP_FRAME_RESERVED2 (0x36)
-#define KTRAP_FRAME_DS (0x38)
-#define KTRAP_FRAME_RESERVED3 (0x3A)
-#define KTRAP_FRAME_EDX (0x3C)
-#define KTRAP_FRAME_ECX (0x40)
-#define KTRAP_FRAME_EAX (0x44)
-#define KTRAP_FRAME_PREVIOUS_MODE (0x48)
-#define KTRAP_FRAME_EXCEPTION_LIST (0x4C)
-#define KTRAP_FRAME_FS (0x50)
-#define KTRAP_FRAME_RESERVED4 (0x52)
-#define KTRAP_FRAME_EDI (0x54)
-#define KTRAP_FRAME_ESI (0x58)
-#define KTRAP_FRAME_EBX (0x5C)
-#define KTRAP_FRAME_EBP (0x60)
-#define KTRAP_FRAME_ERROR_CODE (0x64)
-#define KTRAP_FRAME_EIP (0x68)
-#define KTRAP_FRAME_CS (0x6C)
-#define KTRAP_FRAME_EFLAGS (0x70)
-#define KTRAP_FRAME_ESP (0x74)
-#define KTRAP_FRAME_SS (0x78)
-#define KTRAP_FRAME_RESERVED5 (0x7A)
-#define KTRAP_FRAME_V86_ES (0x7C)
-#define KTRAP_FRAME_RESERVED6 (0x7E)
-#define KTRAP_FRAME_V86_DS (0x80)
-#define KTRAP_FRAME_RESERVED7 (0x82)
-#define KTRAP_FRAME_V86_FS (0x84)
-#define KTRAP_FRAME_RESERVED8 (0x86)
-#define KTRAP_FRAME_V86_GS (0x88)
-#define KTRAP_FRAME_RESERVED9 (0x8A)
-#define KTRAP_FRAME_SIZE (0x8C)
-
#define X86_EFLAGS_TF 0x00000100 /* Trap flag */
#define X86_EFLAGS_IF 0x00000200 /* Interrupt Enable flag */
#define X86_EFLAGS_IOPL 0x00003000 /* I/O Privilege Level bits */
ULONG Eflags;
} KIRQ_TRAPFRAME, *PKIRQ_TRAPFRAME;
-typedef struct _KGDTENTRY {
- USHORT LimitLow;
- USHORT BaseLow;
- union {
- struct {
- UCHAR BaseMid;
- UCHAR Flags1;
- UCHAR Flags2;
- UCHAR BaseHi;
- } Bytes;
- struct {
- ULONG BaseMid : 8;
- ULONG Type : 5;
- ULONG Dpl : 2;
- ULONG Pres : 1;
- ULONG LimitHi : 4;
- ULONG Sys : 1;
- ULONG Reserved_0 : 1;
- ULONG Default_Big : 1;
- ULONG Granularity : 1;
- ULONG BaseHi : 8;
- } Bits;
- } HighWord;
-} KGDTENTRY, *PKGDTENTRY;
-
-typedef struct _KIDTENTRY {
- USHORT Offset;
- USHORT Selector;
- USHORT Access;
- USHORT ExtendedOffset;
-} KIDTENTRY, *PKIDTENTRY;
-
extern ULONG Ke386CacheAlignment;
struct _KPCR;
#error Unknown compiler for inline assembler
#endif
-#endif /* __ASM__ */
-
+#endif
#endif /* __NTOSKRNL_INCLUDE_INTERNAL_I386_KE_H */
/* EOF */
#define PA_SYSTEM (0)
#endif
-
-#ifndef __ASM__
-
#define KERNEL_BASE (ULONG)MmSystemRangeStart
#if defined(__GNUC__)
#define PAGE_MASK(x) ((x)&(~0xfff))
#define PAE_PAGE_MASK(x) ((x)&(~0xfffLL))
-#endif /* ASSEMBLER */
-
#endif /* __NTOSKRNL_INCLUDE_INTERNAL_I386_MM_H */
+++ /dev/null
-/*
- * ReactOS kernel
- * Copyright (C) 1998, 1999, 2000, 2001 ReactOS Team
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-#ifndef __NTOSKRNL_INCLUDE_INTERNAL_I386_PS_H
-#define __NTOSKRNL_INCLUDE_INTERNAL_I386_PS_H
-
-#ifdef __USE_W32API
-#ifndef __ASM__
-#include <ndk/potypes.h> /* FIXME: TEMP HACK */
-#endif
-#endif
-
-/*
- * Defines for accessing KPCR and KTHREAD structure members
- */
-#define KTHREAD_INITIAL_STACK 0x18
-#define KTHREAD_STACK_LIMIT 0x1C
-#define KTHREAD_TEB 0x20
-#define KTHREAD_KERNEL_STACK 0x28
-#define KTHREAD_NPX_STATE 0x31
-#define KTHREAD_STATE 0x2D
-#define KTHREAD_APCSTATE_PROCESS 0x34 + 0x10
-#define KTHREAD_PENDING_USER_APC 0x34 + 0x16
-#define KTHREAD_PENDING_KERNEL_APC 0x34 + 0x15
-#define KTHREAD_CONTEXT_SWITCHES 0x4C
-#define KTHREAD_WAIT_IRQL 0x54
-#define KTHREAD_SERVICE_TABLE 0xDC
-#define KTHREAD_PREVIOUS_MODE 0x137
-#define KTHREAD_TRAP_FRAME 0x128
-#define KTHREAD_CALLBACK_STACK 0x120
-
-
-#define KPROCESS_DIRECTORY_TABLE_BASE 0x18
-#define KPROCESS_LDT_DESCRIPTOR0 0x20
-#define KPROCESS_LDT_DESCRIPTOR1 0x24
-#define KPROCESS_IOPM_OFFSET 0x30
-
-#define KPCR_BASE 0xFF000000
-
-#define KPCR_EXCEPTION_LIST 0x0
-#define KPCR_INITIAL_STACK 0x4
-#define KPCR_STACK_LIMIT 0x8
-#define KPCR_SELF 0x1C
-#define KPCR_GDT 0x3C
-#define KPCR_TSS 0x40
-#define KPCR_CURRENT_THREAD 0x124
-#define KPCR_NPX_THREAD 0x2A4
-
-#ifndef __ASM__
-
-#include "fpu.h"
-
-#pragma pack(push,4)
-
-/* Fixme: Use correct types? */
-typedef struct _KPROCESSOR_STATE {
- PCONTEXT ContextFrame;
- PVOID SpecialRegisters;
-} KPROCESSOR_STATE;
-
-/* ProcessoR Control Block */
-typedef struct _KPRCB {
- USHORT MinorVersion;
- USHORT MajorVersion;
- struct _KTHREAD *CurrentThread;
- struct _KTHREAD *NextThread;
- struct _KTHREAD *IdleThread;
- UCHAR Number;
- UCHAR Reserved;
- USHORT BuildType;
- ULONG SetMember;
- UCHAR CpuType;
- UCHAR CpuID;
- USHORT CpuStep;
- KPROCESSOR_STATE ProcessorState;
- ULONG KernelReserved[16];
- ULONG HalReserved[16];
- UCHAR PrcbPad0[92];
- PVOID LockQueue[33]; // Used for Queued Spinlocks
- struct _KTHREAD *NpxThread;
- ULONG InterruptCount;
- ULONG KernelTime;
- ULONG UserTime;
- ULONG DpcTime;
- ULONG DebugDpcTime;
- ULONG InterruptTime;
- ULONG AdjustDpcThreshold;
- ULONG PageColor;
- UCHAR SkipTick;
- UCHAR DebuggerSavedIRQL;
- UCHAR Spare1[6];
- struct _KNODE *ParentNode;
- ULONG MultiThreadProcessorSet;
- struct _KPRCB *MultiThreadSetMaster;
- ULONG ThreadStartCount[2];
- ULONG CcFastReadNoWait;
- ULONG CcFastReadWait;
- ULONG CcFastReadNotPossible;
- ULONG CcCopyReadNoWait;
- ULONG CcCopyReadWait;
- ULONG CcCopyReadNoWaitMiss;
- ULONG KeAlignmentFixupCount;
- ULONG KeContextSwitches;
- ULONG KeDcacheFlushCount;
- ULONG KeExceptionDispatchCount;
- ULONG KeFirstLevelTbFills;
- ULONG KeFloatingEmulationCount;
- ULONG KeIcacheFlushCount;
- ULONG KeSecondLevelTbFills;
- ULONG KeSystemCalls;
- ULONG IoReadOperationCount;
- ULONG IoWriteOperationCount;
- ULONG IoOtherOperationCount;
- LARGE_INTEGER IoReadTransferCount;
- LARGE_INTEGER IoWriteTransferCount;
- LARGE_INTEGER IoOtherTransferCount;
- ULONG SpareCounter1[8];
- PP_LOOKASIDE_LIST PPLookasideList[16];
- PP_LOOKASIDE_LIST PPNPagedLookasideList[32];
- PP_LOOKASIDE_LIST PPPagedLookasideList[32];
- ULONG PacketBarrier;
- ULONG ReverseStall;
- PVOID IpiFrame;
- UCHAR PrcbPad2[52];
- PVOID CurrentPacket[3];
- ULONG TargetSet;
- ULONG_PTR WorkerRoutine;
- ULONG IpiFrozen;
- UCHAR PrcbPad3[40];
- ULONG RequestSummary;
- struct _KPRCB *SignalDone;
- UCHAR PrcbPad4[56];
- struct _KDPC_DATA DpcData[2];
- PVOID DpcStack;
- ULONG MaximumDpcQueueDepth;
- ULONG DpcRequestRate;
- ULONG MinimumDpcRate;
- UCHAR DpcInterruptRequested;
- UCHAR DpcThreadRequested;
- UCHAR DpcRoutineActive;
- UCHAR DpcThreadActive;
- ULONG PrcbLock;
- ULONG DpcLastCount;
- ULONG TimerHand;
- ULONG TimerRequest;
- PVOID DpcThread;
- struct _KEVENT *DpcEvent;
- UCHAR ThreadDpcEnable;
- BOOLEAN QuantumEnd;
- UCHAR PrcbPad50;
- UCHAR IdleSchedule;
- ULONG DpcSetEventRequest;
- UCHAR PrcbPad5[18];
- LONG TickOffset;
- struct _KDPC* CallDpc;
- ULONG PrcbPad7[8];
- LIST_ENTRY WaitListHead;
- ULONG ReadySummary;
- ULONG SelectNextLast;
- LIST_ENTRY DispatcherReadyListHead[32];
- SINGLE_LIST_ENTRY DeferredReadyListHead;
- ULONG PrcbPad72[11];
- PVOID ChainedInterruptList;
- LONG LookasideIrpFloat;
- LONG MmPageFaultCount;
- LONG MmCopyOnWriteCount;
- LONG MmTransitionCount;
- LONG MmCacheTransitionCount;
- LONG MmDemandZeroCount;
- LONG MmPageReadCount;
- LONG MmPageReadIoCount;
- LONG MmCacheReadCount;
- LONG MmCacheIoCount;
- LONG MmDirtyPagesWriteCount;
- LONG MmDirtyWriteIoCount;
- LONG MmMappedPagesWriteCount;
- LONG MmMappedWriteIoCount;
- ULONG SpareFields0[1];
- CHAR VendorString[13];
- UCHAR InitialApicId;
- UCHAR LogicalProcessorsPerPhysicalProcessor;
- ULONG MHz;
- ULONG FeatureBits;
- LARGE_INTEGER UpdateSignature;
- LARGE_INTEGER IsrTime;
- LARGE_INTEGER SpareField1;
- FX_SAVE_AREA NpxSaveArea;
- PROCESSOR_POWER_STATE PowerState;
-} KPRCB, *PKPRCB;
-
-#pragma pack(pop)
-
-#ifndef __USE_W32API
-
-#pragma pack(push,4)
-/*
- * Processor Control Region Thread Information Block
- */
-typedef struct _KPCR_TIB {
- PVOID ExceptionList; /* 00 */
- PVOID StackBase; /* 04 */
- PVOID StackLimit; /* 08 */
- PVOID SubSystemTib; /* 0C */
- union {
- PVOID FiberData; /* 10 */
- DWORD Version; /* 10 */
- };
- PVOID ArbitraryUserPointer; /* 14 */
- struct _KPCR_TIB* Self; /* 18 */
-} KPCR_TIB, *PKPCR_TIB; /* 18 */
-
-/*
- * Processor Control Region
- */
-typedef struct _KPCR {
- KPCR_TIB Tib; /* 00 */
- struct _KPCR *Self; /* 1C */
- struct _KPRCB *Prcb; /* 20 */
- KIRQL Irql; /* 24 */
- ULONG IRR; /* 28 */
- ULONG IrrActive; /* 2C */
- ULONG IDR; /* 30 */
- PVOID KdVersionBlock; /* 34 */
- PUSHORT IDT; /* 38 */
- PUSHORT GDT; /* 3C */
- struct _KTSS *TSS; /* 40 */
- USHORT MajorVersion; /* 44 */
- USHORT MinorVersion; /* 46 */
- KAFFINITY SetMember; /* 48 */
- ULONG StallScaleFactor; /* 4C */
- UCHAR DebugActive; /* 50 */
- UCHAR Number; /* 51 */
- UCHAR Reserved; /* 52 */
- UCHAR L2CacheAssociativity; /* 53 */
- ULONG VdmAlert; /* 54 */
- ULONG KernelReserved[14]; /* 58 */
- ULONG L2CacheSize; /* 90 */
- ULONG HalReserved[16]; /* 94 */
- ULONG InterruptMode; /* D4 */
- UCHAR KernelReserved2[0x48]; /* D8 */
- KPRCB PrcbData; /* 120 */
-} KPCR, *PKPCR;
-
-#pragma pack(pop)
-#endif /* __USE_W32API */
-
-#pragma pack(push,4)
-
-/*
- * This is the complete, internal KPCR structure
- */
-typedef struct _KIPCR {
- KPCR_TIB Tib; /* 00 */
- struct _KPCR *Self; /* 1C */
- struct _KPRCB *Prcb; /* 20 */
- KIRQL Irql; /* 24 */
- ULONG IRR; /* 28 */
- ULONG IrrActive; /* 2C */
- ULONG IDR; /* 30 */
- PVOID KdVersionBlock; /* 34 */
- PUSHORT IDT; /* 38 */
- PUSHORT GDT; /* 3C */
- struct _KTSS *TSS; /* 40 */
- USHORT MajorVersion; /* 44 */
- USHORT MinorVersion; /* 46 */
- KAFFINITY SetMember; /* 48 */
- ULONG StallScaleFactor; /* 4C */
- UCHAR SparedUnused; /* 50 */
- UCHAR Number; /* 51 */
- UCHAR Reserved; /* 52 */
- UCHAR L2CacheAssociativity; /* 53 */
- ULONG VdmAlert; /* 54 */
- ULONG KernelReserved[14]; /* 58 */
- ULONG L2CacheSize; /* 90 */
- ULONG HalReserved[16]; /* 94 */
- ULONG InterruptMode; /* D4 */
- UCHAR KernelReserved2[0x48]; /* D8 */
- KPRCB PrcbData; /* 120 */
-} KIPCR, *PKIPCR;
-
-#pragma pack(pop)
-
-#ifndef __USE_W32API
-
-#ifdef CONFIG_SMP
-
-static inline PKPCR KeGetCurrentKPCR(VOID)
-{
- ULONG value;
-
-#if defined(__GNUC__)
- __asm__ __volatile__ ("movl %%fs:0x1C, %0\n\t"
- : "=r" (value)
- : /* no inputs */
- );
-#elif defined(_MSC_VER)
- __asm mov eax, fs:0x1C;
- __asm mov value, eax;
-#else
-#error Unknown compiler for inline assembler
-#endif
- return((PKPCR)value);
-}
-
-static inline PKPRCB KeGetCurrentPrcb(VOID)
-{
- ULONG value;
-
-#if defined(__GNUC__)
- __asm__ __volatile__ ("movl %%fs:0x20, %0\n\t"
- : "=r" (value)
- : /* no inputs */
- );
-#elif defined(_MSC_VER)
- __asm mov eax, fs:0x20;
- __asm mov value, eax;
-#else
-#error Unknown compiler for inline assembler
-#endif
- return((PKPRCB)value);
-}
-
-#else
-
-#define KeGetCurrentKPCR(X) ((PKPCR)KPCR_BASE)
-#define KeGetCurrentPrcb() (((PKPCR)KPCR_BASE)->Prcb)
-#define KeGetCurrentThread(X) (((PKPCR)KPCR_BASE)->PrcbData.CurrentThread)
-
-#endif
-
-#endif /* __USE_W32API */
-
-#endif /* __ASM__ */
-
-#endif /* __NTOSKRNL_INCLUDE_INTERNAL_I386_PS_H */
-
-/* EOF */
+++ /dev/null
-/*
- * ReactOS kernel
- * Copyright (C) 2000 ReactOS Team
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-/*
- * FILE: ntoskrnl/include/internal/i386/segment.h
- * PURPOSE: Segment selector definitions
- * PROGRAMMER: David Welch (welch@cwcom.net)
- */
-
-/* INCLUDES *****************************************************************/
-
-#ifndef __NTOSKRNL_INCLUDE_INTERNAL_I386_SEGMENT_H
-#define __NTOSKRNL_INCLUDE_INTERNAL_i386_SEGMENT_H
-
-#define NULL_SELECTOR (0x0)
-#define KERNEL_CS (0x8)
-#define KERNEL_DS (0x10)
-#define USER_CS (0x18 + 0x3)
-#define USER_DS (0x20 + 0x3)
-/* Task State Segment */
-#define TSS_SELECTOR (0x28)
-/* Processor Control Region */
-#define PCR_SELECTOR (0x30)
-/* Thread Environment Block */
-#define TEB_SELECTOR (0x38 + 0x3)
-#define RESERVED_SELECTOR (0x40)
-/* Local Descriptor Table */
-#define LDT_SELECTOR (0x48)
-#define TRAP_TSS_SELECTOR (0x50)
-
-#endif /* __NTOSKRNL_INCLUDE_INTERNAL_I386_SEGMENT_H */
-
-/* EOF */
-
-
-/*
- * ReactOS kernel
- * Copyright (C) 2000 David Welch <welch@cwcom.net>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-/*
- * COPYRIGHT: See COPYING in the top level directory
- * PROJECT: ReactOS kernel
- * FILE: include/internal/io.h
- * PURPOSE: Internal io manager declarations
- * PROGRAMMER: David Welch (welch@mcmail.com)
- * UPDATE HISTORY:
- * 28/05/97: Created
- */
-
#ifndef __NTOSKRNL_INCLUDE_INTERNAL_IO_H
#define __NTOSKRNL_INCLUDE_INTERNAL_IO_H
-#ifndef __USE_W32API
-#define DEVICE_TYPE_FROM_CTL_CODE(ctlCode) (((ULONG)(ctlCode&0xffff0000))>>16)
-#endif
-
#define IO_METHOD_FROM_CTL_CODE(ctlCode) (ctlCode&0x00000003)
-struct _DEVICE_OBJECT_POWER_EXTENSION;
extern POBJECT_TYPE IoCompletionType;
+extern PDEVICE_NODE IopRootDeviceNode;
/* This is like the IRP Overlay so we can optimize its insertion */
typedef struct _IO_COMPLETION_PACKET
{
- struct {
- LIST_ENTRY ListEntry;
- union {
- struct _IO_STACK_LOCATION *CurrentStackLocation;
- ULONG PacketType;
- };
- };
- PVOID Key;
- PVOID Context;
- IO_STATUS_BLOCK IoStatus;
+ struct
+ {
+ LIST_ENTRY ListEntry;
+ union
+ {
+ struct _IO_STACK_LOCATION *CurrentStackLocation;
+ ULONG PacketType;
+ };
+ };
+ PVOID Key;
+ PVOID Context;
+ IO_STATUS_BLOCK IoStatus;
} IO_COMPLETION_PACKET, *PIO_COMPLETION_PACKET;
/* Packet Types */
#define IrpCompletionPacket 0x1
#define IrpMiniCompletionPacket 0x2
-typedef struct _DEVOBJ_EXTENSION {
- CSHORT Type;
- USHORT Size;
- PDEVICE_OBJECT DeviceObject;
- ULONG PowerFlags;
- struct DEVICE_OBJECT_POWER_EXTENSION *Dope;
- ULONG ExtensionFlags;
- struct _DEVICE_NODE *DeviceNode;
- PDEVICE_OBJECT AttachedTo;
- LONG StartIoCount;
- LONG StartIoKey;
- ULONG StartIoFlags;
- struct _VPB *Vpb;
-} DEVOBJ_EXTENSION, *PDEVOBJ_EXTENSION;
-
-typedef struct _PRIVATE_DRIVER_EXTENSIONS {
- struct _PRIVATE_DRIVER_EXTENSIONS *Link;
- PVOID ClientIdentificationAddress;
- CHAR Extension[1];
-} PRIVATE_DRIVER_EXTENSIONS, *PPRIVATE_DRIVER_EXTENSIONS;
-
-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. */
-// 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;
- LIST_ENTRY DeviceArbiterList;
- LIST_ENTRY DeviceTranslatorList;
- USHORT NoTranslatorMask;
- USHORT QueryTranslatorMask;
- USHORT NoArbiterMask;
- USHORT QueryArbiterMask;
- union {
- struct _DEVICE_NODE *LegacyDeviceNode;
- PDEVICE_RELATIONS PendingDeviceRelations;
- } OverUsed1;
- union {
- 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
- {
- ULONG DockStatus;
- LIST_ENTRY ListEntry;
- WCHAR *SerialNumber;
- } DockInfo;
- ULONG DisableableDepends;
- LIST_ENTRY PendedSetInterfaceState;
- LIST_ENTRY LegacyBusListEntry;
- ULONG DriverUnloadRetryCount;
-
- /* Not NT's */
- GUID BusTypeGuid;
- ULONG Address;
-} DEVICE_NODE, *PDEVICE_NODE;
-
-/* For Flags field */
-#define DNF_PROCESSED 0x00000001
-#define DNF_STARTED 0x00000002
-#define DNF_START_FAILED 0x00000004
-#define DNF_ENUMERATED 0x00000008
-#define DNF_DELETED 0x00000010
-#define DNF_MADEUP 0x00000020
-#define DNF_START_REQUEST_PENDING 0x00000040
-#define DNF_NO_RESOURCE_REQUIRED 0x00000080
-#define DNF_INSUFFICIENT_RESOURCES 0x00000100
-#define DNF_RESOURCE_ASSIGNED 0x00000200
-#define DNF_RESOURCE_REPORTED 0x00000400
-#define DNF_HAL_NODE 0x00000800 // ???
-#define DNF_ADDED 0x00001000
-#define DNF_ADD_FAILED 0x00002000
-#define DNF_LEGACY_DRIVER 0x00004000
-#define DNF_STOPPED 0x00008000
-#define DNF_WILL_BE_REMOVED 0x00010000
-#define DNF_NEED_TO_ENUM 0x00020000
-#define DNF_NOT_CONFIGURED 0x00040000
-#define DNF_REINSTALL 0x00080000
-#define DNF_RESOURCE_REQUIREMENTS_NEED_FILTERED 0x00100000 // ???
-#define DNF_DISABLED 0x00200000
-#define DNF_RESTART_OK 0x00400000
-#define DNF_NEED_RESTART 0x00800000
-#define DNF_VISITED 0x01000000
-#define DNF_ASSIGNING_RESOURCES 0x02000000
-#define DNF_BEEING_ENUMERATED 0x04000000
-#define DNF_NEED_ENUMERATION_ONLY 0x08000000
-#define DNF_LOCKED 0x10000000
-#define DNF_HAS_BOOT_CONFIG 0x20000000
-#define DNF_BOOT_CONFIG_RESERVED 0x40000000
-#define DNF_HAS_PROBLEM 0x80000000 // ???
-
-/* For UserFlags field */
-#define DNUF_DONT_SHOW_IN_UI 0x0002
-#define DNUF_NOT_DISABLEABLE 0x0008
-
/*
* VOID
* IopDeviceNodeSetFlag(
* PDEVICE_NODE DeviceNode,
* ULONG Flag);
*/
-#define IopDeviceNodeSetFlag(DeviceNode, Flag)((DeviceNode)->Flags |= (Flag))
+#define IopDeviceNodeSetFlag(DeviceNode, Flag) \
+ ((DeviceNode)->Flags |= (Flag))
/*
* VOID
* PDEVICE_NODE DeviceNode,
* ULONG Flag);
*/
-#define IopDeviceNodeClearFlag(DeviceNode, Flag)((DeviceNode)->Flags &= ~(Flag))
+#define IopDeviceNodeClearFlag(DeviceNode, Flag) \
+ ((DeviceNode)->Flags &= ~(Flag))
/*
* BOOLEAN
* PDEVICE_NODE DeviceNode,
* ULONG Flag);
*/
-#define IopDeviceNodeHasFlag(DeviceNode, Flag)(((DeviceNode)->Flags & (Flag)) > 0)
+#define IopDeviceNodeHasFlag(DeviceNode, Flag) \
+ (((DeviceNode)->Flags & (Flag)) > 0)
/*
* VOID
* PDEVICE_NODE DeviceNode,
* ULONG UserFlag);
*/
-#define IopDeviceNodeSetUserFlag(DeviceNode, UserFlag)((DeviceNode)->UserFlags |= (UserFlag))
+#define IopDeviceNodeSetUserFlag(DeviceNode, UserFlag) \
+ ((DeviceNode)->UserFlags |= (UserFlag))
/*
* VOID
* PDEVICE_NODE DeviceNode,
* ULONG UserFlag);
*/
-#define IopDeviceNodeClearUserFlag(DeviceNode, UserFlag)((DeviceNode)->UserFlags &= ~(UserFlag))
+#define IopDeviceNodeClearUserFlag(DeviceNode, UserFlag) \
+ ((DeviceNode)->UserFlags &= ~(UserFlag))
/*
* BOOLEAN
* PDEVICE_NODE DeviceNode,
* ULONG UserFlag);
*/
-#define IopDeviceNodeHasUserFlag(DeviceNode, UserFlag)(((DeviceNode)->UserFlags & (UserFlag)) > 0)
+#define IopDeviceNodeHasUserFlag(DeviceNode, UserFlag) \
+ (((DeviceNode)->UserFlags & (UserFlag)) > 0)
/*
* VOID
* PDEVICE_NODE DeviceNode,
* ULONG Problem);
*/
-#define IopDeviceNodeSetProblem(DeviceNode, Problem)((DeviceNode)->Problem |= (Problem))
+#define IopDeviceNodeSetProblem(DeviceNode, Problem) \
+ ((DeviceNode)->Problem |= (Problem))
/*
* VOID
* PDEVICE_NODE DeviceNode,
* ULONG Problem);
*/
-#define IopDeviceNodeClearProblem(DeviceNode, Problem)((DeviceNode)->Problem &= ~(Problem))
+#define IopDeviceNodeClearProblem(DeviceNode, Problem) \
+ ((DeviceNode)->Problem &= ~(Problem))
/*
* BOOLEAN
* PDEVICE_NODE DeviceNode,
* ULONG Problem);
*/
-#define IopDeviceNodeHasProblem(DeviceNode, Problem)(((DeviceNode)->Problem & (Problem)) > 0)
+#define IopDeviceNodeHasProblem(DeviceNode, Problem) \
+ (((DeviceNode)->Problem & (Problem)) > 0)
/*
the caller.
*/
typedef NTSTATUS (*DEVICETREE_TRAVERSE_ROUTINE)(
- PDEVICE_NODE DeviceNode,
- PVOID Context);
+ PDEVICE_NODE DeviceNode,
+ PVOID Context
+);
/* Context information for traversing the device tree */
typedef struct _DEVICETREE_TRAVERSE_CONTEXT
{
- /* Current device node during a traversal */
- PDEVICE_NODE DeviceNode;
- /* Initial device node where we start the traversal */
- PDEVICE_NODE FirstDeviceNode;
- /* Action routine to be called for every device node */
- DEVICETREE_TRAVERSE_ROUTINE Action;
- /* Context passed to the action routine */
- PVOID Context;
+ /* Current device node during a traversal */
+ PDEVICE_NODE DeviceNode;
+ /* Initial device node where we start the traversal */
+ PDEVICE_NODE FirstDeviceNode;
+ /* Action routine to be called for every device node */
+ DEVICETREE_TRAVERSE_ROUTINE Action;
+ /* Context passed to the action routine */
+ PVOID Context;
} DEVICETREE_TRAVERSE_CONTEXT, *PDEVICETREE_TRAVERSE_CONTEXT;
/*
(_DeviceTreeTraverseContext)->Action = (_Action); \
(_DeviceTreeTraverseContext)->Context = (_Context); }
-
-extern PDEVICE_NODE IopRootDeviceNode;
-
VOID
PnpInit(VOID);
VOID
IopNotifyPlugPlayNotification(
- IN PDEVICE_OBJECT DeviceObject,
- IN IO_NOTIFICATION_EVENT_CATEGORY EventCategory,
- IN GUID* Event,
- IN PVOID EventCategoryData1,
- IN PVOID EventCategoryData2);
+ IN PDEVICE_OBJECT DeviceObject,
+ IN IO_NOTIFICATION_EVENT_CATEGORY EventCategory,
+ IN GUID* Event,
+ IN PVOID EventCategoryData1,
+ IN PVOID EventCategoryData2
+);
NTSTATUS
IopGetSystemPowerDeviceObject(PDEVICE_OBJECT *DeviceObject);
+
NTSTATUS
-IopCreateDeviceNode(PDEVICE_NODE ParentNode,
- PDEVICE_OBJECT PhysicalDeviceObject,
- PDEVICE_NODE *DeviceNode);
+IopCreateDeviceNode(
+ PDEVICE_NODE ParentNode,
+ PDEVICE_OBJECT PhysicalDeviceObject,
+ PDEVICE_NODE *DeviceNode
+);
+
NTSTATUS
IopFreeDeviceNode(PDEVICE_NODE DeviceNode);
VOID
IoInitCancelHandling(VOID);
+
VOID
IoInitFileSystemImplementation(VOID);
+
VOID
IoInitVpbImplementation(VOID);
NTSTATUS
-IoMountVolume(IN PDEVICE_OBJECT DeviceObject,
- IN BOOLEAN AllowRawMount);
-POBJECT IoOpenSymlink(POBJECT SymbolicLink);
-POBJECT IoOpenFileOnDevice(POBJECT SymbolicLink, PWCHAR Name);
-
-VOID STDCALL
-IoSecondStageCompletion(
- PKAPC Apc,
- PKNORMAL_ROUTINE* NormalRoutine,
- PVOID* NormalContext,
- PVOID* SystemArgument1,
- PVOID* SystemArgument2);
-
-NTSTATUS STDCALL
-IopCreateDevice(PVOID ObjectBody,
- PVOID Parent,
- PWSTR RemainingPath,
- POBJECT_ATTRIBUTES ObjectAttributes);
+IoMountVolume(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN BOOLEAN AllowRawMount
+);
+
+PVOID
+IoOpenSymlink(PVOID SymbolicLink);
+
+PVOID
+IoOpenFileOnDevice(
+ PVOID SymbolicLink,
+ PWCHAR Name
+);
+
+NTSTATUS
+STDCALL
+IopCreateDevice(
+ PVOID ObjectBody,
+ PVOID Parent,
+ PWSTR RemainingPath,
+ POBJECT_ATTRIBUTES ObjectAttributes
+);
NTSTATUS
STDCALL
IopAttachVpb(PDEVICE_OBJECT DeviceObject);
-PIRP IoBuildSynchronousFsdRequestWithMdl(ULONG MajorFunction,
- PDEVICE_OBJECT DeviceObject,
- PMDL Mdl,
- PLARGE_INTEGER StartingOffset,
- PKEVENT Event,
- PIO_STATUS_BLOCK IoStatusBlock,
- BOOLEAN PagingIo);
-
-VOID IoInitShutdownNotification(VOID);
-VOID IoShutdownRegisteredDevices(VOID);
-VOID IoShutdownRegisteredFileSystems(VOID);
-
-NTSTATUS STDCALL
-IoPageWrite(PFILE_OBJECT FileObject,
- PMDL Mdl,
- PLARGE_INTEGER Offset,
- PKEVENT Event,
- PIO_STATUS_BLOCK StatusBlock);
+VOID
+IoInitShutdownNotification(VOID);
+
+VOID
+IoShutdownRegisteredDevices(VOID);
+
+VOID
+IoShutdownRegisteredFileSystems(VOID);
NTSTATUS
IoCreateArcNames(VOID);
NTSTATUS
IopInitiatePnpIrp(
- PDEVICE_OBJECT DeviceObject,
- PIO_STATUS_BLOCK IoStatusBlock,
- ULONG MinorFunction,
- PIO_STACK_LOCATION Stack);
+ PDEVICE_OBJECT DeviceObject,
+ PIO_STATUS_BLOCK IoStatusBlock,
+ ULONG MinorFunction,
+ PIO_STACK_LOCATION Stack
+);
BOOLEAN
IopCreateUnicodeString(
- PUNICODE_STRING Destination,
- PWSTR Source,
- POOL_TYPE PoolType);
-
+ PUNICODE_STRING Destination,
+ PWSTR Source,
+ POOL_TYPE PoolType
+);
NTSTATUS
IoCreateDriverList(VOID);
IopStopBootLog(VOID);
VOID
-IopBootLog(PUNICODE_STRING DriverName, BOOLEAN Success);
+IopBootLog(
+ PUNICODE_STRING DriverName,
+ BOOLEAN Success
+);
VOID
IopSaveBootLogToFile(VOID);
/* cancel.c */
-VOID STDCALL
+VOID
+STDCALL
IoCancelThreadIo(PETHREAD Thread);
/* errlog.c */
NTSTATUS
IopInitErrorLog(VOID);
-
/* rawfs.c */
BOOLEAN
RawFsIsRawFileSystemDeviceObject(IN PDEVICE_OBJECT DeviceObject);
-NTSTATUS STDCALL
+NTSTATUS
+STDCALL
RawFsDriverEntry(PDRIVER_OBJECT DriverObject,
- PUNICODE_STRING RegistryPath);
+ PUNICODE_STRING RegistryPath);
/* pnproot.c */
NTSTATUS
STDCALL
PnpRootDriverEntry(
- IN PDRIVER_OBJECT DriverObject,
- IN PUNICODE_STRING RegistryPath);
+ IN PDRIVER_OBJECT DriverObject,
+ IN PUNICODE_STRING RegistryPath
+);
NTSTATUS
-PnpRootCreateDevice(
- PDEVICE_OBJECT *PhysicalDeviceObject);
+PnpRootCreateDevice(PDEVICE_OBJECT *PhysicalDeviceObject);
/* device.c */
-NTSTATUS FASTCALL
+NTSTATUS
+FASTCALL
IopInitializeDevice(
- PDEVICE_NODE DeviceNode,
- PDRIVER_OBJECT DriverObject);
+ PDEVICE_NODE DeviceNode,
+ PDRIVER_OBJECT DriverObject
+);
NTSTATUS
-IopStartDevice(
- PDEVICE_NODE DeviceNode);
+IopStartDevice(PDEVICE_NODE DeviceNode);
/* driver.c */
-VOID FASTCALL
+VOID
+FASTCALL
IopInitializeBootDrivers(VOID);
-VOID FASTCALL
+VOID
+FASTCALL
IopInitializeSystemDrivers(VOID);
-NTSTATUS FASTCALL
+NTSTATUS
+FASTCALL
IopCreateDriverObject(
- PDRIVER_OBJECT *DriverObject,
- PUNICODE_STRING ServiceName,
- ULONG CreateAttributes,
- BOOLEAN FileSystemDriver,
- PVOID DriverImageStart,
- ULONG DriverImageSize);
-
-NTSTATUS FASTCALL
+ PDRIVER_OBJECT *DriverObject,
+ PUNICODE_STRING ServiceName,
+ ULONG CreateAttributes,
+ BOOLEAN FileSystemDriver,
+ PVOID DriverImageStart,
+ ULONG DriverImageSize
+);
+
+NTSTATUS
+FASTCALL
IopGetDriverObject(
- PDRIVER_OBJECT *DriverObject,
- PUNICODE_STRING ServiceName,
- BOOLEAN FileSystem);
+ PDRIVER_OBJECT *DriverObject,
+ PUNICODE_STRING ServiceName,
+ BOOLEAN FileSystem
+);
-NTSTATUS FASTCALL
+NTSTATUS
+FASTCALL
IopLoadServiceModule(
- IN PUNICODE_STRING ServiceName,
- OUT PMODULE_OBJECT *ModuleObject);
+ IN PUNICODE_STRING ServiceName,
+ OUT PMODULE_OBJECT *ModuleObject
+);
-NTSTATUS FASTCALL
+NTSTATUS
+FASTCALL
IopInitializeDriverModule(
- IN PDEVICE_NODE DeviceNode,
- IN PMODULE_OBJECT ModuleObject,
- IN PUNICODE_STRING ServiceName,
- IN BOOLEAN FileSystemDriver,
- OUT PDRIVER_OBJECT *DriverObject);
+ IN PDEVICE_NODE DeviceNode,
+ IN PMODULE_OBJECT ModuleObject,
+ IN PUNICODE_STRING ServiceName,
+ IN BOOLEAN FileSystemDriver,
+ OUT PDRIVER_OBJECT *DriverObject
+);
-NTSTATUS FASTCALL
+NTSTATUS
+FASTCALL
IopAttachFilterDrivers(
- PDEVICE_NODE DeviceNode,
- BOOLEAN Lower);
+ PDEVICE_NODE DeviceNode,
+ BOOLEAN Lower
+);
-VOID FASTCALL
+VOID
+FASTCALL
IopMarkLastReinitializeDriver(VOID);
-VOID FASTCALL
+VOID
+FASTCALL
IopReinitializeDrivers(VOID);
/* file.c */
NTSTATUS
STDCALL
-IopCreateFile(PVOID ObjectBody,
- PVOID Parent,
- PWSTR RemainingPath,
- POBJECT_CREATE_INFORMATION ObjectAttributes);
+IopCreateFile(
+ PVOID ObjectBody,
+ PVOID Parent,
+ PWSTR RemainingPath,
+ POBJECT_CREATE_INFORMATION ObjectAttributes
+);
VOID
STDCALL
NTSTATUS
STDCALL
-IopSecurityFile(PVOID ObjectBody,
- SECURITY_OPERATION_CODE OperationCode,
- SECURITY_INFORMATION SecurityInformation,
- PSECURITY_DESCRIPTOR SecurityDescriptor,
- PULONG BufferLength);
+IopSecurityFile(
+ PVOID ObjectBody,
+ SECURITY_OPERATION_CODE OperationCode,
+ SECURITY_INFORMATION SecurityInformation,
+ PSECURITY_DESCRIPTOR SecurityDescriptor,
+ PULONG BufferLength
+);
NTSTATUS
STDCALL
-IopQueryNameFile(PVOID ObjectBody,
- POBJECT_NAME_INFORMATION ObjectNameInfo,
- ULONG Length,
- PULONG ReturnLength);
+IopQueryNameFile(
+ PVOID ObjectBody,
+ POBJECT_NAME_INFORMATION ObjectNameInfo,
+ ULONG Length,
+ PULONG ReturnLength
+);
VOID
STDCALL
-IopCloseFile(PVOID ObjectBody,
- ULONG HandleCount);
+IopCloseFile(
+ PVOID ObjectBody,
+ ULONG HandleCount
+);
/* plugplay.c */
-NTSTATUS INIT_FUNCTION
+NTSTATUS
+INIT_FUNCTION
IopInitPlugPlayEvents(VOID);
NTSTATUS
-IopQueueTargetDeviceEvent(const GUID *Guid,
- PUNICODE_STRING DeviceIds);
-
+IopQueueTargetDeviceEvent(
+ const GUID *Guid,
+ PUNICODE_STRING DeviceIds
+);
/* pnpmgr.c */
NTSTATUS
IopInitializePnpServices(
- IN PDEVICE_NODE DeviceNode,
- IN BOOLEAN BootDrivers);
+ IN PDEVICE_NODE DeviceNode,
+ IN BOOLEAN BootDrivers)
+;
NTSTATUS
IopInvalidateDeviceRelations(
- IN PDEVICE_NODE DeviceNode,
- IN DEVICE_RELATION_TYPE Type);
+ IN PDEVICE_NODE DeviceNode,
+ IN DEVICE_RELATION_TYPE Type
+);
/* timer.c */
VOID
VOID
STDCALL
-IopRemoveTimerFromTimerList(
- IN PIO_TIMER Timer
-);
+IopRemoveTimerFromTimerList(IN PIO_TIMER Timer);
/* iocomp.c */
VOID
-/* ReactOS System Header -- kbd.h */
#define __KBD_H
#if __GNUC__ >=3
-/* $Id$
- *
- * kernel debugger prototypes
- */
-
#ifndef __INCLUDE_INTERNAL_KERNEL_DEBUGGER_H
#define __INCLUDE_INTERNAL_KERNEL_DEBUGGER_H
struct _KD_DISPATCH_TABLE;
-
-#ifdef DBG
-#include "kdgdb.h"
-#include "kdbochs.h"
-#endif
+extern KD_PORT_INFORMATION GdbPortInfo;
/* SYMBOL ROUTINES **********************************************************/
KdbSymFreeProcessSymbols(IN PEPROCESS Process);
VOID
-KdbSymLoadDriverSymbols(IN PUNICODE_STRING Filename,
- IN PMODULE_OBJECT Module);
+KdbSymLoadDriverSymbols(
+ IN PUNICODE_STRING Filename,
+ IN PMODULE_OBJECT Module
+);
VOID
KdbSymUnloadDriverSymbols(IN PMODULE_OBJECT ModuleObject);
KdbSymProcessBootSymbols(IN PCHAR FileName);
VOID
-KdbSymInit(IN PMODULE_TEXT_SECTION NtoskrnlTextSection,
- IN PMODULE_TEXT_SECTION LdrHalTextSection);
+KdbSymInit(
+ IN PMODULE_TEXT_SECTION NtoskrnlTextSection,
+ IN PMODULE_TEXT_SECTION LdrHalTextSection
+);
BOOLEAN
KdbSymPrintAddress(IN PVOID Address);
KdbDeleteProcessHook(IN PEPROCESS Process);
NTSTATUS
-KdbSymGetAddressInformation(IN PROSSYM_INFO RosSymInfo,
- IN ULONG_PTR RelativeAddress,
- OUT PULONG LineNumber OPTIONAL,
- OUT PCH FileName OPTIONAL,
- OUT PCH FunctionName OPTIONAL);
+KdbSymGetAddressInformation(
+ IN PROSSYM_INFO RosSymInfo,
+ IN ULONG_PTR RelativeAddress,
+ OUT PULONG LineNumber OPTIONAL,
+ OUT PCH FileName OPTIONAL,
+ OUT PCH FunctionName OPTIONAL
+);
typedef struct _KDB_MODULE_INFO
{
typedef
VOID
-(STDCALL*PKDP_INIT_ROUTINE)(struct _KD_DISPATCH_TABLE *DispatchTable,
- ULONG BootPhase);
+(STDCALL*PKDP_INIT_ROUTINE)(
+ struct _KD_DISPATCH_TABLE *DispatchTable,
+ ULONG BootPhase
+);
typedef
VOID
typedef
KD_CONTINUE_TYPE
-(STDCALL*PKDP_EXCEPTION_ROUTINE)(PEXCEPTION_RECORD ExceptionRecord,
- PCONTEXT Context,
- PKTRAP_FRAME TrapFrame);
+(STDCALL*PKDP_EXCEPTION_ROUTINE)(
+ PEXCEPTION_RECORD ExceptionRecord,
+ PCONTEXT Context,
+ PKTRAP_FRAME TrapFrame
+);
/* INIT ROUTINES *************************************************************/
VOID
STDCALL
-KdpScreenInit(struct _KD_DISPATCH_TABLE *DispatchTable,
- ULONG BootPhase);
+KdpScreenInit(
+ struct _KD_DISPATCH_TABLE *DispatchTable,
+ ULONG BootPhase
+);
+
+VOID
+STDCALL
+KdpSerialInit(
+ struct _KD_DISPATCH_TABLE *DispatchTable,
+ ULONG BootPhase
+);
VOID
STDCALL
-KdpSerialInit(struct _KD_DISPATCH_TABLE *DispatchTable,
- ULONG BootPhase);
+KdpInitDebugLog(
+ struct _KD_DISPATCH_TABLE *DispatchTable,
+ ULONG BootPhase
+);
VOID
STDCALL
-KdpInitDebugLog(struct _KD_DISPATCH_TABLE *DispatchTable,
- ULONG BootPhase);
+KdpBochsInit(
+ struct _KD_DISPATCH_TABLE *DispatchTable,
+ ULONG BootPhase
+);
+
+VOID
+STDCALL
+KdpGdbStubInit(
+ struct _KD_DISPATCH_TABLE *DispatchTable,
+ ULONG BootPhase);
/* KD ROUTINES ***************************************************************/
KD_CONTINUE_TYPE
STDCALL
-KdpEnterDebuggerException(PEXCEPTION_RECORD ExceptionRecord,
- KPROCESSOR_MODE PreviousMode,
- PCONTEXT Context,
- PKTRAP_FRAME TrapFrame,
- BOOLEAN FirstChance,
- BOOLEAN Gdb);
+KdpEnterDebuggerException(
+ PEXCEPTION_RECORD ExceptionRecord,
+ KPROCESSOR_MODE PreviousMode,
+ PCONTEXT Context,
+ PKTRAP_FRAME TrapFrame,
+ BOOLEAN FirstChance,
+ BOOLEAN Gdb
+);
ULONG
STDCALL
STDCALL
KdpDetectConflicts(PCM_RESOURCE_LIST DriverList);
+VOID
+STDCALL
+KdpBochsDebugPrint(IN PCH Message);
+
/* KD GLOBALS ***************************************************************/
/* serial debug connection */
/* KD Private Debug Modes */
typedef struct _KDP_DEBUG_MODE
{
- union {
- struct {
+ union
+ {
+ struct
+ {
/* Native Modes */
UCHAR Screen :1;
UCHAR Serial :1;
/* KD Internal Debug Services */
typedef enum _KDP_DEBUG_SERVICE
{
- DumpNonPagedPool = 0x1e, /* a */
- ManualBugCheck = 0x30, /* b */
- DumpNonPagedPoolStats = 0x2e, /* c */
- DumpNewNonPagedPool = 0x20, /* d */
- DumpNewNonPagedPoolStats = 0x12, /* e */
- DumpAllThreads = 0x21, /* f */
- DumpUserThreads = 0x22, /* g */
- KdSpare1 = 0x23, /* h */
- KdSpare2 = 0x17, /* i */
- KdSpare3 = 0x24, /* j */
- EnterDebugger = 0x25 /* k */
+ DumpNonPagedPool = 0x1e, /* a */
+ ManualBugCheck = 0x30, /* b */
+ DumpNonPagedPoolStats = 0x2e, /* c */
+ DumpNewNonPagedPool = 0x20, /* d */
+ DumpNewNonPagedPoolStats = 0x12, /* e */
+ DumpAllThreads = 0x21, /* f */
+ DumpUserThreads = 0x22, /* g */
+ KdSpare1 = 0x23, /* h */
+ KdSpare2 = 0x17, /* i */
+ KdSpare3 = 0x24, /* j */
+ EnterDebugger = 0x25 /* k */
} KDP_DEBUG_SERVICE;
/* Dispatch Table for Wrapper Functions */
+++ /dev/null
-#ifndef NTOSKRNL_KDB_H
-#define NTOSKRNL_KDB_H
-
-/* DEFINES *******************************************************************/
-
-#define TAG_KDBG (('K' << 24) | ('D' << 16) | ('B' << 8) | 'G')
-
-#ifndef RTL_NUMBER_OF
-# define RTL_NUMBER_OF(x) (sizeof(x) / sizeof((x)[0]))
-#endif
-
-/* TYPES *********************************************************************/
-
-/* from kdb.c */
-typedef struct _KDB_KTRAP_FRAME
-{
- KTRAP_FRAME Tf;
- ULONG Cr0;
- ULONG Cr1; /* reserved/unused */
- ULONG Cr2;
- ULONG Cr3;
- ULONG Cr4;
-} KDB_KTRAP_FRAME, *PKDB_KTRAP_FRAME;
-
-typedef enum _KDB_BREAKPOINT_TYPE
-{
- KdbBreakPointNone = 0,
- KdbBreakPointSoftware,
- KdbBreakPointHardware,
- KdbBreakPointTemporary
-} KDB_BREAKPOINT_TYPE;
-
-typedef enum _KDB_ACCESS_TYPE
-{
- KdbAccessRead,
- KdbAccessWrite,
- KdbAccessReadWrite,
- KdbAccessExec
-} KDB_ACCESS_TYPE;
-
-typedef struct _KDB_BREAKPOINT
-{
- KDB_BREAKPOINT_TYPE Type; /* Type of breakpoint */
- BOOLEAN Enabled; /* Whether the bp is enabled */
- ULONG_PTR Address; /* Address of the breakpoint */
- BOOLEAN Global; /* Whether the breakpoint is global or local to a process */
- PEPROCESS Process; /* Owning process */
- PCHAR ConditionExpression;
- PVOID Condition;
- union {
- /* KdbBreakPointSoftware */
- UCHAR SavedInstruction;
- /* KdbBreakPointHardware */
- struct {
- UCHAR DebugReg : 2;
- UCHAR Size : 3;
- KDB_ACCESS_TYPE AccessType;
- } Hw;
- } Data;
-} KDB_BREAKPOINT, *PKDB_BREAKPOINT;
-
-typedef enum _KDB_ENTER_CONDITION
-{
- KdbDoNotEnter,
- KdbEnterAlways,
- KdbEnterFromKmode,
- KdbEnterFromUmode
-} KDB_ENTER_CONDITION;
-
-/* These values MUST be nonzero. They're used as bit masks. */
-typedef enum _KDB_OUTPUT_SETTINGS
-{
- KD_DEBUG_KDSERIAL = 1,
- KD_DEBUG_KDNOECHO = 2
-} KDB_OUTPUT_SETTINGS;
-
-/* FUNCTIONS *****************************************************************/
-
-/* from i386/i386-dis.c */
-
-LONG
-KdbpDisassemble(
- IN ULONG Address,
- IN ULONG IntelSyntax);
-
-LONG
-KdbpGetInstLength(
- IN ULONG Address);
-
-/* from i386/kdb_help.S */
-
-STDCALL VOID
-KdbpStackSwitchAndCall(
- IN PVOID NewStack,
- IN VOID (*Function)(VOID));
-
-/* from kdb_cli.c */
-
-extern PCHAR KdbInitFileBuffer;
-
-VOID
-KdbpCliInit();
-
-VOID
-KdbpCliMainLoop(
- IN BOOLEAN EnteredOnSingleStep);
-
-VOID
-KdbpCliModuleLoaded(
- IN PUNICODE_STRING Name);
-
-VOID
-KdbpCliInterpretInitFile();
-
-VOID
-KdbpPrint(
- IN PCHAR Format,
- IN ... OPTIONAL);
-
-/* from kdb_expr.c */
-
-BOOLEAN
-KdbpRpnEvaluateExpression(
- IN PCHAR Expression,
- IN PKDB_KTRAP_FRAME TrapFrame,
- OUT PULONGLONG Result,
- OUT PLONG ErrOffset OPTIONAL,
- OUT PCHAR ErrMsg OPTIONAL);
-
-PVOID
-KdbpRpnParseExpression(
- IN PCHAR Expression,
- OUT PLONG ErrOffset OPTIONAL,
- OUT PCHAR ErrMsg OPTIONAL);
-
-BOOLEAN
-KdbpRpnEvaluateParsedExpression(
- IN PVOID Expression,
- IN PKDB_KTRAP_FRAME TrapFrame,
- OUT PULONGLONG Result,
- OUT PLONG ErrOffset OPTIONAL,
- OUT PCHAR ErrMsg OPTIONAL);
-
-/* from kdb_symbols.c */
-
-BOOLEAN
-KdbpSymFindModuleByAddress(IN PVOID Address,
- OUT PKDB_MODULE_INFO pInfo);
-
-BOOLEAN
-KdbpSymFindModuleByName(IN LPCWSTR Name,
- OUT PKDB_MODULE_INFO pInfo);
-
-BOOLEAN
-KdbpSymFindModuleByIndex(IN INT Index,
- OUT PKDB_MODULE_INFO pInfo);
-
-/* from kdb.c */
-
-extern PEPROCESS KdbCurrentProcess;
-extern PETHREAD KdbCurrentThread;
-extern LONG KdbLastBreakPointNr;
-extern ULONG KdbNumSingleSteps;
-extern BOOLEAN KdbSingleStepOver;
-extern PKDB_KTRAP_FRAME KdbCurrentTrapFrame;
-extern ULONG KdbDebugState;
-
-LONG
-KdbpGetNextBreakPointNr(
- IN ULONG Start OPTIONAL);
-
-BOOLEAN
-KdbpGetBreakPointInfo(
- IN ULONG BreakPointNr,
- OUT ULONG_PTR *Address OPTIONAL,
- OUT KDB_BREAKPOINT_TYPE *Type OPTIONAL,
- OUT UCHAR *Size OPTIONAL,
- OUT KDB_ACCESS_TYPE *AccessType OPTIONAL,
- OUT UCHAR *DebugReg OPTIONAL,
- OUT BOOLEAN *Enabled OPTIONAL,
- OUT BOOLEAN *Global OPTIONAL,
- OUT PEPROCESS *Process OPTIONAL,
- OUT PCHAR *ConditionExpression OPTIONAL);
-
-NTSTATUS
-KdbpInsertBreakPoint(
- IN ULONG_PTR Address,
- IN KDB_BREAKPOINT_TYPE Type,
- IN UCHAR Size OPTIONAL,
- IN KDB_ACCESS_TYPE AccessType OPTIONAL,
- IN PCHAR ConditionExpression OPTIONAL,
- IN BOOLEAN Global,
- OUT PULONG BreakPointNumber OPTIONAL);
-
-BOOLEAN
-KdbpDeleteBreakPoint(
- IN LONG BreakPointNr OPTIONAL,
- IN OUT PKDB_BREAKPOINT BreakPoint OPTIONAL);
-
-BOOLEAN
-KdbpEnableBreakPoint(
- IN LONG BreakPointNr OPTIONAL,
- IN OUT PKDB_BREAKPOINT BreakPoint OPTIONAL);
-
-BOOLEAN
-KdbpDisableBreakPoint(
- IN LONG BreakPointNr OPTIONAL,
- IN OUT PKDB_BREAKPOINT BreakPoint OPTIONAL);
-
-BOOLEAN
-KdbpGetEnterCondition(
- IN LONG ExceptionNr,
- IN BOOLEAN FirstChance,
- OUT KDB_ENTER_CONDITION *Condition);
-
-BOOLEAN
-KdbpSetEnterCondition(
- IN LONG ExceptionNr,
- IN BOOLEAN FirstChance,
- IN KDB_ENTER_CONDITION Condition);
-
-BOOLEAN
-KdbpAttachToThread(
- PVOID ThreadId);
-
-BOOLEAN
-KdbpAttachToProcess(
- PVOID ProcessId);
-
-VOID
-STDCALL
-KdbpGetCommandLineSettings(PCHAR p1);
-
-KD_CONTINUE_TYPE
-KdbEnterDebuggerException(PEXCEPTION_RECORD ExceptionRecord,
- KPROCESSOR_MODE PreviousMode,
- PCONTEXT Context,
- PKTRAP_FRAME TrapFrame,
- BOOLEAN FirstChance);
-/* other functions */
-
-#define KdbpSafeReadMemory(dst, src, size) MmSafeCopyFromUser(dst, src, size)
-#define KdbpSafeWriteMemory(dst, src, size) MmSafeCopyToUser(dst, src, size)
-
-#define KdbpGetCharKeyboard(ScanCode) KdbpTryGetCharKeyboard(ScanCode, 0)
-CHAR
-KdbpTryGetCharKeyboard(PULONG ScanCode, UINT Retry);
-
-#define KdbpGetCharSerial() KdbpTryGetCharSerial(0)
-CHAR
-KdbpTryGetCharSerial(UINT Retry);
-
-VOID
-KdbEnter(VOID);
-VOID
-DbgRDebugInit(VOID);
-VOID
-DbgShowFiles(VOID);
-VOID
-DbgEnableFile(PCH Filename);
-VOID
-DbgDisableFile(PCH Filename);
-VOID
-KbdDisableMouse();
-VOID
-KbdEnableMouse();
-
-#endif /* NTOSKRNL_KDB_H */
-
+++ /dev/null
-/* $Id: kd.h 13948 2005-03-12 01:11:06Z navaraf $
- *
- * kernel debugger prototypes
- */
-
-#ifndef __INCLUDE_INTERNAL_KD_BOCHS_H
-#define __INCLUDE_INTERNAL_KD_BOCHS_H
-
-VOID
-STDCALL
-KdpBochsInit(struct _KD_DISPATCH_TABLE *DispatchTable,
- ULONG BootPhase);
-VOID
-STDCALL
-KdpBochsDebugPrint(IN PCH Message);
-
-#endif /* __INCLUDE_INTERNAL_KD_BOCHS_H */
+++ /dev/null
-/* $Id: kd.h 13948 2005-03-12 01:11:06Z navaraf $
- *
- * kernel debugger prototypes
- */
-
-#ifndef __INCLUDE_INTERNAL_KD_GDB_H
-#define __INCLUDE_INTERNAL_KD_GDB_H
-
-VOID
-STDCALL
-KdpGdbStubInit(struct _KD_DISPATCH_TABLE *DispatchTable,
- ULONG BootPhase);
-
-extern KD_PORT_INFORMATION GdbPortInfo;
-
-#endif /* __INCLUDE_INTERNAL_KD_BOCHS_H */
-/*
- * ReactOS kernel
- * Copyright (C) 2000 David Welch <welch@cwcom.net>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
#ifndef __NTOSKRNL_INCLUDE_INTERNAL_KE_H
#define __NTOSKRNL_INCLUDE_INTERNAL_KE_H
/* INTERNAL KERNEL TYPES ****************************************************/
-#ifndef __ASM__
-
-#ifndef __USE_W32API
-
-typedef struct _KPROCESS *PKPROCESS;
-typedef struct _DISPATCHER_HEADER *PDISPATCHER_HEADER;
-
-#endif /* __USE_W32API */
-
-typedef struct _HARDWARE_PTE_X86 {
- ULONG Valid : 1;
- ULONG Write : 1;
- ULONG Owner : 1;
- ULONG WriteThrough : 1;
- ULONG CacheDisable : 1;
- ULONG Accessed : 1;
- ULONG Dirty : 1;
- ULONG LargePage : 1;
- ULONG Global : 1;
- ULONG CopyOnWrite : 1;
- ULONG Prototype : 1;
- ULONG reserved : 1;
- ULONG PageFrameNumber : 20;
-} HARDWARE_PTE_X86, *PHARDWARE_PTE_X86;
-
typedef struct _WOW64_PROCESS
{
PVOID Wow64;
} WOW64_PROCESS, *PWOW64_PROCESS;
-#include <pshpack1.h>
-
-typedef struct _KTHREAD
-{
- /* For waiting on thread exit */
- DISPATCHER_HEADER DispatcherHeader; /* 00 */
-
- /* List of mutants owned by the thread */
- LIST_ENTRY MutantListHead; /* 10 */
- PVOID InitialStack; /* 18 */
- ULONG_PTR StackLimit; /* 1C */
-
- /* Pointer to the thread's environment block in user memory */
- struct _TEB *Teb; /* 20 */
-
- /* Pointer to the thread's TLS array */
- PVOID TlsArray; /* 24 */
- PVOID KernelStack; /* 28 */
- UCHAR DebugActive; /* 2C */
-
- /* Thread state (one of THREAD_STATE_xxx constants below) */
- UCHAR State; /* 2D */
- BOOLEAN Alerted[2]; /* 2E */
- UCHAR Iopl; /* 30 */
- UCHAR NpxState; /* 31 */
- CHAR Saturation; /* 32 */
- CHAR Priority; /* 33 */
- KAPC_STATE ApcState; /* 34 */
- ULONG ContextSwitches; /* 4C */
- LONG WaitStatus; /* 50 */
- KIRQL WaitIrql; /* 54 */
- CHAR WaitMode; /* 55 */
- UCHAR WaitNext; /* 56 */
- UCHAR WaitReason; /* 57 */
- union { /* 58 */
- PKWAIT_BLOCK WaitBlockList; /* 58 */
- PKGATE GateObject; /* 58 */
- }; /* 58 */
- LIST_ENTRY WaitListEntry; /* 5C */
- ULONG WaitTime; /* 64 */
- CHAR BasePriority; /* 68 */
- UCHAR DecrementCount; /* 69 */
- UCHAR PriorityDecrement; /* 6A */
- CHAR Quantum; /* 6B */
- KWAIT_BLOCK WaitBlock[4]; /* 6C */
- PVOID LegoData; /* CC */
- union {
- struct {
- USHORT KernelApcDisable;
- USHORT SpecialApcDisable;
- };
- ULONG CombinedApcDisable; /* D0 */
- };
- KAFFINITY UserAffinity; /* D4 */
- UCHAR SystemAffinityActive;/* D8 */
- UCHAR PowerState; /* D9 */
- UCHAR NpxIrql; /* DA */
- UCHAR Pad[1]; /* DB */
- PVOID ServiceTable; /* DC */
- PKQUEUE Queue; /* E0 */
- KSPIN_LOCK ApcQueueLock; /* E4 */
- KTIMER Timer; /* E8 */
- LIST_ENTRY QueueListEntry; /* 110 */
- KAFFINITY Affinity; /* 118 */
- UCHAR Preempted; /* 11C */
- UCHAR ProcessReadyQueue; /* 11D */
- UCHAR KernelStackResident; /* 11E */
- UCHAR NextProcessor; /* 11F */
- PVOID CallbackStack; /* 120 */
- struct _W32THREAD *Win32Thread; /* 124 */
- struct _KTRAP_FRAME *TrapFrame; /* 128 */
- PKAPC_STATE ApcStatePointer[2]; /* 12C */
- UCHAR EnableStackSwap; /* 134 */
- UCHAR LargeStack; /* 135 */
- UCHAR ResourceIndex; /* 136 */
- UCHAR PreviousMode; /* 137 */
- ULONG KernelTime; /* 138 */
- ULONG UserTime; /* 13C */
- KAPC_STATE SavedApcState; /* 140 */
- UCHAR Alertable; /* 158 */
- UCHAR ApcStateIndex; /* 159 */
- UCHAR ApcQueueable; /* 15A */
- UCHAR AutoAlignment; /* 15B */
- PVOID StackBase; /* 15C */
- KAPC SuspendApc; /* 160 */
- KSEMAPHORE SuspendSemaphore; /* 190 */
- LIST_ENTRY ThreadListEntry; /* 1A4 */
- CHAR FreezeCount; /* 1AC */
- UCHAR SuspendCount; /* 1AD */
- UCHAR IdealProcessor; /* 1AE */
- UCHAR DisableBoost; /* 1AF */
- UCHAR QuantumReset; /* 1B0 */
-} KTHREAD;
-
-#include <poppack.h>
-
-typedef struct _KEXECUTE_OPTIONS
-{
- UCHAR ExecuteDisable:1;
- UCHAR ExecuteEnable:1;
- UCHAR DisableThunkEmulation:1;
- UCHAR Permanent:1;
- UCHAR ExecuteDispatchEnable:1;
- UCHAR ImageDispatchEnable:1;
- UCHAR Spare:2;
-} KEXECUTE_OPTIONS, *PKEXECUTE_OPTIONS;
-
-/*
- * NAME: KPROCESS
- * DESCRIPTION: Internal Kernel Process Structure.
- * PORTABILITY: Architecture Dependent.
- * KERNEL VERSION: 5.2
- * DOCUMENTATION: http://reactos.com/wiki/index.php/KPROCESS
- */
-typedef struct _KPROCESS
-{
- DISPATCHER_HEADER Header; /* 000 */
- LIST_ENTRY ProfileListHead; /* 010 */
- PHYSICAL_ADDRESS DirectoryTableBase; /* 018 */
- KGDTENTRY LdtDescriptor; /* 020 */
- KIDTENTRY Int21Descriptor; /* 028 */
- USHORT IopmOffset; /* 030 */
- UCHAR Iopl; /* 032 */
- UCHAR Unused; /* 033 */
- ULONG ActiveProcessors; /* 034 */
- ULONG KernelTime; /* 038 */
- ULONG UserTime; /* 03C */
- LIST_ENTRY ReadyListHead; /* 040 */
- LIST_ENTRY SwapListEntry; /* 048 */
- PVOID VdmTrapcHandler; /* 04C */
- LIST_ENTRY ThreadListHead; /* 050 */
- KSPIN_LOCK ProcessLock; /* 058 */
- KAFFINITY Affinity; /* 05C */
- union {
- struct {
- ULONG AutoAlignment:1; /* 060.0 */
- ULONG DisableBoost:1; /* 060.1 */
- ULONG DisableQuantum:1; /* 060.2 */
- ULONG ReservedFlags:29; /* 060.3 */
- };
- ULONG ProcessFlags; /* 060 */
- };
- CHAR BasePriority; /* 064 */
- CHAR QuantumReset; /* 065 */
- UCHAR State; /* 066 */
- UCHAR ThreadSeed; /* 067 */
- UCHAR PowerState; /* 068 */
- UCHAR IdealNode; /* 069 */
- UCHAR Visited; /* 06A */
- KEXECUTE_OPTIONS Flags; /* 06B */
- ULONG StackCount; /* 06C */
- LIST_ENTRY ProcessListEntry; /* 070 */
-} KPROCESS;
-
/* INTERNAL KERNEL FUNCTIONS ************************************************/
struct _KIRQ_TRAPFRAME;
} \
}
-#ifndef __USE_W32API
-#define KeGetCurrentProcessorNumber() (KeGetCurrentKPCR()->Number)
-#endif
-
/* threadsch.c ********************************************************************/
/* Thread Scheduler Functions */
/* next file ***************************************************************/
-typedef struct _KPROFILE_SOURCE_OBJECT {
+typedef struct _KPROFILE_SOURCE_OBJECT
+{
KPROFILE_SOURCE Source;
LIST_ENTRY ListEntry;
} KPROFILE_SOURCE_OBJECT, *PKPROFILE_SOURCE_OBJECT;
-typedef struct _KPROFILE {
- CSHORT Type;
- CSHORT Size;
- LIST_ENTRY ListEntry;
- PVOID RegionStart;
- PVOID RegionEnd;
- ULONG BucketShift;
- PVOID Buffer;
- CSHORT Source;
- ULONG Affinity;
- BOOLEAN Active;
- struct _KPROCESS *Process;
-} KPROFILE, *PKPROFILE;
-
/* Cached modules from the loader block */
-typedef enum _CACHED_MODULE_TYPE {
+typedef enum _CACHED_MODULE_TYPE
+{
AnsiCodepage,
OemCodepage,
UnicodeCasemap,
} CACHED_MODULE_TYPE, *PCACHED_MODULE_TYPE;
extern PLOADER_MODULE CachedModules[MaximumCachedModuleType];
-VOID STDCALL
+VOID
+STDCALL
DbgBreakPointNoBugCheck(VOID);
VOID
VOID
KiSetSystemTime(PLARGE_INTEGER NewSystemTime);
-#endif /* not __ASM__ */
-
#define MAXIMUM_PROCESSORS 32
#endif /* __NTOSKRNL_INCLUDE_INTERNAL_KE_H */
-/*
- * COPYRIGHT: See COPYING in the top level directory
- * PROJECT: ReactOS kernel
- * FILE: include/internal/ldr.h
- * PURPOSE: Header for loader module
- */
-
#ifndef __INCLUDE_INTERNAL_LDR_H
#define __INCLUDE_INTERNAL_LDR_H
#define DRIVER_ROOT_NAME L"\\Driver\\"
#define FILESYSTEM_ROOT_NAME L"\\FileSystem\\"
-
extern ULONG_PTR LdrHalBase;
NTSTATUS
-LdrLoadInitialProcess(PHANDLE ProcessHandle,
- PHANDLE ThreadHandle);
+LdrLoadInitialProcess(
+ PHANDLE ProcessHandle,
+ PHANDLE ThreadHandle
+);
VOID
-LdrLoadAutoConfigDrivers (
- VOID
- );
+LdrLoadAutoConfigDrivers (VOID);
+
VOID
-LdrInitModuleManagement (
- VOID
- );
+LdrInitModuleManagement (VOID);
NTSTATUS
STDCALL
-LdrpMapSystemDll(PEPROCESS Process,
- PVOID *DllBase);
+LdrpMapSystemDll(
+ PEPROCESS Process,
+ PVOID *DllBase
+);
NTSTATUS
STDCALL
PVOID
LdrpGetSystemDllEntryPoint (VOID);
+
PVOID
LdrpGetSystemDllApcDispatcher(VOID);
+
PVOID
LdrpGetSystemDllExceptionDispatcher(VOID);
+
PVOID
LdrpGetSystemDllCallbackDispatcher(VOID);
+
PVOID
LdrpGetSystemDllRaiseExceptionDispatcher(VOID);
-NTSTATUS
-LdrpMapImage (
- HANDLE ProcessHandle,
- HANDLE SectionHandle,
- PVOID * ImageBase
- );
-
-NTSTATUS STDCALL
-LdrGetProcedureAddress (IN PVOID BaseAddress,
- IN PANSI_STRING Name,
- IN ULONG Ordinal,
- OUT PVOID *ProcedureAddress);
+NTSTATUS
+LdrpMapImage(
+ HANDLE ProcessHandle,
+ HANDLE SectionHandle,
+ PVOID * ImageBase
+);
NTSTATUS
-LdrpLoadImage(PUNICODE_STRING DriverName,
- PVOID *ModuleBase,
- PVOID *SectionPointer,
- PVOID *EntryPoint,
- PVOID *ExportDirectory);
+LdrpLoadImage(
+ PUNICODE_STRING DriverName,
+ PVOID *ModuleBase,
+ PVOID *SectionPointer,
+ PVOID *EntryPoint,
+ PVOID *ExportDirectory
+);
NTSTATUS
LdrpUnloadImage(PVOID ModuleBase);
LdrpLoadAndCallImage(PUNICODE_STRING DriverName);
NTSTATUS
-LdrpQueryModuleInformation(PVOID Buffer,
- ULONG Size,
- PULONG ReqSize);
-
-PVOID STDCALL
-RtlImageDirectoryEntryToData (
- IN PVOID BaseAddress,
- IN BOOLEAN ImageLoaded,
- IN ULONG Directory,
- OUT PULONG Size);
+LdrpQueryModuleInformation(
+ PVOID Buffer,
+ ULONG Size,
+ PULONG ReqSize
+);
+
VOID
LdrInit1(VOID);
-VOID
-LdrInitDebug(PLOADER_MODULE Module, PWCH Name);
-PVOID LdrSafePEProcessModule(
- PVOID ModuleLoadBase,
- PVOID DriverBase,
- PVOID ImportModuleBase,
- PULONG DriverSize);
+VOID
+LdrInitDebug(
+ PLOADER_MODULE Module,
+ PWCH Name
+);
+
+PVOID
+LdrSafePEProcessModule(
+ PVOID ModuleLoadBase,
+ PVOID DriverBase,
+ PVOID ImportModuleBase,
+ PULONG DriverSize
+);
NTSTATUS
-LdrLoadModule(PUNICODE_STRING Filename,
- PMODULE_OBJECT *ModuleObject);
+LdrLoadModule(
+ PUNICODE_STRING Filename,
+ PMODULE_OBJECT *ModuleObject
+);
NTSTATUS
LdrUnloadModule(PMODULE_OBJECT ModuleObject);
-/* $Id$
- *
- * Copyright (C) 1998-2005 ReactOS Team (and the authors from the programmers section)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- *
- * PROJECT: ReactOS kernel
- * FILE: ntoskrnl/include/internal/mm.h
- * PURPOSE: level memory managment definitions
- *
- * PROGRAMMERS: David Welch
- * Casper Hornstrup
- * Hartmut Birr
- * Ge van Geldorp
- * Eric Kohl
- * Andrew Greenwood
- * James Tabor
- * Alex Ionescu
- * Mike Nordell
- * Thomas Weidenmueller
- * Filip Navara
- * KJK::Hyperion
- * Gregor Anich
- * Steven Edwards
- */
-
#ifndef __INCLUDE_INTERNAL_MM_H
#define __INCLUDE_INTERNAL_MM_H
extern ULONG MmTotalNonPagedPoolQuota;
struct _EPROCESS;
-
struct _MM_RMAP_ENTRY;
-struct _MM_PAGEOP;
+struct _MM_PAGEOP
+;
typedef ULONG SWAPENTRY;
-
typedef ULONG PFN_TYPE, *PPFN_TYPE;
#define MEMORY_AREA_INVALID (0)
#define NR_SECTION_PAGE_TABLES (1024)
#define NR_SECTION_PAGE_ENTRIES (1024)
-#ifndef __USE_W32API
-#define MM_LOWEST_USER_ADDRESS (PVOID)0x10000
-#endif
-
#define TEB_BASE (0x7FFDE000)
+#define KPCR_BASE 0xFF000000
-#define MM_VIRTMEM_GRANULARITY (64 * 1024) /* Although Microsoft says this isn't hardcoded anymore,
- they won't be able to change it. Stuff depends on it */
+/* Although Microsoft says this isn't hardcoded anymore,
+ they won't be able to change it. Stuff depends on it */
+#define MM_VIRTMEM_GRANULARITY (64 * 1024)
#define STATUS_MM_RESTART_OPERATION ((NTSTATUS)0xD0000001)
};
} SECTION_OBJECT;
-#ifndef __USE_W32API
-
-typedef struct _SECTION_OBJECT *PSECTION_OBJECT;
-
-typedef struct _EPROCESS_QUOTA_ENTRY {
- ULONG Usage;
- ULONG Limit;
- ULONG Peak;
- ULONG Return;
-} EPROCESS_QUOTA_ENTRY, *PEPROCESS_QUOTA_ENTRY;
-
-typedef struct _EPROCESS_QUOTA_BLOCK {
- EPROCESS_QUOTA_ENTRY QuotaEntry[3];
- LIST_ENTRY QuotaList;
- ULONG ReferenceCount;
- ULONG ProcessCount;
-} EPROCESS_QUOTA_BLOCK, *PEPROCESS_QUOTA_BLOCK;
-
-/*
- * header mess....
- */
-
-typedef struct _PAGEFAULT_HISTORY
-{
- ULONG CurrentIndex;
- ULONG MaxIndex;
- KSPIN_LOCK SpinLock;
- PVOID Reserved;
- struct _PROCESS_WS_WATCH_INFORMATION WatchInfo[1];
-} PAGEFAULT_HISTORY, *PPAGEFAULT_HISTORY;
-
-#endif /* __USE_W32API */
-
-typedef struct _MMADDRESS_NODE
-{
- union {
- ULONG Balance:2;
- struct _MMADDRESS_NODE *Parent;
- } u1;
- struct _MMADDRESS_NODE *LeftChild;
- struct _MMADDRESS_NODE *RightChild;
- ULONG StartingVpn;
- ULONG EndingVpn;
-} MMADDRESS_NODE, *PMMADDRESS_NODE;
-
-typedef struct _MM_AVL_TABLE
-{
- MMADDRESS_NODE BalancedRoot;
- ULONG DepthOfTree:5;
- ULONG Unused:3;
- ULONG NumberGenericTableElements:24;
- PVOID NodeHint;
- PVOID NodeFreeHint;
-} MM_AVL_TABLE, *PMM_AVL_TABLE;
-
typedef struct _MEMORY_AREA
{
PVOID StartingAddress;
ULONG PageTableRefCountTableSize;
} MADDRESS_SPACE, *PMADDRESS_SPACE;
-typedef struct _KNODE {
- ULONG ProcessorMask;
- ULONG Color;
- ULONG MmShiftedColor;
- ULONG FreeCount[2];
- SLIST_HEADER DeadStackList;
- SLIST_HEADER PfnDereferenceSListHead;
- struct _SINGLE_LIST_ENTRY *PfnDeferredList;
- UCHAR Seed;
- UCHAR NodeNumber;
- ULONG Flags;
-} KNODE, *PKNODE;
-
-#ifndef __USE_W32API
-/* VARIABLES */
-
-#ifdef __NTOSKRNL__
-extern PVOID EXPORTED MmSystemRangeStart;
-#else
-extern PVOID IMPORTED MmSystemRangeStart;
-#endif
-
-#endif /* __USE_W32API */
-
typedef struct
{
ULONG NrTotalPages;
PVOID Address, PFN_TYPE Page,
SWAPENTRY SwapEntry, BOOLEAN Dirty);
+PVOID STDCALL ExAllocateNonPagedPoolWithTag (POOL_TYPE type,
+ ULONG size,
+ ULONG Tag,
+ PVOID Caller);
+
+PVOID STDCALL ExAllocatePagedPoolWithTag (POOL_TYPE Type,
+ ULONG size,
+ ULONG Tag);
+VOID STDCALL ExFreeNonPagedPool (PVOID block);
+
+VOID STDCALL
+ExFreePagedPool(IN PVOID Block);
+VOID MmInitializePagedPool(VOID);
+
+PVOID
+STDCALL
+MiAllocateSpecialPool (IN POOL_TYPE PoolType,
+ IN SIZE_T NumberOfBytes,
+ IN ULONG Tag,
+ IN ULONG Underrun
+ );
+
+extern PVOID MmPagedPoolBase;
+extern ULONG MmPagedPoolSize;
+
+#define MM_PAGED_POOL_SIZE (100*1024*1024)
+#define MM_NONPAGED_POOL_SIZE (100*1024*1024)
+
+/*
+ * Paged and non-paged pools are 8-byte aligned
+ */
+#define MM_POOL_ALIGNMENT 8
+
+/*
+ * Maximum size of the kmalloc area (this is totally arbitary)
+ */
+#define MM_KERNEL_MAP_SIZE (16*1024*1024)
+#define MM_KERNEL_MAP_BASE (0xf0c00000)
+
+/*
+ * FIXME - different architectures have different cache line sizes...
+ */
+#define MM_CACHE_LINE_SIZE 32
+
+#define MM_ROUND_UP(x,s) ((PVOID)(((ULONG_PTR)(x)+(s)-1) & ~((ULONG_PTR)(s)-1)))
+#define MM_ROUND_DOWN(x,s) ((PVOID)(((ULONG_PTR)(x)) & ~((ULONG_PTR)(s)-1)))
+
/* FUNCTIONS */
/* aspace.c ******************************************************************/
/* marea.c *******************************************************************/
-NTSTATUS INIT_FUNCTION
+NTSTATUS
MmInitMemoryAreas(VOID);
NTSTATUS STDCALL
NTSTATUS Mmi386ReleaseMmInfo(struct _EPROCESS* Process);
+NTSTATUS MmSafeCopyFromUser(PVOID Dest, const VOID *Src, ULONG NumberOfBytes);
+NTSTATUS MmSafeCopyToUser(PVOID Dest, const VOID *Src, ULONG NumberOfBytes);
+
+NTSTATUS STDCALL
+MmCopyFromCaller(PVOID Dest, const VOID *Src, ULONG NumberOfBytes);
+NTSTATUS STDCALL
+MmCopyToCaller(PVOID Dest, const VOID *Src, ULONG NumberOfBytes);
+
VOID MmDeleteVirtualMapping(struct _EPROCESS* Process,
PVOID Address,
BOOL FreePage,
typedef struct _MODULE_TEXT_SECTION
{
- ULONG Base;
- ULONG Length;
- LIST_ENTRY ListEntry;
- PWCH Name;
- PIMAGE_OPTIONAL_HEADER OptionalHeader;
- PROSSYM_INFO RosSymInfo;
+ ULONG Base;
+ ULONG Length;
+ LIST_ENTRY ListEntry;
+ PWCH Name;
+ PIMAGE_OPTIONAL_HEADER OptionalHeader;
+ PROSSYM_INFO RosSymInfo;
} MODULE_TEXT_SECTION, *PMODULE_TEXT_SECTION;
typedef struct _MODULE_OBJECT
{
- CSHORT ObjectType;
- CSHORT ObjectSize;
- PVOID Base;
- ULONG Length;
- ULONG Flags;
- PVOID EntryPoint;
- LIST_ENTRY ListEntry;
- UNICODE_STRING FullName;
- UNICODE_STRING BaseName;
- PMODULE_TEXT_SECTION TextSection;
- union
+ CSHORT ObjectType;
+ CSHORT ObjectSize;
+ PVOID Base;
+ ULONG Length;
+ ULONG Flags;
+ PVOID EntryPoint;
+ LIST_ENTRY ListEntry;
+ UNICODE_STRING FullName;
+ UNICODE_STRING BaseName;
+ PMODULE_TEXT_SECTION TextSection;
+ union
{
- struct
+ struct
{
- PIMAGE_FILE_HEADER FileHeader;
- PIMAGE_OPTIONAL_HEADER OptionalHeader;
- PIMAGE_SECTION_HEADER SectionList;
+ PIMAGE_FILE_HEADER FileHeader;
+ PIMAGE_OPTIONAL_HEADER OptionalHeader;
+ PIMAGE_SECTION_HEADER SectionList;
} PE;
} Image;
} MODULE_OBJECT, *PMODULE_OBJECT;
typedef struct _INSTANCE
{
- HANDLE ModuleHandle;
+ HANDLE ModuleHandle;
} INSTANCE, *PINSTANCE;
BOOLEAN process_boot_module(unsigned int start);
-/*
- * ReactOS kernel
- * Copyright (C) 2003 Eric Kohl <ekohl@rz-online.de>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
#ifndef __NTOSKRNL_INCLUDE_INTERNAL_NLS_H
#define __NTOSKRNL_INCLUDE_INTERNAL_NLS_H
extern PUSHORT NlsUnicodeUpcaseTable;
extern PUSHORT NlsUnicodeLowercaseTable;
-VOID STDCALL RtlpInitNls(VOID);
-VOID RtlpImportAnsiCodePage(PUSHORT TableBase, ULONG Size);
-VOID RtlpImportOemCodePage(PUSHORT TableBase, ULONG Size);
-VOID RtlpImportUnicodeCasemap(PUSHORT TableBase, ULONG Size);
-VOID RtlpCreateInitialNlsTables(VOID);
-VOID RtlpCreateNlsSection(VOID);
+VOID
+STDCALL
+RtlpInitNls(VOID);
+
+VOID
+RtlpImportAnsiCodePage(
+ PUSHORT TableBase,
+ ULONG Size
+);
+
+VOID
+RtlpImportOemCodePage(
+ PUSHORT TableBase,
+ ULONG Size
+);
+
+VOID
+RtlpImportUnicodeCasemap(
+ PUSHORT TableBase,
+ ULONG Size
+);
+
+VOID
+RtlpCreateInitialNlsTables(VOID);
+
+VOID
+RtlpCreateNlsSection(VOID);
#endif /* __NTOSKRNL_INCLUDE_INTERNAL_NLS_H */
-/*
- * Various useful prototypes
- */
-
#ifndef __INCLUDE_INTERNAL_NTOSKRNL_H
#define __INCLUDE_INTERNAL_NTOSKRNL_H
-#ifndef __ASM__
-
/*
* Use these to place a function in a specific section of the executable
*/
#ifdef _NTOSKRNL_
+#include "asm.h"
#include "ke.h"
-#include "i386/segment.h"
#include "i386/mm.h"
#include "i386/fpu.h"
#include "module.h"
-#include "pool.h"
#include "ob.h"
#include "mm.h"
#include "ps.h"
#include "ex.h"
#include "xhal.h"
#include "v86m.h"
-#include "ifs.h"
+#include "fs.h"
#include "port.h"
#include "nls.h"
#ifdef KDBG
#include "kdb.h"
#endif
#include "dbgk.h"
-#include "trap.h"
-#include "safe.h"
#include "tag.h"
#include "test.h"
#include "inbv.h"
-
#include <pshpack1.h>
/*
* Defines a descriptor as it appears in the processor tables
extern IDT_DESCRIPTOR KiIdt[256];
//extern GDT_DESCRIPTOR KiGdt[256];
-
-VOID ExpInitializeEventImplementation(VOID);
-VOID ExpInitializeEventImplementation(VOID);
-VOID ExpInitializeEventPairImplementation(VOID);
-VOID ExpInitializeSemaphoreImplementation(VOID);
-VOID ExpInitializeMutantImplementation(VOID);
-VOID ExpInitializeTimerImplementation(VOID);
-VOID ExpInitializeProfileImplementation(VOID);
/*
* Initalization functions (called once by main())
*/
IN PCWSTR Source,
IN POOL_TYPE PoolType);
+NTSTATUS
+RtlCaptureUnicodeString(
+ OUT PUNICODE_STRING Dest,
+ IN KPROCESSOR_MODE CurrentMode,
+ IN POOL_TYPE PoolType,
+ IN BOOLEAN CaptureIfKernel,
+ IN PUNICODE_STRING UnsafeSrc
+);
+
+VOID
+RtlReleaseCapturedUnicodeString(
+ IN PUNICODE_STRING CapturedString,
+ IN KPROCESSOR_MODE CurrentMode,
+ IN BOOLEAN CaptureIfKernel
+);
+
#endif
-#endif /* __ASM__ */
/*
*
#ifndef __INCLUDE_INTERNAL_OBJMGR_H
#define __INCLUDE_INTERNAL_OBJMGR_H
-#define TAG_OBJECT_TYPE TAG('O', 'b', 'j', 'T')
-
struct _EPROCESS;
-typedef enum _OB_OPEN_REASON
-{
- ObCreateHandle,
- ObOpenHandle,
- ObDuplicateHandle,
- ObInheritHandle,
- ObMaxOpenReason
-} OB_OPEN_REASON;
-
-/* TEMPORARY HACK */
-typedef NTSTATUS
-(STDCALL *OB_CREATE_METHOD)(
- PVOID ObjectBody,
- PVOID Parent,
- PWSTR RemainingPath,
- struct _OBJECT_ATTRIBUTES* ObjectAttributes);
-
-/* Object Callbacks */
-typedef NTSTATUS
-(STDCALL *OB_OPEN_METHOD)(
- OB_OPEN_REASON Reason,
- PVOID ObjectBody,
- PEPROCESS Process,
- ULONG HandleCount,
- ACCESS_MASK GrantedAccess);
-
-typedef NTSTATUS
-(STDCALL *OB_PARSE_METHOD)(
- PVOID Object,
- PVOID *NextObject,
- PUNICODE_STRING FullPath,
- PWSTR *Path,
- ULONG Attributes);
-
-typedef VOID
-(STDCALL *OB_DELETE_METHOD)(
- PVOID DeletedObject);
-
-typedef VOID
-(STDCALL *OB_CLOSE_METHOD)(
- PVOID ClosedObject,
- ULONG HandleCount);
-
-typedef VOID
-(STDCALL *OB_DUMP_METHOD)(
- VOID);
-
-typedef NTSTATUS
-(STDCALL *OB_OKAYTOCLOSE_METHOD)(
- VOID);
-
-typedef NTSTATUS
-(STDCALL *OB_QUERYNAME_METHOD)(
- PVOID ObjectBody,
- POBJECT_NAME_INFORMATION ObjectNameInfo,
- ULONG Length,
- PULONG ReturnLength);
-
-typedef PVOID
-(STDCALL *OB_FIND_METHOD)(
- PVOID WinStaObject,
- PWSTR Name,
- ULONG Attributes);
-
-typedef NTSTATUS
-(STDCALL *OB_SECURITY_METHOD)(
- PVOID ObjectBody,
- SECURITY_OPERATION_CODE OperationCode,
- SECURITY_INFORMATION SecurityInformation,
- PSECURITY_DESCRIPTOR SecurityDescriptor,
- PULONG BufferLength);
-
-typedef struct _OBJECT_HEADER_NAME_INFO
-{
- struct _DIRECTORY_OBJECT *Directory;
- UNICODE_STRING Name;
- ULONG QueryReferences;
- ULONG Reserved2;
- ULONG DbgReferenceCount;
-} OBJECT_HEADER_NAME_INFO, *POBJECT_HEADER_NAME_INFO;
-
-typedef struct _OBJECT_CREATE_INFORMATION
-{
- ULONG Attributes;
- HANDLE RootDirectory;
- PVOID ParseContext;
- KPROCESSOR_MODE ProbeMode;
- ULONG PagedPoolCharge;
- ULONG NonPagedPoolCharge;
- ULONG SecurityDescriptorCharge;
- PSECURITY_DESCRIPTOR SecurityDescriptor;
- PSECURITY_QUALITY_OF_SERVICE SecurityQos;
- SECURITY_QUALITY_OF_SERVICE SecurityQualityOfService;
-} OBJECT_CREATE_INFORMATION, *POBJECT_CREATE_INFORMATION;
-
-typedef struct _OBJECT_TYPE_INITIALIZER
-{
- WORD Length;
- UCHAR UseDefaultObject;
- UCHAR CaseInsensitive;
- ULONG InvalidAttributes;
- GENERIC_MAPPING GenericMapping;
- ULONG ValidAccessMask;
- UCHAR SecurityRequired;
- UCHAR MaintainHandleCount;
- UCHAR MaintainTypeList;
- POOL_TYPE PoolType;
- ULONG DefaultPagedPoolCharge;
- ULONG DefaultNonPagedPoolCharge;
- OB_DUMP_METHOD DumpProcedure;
- OB_OPEN_METHOD OpenProcedure;
- OB_CLOSE_METHOD CloseProcedure;
- OB_DELETE_METHOD DeleteProcedure;
- OB_PARSE_METHOD ParseProcedure;
- OB_SECURITY_METHOD SecurityProcedure;
- OB_QUERYNAME_METHOD QueryNameProcedure;
- OB_OKAYTOCLOSE_METHOD OkayToCloseProcedure;
-} OBJECT_TYPE_INITIALIZER, *POBJECT_TYPE_INITIALIZER;
-
-typedef struct _OBJECT_TYPE
-{
- ERESOURCE Mutex; /* Used to lock the Object Type */
- LIST_ENTRY TypeList; /* Links all the Types Together for Debugging */
- UNICODE_STRING Name; /* Name of the Type */
- PVOID DefaultObject; /* What Object to use during a Wait (ie, FileObjects wait on FileObject->Event) */
- ULONG Index; /* Index of this Type in the Object Directory */
- ULONG TotalNumberOfObjects; /* Total number of objects of this type */
- ULONG TotalNumberOfHandles; /* Total number of handles of this type */
- ULONG HighWaterNumberOfObjects; /* Peak number of objects of this type */
- ULONG HighWaterNumberOfHandles; /* Peak number of handles of this type */
- OBJECT_TYPE_INITIALIZER TypeInfo; /* Information captured during type creation */
- ULONG Key; /* Key to use when allocating objects of this type */
- ERESOURCE ObjectLocks[4]; /* Locks for locking the Objects */
-} OBJECT_TYPE;
-
-typedef struct _OBJECT_HANDLE_COUNT_ENTRY
-{
- struct _EPROCESS *Process;
- ULONG HandleCount;
-} OBJECT_HANDLE_COUNT_ENTRY, *POBJECT_HANDLE_COUNT_ENTRY;
-
-typedef struct _OBJECT_HANDLE_COUNT_DATABASE
-{
- ULONG CountEntries;
- POBJECT_HANDLE_COUNT_ENTRY HandleCountEntries[1];
-} OBJECT_HANDLE_COUNT_DATABASE, *POBJECT_HANDLE_COUNT_DATABASE;
-
-typedef struct _OBJECT_HEADER_HANDLE_INFO
-{
- union {
- POBJECT_HANDLE_COUNT_DATABASE HandleCountDatabase;
- OBJECT_HANDLE_COUNT_ENTRY SingleEntry;
- };
-} OBJECT_HEADER_HANDLE_INFO, *POBJECT_HEADER_HANDLE_INFO;
-
-typedef struct _OBJECT_HEADER_CREATOR_INFO
-{
- LIST_ENTRY TypeList;
- PVOID CreatorUniqueProcess;
- USHORT CreatorBackTraceIndex;
- USHORT Reserved;
-} OBJECT_HEADER_CREATOR_INFO, *POBJECT_HEADER_CREATOR_INFO;
-
-typedef PVOID POBJECT;
-
-typedef struct _QUAD
-{
- union {
- LONGLONG UseThisFieldToCopy;
- float DoNotUseThisField;
- };
-} QUAD, *PQUAD;
-
-#define OB_FLAG_CREATE_INFO 0x01 // has OBJECT_CREATE_INFO
-#define OB_FLAG_KERNEL_MODE 0x02 // created by kernel
-#define OB_FLAG_CREATOR_INFO 0x04 // has OBJECT_CREATOR_INFO
-#define OB_FLAG_EXCLUSIVE 0x08 // OBJ_EXCLUSIVE
-#define OB_FLAG_PERMANENT 0x10 // OBJ_PERMANENT
-#define OB_FLAG_SECURITY 0x20 // has security descriptor
-#define OB_FLAG_SINGLE_PROCESS 0x40 // no HandleDBList
-
-/* Will be moved to public headers once "Entry" is gone */
-typedef struct _OBJECT_HEADER
-{
- LIST_ENTRY Entry;
- LONG PointerCount;
- union {
- LONG HandleCount;
- PVOID NextToFree;
- };
- POBJECT_TYPE Type;
- UCHAR NameInfoOffset;
- UCHAR HandleInfoOffset;
- UCHAR QuotaInfoOffset;
- UCHAR Flags;
- union {
- POBJECT_CREATE_INFORMATION ObjectCreateInfo;
- PVOID QuotaBlockCharged;
- };
- PSECURITY_DESCRIPTOR SecurityDescriptor;
- QUAD Body;
-} OBJECT_HEADER, *POBJECT_HEADER;
-
typedef struct _DIRECTORY_OBJECT
{
CSHORT Type;
-/* $Id$
- *
- * COPYRIGHT: See COPYING in the top level directory
- * PROJECT: ReactOS kernel
- * FILE: include/internal/po.h
- * PURPOSE: Internal power manager declarations
- * PROGRAMMER: Casper S. Hornstrup (chorns@users.sourceforge.net)
- * UPDATE HISTORY:
- * 01/05/2001 Created
- */
-
#ifndef __NTOSKRNL_INCLUDE_INTERNAL_PO_H
#define __NTOSKRNL_INCLUDE_INTERNAL_PO_H
extern PDEVICE_NODE PopSystemPowerDeviceNode;
VOID
-PoInit(PLOADER_PARAMETER_BLOCK LoaderBlock, BOOLEAN ForceAcpiDisable);
+PoInit(
+ PLOADER_PARAMETER_BLOCK LoaderBlock,
+ BOOLEAN ForceAcpiDisable
+);
NTSTATUS
-PopSetSystemPowerState(
- SYSTEM_POWER_STATE PowerState);
+PopSetSystemPowerState(SYSTEM_POWER_STATE PowerState);
#endif /* __NTOSKRNL_INCLUDE_INTERNAL_PO_H */
+++ /dev/null
-#ifndef __INTERNAL_POOL_H
-#define __INTERNAL_POOL_H
-
-PVOID STDCALL ExAllocateNonPagedPoolWithTag (POOL_TYPE type,
- ULONG size,
- ULONG Tag,
- PVOID Caller);
-
-PVOID STDCALL ExAllocatePagedPoolWithTag (POOL_TYPE Type,
- ULONG size,
- ULONG Tag);
-VOID STDCALL ExFreeNonPagedPool (PVOID block);
-
-VOID STDCALL
-ExFreePagedPool(IN PVOID Block);
-VOID MmInitializePagedPool(VOID);
-
-PVOID
-STDCALL
-MiAllocateSpecialPool (IN POOL_TYPE PoolType,
- IN SIZE_T NumberOfBytes,
- IN ULONG Tag,
- IN ULONG Underrun
- );
-
-extern PVOID MmPagedPoolBase;
-extern ULONG MmPagedPoolSize;
-
-#define MM_PAGED_POOL_SIZE (100*1024*1024)
-#define MM_NONPAGED_POOL_SIZE (100*1024*1024)
-
-/*
- * Paged and non-paged pools are 8-byte aligned
- */
-#define MM_POOL_ALIGNMENT 8
-
-/*
- * Maximum size of the kmalloc area (this is totally arbitary)
- */
-#define MM_KERNEL_MAP_SIZE (16*1024*1024)
-#define MM_KERNEL_MAP_BASE (0xf0c00000)
-
-/*
- * FIXME - different architectures have different cache line sizes...
- */
-#define MM_CACHE_LINE_SIZE 32
-
-#define MM_ROUND_UP(x,s) ((PVOID)(((ULONG_PTR)(x)+(s)-1) & ~((ULONG_PTR)(s)-1)))
-#define MM_ROUND_DOWN(x,s) ((PVOID)(((ULONG_PTR)(x)) & ~((ULONG_PTR)(s)-1)))
-
-#endif /* __INTERNAL_POOL_H */
/* Pool Tags */
-#define TAG_LPC_MESSAGE TAG('L', 'p', 'c', 'M')
-#define TAG_LPC_ZONE TAG('L', 'p', 'c', 'Z')
-
-
typedef struct _QUEUEDMESSAGE
{
PEPORT Sender;
-/*
- * ReactOS kernel
- * Copyright (C) 2000 David Welch <welch@cwcom.net>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-/* $Id$
- *
- * FILE: ntoskrnl/ke/kthread.c
- * PURPOSE: Process manager definitions
- * PROGRAMMER: David Welch (welch@cwcom.net)
- * UPDATE HISTORY:
- * Created 22/05/98
- */
-
#ifndef __INCLUDE_INTERNAL_PS_H
#define __INCLUDE_INTERNAL_PS_H
-#ifndef __ASM__
-
/* Forward declarations. */
struct _KTHREAD;
struct _KTRAPFRAME;
struct _EJOB;
-#endif /* __ASM__ */
-
#include <internal/arch/ps.h>
-#ifndef __ASM__
-
extern LCID PsDefaultThreadLocaleId;
extern LCID PsDefaultSystemLocaleId;
OB_DELETE_METHOD DesktopDelete;
} W32_OBJECT_CALLBACK, *PW32_OBJECT_CALLBACK;
-#ifndef __USE_W32API
-typedef struct
-{
- PACCESS_TOKEN Token;
- BOOLEAN CopyOnOpen;
- BOOLEAN EffectiveOnly;
- SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
-} PS_IMPERSONATION_INFORMATION, *PPS_IMPERSONATION_INFORMATION;
-#endif
-
-#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 */
- LARGE_INTEGER CreateTime; /* 1C0 */
- LARGE_INTEGER ExitTime; /* 1C0 */
- union {
- LIST_ENTRY LpcReplyChain; /* 1C0 */
- LIST_ENTRY KeyedWaitChain; /* 1C0 */
- };
- union {
- NTSTATUS ExitStatus; /* 1C8 */
- PVOID OfsChain; /* 1C8 */
- };
- LIST_ENTRY PostBlockList; /* 1CC */
- union {
- struct _TERMINATION_PORT *TerminationPort; /* 1D4 */
- struct _ETHREAD *ReaperLink; /* 1D4 */
- PVOID KeyedWaitValue; /* 1D4 */
- };
- KSPIN_LOCK ActiveTimerListLock; /* 1D8 */
- LIST_ENTRY ActiveTimerListHead; /* 1D8 */
- CLIENT_ID Cid; /* 1E0 */
- union {
- KSEMAPHORE LpcReplySemaphore; /* 1E4 */
- KSEMAPHORE KeyedReplySemaphore; /* 1E4 */
- };
- union {
- PVOID LpcReplyMessage; /* 200 */
- PVOID LpcWaitingOnPort; /* 200 */
- };
- PPS_IMPERSONATION_INFORMATION ImpersonationInfo; /* 204 */
- LIST_ENTRY IrpList; /* 208 */
- ULONG TopLevelIrp; /* 210 */
- PDEVICE_OBJECT DeviceToVerify; /* 214 */
- struct _EPROCESS *ThreadsProcess; /* 218 */
- PKSTART_ROUTINE StartAddress; /* 21C */
- union {
- PTHREAD_START_ROUTINE Win32StartAddress; /* 220 */
- ULONG LpcReceivedMessageId; /* 220 */
- };
- LIST_ENTRY ThreadListEntry; /* 224 */
- EX_RUNDOWN_REF RundownProtect; /* 22C */
- EX_PUSH_LOCK ThreadLock; /* 230 */
- ULONG LpcReplyMessageId; /* 234 */
- ULONG ReadClusterSize; /* 238 */
- ACCESS_MASK GrantedAccess; /* 23C */
- union {
- struct {
- ULONG Terminated:1;
- ULONG DeadThread:1;
- ULONG HideFromDebugger:1;
- ULONG ActiveImpersonationInfo:1;
- ULONG SystemThread:1;
- ULONG HardErrorsAreDisabled:1;
- ULONG BreakOnTermination:1;
- ULONG SkipCreationMsg:1;
- ULONG SkipTerminationMsg:1;
- };
- ULONG CrossThreadFlags; /* 240 */
- };
- union {
- struct {
- ULONG ActiveExWorker:1;
- ULONG ExWorkerCanWaitUser:1;
- ULONG MemoryMaker:1;
- ULONG KeyedEventInUse:1;
- };
- ULONG SameThreadPassiveFlags; /* 244 */
- };
- union {
- struct {
- ULONG LpcReceivedMsgIdValid:1;
- ULONG LpcExitThreadCalled:1;
- ULONG AddressSpaceOwner:1;
- ULONG OwnsProcessWorkingSetExclusive:1;
- ULONG OwnsProcessWorkingSetShared:1;
- ULONG OwnsSystemWorkingSetExclusive:1;
- ULONG OwnsSystemWorkingSetShared:1;
- ULONG OwnsSessionWorkingSetExclusive:1;
- ULONG OwnsSessionWorkingSetShared:1;
- ULONG ApcNeeded:1;
- };
- ULONG SameThreadApcFlags; /* 248 */
- };
- UCHAR ForwardClusterOnly; /* 24C */
- UCHAR DisablePageFaultClustering; /* 24D */
- UCHAR ActiveFaultCount; /* 24E */
-} ETHREAD;
-
-#include <poppack.h>
-
-#ifndef __USE_W32API
-
-typedef struct _ETHREAD *PETHREAD;
-
-#endif /* __USE_W32API */
-
-#include <pshpack4.h>
-/*
- * 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 */
- EX_PUSH_LOCK ProcessLock; /* 078 */
- LARGE_INTEGER CreateTime; /* 080 */
- LARGE_INTEGER ExitTime; /* 088 */
- EX_RUNDOWN_REF RundownProtect; /* 090 */
- HANDLE UniqueProcessId; /* 094 */
- LIST_ENTRY ActiveProcessLinks; /* 098 */
- ULONG QuotaUsage[3]; /* 0A0 */
- ULONG QuotaPeak[3]; /* 0AC */
- ULONG CommitCharge; /* 0B8 */
- ULONG PeakVirtualSize; /* 0BC */
- ULONG VirtualSize; /* 0C0 */
- LIST_ENTRY SessionProcessLinks; /* 0C4 */
- PVOID DebugPort; /* 0CC */
- PVOID ExceptionPort; /* 0D0 */
- PHANDLE_TABLE ObjectTable; /* 0D4 */
- EX_FAST_REF Token; /* 0D8 */
- ULONG WorkingSetPage; /* 0DC */
- KGUARDED_MUTEX AddressCreationLock; /* 0E0 */
- KSPIN_LOCK HyperSpaceLock; /* 100 */
- PETHREAD ForkInProgress; /* 104 */
- ULONG HardwareTrigger; /* 108 */
- MM_AVL_TABLE PhysicalVadroot; /* 10C */
- PVOID CloneRoot; /* 110 */
- ULONG NumberOfPrivatePages; /* 114 */
- ULONG NumberOfLockedPages; /* 118 */
- PVOID *Win32Process; /* 11C */
- struct _EJOB *Job; /* 120 */
- PVOID SectionObject; /* 124 */
- PVOID SectionBaseAddress; /* 128 */
- PEPROCESS_QUOTA_BLOCK QuotaBlock; /* 12C */
- PPAGEFAULT_HISTORY WorkingSetWatch; /* 130 */
- PVOID Win32WindowStation; /* 134 */
- HANDLE InheritedFromUniqueProcessId; /* 138 */
- PVOID LdtInformation; /* 13C */
- PVOID VadFreeHint; /* 140 */
- PVOID VdmObjects; /* 144 */
- PVOID DeviceMap; /* 148 */
- PVOID Spare0[3]; /* 14C */
- union {
- HARDWARE_PTE_X86 PagedirectoryPte; /* 158 */
- ULONGLONG Filler; /* 158 */
- };
- ULONG Session; /* 160 */
- CHAR ImageFileName[16]; /* 164 */
- LIST_ENTRY JobLinks; /* 174 */
- PVOID LockedPagesList; /* 17C */
- LIST_ENTRY ThreadListHead; /* 184 */
- PVOID SecurityPort; /* 188 */
- PVOID PaeTop; /* 18C */
- ULONG ActiveThreds; /* 190 */
- ACCESS_MASK GrantedAccess; /* 194 */
- ULONG DefaultHardErrorProcessing; /* 198 */
- NTSTATUS LastThreadExitStatus; /* 19C */
- struct _PEB* Peb; /* 1A0 */
- EX_FAST_REF PrefetchTrace; /* 1A4 */
- LARGE_INTEGER ReadOperationCount; /* 1A8 */
- LARGE_INTEGER WriteOperationCount; /* 1B0 */
- LARGE_INTEGER OtherOperationCount; /* 1B8 */
- LARGE_INTEGER ReadTransferCount; /* 1C0 */
- LARGE_INTEGER WriteTransferCount; /* 1C8 */
- LARGE_INTEGER OtherTransferCount; /* 1D0 */
- ULONG CommitChargeLimit; /* 1D8 */
- ULONG CommitChargePeak; /* 1DC */
- PVOID AweInfo; /* 1E0 */
- SE_AUDIT_PROCESS_CREATION_INFO SeAuditProcessCreationInfo; /* 1E4 */
- MMSUPPORT Vm; /* 1E8 */
- LIST_ENTRY MmProcessLinks; /* 230 */
- ULONG ModifiedPageCount; /* 238 */
- ULONG JobStatus; /* 23C */
- union {
- struct {
- ULONG CreateReported:1;
- ULONG NoDebugInherit:1;
- ULONG ProcessExiting:1;
- ULONG ProcessDelete:1;
- ULONG Wow64SplitPages:1;
- ULONG VmDeleted:1;
- ULONG OutswapEnabled:1;
- ULONG Outswapped:1;
- ULONG ForkFailed:1;
- ULONG Wow64VaSpace4Gb:1;
- ULONG AddressSpaceInitialized:2;
- ULONG SetTimerResolution:1;
- ULONG BreakOnTermination:1;
- ULONG SessionCreationUnderway:1;
- ULONG WriteWatch:1;
- ULONG ProcessInSession:1;
- ULONG OverrideAddressSpace:1;
- ULONG HasAddressSpace:1;
- ULONG LaunchPrefetched:1;
- ULONG InjectInpageErrors:1;
- ULONG VmTopDown:1;
- ULONG ImageNotifyDone:1;
- ULONG PdeUpdateNeeded:1;
- ULONG VdmAllowed:1;
- ULONG SmapAllowed:1;
- ULONG CreateFailed:1;
- ULONG DefaultIoPriority:3;
- ULONG Spare1:1;
- ULONG Spare2:1;
- };
- ULONG Flags; /* 240 */
- };
-
- NTSTATUS ExitStatus; /* 244 */
- USHORT NextPageColor; /* 248 */
- union {
- struct {
- UCHAR SubSystemMinorVersion; /* 24A */
- UCHAR SubSystemMajorVersion; /* 24B */
- };
- USHORT SubSystemVersion; /* 24A */
- };
- UCHAR PriorityClass; /* 24C */
- MM_AVL_TABLE VadRoot; /* 250 */
- ULONG Cookie; /* 270 */
-
-/***************************************************************
- * REACTOS SPECIFIC START
- ***************************************************************/
- /* FIXME WILL BE DEPRECATED WITH PUSHLOCK SUPPORT IN 0.3.0 */
- KEVENT LockEvent; /* 274 */
- ULONG LockCount; /* 284 */
- struct _KTHREAD *LockOwner; /* 288 */
-
- /* FIXME MOVE TO AVL TREES */
- MADDRESS_SPACE AddressSpace; /* 28C */
-} EPROCESS;
-#include <poppack.h>
-
#define PROCESS_STATE_TERMINATED (1)
#define PROCESS_STATE_ACTIVE (2)
STDCALL
PspRunCreateProcessNotifyRoutines(PEPROCESS, BOOLEAN);
-#include <pshpack1.h>
-typedef struct _PS_JOB_TOKEN_FILTER
-{
- UINT CapturedSidCount;
- PSID_AND_ATTRIBUTES CapturedSids;
- UINT CapturedSidsLength;
- UINT CapturedGroupCount;
- PSID_AND_ATTRIBUTES CapturedGroups;
- UINT CapturedGroupsLength;
- UINT CapturedPrivilegeCount;
- PLUID_AND_ATTRIBUTES CapturedPrivileges;
- UINT CapturedPrivilegesLength;
-} PS_JOB_TOKEN_FILTER, *PPS_JOB_TOKEN_FILTER;
-#include <poppack.h>
-
-#include <pshpack1.h>
-typedef struct _EJOB
-{
- KEVENT Event;
- LIST_ENTRY JobLinks;
- LIST_ENTRY ProcessListHead;
- ERESOURCE JobLock;
- LARGE_INTEGER TotalUserTime;
- LARGE_INTEGER TotalKernelTime;
- LARGE_INTEGER ThisPeriodTotalUserTime;
- LARGE_INTEGER ThisPeriodTotalKernelTime;
- UINT TotalPageFaultCount;
- UINT TotalProcesses;
- UINT ActiveProcesses;
- UINT TotalTerminatedProcesses;
- LARGE_INTEGER PerProcessUserTimeLimit;
- LARGE_INTEGER PerJobUserTimeLimit;
- UINT LimitFlags;
- UINT MinimumWorkingSetSize;
- UINT MaximumWorkingSetSize;
- UINT ActiveProcessLimit;
- UINT Affinity;
- BYTE PriorityClass;
- UINT UIRestrictionsClass;
- UINT SecurityLimitFlags;
- PVOID Token;
- PPS_JOB_TOKEN_FILTER Filter;
- UINT EndOfJobTimeAction;
- PVOID CompletionPort;
- PVOID CompletionKey;
- UINT SessionId;
- UINT SchedulingClass;
- ULONGLONG ReadOperationCount;
- ULONGLONG WriteOperationCount;
- ULONGLONG OtherOperationCount;
- ULONGLONG ReadTransferCount;
- ULONGLONG WriteTransferCount;
- ULONGLONG OtherTransferCount;
- IO_COUNTERS IoInfo;
- UINT ProcessMemoryLimit;
- UINT JobMemoryLimit;
- UINT PeakProcessMemoryUsed;
- UINT PeakJobMemoryUsed;
- UINT CurrentJobMemoryUsed;
- FAST_MUTEX MemoryLimitsLock;
-} EJOB, *PEJOB;
-#include <poppack.h>
-
VOID INIT_FUNCTION PsInitJobManagment(VOID);
/* CLIENT ID */
#define MAX_PROCESS_NOTIFY_ROUTINE_COUNT 8
#define MAX_LOAD_IMAGE_NOTIFY_ROUTINE_COUNT 8
-#endif /* ASSEMBLER */
-
#endif /* __INCLUDE_INTERNAL_PS_H */
+++ /dev/null
-#ifndef __NTOSKRNL_INCLUDE_INTERNAL_SAFE_H
-#define __NTOSKRNL_INCLUDE_INTERNAL_SAFE_H
-
-NTSTATUS MmSafeCopyFromUser(PVOID Dest, const VOID *Src, ULONG NumberOfBytes);
-NTSTATUS MmSafeCopyToUser(PVOID Dest, const VOID *Src, ULONG NumberOfBytes);
-
-NTSTATUS STDCALL
-MmCopyFromCaller(PVOID Dest, const VOID *Src, ULONG NumberOfBytes);
-NTSTATUS STDCALL
-MmCopyToCaller(PVOID Dest, const VOID *Src, ULONG NumberOfBytes);
-
-NTSTATUS
-RtlCaptureUnicodeString(OUT PUNICODE_STRING Dest,
- IN KPROCESSOR_MODE CurrentMode,
- IN POOL_TYPE PoolType,
- IN BOOLEAN CaptureIfKernel,
- IN PUNICODE_STRING UnsafeSrc);
-
-VOID
-RtlReleaseCapturedUnicodeString(IN PUNICODE_STRING CapturedString,
- IN KPROCESSOR_MODE CurrentMode,
- IN BOOLEAN CaptureIfKernel);
-
-#endif /* __NTOSKRNL_INCLUDE_INTERNAL_SAFE_Hb */
-/*
- * ReactOS kernel
- * Copyright (C) 2002 ReactOS Team
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-
#ifndef __NTOSKRNL_INCLUDE_INTERNAL_SE_H
#define __NTOSKRNL_INCLUDE_INTERNAL_SE_H
-/*
- * NTOSKRNL Tag names.
- * License GPL
- *
- * FIXME: Replace with standard GPL Header.
- * FIXME: Add notes as needed
- */
-
#ifndef _NTOSKRNL_TAG_H
#define _NTOSKRNL_TAG_H
#define TAG_BCB TAG('B', 'C', 'B', ' ')
#define TAG_IBCB TAG('i', 'B', 'C', 'B')
+/* formely located in include/callback.h */
+#define CALLBACK_TAG TAG('C','L','B','K')
+
/* formerly located in ex/resource.c */
#define TAG_OWNER_TABLE TAG('R', 'O', 'W', 'N')
#define TAG_EXCLUSIVE_LOCK TAG('E', 'R', 'E', 'L')
/* formerly located in io/fs.c */
#define TAG_FILE_SYSTEM TAG('F', 'S', 'Y', 'S')
#define TAG_FS_CHANGE_NOTIFY TAG('F', 'S', 'C', 'N')
+#define IFS_POOL_TAG TAG('F', 'S', 'r', 't')
/* formerly located in io/iocomp.c */
#define IOC_TAG TAG('I', 'O', 'C', 'T')
/* formerly located in kdbg/kdb_symbols.c */
#define TAG_KDBS TAG('K', 'D', 'B', 'S')
+#define TAG_KDBG TAG('K', 'D', 'B', 'G')
/* formerly located in ldr/loader.c */
#define TAG_DRIVER_MEM TAG('D', 'R', 'V', 'M') /* drvm */
#define TAG_SECTION_PAGE_TABLE TAG('M', 'S', 'P', 'T')
/* formerly located in ob/symlink.c */
+#define TAG_OBJECT_TYPE TAG('O', 'b', 'j', 'T')
#define TAG_SYMLINK_TTARGET TAG('S', 'Y', 'T', 'T')
#define TAG_SYMLINK_TARGET TAG('S', 'Y', 'M', 'T')
/* formerly located in se/sd.c */
#define TAG_SD TAG('S', 'e', 'S', 'd')
+/* LPC Tags */
+#define TAG_LPC_MESSAGE TAG('L', 'p', 'c', 'M')
+#define TAG_LPC_ZONE TAG('L', 'p', 'c', 'Z')
+
#endif /* _NTOSKRNL_TAG_H */
+++ /dev/null
-/*
- * ReactOS kernel
- * Copyright (C) 2000 David Welch <welch@cwcom.net>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-/*
- * FILE: ntoskrnl/include/internal/trap.h
- * PURPOSE: Trap definitions
- * PROGRAMMER: David Welch (welch@cwcom.net)
- * UPDATE HISTORY:
- * Created 10/12/00
- */
-
-#ifndef __NTOSKRNL_INCLUDE_INTERNAL_TRAP_H
-#define __NTOSKRNL_INCLUDE_INTERNAL_TRAP_H
-
-#define TF_SAVED_EXCEPTION_STACK (0x8C)
-#define TF_REGS (0x90)
-#define TF_ORIG_EBP (0x94)
-
-#ifndef __ASM__
-
-typedef struct _KV86M_TRAP_FRAME
-{
- KTRAP_FRAME Tf;
-
- ULONG SavedExceptionStack;
-
- /*
- * These are put on the top of the stack by the routine that entered
- * v86 mode so the exception handlers can find the control information
- */
- struct _KV86M_REGISTERS* regs;
- ULONG orig_ebp;
-} KV86M_TRAP_FRAME, *PKV86M_TRAP_FRAME;
-
-ULONG
-KeV86Exception(ULONG ExceptionNr, PKTRAP_FRAME Tf, ULONG address);
-
-#endif /* not __ASM__ */
-
-#endif /* __NTOSKRNL_INCLUDE_INTERNAL_TRAP_H */
/*
- * ReactOS kernel
- * Copyright (C) 2000 David Welch <welch@cwcom.net>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
-/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS Kernel
* FILE: ntoskrnl/include/internal/v86m.h
- * PURPOSE: V86 mode support
- * PROGRAMMER: David Welch (welch@cwcom.net)
- * UPDATE HISTORY:
- * Created 10/12/00
+ * PURPOSE: V86 Headers
+ * PROGRAMMER: Alex Ionescu (alex@relsoft.net)
*/
+/* INCLUDES ******************************************************************/
#ifndef __NTOSKRNL_INCLUDE_INTERNAL_V86M_H
#define __NTOSKRNL_INCLUDE_INTERNAL_V86M_H
-#ifndef __ASM__
-
/* Emulate cli/sti instructions */
#define KV86M_EMULATE_CLI_STI (0x1)
/* Allow the v86 mode code to access i/o ports */
typedef struct _KV86M_REGISTERS
{
- /*
- * General purpose registers
- */
-
- ULONG Ebp;
- ULONG Edi;
- ULONG Esi;
- ULONG Edx;
- ULONG Ecx;
- ULONG Ebx;
- ULONG Eax;
- ULONG Ds;
- ULONG Es;
- ULONG Fs;
- ULONG Gs;
+ /*
+ * General purpose registers
+ */
+ ULONG Ebp;
+ ULONG Edi;
+ ULONG Esi;
+ ULONG Edx;
+ ULONG Ecx;
+ ULONG Ebx;
+ ULONG Eax;
+ ULONG Ds;
+ ULONG Es;
+ ULONG Fs;
+ ULONG Gs;
- /*
- * Control registers
- */
- ULONG Eip;
- ULONG Cs;
- ULONG Eflags;
- ULONG Esp;
- ULONG Ss;
+ /*
+ * Control registers
+ */
+ ULONG Eip;
+ ULONG Cs;
+ ULONG Eflags;
+ ULONG Esp;
+ ULONG Ss;
- /*
- * Control structures
- */
- ULONG RecoveryAddress;
- UCHAR RecoveryInstruction[4];
- ULONG Vif;
- ULONG Flags;
- PNTSTATUS PStatus;
+ /*
+ * Control structures
+ */
+ ULONG RecoveryAddress;
+ UCHAR RecoveryInstruction[4];
+ ULONG Vif;
+ ULONG Flags;
+ PNTSTATUS PStatus;
} KV86M_REGISTERS, *PKV86M_REGISTERS;
-NTSTATUS STDCALL
-Ke386CallBios(UCHAR Int, PKV86M_REGISTERS Regs);
+typedef struct _KV86M_TRAP_FRAME
+{
+ KTRAP_FRAME Tf;
-#else /* ASSEMBLER */
+ ULONG SavedExceptionStack;
-/*
- * Definitions for the offsets of members in the KV86M_REGISTERS
- */
-#define KV86M_REGISTERS_EBP (0x0)
-#define KV86M_REGISTERS_EDI (0x4)
-#define KV86M_REGISTERS_ESI (0x8)
-#define KV86M_REGISTERS_EDX (0xC)
-#define KV86M_REGISTERS_ECX (0x10)
-#define KV86M_REGISTERS_EBX (0x14)
-#define KV86M_REGISTERS_EAX (0x18)
-#define KV86M_REGISTERS_DS (0x1C)
-#define KV86M_REGISTERS_ES (0x20)
-#define KV86M_REGISTERS_FS (0x24)
-#define KV86M_REGISTERS_GS (0x28)
-#define KV86M_REGISTERS_EIP (0x2C)
-#define KV86M_REGISTERS_CS (0x30)
-#define KV86M_REGISTERS_EFLAGS (0x34)
-#define KV86M_REGISTERS_ESP (0x38)
-#define KV86M_REGISTERS_SS (0x3C)
+ /*
+ * These are put on the top of the stack by the routine that entered
+ * v86 mode so the exception handlers can find the control information
+ */
+ struct _KV86M_REGISTERS* regs;
+ ULONG orig_ebp;
+} KV86M_TRAP_FRAME, *PKV86M_TRAP_FRAME;
+
+NTSTATUS
+STDCALL
+Ke386CallBios(
+ UCHAR Int,
+ PKV86M_REGISTERS Regs
+);
-#endif /* ASSEMBLER */
+ULONG
+KeV86Exception(
+ ULONG ExceptionNr,
+ PKTRAP_FRAME Tf,
+ ULONG address
+);
#endif /* __NTOSKRNL_INCLUDE_INTERNAL_V86M_H */
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS Kernel
+ * FILE: ntoskrnl/include/internal/xhal.h
+ * PURPOSE: HAL Callbacks
+ * PROGRAMMER: Alex Ionescu (alex@relsoft.net)
+ */
+
+/* INCLUDES ******************************************************************/
#ifndef __INCLUDE_INTERNAL_XHAL_H
#define __INCLUDE_INTERNAL_XHAL_H
#include <ddk/ntdddisk.h>
NTSTATUS
-xHalQueryDriveLayout(IN PUNICODE_STRING DeviceName,
- OUT PDRIVE_LAYOUT_INFORMATION *LayoutInfo);
+FASTCALL
+xHalQueryDriveLayout(
+ IN PUNICODE_STRING DeviceName,
+ OUT PDRIVE_LAYOUT_INFORMATION *LayoutInfo
+);
#undef HalExamineMBR
-VOID FASTCALL
-HalExamineMBR(IN PDEVICE_OBJECT DeviceObject,
- IN ULONG SectorSize,
- IN ULONG MBRTypeIdentifier,
- OUT PVOID *Buffer);
-
-VOID FASTCALL
-xHalIoAssignDriveLetters(IN PLOADER_PARAMETER_BLOCK LoaderBlock,
- IN PSTRING NtDeviceName,
- OUT PUCHAR NtSystemPath,
- OUT PSTRING NtSystemPathString);
-
-NTSTATUS FASTCALL
-xHalIoReadPartitionTable(PDEVICE_OBJECT DeviceObject,
- ULONG SectorSize,
- BOOLEAN ReturnRecognizedPartitions,
- PDRIVE_LAYOUT_INFORMATION *PartitionBuffer);
-
-NTSTATUS FASTCALL
-xHalIoSetPartitionInformation(IN PDEVICE_OBJECT DeviceObject,
- IN ULONG SectorSize,
- IN ULONG PartitionNumber,
- IN ULONG PartitionType);
-
-NTSTATUS FASTCALL
-xHalIoWritePartitionTable(IN PDEVICE_OBJECT DeviceObject,
- IN ULONG SectorSize,
- IN ULONG SectorsPerTrack,
- IN ULONG NumberOfHeads,
- IN PDRIVE_LAYOUT_INFORMATION PartitionBuffer);
+VOID
+FASTCALL
+HalExamineMBR(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN ULONG SectorSize,
+ IN ULONG MBRTypeIdentifier,
+ OUT PVOID *Buffer
+);
+
+VOID
+FASTCALL
+xHalIoAssignDriveLetters(
+ IN PLOADER_PARAMETER_BLOCK LoaderBlock,
+ IN PSTRING NtDeviceName,
+ OUT PUCHAR NtSystemPath,
+ OUT PSTRING NtSystemPathString
+);
+
+NTSTATUS
+FASTCALL
+xHalIoReadPartitionTable(
+ PDEVICE_OBJECT DeviceObject,
+ ULONG SectorSize,
+ BOOLEAN ReturnRecognizedPartitions,
+ PDRIVE_LAYOUT_INFORMATION *PartitionBuffer
+);
+
+NTSTATUS
+FASTCALL
+xHalIoSetPartitionInformation(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN ULONG SectorSize,
+ IN ULONG PartitionNumber,
+ IN ULONG PartitionType
+);
+
+NTSTATUS
+FASTCALL
+xHalIoWritePartitionTable(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN ULONG SectorSize,
+ IN ULONG SectorsPerTrack,
+ IN ULONG NumberOfHeads,
+ IN PDRIVE_LAYOUT_INFORMATION PartitionBuffer
+);
#endif
/* FUNCTIONS *****************************************************************/
NTSTATUS
+FASTCALL
xHalQueryDriveLayout(IN PUNICODE_STRING DeviceName,
OUT PDRIVE_LAYOUT_INFORMATION *LayoutInfo)
{
#ifndef NTOSKRNL_KDB_H
#define NTOSKRNL_KDB_H
-/* INCLUDES ******************************************************************/
-
-#define NTOS_MODE_KERNEL
-#include <ntos.h>
-
-#include <internal/ke.h>
-
/* DEFINES *******************************************************************/
-#define TAG_KDBG (('K' << 24) | ('D' << 16) | ('B' << 8) | 'G')
-
#ifndef RTL_NUMBER_OF
# define RTL_NUMBER_OF(x) (sizeof(x) / sizeof((x)[0]))
#endif
-
/* TYPES *********************************************************************/
/* from kdb.c */
KdbEnterFromUmode
} KDB_ENTER_CONDITION;
-
-/* from kdb_symbols.c */
-typedef struct _KDB_MODULE_INFO
+/* These values MUST be nonzero. They're used as bit masks. */
+typedef enum _KDB_OUTPUT_SETTINGS
{
- WCHAR Name[256];
- ULONG_PTR Base;
- ULONG Size;
- PROSSYM_INFO RosSymInfo;
-} KDB_MODULE_INFO, *PKDB_MODULE_INFO;
-
+ KD_DEBUG_KDSERIAL = 1,
+ KD_DEBUG_KDNOECHO = 2
+} KDB_OUTPUT_SETTINGS;
/* FUNCTIONS *****************************************************************/
KdbpSymFindModuleByIndex(IN INT Index,
OUT PKDB_MODULE_INFO pInfo);
-BOOLEAN
-KdbSymPrintAddress(IN PVOID Address);
-
-NTSTATUS
-KdbSymGetAddressInformation(IN PROSSYM_INFO RosSymInfo,
- IN ULONG_PTR RelativeAddress,
- OUT PULONG LineNumber OPTIONAL,
- OUT PCH FileName OPTIONAL,
- OUT PCH FunctionName OPTIONAL);
-
/* from kdb.c */
extern PEPROCESS KdbCurrentProcess;
extern ULONG KdbNumSingleSteps;
extern BOOLEAN KdbSingleStepOver;
extern PKDB_KTRAP_FRAME KdbCurrentTrapFrame;
-
-VOID
-KdbInit();
-
-VOID
-KdbModuleLoaded(
- IN PUNICODE_STRING Name);
+extern ULONG KdbDebugState;
LONG
KdbpGetNextBreakPointNr(
KdbpAttachToProcess(
PVOID ProcessId);
+VOID
+STDCALL
+KdbpGetCommandLineSettings(PCHAR p1);
+
+KD_CONTINUE_TYPE
+KdbEnterDebuggerException(PEXCEPTION_RECORD ExceptionRecord,
+ KPROCESSOR_MODE PreviousMode,
+ PCONTEXT Context,
+ PKTRAP_FRAME TrapFrame,
+ BOOLEAN FirstChance);
/* other functions */
#define KdbpSafeReadMemory(dst, src, size) MmSafeCopyFromUser(dst, src, size)
DbgEnableFile(PCH Filename);
VOID
DbgDisableFile(PCH Filename);
-
+VOID
+KbdDisableMouse();
+VOID
+KbdEnableMouse();
#endif /* NTOSKRNL_KDB_H */
/* INCLUDES ******************************************************************/
#include <roscfg.h>
-#include <internal/i386/segment.h>
#include <internal/i386/ke.h>
-#include <internal/i386/fpu.h>
-#include <internal/ps.h>
-#include <ntos/tss.h>
-#include <internal/ntoskrnl.h>
+#include <internal/asm.h>
+#include <ndk/i386/segment.h>
.intel_syntax noprefix
#define Running 2
-
-#include <internal/i386/segment.h>
+#include <ndk/i386/segment.h>
#include <../hal/halx86/include/halirq.h>
.global _irq_handler_0
#include <roscfg.h>
-#include <internal/ntoskrnl.h>
-#include <internal/i386/ke.h>
-#include <internal/i386/segment.h>
-#include <internal/ps.h>
-#include <internal/i386/mm.h>
-#include <internal/i386/fpu.h>
+#include <internal/asm.h>
+#include <ndk/i386/segment.h>
#define AP_MAGIC (0x12481020)
-/*
- * ReactOS kernel
- * Copyright (C) 2000 David Welch <welch@cwcom.net>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
/*
* FILE: ntoskrnl/ke/i386/tskswitch.S
* PURPOSE: Microkernel thread support
*/
/* INCLUDES ******************************************************************/
-
-#include <internal/i386/segment.h>
-#include <internal/ps.h>
-#include <ntos/tss.h>
-
+#include <internal/asm.h>
/* FUNCTIONS ****************************************************************/
/*
*/
#include <roscfg.h>
-#include <internal/i386/segment.h>
-#include <internal/ps.h>
#include <internal/i386/ke.h>
-#include <ntos/tss.h>
+#include <internal/asm.h>
+#include <ndk/i386/segment.h>
#include <napi/shared_data.h>
#define UserMode (1)
-/*
- * ReactOS kernel
- * Copyright (C) 2000 David Welch <welch@cwcom.net>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
/* $Id$
*
* PROJECT: ReactOS kernel
*/
/* INCLUDES ******************************************************************/
-
+
#include <roscfg.h>
-#include <internal/i386/ke.h>
-#include <internal/i386/segment.h>
-#include <internal/ps.h>
+#include <internal/asm.h>
+#include <ndk/i386/segment.h>
#define KernelMode 0
#define UserMode 1
/* INCLUDES ******************************************************************/
#include <roscfg.h>
-#include <internal/i386/segment.h>
-#include <internal/i386/ke.h>
-#include <internal/i386/fpu.h>
-#include <internal/ps.h>
-#include <ntos/tss.h>
-#include <internal/ntoskrnl.h>
.intel_syntax noprefix
/* GLOBALS ****************************************************************/
-/*
- * ReactOS kernel
- * Copyright (C) 2000 David Welch <welch@cwcom.net>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- */
/*
* FILE: ntoskrnl/ke/i386/vm86_sup.S
* PURPOSE: V86 mode support
* Created 09/10/00
*/
-#include <internal/v86m.h>
-#include <ntos/tss.h>
-#include <internal/trap.h>
-#include <internal/ps.h>
-
+#include <internal/asm.h>
+
.globl _Ki386RetToV86Mode
.globl _KiV86Complete
* @implemented
*/
NTSTATUS STDCALL
-ObOpenObjectByPointer(IN POBJECT Object,
+ObOpenObjectByPointer(IN PVOID Object,
IN ULONG HandleAttributes,
IN PACCESS_STATE PassedAccessState,
IN ACCESS_MASK DesiredAccess,