diff --git a/reactos/include/ddk/ntifs.h b/reactos/include/ddk/ntifs.h index 259b93c4476..dce94963a0f 100644 --- a/reactos/include/ddk/ntifs.h +++ b/reactos/include/ddk/ntifs.h @@ -1156,7 +1156,7 @@ RtlUnicodeToMultiByteN( _Out_writes_bytes_to_(MaxBytesInMultiByteString, *BytesInMultiByteString) PCHAR MultiByteString, _In_ ULONG MaxBytesInMultiByteString, _Out_opt_ PULONG BytesInMultiByteString, - _In_reads_bytes_(BytesInUnicodeString) PWCH UnicodeString, + _In_reads_bytes_(BytesInUnicodeString) PCWCH UnicodeString, _In_ ULONG BytesInUnicodeString); _IRQL_requires_max_(PASSIVE_LEVEL) diff --git a/reactos/include/ndk/cmtypes.h b/reactos/include/ndk/cmtypes.h index cff31f86f6b..e4693486f0c 100644 --- a/reactos/include/ndk/cmtypes.h +++ b/reactos/include/ndk/cmtypes.h @@ -115,6 +115,8 @@ typedef enum _CM_SHARE_DISPOSITION // #define CM_RESOURCE_INTERRUPT_LEVEL_SENSITIVE 0x0000 #define CM_RESOURCE_INTERRUPT_LATCHED 0x0001 +#define CM_RESOURCE_INTERRUPT_MESSAGE 0x0002 +#define CM_RESOURCE_INTERRUPT_POLICY_INCLUDED 0x0004 // // NtInitializeRegistry Flags @@ -136,7 +138,10 @@ typedef enum _KEY_INFORMATION_CLASS KeyFullInformation, KeyNameInformation, KeyCachedInformation, - KeyFlagsInformation + KeyFlagsInformation, + KeyVirtualizationInformation, + KeyHandleTagsInformation, + MaxKeyInfoClass } KEY_INFORMATION_CLASS; typedef enum _KEY_VALUE_INFORMATION_CLASS @@ -145,7 +150,8 @@ typedef enum _KEY_VALUE_INFORMATION_CLASS KeyValueFullInformation, KeyValuePartialInformation, KeyValueFullInformationAlign64, - KeyValuePartialInformationAlign64 + KeyValuePartialInformationAlign64, + MaxKeyValueInfoClass } KEY_VALUE_INFORMATION_CLASS; typedef enum _KEY_SET_INFORMATION_CLASS { @@ -216,11 +222,45 @@ typedef struct _KEY_WRITE_TIME_INFORMATION LARGE_INTEGER LastWriteTime; } KEY_WRITE_TIME_INFORMATION, *PKEY_WRITE_TIME_INFORMATION; +typedef struct _KEY_WOW64_FLAGS_INFORMATION +{ + ULONG UserFlags; +} KEY_WOW64_FLAGS_INFORMATION, *PKEY_WOW64_FLAGS_INFORMATION; + typedef struct _KEY_USER_FLAGS_INFORMATION { ULONG UserFlags; } KEY_USER_FLAGS_INFORMATION, *PKEY_USER_FLAGS_INFORMATION; +typedef struct _KEY_HANDLE_TAGS_INFORMATION +{ + ULONG HandleTags; +} KEY_HANDLE_TAGS_INFORMATION, *PKEY_HANDLE_TAGS_INFORMATION; + +typedef struct _KEY_CONTROL_FLAGS_INFORMATION +{ + ULONG ControlFlags; +} KEY_CONTROL_FLAGS_INFORMATION, *PKEY_CONTROL_FLAGS_INFORMATION; + +typedef struct _KEY_VIRTUALIZATION_INFORMATION +{ + ULONG VirtualizationCandidate:1; + ULONG VirtualizationEnabled:1; + ULONG VirtualTarget:1; + ULONG VirtualStore:1; + ULONG VirtualSource:1; + ULONG Reserved:27; +} KEY_VIRTUALIZATION_INFORMATION, *PKEY_VIRTUALIZATION_INFORMATION; + +typedef struct _KEY_SET_VIRTUALIZATION_INFORMATION +{ + ULONG VirtualTarget:1; + ULONG VirtualStore:1; + ULONG VirtualSource:1; + ULONG Reserved:29; +} KEY_SET_VIRTUALIZATION_INFORMATION, *PKEY_SET_VIRTUALIZATION_INFORMATION; + + typedef struct _KEY_FULL_INFORMATION { LARGE_INTEGER LastWriteTime; @@ -268,6 +308,13 @@ typedef struct _KEY_VALUE_PARTIAL_INFORMATION UCHAR Data[1]; } KEY_VALUE_PARTIAL_INFORMATION, *PKEY_VALUE_PARTIAL_INFORMATION; +typedef struct _KEY_VALUE_PARTIAL_INFORMATION_ALIGN64 +{ + ULONG Type; + ULONG DataLength; + UCHAR Data[1]; +} KEY_VALUE_PARTIAL_INFORMATION_ALIGN64, *PKEY_VALUE_PARTIAL_INFORMATION_ALIGN64; + typedef struct _KEY_VALUE_BASIC_INFORMATION { ULONG TitleIndex; diff --git a/reactos/include/ndk/extypes.h b/reactos/include/ndk/extypes.h index 6915d751c7a..e26afa17049 100644 --- a/reactos/include/ndk/extypes.h +++ b/reactos/include/ndk/extypes.h @@ -772,7 +772,7 @@ typedef struct _SYSTEM_PERFORMANCE_INFORMATION ULONG TotalSystemCodePages; ULONG NonPagedPoolLookasideHits; ULONG PagedPoolLookasideHits; - ULONG Spare3Count; + ULONG AvailablePagedPoolPages; ULONG ResidentSystemCachePage; ULONG ResidentPagedPoolPage; ULONG ResidentSystemDriverPage; @@ -849,9 +849,10 @@ typedef struct _SYSTEM_PROCESS_INFORMATION { ULONG NextEntryOffset; ULONG NumberOfThreads; - LARGE_INTEGER SpareLi1; - LARGE_INTEGER SpareLi2; - LARGE_INTEGER SpareLi3; + LARGE_INTEGER WorkingSetPrivateSize; //VISTA + ULONG HardFaultCount; //WIN7 + ULONG NumberOfThreadsHighWatermark; //WIN7 + ULONGLONG CycleTime; //WIN7 LARGE_INTEGER CreateTime; LARGE_INTEGER UserTime; LARGE_INTEGER KernelTime; @@ -868,8 +869,8 @@ typedef struct _SYSTEM_PROCESS_INFORMATION // NOTE: *NOT* THE SAME AS VM_COUNTERS! // SIZE_T PeakVirtualSize; - ULONG VirtualSize; - SIZE_T PageFaultCount; + SIZE_T VirtualSize; + ULONG PageFaultCount; SIZE_T PeakWorkingSetSize; SIZE_T WorkingSetSize; SIZE_T QuotaPeakPagedPoolUsage; @@ -890,7 +891,7 @@ typedef struct _SYSTEM_PROCESS_INFORMATION LARGE_INTEGER WriteTransferCount; LARGE_INTEGER OtherTransferCount; - //SYSTEM_THREAD_INFORMATION TH[1]; + SYSTEM_THREAD_INFORMATION TH[1]; } SYSTEM_PROCESS_INFORMATION, *PSYSTEM_PROCESS_INFORMATION; // Class 6 @@ -959,7 +960,7 @@ typedef struct _SYSTEM_POOL_ENTRY typedef struct _SYSTEM_POOL_INFORMATION { - ULONG TotalSize; + SIZE_T TotalSize; PVOID FirstEntry; USHORT EntryOverhead; BOOLEAN PoolTagPresent; @@ -1072,13 +1073,13 @@ typedef struct _SYSTEM_VDM_INSTEMUL_INFO // Class 21 typedef struct _SYSTEM_FILECACHE_INFORMATION { - ULONG CurrentSize; - ULONG PeakSize; + SIZE_T CurrentSize; + SIZE_T PeakSize; ULONG PageFaultCount; - ULONG MinimumWorkingSet; - ULONG MaximumWorkingSet; - ULONG CurrentSizeIncludingTransitionInPages; - ULONG PeakSizeIncludingTransitionInPages; + SIZE_T MinimumWorkingSet; + SIZE_T MaximumWorkingSet; + SIZE_T CurrentSizeIncludingTransitionInPages; + SIZE_T PeakSizeIncludingTransitionInPages; ULONG TransitionRePurposeCount; ULONG Flags; } SYSTEM_FILECACHE_INFORMATION, *PSYSTEM_FILECACHE_INFORMATION; @@ -1098,6 +1099,7 @@ typedef struct _SYSTEM_POOLTAG ULONG NonPagedFrees; SIZE_T NonPagedUsed; } SYSTEM_POOLTAG, *PSYSTEM_POOLTAG; + typedef struct _SYSTEM_POOLTAG_INFORMATION { ULONG Count; @@ -1229,7 +1231,7 @@ typedef struct _SYSTEM_REGISTRY_QUOTA_INFORMATION { ULONG RegistryQuotaAllowed; ULONG RegistryQuotaUsed; - ULONG PagedPoolSize; + SIZE_T PagedPoolSize; } SYSTEM_REGISTRY_QUOTA_INFORMATION, *PSYSTEM_REGISTRY_QUOTA_INFORMATION; // Class 38 @@ -1274,7 +1276,6 @@ typedef struct _SYSTEM_LEGACY_DRIVER_INFORMATION { PNP_VETO_TYPE VetoType; UNICODE_STRING VetoDriver; - // CHAR Buffer[0]; } SYSTEM_LEGACY_DRIVER_INFORMATION, *PSYSTEM_LEGACY_DRIVER_INFORMATION; // Class 44 @@ -1451,6 +1452,7 @@ typedef struct _SYSTEM_MEMORY_LIST_INFORMATION SIZE_T BadPageCount; SIZE_T PageCountByPriority[8]; SIZE_T RepurposedPagesByPriority[8]; + SIZE_T ModifiedPageCountPageFile; } SYSTEM_MEMORY_LIST_INFORMATION, *PSYSTEM_MEMORY_LIST_INFORMATION; #endif diff --git a/reactos/include/ndk/ldrtypes.h b/reactos/include/ndk/ldrtypes.h index 84ff1370352..1d073404943 100644 --- a/reactos/include/ndk/ldrtypes.h +++ b/reactos/include/ndk/ldrtypes.h @@ -114,6 +114,10 @@ typedef struct _PEB_LDR_DATA LIST_ENTRY InMemoryOrderModuleList; LIST_ENTRY InInitializationOrderModuleList; PVOID EntryInProgress; +#if (NTDDI_VERSION >= NTDDI_WIN7) + UCHAR ShutdownInProgress; + PVOID ShutdownThreadId; +#endif } PEB_LDR_DATA, *PPEB_LDR_DATA; // diff --git a/reactos/include/ndk/peb_teb.h b/reactos/include/ndk/peb_teb.h index 4f43d058234..844b4d0f11c 100644 --- a/reactos/include/ndk/peb_teb.h +++ b/reactos/include/ndk/peb_teb.h @@ -146,7 +146,7 @@ typedef struct STRUCT(_PEB) PTR(PVOID*) FlsCallback; STRUCT(LIST_ENTRY) FlsListHead; PTR(PVOID) FlsBitmap; - ULONG FlsBitmapBits[4]; + ULONG FlsBitmapBits[FLS_MAXIMUM_AVAILABLE/(sizeof(ULONG)*8)]; ULONG FlsHighIndex; #endif #if (NTDDI_VERSION >= NTDDI_LONGHORN) @@ -189,6 +189,7 @@ C_ASSERT(FIELD_OFFSET(STRUCT(PEB), FlsHighIndex) == 0x22C); #endif #endif +#define GDI_BATCH_BUFFER_SIZE 0x136 // // GDI Batch Descriptor // @@ -196,7 +197,7 @@ typedef struct STRUCT(_GDI_TEB_BATCH) { ULONG Offset; PTR(HANDLE) HDC; - ULONG Buffer[0x136]; + ULONG Buffer[GDI_BATCH_BUFFER_SIZE]; } STRUCT(GDI_TEB_BATCH), *STRUCT(PGDI_TEB_BATCH); // diff --git a/reactos/include/ndk/pstypes.h b/reactos/include/ndk/pstypes.h index f13d19bdac7..2a9c2842daa 100644 --- a/reactos/include/ndk/pstypes.h +++ b/reactos/include/ndk/pstypes.h @@ -764,6 +764,19 @@ typedef struct _KERNEL_USER_TIMES LARGE_INTEGER UserTime; } KERNEL_USER_TIMES, *PKERNEL_USER_TIMES; +typedef struct _POOLED_USAGE_AND_LIMITS +{ + SIZE_T PeakPagedPoolUsage; + SIZE_T PagedPoolUsage; + SIZE_T PagedPoolLimit; + SIZE_T PeakNonPagedPoolUsage; + SIZE_T NonPagedPoolUsage; + SIZE_T NonPagedPoolLimit; + SIZE_T PeakPagefileUsage; + SIZE_T PagefileUsage; + SIZE_T PagefileLimit; +} POOLED_USAGE_AND_LIMITS, *PPOOLED_USAGE_AND_LIMITS; + typedef struct _PROCESS_SESSION_INFORMATION { ULONG SessionId; diff --git a/reactos/include/ndk/rtlfuncs.h b/reactos/include/ndk/rtlfuncs.h index 15566983183..9d9ce2050d0 100644 --- a/reactos/include/ndk/rtlfuncs.h +++ b/reactos/include/ndk/rtlfuncs.h @@ -964,7 +964,7 @@ NTSTATUS NTAPI RtlWalkHeap( IN HANDLE HeapHandle, - IN PVOID HeapEntry + IN OUT PRTL_HEAP_WALK_ENTRY HeapEntry ); #define RtlGetProcessHeap() (NtCurrentPeb()->ProcessHeap) @@ -1818,7 +1818,7 @@ RtlUnicodeToMultiByteN( PCHAR MbString, ULONG MbSize, PULONG ResultSize, - PWCHAR UnicodeString, + PCWCH UnicodeString, ULONG UnicodeSize ); @@ -1997,6 +1997,16 @@ RtlFillMemoryUlong( IN ULONG Fill ); +NTSYSAPI +VOID +NTAPI +RtlFillMemoryUlonglong( + OUT PVOID Destination, + IN SIZE_T Length, + IN ULONGLONG Pattern +); + + NTSYSAPI SIZE_T NTAPI @@ -2080,6 +2090,25 @@ 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 @@ -2321,6 +2350,25 @@ RtlInitializeContext( IN PINITIAL_TEB InitialTeb ); +#ifdef _M_AMD64 +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 @@ -2545,6 +2593,19 @@ RtlGetFullPathName_U( OUT PWSTR *ShortName ); +#if (NTDDI_VERSION >= NTDDI_WIN7) +NTSYSAPI +NTSTATUS +NTAPI +RtlGetFullPathName_UEx( + IN PWSTR FileName, + IN ULONG BufferLength, + OUT PWSTR Buffer, + OUT OPTIONAL PWSTR *FilePart, + OUT OPTIONAL RTL_PATH_TYPE *InputPathType + ); +#endif + ULONG NTAPI RtlGetFullPathName_UstrEx( @@ -2586,9 +2647,9 @@ NTSYSAPI NTSTATUS NTAPI RtlQueryEnvironmentVariable_U( - PWSTR Environment, - PUNICODE_STRING Name, - PUNICODE_STRING Value + IN OPTIONAL PWSTR Environment, + IN PUNICODE_STRING Name, + OUT PUNICODE_STRING Value ); VOID @@ -2604,6 +2665,14 @@ RtlSetCurrentDirectory_U( IN PUNICODE_STRING name ); +NTSYSAPI +NTSTATUS +NTAPI +RtlSetCurrentEnvironment( + IN PVOID Environment, + OUT OPTIONAL PVOID *PreviousEnvironment +); + NTSYSAPI NTSTATUS NTAPI diff --git a/reactos/include/ndk/rtltypes.h b/reactos/include/ndk/rtltypes.h index 30bb586663a..1ab594b24ff 100644 --- a/reactos/include/ndk/rtltypes.h +++ b/reactos/include/ndk/rtltypes.h @@ -36,18 +36,23 @@ Author: // #define RTL_USER_PROCESS_PARAMETERS_NORMALIZED 0x01 #define RTL_USER_PROCESS_PARAMETERS_PROFILE_USER 0x02 -#define RTL_USER_PROCESS_PARAMETERS_PROFILE_SERVER 0x04 -#define RTL_USER_PROCESS_PARAMETERS_PROFILE_KERNEL 0x08 +#define RTL_USER_PROCESS_PARAMETERS_PROFILE_KERNEL 0x04 +#define RTL_USER_PROCESS_PARAMETERS_PROFILE_SERVER 0x08 #define RTL_USER_PROCESS_PARAMETERS_UNKNOWN 0x10 #define RTL_USER_PROCESS_PARAMETERS_RESERVE_1MB 0x20 #define RTL_USER_PROCESS_PARAMETERS_RESERVE_16MB 0x40 +#define RTL_USER_PROCESS_PARAMETERS_CASE_SENSITIVE 0x80 #define RTL_USER_PROCESS_PARAMETERS_DISABLE_HEAP_CHECKS 0x100 #define RTL_USER_PROCESS_PARAMETERS_PROCESS_OR_1 0x200 #define RTL_USER_PROCESS_PARAMETERS_PROCESS_OR_2 0x400 #define RTL_USER_PROCESS_PARAMETERS_PRIVATE_DLL_PATH 0x1000 -#define RTL_USER_PROCESS_PARAMETERS_LOCAL_DLL_PATH 0x2000 +#define RTL_USER_PROCESS_PARAMETERS_APP_MANIFEST_PRESENT 0x2000 +#define RTL_USER_PROCESS_PARAMETERS_IMAGE_KEY_MISSING 0x4000 #define RTL_USER_PROCESS_PARAMETERS_NX 0x20000 +#define RTL_MAX_DRIVE_LETTERS 32 +#define RTL_DRIVE_LETTER_VALID (USHORT)0x0001 + // // Exception Flags // @@ -901,44 +906,94 @@ typedef struct _RTL_PROCESS_MODULE_INFORMATION_EX typedef struct _RTL_HEAP_TAG_INFO { - ULONG NumberOfAllocations; - ULONG NumberOfFrees; - ULONG BytesAllocated; + ULONG NumberOfAllocations; + ULONG NumberOfFrees; + SIZE_T BytesAllocated; } RTL_HEAP_TAG_INFO, *PRTL_HEAP_TAG_INFO; typedef struct _RTL_HEAP_USAGE_ENTRY { struct _RTL_HEAP_USAGE_ENTRY *Next; + PVOID Address; + SIZE_T Size; + USHORT AllocatorBackTraceIndex; + USHORT TagIndex; } RTL_HEAP_USAGE_ENTRY, *PRTL_HEAP_USAGE_ENTRY; typedef struct _RTL_HEAP_USAGE { ULONG Length; - ULONG BytesAllocated; - ULONG BytesCommitted; - ULONG BytesReserved; - ULONG BytesReservedMaximum; + SIZE_T BytesAllocated; + SIZE_T BytesCommitted; + SIZE_T BytesReserved; + SIZE_T BytesReservedMaximum; PRTL_HEAP_USAGE_ENTRY Entries; PRTL_HEAP_USAGE_ENTRY AddedEntries; PRTL_HEAP_USAGE_ENTRY RemovedEntries; - UCHAR Reserved[32]; + ULONG_PTR Reserved[8]; } RTL_HEAP_USAGE, *PRTL_HEAP_USAGE; +typedef struct _RTL_HEAP_WALK_ENTRY +{ + PVOID DataAddress; + SIZE_T DataSize; + UCHAR OverheadBytes; + UCHAR SegmentIndex; + USHORT Flags; + union + { + struct + { + SIZE_T Settable; + USHORT TagIndex; + USHORT AllocatorBackTraceIndex; + ULONG Reserved[2]; + } Block; + struct + { + ULONG_PTR CommittedSize; + ULONG_PTR UnCommittedSize; + PVOID FirstEntry; + PVOID LastEntry; + } Segment; + }; +} RTL_HEAP_WALK_ENTRY, *PRTL_HEAP_WALK_ENTRY; + +typedef struct _RTL_HEAP_ENTRY +{ + SIZE_T Size; + USHORT Flags; + USHORT AllocatorBackTraceIndex; + union + { + struct + { + SIZE_T Settable; + ULONG Tag; + } s1; + struct + { + SIZE_T CommittedSize; + PVOID FirstBlock; + } s2; + } u; +} RTL_HEAP_ENTRY, *PRTL_HEAP_ENTRY; + typedef struct _RTL_HEAP_INFORMATION { PVOID BaseAddress; ULONG Flags; USHORT EntryOverhead; USHORT CreatorBackTraceIndex; - ULONG BytesAllocated; - ULONG BytesCommitted; + SIZE_T BytesAllocated; + SIZE_T BytesCommitted; ULONG NumberOfTags; ULONG NumberOfEntries; ULONG NumberOfPseudoTags; ULONG PseudoTagGranularity; ULONG Reserved[4]; - PVOID Tags; - PVOID Entries; + PRTL_HEAP_TAG Tags; + PRTL_HEAP_ENTRY Entries; } RTL_HEAP_INFORMATION, *PRTL_HEAP_INFORMATION; typedef struct _RTL_PROCESS_HEAPS @@ -1196,6 +1251,8 @@ typedef struct _RANGE_LIST_ITERATOR // // RTL Resource // +#define RTL_RESOURCE_FLAG_LONG_TERM ((ULONG)0x00000001) + typedef struct _RTL_RESOURCE { RTL_CRITICAL_SECTION Lock; @@ -1205,8 +1262,8 @@ typedef struct _RTL_RESOURCE ULONG ExclusiveWaiters; LONG NumberActive; HANDLE OwningThread; - ULONG TimeoutBoost; - PVOID DebugInfo; + ULONG Flags; + PRTL_RESOURCE_DEBUG DebugInfo; } RTL_RESOURCE, *PRTL_RESOURCE; // @@ -1241,7 +1298,13 @@ typedef struct _RTL_USER_PROCESS_PARAMETERS UNICODE_STRING DesktopInfo; UNICODE_STRING ShellInfo; UNICODE_STRING RuntimeData; - RTL_DRIVE_LETTER_CURDIR CurrentDirectories[32]; + RTL_DRIVE_LETTER_CURDIR CurrentDirectories[RTL_MAX_DRIVE_LETTERS]; +#if (NTDDI_VERSION >= NTDDI_LONGHORN) + SIZE_T EnvironmentSize; +#endif +#if (NTDDI_VERSION >= NTDDI_WIN7) + SIZE_T EnvironmentVersion; +#endif } RTL_USER_PROCESS_PARAMETERS, *PRTL_USER_PROCESS_PARAMETERS; typedef struct _RTL_USER_PROCESS_INFORMATION diff --git a/reactos/include/xdk/rtlfuncs.h b/reactos/include/xdk/rtlfuncs.h index 187efdec8b9..14ca70e7728 100644 --- a/reactos/include/xdk/rtlfuncs.h +++ b/reactos/include/xdk/rtlfuncs.h @@ -1369,7 +1369,7 @@ RtlUnicodeToMultiByteN( _Out_writes_bytes_to_(MaxBytesInMultiByteString, *BytesInMultiByteString) PCHAR MultiByteString, _In_ ULONG MaxBytesInMultiByteString, _Out_opt_ PULONG BytesInMultiByteString, - _In_reads_bytes_(BytesInUnicodeString) PWCH UnicodeString, + _In_reads_bytes_(BytesInUnicodeString) PCWCH UnicodeString, _In_ ULONG BytesInUnicodeString); _IRQL_requires_max_(PASSIVE_LEVEL)