From: Alex Ionescu Date: Sat, 25 Jun 2005 17:01:17 +0000 (+0000) Subject: Large partial cleanup of ntoskrnl internal headers, mostly to delete obsoleted or... X-Git-Tag: backups/hardons1stbranch@16819~404 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=deb7a80fdda525a993383b6f3df12fb383a7b9ba Large partial cleanup of ntoskrnl internal headers, mostly to delete obsoleted or non-useful headers, to reformat some horrible tab, spaces, etc mixups, and to move to NDK some public structures and remove all the include headers so that the standard one can be added. Note the word partial, meaning more will come in order to fully fix the mess. svn path=/trunk/; revision=16268 --- diff --git a/reactos/include/ndk/dbgktypes.h b/reactos/include/ndk/dbgktypes.h new file mode 100644 index 00000000000..ed113973397 --- /dev/null +++ b/reactos/include/ndk/dbgktypes.h @@ -0,0 +1,139 @@ +/* + * 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 diff --git a/reactos/include/ndk/extypes.h b/reactos/include/ndk/extypes.h index 6bfee7ad4bd..478f28a5382 100644 --- a/reactos/include/ndk/extypes.h +++ b/reactos/include/ndk/extypes.h @@ -21,6 +21,12 @@ extern NTOSAPI POBJECT_TYPE ExTimerType; /* 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 *********************************************************************/ @@ -57,6 +63,14 @@ typedef struct _RUNDOWN_DESCRIPTOR 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 diff --git a/reactos/include/ndk/i386/floatsave.h b/reactos/include/ndk/i386/floatsave.h index 878c22eaa92..f0f7f53f72e 100644 --- a/reactos/include/ndk/i386/floatsave.h +++ b/reactos/include/ndk/i386/floatsave.h @@ -1,5 +1,5 @@ -#ifndef __NAPI_I386_FLOATSAVE_H__ -#define __NAPI_I386_FLOATSAVE_H__ +#ifndef _FLOATSAVE_H_ +#define _FLOATSAVE_H_ #define FLOAT_SAVE_CONTROL (0xFFFF037F) #define FLOAT_SAVE_STATUS (0xFFFF0000) diff --git a/reactos/include/ndk/i386/segment.h b/reactos/include/ndk/i386/segment.h index 0c460a851d8..884c52837cc 100644 --- a/reactos/include/ndk/i386/segment.h +++ b/reactos/include/ndk/i386/segment.h @@ -5,8 +5,10 @@ #define KERNEL_DS (0x10) #define USER_CS (0x18 + 0x3) #define USER_DS (0x20 + 0x3) -#define RESERVED_FOR_TSS (0x28) +#define TSS_SELECTOR (0x28) #define PCR_SELECTOR (0x30) #define TEB_SELECTOR (0x38 + 0x3) +#define LDT_SELECTOR (0x48) +#define TRAP_TSS_SELECTOR (0x50) #endif /* _ASM_SEGMENT_H */ diff --git a/reactos/include/ndk/iotypes.h b/reactos/include/ndk/iotypes.h index 043aad821c2..263a3a2fba6 100644 --- a/reactos/include/ndk/iotypes.h +++ b/reactos/include/ndk/iotypes.h @@ -11,6 +11,7 @@ #define _IOTYPES_H /* DEPENDENCIES **************************************************************/ +#include "potypes.h" /* EXPORTED DATA *************************************************************/ extern POBJECT_TYPE NTOSAPI IoAdapterObjectType; @@ -20,13 +21,77 @@ extern POBJECT_TYPE NTOSAPI IoDriverObjectType; 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 *********************************************************************/ @@ -52,13 +117,124 @@ typedef struct _NAMED_PIPE_CREATE_PARAMETERS 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 diff --git a/reactos/include/ndk/ketypes.h b/reactos/include/ndk/ketypes.h index 680bb4cb73a..1603e71bd32 100644 --- a/reactos/include/ndk/ketypes.h +++ b/reactos/include/ndk/ketypes.h @@ -11,6 +11,8 @@ /* DEPENDENCIES **************************************************************/ #include "haltypes.h" +#include "potypes.h" +#include "mmtypes.h" #include /* CONSTANTS *****************************************************************/ @@ -21,12 +23,6 @@ #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; @@ -46,13 +42,12 @@ extern SSDT_ENTRY NTOSAPI KeServiceDescriptorTableShadow[SSDT_MAX_ENTRIES]; 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, @@ -68,6 +63,48 @@ typedef struct _KDPC_DATA 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; @@ -141,6 +178,230 @@ typedef struct _LDT_ENTRY { } 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 @@ -239,6 +500,35 @@ typedef struct _KEXCEPTION_FRAME { } 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; @@ -271,36 +561,192 @@ typedef struct _KEVENT_PAIR 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 + +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 + +/* + * 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, @@ -310,4 +756,5 @@ typedef enum _KTHREAD_STATE { Transition, DeferredReady, } KTHREAD_STATE, *PKTHREAD_STATE; + #endif diff --git a/reactos/include/ndk/ldrfuncs.h b/reactos/include/ndk/ldrfuncs.h index d74d249d9e2..3b36cb702bc 100644 --- a/reactos/include/ndk/ldrfuncs.h +++ b/reactos/include/ndk/ldrfuncs.h @@ -33,5 +33,14 @@ LdrFindResource_U( 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 diff --git a/reactos/include/ndk/mmtypes.h b/reactos/include/ndk/mmtypes.h index 9ed0c780ef5..14475bbfcf7 100644 --- a/reactos/include/ndk/mmtypes.h +++ b/reactos/include/ndk/mmtypes.h @@ -32,17 +32,40 @@ typedef enum _PP_NPAGED_LOOKASIDE_NUMBER 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 diff --git a/reactos/include/ndk/ntndk.h b/reactos/include/ndk/ntndk.h index e09ec0faf28..34f3a414831 100644 --- a/reactos/include/ndk/ntndk.h +++ b/reactos/include/ndk/ntndk.h @@ -14,6 +14,7 @@ #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 */ diff --git a/reactos/include/ndk/obtypes.h b/reactos/include/ndk/obtypes.h index 3c8b8c5c7dc..7ada5ae51d9 100644 --- a/reactos/include/ndk/obtypes.h +++ b/reactos/include/ndk/obtypes.h @@ -22,8 +22,97 @@ #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 @@ -40,8 +129,129 @@ 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 diff --git a/reactos/include/ndk/potypes.h b/reactos/include/ndk/potypes.h index 54e7ca9a438..5b4448ebc4d 100644 --- a/reactos/include/ndk/potypes.h +++ b/reactos/include/ndk/potypes.h @@ -68,4 +68,18 @@ typedef struct _PROCESSOR_POWER_STATE 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 diff --git a/reactos/include/ndk/pstypes.h b/reactos/include/ndk/pstypes.h index b47d513516e..bac736472c4 100644 --- a/reactos/include/ndk/pstypes.h +++ b/reactos/include/ndk/pstypes.h @@ -256,5 +256,312 @@ typedef struct _TEB PVOID FlsSlots; /* FB4h */ PVOID WineDebugInfo; /* Needed for WINE DLL's */ } TEB, *PTEB; - + +/* KERNEL MODE ONLY **********************************************************/ +#ifndef NTOS_MODE_USER + +#include "mmtypes.h" +#include /* FIXME: Forced to do this for now */ +#include +/* + * 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 + +#include +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 + +#endif + #endif diff --git a/reactos/ntoskrnl/ex/callback.c b/reactos/ntoskrnl/ex/callback.c index a0c91d403c1..f18f33944eb 100644 --- a/reactos/ntoskrnl/ex/callback.c +++ b/reactos/ntoskrnl/ex/callback.c @@ -1,26 +1,61 @@ -/* $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 -#include +#define NDEBUG #include +/* 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 *****************************************************************/ /* @@ -51,7 +86,7 @@ ExpInitializeCallbacks(VOID) 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; @@ -153,7 +188,7 @@ ExCreateCallback( IN BOOLEAN AllowMultipleCallbacks ) { - PINT_CALLBACK_OBJECT Callback; + PCALLBACK_OBJECT Callback; NTSTATUS Status; HANDLE Handle; @@ -183,7 +218,7 @@ ExCreateCallback( ObjectAttributes, KernelMode, NULL, - sizeof(_INT_CALLBACK_OBJECT), + sizeof(CALLBACK_OBJECT), 0, 0, (PVOID *)&Callback ); @@ -251,7 +286,7 @@ ExNotifyCallback( 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; @@ -330,7 +365,7 @@ ExRegisterCallback( IN PVOID CallbackContext ) { - PINT_CALLBACK_OBJECT CallbackObject = (PINT_CALLBACK_OBJECT)OpaqueCallbackObject; + PCALLBACK_OBJECT CallbackObject = (PCALLBACK_OBJECT)OpaqueCallbackObject; PCALLBACK_REGISTRATION CallbackRegistration = NULL; KIRQL OldIrql; @@ -398,7 +433,7 @@ ExUnregisterCallback( ) { PCALLBACK_REGISTRATION CallbackRegistration; - PINT_CALLBACK_OBJECT CallbackObject; + PCALLBACK_OBJECT CallbackObject; KIRQL OldIrql; PAGED_CODE(); diff --git a/reactos/ntoskrnl/include/internal/arch/ps.h b/reactos/ntoskrnl/include/internal/arch/ps.h index f4b8bf63eac..c10edcb32aa 100644 --- a/reactos/ntoskrnl/include/internal/arch/ps.h +++ b/reactos/ntoskrnl/include/internal/arch/ps.h @@ -1,26 +1,7 @@ -/* - * 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 #define KiArchContextSwitch KiSwapContext #define KiArchInitThreadWithContext Ke386InitThreadWithContext #else diff --git a/reactos/ntoskrnl/include/internal/asm.h b/reactos/ntoskrnl/include/internal/asm.h new file mode 100644 index 00000000000..7a27a07cc11 --- /dev/null +++ b/reactos/ntoskrnl/include/internal/asm.h @@ -0,0 +1,118 @@ +/* + * 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) diff --git a/reactos/ntoskrnl/include/internal/callbacks.h b/reactos/ntoskrnl/include/internal/callbacks.h deleted file mode 100644 index 365fc4f7c02..00000000000 --- a/reactos/ntoskrnl/include/internal/callbacks.h +++ /dev/null @@ -1,91 +0,0 @@ -/* - * 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 */ diff --git a/reactos/ntoskrnl/include/internal/cc.h b/reactos/ntoskrnl/include/internal/cc.h index 072500cc707..df0f0f2b8ad 100644 --- a/reactos/ntoskrnl/include/internal/cc.h +++ b/reactos/ntoskrnl/include/internal/cc.h @@ -3,87 +3,97 @@ 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); @@ -94,25 +104,40 @@ WriteCacheSegment(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); @@ -124,18 +149,23 @@ VOID 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); diff --git a/reactos/ntoskrnl/include/internal/config.h b/reactos/ntoskrnl/include/internal/config.h deleted file mode 100644 index c92a5097745..00000000000 --- a/reactos/ntoskrnl/include/internal/config.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef __DEPRECATED_INTERNAL_CONFIG_H -#define __DEPRECATED__INTERNAL_CONFIG_H - -/* Moved to /include/roscfg.h */ -#include - -#endif /* __DEPRECATED_INTERNAL_CONFIG_H */ diff --git a/reactos/ntoskrnl/include/internal/dbgk.h b/reactos/ntoskrnl/include/internal/dbgk.h index 9c419fc3abc..d50b48f38ea 100644 --- a/reactos/ntoskrnl/include/internal/dbgk.h +++ b/reactos/ntoskrnl/include/internal/dbgk.h @@ -1,139 +1,6 @@ -/* - * ReactOS kernel - * Copyright (C) 2000 David Welch - * - * 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); diff --git a/reactos/ntoskrnl/include/internal/ex.h b/reactos/ntoskrnl/include/internal/ex.h index bf51ba717ff..ff840d83ed5 100644 --- a/reactos/ntoskrnl/include/internal/ex.h +++ b/reactos/ntoskrnl/include/internal/ex.h @@ -1,87 +1,75 @@ -/* - * 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 *************************************************/ @@ -91,22 +79,50 @@ ExpWin32kInit(VOID); 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)) @@ -123,48 +139,90 @@ ExpInitializeExecutive(VOID); 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 **************************************************/ @@ -174,15 +232,17 @@ ExSystemExceptionFilter(VOID); 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); diff --git a/reactos/ntoskrnl/include/internal/ifs.h b/reactos/ntoskrnl/include/internal/fs.h similarity index 96% rename from reactos/ntoskrnl/include/internal/ifs.h rename to reactos/ntoskrnl/include/internal/fs.h index 0393af3f54a..428e9b8671a 100644 --- a/reactos/ntoskrnl/include/internal/ifs.h +++ b/reactos/ntoskrnl/include/internal/fs.h @@ -1,9 +1,6 @@ #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; diff --git a/reactos/ntoskrnl/include/internal/i386/fpu.h b/reactos/ntoskrnl/include/internal/i386/fpu.h index 30267a828de..b23db2b0a90 100644 --- a/reactos/ntoskrnl/include/internal/i386/fpu.h +++ b/reactos/ntoskrnl/include/internal/i386/fpu.h @@ -1,74 +1,8 @@ -/* - * 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 -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 @@ -83,7 +17,5 @@ KiFloatingSaveAreaToFxSaveArea(PFX_SAVE_AREA FxSaveArea, CONST FLOATING_SAVE_ARE BOOL KiContextToFxSaveArea(PFX_SAVE_AREA FxSaveArea, PCONTEXT Context); -#endif /* !__ASM__ */ - #endif /* __NTOSKRNL_INCLUDE_INTERNAL_I386_FPU_H */ diff --git a/reactos/ntoskrnl/include/internal/i386/hal.h b/reactos/ntoskrnl/include/internal/i386/hal.h deleted file mode 100644 index 7121dbc016e..00000000000 --- a/reactos/ntoskrnl/include/internal/i386/hal.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * - */ - -#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 */ diff --git a/reactos/ntoskrnl/include/internal/i386/ke.h b/reactos/ntoskrnl/include/internal/i386/ke.h index 1d71f299f77..508a55b5717 100644 --- a/reactos/ntoskrnl/include/internal/i386/ke.h +++ b/reactos/ntoskrnl/include/internal/i386/ke.h @@ -1,21 +1,3 @@ -/* - * 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 @@ -23,52 +5,6 @@ #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 */ @@ -131,38 +67,6 @@ typedef struct _KIRQ_TRAPFRAME 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; @@ -310,8 +214,7 @@ static inline void Ki386Cpuid(ULONG Op, PULONG Eax, PULONG Ebx, PULONG Ecx, PULO #error Unknown compiler for inline assembler #endif -#endif /* __ASM__ */ - +#endif #endif /* __NTOSKRNL_INCLUDE_INTERNAL_I386_KE_H */ /* EOF */ diff --git a/reactos/ntoskrnl/include/internal/i386/mm.h b/reactos/ntoskrnl/include/internal/i386/mm.h index 4e1681aa6e2..bc718dcd310 100644 --- a/reactos/ntoskrnl/include/internal/i386/mm.h +++ b/reactos/ntoskrnl/include/internal/i386/mm.h @@ -22,9 +22,6 @@ #define PA_SYSTEM (0) #endif - -#ifndef __ASM__ - #define KERNEL_BASE (ULONG)MmSystemRangeStart #if defined(__GNUC__) @@ -60,6 +57,4 @@ PULONG MmGetPageDirectory(VOID); #define PAGE_MASK(x) ((x)&(~0xfff)) #define PAE_PAGE_MASK(x) ((x)&(~0xfffLL)) -#endif /* ASSEMBLER */ - #endif /* __NTOSKRNL_INCLUDE_INTERNAL_I386_MM_H */ diff --git a/reactos/ntoskrnl/include/internal/i386/ps.h b/reactos/ntoskrnl/include/internal/i386/ps.h deleted file mode 100644 index 35880c02f79..00000000000 --- a/reactos/ntoskrnl/include/internal/i386/ps.h +++ /dev/null @@ -1,352 +0,0 @@ -/* - * 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 /* 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 */ diff --git a/reactos/ntoskrnl/include/internal/i386/segment.h b/reactos/ntoskrnl/include/internal/i386/segment.h deleted file mode 100644 index 3e217d5d05a..00000000000 --- a/reactos/ntoskrnl/include/internal/i386/segment.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * 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 */ - - diff --git a/reactos/ntoskrnl/include/internal/io.h b/reactos/ntoskrnl/include/internal/io.h index 052178abb44..0bfe0370843 100644 --- a/reactos/ntoskrnl/include/internal/io.h +++ b/reactos/ntoskrnl/include/internal/io.h @@ -1,213 +1,40 @@ -/* - * ReactOS kernel - * Copyright (C) 2000 David Welch - * - * 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 @@ -215,7 +42,8 @@ typedef struct _DEVICE_NODE * PDEVICE_NODE DeviceNode, * ULONG Flag); */ -#define IopDeviceNodeClearFlag(DeviceNode, Flag)((DeviceNode)->Flags &= ~(Flag)) +#define IopDeviceNodeClearFlag(DeviceNode, Flag) \ + ((DeviceNode)->Flags &= ~(Flag)) /* * BOOLEAN @@ -223,7 +51,8 @@ typedef struct _DEVICE_NODE * PDEVICE_NODE DeviceNode, * ULONG Flag); */ -#define IopDeviceNodeHasFlag(DeviceNode, Flag)(((DeviceNode)->Flags & (Flag)) > 0) +#define IopDeviceNodeHasFlag(DeviceNode, Flag) \ + (((DeviceNode)->Flags & (Flag)) > 0) /* * VOID @@ -231,7 +60,8 @@ typedef struct _DEVICE_NODE * PDEVICE_NODE DeviceNode, * ULONG UserFlag); */ -#define IopDeviceNodeSetUserFlag(DeviceNode, UserFlag)((DeviceNode)->UserFlags |= (UserFlag)) +#define IopDeviceNodeSetUserFlag(DeviceNode, UserFlag) \ + ((DeviceNode)->UserFlags |= (UserFlag)) /* * VOID @@ -239,7 +69,8 @@ typedef struct _DEVICE_NODE * PDEVICE_NODE DeviceNode, * ULONG UserFlag); */ -#define IopDeviceNodeClearUserFlag(DeviceNode, UserFlag)((DeviceNode)->UserFlags &= ~(UserFlag)) +#define IopDeviceNodeClearUserFlag(DeviceNode, UserFlag) \ + ((DeviceNode)->UserFlags &= ~(UserFlag)) /* * BOOLEAN @@ -247,7 +78,8 @@ typedef struct _DEVICE_NODE * PDEVICE_NODE DeviceNode, * ULONG UserFlag); */ -#define IopDeviceNodeHasUserFlag(DeviceNode, UserFlag)(((DeviceNode)->UserFlags & (UserFlag)) > 0) +#define IopDeviceNodeHasUserFlag(DeviceNode, UserFlag) \ + (((DeviceNode)->UserFlags & (UserFlag)) > 0) /* * VOID @@ -255,7 +87,8 @@ typedef struct _DEVICE_NODE * PDEVICE_NODE DeviceNode, * ULONG Problem); */ -#define IopDeviceNodeSetProblem(DeviceNode, Problem)((DeviceNode)->Problem |= (Problem)) +#define IopDeviceNodeSetProblem(DeviceNode, Problem) \ + ((DeviceNode)->Problem |= (Problem)) /* * VOID @@ -263,7 +96,8 @@ typedef struct _DEVICE_NODE * PDEVICE_NODE DeviceNode, * ULONG Problem); */ -#define IopDeviceNodeClearProblem(DeviceNode, Problem)((DeviceNode)->Problem &= ~(Problem)) +#define IopDeviceNodeClearProblem(DeviceNode, Problem) \ + ((DeviceNode)->Problem &= ~(Problem)) /* * BOOLEAN @@ -271,7 +105,8 @@ typedef struct _DEVICE_NODE * PDEVICE_NODE DeviceNode, * ULONG Problem); */ -#define IopDeviceNodeHasProblem(DeviceNode, Problem)(((DeviceNode)->Problem & (Problem)) > 0) +#define IopDeviceNodeHasProblem(DeviceNode, Problem) \ + (((DeviceNode)->Problem & (Problem)) > 0) /* @@ -285,20 +120,21 @@ typedef struct _DEVICE_NODE 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; /* @@ -315,9 +151,6 @@ typedef struct _DEVICETREE_TRAVERSE_CONTEXT (_DeviceTreeTraverseContext)->Action = (_Action); \ (_DeviceTreeTraverseContext)->Context = (_Context); } - -extern PDEVICE_NODE IopRootDeviceNode; - VOID PnpInit(VOID); @@ -332,70 +165,71 @@ IopInitPnpNotificationImplementation(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); @@ -405,17 +239,18 @@ IoCreateSystemRootLink(PCHAR ParameterLine); 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); @@ -435,14 +270,18 @@ 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 */ @@ -450,15 +289,15 @@ IoCancelThreadIo(PETHREAD Thread); 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 */ @@ -466,79 +305,96 @@ RawFsDriverEntry(PDRIVER_OBJECT DriverObject, 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 @@ -546,45 +402,55 @@ IopDeleteFile(PVOID ObjectBody); 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 @@ -593,9 +459,7 @@ IopInitTimerImplementation(VOID); VOID STDCALL -IopRemoveTimerFromTimerList( - IN PIO_TIMER Timer -); +IopRemoveTimerFromTimerList(IN PIO_TIMER Timer); /* iocomp.c */ VOID diff --git a/reactos/ntoskrnl/include/internal/kbd.h b/reactos/ntoskrnl/include/internal/kbd.h index e2988da4b30..e723161b745 100644 --- a/reactos/ntoskrnl/include/internal/kbd.h +++ b/reactos/ntoskrnl/include/internal/kbd.h @@ -1,4 +1,3 @@ -/* ReactOS System Header -- kbd.h */ #define __KBD_H #if __GNUC__ >=3 diff --git a/reactos/ntoskrnl/include/internal/kd.h b/reactos/ntoskrnl/include/internal/kd.h index 561abc60e24..07ec194768f 100644 --- a/reactos/ntoskrnl/include/internal/kd.h +++ b/reactos/ntoskrnl/include/internal/kd.h @@ -1,17 +1,8 @@ -/* $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 **********************************************************/ @@ -24,8 +15,10 @@ VOID 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); @@ -34,8 +27,10 @@ VOID 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); @@ -44,11 +39,13 @@ VOID 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 { @@ -103,8 +100,10 @@ typedef enum _KD_CONTINUE_TYPE 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 @@ -116,37 +115,60 @@ 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 @@ -156,6 +178,10 @@ BOOLEAN STDCALL KdpDetectConflicts(PCM_RESOURCE_LIST DriverList); +VOID +STDCALL +KdpBochsDebugPrint(IN PCH Message); + /* KD GLOBALS ***************************************************************/ /* serial debug connection */ @@ -173,8 +199,10 @@ KdpDetectConflicts(PCM_RESOURCE_LIST DriverList); /* KD Private Debug Modes */ typedef struct _KDP_DEBUG_MODE { - union { - struct { + union + { + struct + { /* Native Modes */ UCHAR Screen :1; UCHAR Serial :1; @@ -194,17 +222,17 @@ typedef struct _KDP_DEBUG_MODE /* 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 */ diff --git a/reactos/ntoskrnl/include/internal/kdb.h b/reactos/ntoskrnl/include/internal/kdb.h deleted file mode 100644 index 4248c3bd70d..00000000000 --- a/reactos/ntoskrnl/include/internal/kdb.h +++ /dev/null @@ -1,269 +0,0 @@ -#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 */ - diff --git a/reactos/ntoskrnl/include/internal/kdbochs.h b/reactos/ntoskrnl/include/internal/kdbochs.h deleted file mode 100644 index d0f9a237f49..00000000000 --- a/reactos/ntoskrnl/include/internal/kdbochs.h +++ /dev/null @@ -1,17 +0,0 @@ -/* $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 */ diff --git a/reactos/ntoskrnl/include/internal/kdgdb.h b/reactos/ntoskrnl/include/internal/kdgdb.h deleted file mode 100644 index b8cf7ef38a8..00000000000 --- a/reactos/ntoskrnl/include/internal/kdgdb.h +++ /dev/null @@ -1,16 +0,0 @@ -/* $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 */ diff --git a/reactos/ntoskrnl/include/internal/ke.h b/reactos/ntoskrnl/include/internal/ke.h index 9be2541a67a..b2ad1d8245c 100644 --- a/reactos/ntoskrnl/include/internal/ke.h +++ b/reactos/ntoskrnl/include/internal/ke.h @@ -1,22 +1,3 @@ -/* - * ReactOS kernel - * Copyright (C) 2000 David Welch - * - * 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 @@ -26,190 +7,11 @@ /* 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 - -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 - -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; @@ -242,10 +44,6 @@ struct _KEXCEPTION_FRAME; } \ } -#ifndef __USE_W32API -#define KeGetCurrentProcessorNumber() (KeGetCurrentKPCR()->Number) -#endif - /* threadsch.c ********************************************************************/ /* Thread Scheduler Functions */ @@ -321,27 +119,15 @@ KeIpiGenericCall(VOID (STDCALL *WorkerRoutine)(PVOID), /* 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, @@ -351,7 +137,8 @@ typedef enum _CACHED_MODULE_TYPE { } CACHED_MODULE_TYPE, *PCACHED_MODULE_TYPE; extern PLOADER_MODULE CachedModules[MaximumCachedModuleType]; -VOID STDCALL +VOID +STDCALL DbgBreakPointNoBugCheck(VOID); VOID @@ -591,8 +378,6 @@ KeRosGetStackFrames( VOID KiSetSystemTime(PLARGE_INTEGER NewSystemTime); -#endif /* not __ASM__ */ - #define MAXIMUM_PROCESSORS 32 #endif /* __NTOSKRNL_INCLUDE_INTERNAL_KE_H */ diff --git a/reactos/ntoskrnl/include/internal/ldr.h b/reactos/ntoskrnl/include/internal/ldr.h index b779a4fe275..a71584d5597 100644 --- a/reactos/ntoskrnl/include/internal/ldr.h +++ b/reactos/ntoskrnl/include/internal/ldr.h @@ -1,10 +1,3 @@ -/* - * 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 @@ -13,26 +6,26 @@ #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 @@ -44,34 +37,34 @@ LdrpGetSystemDllEntryPoints(VOID); 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); @@ -80,30 +73,34 @@ NTSTATUS 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); diff --git a/reactos/ntoskrnl/include/internal/mm.h b/reactos/ntoskrnl/include/internal/mm.h index 5c8a8f052db..7452dbafdeb 100644 --- a/reactos/ntoskrnl/include/internal/mm.h +++ b/reactos/ntoskrnl/include/internal/mm.h @@ -1,42 +1,3 @@ -/* $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 @@ -51,11 +12,10 @@ extern ULONG MmTotalPagedPoolQuota; 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) @@ -81,14 +41,12 @@ typedef ULONG PFN_TYPE, *PPFN_TYPE; #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) @@ -189,61 +147,6 @@ typedef struct _SECTION_OBJECT }; } 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; @@ -283,30 +186,6 @@ typedef struct _MADDRESS_SPACE 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; @@ -401,6 +280,53 @@ typedef VOID (*PMM_FREE_PAGE_FUNC)(PVOID Context, PMEMORY_AREA MemoryArea, 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 ******************************************************************/ @@ -422,7 +348,7 @@ NTSTATUS MmDestroyAddressSpace(PMADDRESS_SPACE AddressSpace); /* marea.c *******************************************************************/ -NTSTATUS INIT_FUNCTION +NTSTATUS MmInitMemoryAreas(VOID); NTSTATUS STDCALL @@ -839,6 +765,14 @@ NTSTATUS MmReleaseMmInfo(struct _EPROCESS* Process); 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, diff --git a/reactos/ntoskrnl/include/internal/module.h b/reactos/ntoskrnl/include/internal/module.h index e36b713e125..17f9346f550 100644 --- a/reactos/ntoskrnl/include/internal/module.h +++ b/reactos/ntoskrnl/include/internal/module.h @@ -3,33 +3,33 @@ 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; @@ -44,7 +44,7 @@ typedef MODULE_OBJECT MODULE, *PMODULE; typedef struct _INSTANCE { - HANDLE ModuleHandle; + HANDLE ModuleHandle; } INSTANCE, *PINSTANCE; BOOLEAN process_boot_module(unsigned int start); diff --git a/reactos/ntoskrnl/include/internal/nls.h b/reactos/ntoskrnl/include/internal/nls.h index 9ce7f9ad208..b3e4b69ba7f 100644 --- a/reactos/ntoskrnl/include/internal/nls.h +++ b/reactos/ntoskrnl/include/internal/nls.h @@ -1,22 +1,3 @@ -/* - * ReactOS kernel - * Copyright (C) 2003 Eric Kohl - * - * 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 @@ -29,12 +10,33 @@ extern ULONG NlsUnicodeTableOffset; 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 */ diff --git a/reactos/ntoskrnl/include/internal/ntoskrnl.h b/reactos/ntoskrnl/include/internal/ntoskrnl.h index 1033e9a2145..ce988463206 100644 --- a/reactos/ntoskrnl/include/internal/ntoskrnl.h +++ b/reactos/ntoskrnl/include/internal/ntoskrnl.h @@ -1,12 +1,6 @@ -/* - * 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 */ @@ -17,12 +11,11 @@ #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" @@ -35,20 +28,17 @@ #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 /* * Defines a descriptor as it appears in the processor tables @@ -64,14 +54,6 @@ typedef struct _DESCRIPTOR 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()) */ @@ -96,8 +78,23 @@ RtlpCreateUnicodeString( 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__ */ /* * diff --git a/reactos/ntoskrnl/include/internal/ob.h b/reactos/ntoskrnl/include/internal/ob.h index 43bb708c2b7..1fadcd3752f 100644 --- a/reactos/ntoskrnl/include/internal/ob.h +++ b/reactos/ntoskrnl/include/internal/ob.h @@ -9,213 +9,8 @@ #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; diff --git a/reactos/ntoskrnl/include/internal/po.h b/reactos/ntoskrnl/include/internal/po.h index d6d5d0d6e77..6ecd3711d39 100644 --- a/reactos/ntoskrnl/include/internal/po.h +++ b/reactos/ntoskrnl/include/internal/po.h @@ -1,24 +1,15 @@ -/* $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 */ diff --git a/reactos/ntoskrnl/include/internal/pool.h b/reactos/ntoskrnl/include/internal/pool.h deleted file mode 100644 index e688b15a850..00000000000 --- a/reactos/ntoskrnl/include/internal/pool.h +++ /dev/null @@ -1,51 +0,0 @@ -#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 */ diff --git a/reactos/ntoskrnl/include/internal/port.h b/reactos/ntoskrnl/include/internal/port.h index 606f1505b62..66fbb9f8624 100644 --- a/reactos/ntoskrnl/include/internal/port.h +++ b/reactos/ntoskrnl/include/internal/port.h @@ -83,10 +83,6 @@ LpcSendTerminationPort (PEPORT Port, /* 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; diff --git a/reactos/ntoskrnl/include/internal/ps.h b/reactos/ntoskrnl/include/internal/ps.h index 678d772bff5..bcfcf27cd37 100644 --- a/reactos/ntoskrnl/include/internal/ps.h +++ b/reactos/ntoskrnl/include/internal/ps.h @@ -1,46 +1,13 @@ -/* - * ReactOS kernel - * Copyright (C) 2000 David Welch - * - * 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 -#ifndef __ASM__ - extern LCID PsDefaultThreadLocaleId; extern LCID PsDefaultSystemLocaleId; @@ -60,262 +27,6 @@ typedef struct _W32_OBJECT_CALLBACK { 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 -/* - * 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 - -#ifndef __USE_W32API - -typedef struct _ETHREAD *PETHREAD; - -#endif /* __USE_W32API */ - -#include -/* - * 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 - #define PROCESS_STATE_TERMINATED (1) #define PROCESS_STATE_ACTIVE (2) @@ -482,69 +193,6 @@ VOID STDCALL PspRunCreateProcessNotifyRoutines(PEPROCESS, BOOLEAN); -#include -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 - -#include -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 - VOID INIT_FUNCTION PsInitJobManagment(VOID); /* CLIENT ID */ @@ -564,6 +212,4 @@ VOID PsUnlockProcess(PEPROCESS Process); #define MAX_PROCESS_NOTIFY_ROUTINE_COUNT 8 #define MAX_LOAD_IMAGE_NOTIFY_ROUTINE_COUNT 8 -#endif /* ASSEMBLER */ - #endif /* __INCLUDE_INTERNAL_PS_H */ diff --git a/reactos/ntoskrnl/include/internal/safe.h b/reactos/ntoskrnl/include/internal/safe.h deleted file mode 100644 index 692b4282bdb..00000000000 --- a/reactos/ntoskrnl/include/internal/safe.h +++ /dev/null @@ -1,24 +0,0 @@ -#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 */ diff --git a/reactos/ntoskrnl/include/internal/se.h b/reactos/ntoskrnl/include/internal/se.h index 29f1a3e3830..99bfea33947 100644 --- a/reactos/ntoskrnl/include/internal/se.h +++ b/reactos/ntoskrnl/include/internal/se.h @@ -1,22 +1,3 @@ -/* - * 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 diff --git a/reactos/ntoskrnl/include/internal/tag.h b/reactos/ntoskrnl/include/internal/tag.h index 2de8eb28cae..da74b6eab62 100644 --- a/reactos/ntoskrnl/include/internal/tag.h +++ b/reactos/ntoskrnl/include/internal/tag.h @@ -1,11 +1,3 @@ -/* - * NTOSKRNL Tag names. - * License GPL - * - * FIXME: Replace with standard GPL Header. - * FIXME: Add notes as needed - */ - #ifndef _NTOSKRNL_TAG_H #define _NTOSKRNL_TAG_H @@ -14,6 +6,9 @@ #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') @@ -39,6 +34,7 @@ /* 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') @@ -85,6 +81,7 @@ /* 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 */ @@ -118,6 +115,7 @@ #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') @@ -145,4 +143,8 @@ /* 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 */ diff --git a/reactos/ntoskrnl/include/internal/trap.h b/reactos/ntoskrnl/include/internal/trap.h deleted file mode 100644 index 96a772e8c4d..00000000000 --- a/reactos/ntoskrnl/include/internal/trap.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * ReactOS kernel - * Copyright (C) 2000 David Welch - * - * 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 */ diff --git a/reactos/ntoskrnl/include/internal/v86m.h b/reactos/ntoskrnl/include/internal/v86m.h index e9e5acb17ea..e8a7d58aaec 100644 --- a/reactos/ntoskrnl/include/internal/v86m.h +++ b/reactos/ntoskrnl/include/internal/v86m.h @@ -1,34 +1,15 @@ /* - * ReactOS kernel - * Copyright (C) 2000 David Welch - * - * 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 */ @@ -36,66 +17,66 @@ 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 */ diff --git a/reactos/ntoskrnl/include/internal/xhal.h b/reactos/ntoskrnl/include/internal/xhal.h index 0d6c7bc27ac..4d12f2beb9c 100644 --- a/reactos/ntoskrnl/include/internal/xhal.h +++ b/reactos/ntoskrnl/include/internal/xhal.h @@ -1,42 +1,69 @@ +/* + * 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 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 diff --git a/reactos/ntoskrnl/io/disk.c b/reactos/ntoskrnl/io/disk.c index bad9aa62405..2f5dd690801 100644 --- a/reactos/ntoskrnl/io/disk.c +++ b/reactos/ntoskrnl/io/disk.c @@ -92,6 +92,7 @@ HAL_PRIVATE_DISPATCH EXPORTED HalPrivateDispatchTable = /* FUNCTIONS *****************************************************************/ NTSTATUS +FASTCALL xHalQueryDriveLayout(IN PUNICODE_STRING DeviceName, OUT PDRIVE_LAYOUT_INFORMATION *LayoutInfo) { diff --git a/reactos/ntoskrnl/kdbg/kdb.h b/reactos/ntoskrnl/kdbg/kdb.h index 5849a1cbaff..72a8fd5c0f1 100644 --- a/reactos/ntoskrnl/kdbg/kdb.h +++ b/reactos/ntoskrnl/kdbg/kdb.h @@ -1,22 +1,12 @@ #ifndef NTOSKRNL_KDB_H #define NTOSKRNL_KDB_H -/* INCLUDES ******************************************************************/ - -#define NTOS_MODE_KERNEL -#include - -#include - /* 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 */ @@ -75,16 +65,12 @@ typedef enum _KDB_ENTER_CONDITION 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 *****************************************************************/ @@ -167,16 +153,6 @@ BOOLEAN 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; @@ -185,13 +161,7 @@ extern LONG KdbLastBreakPointNr; extern ULONG KdbNumSingleSteps; extern BOOLEAN KdbSingleStepOver; extern PKDB_KTRAP_FRAME KdbCurrentTrapFrame; - -VOID -KdbInit(); - -VOID -KdbModuleLoaded( - IN PUNICODE_STRING Name); +extern ULONG KdbDebugState; LONG KdbpGetNextBreakPointNr( @@ -255,6 +225,16 @@ 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) @@ -278,7 +258,10 @@ VOID DbgEnableFile(PCH Filename); VOID DbgDisableFile(PCH Filename); - +VOID +KbdDisableMouse(); +VOID +KbdEnableMouse(); #endif /* NTOSKRNL_KDB_H */ diff --git a/reactos/ntoskrnl/ke/i386/ctxswitch.S b/reactos/ntoskrnl/ke/i386/ctxswitch.S index b6099561cd5..06a7ac503c3 100644 --- a/reactos/ntoskrnl/ke/i386/ctxswitch.S +++ b/reactos/ntoskrnl/ke/i386/ctxswitch.S @@ -10,12 +10,9 @@ /* INCLUDES ******************************************************************/ #include -#include #include -#include -#include -#include -#include +#include +#include .intel_syntax noprefix #define Running 2 diff --git a/reactos/ntoskrnl/ke/i386/irqhand.s b/reactos/ntoskrnl/ke/i386/irqhand.s index 12406ef8c6b..b5aa5b7480b 100644 --- a/reactos/ntoskrnl/ke/i386/irqhand.s +++ b/reactos/ntoskrnl/ke/i386/irqhand.s @@ -1,5 +1,4 @@ - -#include +#include #include <../hal/halx86/include/halirq.h> .global _irq_handler_0 diff --git a/reactos/ntoskrnl/ke/i386/main.S b/reactos/ntoskrnl/ke/i386/main.S index 121f50448ed..d12a29e26e1 100644 --- a/reactos/ntoskrnl/ke/i386/main.S +++ b/reactos/ntoskrnl/ke/i386/main.S @@ -1,10 +1,6 @@ #include -#include -#include -#include -#include -#include -#include +#include +#include #define AP_MAGIC (0x12481020) diff --git a/reactos/ntoskrnl/ke/i386/stkswitch.S b/reactos/ntoskrnl/ke/i386/stkswitch.S index d37c46abd45..dec9cc04dbf 100644 --- a/reactos/ntoskrnl/ke/i386/stkswitch.S +++ b/reactos/ntoskrnl/ke/i386/stkswitch.S @@ -1,21 +1,3 @@ -/* - * ReactOS kernel - * Copyright (C) 2000 David Welch - * - * 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 @@ -25,11 +7,7 @@ */ /* INCLUDES ******************************************************************/ - -#include -#include -#include - +#include /* FUNCTIONS ****************************************************************/ /* diff --git a/reactos/ntoskrnl/ke/i386/syscall.S b/reactos/ntoskrnl/ke/i386/syscall.S index 9df0c163fe1..77caeb9298c 100644 --- a/reactos/ntoskrnl/ke/i386/syscall.S +++ b/reactos/ntoskrnl/ke/i386/syscall.S @@ -11,10 +11,9 @@ */ #include -#include -#include #include -#include +#include +#include #include #define UserMode (1) diff --git a/reactos/ntoskrnl/ke/i386/trap.s b/reactos/ntoskrnl/ke/i386/trap.s index 498e3277a47..b311c68f251 100644 --- a/reactos/ntoskrnl/ke/i386/trap.s +++ b/reactos/ntoskrnl/ke/i386/trap.s @@ -1,21 +1,3 @@ -/* - * ReactOS kernel - * Copyright (C) 2000 David Welch - * - * 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 @@ -25,11 +7,10 @@ */ /* INCLUDES ******************************************************************/ - + #include -#include -#include -#include +#include +#include #define KernelMode 0 #define UserMode 1 diff --git a/reactos/ntoskrnl/ke/i386/usercall.S b/reactos/ntoskrnl/ke/i386/usercall.S index ad5dd5fbe5d..f1d89101b6d 100644 --- a/reactos/ntoskrnl/ke/i386/usercall.S +++ b/reactos/ntoskrnl/ke/i386/usercall.S @@ -10,12 +10,6 @@ /* INCLUDES ******************************************************************/ #include -#include -#include -#include -#include -#include -#include .intel_syntax noprefix /* GLOBALS ****************************************************************/ diff --git a/reactos/ntoskrnl/ke/i386/v86m_sup.S b/reactos/ntoskrnl/ke/i386/v86m_sup.S index df0967b6d9b..94d0250f13d 100644 --- a/reactos/ntoskrnl/ke/i386/v86m_sup.S +++ b/reactos/ntoskrnl/ke/i386/v86m_sup.S @@ -1,21 +1,3 @@ -/* - * ReactOS kernel - * Copyright (C) 2000 David Welch - * - * 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 @@ -24,11 +6,8 @@ * Created 09/10/00 */ -#include -#include -#include -#include - +#include + .globl _Ki386RetToV86Mode .globl _KiV86Complete diff --git a/reactos/ntoskrnl/ob/object.c b/reactos/ntoskrnl/ob/object.c index 8526fc564b3..ffd207a7cda 100644 --- a/reactos/ntoskrnl/ob/object.c +++ b/reactos/ntoskrnl/ob/object.c @@ -907,7 +907,7 @@ ObReferenceObjectByPointer(IN PVOID Object, * @implemented */ NTSTATUS STDCALL -ObOpenObjectByPointer(IN POBJECT Object, +ObOpenObjectByPointer(IN PVOID Object, IN ULONG HandleAttributes, IN PACCESS_STATE PassedAccessState, IN ACCESS_MASK DesiredAccess,