From eb594c7610553192f5be5a3d9874829f78715b04 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 4 Feb 2012 21:16:52 +0000 Subject: [PATCH] [NDK] Fix amd64 definitions of SYNCH_LEVEL, DISPATCH_LENGTH, KINTERRUPT, KTHREAD, KPROCESS, EPROCESS - add MM_SHARED_USER_DATA_VA - Add PsGetProcessSessionId prototype - Remove duplicated RtlWow64Get/SetThreadContext prototypes svn path=/trunk/; revision=55418 --- reactos/include/ddk/wdm.h | 8 ++- reactos/include/ndk/amd64/ketypes.h | 6 +- reactos/include/ndk/amd64/mmtypes.h | 5 ++ reactos/include/ndk/ketypes.h | 88 +++++++++++++++++++++++++---- reactos/include/ndk/psfuncs.h | 10 +++- reactos/include/ndk/pstypes.h | 28 +++++---- reactos/include/ndk/rtlfuncs.h | 21 +------ reactos/include/xdk/generate.bat | 8 +-- 8 files changed, 117 insertions(+), 57 deletions(-) diff --git a/reactos/include/ddk/wdm.h b/reactos/include/ddk/wdm.h index f83b06ac71a..a3bfa4b4b0e 100644 --- a/reactos/include/ddk/wdm.h +++ b/reactos/include/ddk/wdm.h @@ -1033,7 +1033,11 @@ typedef struct _KWAIT_BLOCK { struct _KWAIT_BLOCK *NextWaitBlock; USHORT WaitKey; UCHAR WaitType; +#if (NTDDI_VERSION >= NTDDI_LONGHORN) volatile UCHAR BlockState; +#else + UCHAR SpareByte; +#endif #if defined(_WIN64) LONG SpareLong; #endif @@ -1875,7 +1879,7 @@ FORCEINLINE VOID KeLowerIrql(IN KIRQL NewIrql) { - //ASSERT(KeGetCurrentIrql() >= NewIrql); + ASSERT((KIRQL)__readcr8() >= NewIrql); __writecr8(NewIrql); } @@ -1886,7 +1890,7 @@ KfRaiseIrql(IN KIRQL NewIrql) KIRQL OldIrql; OldIrql = (KIRQL)__readcr8(); - //ASSERT(OldIrql <= NewIrql); + ASSERT(OldIrql <= NewIrql); __writecr8(NewIrql); return OldIrql; } diff --git a/reactos/include/ndk/amd64/ketypes.h b/reactos/include/ndk/amd64/ketypes.h index 338442a7026..6b3f90a790d 100644 --- a/reactos/include/ndk/amd64/ketypes.h +++ b/reactos/include/ndk/amd64/ketypes.h @@ -184,11 +184,7 @@ Author: // // Synchronization-level IRQL // -#ifndef CONFIG_SMP -#define SYNCH_LEVEL DISPATCH_LEVEL -#else -#define SYNCH_LEVEL (IPI_LEVEL - 2) -#endif +#define SYNCH_LEVEL 12 #define NMI_STACK_SIZE 0x2000 diff --git a/reactos/include/ndk/amd64/mmtypes.h b/reactos/include/ndk/amd64/mmtypes.h index a9200786e78..cee1ce2a40c 100644 --- a/reactos/include/ndk/amd64/mmtypes.h +++ b/reactos/include/ndk/amd64/mmtypes.h @@ -33,6 +33,11 @@ Author: #define MM_ALLOCATION_GRANULARITY 0x10000 #define MM_ALLOCATION_GRANULARITY_SHIFT 16L +// +// Address of the shared user page +// +#define MM_SHARED_USER_DATA_VA 0x7FFE0000ULL + // // Sanity checks for Paging Macros // diff --git a/reactos/include/ndk/ketypes.h b/reactos/include/ndk/ketypes.h index cae815b6d2d..a9faf09efaf 100644 --- a/reactos/include/ndk/ketypes.h +++ b/reactos/include/ndk/ketypes.h @@ -112,7 +112,9 @@ Author: // // Number of dispatch codes supported by KINTERRUPT // -#if (NTDDI_VERSION >= NTDDI_LONGHORN) +#ifdef _M_AMD64 +#define DISPATCH_LENGTH 4 +#elif (NTDDI_VERSION >= NTDDI_LONGHORN) #define DISPATCH_LENGTH 135 #else #define DISPATCH_LENGTH 106 @@ -647,6 +649,10 @@ typedef struct _KINTERRUPT ULONG DispatchCount; #if (NTDDI_VERSION >= NTDDI_LONGHORN) ULONGLONG Rsvd1; +#endif +#ifdef _M_AMD64 + PKTRAP_FRAME TrapFrame; + PVOID Reserved; #endif ULONG DispatchCode[DISPATCH_LENGTH]; } KINTERRUPT; @@ -690,7 +696,7 @@ typedef struct _KTHREAD LIST_ENTRY MutantListHead; #endif PVOID InitialStack; - ULONG_PTR StackLimit; + ULONG_PTR StackLimit; // FIXME: PVOID PVOID KernelStack; KSPIN_LOCK ThreadLock; union @@ -698,7 +704,11 @@ typedef struct _KTHREAD KAPC_STATE ApcState; struct { +#ifdef _M_AMD64 + UCHAR ApcStateFill[43]; // 23 / 43 +#else UCHAR ApcStateFill[23]; +#endif UCHAR ApcQueueable; volatile UCHAR NextProcessor; volatile UCHAR DeferredProcessor; @@ -707,11 +717,13 @@ typedef struct _KTHREAD }; }; KSPIN_LOCK ApcQueueLock; +#ifndef _M_AMD64 ULONG ContextSwitches; volatile UCHAR State; UCHAR NpxState; KIRQL WaitIrql; KPROCESSOR_MODE WaitMode; +#endif LONG_PTR WaitStatus; union { @@ -749,6 +761,7 @@ typedef struct _KTHREAD SINGLE_LIST_ENTRY SwapListEntry; }; PKQUEUE Queue; +#ifndef _M_AMD64 ULONG WaitTime; union { @@ -759,13 +772,14 @@ typedef struct _KTHREAD }; ULONG CombinedApcDisable; }; +#endif struct _TEB *Teb; union { KTIMER Timer; struct { - UCHAR TimerFill[40]; + UCHAR TimerFill[FIELD_OFFSET(KTIMER, Period) + sizeof(LONG)]; // 40 / 60 union { struct @@ -790,7 +804,7 @@ typedef struct _KTHREAD KWAIT_BLOCK WaitBlock[THREAD_WAIT_OBJECTS + 1]; struct { - UCHAR WaitBlockFill0[23]; + UCHAR WaitBlockFill0[FIELD_OFFSET(KWAIT_BLOCK, SpareByte)]; // 32bit = 23, 64bit = 43 #if (NTDDI_VERSION >= NTDDI_LONGHORN) UCHAR IdealProcessor; #else @@ -799,19 +813,52 @@ typedef struct _KTHREAD }; struct { - UCHAR WaitBlockFill1[47]; + UCHAR WaitBlockFill1[1 * sizeof(KWAIT_BLOCK) + FIELD_OFFSET(KWAIT_BLOCK, SpareByte)]; // 47 / 91 CCHAR PreviousMode; }; struct { - UCHAR WaitBlockFill2[71]; + UCHAR WaitBlockFill2[2 * sizeof(KWAIT_BLOCK) + FIELD_OFFSET(KWAIT_BLOCK, SpareByte)]; // 71 / 139 UCHAR ResourceIndex; }; struct { - UCHAR WaitBlockFill3[95]; + UCHAR WaitBlockFill3[3 * sizeof(KWAIT_BLOCK) + FIELD_OFFSET(KWAIT_BLOCK, SpareByte)]; // 95 / 187 UCHAR LargeStack; }; +#ifdef _M_AMD64 + struct + { + UCHAR WaitBlockFill4[FIELD_OFFSET(KWAIT_BLOCK, SpareLong)]; + ULONG ContextSwitches; + }; + struct + { + UCHAR WaitBlockFill5[1 * sizeof(KWAIT_BLOCK) + FIELD_OFFSET(KWAIT_BLOCK, SpareLong)]; + UCHAR State; + UCHAR NpxState; + UCHAR WaitIrql; + CHAR WaitMode; + }; + struct + { + UCHAR WaitBlockFill6[2 * sizeof(KWAIT_BLOCK) + FIELD_OFFSET(KWAIT_BLOCK, SpareLong)]; + ULONG WaitTime; + }; + struct + { + UCHAR WaitBlockFill7[3 * sizeof(KWAIT_BLOCK) + FIELD_OFFSET(KWAIT_BLOCK, SpareLong)]; + union + { + struct + { + SHORT KernelApcDisable; + SHORT SpecialApcDisable; + }; + ULONG CombinedApcDisable; + }; + }; +#endif }; LIST_ENTRY QueueListEntry; PKTRAP_FRAME TrapFrame; @@ -820,6 +867,9 @@ typedef struct _KTHREAD #endif PVOID CallbackStack; PVOID ServiceTable; +#ifdef _M_AMD64 + ULONG KernelLimit; +#endif UCHAR ApcStateIndex; #if (NTDDI_VERSION < NTDDI_LONGHORN) UCHAR IdealProcessor; @@ -829,6 +879,10 @@ typedef struct _KTHREAD BOOLEAN CalloutActive; #else BOOLEAN ProcessReadyQueue; +#ifdef _M_AMD64 + PVOID Win32kTable; + ULONG Win32kLimit; +#endif BOOLEAN KernelStackResident; #endif SCHAR BasePriority; @@ -847,7 +901,7 @@ typedef struct _KTHREAD KAPC_STATE SavedApcState; struct { - UCHAR SavedApcStateFill[23]; + UCHAR SavedApcStateFill[FIELD_OFFSET(KAPC_STATE, UserApcPending) + 1]; // 23 / 43 CCHAR FreezeCount; CCHAR SuspendCount; UCHAR UserIdealProcessor; @@ -890,7 +944,7 @@ typedef struct _KTHREAD }; struct { - UCHAR SuspendApcFill3[36]; + UCHAR SuspendApcFill3[FIELD_OFFSET(KAPC, SystemArgument1)]; #if (NTDDI_VERSION >= NTDDI_LONGHORN) PKPRCB WaitPrcb; #else @@ -899,12 +953,12 @@ typedef struct _KTHREAD }; struct { - UCHAR SuspendApcFill4[40]; + UCHAR SuspendApcFill4[FIELD_OFFSET(KAPC, SystemArgument2)]; // 40 / 72 PVOID LegoData; }; struct { - UCHAR SuspendApcFill5[47]; + UCHAR SuspendApcFill5[FIELD_OFFSET(KAPC, Inserted) + 1]; // 47 / 83 UCHAR PowerState; ULONG UserTime; }; @@ -914,7 +968,7 @@ typedef struct _KTHREAD KSEMAPHORE SuspendSemaphore; struct { - UCHAR SuspendSemaphorefill[20]; + UCHAR SuspendSemaphorefill[FIELD_OFFSET(KSEMAPHORE, Limit) + 4]; // 20 / 28 ULONG SListFaultCount; }; }; @@ -926,6 +980,14 @@ typedef struct _KTHREAD #if (NTDDI_VERSION >= NTDDI_LONGHORN) PVOID MdlForLockedteb; #endif +#ifdef _M_AMD64 + LONG64 ReadOperationCount; + LONG64 WriteOperationCount; + LONG64 OtherOperationCount; + LONG64 ReadTransferCount; + LONG64 WriteTransferCount; + LONG64 OtherTransferCount; +#endif } KTHREAD; #define ASSERT_THREAD(object) \ @@ -947,7 +1009,9 @@ typedef struct _KPROCESS #if defined(_M_IX86) KGDTENTRY LdtDescriptor; KIDTENTRY Int21Descriptor; +#endif USHORT IopmOffset; +#if defined(_M_IX86) UCHAR Iopl; UCHAR Unused; #endif diff --git a/reactos/include/ndk/psfuncs.h b/reactos/include/ndk/psfuncs.h index b90c3181e9d..ac2c8992b15 100644 --- a/reactos/include/ndk/psfuncs.h +++ b/reactos/include/ndk/psfuncs.h @@ -192,9 +192,15 @@ PsGetProcessExitStatus( PEPROCESS Process ); +HANDLE +NTAPI +PsGetProcessSessionId( + IN PEPROCESS Process +); + NTKERNELAPI -BOOLEAN -NTAPI +BOOLEAN +NTAPI PsGetProcessExitProcessCalled( PEPROCESS Process ); diff --git a/reactos/include/ndk/pstypes.h b/reactos/include/ndk/pstypes.h index 2a9c2842daa..a383921c3a6 100644 --- a/reactos/include/ndk/pstypes.h +++ b/reactos/include/ndk/pstypes.h @@ -1056,11 +1056,11 @@ typedef struct _EPROCESS EX_RUNDOWN_REF RundownProtect; HANDLE UniqueProcessId; LIST_ENTRY ActiveProcessLinks; - ULONG QuotaUsage[3]; /* 0=PagedPool, 1=NonPagedPool, 2=Pagefile */ - ULONG QuotaPeak[3]; /* ditto */ - ULONG CommitCharge; - ULONG PeakVirtualSize; - ULONG VirtualSize; + SIZE_T QuotaUsage[3]; /* 0=PagedPool, 1=NonPagedPool, 2=Pagefile */ + SIZE_T QuotaPeak[3]; /* ditto */ + SIZE_T CommitCharge; + SIZE_T PeakVirtualSize; + SIZE_T VirtualSize; LIST_ENTRY SessionProcessLinks; PVOID DebugPort; #if (NTDDI_VERSION >= NTDDI_LONGHORN) @@ -1075,7 +1075,7 @@ typedef struct _EPROCESS #endif PHANDLE_TABLE ObjectTable; EX_FAST_REF Token; - ULONG WorkingSetPage; + PFN_NUMBER WorkingSetPage; #if (NTDDI_VERSION >= NTDDI_LONGHORN) EX_PUSH_LOCK AddressCreationLock; PETHREAD RotateInProgress; @@ -1084,11 +1084,11 @@ typedef struct _EPROCESS KSPIN_LOCK HyperSpaceLock; #endif PETHREAD ForkInProgress; - ULONG HardwareTrigger; + ULONG_PTR HardwareTrigger; PMM_AVL_TABLE PhysicalVadRoot; PVOID CloneRoot; - ULONG NumberOfPrivatePages; - ULONG NumberOfLockedPages; + PFN_NUMBER NumberOfPrivatePages; + PFN_NUMBER NumberOfLockedPages; PVOID *Win32Process; struct _EJOB *Job; PVOID SectionObject; @@ -1112,7 +1112,7 @@ typedef struct _EPROCESS HARDWARE_PTE PageDirectoryPte; ULONGLONG Filler; }; - ULONG Session; + ULONG Session; // FIXME: PVOID CHAR ImageFileName[16]; LIST_ENTRY JobLinks; PVOID LockedPagesList; @@ -1135,12 +1135,16 @@ typedef struct _EPROCESS LARGE_INTEGER ReadTransferCount; LARGE_INTEGER WriteTransferCount; LARGE_INTEGER OtherTransferCount; - ULONG CommitChargeLimit; - ULONG CommitChargePeak; + SIZE_T CommitChargeLimit; + SIZE_T CommitChargePeak; PVOID AweInfo; SE_AUDIT_PROCESS_CREATION_INFO SeAuditProcessCreationInfo; MMSUPPORT Vm; +#ifdef _M_AMD64 + ULONG Spares[2]; +#else LIST_ENTRY MmProcessLinks; +#endif ULONG ModifiedPageCount; #if (NTDDI_VERSION >= NTDDI_LONGHORN) union diff --git a/reactos/include/ndk/rtlfuncs.h b/reactos/include/ndk/rtlfuncs.h index 38d2026824e..a0b8a723a26 100644 --- a/reactos/include/ndk/rtlfuncs.h +++ b/reactos/include/ndk/rtlfuncs.h @@ -2090,25 +2090,6 @@ RtlPrefixString( BOOLEAN CaseInsensitive ); -#ifdef _M_X64 -NTSYSAPI -NTSTATUS -NTAPI -RtlWow64GetThreadContext( - IN HANDLE ThreadHandle, - IN OUT PWOW64_CONTEXT ThreadContext -); - - -NTSYSAPI -NTSTATUS -NTAPI -RtlWow64SetThreadContext( - IN HANDLE ThreadHandle, - IN PWOW64_CONTEXT ThreadContext -); -#endif - NTSYSAPI BOOLEAN NTAPI @@ -3907,7 +3888,7 @@ NTAPI RtlGUIDFromString( IN PUNICODE_STRING GuidString, OUT GUID *Guid); - + NTSYSAPI NTSTATUS NTAPI diff --git a/reactos/include/xdk/generate.bat b/reactos/include/xdk/generate.bat index 782f92f0acf..af0c9454ce5 100644 --- a/reactos/include/xdk/generate.bat +++ b/reactos/include/xdk/generate.bat @@ -1,6 +1,6 @@ -..\..\output-i386\tools\hpp\hpp.exe wdm.template.h wdm.h -..\..\output-i386\tools\hpp\hpp.exe ntddk.template.h ntddk.h -..\..\output-i386\tools\hpp\hpp.exe ntifs.template.h ntifs.h -..\..\output-i386\tools\hpp\hpp.exe devioctl.template.h devioctl.h +hpp.exe wdm.template.h wdm.h +hpp.exe ntddk.template.h ntddk.h +hpp.exe ntifs.template.h ntifs.h +hpp.exe devioctl.template.h devioctl.h