From 7b3487eb9abc79869ffb603b40d2d4585cfd5e31 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Wed, 16 Jan 2008 23:19:01 +0000 Subject: [PATCH] - Sync NDK changes. svn path=/trunk/; revision=31835 --- reactos/include/ndk/arch/mmtypes.h | 2 +- reactos/include/ndk/asm.h | 3 +- reactos/include/ndk/cmtypes.h | 7 ++ reactos/include/ndk/extypes.h | 21 +++++- reactos/include/ndk/iotypes.h | 34 +++++---- reactos/include/ndk/ketypes.h | 108 +++++++++++++++------------ reactos/include/ndk/mmtypes.h | 93 +++++++++++++++++++++++ reactos/include/ndk/rtlfuncs.h | 15 ++++ reactos/include/ndk/rtltypes.h | 5 ++ reactos/include/ndk/umfuncs.h | 7 -- reactos/include/psdk/winnt.h | 8 ++ reactos/ntoskrnl/ke/i386/ctxswitch.S | 4 +- reactos/ntoskrnl/ke/i386/trap.s | 2 +- 13 files changed, 233 insertions(+), 76 deletions(-) diff --git a/reactos/include/ndk/arch/mmtypes.h b/reactos/include/ndk/arch/mmtypes.h index 5e9c449feed..4deb294039b 100644 --- a/reactos/include/ndk/arch/mmtypes.h +++ b/reactos/include/ndk/arch/mmtypes.h @@ -22,7 +22,7 @@ Author: // // Include the right file for this architecture. // -#ifdef _M_IX86 +#if defined(_M_IX86) || defined(_M_AMD64) #include #elif defined(_M_PPC) #include diff --git a/reactos/include/ndk/asm.h b/reactos/include/ndk/asm.h index e467cc2df84..b05cc3e8d98 100644 --- a/reactos/include/ndk/asm.h +++ b/reactos/include/ndk/asm.h @@ -108,7 +108,7 @@ Author: #define KTHREAD_PENDING_USER_APC 0x28 + 0x16 #define KTHREAD_PENDING_KERNEL_APC 0x28 + 0x15 #define KTHREAD_CONTEXT_SWITCHES 0x48 -#define KTHREAD_STATE 0x4C +#define KTHREAD_STATE_ 0x4C #define KTHREAD_NPX_STATE 0x4D #define KTHREAD_WAIT_IRQL 0x4E #define KTHREAD_NEXT_PROCESSOR 0x40 @@ -615,3 +615,4 @@ Author: + diff --git a/reactos/include/ndk/cmtypes.h b/reactos/include/ndk/cmtypes.h index 199051d3ee1..d5a6ba012ac 100644 --- a/reactos/include/ndk/cmtypes.h +++ b/reactos/include/ndk/cmtypes.h @@ -227,6 +227,12 @@ typedef struct _KEY_FULL_INFORMATION WCHAR Class[1]; } KEY_FULL_INFORMATION, *PKEY_FULL_INFORMATION; +typedef struct _KEY_NAME_INFORMATION +{ + WCHAR Name[1]; +} KEY_NAME_INFORMATION, *PKEY_NAME_INFORMATION; + + typedef struct _KEY_NODE_INFORMATION { LARGE_INTEGER LastWriteTime; @@ -519,3 +525,4 @@ typedef struct _CM_DISK_GEOMETRY_DEVICE_DATA #endif // _CMTYPES_H + diff --git a/reactos/include/ndk/extypes.h b/reactos/include/ndk/extypes.h index 1e7ce74681b..6e5658adac1 100644 --- a/reactos/include/ndk/extypes.h +++ b/reactos/include/ndk/extypes.h @@ -737,9 +737,9 @@ typedef struct _SYSTEM_BASIC_INFORMATION ULONG LowestPhysicalPageNumber; ULONG HighestPhysicalPageNumber; ULONG AllocationGranularity; - ULONG MinimumUserModeAddress; - ULONG MaximumUserModeAddress; - KAFFINITY ActiveProcessorsAffinityMask; + ULONG_PTR MinimumUserModeAddress; + ULONG_PTR MaximumUserModeAddress; + ULONG_PTR ActiveProcessorsAffinityMask; CCHAR NumberOfProcessors; } SYSTEM_BASIC_INFORMATION, *PSYSTEM_BASIC_INFORMATION; @@ -1454,5 +1454,20 @@ typedef struct _SYSTEM_FIRMWARE_TABLE_INFORMATION ULONG TableBufferLength; UCHAR TableBuffer[1]; } SYSTEM_FIRMWARE_TABLE_INFORMATION, *PSYSTEM_FIRMWARE_TABLE_INFORMATION; + +// +// Class 81 +// +typedef struct _SYSTEM_MEMORY_LIST_INFORMATION +{ + SIZE_T ZeroPageCount; + SIZE_T FreePageCount; + SIZE_T ModifiedPageCount; + SIZE_T ModifiedNoWritePageCount; + SIZE_T BadPageCount; + SIZE_T PageCountByPriority[8]; + SIZE_T RepurposedPagesByPriority[8]; +} SYSTEM_MEMORY_LIST_INFORMATION, *PSYSTEM_MEMORY_LIST_INFORMATION; + #endif #endif diff --git a/reactos/include/ndk/iotypes.h b/reactos/include/ndk/iotypes.h index ad10a0e564a..42f7644ef95 100644 --- a/reactos/include/ndk/iotypes.h +++ b/reactos/include/ndk/iotypes.h @@ -15,7 +15,6 @@ Author: Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006 --*/ - #ifndef _IOTYPES_H #define _IOTYPES_H @@ -353,6 +352,19 @@ typedef enum _PNP_DEVNODE_STATE #ifdef NTOS_MODE_USER +// +// I/O Status Block +// +typedef struct _IO_STATUS_BLOCK +{ + union + { + NTSTATUS Status; + PVOID Pointer; + }; + ULONG_PTR Information; +} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK; + // // File Information structures for NtQueryInformationFile // @@ -560,6 +572,13 @@ typedef struct _FILE_DIRECTORY_INFORMATION WCHAR FileName[1]; } FILE_DIRECTORY_INFORMATION, *PFILE_DIRECTORY_INFORMATION; +typedef struct _FILE_IO_COMPLETION_INFORMATION +{ + PVOID KeyContext; + PVOID ApcContext; + IO_STATUS_BLOCK IoStatusBlock; +} FILE_IO_COMPLETION_INFORMATION, *PFILE_IO_COMPLETION_INFORMATION; + // // File System Information structures for NtQueryInformationFile // @@ -629,19 +648,6 @@ typedef struct _FILE_PIPE_PEEK_BUFFER CHAR Data[1]; } FILE_PIPE_PEEK_BUFFER, *PFILE_PIPE_PEEK_BUFFER; -// -// I/O Status Block -// -typedef struct _IO_STATUS_BLOCK -{ - union - { - NTSTATUS Status; - PVOID Pointer; - }; - ULONG_PTR Information; -} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK; - // // I/O Error Log Structures // diff --git a/reactos/include/ndk/ketypes.h b/reactos/include/ndk/ketypes.h index 028ba265f4d..4ea9161566c 100644 --- a/reactos/include/ndk/ketypes.h +++ b/reactos/include/ndk/ketypes.h @@ -289,10 +289,43 @@ typedef enum _KTHREAD_STATE Transition, DeferredReady, #if (NTDDI_VERSION >= NTDDI_WS03) - GateWait, + GateWait #endif } KTHREAD_STATE, *PKTHREAD_STATE; +// +// Kernel Object Types +// +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; + // // Adjust reasons // @@ -667,39 +700,6 @@ typedef struct _KEXECUTE_OPTIONS UCHAR Spare:2; } KEXECUTE_OPTIONS, *PKEXECUTE_OPTIONS; -// -// Kernel Object Types -// -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; - // // Kernel Thread (KTHREAD) // @@ -709,6 +709,7 @@ typedef struct _KTHREAD #if (NTDDI_VERSION >= NTDDI_LONGHORN) ULONGLONG CycleTime; ULONG HighCycleTime; + ULONGLONG QuantumTarget; #else LIST_ENTRY MutantListHead; #endif @@ -741,8 +742,26 @@ typedef struct _KTHREAD PKWAIT_BLOCK WaitBlockList; PKGATE GateObject; }; +#if (NTDDI_VERSION >= NTDDI_LONGHORN) + union + { + struct + { + ULONG KernelStackResident:1; + ULONG ReadyTransition:1; + ULONG ProcessReadyQueue:1; + ULONG WaitNext:1; + ULONG SystemAffinityActive:1; + ULONG Alertable:1; + ULONG GdiFlushActive:1; + ULONG Reserved:25; + }; + LONG MiscFlags; + }; +#else BOOLEAN Alertable; BOOLEAN WaitNext; +#endif UCHAR WaitReason; SCHAR Priority; BOOLEAN EnableStackSwap; @@ -796,7 +815,11 @@ typedef struct _KTHREAD struct { UCHAR WaitBlockFill0[23]; +#if (NTDDI_VERSION >= NTDDI_LONGHORN) + UCHAR IdealProcessor; +#else BOOLEAN SystemAffinityActive; +#endif }; struct { @@ -822,31 +845,22 @@ typedef struct _KTHREAD PVOID CallbackStack; PVOID ServiceTable; UCHAR ApcStateIndex; +#if (NTDDI_VERSION < NTDDI_LONGHORN) UCHAR IdealProcessor; +#endif BOOLEAN Preempted; #if (NTDDI_VERSION >= NTDDI_LONGHORN) BOOLEAN CalloutActive; #else BOOLEAN ProcessReadyQueue; -#endif BOOLEAN KernelStackResident; +#endif SCHAR BasePriority; SCHAR PriorityDecrement; CHAR Saturation; #if (NTDDI_VERSION >= NTDDI_LONGHORN) ULONG SystemCallNumber; - union - { - struct - { - ULONG Reserved0:1; - ULONG ReadyTransition:1; - ULONG ProcessReadyQueue:1; - ULONG Reserved2:1; - ULONG Reserved3:28; - }; - LONG MiscFlags; - }; + ULONG Spare2; #endif KAFFINITY UserAffinity; struct _KPROCESS *Process; diff --git a/reactos/include/ndk/mmtypes.h b/reactos/include/ndk/mmtypes.h index 3f5503108a1..9e4eaabfcf4 100644 --- a/reactos/include/ndk/mmtypes.h +++ b/reactos/include/ndk/mmtypes.h @@ -47,6 +47,22 @@ Author: #define TAG(A, B, C, D) \ (ULONG)(((A)<<0) + ((B)<<8) + ((C)<<16) + ((D)<<24)) +// +// PFN Identity Uses +// +#define MMPFNUSE_PROCESSPRIVATE 0 +#define MMPFNUSE_FILE 1 +#define MMPFNUSE_PAGEFILEMAPPED 2 +#define MMPFNUSE_PAGETABLE 3 +#define MMPFNUSE_PAGEDPOOL 4 +#define MMPFNUSE_NONPAGEDPOOL 5 +#define MMPFNUSE_SYSTEMPTE 6 +#define MMPFNUSE_SESSIONPRIVATE 7 +#define MMPFNUSE_METAFILE 8 +#define MMPFNUSE_AWEPAGE 9 +#define MMPFNUSE_DRIVERLOCKPAGE 10 +#define MMPFNUSE_KERNELSTACK 11 + #ifndef NTOS_MODE_USER // @@ -105,6 +121,21 @@ typedef enum _POOL_TYPE } POOL_TYPE; #endif +// +// Memory Manager Page Lists +// +typedef enum _MMLISTS +{ + ZeroedPageList = 0, + FreePageList = 1, + StandbyPageList = 2, + ModifiedPageList = 3, + ModifiedNoWritePageList = 4, + BadPageList = 5, + ActiveAndValid = 6, + TransitionPage = 7 +} MMLISTS; + // // Per Processor Non Paged Lookaside List IDs // @@ -177,6 +208,68 @@ typedef struct _VM_COUNTERS_EX } VM_COUNTERS_EX, *PVM_COUNTERS_EX; #endif +// +// Sub-Information Types for PFN Identity +// +typedef struct _MEMORY_FRAME_INFORMATION +{ + ULONGLONG UseDescription:4; + ULONGLONG ListDescription:3; + ULONGLONG Reserved0:1; + ULONGLONG Pinned:1; + ULONGLONG DontUse:48; + ULONGLONG Priority:3; + ULONGLONG Reserved:4; +} MEMORY_FRAME_INFORMATION, *PMEMORY_FRAME_INFORMATION; + +typedef struct _FILEOFFSET_INFORMATION +{ + ULONGLONG DontUse:9; + ULONGLONG Offset:48; + ULONGLONG Reserved:7; +} FILEOFFSET_INFORMATION, *PFILEOFFSET_INFORMATION; + +typedef struct _PAGEDIR_INFORMATION +{ + ULONGLONG DontUse:9; + ULONGLONG PageDirectoryBase:48; + ULONGLONG Reserved:7; +} PAGEDIR_INFORMATION, *PPAGEDIR_INFORMATION; + +typedef struct _UNIQUE_PROCESS_INFORMATION +{ + ULONGLONG DontUse:9; + ULONGLONG UniqueProcessKey:48; + ULONGLONG Reserved:7; +} UNIQUE_PROCESS_INFORMATION, *PUNIQUE_PROCESS_INFORMATION; + +// +// PFN Identity Data Structure +// +typedef struct _MMPFN_IDENTITY +{ + union + { + MEMORY_FRAME_INFORMATION e1; + FILEOFFSET_INFORMATION e2; + PAGEDIR_INFORMATION e3; + UNIQUE_PROCESS_INFORMATION e4; + } u1; + SIZE_T PageFrameIndex; + union + { + struct + { + ULONG Image:1; + ULONG Mismatch:1; + } e1; + PVOID FileObject; + PVOID UniqueFileObjectKey; + PVOID ProtoPteAddress; + PVOID VirtualAddress; + } u2; +} MMPFN_IDENTITY, *PMMPFN_IDENTITY; + // // List of Working Sets // diff --git a/reactos/include/ndk/rtlfuncs.h b/reactos/include/ndk/rtlfuncs.h index 65bb785ddda..9ddb0d03778 100644 --- a/reactos/include/ndk/rtlfuncs.h +++ b/reactos/include/ndk/rtlfuncs.h @@ -2416,6 +2416,21 @@ RtlSetBits( IN ULONG NumberToSet ); +NTSYSAPI +VOID +NTAPI +RtlSetAllBits( + PRTL_BITMAP BitMapHeader +); + +NTSYSAPI +BOOLEAN +NTAPI +RtlTestBit( + PRTL_BITMAP BitMapHeader, + ULONG BitNumber +); + // // Timer Functions // diff --git a/reactos/include/ndk/rtltypes.h b/reactos/include/ndk/rtltypes.h index 9aa41d95e5e..b0b4cf9326c 100644 --- a/reactos/include/ndk/rtltypes.h +++ b/reactos/include/ndk/rtltypes.h @@ -225,6 +225,11 @@ C_ASSERT(HEAP_CREATE_VALID_MASK == 0x0007F0FF); #define RTL_DUPLICATE_UNICODE_STRING_NULL_TERMINATE 1 #define RTL_DUPLICATE_UNICODE_STRING_ALLOCATE_NULL_STRING 2 +// +// RtlFindCharInUnicodeString Flags +// +#define RTL_FIND_CHAR_IN_UNICODE_STRING_CASE_INSENSITIVE 4 + // // Codepages // diff --git a/reactos/include/ndk/umfuncs.h b/reactos/include/ndk/umfuncs.h index 77a66f9afc1..4cbee159ca7 100644 --- a/reactos/include/ndk/umfuncs.h +++ b/reactos/include/ndk/umfuncs.h @@ -249,13 +249,6 @@ LdrLoadDll( OUT PVOID *BaseAddress OPTIONAL ); -PVOID -NTAPI -RtlPcToFileHeader( - IN PVOID PcValue, - PVOID* BaseOfImage -); - PIMAGE_BASE_RELOCATION NTAPI LdrProcessRelocationBlock( diff --git a/reactos/include/psdk/winnt.h b/reactos/include/psdk/winnt.h index 35b51dd57f7..e1ac6a31e2a 100644 --- a/reactos/include/psdk/winnt.h +++ b/reactos/include/psdk/winnt.h @@ -2900,6 +2900,14 @@ typedef struct _RTL_CRITICAL_SECTION { } RTL_CRITICAL_SECTION,*PRTL_CRITICAL_SECTION; #endif +NTSYSAPI +PVOID +NTAPI +RtlPcToFileHeader( + IN PVOID PcValue, + PVOID* BaseOfImage +); + NTSYSAPI VOID NTAPI diff --git a/reactos/ntoskrnl/ke/i386/ctxswitch.S b/reactos/ntoskrnl/ke/i386/ctxswitch.S index a82ab6b76da..b25344cd226 100644 --- a/reactos/ntoskrnl/ke/i386/ctxswitch.S +++ b/reactos/ntoskrnl/ke/i386/ctxswitch.S @@ -727,7 +727,7 @@ CheckNext: mov [ebx+KPCR_CURRENT_THREAD], esi /* Set the thread as running */ - mov byte ptr [esi+KTHREAD_STATE], Running + mov byte ptr [esi+KTHREAD_STATE_], Running #ifdef CONFIG_SMP /* Disable the idle scheduler and release the PRCB lock */ @@ -752,7 +752,7 @@ SameThread: /* Clear the next thread, and put the thready as ready after lock release */ and dword ptr [ebx+KPCR_PRCB_NEXT_THREAD], 0 and dword ptr [ebx+KPCR_PRCB_PRCB_LOCK], 0 - and byte ptr [edi+KTHREAD_STATE], Ready + and byte ptr [edi+KTHREAD_STATE_], Ready jmp MainLoop NoNextThread: diff --git a/reactos/ntoskrnl/ke/i386/trap.s b/reactos/ntoskrnl/ke/i386/trap.s index 59305b012f6..45f2874a8e2 100644 --- a/reactos/ntoskrnl/ke/i386/trap.s +++ b/reactos/ntoskrnl/ke/i386/trap.s @@ -2387,7 +2387,7 @@ CheckQuantum: /* Set us as the current running thread */ mov [ebx+KPCR_CURRENT_THREAD], esi - mov byte ptr [esi+KTHREAD_STATE], Running + mov byte ptr [esi+KTHREAD_STATE_], Running mov byte ptr [edi+KTHREAD_WAIT_REASON], WrDispatchInt /* Put thread in ECX and get the PRCB in EDX */