From 679d356bf33fed2c8792d413c0a80e7f155a7b21 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 19 Oct 2009 12:36:10 +0000 Subject: [PATCH 001/286] Fix a bug :D svn path=/branches/ros-amd64-bringup/; revision=43600 --- reactos/boot/freeldr/freeldr/windows/i386/wlmemory.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/boot/freeldr/freeldr/windows/i386/wlmemory.c b/reactos/boot/freeldr/freeldr/windows/i386/wlmemory.c index 6eb8b34224f..7800f3dd7f8 100644 --- a/reactos/boot/freeldr/freeldr/windows/i386/wlmemory.c +++ b/reactos/boot/freeldr/freeldr/windows/i386/wlmemory.c @@ -541,7 +541,7 @@ VOID MempDump() { ULONG *PDE_Addr=(ULONG *)PDE;//0xC0300000; - int j; + int i, j; DPRINTM(DPRINT_WINDOWS, "\nPDE\n"); From 6de6d2406a0a5a027d54964a153b61cdc40a82d4 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 19 Oct 2009 12:50:36 +0000 Subject: [PATCH 002/286] [FREELDR] - Move definition of KIP0PCRADDRESS into arch specific header - Implement WinLdrSetupForNt for amd64 (copied x86 version) - Fix mapping of PCR and KI_USER_SHARED_DATA - Don't enable paging again, it is already enabled on amd64 - Fix WinLdrSetProcessorContext to take a ULONG_PTR not ULONG for Pcr and Tss svn path=/branches/ros-amd64-bringup/; revision=43601 --- .../freeldr/include/arch/amd64/amd64.h | 4 ++ .../freeldr/freeldr/include/arch/i386/i386.h | 3 ++ .../freeldr/freeldr/windows/amd64/ntsetup.c | 40 +++++++++++++++++++ .../freeldr/freeldr/windows/amd64/wlmemory.c | 27 ++++++------- .../boot/freeldr/freeldr/windows/wlmemory.c | 6 +-- 5 files changed, 60 insertions(+), 20 deletions(-) diff --git a/reactos/boot/freeldr/freeldr/include/arch/amd64/amd64.h b/reactos/boot/freeldr/freeldr/include/arch/amd64/amd64.h index 1a21cf20d7f..12d926991fc 100644 --- a/reactos/boot/freeldr/freeldr/include/arch/amd64/amd64.h +++ b/reactos/boot/freeldr/freeldr/include/arch/amd64/amd64.h @@ -21,6 +21,10 @@ #ifndef __AMD64_AMD64_H_ #define __AMD64_AMD64_H_ +// This is needed because headers define wrong one for ReactOS +#undef KIP0PCRADDRESS +#define KIP0PCRADDRESS 0xFFFFF78000001000ULL /* FIXME!!! */ + #define STACK64ADDR 0x74000 /* The 64-bit stack top will be at 0x74000 */ /* Long mode selectors */ diff --git a/reactos/boot/freeldr/freeldr/include/arch/i386/i386.h b/reactos/boot/freeldr/freeldr/include/arch/i386/i386.h index dd904baf660..1dce56eeb22 100644 --- a/reactos/boot/freeldr/freeldr/include/arch/i386/i386.h +++ b/reactos/boot/freeldr/freeldr/include/arch/i386/i386.h @@ -21,6 +21,9 @@ #ifndef __I386_I386_H_ #define __I386_I386_H_ +// This is needed because headers define wrong one for ReactOS +#undef KIP0PCRADDRESS +#define KIP0PCRADDRESS 0xffdff000 #endif /* __I386_I386_H_ */ diff --git a/reactos/boot/freeldr/freeldr/windows/amd64/ntsetup.c b/reactos/boot/freeldr/freeldr/windows/amd64/ntsetup.c index 67d10579a64..364ebee72ef 100644 --- a/reactos/boot/freeldr/freeldr/windows/amd64/ntsetup.c +++ b/reactos/boot/freeldr/freeldr/windows/amd64/ntsetup.c @@ -40,5 +40,45 @@ void WinLdrSetupForNt(PLOADER_PARAMETER_BLOCK LoaderBlock, ULONG *PcrBasePage, ULONG *TssBasePage) { + ULONG TssSize; + ULONG TssPages; + ULONG_PTR Pcr = 0; + ULONG_PTR Tss = 0; + ULONG BlockSize, NumPages; + LoaderBlock->u.I386.CommonDataArea = NULL; // Force No ABIOS support + LoaderBlock->u.I386.MachineType = MACHINE_TYPE_ISA; + + /* Allocate 2 pages for PCR */ + Pcr = (ULONG_PTR)MmAllocateMemoryWithType(2 * MM_PAGE_SIZE, LoaderStartupPcrPage); + *PcrBasePage = Pcr >> MM_PAGE_SHIFT; + RtlZeroMemory((PVOID)Pcr, 2 * MM_PAGE_SIZE); + + if (Pcr == 0) + { + UiMessageBox("Can't allocate PCR\n"); + return; + } + + /* Allocate TSS */ + TssSize = (sizeof(KTSS) + MM_PAGE_SIZE) & ~(MM_PAGE_SIZE - 1); + TssPages = TssSize / MM_PAGE_SIZE; + + Tss = (ULONG_PTR)MmAllocateMemoryWithType(TssSize, LoaderMemoryData); + + *TssBasePage = Tss >> MM_PAGE_SHIFT; + + /* Allocate space for new GDT + IDT */ + BlockSize = NUM_GDT*sizeof(KGDTENTRY) + NUM_IDT*sizeof(KIDTENTRY);//FIXME: Use GDT/IDT limits here? + NumPages = (BlockSize + MM_PAGE_SIZE - 1) >> MM_PAGE_SHIFT; + *GdtIdt = (PKGDTENTRY)MmAllocateMemoryWithType(NumPages * MM_PAGE_SIZE, LoaderMemoryData); + + if (*GdtIdt == NULL) + { + UiMessageBox("Can't allocate pages for GDT+IDT!\n"); + return; + } + + /* Zero newly prepared GDT+IDT */ + RtlZeroMemory(*GdtIdt, NumPages << MM_PAGE_SHIFT); } diff --git a/reactos/boot/freeldr/freeldr/windows/amd64/wlmemory.c b/reactos/boot/freeldr/freeldr/windows/amd64/wlmemory.c index ef6a18dfdfb..760acc48582 100644 --- a/reactos/boot/freeldr/freeldr/windows/amd64/wlmemory.c +++ b/reactos/boot/freeldr/freeldr/windows/amd64/wlmemory.c @@ -15,10 +15,6 @@ //extern ULONG LoaderPagesSpanned; -// This is needed because headers define wrong one for ReactOS -#undef KIP0PCRADDRESS -#define KIP0PCRADDRESS 0xffdff000 - #define HYPER_SPACE_ENTRY 0x300 // This is needed only for SetProcessorContext routine @@ -100,7 +96,7 @@ MempGetOrCreatePageDir(PPAGE_DIRECTORY_AMD64 pDir, ULONG Index) } BOOLEAN -MempMapSinglePage(ULONGLONG VirtualAddress, ULONGLONG PhysicalAddress) +MempMapSinglePage(ULONG64 VirtualAddress, ULONG64 PhysicalAddress) { PPAGE_DIRECTORY_AMD64 pDir3, pDir2, pDir1; ULONG Index; @@ -110,11 +106,15 @@ MempMapSinglePage(ULONGLONG VirtualAddress, ULONGLONG PhysicalAddress) pDir1 = MempGetOrCreatePageDir(pDir2, VAtoPDI(VirtualAddress)); if (!pDir1) + { + DPRINTM(DPRINT_WINDOWS,"!!!No Dir %p, %p, %p, %p\n", pPML4, pDir3, pDir2, pDir1); return FALSE; + } Index = VAtoPTI(VirtualAddress); if (pDir1->Pde[Index].Valid) { + DPRINTM(DPRINT_WINDOWS,"!!!Already mapped %ld\n", Index); return FALSE; } @@ -201,14 +201,14 @@ BOOLEAN WinLdrMapSpecialPages(ULONG PcrBasePage) { /* Map the PCR page */ - if (!MempMapSinglePage(PcrBasePage * PAGE_SIZE, KIP0PCRADDRESS)) + if (!MempMapSinglePage(KIP0PCRADDRESS, PcrBasePage * PAGE_SIZE)) { DPRINTM(DPRINT_WINDOWS, "Could not map PCR @ %lx\n", PcrBasePage); return FALSE; } /* Map KI_USER_SHARED_DATA */ - if (!MempMapSinglePage((PcrBasePage+1) * PAGE_SIZE, KI_USER_SHARED_DATA)) + if (!MempMapSinglePage(KI_USER_SHARED_DATA, (PcrBasePage+1) * PAGE_SIZE)) { DPRINTM(DPRINT_WINDOWS, "Could not map KI_USER_SHARED_DATA\n"); return FALSE; @@ -284,6 +284,8 @@ WinLdrSetupIdt(PVOID IdtBase) VOID WinLdrSetProcessorContext(PVOID GdtIdt, IN ULONG64 Pcr, IN ULONG64 Tss) { + DPRINTM(DPRINT_WINDOWS, "WinLdrSetProcessorContext %p\n", Pcr); + /* Disable Interrupts */ _disable(); @@ -293,18 +295,13 @@ WinLdrSetProcessorContext(PVOID GdtIdt, IN ULONG64 Pcr, IN ULONG64 Tss) /* Set the new PML4 */ __writecr3((ULONGLONG)pPML4); - // Enable paging by modifying CR0 - __writecr0(__readcr0() | CR0_PG); - - // Kernel expects the PCR to be zero-filled on startup - // FIXME: Why zero it here when we can zero it right after allocation? - RtlZeroMemory((PVOID)Pcr, MM_PAGE_SIZE); //FIXME: Why zero only 1 page when we allocate 2? - RtlZeroMemory(GdtIdt, PAGE_SIZE); WinLdrSetupGdt(GdtIdt, Tss); - WinLdrSetupIdt(GdtIdt); + WinLdrSetupIdt((PVOID)((ULONG64)GdtIdt + 2048)); // HACK! + + DPRINTM(DPRINT_WINDOWS, "leave WinLdrSetProcessorContext\n"); } diff --git a/reactos/boot/freeldr/freeldr/windows/wlmemory.c b/reactos/boot/freeldr/freeldr/windows/wlmemory.c index 2ed849ad545..dd7b19ee208 100644 --- a/reactos/boot/freeldr/freeldr/windows/wlmemory.c +++ b/reactos/boot/freeldr/freeldr/windows/wlmemory.c @@ -15,10 +15,6 @@ extern ULONG LoaderPagesSpanned; -// This is needed because headers define wrong one for ReactOS -#undef KIP0PCRADDRESS -#define KIP0PCRADDRESS 0xffdff000 - PCHAR MemTypeDesc[] = { "ExceptionBlock ", // ? "SystemBlock ", // ? @@ -63,7 +59,7 @@ VOID WinLdrRemoveDescriptor(IN PMEMORY_ALLOCATION_DESCRIPTOR Descriptor); VOID -WinLdrSetProcessorContext(PVOID GdtIdt, IN ULONG Pcr, IN ULONG Tss); +WinLdrSetProcessorContext(PVOID GdtIdt, IN ULONG_PTR Pcr, IN ULONG_PTR Tss); BOOLEAN MempAllocatePageTables(); From 208a01bc0ca79ad828bc7af3310915dfeac18ffc Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 19 Oct 2009 15:39:16 +0000 Subject: [PATCH 003/286] [FREELDR] Round up to pages when updating LoaderPagesSpanned to avoid a bug when the last memory region is not mapped. svn path=/branches/ros-amd64-bringup/; revision=43602 --- reactos/boot/freeldr/freeldr/mm/mm.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/reactos/boot/freeldr/freeldr/mm/mm.c b/reactos/boot/freeldr/freeldr/mm/mm.c index 5612b2f0d4f..fbb0f7da5c0 100644 --- a/reactos/boot/freeldr/freeldr/mm/mm.c +++ b/reactos/boot/freeldr/freeldr/mm/mm.c @@ -75,8 +75,8 @@ PVOID MmAllocateMemoryWithType(ULONG MemorySize, TYPE_OF_MEMORY MemoryType) #endif // DBG // Update LoaderPagesSpanned count - if ((((ULONG_PTR)MemPointer + MemorySize) >> PAGE_SHIFT) > LoaderPagesSpanned) - LoaderPagesSpanned = (((ULONG_PTR)MemPointer + MemorySize) >> PAGE_SHIFT); + if ((((ULONG_PTR)MemPointer + MemorySize + PAGE_SIZE - 1) >> PAGE_SHIFT) > LoaderPagesSpanned) + LoaderPagesSpanned = (((ULONG_PTR)MemPointer + MemorySize + PAGE_SIZE - 1) >> PAGE_SHIFT); // Now return the pointer return MemPointer; @@ -175,8 +175,8 @@ PVOID MmAllocateMemoryAtAddress(ULONG MemorySize, PVOID DesiredAddress, TYPE_OF_ #endif // DBG // Update LoaderPagesSpanned count - if ((((ULONG_PTR)MemPointer + MemorySize) >> PAGE_SHIFT) > LoaderPagesSpanned) - LoaderPagesSpanned = (((ULONG_PTR)MemPointer + MemorySize) >> PAGE_SHIFT); + if ((((ULONG_PTR)MemPointer + MemorySize + PAGE_SIZE - 1) >> PAGE_SHIFT) > LoaderPagesSpanned) + LoaderPagesSpanned = (((ULONG_PTR)MemPointer + MemorySize + PAGE_SIZE - 1) >> PAGE_SHIFT); // Now return the pointer return MemPointer; From 3e799d97d524bad5312ef0d5801b3b3dacbeeaa6 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 19 Oct 2009 15:51:57 +0000 Subject: [PATCH 004/286] [FREELDR] - Add MempIsPageMapped for debugging puposes - Map pages for kernel, too in MempSetupPaging Now we reach the kernel's entry point again. svn path=/branches/ros-amd64-bringup/; revision=43604 --- .../freeldr/freeldr/windows/amd64/wlmemory.c | 44 ++++++++++++++++++- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git a/reactos/boot/freeldr/freeldr/windows/amd64/wlmemory.c b/reactos/boot/freeldr/freeldr/windows/amd64/wlmemory.c index 760acc48582..cfb6d446a74 100644 --- a/reactos/boot/freeldr/freeldr/windows/amd64/wlmemory.c +++ b/reactos/boot/freeldr/freeldr/windows/amd64/wlmemory.c @@ -125,6 +125,35 @@ MempMapSinglePage(ULONG64 VirtualAddress, ULONG64 PhysicalAddress) return TRUE; } +BOOLEAN +MempIsPageMapped(PVOID VirtualAddress) +{ + PPAGE_DIRECTORY_AMD64 pDir; + ULONG Index; + + pDir = pPML4; + Index = VAtoPXI(VirtualAddress); + if (!pDir->Pde[Index].Valid) + return FALSE; + + pDir = (PPAGE_DIRECTORY_AMD64)((ULONG64)(pDir->Pde[Index].PageFrameNumber) * PAGE_SIZE); + Index = VAtoPPI(VirtualAddress); + if (!pDir->Pde[Index].Valid) + return FALSE; + + pDir = (PPAGE_DIRECTORY_AMD64)((ULONG64)(pDir->Pde[Index].PageFrameNumber) * PAGE_SIZE); + Index = VAtoPDI(VirtualAddress); + if (!pDir->Pde[Index].Valid) + return FALSE; + + pDir = (PPAGE_DIRECTORY_AMD64)((ULONG64)(pDir->Pde[Index].PageFrameNumber) * PAGE_SIZE); + Index = VAtoPTI(VirtualAddress); + if (!pDir->Pde[Index].Valid) + return FALSE; + + return TRUE; +} + ULONG MempMapRangeOfPages(ULONGLONG VirtualAddress, ULONGLONG PhysicalAddress, ULONG cPages) { @@ -146,13 +175,24 @@ BOOLEAN MempSetupPaging(IN ULONG StartPage, IN ULONG NumberOfPages) { - DPRINTM(DPRINT_WINDOWS,">>> MempSetupPaging(0x%lx, %ld)\n", StartPage, NumberOfPages); + DPRINTM(DPRINT_WINDOWS,">>> MempSetupPaging(0x%lx, %ld, %p)\n", + StartPage, NumberOfPages, StartPage * PAGE_SIZE + KSEG0_BASE); + /* Identity mapping */ if (MempMapRangeOfPages(StartPage * PAGE_SIZE, StartPage * PAGE_SIZE, NumberOfPages) != NumberOfPages) { - DPRINTM(DPRINT_WINDOWS,"Failed to map pages\n"); + DPRINTM(DPRINT_WINDOWS,"Failed to map pages 1\n"); + return FALSE; + } + + /* Kernel mapping */ + if (MempMapRangeOfPages(StartPage * PAGE_SIZE + KSEG0_BASE, + StartPage * PAGE_SIZE, + NumberOfPages) != NumberOfPages) + { + DPRINTM(DPRINT_WINDOWS,"Failed to map pages 2\n"); return FALSE; } From 33020c2291b747d8801e167f0e54baa61e6df964 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 19 Oct 2009 16:19:29 +0000 Subject: [PATCH 005/286] [FREELDR] - include the intrinsics from the kernel - set segement selectors svn path=/branches/ros-amd64-bringup/; revision=43605 --- .../freeldr/freeldr/include/arch/amd64/amd64.h | 7 ------- reactos/boot/freeldr/freeldr/include/freeldr.h | 1 + .../boot/freeldr/freeldr/windows/amd64/wlmemory.c | 14 +++++++++++++- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/reactos/boot/freeldr/freeldr/include/arch/amd64/amd64.h b/reactos/boot/freeldr/freeldr/include/arch/amd64/amd64.h index 12d926991fc..869a0dbea30 100644 --- a/reactos/boot/freeldr/freeldr/include/arch/amd64/amd64.h +++ b/reactos/boot/freeldr/freeldr/include/arch/amd64/amd64.h @@ -58,13 +58,6 @@ typedef struct _PAGE_DIRECTORY_AMD64 HARDWARE_PTE Pde[512]; } PAGE_DIRECTORY_AMD64, *PPAGE_DIRECTORY_AMD64; -VOID -FORCEINLINE -__lgdt(void *gdt) -{ - asm volatile ("lgdt %0\n" : : "m"(*(short*)gdt)); -} - PKGDTENTRY64 FORCEINLINE KiGetGdtEntry(PVOID pGdt, USHORT Index) diff --git a/reactos/boot/freeldr/freeldr/include/freeldr.h b/reactos/boot/freeldr/freeldr/include/freeldr.h index d04872d623b..1eab3ba3a60 100644 --- a/reactos/boot/freeldr/freeldr/include/freeldr.h +++ b/reactos/boot/freeldr/freeldr/include/freeldr.h @@ -86,6 +86,7 @@ #elif defined(_M_AMD64) #include #include +#include #endif /* misc files */ #include diff --git a/reactos/boot/freeldr/freeldr/windows/amd64/wlmemory.c b/reactos/boot/freeldr/freeldr/windows/amd64/wlmemory.c index cfb6d446a74..4546ffeb728 100644 --- a/reactos/boot/freeldr/freeldr/windows/amd64/wlmemory.c +++ b/reactos/boot/freeldr/freeldr/windows/amd64/wlmemory.c @@ -341,8 +341,20 @@ WinLdrSetProcessorContext(PVOID GdtIdt, IN ULONG64 Pcr, IN ULONG64 Tss) WinLdrSetupIdt((PVOID)((ULONG64)GdtIdt + 2048)); // HACK! - DPRINTM(DPRINT_WINDOWS, "leave WinLdrSetProcessorContext\n"); + /* LDT is unused */ + __lldt(0); + /* Load selectors for DS/ES/FS/GS/SS */ + Ke386SetDs(KGDT_64_DATA | RPL_MASK); // 0x2b + Ke386SetEs(KGDT_64_DATA | RPL_MASK); // 0x2b + Ke386SetFs(KGDT_32_R3_TEB | RPL_MASK); // 0x53 + Ke386SetGs(KGDT_64_DATA | RPL_MASK); // 0x2b + Ke386SetSs(KGDT_64_R0_SS); // 0x18 + + // Load TSR + Ke386SetTr(KGDT_TSS); + + DPRINTM(DPRINT_WINDOWS, "leave WinLdrSetProcessorContext\n"); } VOID From 1ef46e41d2a5ed001dfffea49d4235530a98b902 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 19 Oct 2009 17:06:24 +0000 Subject: [PATCH 006/286] add AMD64_LOADER_BLOCK, it currently contains a pointer to freeldrs debugprint function for early debugging svn path=/branches/ros-amd64-bringup/; revision=43609 --- reactos/include/reactos/arc/arc.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/reactos/include/reactos/arc/arc.h b/reactos/include/reactos/arc/arc.h index dcb5b2acb0e..b19a173ae9e 100644 --- a/reactos/include/reactos/arc/arc.h +++ b/reactos/include/reactos/arc/arc.h @@ -375,6 +375,11 @@ typedef struct _I386_LOADER_BLOCK ULONG VirtualBias; } I386_LOADER_BLOCK, *PI386_LOADER_BLOCK; +typedef struct _AMD64_LOADER_BLOCK +{ + PVOID DbgPrint; +} AMD64_LOADER_BLOCK, *PAMD64_LOADER_BLOCK; + typedef struct _PPC_LOADER_BLOCK { PVOID BootInfo; @@ -477,6 +482,7 @@ typedef struct _LOADER_PARAMETER_BLOCK union { I386_LOADER_BLOCK I386; + AMD64_LOADER_BLOCK Amd64; ALPHA_LOADER_BLOCK Alpha; IA64_LOADER_BLOCK IA64; PPC_LOADER_BLOCK PowerPC; From 77bdbbd45057ef7bf59c77ce269e72108c733cdb Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 19 Oct 2009 17:11:44 +0000 Subject: [PATCH 007/286] Comment out uniata.sys svn path=/branches/ros-amd64-bringup/; revision=43610 --- reactos/boot/bootdata/txtsetup.sif | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/boot/bootdata/txtsetup.sif b/reactos/boot/bootdata/txtsetup.sif index f61cdd0485d..d132c1dbe1e 100644 --- a/reactos/boot/bootdata/txtsetup.sif +++ b/reactos/boot/bootdata/txtsetup.sif @@ -13,7 +13,7 @@ Signature = "$ReactOS$" [SourceDisksFiles] acpi.sys=,,,,,,,,,,,,4 -uniata.sys=,,,,,,x,,,,,,4 +;uniata.sys=,,,,,,x,,,,,,4 buslogic.sys=,,,,,,x,,,,,,4 blue.sys=,,,,,,x,,,,,,4 bootvid.dll=,,,,,,,,,,,,2 From 647847343620d23728fef4e37b4f9d3d4c0b3c4f Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 19 Oct 2009 22:39:23 +0000 Subject: [PATCH 008/286] Add midl compiler flags svn path=/branches/ros-amd64-bringup/; revision=43630 --- reactos/ReactOS-amd64.rbuild | 1 + 1 file changed, 1 insertion(+) diff --git a/reactos/ReactOS-amd64.rbuild b/reactos/ReactOS-amd64.rbuild index 12575ef87bf..207317c5d8e 100644 --- a/reactos/ReactOS-amd64.rbuild +++ b/reactos/ReactOS-amd64.rbuild @@ -42,6 +42,7 @@ -U_X86_ -mpreferred-stack-boundary=4 + -m64 --win64 -fno-strict-aliasing -Wno-strict-aliasing -Wpointer-arith From dce6e0a37116ab6529860e6e820412c2863cf6e4 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 19 Oct 2009 22:43:14 +0000 Subject: [PATCH 009/286] - use tabs in rbuild file - comment out mmebuddy for amd64 svn path=/branches/ros-amd64-bringup/; revision=43631 --- reactos/lib/drivers/sound/sound.rbuild | 40 ++++++++++++++------------ 1 file changed, 21 insertions(+), 19 deletions(-) diff --git a/reactos/lib/drivers/sound/sound.rbuild b/reactos/lib/drivers/sound/sound.rbuild index b4dbcbc7601..08cb3d3501d 100644 --- a/reactos/lib/drivers/sound/sound.rbuild +++ b/reactos/lib/drivers/sound/sound.rbuild @@ -1,22 +1,24 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + From a54b094b78b64d4301be0b20eb60ba3cf6808429 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 19 Oct 2009 22:49:04 +0000 Subject: [PATCH 010/286] [NTOSKRNKL] - add Ke386SetGs, Ke386SetSs macros for amd64 - fix IMAGE_FILE_MACHINE_ARCHITECTURE for amd64, fixes WinDbg kernel version detection - goto KiSystemStartupReal from KiSystemStartup directly, old boot method is now deprecated svn path=/branches/ros-amd64-bringup/; revision=43632 --- reactos/ntoskrnl/include/internal/amd64/intrin_i.h | 2 ++ reactos/ntoskrnl/include/internal/amd64/ke.h | 2 +- reactos/ntoskrnl/ke/amd64/kiinit.c | 11 +++++++++-- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/reactos/ntoskrnl/include/internal/amd64/intrin_i.h b/reactos/ntoskrnl/include/internal/amd64/intrin_i.h index 1fd353904ea..1bde1780467 100644 --- a/reactos/ntoskrnl/include/internal/amd64/intrin_i.h +++ b/reactos/ntoskrnl/include/internal/amd64/intrin_i.h @@ -132,8 +132,10 @@ static inline void Ki386Cpuid(ULONG Op, PULONG Eax, PULONG Ebx, PULONG Ecx, PULO #define Ke386GetSs() _Ke386GetSeg(ss) #define Ke386GetFs() _Ke386GetSeg(fs) #define Ke386SetFs(X) _Ke386SetSeg(fs, X) +#define Ke386SetGs(X) _Ke386SetSeg(gs, X) #define Ke386SetDs(X) _Ke386SetSeg(ds, X) #define Ke386SetEs(X) _Ke386SetSeg(es, X) +#define Ke386SetSs(X) _Ke386SetSeg(ss, X) #elif defined(_MSC_VER) diff --git a/reactos/ntoskrnl/include/internal/amd64/ke.h b/reactos/ntoskrnl/include/internal/amd64/ke.h index e14fe445964..e489702d702 100644 --- a/reactos/ntoskrnl/include/internal/amd64/ke.h +++ b/reactos/ntoskrnl/include/internal/amd64/ke.h @@ -67,7 +67,7 @@ typedef struct _KIDT_INIT extern ULONG Ke386CacheAlignment; -#define IMAGE_FILE_MACHINE_ARCHITECTURE IMAGE_FILE_MACHINE_I386 +#define IMAGE_FILE_MACHINE_ARCHITECTURE IMAGE_FILE_MACHINE_AMD64 // // INT3 is 1 byte long diff --git a/reactos/ntoskrnl/ke/amd64/kiinit.c b/reactos/ntoskrnl/ke/amd64/kiinit.c index 6f1b42b0262..0e443445a49 100644 --- a/reactos/ntoskrnl/ke/amd64/kiinit.c +++ b/reactos/ntoskrnl/ke/amd64/kiinit.c @@ -621,7 +621,12 @@ NTAPI KiSystemStartup(IN ULONG_PTR Dummy, IN PROS_LOADER_PARAMETER_BLOCK LoaderBlock) { - KiRosPrepareForSystemStartup(Dummy, LoaderBlock); + FrLdrDbgPrint = ((PLOADER_PARAMETER_BLOCK)Dummy)->u.Amd64.DbgPrint; + FrLdrDbgPrint("Hello from KiSystemStartup!!!\n"); + + KiSystemStartupReal((PLOADER_PARAMETER_BLOCK)Dummy); + +// KiRosPrepareForSystemStartup(Dummy, LoaderBlock); } @@ -669,7 +674,7 @@ KiSystemStartupReal(IN PLOADER_PARAMETER_BLOCK LoaderBlock) Ke386SetFs(KGDT_32_R3_TEB | RPL_MASK); /* LDT is unused */ - __sldt(0); +// __lldt(0); /* Align stack to 16 bytes */ LoaderBlock->KernelStack &= ~(16 - 1); @@ -720,6 +725,8 @@ KiSystemStartupReal(IN PLOADER_PARAMETER_BLOCK LoaderBlock) // DPRINT1("Gdt = %p, Idt = %p, Pcr = %p, Tss = %p\n", Gdt, Idt, Pcr, Tss); + DbgBreakPointWithStatus(0); + /* Initialize the Processor with HAL */ HalInitializeProcessor(Cpu, KeLoaderBlock); From 8964d1b90eb5a89f6266993827f241b307c32e98 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Wed, 21 Oct 2009 20:03:27 +0000 Subject: [PATCH 011/286] Rework kdcom, try to make it "portable", now in kddll folder, where other versions like kdusb and kd1394 can have a warm place, too. It still has issues. svn path=/branches/ros-amd64-bringup/; revision=43674 --- reactos/drivers/base/directory.rbuild | 5 +- reactos/drivers/base/kddll/kdcom.c | 294 +++++++++++++++++ reactos/drivers/base/kddll/kdcom.h | 53 +++ reactos/drivers/base/kddll/kddll.c | 407 ++++++++++++++++++++++++ reactos/drivers/base/kddll/kddll.h | 33 ++ reactos/drivers/base/kddll/kddll.rbuild | 23 ++ reactos/drivers/base/kddll/kddll.spec | 8 + reactos/drivers/base/kddll/kdserial.c | 145 +++++++++ 8 files changed, 967 insertions(+), 1 deletion(-) create mode 100644 reactos/drivers/base/kddll/kdcom.c create mode 100644 reactos/drivers/base/kddll/kdcom.h create mode 100644 reactos/drivers/base/kddll/kddll.c create mode 100644 reactos/drivers/base/kddll/kddll.h create mode 100644 reactos/drivers/base/kddll/kddll.rbuild create mode 100644 reactos/drivers/base/kddll/kddll.spec create mode 100644 reactos/drivers/base/kddll/kdserial.c diff --git a/reactos/drivers/base/directory.rbuild b/reactos/drivers/base/directory.rbuild index 72ad22d9ef9..e24305d669c 100644 --- a/reactos/drivers/base/directory.rbuild +++ b/reactos/drivers/base/directory.rbuild @@ -7,8 +7,11 @@ - + + + diff --git a/reactos/drivers/base/kddll/kdcom.c b/reactos/drivers/base/kddll/kdcom.c new file mode 100644 index 00000000000..1de99971d85 --- /dev/null +++ b/reactos/drivers/base/kddll/kdcom.c @@ -0,0 +1,294 @@ +/* + * COPYRIGHT: GPL, see COPYING in the top level directory + * PROJECT: ReactOS kernel + * FILE: drivers/base/kddll/kdcom.c + * PURPOSE: COM port functions for the kernel debugger. + * PROGRAMMER: Timo Kreuzer (timo.kreuzer@ewactos.org) + */ + +#include "kddll.h" +#include "kdcom.h" + +/* Define wait timeout value. */ +#define REPEAT_COUNT (1000 * 1000) + +/* serial debug connection */ +#define DEFAULT_DEBUG_PORT 2 /* COM2 */ +#define DEFAULT_DEBUG_COM1_IRQ 4 /* COM1 IRQ */ +#define DEFAULT_DEBUG_COM2_IRQ 3 /* COM2 IRQ */ +#define DEFAULT_DEBUG_BAUD_RATE 115200 /* 115200 Baud */ + +#define DEFAULT_BAUD_RATE 19200 + + +#if defined(_M_IX86) || defined(_M_AMD64) +const ULONG BaseArray[5] = {0, 0x3F8, 0x2F8, 0x3E8, 0x2E8}; +#elif defined(_M_PPC) +const ULONG BaseArray[2] = {0, 0x800003f8}; +#elif defined(_M_MIPS) +const ULONG BaseArray[3] = {0, 0x80006000, 0x80007000}; +#elif defined(_M_ARM) +const ULONG BaseArray[2] = {0, 0xF1012000}; +#else +#error Unknown architecture +#endif + +/* GLOBALS ********************************************************************/ + +PUCHAR ComPortBase; +ULONG ComPortNumber = DEFAULT_DEBUG_PORT; +ULONG ComPortBaudRate = DEFAULT_DEBUG_BAUD_RATE; +ULONG ComPortIrq = 0; + + +NTSTATUS +NTAPI +KdpPortInitialize() +{ + ULONG Mode; + +KdpDbgPrint("KdpPortInitialize\n"); + + /* Enable loop mode (set Bit 4 of the MCR) */ + WRITE_PORT_UCHAR(ComPortBase + COM_MCR, MCR_LOOP); + + /* Clear all modem output bits */ + WRITE_PORT_UCHAR(ComPortBase + COM_MCR, MCR_LOOP); + + /* The upper nibble of the MSR (modem output bits) must be + * equal to the lower nibble of the MCR (modem input bits) */ + if ((READ_PORT_UCHAR(ComPortBase + COM_MSR) & 0xF0) != 0x00) + { + return STATUS_INVALID_PARAMETER; + } + + /* Set all modem output bits */ + WRITE_PORT_UCHAR(ComPortBase + COM_MCR, MCR_ALL); + + /* The upper nibble of the MSR (modem output bits) must be + * equal to the lower nibble of the MCR (modem input bits) */ + if ((READ_PORT_UCHAR(ComPortBase + COM_MSR) & 0xF0) != 0xF0) + { + return STATUS_INVALID_PARAMETER; + } + + /* Enable FIFO */ + WRITE_PORT_UCHAR(ComPortBase + COM_FCR, + FCR_ENABLE_FIFO | FCR_CLEAR_RCVR | FCR_CLEAR_XMIT); + + /* Disable interrupts */ + WRITE_PORT_UCHAR(ComPortBase + COM_LCR, 0); + WRITE_PORT_UCHAR(ComPortBase + COM_IEN, 0); + + /* Enable on DTR and RTS */ + WRITE_PORT_UCHAR(ComPortBase + COM_MCR, MCR_DTR | MCR_RTS); + + /* Set DLAB */ + WRITE_PORT_UCHAR(ComPortBase + COM_LCR, LCR_DLAB); + + /* Set baud rate */ + Mode = 115200 / ComPortBaudRate; + WRITE_PORT_UCHAR(ComPortBase + COM_DLL, (UCHAR)(Mode & 0xff)); + WRITE_PORT_UCHAR(ComPortBase + COM_DLM, (UCHAR)((Mode >> 8) & 0xff)); + + /* Reset DLAB and set 8 data bits, 1 stop bit, no parity, no break */ + WRITE_PORT_UCHAR(ComPortBase + COM_LCR, LCR_CS8 | LCR_ST1 | LCR_PNO); + + /* Check for 16450/16550 scratch register */ + WRITE_PORT_UCHAR(ComPortBase + COM_SCR, 0xff); + if (READ_PORT_UCHAR(ComPortBase + COM_SCR) != 0xff) + { + return STATUS_INVALID_PARAMETER; + } + WRITE_PORT_UCHAR(ComPortBase + COM_SCR, 0x00); + if (READ_PORT_UCHAR(ComPortBase + COM_SCR) != 0x00) + { + return STATUS_INVALID_PARAMETER; + } + + return STATUS_SUCCESS; +} + +/****************************************************************************** + * \name KdDebuggerInitialize0 + * \brief Phase 0 initialization. + * \param [opt] LoaderBlock Pointer to the Loader parameter block. Can be NULL. + * \return Status + */ +NTSTATUS +NTAPI +KdDebuggerInitialize0( + IN PLOADER_PARAMETER_BLOCK LoaderBlock OPTIONAL) +{ + PCHAR CommandLine, PortString, BaudString, IrqString; + ULONG Value; + + /* Check if e have a LoaderBlock */ + if (LoaderBlock) + { + /* Get the Command Line */ + CommandLine = LoaderBlock->LoadOptions; + + /* Upcase it */ + _strupr(CommandLine); + + /* Get the port and baud rate */ + PortString = strstr(CommandLine, "DEBUGPORT"); + BaudString = strstr(CommandLine, "BAUDRATE"); + IrqString = strstr(CommandLine, "IRQ"); + + /* Check if we got the /DEBUGPORT parameter */ + if (PortString) + { + /* Move past the actual string, to reach the port*/ + PortString += strlen("DEBUGPORT"); + + /* Now get past any spaces and skip the equal sign */ + while (*PortString == ' ') PortString++; + PortString++; + + /* Do we have a serial port? */ + if (strncmp(PortString, "COM", 3) != 0) + { + return STATUS_INVALID_PARAMETER; + } + + /* Gheck for a valid Serial Port */ + PortString += 3; + Value = atol(PortString); + if (Value > 4) + { + return STATUS_INVALID_PARAMETER; + } + + /* Set the port to use */ + ComPortNumber = Value; + } + + /* Check if we got a baud rate */ + if (BaudString) + { + /* Move past the actual string, to reach the rate */ + BaudString += strlen("BAUDRATE"); + + /* Now get past any spaces */ + while (*BaudString == ' ') BaudString++; + + /* And make sure we have a rate */ + if (*BaudString) + { + /* Read and set it */ + Value = atol(BaudString + 1); + if (Value) ComPortBaudRate = Value; + } + } + + /* Check Serial Port Settings [IRQ] */ + if (IrqString) + { + /* Move past the actual string, to reach the rate */ + IrqString += strlen("IRQ"); + + /* Now get past any spaces */ + while (*IrqString == ' ') IrqString++; + + /* And make sure we have an IRQ */ + if (*IrqString) + { + /* Read and set it */ + Value = atol(IrqString + 1); + if (Value) ComPortIrq = Value; + } + } + } + + // HACK use com1 for FrLdrDbg, com2 for WinDbg + ComPortNumber = 2; + + /* Get base address */ + ComPortBase = UlongToPtr(BaseArray[ComPortNumber]); + + /* Initialize the port */ + return KdpPortInitialize(); +} + +VOID +NTAPI +KdpSendByte(IN BYTE Byte) +{ + /* Wait for the port to be ready */ + while ((READ_PORT_UCHAR(ComPortBase + COM_LSR) & LSR_TBE) == 0); + + /* Send the byte */ + WRITE_PORT_UCHAR(ComPortBase + COM_DAT, Byte); +} + +KDP_STATUS +NTAPI +KdpPollByte(OUT PBYTE OutByte) +{ + /* Check if data is available */ + if ((READ_PORT_UCHAR(ComPortBase + COM_LSR) & LSR_DR)) + { + /* Yes, return the byte */ + *OutByte = READ_PORT_UCHAR(ComPortBase + COM_DAT); + return KDP_PACKET_RECEIVED; + } + + /* Timed out */ + return KDP_PACKET_TIMEOUT; +} + +KDP_STATUS +NTAPI +KdpReceiveByte(OUT PBYTE OutByte) +{ + ULONG Repeats = REPEAT_COUNT; + + while (Repeats--) + { + /* Check if data is available */ + if (KdpPollByte(OutByte) == KDP_PACKET_RECEIVED) + { + /* We successfully got a byte */ + return KDP_PACKET_RECEIVED; + } + } + + /* Timed out */ + return KDP_PACKET_TIMEOUT; +} + +KDP_STATUS +NTAPI +KdpPollBreakIn() +{ + UCHAR Byte; + if (KdpPollByte(&Byte) == KDP_PACKET_RECEIVED) + { + if (Byte == BREAKIN_PACKET_BYTE) + { + return KDP_PACKET_RECEIVED; + } + } + return KDP_PACKET_TIMEOUT; +} + +NTSTATUS +NTAPI +KdSave( + IN BOOLEAN SleepTransition) +{ + /* Nothing to do on COM ports */ + return STATUS_SUCCESS; +} + +NTSTATUS +NTAPI +KdRestore( + IN BOOLEAN SleepTransition) +{ + /* Nothing to do on COM ports */ + return STATUS_SUCCESS; +} + diff --git a/reactos/drivers/base/kddll/kdcom.h b/reactos/drivers/base/kddll/kdcom.h new file mode 100644 index 00000000000..2c1bd544fb4 --- /dev/null +++ b/reactos/drivers/base/kddll/kdcom.h @@ -0,0 +1,53 @@ +/* + * COPYRIGHT: GPL, see COPYING in the top level directory + * PROJECT: ReactOS kernel + * FILE: drivers/base/kddll/kdcom.h + * PURPOSE: COM port definitions for the kernel debugger. + * PROGRAMMER: Timo Kreuzer (timo.kreuzer@ewactos.org) + */ + +#define COM_DAT 0x00 +#define COM_IEN 0x01 // interrupt enable register +#define COM_FCR 0x02 // FIFO Control Register +#define COM_LCR 0x03 // line control registers +#define COM_MCR 0x04 // modem control reg +#define COM_LSR 0x05 // line status register +#define COM_MSR 0x06 // modem status register +#define COM_SCR 0x07 // scratch register +#define COM_DLL 0x00 // divisor latch least sig +#define COM_DLM 0x01 // divisor latch most sig + +#define IEN_ERDA 0x01 +#define IEN_ETHRE 0x02 +#define IEN_ERLSI 0x04 +#define IEN_EMS 0x08 +#define IEN_ALL 0x0F +#define FCR_ENABLE_FIFO 0x01 +#define FCR_CLEAR_RCVR 0x02 +#define FCR_CLEAR_XMIT 0x04 +#define LCR_CS5 0x00 +#define LCR_CS6 0x01 +#define LCR_CS7 0x02 +#define LCR_CS8 0x03 +#define LCR_ST1 0x00 +#define LCR_ST2 0x04 +#define LCR_PNO 0x00 +#define LCR_POD 0x08 +#define LCR_PEV 0x18 +#define LCR_PMK 0x28 +#define LCR_PSP 0x38 +#define LCR_BRK 0x40 +#define LCR_DLAB 0x80 +#define MCR_DTR 0x01 +#define MCR_RTS 0x02 +#define MCR_OUT1 0x04 // general purpose output. +#define MCR_OUT2 0x08 +#define MCR_LOOP 0x10 // enables loopback testing mode +#define MCR_ALL (MCR_DTR | MCR_RTS | MCR_OUT1 | MCR_OUT2 | MCR_LOOP) +#define LSR_DR 0x01 +#define LSR_TBE 0x20 +#define MSR_CTS 0x10 // (complemented) state of clear to send (CTS). +#define MSR_DSR 0x20 // (complemented) state of data set ready (DSR). +#define MSR_RI 0x40 // (complemented) state of ring indicator (RI). +#define MSR_DCD 0x80 // (complemented) state of data carrier detect (DCD). + diff --git a/reactos/drivers/base/kddll/kddll.c b/reactos/drivers/base/kddll/kddll.c new file mode 100644 index 00000000000..df802da2f04 --- /dev/null +++ b/reactos/drivers/base/kddll/kddll.c @@ -0,0 +1,407 @@ +/* + * COPYRIGHT: GPL, see COPYING in the top level directory + * PROJECT: ReactOS kernel + * FILE: drivers/base/kddll/kddll.c + * PURPOSE: Base functions for the kernel debugger. + * PROGRAMMER: Timo Kreuzer (timo.kreuzer@ewactos.org) + */ + +#include "kddll.h" + +/* GLOBALS ********************************************************************/ + +ULONG CurrentPacketId = INITIAL_PACKET_ID; + +// HACK!!! +DBGRNT KdpDbgPrint = 0; + + +/****************************************************************************** + * \name KdpCalculateChecksum + * \brief Calculates the checksum for the packet data. + * \param Buffer Pointer to the packet data. + * \param Length Length of data in bytes. + * \return The calculated checksum. + * \sa http://www.vista-xp.co.uk/forums/technical-reference-library/2540-basics-debugging.html + */ +ULONG +NTAPI +KdpCalculateChecksum( + IN PVOID Buffer, + IN ULONG Length) +{ + ULONG i, Checksum = 0; + + for (i = 0; i < Length; i++) + { + Checksum += ((PUCHAR)Buffer)[i]; + } + + return Checksum; +} + +VOID +NTAPI +KdpSendControlPacket( + IN USHORT PacketType, + IN ULONG PacketId OPTIONAL) +{ + KD_PACKET Packet; + + Packet.PacketLeader = CONTROL_PACKET_LEADER; + Packet.PacketId = PacketId; + Packet.ByteCount = 0; + Packet.Checksum = 0; + Packet.PacketType = PacketType; + + KdpSendBuffer(&Packet, sizeof(KD_PACKET)); +} + + +/** Public exported functions *************************************************/ + +NTSTATUS +NTAPI +DriverEntry( + IN PDRIVER_OBJECT DriverObject, + IN PUNICODE_STRING RegistryPath) +{ + return STATUS_SUCCESS; +} + +NTSTATUS +NTAPI +KdD0Transition(VOID) +{ + return STATUS_SUCCESS; +} + +NTSTATUS +NTAPI +KdD3Transition(VOID) +{ + return STATUS_SUCCESS; +} + + +/****************************************************************************** + * \name KdDebuggerInitialize1 + * \brief Phase 1 initialization. + * \param [opt] LoaderBlock Pointer to the Loader parameter block. Can be NULL. + * \return Status + */ +NTSTATUS +NTAPI +KdDebuggerInitialize1( + IN PLOADER_PARAMETER_BLOCK LoaderBlock OPTIONAL) +{ + // HACK: misuse this function to get a pointer to FrLdrDbgPrint + KdpDbgPrint = (PVOID)LoaderBlock; + KdpDbgPrint("KdDebuggerInitialize1\n"); + + return STATUS_NOT_IMPLEMENTED; +} + + +/****************************************************************************** + * \name KdReceivePacket + * \brief Receive a packet from the KD port. + * \param [in] PacketType Describes the type of the packet to receive. + * This can be one of the PACKET_TYPE_ constants. + * \param [out] MessageHeader Pointer to a STRING structure for the header. + * \param [out] MessageData Pointer to a STRING structure for the data. + * \return KdPacketReceived if successful, KdPacketTimedOut if the receive + * timed out, KdPacketNeedsResend to signal that the last packet needs + * to be sent again. + * \note If PacketType is PACKET_TYPE_KD_POLL_BREAKIN, the function doesn't + * wait for any data, but returns KdPacketTimedOut instantly if no breakin + * packet byte is received. + * \sa http://www.nynaeve.net/?p=169 + */ +KDP_STATUS +NTAPI +KdReceivePacket( + IN ULONG PacketType, + OUT PSTRING MessageHeader, + OUT PSTRING MessageData, + OUT PULONG DataLength, + IN OUT PKD_CONTEXT Context) +{ + UCHAR Byte = 0; + KDP_STATUS KdStatus; + KD_PACKET Packet; + ULONG Checksum; + + /* Special handling for breakin packet */ + if(PacketType == PACKET_TYPE_KD_POLL_BREAKIN) + { + return KdpPollBreakIn(); + } + + for (;;) + { + /* Step 1 - Read PacketLeader */ + KdStatus = KdpReceivePacketLeader(&Packet.PacketLeader); + if (KdStatus != KDP_PACKET_RECEIVED) + { + /* Couldn't read a correct packet leader. */ + return KdStatus; + } + + /* Step 2 - Read PacketType */ + KdStatus = KdpReceiveBuffer(&Packet.PacketType, sizeof(USHORT)); + if (KdStatus != KDP_PACKET_RECEIVED) + { + /* Didn't receive a PacketType or PacketType is bad. Start over. */ + continue; + } + + /* Step 3 - Read ByteCount */ + KdStatus = KdpReceiveBuffer(&Packet.ByteCount, sizeof(USHORT)); + if (KdStatus != KDP_PACKET_RECEIVED || Packet.ByteCount > PACKET_MAX_SIZE) + { + /* Didn't receive ByteCount or it's too big. Start over. */ + continue; + } + + /* Step 4 - Read PacketId */ + KdStatus = KdpReceiveBuffer(&Packet.PacketId, sizeof(ULONG)); + if (KdStatus != KDP_PACKET_RECEIVED) + { + /* Didn't receive PacketId. Start over. */ + continue; + } + +/* + if (Packet.PacketId != ExpectedPacketId) + { + // Ask for a resend! + continue; + } +*/ + + /* Step 5 - Read Checksum */ + KdStatus = KdpReceiveBuffer(&Packet.Checksum, sizeof(ULONG)); + if (KdStatus != KDP_PACKET_RECEIVED) + { + /* Didn't receive Checksum. Start over. */ + continue; + } + + /* Step 6 - Handle control packets */ + if (Packet.PacketLeader == CONTROL_PACKET_LEADER) + { + switch (Packet.PacketType) + { + case PACKET_TYPE_KD_ACKNOWLEDGE: + if (PacketType == PACKET_TYPE_KD_ACKNOWLEDGE) + { + /* Remote acknowledges the last packet */ + CurrentPacketId ^= 1; + return KDP_PACKET_RECEIVED; + } + /* That's not what we were waiting for, start over. */ + continue; + + case PACKET_TYPE_KD_RESET: + KdpDbgPrint("KdReceivePacket - got a reset packet\n"); + KdpSendControlPacket(PACKET_TYPE_KD_RESET, 0); + CurrentPacketId = INITIAL_PACKET_ID; + /* Fall through */ + + case PACKET_TYPE_KD_RESEND: + /* Remote wants us to resend the last packet */ + return KDP_PACKET_RESEND; + + default: + KdpDbgPrint("KdReceivePacket - got unknown control packet\n"); + return KDP_PACKET_RESEND; + } + } + + /* Did we wait for an ack packet? */ + if (PacketType == PACKET_TYPE_KD_ACKNOWLEDGE) + { + /* We received something different, start over */ + continue; + } + + /* Did we get the right packet type? */ + if (PacketType != Packet.PacketType) + { + /* We received something different, start over */ + continue; + } + + /* Get size of the message header */ + switch (Packet.PacketType) + { + case PACKET_TYPE_KD_STATE_CHANGE64: + MessageHeader->Length = sizeof(DBGKD_WAIT_STATE_CHANGE64); + break; + + case PACKET_TYPE_KD_STATE_MANIPULATE: + MessageHeader->Length = sizeof(DBGKD_MANIPULATE_STATE64); + break; + + case PACKET_TYPE_KD_DEBUG_IO: + MessageHeader->Length = sizeof(DBGKD_DEBUG_IO); + break; + + default: + KdpDbgPrint("KdReceivePacket - unknown PacketType\n"); + return KDP_PACKET_RESEND; + } + +//KdpDbgPrint("KdReceivePacket - got normal PacketType\n"); + + /* Packet smaller than expected? */ + if (MessageHeader->Length > Packet.ByteCount) + { + KdpDbgPrint("KdReceivePacket - too few data (%d) for type %d\n", + Packet.ByteCount, MessageHeader->Length); + MessageHeader->Length = Packet.ByteCount; + } + +//KdpDbgPrint("KdReceivePacket - got normal PacketType, Buffer = %p\n", MessageHeader->Buffer); + + /* Receive the message header data */ + KdStatus = KdpReceiveBuffer(MessageHeader->Buffer, + MessageHeader->Length); + if (KdStatus != KDP_PACKET_RECEIVED) + { + /* Didn't receive data. Start over. */ + KdpDbgPrint("KdReceivePacket - Didn't receive message header data. Start over\n"); + continue; + } + +//KdpDbgPrint("KdReceivePacket - got normal PacketType 3\n"); + + /* Calculate checksum for the header data */ + Checksum = KdpCalculateChecksum(MessageHeader->Buffer, + MessageHeader->Length); + + /* Shall we receive messsage data? */ + if (MessageData) + { + /* Calculate the length of the message data */ + MessageData->Length = Packet.ByteCount - MessageHeader->Length; + + /* Do we have data? */ + if (MessageData->Length) + { + KdpDbgPrint("KdReceivePacket - got data\n"); + + /* Receive the message data */ + KdStatus = KdpReceiveBuffer(MessageData->Buffer, + MessageData->Length); + if (KdStatus != KDP_PACKET_RECEIVED) + { + /* Didn't receive data. Start over. */ + KdpDbgPrint("KdReceivePacket - Didn't receive message data. Start over\n"); + continue; + } + + /* Add cheksum for message data */ + Checksum += KdpCalculateChecksum(MessageData->Buffer, + MessageData->Length); + } + } + + /* Compare checksum */ + if (Packet.Checksum != Checksum) + { + KdpSendControlPacket(PACKET_TYPE_KD_RESEND, CurrentPacketId); + KdpDbgPrint("KdReceivePacket - wrong cheksum, got %x, calculated %x\n", + Packet.Checksum, Checksum); + continue; + } + + /* We must receive a PACKET_TRAILING_BYTE now */ + KdStatus = KdpReceiveBuffer(&Byte, sizeof(UCHAR)); + + /* Acknowledge the received packet */ + KdpSendControlPacket(PACKET_TYPE_KD_ACKNOWLEDGE, Packet.PacketId); + +//KdpDbgPrint("KdReceivePacket - all ok\n"); + + return KDP_PACKET_RECEIVED; + } + + return KDP_PACKET_RECEIVED; +} + + +VOID +NTAPI +KdSendPacket( + IN ULONG PacketType, + IN PSTRING MessageHeader, + IN PSTRING MessageData, + IN OUT PKD_CONTEXT Context) +{ + KD_PACKET Packet; + KDP_STATUS KdStatus; + + for (;;) + { + /* Initialize a KD_PACKET */ + Packet.PacketLeader = PACKET_LEADER; + Packet.PacketType = PacketType; + Packet.ByteCount = MessageHeader->Length; + Packet.Checksum = KdpCalculateChecksum(MessageHeader->Buffer, + MessageHeader->Length); + + /* If we have message data, add it to the packet */ + if (MessageData) + { + Packet.ByteCount += MessageData->Length; + Packet.Checksum += KdpCalculateChecksum(MessageData->Buffer, + MessageData->Length); + } + + /* Set the packet id */ + Packet.PacketId = CurrentPacketId; + + /* Send the packet header to the KD port */ + KdpSendBuffer(&Packet, sizeof(KD_PACKET)); + + /* Send the message header */ + KdpSendBuffer(MessageHeader->Buffer, MessageHeader->Length); + + /* If we have meesage data, also send it */ + if (MessageData) + { + KdpSendBuffer(MessageData->Buffer, MessageData->Length); + } + + /* Finalize with a trailing byte */ + KdpSendByte(PACKET_TRAILING_BYTE); + + /* Wait for acknowledge */ + KdStatus = KdReceivePacket(PACKET_TYPE_KD_ACKNOWLEDGE, + NULL, + NULL, + 0, + NULL); + + /* Did we succeed? */ + if (KdStatus == KDP_PACKET_RECEIVED) + { + CurrentPacketId &= ~SYNC_PACKET_ID; + break; + } + + /* PACKET_TYPE_KD_DEBUG_IO is allowed to instantly timeout */ + if (PacketType == PACKET_TYPE_KD_DEBUG_IO) + { + /* No response, silently fail. */ +// return; + } + + /* Packet timed out, send it again */ + } + + return; +} + diff --git a/reactos/drivers/base/kddll/kddll.h b/reactos/drivers/base/kddll/kddll.h new file mode 100644 index 00000000000..a244e1ef591 --- /dev/null +++ b/reactos/drivers/base/kddll/kddll.h @@ -0,0 +1,33 @@ +/* + * COPYRIGHT: GPL, see COPYING in the top level directory + * PROJECT: ReactOS kernel + * FILE: drivers/base/kddll/kddll.h + * PURPOSE: Base definitions for the kernel debugger. + * PROGRAMMER: Timo Kreuzer (timo.kreuzer@ewactos.org) + */ + +#define NOEXTAPI +#include +#define NDEBUG +#include +#include +#include +#include +#include "arc/arc.h" +#include "windbgkd.h" + +#include +#include /* port intrinsics */ + +typedef UCHAR BYTE, *PBYTE; + +typedef ULONG (*DBGRNT)(const char *Format, ...); +extern DBGRNT KdpDbgPrint; + +typedef enum +{ + KDP_PACKET_RECEIVED = 0, + KDP_PACKET_TIMEOUT = 1, + KDP_PACKET_RESEND = 2 +} KDP_STATUS; + diff --git a/reactos/drivers/base/kddll/kddll.rbuild b/reactos/drivers/base/kddll/kddll.rbuild new file mode 100644 index 00000000000..4e243beca1c --- /dev/null +++ b/reactos/drivers/base/kddll/kddll.rbuild @@ -0,0 +1,23 @@ + + + + + . + ntoskrnl + hal + kddll.c + + + + . + kdserial.c + + + + + + . + kdlib + kdserial + kdcom.c + diff --git a/reactos/drivers/base/kddll/kddll.spec b/reactos/drivers/base/kddll/kddll.spec new file mode 100644 index 00000000000..4098dd6e2ad --- /dev/null +++ b/reactos/drivers/base/kddll/kddll.spec @@ -0,0 +1,8 @@ +@ stdcall KdD0Transition() +@ stdcall KdD3Transition() +@ stdcall KdDebuggerInitialize0(ptr) +@ stdcall KdDebuggerInitialize1(ptr) +@ stdcall KdReceivePacket(long ptr ptr ptr ptr) +@ stdcall KdRestore(long) +@ stdcall KdSave(long) +@ stdcall KdSendPacket(long ptr ptr ptr) diff --git a/reactos/drivers/base/kddll/kdserial.c b/reactos/drivers/base/kddll/kdserial.c new file mode 100644 index 00000000000..0d4922463f4 --- /dev/null +++ b/reactos/drivers/base/kddll/kdserial.c @@ -0,0 +1,145 @@ +/* + * COPYRIGHT: GPL, see COPYING in the top level directory + * PROJECT: ReactOS kernel + * FILE: drivers/base/kddll/kdserial.c + * PURPOSE: Serial communication functions for the kernel debugger. + * PROGRAMMER: Timo Kreuzer (timo.kreuzer@ewactos.org) + */ + +#include "kddll.h" + + + +/****************************************************************************** + * \name KdpSendBuffer + * \brief Sends a buffer of data to the serial KD port. + * \param Buffer Pointer to the data. + * \param Size Size of data in bytes. + */ +VOID +NTAPI +KdpSendBuffer( + IN PVOID Buffer, + IN ULONG Size) +{ + INT i; + for (i = 0; i < Size; i++) + { + KdpSendByte(((PUCHAR)Buffer)[i]); + } +} + +/****************************************************************************** + * \name KdpReceiveBuffer + * \brief Recieves data from the KD port and fills a buffer. + * \param Buffer Pointer to a buffer that receives the data. + * \param Size Size of data to receive in bytes. + * \return KDP_PACKET_RECEIVED if successful. + * KDP_PACKET_TIMEOUT if the receice timed out. + */ +KDP_STATUS +NTAPI +KdpReceiveBuffer( + OUT PVOID Buffer, + IN ULONG Size) +{ + ULONG i; + PUCHAR ByteBuffer = Buffer; + KDP_STATUS Status; + + for (i = 0; i < Size; i++) + { + /* Try to get a byte from the port */ + Status = KdpReceiveByte(&ByteBuffer[i]); + + if (Status != KDP_PACKET_RECEIVED) + { + return Status; + } + } + + return KDP_PACKET_RECEIVED; +} + + +/****************************************************************************** + * \name KdpReceivePacketLeader + * \brief Recieves a packet leadr from the KD port. + * \param PacketLeader Pointer to an ULONG that receives the packet leader. + * \return KDP_PACKET_RECEIVED if successful. + * KDP_PACKET_TIMEOUT if the receice timed out. + */ +KDP_STATUS +NTAPI +KdpReceivePacketLeader( + OUT PULONG PacketLeader) +{ + UCHAR Index = 0, Byte, Buffer[4]; + KDP_STATUS KdStatus; + + /* Set first character to 0 */ + Buffer[0] = 0; + +KdpDbgPrint("KdpReceivePacketLeader\n" ); + + do + { + /* Receive a single Byte */ + KdStatus = KdpReceiveByte(&Byte); + + /* Check for timeout */ + if (KdStatus == KDP_PACKET_TIMEOUT) + { + /* Report timeout */ + KdpDbgPrint("KDP_PACKET_TIMEOUT\n"); + return KDP_PACKET_TIMEOUT; + } + + /* Check if we received a byte */ + if (KdStatus == KDP_PACKET_RECEIVED) + { + /* Check for breakin byte */ + if (Byte == BREAKIN_PACKET_BYTE) + { + KdpDbgPrint("BREAKIN_PACKET_BYTE\n"); + } + + /* Check if this is a valid packet leader byte */ + if (Byte == PACKET_LEADER_BYTE || + Byte == CONTROL_PACKET_LEADER_BYTE) + { + KdpDbgPrint("received byte 0x%x, Index = %d\n", Byte, Index); + /* Check if we match the first byte */ + if (Byte != Buffer[0]) + { + /* No, this is the new byte 0! */ + Index = 0; + } + + /* Store the byte in the buffer */ + Buffer[Index] = Byte; + + /* Continue with next byte */ + Index++; + continue; + } + } + + /* Restart */ + Index = 0; + Buffer[0] = 0; + } + while (Index < 4); + + /* Enable the debugger */ +// KdDebuggerNotPresent = FALSE; + SharedUserData->KdDebuggerEnabled |= 0x00000002; + + /* Return the received packet leader */ + *PacketLeader = *(PULONG)Buffer; + +KdpDbgPrint("KDP_PACKET_RECEIVED\n"); + + return KDP_PACKET_RECEIVED; +} + From 9bdbbfde2f33ba717b5b358f3f71ecbb3c53375b Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Wed, 21 Oct 2009 21:58:30 +0000 Subject: [PATCH 012/286] [KDCOM] - send a PACKET_TYPE_KD_RESEND in some more failure cases - return DataLength in KdReceivePacket - check the trailing byte - move some code out of the loop in KdSendPacket - add a few debugprints, remove some others svn path=/branches/ros-amd64-bringup/; revision=43676 --- reactos/drivers/base/kddll/kddll.c | 69 +++++++++++++++++---------- reactos/drivers/base/kddll/kdserial.c | 5 -- 2 files changed, 44 insertions(+), 30 deletions(-) diff --git a/reactos/drivers/base/kddll/kddll.c b/reactos/drivers/base/kddll/kddll.c index df802da2f04..c716b9f9de0 100644 --- a/reactos/drivers/base/kddll/kddll.c +++ b/reactos/drivers/base/kddll/kddll.c @@ -10,7 +10,7 @@ /* GLOBALS ********************************************************************/ -ULONG CurrentPacketId = INITIAL_PACKET_ID; +ULONG CurrentPacketId = INITIAL_PACKET_ID | SYNC_PACKET_ID; // HACK!!! DBGRNT KdpDbgPrint = 0; @@ -194,7 +194,9 @@ KdReceivePacket( switch (Packet.PacketType) { case PACKET_TYPE_KD_ACKNOWLEDGE: - if (PacketType == PACKET_TYPE_KD_ACKNOWLEDGE) + /* Are we waiting for an ACK packet? */ + if (PacketType == PACKET_TYPE_KD_ACKNOWLEDGE && + Packet.PacketId == (CurrentPacketId & ~SYNC_PACKET_ID)) { /* Remote acknowledges the last packet */ CurrentPacketId ^= 1; @@ -210,6 +212,7 @@ KdReceivePacket( /* Fall through */ case PACKET_TYPE_KD_RESEND: + KdpDbgPrint("KdReceivePacket - got PACKET_TYPE_KD_RESEND\n"); /* Remote wants us to resend the last packet */ return KDP_PACKET_RESEND; @@ -223,13 +226,18 @@ KdReceivePacket( if (PacketType == PACKET_TYPE_KD_ACKNOWLEDGE) { /* We received something different, start over */ - continue; +// continue; + KdpSendControlPacket(PACKET_TYPE_KD_RESEND, 0); + CurrentPacketId ^= 1; + return KDP_PACKET_RECEIVED; } /* Did we get the right packet type? */ if (PacketType != Packet.PacketType) { /* We received something different, start over */ + KdpDbgPrint("KdReceivePacket - wrong PacketType\n"); + KdpSendControlPacket(PACKET_TYPE_KD_RESEND, 0); continue; } @@ -270,8 +278,9 @@ KdReceivePacket( MessageHeader->Length); if (KdStatus != KDP_PACKET_RECEIVED) { - /* Didn't receive data. Start over. */ - KdpDbgPrint("KdReceivePacket - Didn't receive message header data. Start over\n"); + /* Didn't receive data. Packet needs to be resent. */ + KdpDbgPrint("KdReceivePacket - Didn't receive message header data.\n"); + KdpSendControlPacket(PACKET_TYPE_KD_RESEND, 0); continue; } @@ -281,11 +290,14 @@ KdReceivePacket( Checksum = KdpCalculateChecksum(MessageHeader->Buffer, MessageHeader->Length); + /* Calculate the length of the message data */ + *DataLength = Packet.ByteCount - MessageHeader->Length; + /* Shall we receive messsage data? */ if (MessageData) { - /* Calculate the length of the message data */ - MessageData->Length = Packet.ByteCount - MessageHeader->Length; + /* Set the length of the message data */ + MessageData->Length = *DataLength; /* Do we have data? */ if (MessageData->Length) @@ -298,7 +310,8 @@ KdReceivePacket( if (KdStatus != KDP_PACKET_RECEIVED) { /* Didn't receive data. Start over. */ - KdpDbgPrint("KdReceivePacket - Didn't receive message data. Start over\n"); + KdpDbgPrint("KdReceivePacket - Didn't receive message data.\n"); + KdpSendControlPacket(PACKET_TYPE_KD_RESEND, 0); continue; } @@ -311,14 +324,20 @@ KdReceivePacket( /* Compare checksum */ if (Packet.Checksum != Checksum) { - KdpSendControlPacket(PACKET_TYPE_KD_RESEND, CurrentPacketId); KdpDbgPrint("KdReceivePacket - wrong cheksum, got %x, calculated %x\n", Packet.Checksum, Checksum); + KdpSendControlPacket(PACKET_TYPE_KD_RESEND, 0); continue; } /* We must receive a PACKET_TRAILING_BYTE now */ KdStatus = KdpReceiveBuffer(&Byte, sizeof(UCHAR)); + if (KdStatus != KDP_PACKET_RECEIVED || Byte != PACKET_TRAILING_BYTE) + { + KdpDbgPrint("KdReceivePacket - wrong trailing byte (0x%x), status 0x%x\n", Byte, KdStatus); + KdpSendControlPacket(PACKET_TYPE_KD_RESEND, 0); + continue; + } /* Acknowledge the received packet */ KdpSendControlPacket(PACKET_TYPE_KD_ACKNOWLEDGE, Packet.PacketId); @@ -343,23 +362,23 @@ KdSendPacket( KD_PACKET Packet; KDP_STATUS KdStatus; + /* Initialize a KD_PACKET */ + Packet.PacketLeader = PACKET_LEADER; + Packet.PacketType = PacketType; + Packet.ByteCount = MessageHeader->Length; + Packet.Checksum = KdpCalculateChecksum(MessageHeader->Buffer, + MessageHeader->Length); + + /* If we have message data, add it to the packet */ + if (MessageData) + { + Packet.ByteCount += MessageData->Length; + Packet.Checksum += KdpCalculateChecksum(MessageData->Buffer, + MessageData->Length); + } + for (;;) { - /* Initialize a KD_PACKET */ - Packet.PacketLeader = PACKET_LEADER; - Packet.PacketType = PacketType; - Packet.ByteCount = MessageHeader->Length; - Packet.Checksum = KdpCalculateChecksum(MessageHeader->Buffer, - MessageHeader->Length); - - /* If we have message data, add it to the packet */ - if (MessageData) - { - Packet.ByteCount += MessageData->Length; - Packet.Checksum += KdpCalculateChecksum(MessageData->Buffer, - MessageData->Length); - } - /* Set the packet id */ Packet.PacketId = CurrentPacketId; @@ -396,7 +415,7 @@ KdSendPacket( if (PacketType == PACKET_TYPE_KD_DEBUG_IO) { /* No response, silently fail. */ -// return; + return; } /* Packet timed out, send it again */ diff --git a/reactos/drivers/base/kddll/kdserial.c b/reactos/drivers/base/kddll/kdserial.c index 0d4922463f4..16769c913ad 100644 --- a/reactos/drivers/base/kddll/kdserial.c +++ b/reactos/drivers/base/kddll/kdserial.c @@ -80,8 +80,6 @@ KdpReceivePacketLeader( /* Set first character to 0 */ Buffer[0] = 0; -KdpDbgPrint("KdpReceivePacketLeader\n" ); - do { /* Receive a single Byte */ @@ -108,7 +106,6 @@ KdpDbgPrint("KdpReceivePacketLeader\n" ); if (Byte == PACKET_LEADER_BYTE || Byte == CONTROL_PACKET_LEADER_BYTE) { - KdpDbgPrint("received byte 0x%x, Index = %d\n", Byte, Index); /* Check if we match the first byte */ if (Byte != Buffer[0]) { @@ -138,8 +135,6 @@ KdpDbgPrint("KdpReceivePacketLeader\n" ); /* Return the received packet leader */ *PacketLeader = *(PULONG)Buffer; -KdpDbgPrint("KDP_PACKET_RECEIVED\n"); - return KDP_PACKET_RECEIVED; } From dc3965426c1a354ba8a73108170b79955b7c2fd7 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Wed, 21 Oct 2009 23:22:46 +0000 Subject: [PATCH 013/286] [NTOSKRNL] - Comment out some instructions in KiRestoreProcessorControlState for now - move the FreeLdr debugprint hack - Don't increment RIP on an int3 - improve debugprint for KiInvalidOpcodeFault svn path=/branches/ros-amd64-bringup/; revision=43677 --- reactos/ntoskrnl/ke/amd64/cpu.c | 4 ++-- reactos/ntoskrnl/ke/amd64/kiinit.c | 6 +++--- reactos/ntoskrnl/ke/amd64/trap.S | 17 +++++++++++++---- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/reactos/ntoskrnl/ke/amd64/cpu.c b/reactos/ntoskrnl/ke/amd64/cpu.c index 81261baf759..723d5179ca3 100644 --- a/reactos/ntoskrnl/ke/amd64/cpu.c +++ b/reactos/ntoskrnl/ke/amd64/cpu.c @@ -468,8 +468,8 @@ KiRestoreProcessorControlState(PKPROCESSOR_STATE ProcessorState) /* Restore GDT, IDT, LDT and TSS */ __lgdt(&ProcessorState->SpecialRegisters.Gdtr.Limit); - __lldt(&ProcessorState->SpecialRegisters.Ldtr); - __ltr(&ProcessorState->SpecialRegisters.Tr); +// __lldt(&ProcessorState->SpecialRegisters.Ldtr); +// __ltr(&ProcessorState->SpecialRegisters.Tr); __lidt(&ProcessorState->SpecialRegisters.Idtr.Limit); __ldmxcsr(&ProcessorState->SpecialRegisters.MxCsr); diff --git a/reactos/ntoskrnl/ke/amd64/kiinit.c b/reactos/ntoskrnl/ke/amd64/kiinit.c index 0e443445a49..3867cd36b2a 100644 --- a/reactos/ntoskrnl/ke/amd64/kiinit.c +++ b/reactos/ntoskrnl/ke/amd64/kiinit.c @@ -701,15 +701,15 @@ KiSystemStartupReal(IN PLOADER_PARAMETER_BLOCK LoaderBlock) /* Setup the IDT */ KeInitExceptions(); + /* HACK: misuse this function to pass a function pointer to kdcom */ + KdDebuggerInitialize1((PVOID)FrLdrDbgPrint); + /* Initialize debugging system */ KdInitSystem(0, KeLoaderBlock); /* Check for break-in */ // if (KdPollBreakIn()) DbgBreakPointWithStatus(1); - /* HACK: misuse this function to pass a function pointer to kdcom */ - KdDebuggerInitialize1((PVOID)FrLdrDbgPrint); - /* Hack! Wait for the debugger! */ while (!KdPollBreakIn()); diff --git a/reactos/ntoskrnl/ke/amd64/trap.S b/reactos/ntoskrnl/ke/amd64/trap.S index e26b5a10119..2d7b0fae4bf 100644 --- a/reactos/ntoskrnl/ke/amd64/trap.S +++ b/reactos/ntoskrnl/ke/amd64/trap.S @@ -30,6 +30,9 @@ _MsgBreakpointTrap: _MsgUnexpectedInterrupt: .ascii "UnexpectedInterrupt\n\0" +_MsgInvalidOpcodeFault: +.ascii "General protection fault at %p!\n\0" + /* Helper Macros *************************************************************/ #define TRAPFLAG_SYSTEMSERVICE 1 @@ -267,9 +270,6 @@ _MsgUnexpectedInterrupt: mov rdx, rbp call _FrLdrDbgPrint[rip] - /* Increase Rip to skip the int3 */ - inc qword ptr [rbp + KTRAP_FRAME_Rip] - DISPATCH_EXCEPTION STATUS_BREAKPOINT, 3, 0, 0, 0 /* Return */ @@ -310,9 +310,18 @@ _MsgUnexpectedInterrupt: push 0 .allocstack 0x8 - UNIMPLEMENTED KiInvalidOpcodeFault + ENTER_TRAP_FRAME (SIZE_EXCEPTION_RECORD + 0x28), 0 +// DISPATCH_EXCEPTION STATUS_BREAKPOINT, 3, 0, 0, 0 + + mov rdx, [rbp + KTRAP_FRAME_Rip] + lea rcx, _MsgInvalidOpcodeFault[rip] + call _FrLdrDbgPrint[rip] jmp $ + + /* Return */ + LEAVE_TRAP_FRAME + iretq .endproc .proc KiNpxNotAvailableFault From 77fa09edbe54c3a2ee616453892d814d4f88708e Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 22 Oct 2009 11:45:49 +0000 Subject: [PATCH 014/286] Fix KD_CONTEXT member names. svn path=/branches/ros-amd64-bringup/; revision=43682 --- reactos/include/reactos/windbgkd.h | 4 ++-- reactos/ntoskrnl/kd64/kdinit.c | 2 +- reactos/ntoskrnl/kd64/kdlock.c | 8 ++++---- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/reactos/include/reactos/windbgkd.h b/reactos/include/reactos/windbgkd.h index 19e804d52ee..a2ba74a0939 100644 --- a/reactos/include/reactos/windbgkd.h +++ b/reactos/include/reactos/windbgkd.h @@ -220,8 +220,8 @@ typedef struct _KD_PACKET // typedef struct _KD_CONTEXT { - ULONG KdpDefaultRetries; - BOOLEAN KdpControlCPending; + ULONG RetryCount; + BOOLEAN BreakInRequested; } KD_CONTEXT, *PKD_CONTEXT; // diff --git a/reactos/ntoskrnl/kd64/kdinit.c b/reactos/ntoskrnl/kd64/kdinit.c index e5c487c8a3b..1b1ac485fbf 100644 --- a/reactos/ntoskrnl/kd64/kdinit.c +++ b/reactos/ntoskrnl/kd64/kdinit.c @@ -284,7 +284,7 @@ KdInitSystem(IN ULONG BootPhase, if (!KdpDebuggerStructuresInitialized) { /* Set the Debug Switch Routine and Retries*/ - KdpContext.KdpDefaultRetries = 20; + KdpContext.RetryCount = 20; KiDebugSwitchRoutine = KdpSwitchProcessor; /* Initialize the Time Slip DPC */ diff --git a/reactos/ntoskrnl/kd64/kdlock.c b/reactos/ntoskrnl/kd64/kdlock.c index f332eb1c016..0afbbf61cb1 100644 --- a/reactos/ntoskrnl/kd64/kdlock.c +++ b/reactos/ntoskrnl/kd64/kdlock.c @@ -40,11 +40,11 @@ KdpPollBreakInWithPortLock(VOID) if (KdDebuggerEnabled) { /* Check if a CTRL-C is in the queue */ - if (KdpContext.KdpControlCPending) + if (KdpContext.BreakInRequested) { /* Set it and prepare for break */ DoBreak = TRUE; - KdpContext.KdpControlCPending = FALSE; + KdpContext.BreakInRequested = FALSE; } else { @@ -83,12 +83,12 @@ KdPollBreakIn(VOID) Enable = KeDisableInterrupts(); /* Check if a CTRL-C is in the queue */ - if (KdpContext.KdpControlCPending) + if (KdpContext.BreakInRequested) { /* Set it and prepare for break */ KdpControlCPressed = TRUE; DoBreak = TRUE; - KdpContext.KdpControlCPending = FALSE; + KdpContext.BreakInRequested = FALSE; } else { From 7b3ff15e56b26425fe22ac1c0a28641881306235 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 22 Oct 2009 11:49:52 +0000 Subject: [PATCH 015/286] [KDCOM] Better handling for breakin packets svn path=/branches/ros-amd64-bringup/; revision=43683 --- reactos/drivers/base/kddll/kddll.c | 8 ++++++-- reactos/drivers/base/kddll/kdserial.c | 27 ++++++++++++++++++--------- 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/reactos/drivers/base/kddll/kddll.c b/reactos/drivers/base/kddll/kddll.c index c716b9f9de0..ac4700f8fed 100644 --- a/reactos/drivers/base/kddll/kddll.c +++ b/reactos/drivers/base/kddll/kddll.c @@ -125,7 +125,7 @@ KdReceivePacket( OUT PSTRING MessageHeader, OUT PSTRING MessageData, OUT PULONG DataLength, - IN OUT PKD_CONTEXT Context) + IN OUT PKD_CONTEXT KdContext) { UCHAR Byte = 0; KDP_STATUS KdStatus; @@ -144,7 +144,11 @@ KdReceivePacket( KdStatus = KdpReceivePacketLeader(&Packet.PacketLeader); if (KdStatus != KDP_PACKET_RECEIVED) { - /* Couldn't read a correct packet leader. */ + /* Check if we got a breakin */ + if (KdStatus == KDP_PACKET_RESEND) + { + KdContext->BreakInRequested = TRUE; + } return KdStatus; } diff --git a/reactos/drivers/base/kddll/kdserial.c b/reactos/drivers/base/kddll/kdserial.c index 16769c913ad..6964ab95ae6 100644 --- a/reactos/drivers/base/kddll/kdserial.c +++ b/reactos/drivers/base/kddll/kdserial.c @@ -67,7 +67,8 @@ KdpReceiveBuffer( * \brief Recieves a packet leadr from the KD port. * \param PacketLeader Pointer to an ULONG that receives the packet leader. * \return KDP_PACKET_RECEIVED if successful. - * KDP_PACKET_TIMEOUT if the receice timed out. + * KDP_PACKET_TIMEOUT if the receive timed out. + * KDP_PACKET_RESEND if a breakin byte was detected. */ KDP_STATUS NTAPI @@ -82,26 +83,25 @@ KdpReceivePacketLeader( do { - /* Receive a single Byte */ + /* Receive a single byte */ KdStatus = KdpReceiveByte(&Byte); /* Check for timeout */ if (KdStatus == KDP_PACKET_TIMEOUT) { + /* Check if we already got a breakin byte */ + if (Buffer[0] == BREAKIN_PACKET_BYTE) + { + return KDP_PACKET_RESEND; + } + /* Report timeout */ - KdpDbgPrint("KDP_PACKET_TIMEOUT\n"); return KDP_PACKET_TIMEOUT; } /* Check if we received a byte */ if (KdStatus == KDP_PACKET_RECEIVED) { - /* Check for breakin byte */ - if (Byte == BREAKIN_PACKET_BYTE) - { - KdpDbgPrint("BREAKIN_PACKET_BYTE\n"); - } - /* Check if this is a valid packet leader byte */ if (Byte == PACKET_LEADER_BYTE || Byte == CONTROL_PACKET_LEADER_BYTE) @@ -120,6 +120,15 @@ KdpReceivePacketLeader( Index++; continue; } + + /* Check for breakin byte */ + if (Byte == BREAKIN_PACKET_BYTE) + { + KdpDbgPrint("BREAKIN_PACKET_BYTE\n"); + Index = 0; + Buffer[0] = Byte; + continue; + } } /* Restart */ From 6887126ab0330ba526eaf6e5807fa899cc0f3ab9 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 22 Oct 2009 13:21:50 +0000 Subject: [PATCH 016/286] use COM2 as DEBUGPORT, COM1 is for plain text debuglog svn path=/branches/ros-amd64-bringup/; revision=43684 --- reactos/boot/bootdata/txtsetup.sif | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/boot/bootdata/txtsetup.sif b/reactos/boot/bootdata/txtsetup.sif index d132c1dbe1e..29c8f2993fd 100644 --- a/reactos/boot/bootdata/txtsetup.sif +++ b/reactos/boot/bootdata/txtsetup.sif @@ -50,7 +50,7 @@ Cabinet=reactos.cab [SetupData] DefaultPath = \ReactOS OsLoadOptions = "/NOGUIBOOT /NODEBUG" -DbgOsLoadOptions = "/NOGUIBOOT /DEBUGPORT=COM1" +DbgOsLoadOptions = "/NOGUIBOOT /DEBUGPORT=COM2" ;OsLoadOptions = "/NOGUIBOOT /DEBUGPORT=SCREEN" ;OsLoadOptions = "/NOGUIBOOT /DEBUGPORT=BOCHS" From d060a35c58f8ffb62c3af676815539f8fc89596c Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 22 Oct 2009 13:37:01 +0000 Subject: [PATCH 017/286] [KDCOM] - replace KdpDbgPrint with a macro - remove COM port hack svn path=/branches/ros-amd64-bringup/; revision=43685 --- reactos/drivers/base/kddll/kdcom.c | 5 +--- reactos/drivers/base/kddll/kdcom.h | 38 +++++++++++++++------------- reactos/drivers/base/kddll/kddll.c | 40 +++++++++++++++--------------- reactos/drivers/base/kddll/kddll.h | 14 +++++++++-- 4 files changed, 54 insertions(+), 43 deletions(-) diff --git a/reactos/drivers/base/kddll/kdcom.c b/reactos/drivers/base/kddll/kdcom.c index 1de99971d85..409b88e4d91 100644 --- a/reactos/drivers/base/kddll/kdcom.c +++ b/reactos/drivers/base/kddll/kdcom.c @@ -47,7 +47,7 @@ KdpPortInitialize() { ULONG Mode; -KdpDbgPrint("KdpPortInitialize\n"); + KDDBGPRINT("KdpPortInitialize\n"); /* Enable loop mode (set Bit 4 of the MCR) */ WRITE_PORT_UCHAR(ComPortBase + COM_MCR, MCR_LOOP); @@ -202,9 +202,6 @@ KdDebuggerInitialize0( } } - // HACK use com1 for FrLdrDbg, com2 for WinDbg - ComPortNumber = 2; - /* Get base address */ ComPortBase = UlongToPtr(BaseArray[ComPortNumber]); diff --git a/reactos/drivers/base/kddll/kdcom.h b/reactos/drivers/base/kddll/kdcom.h index 2c1bd544fb4..b7cc9af04b3 100644 --- a/reactos/drivers/base/kddll/kdcom.h +++ b/reactos/drivers/base/kddll/kdcom.h @@ -6,16 +6,19 @@ * PROGRAMMER: Timo Kreuzer (timo.kreuzer@ewactos.org) */ +#ifndef _KDCOM_H_ +#define _KDCOM_H_ + #define COM_DAT 0x00 -#define COM_IEN 0x01 // interrupt enable register -#define COM_FCR 0x02 // FIFO Control Register -#define COM_LCR 0x03 // line control registers -#define COM_MCR 0x04 // modem control reg -#define COM_LSR 0x05 // line status register -#define COM_MSR 0x06 // modem status register -#define COM_SCR 0x07 // scratch register -#define COM_DLL 0x00 // divisor latch least sig -#define COM_DLM 0x01 // divisor latch most sig +#define COM_IEN 0x01 /* interrupt enable register */ +#define COM_FCR 0x02 /* FIFO Control Register */ +#define COM_LCR 0x03 /* line control registers */ +#define COM_MCR 0x04 /* modem control reg */ +#define COM_LSR 0x05 /* line status register */ +#define COM_MSR 0x06 /* modem status register */ +#define COM_SCR 0x07 /* scratch register */ +#define COM_DLL 0x00 /* divisor latch least sig */ +#define COM_DLM 0x01 /* divisor latch most sig */ #define IEN_ERDA 0x01 #define IEN_ETHRE 0x02 @@ -40,14 +43,15 @@ #define LCR_DLAB 0x80 #define MCR_DTR 0x01 #define MCR_RTS 0x02 -#define MCR_OUT1 0x04 // general purpose output. +#define MCR_OUT1 0x04 /* general purpose output */ #define MCR_OUT2 0x08 -#define MCR_LOOP 0x10 // enables loopback testing mode +#define MCR_LOOP 0x10 /* loopback testing mode */ #define MCR_ALL (MCR_DTR | MCR_RTS | MCR_OUT1 | MCR_OUT2 | MCR_LOOP) -#define LSR_DR 0x01 -#define LSR_TBE 0x20 -#define MSR_CTS 0x10 // (complemented) state of clear to send (CTS). -#define MSR_DSR 0x20 // (complemented) state of data set ready (DSR). -#define MSR_RI 0x40 // (complemented) state of ring indicator (RI). -#define MSR_DCD 0x80 // (complemented) state of data carrier detect (DCD). +#define LSR_DR 0x01 +#define LSR_TBE 0x20 +#define MSR_CTS 0x10 /* (complemented) state of clear to send (CTS). */ +#define MSR_DSR 0x20 /* (complemented) state of data set ready (DSR). */ +#define MSR_RI 0x40 /* (complemented) state of ring indicator (RI). */ +#define MSR_DCD 0x80 /* (complemented) state of data carrier detect (DCD). */ +#endif /* !_KDCOM_H_ */ diff --git a/reactos/drivers/base/kddll/kddll.c b/reactos/drivers/base/kddll/kddll.c index ac4700f8fed..94def8352b5 100644 --- a/reactos/drivers/base/kddll/kddll.c +++ b/reactos/drivers/base/kddll/kddll.c @@ -6,15 +6,16 @@ * PROGRAMMER: Timo Kreuzer (timo.kreuzer@ewactos.org) */ +//#define KDDEBUG /* uncomment to enable debugging this dll */ #include "kddll.h" /* GLOBALS ********************************************************************/ +PFNDBGPRNT KdpDbgPrint = NULL; ULONG CurrentPacketId = INITIAL_PACKET_ID | SYNC_PACKET_ID; -// HACK!!! -DBGRNT KdpDbgPrint = 0; +/* PRIVATE FUNCTIONS **********************************************************/ /****************************************************************************** * \name KdpCalculateChecksum @@ -97,7 +98,7 @@ KdDebuggerInitialize1( { // HACK: misuse this function to get a pointer to FrLdrDbgPrint KdpDbgPrint = (PVOID)LoaderBlock; - KdpDbgPrint("KdDebuggerInitialize1\n"); + KDDBGPRINT("KdDebuggerInitialize1\n"); return STATUS_NOT_IMPLEMENTED; } @@ -210,18 +211,18 @@ KdReceivePacket( continue; case PACKET_TYPE_KD_RESET: - KdpDbgPrint("KdReceivePacket - got a reset packet\n"); + KDDBGPRINT("KdReceivePacket - got a reset packet\n"); KdpSendControlPacket(PACKET_TYPE_KD_RESET, 0); CurrentPacketId = INITIAL_PACKET_ID; /* Fall through */ case PACKET_TYPE_KD_RESEND: - KdpDbgPrint("KdReceivePacket - got PACKET_TYPE_KD_RESEND\n"); + KDDBGPRINT("KdReceivePacket - got PACKET_TYPE_KD_RESEND\n"); /* Remote wants us to resend the last packet */ return KDP_PACKET_RESEND; default: - KdpDbgPrint("KdReceivePacket - got unknown control packet\n"); + KDDBGPRINT("KdReceivePacket - got unknown control packet\n"); return KDP_PACKET_RESEND; } } @@ -229,8 +230,7 @@ KdReceivePacket( /* Did we wait for an ack packet? */ if (PacketType == PACKET_TYPE_KD_ACKNOWLEDGE) { - /* We received something different, start over */ -// continue; + /* We received something different */ KdpSendControlPacket(PACKET_TYPE_KD_RESEND, 0); CurrentPacketId ^= 1; return KDP_PACKET_RECEIVED; @@ -240,7 +240,7 @@ KdReceivePacket( if (PacketType != Packet.PacketType) { /* We received something different, start over */ - KdpDbgPrint("KdReceivePacket - wrong PacketType\n"); + KDDBGPRINT("KdReceivePacket - wrong PacketType\n"); KdpSendControlPacket(PACKET_TYPE_KD_RESEND, 0); continue; } @@ -261,21 +261,21 @@ KdReceivePacket( break; default: - KdpDbgPrint("KdReceivePacket - unknown PacketType\n"); + KDDBGPRINT("KdReceivePacket - unknown PacketType\n"); return KDP_PACKET_RESEND; } -//KdpDbgPrint("KdReceivePacket - got normal PacketType\n"); + //KDDBGPRINT("KdReceivePacket - got normal PacketType\n"); /* Packet smaller than expected? */ if (MessageHeader->Length > Packet.ByteCount) { - KdpDbgPrint("KdReceivePacket - too few data (%d) for type %d\n", + KDDBGPRINT("KdReceivePacket - too few data (%d) for type %d\n", Packet.ByteCount, MessageHeader->Length); MessageHeader->Length = Packet.ByteCount; } -//KdpDbgPrint("KdReceivePacket - got normal PacketType, Buffer = %p\n", MessageHeader->Buffer); + //KDDBGPRINT("KdReceivePacket - got normal PacketType, Buffer = %p\n", MessageHeader->Buffer); /* Receive the message header data */ KdStatus = KdpReceiveBuffer(MessageHeader->Buffer, @@ -283,12 +283,12 @@ KdReceivePacket( if (KdStatus != KDP_PACKET_RECEIVED) { /* Didn't receive data. Packet needs to be resent. */ - KdpDbgPrint("KdReceivePacket - Didn't receive message header data.\n"); + KDDBGPRINT("KdReceivePacket - Didn't receive message header data.\n"); KdpSendControlPacket(PACKET_TYPE_KD_RESEND, 0); continue; } -//KdpDbgPrint("KdReceivePacket - got normal PacketType 3\n"); + //KDDBGPRINT("KdReceivePacket - got normal PacketType 3\n"); /* Calculate checksum for the header data */ Checksum = KdpCalculateChecksum(MessageHeader->Buffer, @@ -306,7 +306,7 @@ KdReceivePacket( /* Do we have data? */ if (MessageData->Length) { - KdpDbgPrint("KdReceivePacket - got data\n"); + KDDBGPRINT("KdReceivePacket - got data\n"); /* Receive the message data */ KdStatus = KdpReceiveBuffer(MessageData->Buffer, @@ -314,7 +314,7 @@ KdReceivePacket( if (KdStatus != KDP_PACKET_RECEIVED) { /* Didn't receive data. Start over. */ - KdpDbgPrint("KdReceivePacket - Didn't receive message data.\n"); + KDDBGPRINT("KdReceivePacket - Didn't receive message data.\n"); KdpSendControlPacket(PACKET_TYPE_KD_RESEND, 0); continue; } @@ -328,7 +328,7 @@ KdReceivePacket( /* Compare checksum */ if (Packet.Checksum != Checksum) { - KdpDbgPrint("KdReceivePacket - wrong cheksum, got %x, calculated %x\n", + KDDBGPRINT("KdReceivePacket - wrong cheksum, got %x, calculated %x\n", Packet.Checksum, Checksum); KdpSendControlPacket(PACKET_TYPE_KD_RESEND, 0); continue; @@ -338,7 +338,7 @@ KdReceivePacket( KdStatus = KdpReceiveBuffer(&Byte, sizeof(UCHAR)); if (KdStatus != KDP_PACKET_RECEIVED || Byte != PACKET_TRAILING_BYTE) { - KdpDbgPrint("KdReceivePacket - wrong trailing byte (0x%x), status 0x%x\n", Byte, KdStatus); + KDDBGPRINT("KdReceivePacket - wrong trailing byte (0x%x), status 0x%x\n", Byte, KdStatus); KdpSendControlPacket(PACKET_TYPE_KD_RESEND, 0); continue; } @@ -346,7 +346,7 @@ KdReceivePacket( /* Acknowledge the received packet */ KdpSendControlPacket(PACKET_TYPE_KD_ACKNOWLEDGE, Packet.PacketId); -//KdpDbgPrint("KdReceivePacket - all ok\n"); + //KDDBGPRINT("KdReceivePacket - all ok\n"); return KDP_PACKET_RECEIVED; } diff --git a/reactos/drivers/base/kddll/kddll.h b/reactos/drivers/base/kddll/kddll.h index a244e1ef591..edae43f8ca8 100644 --- a/reactos/drivers/base/kddll/kddll.h +++ b/reactos/drivers/base/kddll/kddll.h @@ -6,6 +6,9 @@ * PROGRAMMER: Timo Kreuzer (timo.kreuzer@ewactos.org) */ +#ifndef _KDDLL_H_ +#define _KDDLL_H_ + #define NOEXTAPI #include #define NDEBUG @@ -21,8 +24,8 @@ typedef UCHAR BYTE, *PBYTE; -typedef ULONG (*DBGRNT)(const char *Format, ...); -extern DBGRNT KdpDbgPrint; +typedef ULONG (*PFNDBGPRNT)(const char *Format, ...); +extern PFNDBGPRNT KdpDbgPrint; typedef enum { @@ -31,3 +34,10 @@ typedef enum KDP_PACKET_RESEND = 2 } KDP_STATUS; +#ifndef KDDEBUG +#define KDDBGPRINT(...) +#else +#define KDDBGPRINT KdpDbgPrint +#endif + +#endif /* !_KDDLL_H_ */ From 3958fdef23ea929212904b88a086e708a0d0b4c6 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 22 Oct 2009 14:08:11 +0000 Subject: [PATCH 018/286] Don't truncate Processid to ULONG, spotted by Stefan. svn path=/branches/ros-amd64-bringup/; revision=43686 --- reactos/lib/rtl/debug.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/reactos/lib/rtl/debug.c b/reactos/lib/rtl/debug.c index 7c42ebca8f4..6be2a9ab8f3 100644 --- a/reactos/lib/rtl/debug.c +++ b/reactos/lib/rtl/debug.c @@ -328,7 +328,7 @@ DbgLoadImageSymbols(IN PANSI_STRING Name, /* Setup the symbol data */ SymbolInfo.BaseOfDll = Base; - SymbolInfo.ProcessId = (ULONG)ProcessId; + SymbolInfo.ProcessId = ProcessId; /* Get NT Headers */ NtHeader = RtlImageNtHeader(Base); @@ -361,7 +361,7 @@ DbgUnLoadImageSymbols(IN PANSI_STRING Name, /* Setup the symbol data */ SymbolInfo.BaseOfDll = Base; - SymbolInfo.ProcessId = (ULONG)ProcessId; + SymbolInfo.ProcessId = ProcessId; SymbolInfo.CheckSum = SymbolInfo.SizeOfImage = 0; /* Load the symbols */ From e7dd98607adc3980a24b96d2de001cf511fab3e4 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 22 Oct 2009 14:55:26 +0000 Subject: [PATCH 019/286] [KDCOM] - only build it when _WINKD_ is set to 1 in the config file - remove DriverEntry svn path=/branches/ros-amd64-bringup/; revision=43687 --- reactos/drivers/base/directory.rbuild | 16 ++++++++++------ reactos/drivers/base/kddll/kddll.c | 11 +---------- 2 files changed, 11 insertions(+), 16 deletions(-) diff --git a/reactos/drivers/base/directory.rbuild b/reactos/drivers/base/directory.rbuild index e24305d669c..659f8e69357 100644 --- a/reactos/drivers/base/directory.rbuild +++ b/reactos/drivers/base/directory.rbuild @@ -7,12 +7,16 @@ - - - - + + + + + + + + + + diff --git a/reactos/drivers/base/kddll/kddll.c b/reactos/drivers/base/kddll/kddll.c index 94def8352b5..4e4c1ebccb1 100644 --- a/reactos/drivers/base/kddll/kddll.c +++ b/reactos/drivers/base/kddll/kddll.c @@ -59,16 +59,7 @@ KdpSendControlPacket( } -/** Public exported functions *************************************************/ - -NTSTATUS -NTAPI -DriverEntry( - IN PDRIVER_OBJECT DriverObject, - IN PUNICODE_STRING RegistryPath) -{ - return STATUS_SUCCESS; -} +/* PUBLIC FUNCTIONS ***********************************************************/ NTSTATUS NTAPI From 6977519692968ea8be9c2b9b39ee7224fc57558f Mon Sep 17 00:00:00 2001 From: Sylvain Petreolle Date: Fri, 23 Oct 2009 08:25:26 +0000 Subject: [PATCH 020/286] fix build svn path=/branches/ros-amd64-bringup/; revision=43694 --- reactos/drivers/base/directory.rbuild | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/drivers/base/directory.rbuild b/reactos/drivers/base/directory.rbuild index 659f8e69357..e02425c92ea 100644 --- a/reactos/drivers/base/directory.rbuild +++ b/reactos/drivers/base/directory.rbuild @@ -11,7 +11,7 @@ - + From 62047d71635d54ca4dcc093e670406908a446d7e Mon Sep 17 00:00:00 2001 From: Sylvain Petreolle Date: Fri, 23 Oct 2009 09:02:21 +0000 Subject: [PATCH 021/286] comment out svchost.exe, fixes make bootcd. svn path=/branches/ros-amd64-bringup/; revision=43695 --- reactos/boot/bootdata/packages/reactos.dff | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/boot/bootdata/packages/reactos.dff b/reactos/boot/bootdata/packages/reactos.dff index 11ea9a164aa..a877ffe7f3a 100644 --- a/reactos/boot/bootdata/packages/reactos.dff +++ b/reactos/boot/bootdata/packages/reactos.dff @@ -103,7 +103,7 @@ Signature = "$ReactOS$" ;base\services\tcpsvcs\quotes 5 ;base\services\umpnpmgr\umpnpmgr.exe 1 ;base\services\wlansvc\wlansvc.exe 1 -base\services\svchost\svchost.exe 1 +;base\services\svchost\svchost.exe 1 ;base\setup\setup\setup.exe 1 ;base\setup\vmwinst\vmwinst.exe 1 From 3e678b588b9131949523dfe807ad49fb130c5cfb Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Fri, 23 Oct 2009 21:46:49 +0000 Subject: [PATCH 022/286] Fix and simplify KdpSysReadControlSpace, hint by Stefan svn path=/branches/ros-amd64-bringup/; revision=43702 --- reactos/ntoskrnl/kd64/amd64/kdsup.c | 81 ++++++++++++----------------- 1 file changed, 33 insertions(+), 48 deletions(-) diff --git a/reactos/ntoskrnl/kd64/amd64/kdsup.c b/reactos/ntoskrnl/kd64/amd64/kdsup.c index 0ec46469fff..b7980fb1935 100644 --- a/reactos/ntoskrnl/kd64/amd64/kdsup.c +++ b/reactos/ntoskrnl/kd64/amd64/kdsup.c @@ -176,61 +176,46 @@ KdpSysReadControlSpace(IN ULONG Processor, OUT PULONG ActualLength) { PVOID ControlStart; - ULONG RealLength; + PKPRCB Prcb = KiProcessorBlock[Processor]; + PKIPCR Pcr = CONTAINING_RECORD(Prcb, KIPCR, Prcb); - if ((ULONG)BaseAddress <= 2) + switch (BaseAddress) { - PKPRCB Prcb = KiProcessorBlock[Processor]; - PKIPCR Pcr = CONTAINING_RECORD(Prcb, KIPCR, Prcb); + case AMD64_DEBUG_CONTROL_SPACE_KPCR: + /* Copy a pointer to the Pcr */ + ControlStart = &Pcr; + *ActualLength = sizeof(PVOID); + break; - switch ((ULONG_PTR)BaseAddress) - { - case AMD64_DEBUG_CONTROL_SPACE_KPCR: - /* Copy a pointer to the Pcr */ - ControlStart = &Pcr; - RealLength = sizeof(PVOID); - break; + case AMD64_DEBUG_CONTROL_SPACE_KPRCB: + /* Copy a pointer to the Prcb */ + ControlStart = &Prcb; + *ActualLength = sizeof(PVOID); + break; - case AMD64_DEBUG_CONTROL_SPACE_KPRCB: - /* Copy a pointer to the Prcb */ - ControlStart = &Prcb; - RealLength = sizeof(PVOID); - break; + case AMD64_DEBUG_CONTROL_SPACE_KSPECIAL: + /* Copy SpecialRegisters */ + ControlStart = &Prcb->ProcessorState.SpecialRegisters; + *ActualLength = sizeof(KSPECIAL_REGISTERS); + break; - case AMD64_DEBUG_CONTROL_SPACE_KSPECIAL: - /* Copy SpecialRegisters */ - ControlStart = &Prcb->ProcessorState.SpecialRegisters; - RealLength = sizeof(KSPECIAL_REGISTERS); - break; + case AMD64_DEBUG_CONTROL_SPACE_KTHREAD: + /* Copy a pointer to the current Thread */ + ControlStart = &Prcb->CurrentThread; + *ActualLength = sizeof(PVOID); + break; - case AMD64_DEBUG_CONTROL_SPACE_KTHREAD: - /* Copy a pointer to the current Thread */ - ControlStart = &Prcb->CurrentThread; - RealLength = sizeof(PVOID); - break; - - default: - RealLength = 0; - ControlStart = NULL; - ASSERT(FALSE); - return STATUS_UNSUCCESSFUL; - } - - if (RealLength < Length) Length = RealLength; - - /* Copy the memory */ - RtlCopyMemory(Buffer, ControlStart, Length); - *ActualLength = Length; - - /* Finish up */ - return STATUS_SUCCESS; - } - else - { - /* Invalid request */ - *ActualLength = 0; - return STATUS_UNSUCCESSFUL; + default: + *ActualLength = 0; + ASSERT(FALSE); + return STATUS_UNSUCCESSFUL; } + + /* Copy the memory */ + RtlCopyMemory(Buffer, ControlStart, min(Length, *ActualLength)); + + /* Finish up */ + return STATUS_SUCCESS; } NTSTATUS From 1987b471102fd11e68f0acdbca554703ee79937a Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sun, 25 Oct 2009 11:37:17 +0000 Subject: [PATCH 023/286] [KDCOM] - Check the PacketType only after the whole message was received and just skip the message and restart when it's not what we wanted. svn path=/branches/ros-amd64-bringup/; revision=43738 --- reactos/drivers/base/kddll/kddll.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/reactos/drivers/base/kddll/kddll.c b/reactos/drivers/base/kddll/kddll.c index 4e4c1ebccb1..5736c6995fa 100644 --- a/reactos/drivers/base/kddll/kddll.c +++ b/reactos/drivers/base/kddll/kddll.c @@ -227,15 +227,6 @@ KdReceivePacket( return KDP_PACKET_RECEIVED; } - /* Did we get the right packet type? */ - if (PacketType != Packet.PacketType) - { - /* We received something different, start over */ - KDDBGPRINT("KdReceivePacket - wrong PacketType\n"); - KdpSendControlPacket(PACKET_TYPE_KD_RESEND, 0); - continue; - } - /* Get size of the message header */ switch (Packet.PacketType) { @@ -334,6 +325,15 @@ KdReceivePacket( continue; } + /* Did we get the right packet type? */ + if (PacketType != Packet.PacketType) + { + /* We received something different, ignore it. */ + KDDBGPRINT("KdReceivePacket - wrong PacketType\n"); + KdpSendControlPacket(PACKET_TYPE_KD_ACKNOWLEDGE, Packet.PacketId); + continue; + } + /* Acknowledge the received packet */ KdpSendControlPacket(PACKET_TYPE_KD_ACKNOWLEDGE, Packet.PacketId); From 067454570d0e91da76962a4018a1daaa784498d7 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sun, 25 Oct 2009 11:55:04 +0000 Subject: [PATCH 024/286] [KDCOM] - Compare checksum after retreiving the full packet - simplify code svn path=/branches/ros-amd64-bringup/; revision=43739 --- reactos/drivers/base/kddll/kddll.c | 30 ++++++++++++++---------------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/reactos/drivers/base/kddll/kddll.c b/reactos/drivers/base/kddll/kddll.c index 5736c6995fa..685a9d9d2c4 100644 --- a/reactos/drivers/base/kddll/kddll.c +++ b/reactos/drivers/base/kddll/kddll.c @@ -307,15 +307,6 @@ KdReceivePacket( } } - /* Compare checksum */ - if (Packet.Checksum != Checksum) - { - KDDBGPRINT("KdReceivePacket - wrong cheksum, got %x, calculated %x\n", - Packet.Checksum, Checksum); - KdpSendControlPacket(PACKET_TYPE_KD_RESEND, 0); - continue; - } - /* We must receive a PACKET_TRAILING_BYTE now */ KdStatus = KdpReceiveBuffer(&Byte, sizeof(UCHAR)); if (KdStatus != KDP_PACKET_RECEIVED || Byte != PACKET_TRAILING_BYTE) @@ -325,21 +316,28 @@ KdReceivePacket( continue; } - /* Did we get the right packet type? */ - if (PacketType != Packet.PacketType) + /* Compare checksum */ + if (Packet.Checksum != Checksum) { - /* We received something different, ignore it. */ - KDDBGPRINT("KdReceivePacket - wrong PacketType\n"); - KdpSendControlPacket(PACKET_TYPE_KD_ACKNOWLEDGE, Packet.PacketId); + KDDBGPRINT("KdReceivePacket - wrong cheksum, got %x, calculated %x\n", + Packet.Checksum, Checksum); + KdpSendControlPacket(PACKET_TYPE_KD_RESEND, 0); continue; } /* Acknowledge the received packet */ KdpSendControlPacket(PACKET_TYPE_KD_ACKNOWLEDGE, Packet.PacketId); - //KDDBGPRINT("KdReceivePacket - all ok\n"); + /* Did we get the right packet type? */ + if (PacketType == Packet.PacketType) + { + /* Yes, return success */ + //KDDBGPRINT("KdReceivePacket - all ok\n"); + return KDP_PACKET_RECEIVED; + } - return KDP_PACKET_RECEIVED; + /* We received something different, ignore it. */ + KDDBGPRINT("KdReceivePacket - wrong PacketType\n"); } return KDP_PACKET_RECEIVED; From 87ab5d0e6dbea26b9f91806acaeba1d171bb4f84 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sun, 25 Oct 2009 21:47:53 +0000 Subject: [PATCH 025/286] - Pass pointer to debugprint function to the kernel in LoaderBlock->u.I386.CommonDataArea - comment out __lldt svn path=/branches/ros-amd64-bringup/; revision=43757 --- reactos/boot/freeldr/freeldr/windows/amd64/ntsetup.c | 2 +- reactos/boot/freeldr/freeldr/windows/amd64/wlmemory.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/reactos/boot/freeldr/freeldr/windows/amd64/ntsetup.c b/reactos/boot/freeldr/freeldr/windows/amd64/ntsetup.c index 364ebee72ef..b6048e792d6 100644 --- a/reactos/boot/freeldr/freeldr/windows/amd64/ntsetup.c +++ b/reactos/boot/freeldr/freeldr/windows/amd64/ntsetup.c @@ -46,7 +46,7 @@ void WinLdrSetupForNt(PLOADER_PARAMETER_BLOCK LoaderBlock, ULONG_PTR Tss = 0; ULONG BlockSize, NumPages; - LoaderBlock->u.I386.CommonDataArea = NULL; // Force No ABIOS support + LoaderBlock->u.I386.CommonDataArea = (PVOID)DbgPrint; // HACK LoaderBlock->u.I386.MachineType = MACHINE_TYPE_ISA; /* Allocate 2 pages for PCR */ diff --git a/reactos/boot/freeldr/freeldr/windows/amd64/wlmemory.c b/reactos/boot/freeldr/freeldr/windows/amd64/wlmemory.c index 4546ffeb728..2f8b1584771 100644 --- a/reactos/boot/freeldr/freeldr/windows/amd64/wlmemory.c +++ b/reactos/boot/freeldr/freeldr/windows/amd64/wlmemory.c @@ -342,7 +342,7 @@ WinLdrSetProcessorContext(PVOID GdtIdt, IN ULONG64 Pcr, IN ULONG64 Tss) WinLdrSetupIdt((PVOID)((ULONG64)GdtIdt + 2048)); // HACK! /* LDT is unused */ - __lldt(0); +// __lldt(0); /* Load selectors for DS/ES/FS/GS/SS */ Ke386SetDs(KGDT_64_DATA | RPL_MASK); // 0x2b From 0076b6520b7e49185c3bd6f11318bf01867b874a Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sun, 25 Oct 2009 23:28:26 +0000 Subject: [PATCH 026/286] revert 43682, fix kdcom build svn path=/branches/ros-amd64-bringup/; revision=43763 --- reactos/drivers/base/kddll/kddll.c | 2 +- reactos/drivers/base/kddll/kddll.h | 42 ++++++++++++++++++++++++++++++ reactos/include/reactos/windbgkd.h | 4 +-- reactos/ntoskrnl/kd64/kdinit.c | 2 +- reactos/ntoskrnl/kd64/kdlock.c | 8 +++--- 5 files changed, 50 insertions(+), 8 deletions(-) diff --git a/reactos/drivers/base/kddll/kddll.c b/reactos/drivers/base/kddll/kddll.c index 685a9d9d2c4..eb65cd9d865 100644 --- a/reactos/drivers/base/kddll/kddll.c +++ b/reactos/drivers/base/kddll/kddll.c @@ -139,7 +139,7 @@ KdReceivePacket( /* Check if we got a breakin */ if (KdStatus == KDP_PACKET_RESEND) { - KdContext->BreakInRequested = TRUE; + KdContext->KdpControlCPending = TRUE; } return KdStatus; } diff --git a/reactos/drivers/base/kddll/kddll.h b/reactos/drivers/base/kddll/kddll.h index edae43f8ca8..81a20c5a1b5 100644 --- a/reactos/drivers/base/kddll/kddll.h +++ b/reactos/drivers/base/kddll/kddll.h @@ -40,4 +40,46 @@ typedef enum #define KDDBGPRINT KdpDbgPrint #endif +VOID +NTAPI +KdpSendBuffer( + IN PVOID Buffer, + IN ULONG Size); + +KDP_STATUS +NTAPI +KdpReceiveBuffer( + OUT PVOID Buffer, + IN ULONG Size); + +KDP_STATUS +NTAPI +KdpReceivePacketLeader( + OUT PULONG PacketLeader); + +VOID +NTAPI +KdpSendByte(IN BYTE Byte); + +KDP_STATUS +NTAPI +KdpPollByte(OUT PBYTE OutByte); + +KDP_STATUS +NTAPI +KdpReceiveByte(OUT PBYTE OutByte); + +KDP_STATUS +NTAPI +KdpPollBreakIn(); + + +#if 0 +NTSTATUS +NTAPI +KdDebuggerInitialize0( + IN PLOADER_PARAMETER_BLOCK LoaderBlock OPTIONAL); +#endif + + #endif /* !_KDDLL_H_ */ diff --git a/reactos/include/reactos/windbgkd.h b/reactos/include/reactos/windbgkd.h index d53195a7201..920f4ecddba 100644 --- a/reactos/include/reactos/windbgkd.h +++ b/reactos/include/reactos/windbgkd.h @@ -220,8 +220,8 @@ typedef struct _KD_PACKET // typedef struct _KD_CONTEXT { - ULONG RetryCount; - BOOLEAN BreakInRequested; + ULONG KdpDefaultRetries; + BOOLEAN KdpControlCPending; } KD_CONTEXT, *PKD_CONTEXT; // diff --git a/reactos/ntoskrnl/kd64/kdinit.c b/reactos/ntoskrnl/kd64/kdinit.c index aa2e4e900bc..77c0b1aa192 100644 --- a/reactos/ntoskrnl/kd64/kdinit.c +++ b/reactos/ntoskrnl/kd64/kdinit.c @@ -285,7 +285,7 @@ KdInitSystem(IN ULONG BootPhase, if (!KdpDebuggerStructuresInitialized) { /* Set the Debug Switch Routine and Retries*/ - KdpContext.RetryCount = 20; + KdpContext.KdpDefaultRetries = 20; KiDebugSwitchRoutine = KdpSwitchProcessor; /* Initialize the Time Slip DPC */ diff --git a/reactos/ntoskrnl/kd64/kdlock.c b/reactos/ntoskrnl/kd64/kdlock.c index 0afbbf61cb1..f332eb1c016 100644 --- a/reactos/ntoskrnl/kd64/kdlock.c +++ b/reactos/ntoskrnl/kd64/kdlock.c @@ -40,11 +40,11 @@ KdpPollBreakInWithPortLock(VOID) if (KdDebuggerEnabled) { /* Check if a CTRL-C is in the queue */ - if (KdpContext.BreakInRequested) + if (KdpContext.KdpControlCPending) { /* Set it and prepare for break */ DoBreak = TRUE; - KdpContext.BreakInRequested = FALSE; + KdpContext.KdpControlCPending = FALSE; } else { @@ -83,12 +83,12 @@ KdPollBreakIn(VOID) Enable = KeDisableInterrupts(); /* Check if a CTRL-C is in the queue */ - if (KdpContext.BreakInRequested) + if (KdpContext.KdpControlCPending) { /* Set it and prepare for break */ KdpControlCPressed = TRUE; DoBreak = TRUE; - KdpContext.BreakInRequested = FALSE; + KdpContext.KdpControlCPending = FALSE; } else { From 39dcdc086e447f483995e091ce387159edcedf2e Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 26 Oct 2009 02:11:03 +0000 Subject: [PATCH 027/286] [KDCOM] - KdpDbgPrint -> KDDBGPRINT - enable KdDebuggerNotPresent change svn path=/branches/ros-amd64-bringup/; revision=43766 --- reactos/drivers/base/kddll/kddll.rbuild | 1 + reactos/drivers/base/kddll/kdserial.c | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/reactos/drivers/base/kddll/kddll.rbuild b/reactos/drivers/base/kddll/kddll.rbuild index 4e243beca1c..3fca485e8e7 100644 --- a/reactos/drivers/base/kddll/kddll.rbuild +++ b/reactos/drivers/base/kddll/kddll.rbuild @@ -10,6 +10,7 @@ . + ntoskrnl kdserial.c diff --git a/reactos/drivers/base/kddll/kdserial.c b/reactos/drivers/base/kddll/kdserial.c index 6964ab95ae6..14a3c4ecb2c 100644 --- a/reactos/drivers/base/kddll/kdserial.c +++ b/reactos/drivers/base/kddll/kdserial.c @@ -124,7 +124,7 @@ KdpReceivePacketLeader( /* Check for breakin byte */ if (Byte == BREAKIN_PACKET_BYTE) { - KdpDbgPrint("BREAKIN_PACKET_BYTE\n"); + KDDBGPRINT("BREAKIN_PACKET_BYTE\n"); Index = 0; Buffer[0] = Byte; continue; @@ -138,7 +138,7 @@ KdpReceivePacketLeader( while (Index < 4); /* Enable the debugger */ -// KdDebuggerNotPresent = FALSE; + KdDebuggerNotPresent = FALSE; SharedUserData->KdDebuggerEnabled |= 0x00000002; /* Return the received packet leader */ From 7be05b3ec695e67b706a7cc16b6ca527871d71f6 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 26 Oct 2009 03:16:46 +0000 Subject: [PATCH 028/286] [KDCOM] - Check the received PacketId - Add retry count to KdSendPacket - instantly return resend packets svn path=/branches/ros-amd64-bringup/; revision=43768 --- reactos/drivers/base/kddll/kddll.c | 38 ++++++++++++++++++++++++++---- 1 file changed, 33 insertions(+), 5 deletions(-) diff --git a/reactos/drivers/base/kddll/kddll.c b/reactos/drivers/base/kddll/kddll.c index eb65cd9d865..c8754fef735 100644 --- a/reactos/drivers/base/kddll/kddll.c +++ b/reactos/drivers/base/kddll/kddll.c @@ -13,6 +13,7 @@ PFNDBGPRNT KdpDbgPrint = NULL; ULONG CurrentPacketId = INITIAL_PACKET_ID | SYNC_PACKET_ID; +ULONG RemotePacketId = 0; /* PRIVATE FUNCTIONS **********************************************************/ @@ -152,6 +153,13 @@ KdReceivePacket( continue; } + /* Check if we got a resend packet */ + if (Packet.PacketLeader == CONTROL_PACKET_LEADER && + Packet.PacketType == PACKET_TYPE_KD_RESEND) + { + return KDP_PACKET_RESEND; + } + /* Step 3 - Read ByteCount */ KdStatus = KdpReceiveBuffer(&Packet.ByteCount, sizeof(USHORT)); if (KdStatus != KDP_PACKET_RECEIVED || Packet.ByteCount > PACKET_MAX_SIZE) @@ -205,6 +213,7 @@ KdReceivePacket( KDDBGPRINT("KdReceivePacket - got a reset packet\n"); KdpSendControlPacket(PACKET_TYPE_KD_RESET, 0); CurrentPacketId = INITIAL_PACKET_ID; + RemotePacketId = INITIAL_PACKET_ID; /* Fall through */ case PACKET_TYPE_KD_RESEND: @@ -255,6 +264,8 @@ KdReceivePacket( KDDBGPRINT("KdReceivePacket - too few data (%d) for type %d\n", Packet.ByteCount, MessageHeader->Length); MessageHeader->Length = Packet.ByteCount; + KdpSendControlPacket(PACKET_TYPE_KD_RESEND, 0); + continue; } //KDDBGPRINT("KdReceivePacket - got normal PacketType, Buffer = %p\n", MessageHeader->Buffer); @@ -328,11 +339,19 @@ KdReceivePacket( /* Acknowledge the received packet */ KdpSendControlPacket(PACKET_TYPE_KD_ACKNOWLEDGE, Packet.PacketId); + /* Check if the received PacketId is ok */ + if (Packet.PacketId != RemotePacketId) + { + /* Continue with next packet */ + continue; + } + /* Did we get the right packet type? */ if (PacketType == Packet.PacketType) { /* Yes, return success */ //KDDBGPRINT("KdReceivePacket - all ok\n"); + RemotePacketId ^= 1; return KDP_PACKET_RECEIVED; } @@ -354,6 +373,7 @@ KdSendPacket( { KD_PACKET Packet; KDP_STATUS KdStatus; + ULONG Retries; /* Initialize a KD_PACKET */ Packet.PacketLeader = PACKET_LEADER; @@ -370,7 +390,9 @@ KdSendPacket( MessageData->Length); } - for (;;) + Retries = Context->KdpDefaultRetries; + + do { /* Set the packet id */ Packet.PacketId = CurrentPacketId; @@ -392,10 +414,10 @@ KdSendPacket( /* Wait for acknowledge */ KdStatus = KdReceivePacket(PACKET_TYPE_KD_ACKNOWLEDGE, - NULL, - NULL, - 0, - NULL); + NULL, + NULL, + 0, + Context); /* Did we succeed? */ if (KdStatus == KDP_PACKET_RECEIVED) @@ -411,8 +433,14 @@ KdSendPacket( return; } + if (KdStatus == KDP_PACKET_TIMEOUT) + { + Retries--; + } + /* Packet timed out, send it again */ } + while (Retries > 0); return; } From 6b92b26b8e8bbcb36bb379639144479a6cecb649 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 26 Oct 2009 03:24:03 +0000 Subject: [PATCH 029/286] [KDCOM] For unknown reasons it's not enough to check LSR if the port is ready to receive or not. Adding additional port reads improves the reliability of the data massively. Now it's possible to use kdcom on windows XP! svn path=/branches/ros-amd64-bringup/; revision=43770 --- reactos/drivers/base/kddll/kdcom.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/reactos/drivers/base/kddll/kdcom.c b/reactos/drivers/base/kddll/kdcom.c index 409b88e4d91..22d806c0720 100644 --- a/reactos/drivers/base/kddll/kdcom.c +++ b/reactos/drivers/base/kddll/kdcom.c @@ -216,6 +216,11 @@ KdpSendByte(IN BYTE Byte) /* Wait for the port to be ready */ while ((READ_PORT_UCHAR(ComPortBase + COM_LSR) & LSR_TBE) == 0); + /* This is needed due to subtle timing issues */ + READ_PORT_UCHAR(ComPortBase + COM_MSR); + while ((READ_PORT_UCHAR(ComPortBase + COM_LSR) & LSR_TBE) == 0); + READ_PORT_UCHAR(ComPortBase + COM_MSR); + /* Send the byte */ WRITE_PORT_UCHAR(ComPortBase + COM_DAT, Byte); } @@ -224,6 +229,8 @@ KDP_STATUS NTAPI KdpPollByte(OUT PBYTE OutByte) { + READ_PORT_UCHAR(ComPortBase + COM_MSR); // Timing + /* Check if data is available */ if ((READ_PORT_UCHAR(ComPortBase + COM_LSR) & LSR_DR)) { From 0abf32cea7e7ab0254960d77bcfbdfecff13b8c2 Mon Sep 17 00:00:00 2001 From: Daniel Reimer Date: Mon, 26 Oct 2009 12:07:33 +0000 Subject: [PATCH 030/286] Fixed build with MinGW-w64 4.4.3 svn path=/branches/ros-amd64-bringup/; revision=43775 --- reactos/boot/freeldr/freeldr/arch/amd64/fathelp.S | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/reactos/boot/freeldr/freeldr/arch/amd64/fathelp.S b/reactos/boot/freeldr/freeldr/arch/amd64/fathelp.S index 94d4eb6f90a..f799cb9978a 100644 --- a/reactos/boot/freeldr/freeldr/arch/amd64/fathelp.S +++ b/reactos/boot/freeldr/freeldr/arch/amd64/fathelp.S @@ -155,7 +155,7 @@ GetFatEntry16: add bx,dx mov es,bx mov bx,ax // Restore FAT entry offset - mov ax, [es:bx] // Get FAT entry + mov ax, es:[bx] // Get FAT entry ret @@ -173,7 +173,7 @@ GetFatEntry12: mov bx,0x7000 mov es,bx mov bx,ax // Put FAT entry offset into BX - mov ax, [es:bx] // Get FAT entry + mov ax, es:[bx] // Get FAT entry pop cx // Get cluster number from stack and cx,1 jz UseLow12Bits From d65a5407b5e47770d7242bb559c5cd6bd09d15d5 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 26 Oct 2009 12:09:05 +0000 Subject: [PATCH 031/286] [KDCOM] - take the MessageHeader length from MaximumLength field instead of depending on the packet type - Context -> KdContext - remove redundant return svn path=/branches/ros-amd64-bringup/; revision=43776 --- reactos/drivers/base/kddll/kddll.c | 36 +++++++----------------------- 1 file changed, 8 insertions(+), 28 deletions(-) diff --git a/reactos/drivers/base/kddll/kddll.c b/reactos/drivers/base/kddll/kddll.c index c8754fef735..5f7dbacb93a 100644 --- a/reactos/drivers/base/kddll/kddll.c +++ b/reactos/drivers/base/kddll/kddll.c @@ -162,7 +162,7 @@ KdReceivePacket( /* Step 3 - Read ByteCount */ KdStatus = KdpReceiveBuffer(&Packet.ByteCount, sizeof(USHORT)); - if (KdStatus != KDP_PACKET_RECEIVED || Packet.ByteCount > PACKET_MAX_SIZE) + if (KdStatus != KDP_PACKET_RECEIVED) { /* Didn't receive ByteCount or it's too big. Start over. */ continue; @@ -237,29 +237,11 @@ KdReceivePacket( } /* Get size of the message header */ - switch (Packet.PacketType) - { - case PACKET_TYPE_KD_STATE_CHANGE64: - MessageHeader->Length = sizeof(DBGKD_WAIT_STATE_CHANGE64); - break; + MessageHeader->Length = MessageHeader->MaximumLength; - case PACKET_TYPE_KD_STATE_MANIPULATE: - MessageHeader->Length = sizeof(DBGKD_MANIPULATE_STATE64); - break; - - case PACKET_TYPE_KD_DEBUG_IO: - MessageHeader->Length = sizeof(DBGKD_DEBUG_IO); - break; - - default: - KDDBGPRINT("KdReceivePacket - unknown PacketType\n"); - return KDP_PACKET_RESEND; - } - - //KDDBGPRINT("KdReceivePacket - got normal PacketType\n"); - - /* Packet smaller than expected? */ - if (MessageHeader->Length > Packet.ByteCount) + /* Packet smaller than expected or too big? */ + if (Packet.ByteCount < MessageHeader->Length || + Packet.ByteCount > PACKET_MAX_SIZE) { KDDBGPRINT("KdReceivePacket - too few data (%d) for type %d\n", Packet.ByteCount, MessageHeader->Length); @@ -369,7 +351,7 @@ KdSendPacket( IN ULONG PacketType, IN PSTRING MessageHeader, IN PSTRING MessageData, - IN OUT PKD_CONTEXT Context) + IN OUT PKD_CONTEXT KdContext) { KD_PACKET Packet; KDP_STATUS KdStatus; @@ -390,7 +372,7 @@ KdSendPacket( MessageData->Length); } - Retries = Context->KdpDefaultRetries; + Retries = KdContext->KdpDefaultRetries; do { @@ -417,7 +399,7 @@ KdSendPacket( NULL, NULL, 0, - Context); + KdContext); /* Did we succeed? */ if (KdStatus == KDP_PACKET_RECEIVED) @@ -441,7 +423,5 @@ KdSendPacket( /* Packet timed out, send it again */ } while (Retries > 0); - - return; } From e4ccd930377f0b98fcf7b9b2bf7b662f9ee6a03a Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 26 Oct 2009 12:22:32 +0000 Subject: [PATCH 032/286] - Fix definition of KdDebuggerNotPresent for gcc, the MS definition is broken, don't know if it's needed that way for msvc. svn path=/branches/ros-amd64-bringup/; revision=43777 --- reactos/include/ddk/winddk.h | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/reactos/include/ddk/winddk.h b/reactos/include/ddk/winddk.h index 096056478ac..85a31930b0b 100644 --- a/reactos/include/ddk/winddk.h +++ b/reactos/include/ddk/winddk.h @@ -10417,7 +10417,14 @@ DbgSetDebugFilterState( #endif /* !DBG */ -#if defined(_NTDDK_) || defined(_NTHAL_) || defined(_WDMDDK_) || defined(_NTOSP_) +#if defined(__GNUC__) + +extern NTKERNELAPI BOOLEAN KdDebuggerNotPresent; +extern NTKERNELAPI BOOLEAN KdDebuggerEnabled; +#define KD_DEBUGGER_ENABLED KdDebuggerEnabled +#define KD_DEBUGGER_NOT_PRESENT KdDebuggerNotPresent + +#elif defined(_NTDDK_) || defined(_NTHAL_) || defined(_WDMDDK_) || defined(_NTOSP_) extern NTKERNELAPI PBOOLEAN KdDebuggerNotPresent; extern NTKERNELAPI PBOOLEAN KdDebuggerEnabled; From 1e6d45e0364e67d5d597a111c7d39a4c84319a00 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 26 Oct 2009 12:51:26 +0000 Subject: [PATCH 033/286] [KDCOM] - In case of failing to receive a part of the packet, return the status to the caller instead of continuing. svn path=/branches/ros-amd64-bringup/; revision=43779 --- reactos/drivers/base/kddll/kddll.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/reactos/drivers/base/kddll/kddll.c b/reactos/drivers/base/kddll/kddll.c index 5f7dbacb93a..43aca1d534a 100644 --- a/reactos/drivers/base/kddll/kddll.c +++ b/reactos/drivers/base/kddll/kddll.c @@ -149,8 +149,8 @@ KdReceivePacket( KdStatus = KdpReceiveBuffer(&Packet.PacketType, sizeof(USHORT)); if (KdStatus != KDP_PACKET_RECEIVED) { - /* Didn't receive a PacketType or PacketType is bad. Start over. */ - continue; + /* Didn't receive a PacketType. */ + return KdStatus; } /* Check if we got a resend packet */ @@ -164,16 +164,16 @@ KdReceivePacket( KdStatus = KdpReceiveBuffer(&Packet.ByteCount, sizeof(USHORT)); if (KdStatus != KDP_PACKET_RECEIVED) { - /* Didn't receive ByteCount or it's too big. Start over. */ - continue; + /* Didn't receive ByteCount. */ + return KdStatus; } /* Step 4 - Read PacketId */ KdStatus = KdpReceiveBuffer(&Packet.PacketId, sizeof(ULONG)); if (KdStatus != KDP_PACKET_RECEIVED) { - /* Didn't receive PacketId. Start over. */ - continue; + /* Didn't receive PacketId. */ + return KdStatus; } /* @@ -188,8 +188,8 @@ KdReceivePacket( KdStatus = KdpReceiveBuffer(&Packet.Checksum, sizeof(ULONG)); if (KdStatus != KDP_PACKET_RECEIVED) { - /* Didn't receive Checksum. Start over. */ - continue; + /* Didn't receive Checksum. */ + return KdStatus; } /* Step 6 - Handle control packets */ @@ -421,6 +421,7 @@ KdSendPacket( } /* Packet timed out, send it again */ + KDDBGPRINT("KdSendPacket got KdStatus 0x%x\n", KdStatus); } while (Retries > 0); } From c9c20c50ef3ad8e6587b65a028b8d98302c726a2 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Tue, 27 Oct 2009 14:31:16 +0000 Subject: [PATCH 034/286] Kill floating point from RTL sprintf. It was leading to crashing freeldr when compiled with never gccs. svn path=/branches/ros-amd64-bringup/; revision=43792 --- reactos/lib/rtl/sprintf.c | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/reactos/lib/rtl/sprintf.c b/reactos/lib/rtl/sprintf.c index 252de8dab0e..0b6b8ca77d4 100644 --- a/reactos/lib/rtl/sprintf.c +++ b/reactos/lib/rtl/sprintf.c @@ -34,6 +34,7 @@ typedef struct { unsigned int sign:1; } double_t; +#if 0 static __inline int @@ -62,7 +63,7 @@ _isnan(double __x) x.__x = &__x; return ( x.x->exponent == 0x7ff && ( x.x->mantissah != 0 || x.x->mantissal != 0 )); } - +#endif static __inline @@ -179,6 +180,7 @@ number(char * buf, char * end, long long num, int base, int size, int precision, return buf; } +#if 0 static char * numberf(char * buf, char * end, double num, int base, int size, int precision, int type) { @@ -283,6 +285,7 @@ numberf(char * buf, char * end, double num, int base, int size, int precision, i } return buf; } +#endif static char* string(char* buf, char* end, const char* s, int len, int field_width, int precision, int flags) @@ -389,7 +392,7 @@ int __cdecl _vsnprintf(char *buf, size_t cnt, const char *fmt, va_list args) { int len; unsigned long long num; - double _double; +// double _double; int base; char *str, *end; @@ -594,6 +597,7 @@ int __cdecl _vsnprintf(char *buf, size_t cnt, const char *fmt, va_list args) } continue; +#if 0 /* float number formats - set up the flags and "break" */ case 'e': case 'E': @@ -635,7 +639,7 @@ int __cdecl _vsnprintf(char *buf, size_t cnt, const char *fmt, va_list args) } continue; - +#endif /* integer number formats - set up the flags and "break" */ case 'o': From 8c70b1e7300f632555177209e3bea42aeb7e6ecd Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Tue, 27 Oct 2009 22:56:22 +0000 Subject: [PATCH 035/286] Remove fail point support from swprintf, too. Yay boot! svn path=/branches/ros-amd64-bringup/; revision=43797 --- reactos/lib/rtl/swprintf.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/reactos/lib/rtl/swprintf.c b/reactos/lib/rtl/swprintf.c index e47d49af03e..059cf986302 100644 --- a/reactos/lib/rtl/swprintf.c +++ b/reactos/lib/rtl/swprintf.c @@ -33,7 +33,7 @@ typedef struct { unsigned int exponent:11; unsigned int sign:1; } double_t; - +#if 0 static __inline int @@ -62,7 +62,7 @@ _isnan(double __x) x.__x = &__x; return ( x.x->exponent == 0x7ff && ( x.x->mantissah != 0 || x.x->mantissal != 0 )); } - +#endif static __inline @@ -178,6 +178,7 @@ number(wchar_t * buf, wchar_t * end, long long num, int base, int size, int prec return buf; } +#if 0 static wchar_t * numberf(wchar_t * buf, wchar_t * end, double num, int base, int size, int precision, int type) { @@ -283,6 +284,7 @@ numberf(wchar_t * buf, wchar_t * end, double num, int base, int size, int precis } return buf; } +#endif static wchar_t* string(wchar_t* buf, wchar_t* end, const char* s, int len, int field_width, int precision, int flags) @@ -394,7 +396,7 @@ int __cdecl _vsnwprintf(wchar_t *buf, size_t cnt, const wchar_t *fmt, va_list ar const char *s; const wchar_t *sw; const wchar_t *ss; - double _double; +// double _double; int flags; /* flags to number() */ @@ -591,6 +593,7 @@ int __cdecl _vsnwprintf(wchar_t *buf, size_t cnt, const wchar_t *fmt, va_list ar *ip = (str - buf); } continue; +#if 0 /* float number formats - set up the flags and "break" */ case 'e': case 'E': @@ -633,7 +636,7 @@ int __cdecl _vsnwprintf(wchar_t *buf, size_t cnt, const wchar_t *fmt, va_list ar } continue; - +#endif /* integer number formats - set up the flags and "break" */ From daab9e149dcfe9739a4ac2f5fb286cc48155535a Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Wed, 28 Oct 2009 21:36:00 +0000 Subject: [PATCH 036/286] [KD64] - KdpSetContext: don't include the CONTEXT data in the reply. WinDbg doesn't like that. svn path=/branches/ros-amd64-bringup/; revision=43818 --- reactos/ntoskrnl/kd64/kdapi.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/ntoskrnl/kd64/kdapi.c b/reactos/ntoskrnl/kd64/kdapi.c index 2ae5518fc8b..84992c8599c 100644 --- a/reactos/ntoskrnl/kd64/kdapi.c +++ b/reactos/ntoskrnl/kd64/kdapi.c @@ -675,7 +675,7 @@ KdpSetContext(IN PDBGKD_MANIPULATE_STATE64 State, /* Send the reply */ KdSendPacket(PACKET_TYPE_KD_STATE_MANIPULATE, &Header, - Data, + NULL, &KdpContext); } From 39f6b5c9d394063ae4f8f991e1d14a4f86c62f1b Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Wed, 28 Oct 2009 22:38:42 +0000 Subject: [PATCH 037/286] partly implement KdpSysWriteControlSpace svn path=/branches/ros-amd64-bringup/; revision=43820 --- reactos/ntoskrnl/kd64/amd64/kdsup.c | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/reactos/ntoskrnl/kd64/amd64/kdsup.c b/reactos/ntoskrnl/kd64/amd64/kdsup.c index c8119d9348f..6b37040e9cc 100644 --- a/reactos/ntoskrnl/kd64/amd64/kdsup.c +++ b/reactos/ntoskrnl/kd64/amd64/kdsup.c @@ -226,9 +226,28 @@ KdpSysWriteControlSpace(IN ULONG Processor, IN ULONG Length, OUT PULONG ActualLength) { - UNIMPLEMENTED; - while (TRUE); - return STATUS_UNSUCCESSFUL; + PVOID ControlStart; + PKPRCB Prcb = KiProcessorBlock[Processor]; + PKIPCR Pcr = CONTAINING_RECORD(Prcb, KIPCR, Prcb); + + switch (BaseAddress) + { + case AMD64_DEBUG_CONTROL_SPACE_KSPECIAL: + /* Copy SpecialRegisters */ + ControlStart = &Prcb->ProcessorState.SpecialRegisters; + *ActualLength = sizeof(KSPECIAL_REGISTERS); + break; + + default: + *ActualLength = 0; + ASSERT(FALSE); + return STATUS_UNSUCCESSFUL; + } + + /* Copy the memory */ + RtlCopyMemory(ControlStart, Buffer, min(Length, *ActualLength)); + + return STATUS_SUCCESS; } NTSTATUS From 31d9db9bf3e7ce95e41d58c447df0c4731789e88 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Wed, 28 Oct 2009 23:21:13 +0000 Subject: [PATCH 038/286] Comment out __ldmxcsr in KiRestoreProcessorControlState, as it results in a GPF. Continuing now works again. svn path=/branches/ros-amd64-bringup/; revision=43822 --- reactos/ntoskrnl/ke/amd64/cpu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/ntoskrnl/ke/amd64/cpu.c b/reactos/ntoskrnl/ke/amd64/cpu.c index 723d5179ca3..ff18215c45b 100644 --- a/reactos/ntoskrnl/ke/amd64/cpu.c +++ b/reactos/ntoskrnl/ke/amd64/cpu.c @@ -472,7 +472,7 @@ KiRestoreProcessorControlState(PKPROCESSOR_STATE ProcessorState) // __ltr(&ProcessorState->SpecialRegisters.Tr); __lidt(&ProcessorState->SpecialRegisters.Idtr.Limit); - __ldmxcsr(&ProcessorState->SpecialRegisters.MxCsr); +// __ldmxcsr(&ProcessorState->SpecialRegisters.MxCsr); // FIXME // ProcessorState->SpecialRegisters.DebugControl // ProcessorState->SpecialRegisters.LastBranchToRip // ProcessorState->SpecialRegisters.LastBranchFromRip From 0998c5e4fff4423222f6968e517453081f6fe830 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Wed, 28 Oct 2009 23:54:07 +0000 Subject: [PATCH 039/286] Partly implement KiDebugTrapOrFault. Single stepping now works. svn path=/branches/ros-amd64-bringup/; revision=43824 --- reactos/ntoskrnl/ke/amd64/trap.S | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/reactos/ntoskrnl/ke/amd64/trap.S b/reactos/ntoskrnl/ke/amd64/trap.S index 2d7b0fae4bf..95c22d1243e 100644 --- a/reactos/ntoskrnl/ke/amd64/trap.S +++ b/reactos/ntoskrnl/ke/amd64/trap.S @@ -242,9 +242,22 @@ _MsgInvalidOpcodeFault: push 0 .allocstack 0x8 - UNIMPLEMENTED KiDebugTrapOrFault + ENTER_TRAP_FRAME (SIZE_EXCEPTION_RECORD + 0x28), 0 - jmp $ + /* Check if the frame was from kernelmode */ + test word ptr [rbp + KTRAP_FRAME_SegCs], 3 + jz KiDebugTrapOrFaultKMode + + /* Enable interrupts for user-mode */ + sti + +KiDebugTrapOrFaultKMode: + + DISPATCH_EXCEPTION STATUS_SINGLE_STEP, 0, 0, 0, 0 + + /* Return */ + LEAVE_TRAP_FRAME + iretq .endproc .proc KiNmiInterrupt From c9514d756136382e0e057bebe1cde7a59ce59c38 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 29 Oct 2009 21:49:28 +0000 Subject: [PATCH 040/286] Fix merge artifact, spotted by encoded svn path=/branches/ros-amd64-bringup/; revision=43835 --- reactos/include/ndk/pstypes.h | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/reactos/include/ndk/pstypes.h b/reactos/include/ndk/pstypes.h index 77d7bf3def9..7f29d12a228 100644 --- a/reactos/include/ndk/pstypes.h +++ b/reactos/include/ndk/pstypes.h @@ -627,23 +627,19 @@ typedef struct _PEB #if (NTDDI_VERSION >= NTDDI_WS03) union { - BOOLEAN ImageUsesLargePages:1; BOOLEAN BitField; struct { UCHAR ImageUsesLargePages:1; - #if (NTDDI_VERSION >= NTDDI_LONGHORN) - BOOLEAN IsProtectedProcess:1; - BOOLEAN IsLegacyProcess:1; - BOOLEAN SpareBits:5; +#if (NTDDI_VERSION >= NTDDI_LONGHORN) BOOLEAN IsProtectedProcess:1; BOOLEAN IsLegacyProcess:1; BOOLEAN IsImageDynamicallyRelocated:1; BOOLEAN SkipPatchingUser32Forwarders:1; BOOLEAN SpareBits:3; - #else +#else BOOLEAN SpareBits:7; - #endif +#endif }; }; #else From b7aa79a898ce570fa530385715ba035d6b8a376e Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Thu, 29 Oct 2009 22:15:19 +0000 Subject: [PATCH 041/286] Fix avicap32 build. svn path=/branches/ros-amd64-bringup/; revision=43836 --- reactos/dll/win32/avicap32/avicap32.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/dll/win32/avicap32/avicap32.c b/reactos/dll/win32/avicap32/avicap32.c index 7220f7a2e6d..f4ed19b6e11 100644 --- a/reactos/dll/win32/avicap32/avicap32.c +++ b/reactos/dll/win32/avicap32/avicap32.c @@ -86,7 +86,7 @@ capCreateCaptureWindowW(LPCWSTR lpszWindowName, nWidth, nHeight, hWnd, - (HMENU)nID, + ULongToHandle(nID), hInstance, NULL); } From 5c63222d8afdad2909c0917d74a976506614df1d Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Thu, 29 Oct 2009 22:36:15 +0000 Subject: [PATCH 042/286] Fix comctl32 build and potential bug. svn path=/branches/ros-amd64-bringup/; revision=43837 --- reactos/dll/win32/comctl32/tooltips.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/reactos/dll/win32/comctl32/tooltips.c b/reactos/dll/win32/comctl32/tooltips.c index 7419e2694c9..fcb86d3de7d 100644 --- a/reactos/dll/win32/comctl32/tooltips.c +++ b/reactos/dll/win32/comctl32/tooltips.c @@ -2402,13 +2402,12 @@ TOOLTIPS_NCHitTest (const TOOLTIPS_INFO *infoPtr, WPARAM wParam, LPARAM lParam) static LRESULT -TOOLTIPS_NotifyFormat (HWND hwnd, WPARAM wParam, LPARAM lParam) +TOOLTIPS_NotifyFormat (TOOLTIPS_INFO *infoPtr, WPARAM wParam, LPARAM lParam) { - TOOLTIPS_INFO *infoPtr = TOOLTIPS_GetInfoPtr (hwnd); TTTOOL_INFO *toolPtr = infoPtr->tools; INT nResult; - TRACE("hwnd=%p wParam=%lx lParam=%lx\n", hwnd, wParam, lParam); + TRACE("hwnd=%p wParam=%lx lParam=%lx\n", infoPtr->hwndSelf, wParam, lParam); if (lParam == NF_QUERY) { if (toolPtr->bNotifyUnicode) { @@ -2418,8 +2417,8 @@ TOOLTIPS_NotifyFormat (HWND hwnd, WPARAM wParam, LPARAM lParam) } } else if (lParam == NF_REQUERY) { - nResult = (INT) SendMessageW (toolPtr->hwnd, WM_NOTIFYFORMAT, - (WPARAM)hwnd, (LPARAM)NF_QUERY); + nResult = SendMessageW (toolPtr->hwnd, WM_NOTIFYFORMAT, + (WPARAM)infoPtr->hwndSelf, (LPARAM)NF_QUERY); if (nResult == NFR_ANSI) { toolPtr->bNotifyUnicode = FALSE; TRACE(" -- WM_NOTIFYFORMAT returns: NFR_ANSI\n"); From 926bcb9721bd96d8ec571cae7737b8e4c6d2dfe3 Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Thu, 29 Oct 2009 22:41:26 +0000 Subject: [PATCH 043/286] Fix csrss build. svn path=/branches/ros-amd64-bringup/; revision=43838 --- reactos/subsystems/win32/csrss/api/handle.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/subsystems/win32/csrss/api/handle.c b/reactos/subsystems/win32/csrss/api/handle.c index c51828af578..6bcd61a70ca 100644 --- a/reactos/subsystems/win32/csrss/api/handle.c +++ b/reactos/subsystems/win32/csrss/api/handle.c @@ -188,7 +188,7 @@ CsrInsertObject( ProcessData->HandleTable[i].Object = Object; ProcessData->HandleTable[i].Access = Access; ProcessData->HandleTable[i].Inheritable = Inheritable; - *Handle = (HANDLE)((i << 2) | 0x3); + *Handle = ULongToHandle(((i << 2) | 0x3)); _InterlockedIncrement( &Object->ReferenceCount ); RtlLeaveCriticalSection(&ProcessData->HandleTableLock); return(STATUS_SUCCESS); From c7675b0cacf4a7eb69495fee7c929a7b4cc2e65f Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Thu, 29 Oct 2009 22:44:55 +0000 Subject: [PATCH 044/286] Fix Build. svn path=/branches/ros-amd64-bringup/; revision=43839 --- reactos/dll/directx/d3d9/d3d9_device.c | 2 +- reactos/dll/directx/ddraw/Surface/callbacks_surf_hel.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/reactos/dll/directx/d3d9/d3d9_device.c b/reactos/dll/directx/d3d9/d3d9_device.c index c3420757ca4..100d2fdb38b 100644 --- a/reactos/dll/directx/d3d9/d3d9_device.c +++ b/reactos/dll/directx/d3d9/d3d9_device.c @@ -26,7 +26,7 @@ LPDIRECT3DDEVICE9_INT IDirect3DDevice9ToImpl(LPDIRECT3DDEVICE9 iface) static HRESULT InvalidCall(LPDIRECT3DDEVICE9_INT This, LPSTR ErrorMsg) { - DPRINT1(ErrorMsg); + DPRINT1("%s",ErrorMsg); UNLOCK_D3DDEVICE9(); return D3DERR_INVALIDCALL; } diff --git a/reactos/dll/directx/ddraw/Surface/callbacks_surf_hel.c b/reactos/dll/directx/ddraw/Surface/callbacks_surf_hel.c index 970b439b357..5a31199f72b 100644 --- a/reactos/dll/directx/ddraw/Surface/callbacks_surf_hel.c +++ b/reactos/dll/directx/ddraw/Surface/callbacks_surf_hel.c @@ -84,7 +84,7 @@ DWORD CALLBACK HelDdSurfLock(LPDDHAL_LOCKDATA lpLockData) /* Get our hdc for the active window */ - hDC = GetDC(lpLockData->lpDDSurface->lpSurfMore->lpDD_lcl->hFocusWnd); + hDC = GetDC((HWND)lpLockData->lpDDSurface->lpSurfMore->lpDD_lcl->hFocusWnd); if (hDC != NULL) { @@ -200,7 +200,7 @@ DWORD CALLBACK HelDdSurfUnlock(LPDDHAL_UNLOCKDATA lpUnLockData) DX_WINDBG_trace(); /* Get our hdc for the active window */ - hDC = GetDC(lpUnLockData->lpDDSurface->lpSurfMore->lpDD_lcl->hFocusWnd); + hDC = GetDC((HWND)lpUnLockData->lpDDSurface->lpSurfMore->lpDD_lcl->hFocusWnd); if (hDC != NULL) { From b6656a39dd182f46f97dc4b23674865e66fb04fa Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Thu, 29 Oct 2009 23:25:11 +0000 Subject: [PATCH 045/286] Fix LOGBRUSH definition. svn path=/branches/ros-amd64-bringup/; revision=43840 --- reactos/include/psdk/wingdi.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/include/psdk/wingdi.h b/reactos/include/psdk/wingdi.h index b604a50295b..ef233abde14 100644 --- a/reactos/include/psdk/wingdi.h +++ b/reactos/include/psdk/wingdi.h @@ -1655,7 +1655,7 @@ typedef struct tagEMRBITBLT { typedef struct tagLOGBRUSH { UINT lbStyle; COLORREF lbColor; - LONG lbHatch; + ULONG_PTR lbHatch; } LOGBRUSH,*PLOGBRUSH,*LPLOGBRUSH; typedef LOGBRUSH PATTERN,*PPATTERN,*LPPATTERN; typedef struct tagLOGBRUSH32 { From 6a8b16a69b1a7cf6ffc68ee34a6eaace5107dc6f Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Fri, 30 Oct 2009 00:22:42 +0000 Subject: [PATCH 046/286] Fix some prototypes. svn path=/branches/ros-amd64-bringup/; revision=43841 --- reactos/include/psdk/ntgdi.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/reactos/include/psdk/ntgdi.h b/reactos/include/psdk/ntgdi.h index e8050217a23..766f7409e5e 100644 --- a/reactos/include/psdk/ntgdi.h +++ b/reactos/include/psdk/ntgdi.h @@ -2794,7 +2794,7 @@ NtGdiEnumFontChunk( IN HDC hdc, IN ULONG_PTR idEnum, IN ULONG cjEfdw, - OUT ULONG *pcjEfdw, + OUT ULONG_PTR *pcjEfdw, OUT PENUMFONTDATAW pefdw ); #endif @@ -2809,7 +2809,7 @@ NtGdiEnumFontOpen( IN ULONG cwchMax, IN OPTIONAL LPWSTR pwszFaceName, IN ULONG lfCharSet, - OUT ULONG *pulCount + OUT ULONG_PTR *pulCount ); W32KAPI From af0a5ed49863e5a178809699938f327be088f48c Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Fri, 30 Oct 2009 00:24:32 +0000 Subject: [PATCH 047/286] Fix gdi32 build. svn path=/branches/ros-amd64-bringup/; revision=43842 --- reactos/dll/win32/gdi32/objects/bitmap.c | 2 +- reactos/dll/win32/gdi32/objects/dc.c | 4 ++-- reactos/dll/win32/gdi32/objects/eng.c | 4 ++-- reactos/dll/win32/gdi32/objects/font.c | 16 ++++++++-------- reactos/dll/win32/gdi32/objects/region.c | 4 ++-- 5 files changed, 15 insertions(+), 15 deletions(-) diff --git a/reactos/dll/win32/gdi32/objects/bitmap.c b/reactos/dll/win32/gdi32/objects/bitmap.c index f94c31a24f2..7df0ed49309 100644 --- a/reactos/dll/win32/gdi32/objects/bitmap.c +++ b/reactos/dll/win32/gdi32/objects/bitmap.c @@ -418,7 +418,7 @@ GetDIBits( } } - if ((ULONG)lpvBits & (sizeof(DWORD) - 1)) + if ((PtrToUlong(lpvBits)) & (sizeof(DWORD) - 1)) { pvSafeBits = RtlAllocateHeap(RtlGetProcessHeap(), 0, cjBmpScanSize); if (!pvSafeBits) diff --git a/reactos/dll/win32/gdi32/objects/dc.c b/reactos/dll/win32/gdi32/objects/dc.c index f6b0f90331f..bc713fffc7a 100644 --- a/reactos/dll/win32/gdi32/objects/dc.c +++ b/reactos/dll/win32/gdi32/objects/dc.c @@ -322,7 +322,7 @@ DeleteObject(HGDIOBJ hObject) /* From Wine: DeleteObject does not SetLastError() on a null object */ if(!hObject) return FALSE; - if (0 != ((DWORD) hObject & GDI_HANDLE_STOCK_MASK)) + if (0 != (HandleToUlong(hObject) & GDI_HANDLE_STOCK_MASK)) { // Relax! This is a normal return! DPRINT("Trying to delete system object 0x%x\n", hObject); return TRUE; @@ -1559,7 +1559,7 @@ SelectObject(HDC hDC, switch (uType) { case GDI_OBJECT_TYPE_REGION: - return (HGDIOBJ)ExtSelectClipRgn(hDC, hGdiObj, RGN_COPY); + return ULongToHandle(ExtSelectClipRgn(hDC, hGdiObj, RGN_COPY)); case GDI_OBJECT_TYPE_BITMAP: return NtGdiSelectBitmap(hDC, hGdiObj); diff --git a/reactos/dll/win32/gdi32/objects/eng.c b/reactos/dll/win32/gdi32/objects/eng.c index d29adf08a08..313c4f128ad 100644 --- a/reactos/dll/win32/gdi32/objects/eng.c +++ b/reactos/dll/win32/gdi32/objects/eng.c @@ -163,7 +163,7 @@ EngGetDriverName(HDEV hdev) if (pPDev->Sig != PDEV_UMPD_ID) { - pPDev = (PUMPDEV)pPDev->Sig; + pPDev = (PUMPDEV)ULongToPtr(pPDev->Sig);//wtf? } return pPDev->pdi5Info->pDriverPath; } @@ -180,7 +180,7 @@ EngGetPrinterDataFileName(HDEV hdev) if (pPDev->Sig != PDEV_UMPD_ID) { - pPDev = (PUMPDEV)pPDev->Sig; + pPDev = (PUMPDEV)ULongToPtr(pPDev->Sig);//wtf } return pPDev->pdi5Info->pDataFile; } diff --git a/reactos/dll/win32/gdi32/objects/font.c b/reactos/dll/win32/gdi32/objects/font.c index 9bdbcd63158..2e07c3267cd 100644 --- a/reactos/dll/win32/gdi32/objects/font.c +++ b/reactos/dll/win32/gdi32/objects/font.c @@ -1021,19 +1021,19 @@ GetOutlineTextMetricsA( needed = sizeof(OUTLINETEXTMETRICA); if(lpOTMW->otmpFamilyName) needed += WideCharToMultiByte(CP_ACP, 0, - (WCHAR*)((char*)lpOTMW + (int)lpOTMW->otmpFamilyName), -1, + (WCHAR*)((char*)lpOTMW + (ptrdiff_t)lpOTMW->otmpFamilyName), -1, NULL, 0, NULL, NULL); if(lpOTMW->otmpFaceName) needed += WideCharToMultiByte(CP_ACP, 0, - (WCHAR*)((char*)lpOTMW + (int)lpOTMW->otmpFaceName), -1, + (WCHAR*)((char*)lpOTMW + (ptrdiff_t)lpOTMW->otmpFaceName), -1, NULL, 0, NULL, NULL); if(lpOTMW->otmpStyleName) needed += WideCharToMultiByte(CP_ACP, 0, - (WCHAR*)((char*)lpOTMW + (int)lpOTMW->otmpStyleName), -1, + (WCHAR*)((char*)lpOTMW + (ptrdiff_t)lpOTMW->otmpStyleName), -1, NULL, 0, NULL, NULL); if(lpOTMW->otmpFullName) needed += WideCharToMultiByte(CP_ACP, 0, - (WCHAR*)((char*)lpOTMW + (int)lpOTMW->otmpFullName), -1, + (WCHAR*)((char*)lpOTMW + (ptrdiff_t)lpOTMW->otmpFullName), -1, NULL, 0, NULL, NULL); if(!lpOTM) { @@ -1090,7 +1090,7 @@ GetOutlineTextMetricsA( if(lpOTMW->otmpFamilyName) { output->otmpFamilyName = (LPSTR)(ptr - (char*)output); len = WideCharToMultiByte(CP_ACP, 0, - (WCHAR*)((char*)lpOTMW + (int)lpOTMW->otmpFamilyName), -1, + (WCHAR*)((char*)lpOTMW + (ptrdiff_t)lpOTMW->otmpFamilyName), -1, ptr, left, NULL, NULL); left -= len; ptr += len; @@ -1100,7 +1100,7 @@ GetOutlineTextMetricsA( if(lpOTMW->otmpFaceName) { output->otmpFaceName = (LPSTR)(ptr - (char*)output); len = WideCharToMultiByte(CP_ACP, 0, - (WCHAR*)((char*)lpOTMW + (int)lpOTMW->otmpFaceName), -1, + (WCHAR*)((char*)lpOTMW + (ptrdiff_t)lpOTMW->otmpFaceName), -1, ptr, left, NULL, NULL); left -= len; ptr += len; @@ -1110,7 +1110,7 @@ GetOutlineTextMetricsA( if(lpOTMW->otmpStyleName) { output->otmpStyleName = (LPSTR)(ptr - (char*)output); len = WideCharToMultiByte(CP_ACP, 0, - (WCHAR*)((char*)lpOTMW + (int)lpOTMW->otmpStyleName), -1, + (WCHAR*)((char*)lpOTMW + (ptrdiff_t)lpOTMW->otmpStyleName), -1, ptr, left, NULL, NULL); left -= len; ptr += len; @@ -1120,7 +1120,7 @@ GetOutlineTextMetricsA( if(lpOTMW->otmpFullName) { output->otmpFullName = (LPSTR)(ptr - (char*)output); len = WideCharToMultiByte(CP_ACP, 0, - (WCHAR*)((char*)lpOTMW + (int)lpOTMW->otmpFullName), -1, + (WCHAR*)((char*)lpOTMW + (ptrdiff_t)lpOTMW->otmpFullName), -1, ptr, left, NULL, NULL); left -= len; } else diff --git a/reactos/dll/win32/gdi32/objects/region.c b/reactos/dll/win32/gdi32/objects/region.c index 7dbd97033c1..5864bef39f4 100644 --- a/reactos/dll/win32/gdi32/objects/region.c +++ b/reactos/dll/win32/gdi32/objects/region.c @@ -142,7 +142,7 @@ HRGN WINAPI CreatePolygonRgn( const POINT * lppt, int cPoints, int fnPolyFillMode) { - return (HRGN) NtGdiPolyPolyDraw( (HDC) fnPolyFillMode, (PPOINT) lppt, (PULONG) &cPoints, 1, GdiPolyPolyRgn); + return (HRGN) NtGdiPolyPolyDraw( ULongToPtr(fnPolyFillMode), (PPOINT) lppt, (PULONG) &cPoints, 1, GdiPolyPolyRgn); } @@ -156,7 +156,7 @@ CreatePolyPolygonRgn( const POINT* lppt, int nCount, int fnPolyFillMode) { - return (HRGN) NtGdiPolyPolyDraw( (HDC) fnPolyFillMode, (PPOINT) lppt, (PULONG) lpPolyCounts, (ULONG) nCount, GdiPolyPolyRgn ); + return (HRGN) NtGdiPolyPolyDraw( ULongToHandle(fnPolyFillMode), (PPOINT) lppt, (PULONG) lpPolyCounts, (ULONG) nCount, GdiPolyPolyRgn ); } From ed369f42b26dea35052af98a7b61bc833c4fe59d Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Fri, 30 Oct 2009 00:36:40 +0000 Subject: [PATCH 048/286] Temporarily remove mmebuddy dependencies. svn path=/branches/ros-amd64-bringup/; revision=43843 --- reactos/dll/win32/win32.rbuild | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/reactos/dll/win32/win32.rbuild b/reactos/dll/win32/win32.rbuild index 5b8ed61ec9f..cf8367c241d 100644 --- a/reactos/dll/win32/win32.rbuild +++ b/reactos/dll/win32/win32.rbuild @@ -499,9 +499,9 @@ - + @@ -583,9 +583,9 @@ - + From dd7147de04b58e935bb484d09991478ed3525ece Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Fri, 30 Oct 2009 14:24:42 +0000 Subject: [PATCH 049/286] Fix gdi32 build for real. svn path=/branches/ros-amd64-bringup/; revision=43847 --- reactos/dll/win32/gdi32/misc/gdientry.c | 14 +++++++------- reactos/dll/win32/gdi32/misc/wingl.c | 10 +++++----- reactos/dll/win32/gdi32/objects/bitmap.c | 2 +- reactos/dll/win32/gdi32/objects/region.c | 2 +- 4 files changed, 14 insertions(+), 14 deletions(-) diff --git a/reactos/dll/win32/gdi32/misc/gdientry.c b/reactos/dll/win32/gdi32/misc/gdientry.c index eb510654ecc..0543103246b 100644 --- a/reactos/dll/win32/gdi32/misc/gdientry.c +++ b/reactos/dll/win32/gdi32/misc/gdientry.c @@ -1411,7 +1411,7 @@ bDDCreateSurface(LPDDRAWI_DDRAWSURFACE_LCL pSurface, RtlMoveMemory(&SurfaceMore.ddsCapsEx, &pSurface->ddckCKDestBlt, sizeof(DDSCAPSEX)); - SurfaceMore.dwSurfaceHandle = (DWORD)pSurface->dbnOverlayNode.object_int->lpVtbl; + SurfaceMore.dwSurfaceHandle = PtrToUlong(pSurface->dbnOverlayNode.object_int->lpVtbl); /* Set up SurfaceGlobal struct */ SurfaceGlobal.fpVidMem = pSurface->lpGbl->fpVidMem; @@ -1433,12 +1433,12 @@ bDDCreateSurface(LPDDRAWI_DDRAWSURFACE_LCL pSurface, } /* Create the object */ - pSurface->hDDSurface = (DWORD)NtGdiDdCreateSurfaceObject(GetDdHandle(pSurface->lpGbl->lpDD->hDD), - (HANDLE)pSurface->hDDSurface, - &SurfaceLocal, - &SurfaceMore, - &SurfaceGlobal, - bComplete); + pSurface->hDDSurface = (ULONG_PTR)NtGdiDdCreateSurfaceObject(GetDdHandle(pSurface->lpGbl->lpDD->hDD), + (HANDLE)pSurface->hDDSurface, + &SurfaceLocal, + &SurfaceMore, + &SurfaceGlobal, + bComplete); /* Return status */ if (pSurface->hDDSurface) return TRUE; diff --git a/reactos/dll/win32/gdi32/misc/wingl.c b/reactos/dll/win32/gdi32/misc/wingl.c index 2ba34f3bdf3..fbb64f6a52c 100644 --- a/reactos/dll/win32/gdi32/misc/wingl.c +++ b/reactos/dll/win32/gdi32/misc/wingl.c @@ -28,11 +28,11 @@ -typedef int (WINAPI *CHOOSEPIXELFMT) (HDC, CONST PIXELFORMATDESCRIPTOR *); -typedef BOOL (WINAPI *SETPIXELFMT) (HDC, int, CONST PIXELFORMATDESCRIPTOR *); -typedef BOOL (WINAPI *SWAPBUFFERS) (HDC hdc); -typedef int (WINAPI *DESCRIBEPIXELFMT) (HDC, int, UINT, LPPIXELFORMATDESCRIPTOR); -typedef int (WINAPI *GETPIXELFMT) (HDC); +typedef INT_PTR (WINAPI *CHOOSEPIXELFMT) (HDC, CONST PIXELFORMATDESCRIPTOR *); +typedef INT_PTR (WINAPI *SETPIXELFMT) (HDC, int, CONST PIXELFORMATDESCRIPTOR *); +typedef INT_PTR (WINAPI *SWAPBUFFERS) (HDC hdc); +typedef INT_PTR (WINAPI *DESCRIBEPIXELFMT) (HDC, int, UINT, LPPIXELFORMATDESCRIPTOR); +typedef INT_PTR (WINAPI *GETPIXELFMT) (HDC); static CHOOSEPIXELFMT glChoosePixelFormat = NULL; diff --git a/reactos/dll/win32/gdi32/objects/bitmap.c b/reactos/dll/win32/gdi32/objects/bitmap.c index 7df0ed49309..26e1c40d656 100644 --- a/reactos/dll/win32/gdi32/objects/bitmap.c +++ b/reactos/dll/win32/gdi32/objects/bitmap.c @@ -418,7 +418,7 @@ GetDIBits( } } - if ((PtrToUlong(lpvBits)) & (sizeof(DWORD) - 1)) + if (((ULONG_PTR)lpvBits) & (sizeof(DWORD) - 1)) { pvSafeBits = RtlAllocateHeap(RtlGetProcessHeap(), 0, cjBmpScanSize); if (!pvSafeBits) diff --git a/reactos/dll/win32/gdi32/objects/region.c b/reactos/dll/win32/gdi32/objects/region.c index 5864bef39f4..dd4122d7efd 100644 --- a/reactos/dll/win32/gdi32/objects/region.c +++ b/reactos/dll/win32/gdi32/objects/region.c @@ -142,7 +142,7 @@ HRGN WINAPI CreatePolygonRgn( const POINT * lppt, int cPoints, int fnPolyFillMode) { - return (HRGN) NtGdiPolyPolyDraw( ULongToPtr(fnPolyFillMode), (PPOINT) lppt, (PULONG) &cPoints, 1, GdiPolyPolyRgn); + return (HRGN) NtGdiPolyPolyDraw( ULongToHandle(fnPolyFillMode), (PPOINT) lppt, (PULONG) &cPoints, 1, GdiPolyPolyRgn); } From 79c15bb270e28309c586052fb4d344c9a5a814ca Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Fri, 30 Oct 2009 17:19:56 +0000 Subject: [PATCH 050/286] Work around broken linker by putting mingw support libs before module library dependencies. svn path=/branches/ros-amd64-bringup/; revision=43851 --- reactos/tools/rbuild/backend/mingw/modulehandler.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/reactos/tools/rbuild/backend/mingw/modulehandler.cpp b/reactos/tools/rbuild/backend/mingw/modulehandler.cpp index b1c70eb9560..f623f8120c3 100644 --- a/reactos/tools/rbuild/backend/mingw/modulehandler.cpp +++ b/reactos/tools/rbuild/backend/mingw/modulehandler.cpp @@ -1513,8 +1513,8 @@ MingwModuleHandler::GenerateLinkerCommand ( linkerScriptArgument.c_str (), objectsMacro.c_str (), link_defaultlibs ? "$(PROJECT_LPPFLAGS) " : "", - libsMacro.c_str (), GetLinkerMacro ().c_str (), + libsMacro.c_str (), target_macro.c_str () ); } else @@ -1555,8 +1555,8 @@ MingwModuleHandler::GenerateLinkerCommand ( backend->GetFullName ( temp_exp ).c_str (), objectsMacro.c_str (), link_defaultlibs ? "$(PROJECT_LPPFLAGS) " : "", - libsMacro.c_str (), GetLinkerMacro ().c_str (), + libsMacro.c_str (), target_macro.c_str () ); fprintf ( fMakefile, From 5844aa887ad195cd25c3cb7d6f598759cd7d63c3 Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Fri, 30 Oct 2009 18:48:45 +0000 Subject: [PATCH 051/286] Add missing files. Kernel32 now links. svn path=/branches/ros-amd64-bringup/; revision=43852 --- reactos/dll/win32/kernel32/kernel32.rbuild | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/reactos/dll/win32/kernel32/kernel32.rbuild b/reactos/dll/win32/kernel32/kernel32.rbuild index 29ce08a9379..028e2952ab6 100644 --- a/reactos/dll/win32/kernel32/kernel32.rbuild +++ b/reactos/dll/win32/kernel32/kernel32.rbuild @@ -134,6 +134,12 @@ thread.S + + + fiber.S + thread.S + + icustubs.cpp From 45b0f2f1ec1e5fa44f8cb0b773a0436036a6ddaa Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Fri, 30 Oct 2009 22:47:30 +0000 Subject: [PATCH 052/286] Remove unneeded casts. Fix build. svn path=/branches/ros-amd64-bringup/; revision=43857 --- reactos/dll/win32/opengl32/font.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/reactos/dll/win32/opengl32/font.c b/reactos/dll/win32/opengl32/font.c index 80a98186c31..deabb8f08c2 100644 --- a/reactos/dll/win32/opengl32/font.c +++ b/reactos/dll/win32/opengl32/font.c @@ -647,7 +647,7 @@ INT DrawGlyph(UCHAR* glyphBuf, DWORD glyphSize, FLOAT chordalDeviation, FLOAT ex v[2] = 0.0; z_value = 0.0f; - gluTessBeginPolygon(tess, (VOID *)*(INT *)&z_value); + gluTessBeginPolygon(tess, &z_value); for (loop = (DWORD) *p++; loop; --loop) { @@ -718,7 +718,7 @@ INT DrawGlyph(UCHAR* glyphBuf, DWORD glyphSize, FLOAT chordalDeviation, FLOAT ex glNormal3f(0.0f, 0.0f, -1.0f); gluTessNormal(tess, 0.0F, 0.0F, -1.0F); - gluTessBeginPolygon(tess, (VOID *)*(INT *)&thickness); + gluTessBeginPolygon(tess, &thickness); for (loop = (DWORD) *p++; loop; --loop) { From c3c5459ccf8a3836b5466cd7dd4c062b508baeb1 Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Fri, 30 Oct 2009 23:02:03 +0000 Subject: [PATCH 053/286] Fix warnings. svn path=/branches/ros-amd64-bringup/; revision=43858 --- reactos/base/applications/paint/winproc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/base/applications/paint/winproc.c b/reactos/base/applications/paint/winproc.c index ee02068998c..6634e6744cd 100644 --- a/reactos/base/applications/paint/winproc.c +++ b/reactos/base/applications/paint/winproc.c @@ -251,7 +251,7 @@ WindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { int test[] = { LOWORD(lParam) - 260, LOWORD(lParam) - 140, LOWORD(lParam) - 20 }; SendMessage(hStatusBar, WM_SIZE, wParam, lParam); - SendMessage(hStatusBar, SB_SETPARTS, 3, (int)&test); + SendMessage(hStatusBar, SB_SETPARTS, 3, (LPARAM)&test); MoveWindow(hScrollbox, 56, 49, LOWORD(lParam) - 56, HIWORD(lParam) - 72, TRUE); //InvalidateRect(hwnd, NULL, TRUE); } From 67a29486473ea4dcfdc35c3c0eeb0c33a4211839 Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Fri, 30 Oct 2009 23:51:29 +0000 Subject: [PATCH 054/286] Please don't cast NULL to an integer type. Fixes building this module. svn path=/branches/ros-amd64-bringup/; revision=43860 --- reactos/dll/win32/powrprof/powrprof.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/reactos/dll/win32/powrprof/powrprof.c b/reactos/dll/win32/powrprof/powrprof.c index c5f00e914e2..24496fd71d8 100644 --- a/reactos/dll/win32/powrprof/powrprof.c +++ b/reactos/dll/win32/powrprof/powrprof.c @@ -688,13 +688,13 @@ SetActivePwrScheme(UINT uiID, if (ReadPwrScheme(uiID,&tmp)) { - if (RegOpenKeyEx(HKEY_CURRENT_USER,szUserPowerConfigSubKey,(DWORD)NULL,KEY_ALL_ACCESS,&hKey) != ERROR_SUCCESS) + if (RegOpenKeyEx(HKEY_CURRENT_USER,szUserPowerConfigSubKey,0,KEY_ALL_ACCESS,&hKey) != ERROR_SUCCESS) { return FALSE; } swprintf(Buf,L"%i",uiID); - if (RegSetValueExW(hKey,szCurrentPowerPolicies,(DWORD)NULL,REG_SZ,(CONST BYTE *)Buf,strlenW(Buf)*sizeof(WCHAR)) == ERROR_SUCCESS) + if (RegSetValueExW(hKey,szCurrentPowerPolicies,0,REG_SZ,(CONST BYTE *)Buf,strlenW(Buf)*sizeof(WCHAR)) == ERROR_SUCCESS) { RegCloseKey(hKey); if ((lpGlobalPowerPolicy != NULL) || (lpPowerPolicy != NULL)) @@ -799,7 +799,7 @@ WriteProcessorPwrScheme(UINT ID, if (RegCreateKey(HKEY_LOCAL_MACHINE,Buf, &hKey) == ERROR_SUCCESS) { - RegSetValueExW(hKey,szPolicies,(DWORD)NULL,REG_BINARY,(const unsigned char *)pMachineProcessorPowerPolicy,sizeof(MACHINE_PROCESSOR_POWER_POLICY)); + RegSetValueExW(hKey,szPolicies,0,REG_BINARY,(const unsigned char *)pMachineProcessorPowerPolicy,sizeof(MACHINE_PROCESSOR_POWER_POLICY)); RegCloseKey(hKey); return TRUE; } @@ -821,7 +821,7 @@ void SetLastID() &hKey) != ERROR_SUCCESS) return; swprintf(Buf,L"%i",g_LastID); - RegSetValueExW(hKey,szLastID,(DWORD)NULL,REG_SZ,(CONST BYTE *)Buf,strlenW(Buf)*sizeof(WCHAR)); + RegSetValueExW(hKey,szLastID,0,REG_SZ,(CONST BYTE *)Buf,strlenW(Buf)*sizeof(WCHAR)); RegCloseKey(hKey); } @@ -845,8 +845,8 @@ WritePwrScheme(PUINT puiID, if (RegCreateKey(HKEY_CURRENT_USER,Buf,&hKey) == ERROR_SUCCESS) { - RegSetValueExW(hKey,szName,(DWORD)NULL,REG_SZ,(const unsigned char *)lpszName,strlenW((const char *)lpszName)*sizeof(WCHAR)); - RegSetValueExW(hKey,szDescription,(DWORD)NULL,REG_SZ,(const unsigned char *)lpszDescription,strlenW((const char *)lpszDescription)*sizeof(WCHAR)); + RegSetValueExW(hKey,szName,0,REG_SZ,(const unsigned char *)lpszName,strlenW((const char *)lpszName)*sizeof(WCHAR)); + RegSetValueExW(hKey,szDescription,0,REG_SZ,(const unsigned char *)lpszDescription,strlenW((const char *)lpszDescription)*sizeof(WCHAR)); RegCloseKey(hKey); return WritePwrPolicy(puiID,pPowerPolicy); } @@ -1143,13 +1143,13 @@ BOOLEAN WINAPI WritePwrPolicy(PUINT puiID, PPOWER_POLICY pPowerPolicy) if (RegCreateKey(HKEY_CURRENT_USER,Buf,&hKey) == ERROR_SUCCESS) { - RegSetValueExW(hKey,szPolicies,(DWORD)NULL,REG_BINARY,(const unsigned char *)&pPowerPolicy->user,sizeof(USER_POWER_POLICY)); + RegSetValueExW(hKey,szPolicies,0,REG_BINARY,(const unsigned char *)&pPowerPolicy->user,sizeof(USER_POWER_POLICY)); RegCloseKey(hKey); swprintf(Buf,L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Controls Folder\\PowerCfg\\PowerPolicies\\%i",*puiID); if (RegCreateKey(HKEY_LOCAL_MACHINE,Buf,&hKey) == ERROR_SUCCESS) { - RegSetValueExW(hKey,szPolicies,(DWORD)NULL,REG_BINARY,(const unsigned char *)&pPowerPolicy->mach,sizeof(MACHINE_POWER_POLICY)); + RegSetValueExW(hKey,szPolicies,0,REG_BINARY,(const unsigned char *)&pPowerPolicy->mach,sizeof(MACHINE_POWER_POLICY)); RegCloseKey(hKey); return TRUE; } From 9a7cac1ed0434140b5816d843e4adb9e3bd5cb17 Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Mon, 2 Nov 2009 01:23:29 +0000 Subject: [PATCH 055/286] Revert wrong fix with correct one. svn path=/branches/ros-amd64-bringup/; revision=43905 --- reactos/dll/win32/opengl32/font.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/reactos/dll/win32/opengl32/font.c b/reactos/dll/win32/opengl32/font.c index deabb8f08c2..da6810c219b 100644 --- a/reactos/dll/win32/opengl32/font.c +++ b/reactos/dll/win32/opengl32/font.c @@ -647,7 +647,7 @@ INT DrawGlyph(UCHAR* glyphBuf, DWORD glyphSize, FLOAT chordalDeviation, FLOAT ex v[2] = 0.0; z_value = 0.0f; - gluTessBeginPolygon(tess, &z_value); + gluTessBeginPolygon(tess, (VOID *)*(INT_PTR *)&z_value); for (loop = (DWORD) *p++; loop; --loop) { @@ -718,7 +718,7 @@ INT DrawGlyph(UCHAR* glyphBuf, DWORD glyphSize, FLOAT chordalDeviation, FLOAT ex glNormal3f(0.0f, 0.0f, -1.0f); gluTessNormal(tess, 0.0F, 0.0F, -1.0F); - gluTessBeginPolygon(tess, &thickness); + gluTessBeginPolygon(tess, (VOID *)*(INT_PTR *)&thickness); for (loop = (DWORD) *p++; loop; --loop) { From e0ad35f1c3f373b2b812533b56549e130e492d85 Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Mon, 2 Nov 2009 01:30:09 +0000 Subject: [PATCH 056/286] Fix rapps build. svn path=/branches/ros-amd64-bringup/; revision=43906 --- reactos/base/applications/rapps/toolbar.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/reactos/base/applications/rapps/toolbar.c b/reactos/base/applications/rapps/toolbar.c index d7e88a7a3f8..31ce6032673 100644 --- a/reactos/base/applications/rapps/toolbar.c +++ b/reactos/base/applications/rapps/toolbar.c @@ -20,9 +20,9 @@ static WCHAR szModifyBtn[MAX_STR_LEN]; /* Toolbar buttons */ static const TBBUTTON Buttons[] = { /* iBitmap, idCommand, fsState, fsStyle, bReserved[2], dwData, iString */ - { 0, ID_INSTALL, TBSTATE_ENABLED, BTNS_BUTTON | BTNS_AUTOSIZE, {0}, 0, (int) szInstallBtn}, - { 1, ID_UNINSTALL, TBSTATE_ENABLED, BTNS_BUTTON | BTNS_AUTOSIZE, {0}, 0, (int) szUninstallBtn}, - { 2, ID_MODIFY, TBSTATE_ENABLED, BTNS_BUTTON | BTNS_AUTOSIZE, {0}, 0, (int) szModifyBtn}, + { 0, ID_INSTALL, TBSTATE_ENABLED, BTNS_BUTTON | BTNS_AUTOSIZE, {0}, 0, (INT_PTR)szInstallBtn}, + { 1, ID_UNINSTALL, TBSTATE_ENABLED, BTNS_BUTTON | BTNS_AUTOSIZE, {0}, 0, (INT_PTR)szUninstallBtn}, + { 2, ID_MODIFY, TBSTATE_ENABLED, BTNS_BUTTON | BTNS_AUTOSIZE, {0}, 0, (INT_PTR)szModifyBtn}, { 5, 0, TBSTATE_ENABLED, BTNS_SEP, {0}, 0, 0}, { 3, ID_REFRESH, TBSTATE_ENABLED, BTNS_BUTTON | BTNS_AUTOSIZE, {0}, 0, 0}, { 5, 0, TBSTATE_ENABLED, BTNS_SEP, {0}, 0, 0}, From 2adcfc995d5bb0443a62c007917d9aec534d07f0 Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Mon, 2 Nov 2009 01:34:52 +0000 Subject: [PATCH 057/286] Fix bad cast. svn path=/branches/ros-amd64-bringup/; revision=43907 --- reactos/include/psdk/commctrl.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/include/psdk/commctrl.h b/reactos/include/psdk/commctrl.h index 9210c4d5f91..e537166c94d 100644 --- a/reactos/include/psdk/commctrl.h +++ b/reactos/include/psdk/commctrl.h @@ -2802,7 +2802,7 @@ typedef struct tagTVKEYDOWN (LPARAM)(HTREEITEM)(hitem)) #define TreeView_EnsureVisible(hwnd, hitem) \ - (BOOL)SNDMSG((hwnd), TVM_ENSUREVISIBLE, 0, (LPARAM)(UINT)(hitem)) + (BOOL)SNDMSG((hwnd), TVM_ENSUREVISIBLE, 0, (LPARAM)(hitem)) #define TreeView_SortChildrenCB(hwnd, psort, recurse) \ (BOOL)SNDMSG((hwnd), TVM_SORTCHILDRENCB, (WPARAM)recurse, \ From 3bc05c77d1a294be42e6a7c3231f4e2dcb4a0ca3 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Wed, 4 Nov 2009 20:38:19 +0000 Subject: [PATCH 058/286] Add RtlAddFunctionTable, RtlDeleteFunctionTable, RtlInstallFunctionTableCallback stubs svn path=/branches/ros-amd64-bringup/; revision=43951 --- reactos/lib/rtl/amd64/unwind.c | 35 ++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/reactos/lib/rtl/amd64/unwind.c b/reactos/lib/rtl/amd64/unwind.c index b906ded6cef..f391154d200 100644 --- a/reactos/lib/rtl/amd64/unwind.c +++ b/reactos/lib/rtl/amd64/unwind.c @@ -160,6 +160,41 @@ RtlLookupFunctionEntry( return NULL; } +BOOLEAN +NTAPI +RtlAddFunctionTable( + IN PRUNTIME_FUNCTION FunctionTable, + IN DWORD EntryCount, + IN DWORD64 BaseAddress, + IN ULONGLONG TargetGp) +{ + UNIMPLEMENTED; + return FALSE; +} + +BOOLEAN +NTAPI +RtlDeleteFunctionTable( + IN PRUNTIME_FUNCTION FunctionTable) +{ + UNIMPLEMENTED; + return FALSE; +} + +BOOLEAN +NTAPI +RtlInstallFunctionTableCallback( + IN DWORD64 TableIdentifier, + IN DWORD64 BaseAddress, + IN DWORD Length, + IN PGET_RUNTIME_FUNCTION_CALLBACK Callback, + IN PVOID Context, + IN PCWSTR OutOfProcessCallbackDll) +{ + UNIMPLEMENTED; + return FALSE; +} + void FORCEINLINE SetReg(PCONTEXT Context, BYTE Reg, DWORD64 Value) From fb8ef9a8743680cd55b2d21bb4f4f754e1d55bdf Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Wed, 4 Nov 2009 20:39:05 +0000 Subject: [PATCH 059/286] Add some amd64 specific exports to kernel32 svn path=/branches/ros-amd64-bringup/; revision=43952 --- reactos/dll/win32/kernel32/kernel32.pspec | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/reactos/dll/win32/kernel32/kernel32.pspec b/reactos/dll/win32/kernel32/kernel32.pspec index 353da456ec2..6a5b03eaeee 100644 --- a/reactos/dll/win32/kernel32/kernel32.pspec +++ b/reactos/dll/win32/kernel32/kernel32.pspec @@ -759,9 +759,14 @@ @ stdcall ResetWriteWatch(ptr long) @ stdcall RestoreLastError(long) ntdll.RtlRestoreLastWin32Error @ stdcall ResumeThread(long) +@ stdcall -arch=x86_64 RtlAddFunctionTable(ptr long double double) @ stdcall RtlCaptureContext(ptr) ntdll.RtlCaptureContext @ stdcall RtlCaptureStackBackTrace(long long ptr ptr) ntdll.RtlCaptureStackBackTrace +@ stdcall -arch=x86_64 RtlCompareMemory(ptr ptr ptr) +@ stdcall -arch=x86_64 RtlCopyMemory(ptr ptr ptr) +@ stdcall -arch=x86_64 RtlDeleteFunctionTable(ptr) @ stdcall RtlFillMemory(ptr long long) ntdll.RtlFillMemory +@ stdcall -arch=x86_64 RtlInstallFunctionTableCallback(double double long ptr ptr ptr) @ stdcall RtlMoveMemory(ptr ptr long) ntdll.RtlMoveMemory @ stdcall RtlUnwind(ptr ptr ptr long) ntdll.RtlUnwind @ stdcall RtlVirtualUnwind(ptr ptr ptr long) ntdll.RtlVirtualUnwind From b6c42c50a32381a026d3bc152ba98c992a3dae8c Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Wed, 4 Nov 2009 21:05:16 +0000 Subject: [PATCH 060/286] fix RtlAddFunctionTable svn path=/branches/ros-amd64-bringup/; revision=43953 --- reactos/lib/rtl/amd64/unwind.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/reactos/lib/rtl/amd64/unwind.c b/reactos/lib/rtl/amd64/unwind.c index f391154d200..2a8de06ecdf 100644 --- a/reactos/lib/rtl/amd64/unwind.c +++ b/reactos/lib/rtl/amd64/unwind.c @@ -165,8 +165,7 @@ NTAPI RtlAddFunctionTable( IN PRUNTIME_FUNCTION FunctionTable, IN DWORD EntryCount, - IN DWORD64 BaseAddress, - IN ULONGLONG TargetGp) + IN DWORD64 BaseAddress) { UNIMPLEMENTED; return FALSE; From adfbc64284a6be4db9ae2a6ae724cc2b6ac23f07 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Wed, 4 Nov 2009 21:05:47 +0000 Subject: [PATCH 061/286] fix the pspec, too svn path=/branches/ros-amd64-bringup/; revision=43954 --- reactos/dll/win32/kernel32/kernel32.pspec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/dll/win32/kernel32/kernel32.pspec b/reactos/dll/win32/kernel32/kernel32.pspec index 6a5b03eaeee..af9e822a3fc 100644 --- a/reactos/dll/win32/kernel32/kernel32.pspec +++ b/reactos/dll/win32/kernel32/kernel32.pspec @@ -759,7 +759,7 @@ @ stdcall ResetWriteWatch(ptr long) @ stdcall RestoreLastError(long) ntdll.RtlRestoreLastWin32Error @ stdcall ResumeThread(long) -@ stdcall -arch=x86_64 RtlAddFunctionTable(ptr long double double) +@ stdcall -arch=x86_64 RtlAddFunctionTable(ptr long double) @ stdcall RtlCaptureContext(ptr) ntdll.RtlCaptureContext @ stdcall RtlCaptureStackBackTrace(long long ptr ptr) ntdll.RtlCaptureStackBackTrace @ stdcall -arch=x86_64 RtlCompareMemory(ptr ptr ptr) From 4f7bc0821614dff513c787af9b42e9572c1f59d2 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Wed, 4 Nov 2009 21:08:42 +0000 Subject: [PATCH 062/286] revert r43851 svn path=/branches/ros-amd64-bringup/; revision=43955 --- reactos/tools/rbuild/backend/mingw/modulehandler.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/reactos/tools/rbuild/backend/mingw/modulehandler.cpp b/reactos/tools/rbuild/backend/mingw/modulehandler.cpp index f623f8120c3..b1c70eb9560 100644 --- a/reactos/tools/rbuild/backend/mingw/modulehandler.cpp +++ b/reactos/tools/rbuild/backend/mingw/modulehandler.cpp @@ -1513,8 +1513,8 @@ MingwModuleHandler::GenerateLinkerCommand ( linkerScriptArgument.c_str (), objectsMacro.c_str (), link_defaultlibs ? "$(PROJECT_LPPFLAGS) " : "", - GetLinkerMacro ().c_str (), libsMacro.c_str (), + GetLinkerMacro ().c_str (), target_macro.c_str () ); } else @@ -1555,8 +1555,8 @@ MingwModuleHandler::GenerateLinkerCommand ( backend->GetFullName ( temp_exp ).c_str (), objectsMacro.c_str (), link_defaultlibs ? "$(PROJECT_LPPFLAGS) " : "", + libsMacro.c_str (), GetLinkerMacro ().c_str (), - libsMacro.c_str (), target_macro.c_str () ); fprintf ( fMakefile, From 61675d02e0f25a4771e1bdb48ba842f38cf3f457 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Wed, 4 Nov 2009 21:22:53 +0000 Subject: [PATCH 063/286] Sync mingw lib to version 4.4.1-1a svn path=/branches/ros-amd64-bringup/; revision=43956 --- reactos/include/crt/_mingw.h | 10 + reactos/include/reactos/mingw-w64/internal.h | 38 ++-- reactos/include/reactos/mingw-w64/oscalls.h | 9 - .../include/reactos/mingw-w64/sect_attribs.h | 10 +- reactos/lib/3rdparty/mingw/CRT_fp10.c | 16 +- reactos/lib/3rdparty/mingw/CRT_fp8.c | 16 +- reactos/lib/3rdparty/mingw/CRT_glob.c | 17 ++ reactos/lib/3rdparty/mingw/atonexit.c | 8 +- reactos/lib/3rdparty/mingw/binmode.c | 10 + reactos/lib/3rdparty/mingw/crt0_c.c | 12 +- reactos/lib/3rdparty/mingw/crt0_w.c | 19 +- reactos/lib/3rdparty/mingw/crt_handler.c | 177 ++++++++++++++++++ reactos/lib/3rdparty/mingw/crtdll.c | 15 +- reactos/lib/3rdparty/mingw/crtexe.c | 161 ++++++++-------- reactos/lib/3rdparty/mingw/dll_argv.c | 25 +++ reactos/lib/3rdparty/mingw/dllentry.c | 6 +- reactos/lib/3rdparty/mingw/dllmain.c | 4 +- reactos/lib/3rdparty/mingw/dummy_mingwthrd.c | 146 +++++++++++++++ reactos/lib/3rdparty/mingw/gccmain.c | 18 +- reactos/lib/3rdparty/mingw/gs_support.c | 14 +- reactos/lib/3rdparty/mingw/mingw.rbuild | 12 +- reactos/lib/3rdparty/mingw/mingw_custom.c | 16 ++ reactos/lib/3rdparty/mingw/mingwthrd_nomt.c | 30 +++ reactos/lib/3rdparty/mingw/pesect.c | 79 ++++++++ reactos/lib/3rdparty/mingw/pseudo-reloc.c | 22 ++- reactos/lib/3rdparty/mingw/tlssup.c | 73 ++++++-- reactos/lib/3rdparty/mingw/txtmode.c | 13 ++ reactos/lib/3rdparty/mingw/wildcard.c | 12 ++ 28 files changed, 797 insertions(+), 191 deletions(-) create mode 100644 reactos/lib/3rdparty/mingw/CRT_glob.c create mode 100644 reactos/lib/3rdparty/mingw/binmode.c create mode 100644 reactos/lib/3rdparty/mingw/crt_handler.c create mode 100644 reactos/lib/3rdparty/mingw/dll_argv.c create mode 100644 reactos/lib/3rdparty/mingw/dummy_mingwthrd.c create mode 100644 reactos/lib/3rdparty/mingw/mingw_custom.c create mode 100644 reactos/lib/3rdparty/mingw/mingwthrd_nomt.c create mode 100644 reactos/lib/3rdparty/mingw/txtmode.c diff --git a/reactos/include/crt/_mingw.h b/reactos/include/crt/_mingw.h index 3896fd1e99d..4e4824f70d0 100644 --- a/reactos/include/crt/_mingw.h +++ b/reactos/include/crt/_mingw.h @@ -189,5 +189,15 @@ allow GCC to optimize away some EH unwind code, at least in DW2 case. */ #define _CRT_UNUSED(x) (void)x #endif +#define __MINGW_USE_UNDERSCORE_PREFIX 1 + +#if __MINGW_USE_UNDERSCORE_PREFIX == 0 +#define __MINGW_IMP_SYMBOL(sym) _imp_##sym +#define __MINGW_USYMBOL(sym) sym +#else +#define __MINGW_IMP_SYMBOL(sym) _imp__##sym +#define __MINGW_USYMBOL(sym) _##sym +#endif + #endif /* !_INC_MINGW */ diff --git a/reactos/include/reactos/mingw-w64/internal.h b/reactos/include/reactos/mingw-w64/internal.h index 7d4785797da..13376e28ed9 100644 --- a/reactos/include/reactos/mingw-w64/internal.h +++ b/reactos/include/reactos/mingw-w64/internal.h @@ -22,7 +22,7 @@ extern "C" { typedef int (__cdecl *_PIFV)(void); typedef void (__cdecl *_PVFI)(int); -#if defined (SPECIAL_CRTEXE) && defined (_DLL) +#if defined (SPECIAL_CRTEXE) && (defined (_DLL) || defined (__GNUC__)) extern int _commode; #else _CRTIMP extern int _commode; @@ -32,12 +32,6 @@ extern "C" { #define __IOINFO_TM_UTF8 1 #define __IOINFO_TM_UTF16LE 2 -#ifdef _MSC_VER -#pragma warning(push) -#pragma warning(disable:4214) -#pragma warning(disable:4820) -#endif - typedef struct { intptr_t osfhnd; char osfile; @@ -49,10 +43,6 @@ extern "C" { char pipech2[2]; } ioinfo; -#ifdef _MSC_VER -#pragma warning(pop) -#endif - #define IOINFO_ARRAY_ELTS (1 << 5) #define _pioinfo(i) (__pioinfo[(i) >> 5] + ((i) & (IOINFO_ARRAY_ELTS - 1))) @@ -69,13 +59,13 @@ extern "C" { #define _tm_unicode_safe(i) (_pioinfo_safe(i)->unicode) #ifndef __badioinfo - extern ioinfo ** _imp____badioinfo[]; -#define __badioinfo (*_imp____badioinfo) + extern ioinfo ** __MINGW_IMP_SYMBOL(__badioinfo)[]; +#define __badioinfo (* __MINGW_IMP_SYMBOL(__badioinfo)) #endif #ifndef __pioinfo - extern ioinfo ** _imp____pioinfo[]; -#define __pioinfo (*_imp____pioinfo) + extern ioinfo ** __MINGW_IMP_SYMBOL(__pioinfo)[]; +#define __pioinfo (* __MINGW_IMP_SYMBOL(__pioinfo)) #endif #define _NO_CONSOLE_FILENO (intptr_t)-2 @@ -107,24 +97,24 @@ extern "C" { extern int _newmode; #ifndef __winitenv -extern wchar_t ***_imp____winitenv; -#define __winitenv (*_imp____winitenv) +extern wchar_t *** __MINGW_IMP_SYMBOL(__winitenv); +#define __winitenv (* __MINGW_IMP_SYMBOL(__winitenv)) #endif #ifndef __initenv -extern char ***_imp____initenv; -#define __initenv (*_imp____initenv) +extern char *** __MINGW_IMP_SYMBOL(__initenv); +#define __initenv (* __MINGW_IMP_SYMBOL(__initenv)) #endif #ifndef _acmdln -extern char **_imp___acmdln; -#define _acmdln (*_imp___acmdln) +extern char ** __MINGW_IMP_SYMBOL(_acmdln); +#define _acmdln (* __MINGW_IMP_SYMBOL(_acmdln)) /* _CRTIMP extern char *_acmdln; */ #endif #ifndef _wcmdln -extern char **_imp___wcmdln; -#define _wcmdln (*_imp___wcmdln) +extern char ** __MINGW_IMP_SYMBOL(_wcmdln); +#define _wcmdln (* __MINGW_IMP_SYMBOL(_wcmdln)) /* __CRTIMP extern wchar_t *_wcmdln; */ #endif @@ -169,7 +159,7 @@ extern char **_imp___wcmdln; #include void * __cdecl _encode_pointer(void *); - void * __cdecl _encoded_null(void); + void * __cdecl _encoded_null(); void * __cdecl _decode_pointer(void *); BOOL __cdecl _ValidateImageBase (PBYTE pImageBase); diff --git a/reactos/include/reactos/mingw-w64/oscalls.h b/reactos/include/reactos/mingw-w64/oscalls.h index 132686d15c4..cdcb23e51db 100644 --- a/reactos/include/reactos/mingw-w64/oscalls.h +++ b/reactos/include/reactos/mingw-w64/oscalls.h @@ -30,11 +30,6 @@ #endif #endif -#ifdef _MSC_VER -#pragma warning(push) -#pragma warning(disable:4214) -#endif - typedef struct _FTIME { unsigned short twosecs : 5; @@ -51,10 +46,6 @@ typedef struct _FDATE unsigned short year : 7; } FDATE; -#ifdef _MSC_VER -#pragma warning(pop) -#endif - typedef FDATE *PFDATE; #endif diff --git a/reactos/include/reactos/mingw-w64/sect_attribs.h b/reactos/include/reactos/mingw-w64/sect_attribs.h index da09e9bbad2..681b0cb3197 100644 --- a/reactos/include/reactos/mingw-w64/sect_attribs.h +++ b/reactos/include/reactos/mingw-w64/sect_attribs.h @@ -10,7 +10,7 @@ #define _ATTRIBUTES shared #endif -#if defined(_MSC_VER) +#if 0 /* Reference list of existing section for msvcrt. */ #pragma section(".CRTMP$XCA",long,_ATTRIBUTES) #pragma section(".CRTMP$XCZ",long,_ATTRIBUTES) @@ -55,14 +55,6 @@ #pragma section(".rtc$IZZ",long,read) #pragma section(".rtc$TAA",long,read) #pragma section(".rtc$TZZ",long,read) -#pragma section(".tls",long,read,write) -#pragma section(".tls$ZZZ",long,read,write) #endif -#if defined(_MSC_VER) -#define _CRTALLOC(x) __declspec(allocate(x)) -#elif defined(__GNUC__) #define _CRTALLOC(x) __attribute__ ((section (x) )) -#else -#error -#endif diff --git a/reactos/lib/3rdparty/mingw/CRT_fp10.c b/reactos/lib/3rdparty/mingw/CRT_fp10.c index b809ce0b447..4069ad7c204 100644 --- a/reactos/lib/3rdparty/mingw/CRT_fp10.c +++ b/reactos/lib/3rdparty/mingw/CRT_fp10.c @@ -4,17 +4,9 @@ * No warranty is given; refer to the file DISCLAIMER within this package. */ -void _fpreset (void) -{ -#ifdef __GNUC__ - __asm__ ("fninit" ); -#else - __asm fninit; -#endif -} +void _fpreset (void); + +void _fpreset (void) + { __asm__ ("fninit" ) ;} -#ifdef __GNUC__ void __attribute__ ((alias ("_fpreset"))) fpreset(void); -#else -void fpreset(void) { _fpreset(); } -#endif diff --git a/reactos/lib/3rdparty/mingw/CRT_fp8.c b/reactos/lib/3rdparty/mingw/CRT_fp8.c index 817f16fa587..13240e5e04a 100644 --- a/reactos/lib/3rdparty/mingw/CRT_fp8.c +++ b/reactos/lib/3rdparty/mingw/CRT_fp8.c @@ -4,12 +4,14 @@ * No warranty is given; refer to the file DISCLAIMER within this package. */ -extern void (*_imp___fpreset)(void) ; -void _fpreset (void) -{ (*_imp___fpreset)(); } +#include <_mingw.h> + +extern void (* __MINGW_IMP_SYMBOL(_fpreset))(void); +void _fpreset (void); + +void _fpreset (void) +{ + (* __MINGW_IMP_SYMBOL(_fpreset))(); +} -#ifdef __GNUC__ void __attribute__ ((alias ("_fpreset"))) fpreset(void); -#else -void fpreset(void) { _fpreset(); } -#endif diff --git a/reactos/lib/3rdparty/mingw/CRT_glob.c b/reactos/lib/3rdparty/mingw/CRT_glob.c new file mode 100644 index 00000000000..944ee815c7c --- /dev/null +++ b/reactos/lib/3rdparty/mingw/CRT_glob.c @@ -0,0 +1,17 @@ +/* + * CRT_glob.c + * This file has no copyright is assigned and is placed in the Public Domain. + * This file is part of the w64 mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within the package. + * + * Include this object file to set _dowildcard to a state that will turn on + * command line globbing by default. (wildcard.o which goes into libmingw32.a + * has a default state of off.) + * + * To use this object include the object file in your link command: + * gcc -o foo.exe foo.o CRT_glob.o + * + */ + +int _dowildcard = -1; + diff --git a/reactos/lib/3rdparty/mingw/atonexit.c b/reactos/lib/3rdparty/mingw/atonexit.c index 058a036608f..2491e82797f 100644 --- a/reactos/lib/3rdparty/mingw/atonexit.c +++ b/reactos/lib/3rdparty/mingw/atonexit.c @@ -25,10 +25,11 @@ _PVFV *__onexitbegin; _PVFV *__onexitend; extern _CRTIMP _onexit_t __dllonexit (_onexit_t, _PVFV**, _PVFV**); -extern _onexit_t (__cdecl *_imp___onexit) (_onexit_t func); +extern _onexit_t (__cdecl * __MINGW_IMP_SYMBOL(_onexit)) (_onexit_t func); -#if 0 /* Choose a different name to prevent name conflicts. The CRT one works fine. */ +_onexit_t __cdecl mingw_onexit(_onexit_t func); + _onexit_t __cdecl mingw_onexit(_onexit_t func) { _PVFV *onexitbegin; @@ -38,7 +39,7 @@ _onexit_t __cdecl mingw_onexit(_onexit_t func) onexitbegin = (_PVFV *) _decode_pointer (__onexitbegin); if (onexitbegin == (_PVFV *) -1) - return (*_imp___onexit) (func); + return (* __MINGW_IMP_SYMBOL(_onexit)) (func); _lock (_EXIT_LOCK1); onexitbegin = (_PVFV *) _decode_pointer (__onexitbegin); onexitend = (_PVFV *) _decode_pointer (__onexitend); @@ -56,4 +57,3 @@ atexit (_PVFV func) { return (mingw_onexit((_onexit_t)func) == NULL) ? -1 : 0; } -#endif diff --git a/reactos/lib/3rdparty/mingw/binmode.c b/reactos/lib/3rdparty/mingw/binmode.c new file mode 100644 index 00000000000..b9e4dc08e4e --- /dev/null +++ b/reactos/lib/3rdparty/mingw/binmode.c @@ -0,0 +1,10 @@ +/** + * This file has no copyright assigned and is placed in the Public Domain. + * This file is part of the w64 mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within this package. + */ + +#define SPECIAL_CRTEXE + +#include +#include diff --git a/reactos/lib/3rdparty/mingw/crt0_c.c b/reactos/lib/3rdparty/mingw/crt0_c.c index 577fa8772be..7553c6d9406 100644 --- a/reactos/lib/3rdparty/mingw/crt0_c.c +++ b/reactos/lib/3rdparty/mingw/crt0_c.c @@ -6,7 +6,15 @@ #include -int main (int flags, char **cmdline, char **inst) +extern HINSTANCE __mingw_winmain_hInstance; +extern LPSTR __mingw_winmain_lpCmdLine; +extern DWORD __mingw_winmain_nShowCmd; + +/*ARGSUSED*/ +int main (int flags __attribute__ ((__unused__)), + char **cmdline __attribute__ ((__unused__)), + char **inst __attribute__ ((__unused__))) { - return (int) WinMain ((HINSTANCE) inst, NULL, (LPSTR) cmdline,(DWORD) flags); + return (int) WinMain (__mingw_winmain_hInstance, NULL, + __mingw_winmain_lpCmdLine, __mingw_winmain_nShowCmd); } diff --git a/reactos/lib/3rdparty/mingw/crt0_w.c b/reactos/lib/3rdparty/mingw/crt0_w.c index 4e096483e11..8767e670ee0 100644 --- a/reactos/lib/3rdparty/mingw/crt0_w.c +++ b/reactos/lib/3rdparty/mingw/crt0_w.c @@ -3,14 +3,23 @@ * This file is part of the w64 mingw-runtime package. * No warranty is given; refer to the file DISCLAIMER within this package. */ - #include -extern void __main(void); - +/* Do the UNICODE prototyping of WinMain. Be aware that in winbase.h WinMain is a macro + defined to wWinMain. */ int WINAPI wWinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPWSTR lpCmdLine,int nShowCmd); -int wmain (int flags, wchar_t **cmdline, wchar_t **inst) +extern HINSTANCE __mingw_winmain_hInstance; +extern LPWSTR __mingw_winmain_lpCmdLine; +extern DWORD __mingw_winmain_nShowCmd; + +int wmain (int, wchar_t **, wchar_t **); + +/*ARGSUSED*/ +int wmain (int flags __attribute__ ((__unused__)), + wchar_t **cmdline __attribute__ ((__unused__)), + wchar_t **inst __attribute__ ((__unused__))) { - return (int) wWinMain ((HINSTANCE) inst, NULL, (LPWSTR) cmdline,(DWORD) flags); + return (int) wWinMain (__mingw_winmain_hInstance, NULL, + __mingw_winmain_lpCmdLine, __mingw_winmain_nShowCmd); } diff --git a/reactos/lib/3rdparty/mingw/crt_handler.c b/reactos/lib/3rdparty/mingw/crt_handler.c new file mode 100644 index 00000000000..b87e14e4798 --- /dev/null +++ b/reactos/lib/3rdparty/mingw/crt_handler.c @@ -0,0 +1,177 @@ +/** + * This file has no copyright assigned and is placed in the Public Domain. + * This file is part of the w64 mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within this package. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#if defined (_WIN64) && defined (__ia64__) +#error FIXME: Unsupported __ImageBase implementation. +#else +#define __ImageBase _image_base__ +/* This symbol is defined by the linker. */ +extern IMAGE_DOS_HEADER __ImageBase; +#endif + +#pragma pack(push,1) +typedef struct _UNWIND_INFO { + BYTE VersionAndFlags; + BYTE PrologSize; + BYTE CountOfUnwindCodes; + BYTE FrameRegisterAndOffset; + ULONG AddressOfExceptionHandler; +} UNWIND_INFO,*PUNWIND_INFO; +#pragma pack(pop) + +PIMAGE_SECTION_HEADER _FindPESectionByName (const char *); +PIMAGE_SECTION_HEADER _FindPESectionExec (size_t); +PBYTE _GetPEImageBase (void); + +int __mingw_init_ehandler (void); + +#ifdef _WIN64 +EXCEPTION_DISPOSITION __mingw_SEH_error_handler(struct _EXCEPTION_RECORD *, void *, struct _CONTEXT *, void *); + +#define MAX_PDATA_ENTRIES 32 +static RUNTIME_FUNCTION emu_pdata[MAX_PDATA_ENTRIES]; +static UNWIND_INFO emu_xdata[MAX_PDATA_ENTRIES]; + +int +__mingw_init_ehandler (void) +{ + static int was_here = 0; + size_t e = 0; + PIMAGE_SECTION_HEADER pSec; + PBYTE _ImageBase = _GetPEImageBase (); + + if (was_here || !_ImageBase) + return was_here; + was_here = 1; + if (_FindPESectionByName (".pdata") != NULL) + return 1; + + /* Allocate # of e tables and entries. */ + memset (emu_pdata, 0, sizeof (RUNTIME_FUNCTION) * MAX_PDATA_ENTRIES); + memset (emu_xdata, 0, sizeof (UNWIND_INFO) * MAX_PDATA_ENTRIES); + + e = 0; + /* Fill tables and entries. */ + while (e < MAX_PDATA_ENTRIES && (pSec = _FindPESectionExec (e)) != NULL) + { + emu_xdata[e].VersionAndFlags = 9; /* UNW_FLAG_EHANDLER | UNW_VERSION */ + emu_xdata[e].AddressOfExceptionHandler = + (DWORD)(size_t) ((LPBYTE)__mingw_SEH_error_handler - _ImageBase); + emu_pdata[e].BeginAddress = pSec->VirtualAddress; + emu_pdata[e].EndAddress = pSec->VirtualAddress + pSec->Misc.VirtualSize; + emu_pdata[e].UnwindData = + (DWORD)(size_t)((LPBYTE)&emu_xdata[e] - _ImageBase); + ++e; + } +#ifdef _DEBUG_CRT + if (!e || e > MAX_PDATA_ENTRIES) + abort (); +#endif + /* RtlAddFunctionTable. */ + if (e != 0) + RtlAddFunctionTable (emu_pdata, e, (DWORD64)_ImageBase); + return 1; +} + +extern void _fpreset (void); + +EXCEPTION_DISPOSITION +__mingw_SEH_error_handler (struct _EXCEPTION_RECORD* ExceptionRecord, + void *EstablisherFrame __attribute__ ((unused)), + struct _CONTEXT* ContextRecord __attribute__ ((unused)), + void *DispatcherContext __attribute__ ((unused))) +{ + EXCEPTION_DISPOSITION action = EXCEPTION_CONTINUE_SEARCH; + void (*old_handler) (int); + int reset_fpu = 0; + + switch (ExceptionRecord->ExceptionCode) + { + case EXCEPTION_ACCESS_VIOLATION: + /* test if the user has set SIGSEGV */ + old_handler = signal (SIGSEGV, SIG_DFL); + if (old_handler == SIG_IGN) + { + /* this is undefined if the signal was raised by anything other + than raise (). */ + signal (SIGSEGV, SIG_IGN); + action = EXCEPTION_CONTINUE_EXECUTION; + } + else if (old_handler != SIG_DFL) + { + /* This means 'old' is a user defined function. Call it */ + (*old_handler) (SIGSEGV); + action = EXCEPTION_CONTINUE_EXECUTION; + } + break; + case EXCEPTION_ILLEGAL_INSTRUCTION: + case EXCEPTION_PRIV_INSTRUCTION: + /* test if the user has set SIGILL */ + old_handler = signal (SIGILL, SIG_DFL); + if (old_handler == SIG_IGN) + { + /* this is undefined if the signal was raised by anything other + than raise (). */ + signal (SIGILL, SIG_IGN); + action = EXCEPTION_CONTINUE_EXECUTION; + } + else if (old_handler != SIG_DFL) + { + /* This means 'old' is a user defined function. Call it */ + (*old_handler) (SIGILL); + action = EXCEPTION_CONTINUE_EXECUTION; + } + break; + case EXCEPTION_FLT_INVALID_OPERATION: + case EXCEPTION_FLT_DIVIDE_BY_ZERO: + case EXCEPTION_FLT_DENORMAL_OPERAND: + case EXCEPTION_FLT_OVERFLOW: + case EXCEPTION_FLT_UNDERFLOW: + case EXCEPTION_FLT_INEXACT_RESULT: + reset_fpu = 1; + /* fall through. */ + + case EXCEPTION_INT_DIVIDE_BY_ZERO: + /* test if the user has set SIGFPE */ + old_handler = signal (SIGFPE, SIG_DFL); + if (old_handler == SIG_IGN) + { + signal (SIGFPE, SIG_IGN); + if (reset_fpu) + _fpreset (); + action = EXCEPTION_CONTINUE_EXECUTION; + } + else if (old_handler != SIG_DFL) + { + /* This means 'old' is a user defined function. Call it */ + (*old_handler) (SIGFPE); + action = EXCEPTION_CONTINUE_EXECUTION; + } + break; + case EXCEPTION_DATATYPE_MISALIGNMENT: + case EXCEPTION_ARRAY_BOUNDS_EXCEEDED: + case EXCEPTION_FLT_STACK_CHECK: + case EXCEPTION_INT_OVERFLOW: + case EXCEPTION_INVALID_HANDLE: + /*case EXCEPTION_POSSIBLE_DEADLOCK: */ + action = EXCEPTION_CONTINUE_EXECUTION; + break; + default: + break; + } + return action; +} + +#endif diff --git a/reactos/lib/3rdparty/mingw/crtdll.c b/reactos/lib/3rdparty/mingw/crtdll.c index c14a7a0310c..0c674169789 100644 --- a/reactos/lib/3rdparty/mingw/crtdll.c +++ b/reactos/lib/3rdparty/mingw/crtdll.c @@ -110,10 +110,9 @@ BOOL WINAPI _CRT_INIT (HANDLE hDllHandle, DWORD dwReason, LPVOID lpreserved) } if (! nested) { - InterlockedExchangePointer ((volatile PVOID *) &__native_startup_lock, 0); + (void) InterlockedExchangePointer ((volatile PVOID *) &__native_startup_lock, 0); } - if (__dyn_tls_init_callback != NULL && - _IsNonwritableInCurrentImage ((PBYTE) &__dyn_tls_init_callback)) + if (__dyn_tls_init_callback != NULL) { __dyn_tls_init_callback (hDllHandle, DLL_THREAD_ATTACH, lpreserved); } @@ -143,7 +142,7 @@ BOOL WINAPI _CRT_INIT (HANDLE hDllHandle, DWORD dwReason, LPVOID lpreserved) __onexitbegin = __onexitend = (_PVFV *) NULL; } __native_startup_state = __uninitialized; - InterlockedExchangePointer ((volatile PVOID *) &__native_startup_lock, 0); + (void) InterlockedExchangePointer ((volatile PVOID *) &__native_startup_lock, 0); } } return TRUE; @@ -151,13 +150,19 @@ BOOL WINAPI _CRT_INIT (HANDLE hDllHandle, DWORD dwReason, LPVOID lpreserved) static BOOL __DllMainCRTStartup (HANDLE, DWORD, LPVOID); +BOOL WINAPI DllMainCRTStartup (HANDLE, DWORD, LPVOID); +int __mingw_init_ehandler (void); + BOOL WINAPI -DllMainCRTStartup(HANDLE hDllHandle,DWORD dwReason,LPVOID lpreserved) +DllMainCRTStartup (HANDLE hDllHandle, DWORD dwReason, LPVOID lpreserved) { mingw_app_type = 0; if (dwReason == DLL_PROCESS_ATTACH) { __security_init_cookie (); +#ifdef _WIN64 + __mingw_init_ehandler (); +#endif } return __DllMainCRTStartup (hDllHandle, dwReason, lpreserved); } diff --git a/reactos/lib/3rdparty/mingw/crtexe.c b/reactos/lib/3rdparty/mingw/crtexe.c index a3421ff25d9..9fabd0e338f 100644 --- a/reactos/lib/3rdparty/mingw/crtexe.c +++ b/reactos/lib/3rdparty/mingw/crtexe.c @@ -20,16 +20,15 @@ #include #include #include -#include #ifndef __winitenv -extern wchar_t ***_imp____winitenv; -#define __winitenv (*_imp____winitenv) +extern wchar_t *** __MINGW_IMP_SYMBOL(__winitenv); +#define __winitenv (* __MINGW_IMP_SYMBOL(__winitenv)) #endif #ifndef __initenv -extern char ***_imp____initenv; -#define __initenv (*_imp____initenv) +extern char *** __MINGW_IMP_SYMBOL(__initenv); +#define __initenv (* __MINGW_IMP_SYMBOL(__initenv)) #endif /* Hack, for bug in ld. Will be removed soon. */ @@ -43,20 +42,16 @@ extern void _fpreset (void); __declspec(dllimport) void __setusermatherr(int (__cdecl *)(struct _exception *)); -extern int *_imp___fmode; -extern int *_imp___commode; +extern int * __MINGW_IMP_SYMBOL(_fmode); +extern int * __MINGW_IMP_SYMBOL(_commode); #undef _fmode extern int _fmode; -extern int *_imp___commode; -#define _commode (*_imp___commode) +extern int * __MINGW_IMP_SYMBOL(_commode); +#define _commode (* __MINGW_IMP_SYMBOL(_commode)) extern int _dowildcard; -#if defined(__GNUC__) int _MINGW_INSTALL_DEBUG_MATHERR __attribute__((weak)) = 0; -#else -int _MINGW_INSTALL_DEBUG_MATHERR = 0; -#endif extern int __defaultmatherr; extern _CRTIMP void __cdecl _initterm(_PVFV *, _PVFV *); @@ -74,6 +69,10 @@ extern _PVFV *__onexitend; extern int mingw_app_type; +HINSTANCE __mingw_winmain_hInstance; +_TCHAR *__mingw_winmain_lpCmdLine; +DWORD __mingw_winmain_nShowCmd; + static int argc; #ifdef WPRFLAG extern void __main(void); @@ -89,10 +88,10 @@ static int mainret=0; static int managedapp; static int has_cctor = 0; static _startupinfo startinfo; +static LPTOP_LEVEL_EXCEPTION_FILTER __mingw_oldexcpt_handler = NULL; extern void _pei386_runtime_relocator (void); static long CALLBACK _gnu_exception_handler (EXCEPTION_POINTERS * exception_data); -//static LONG __mingw_vex(EXCEPTION_POINTERS * exception_data); #ifdef WPRFLAG static void duplicate_ppstrings (int ac, wchar_t ***av); #else @@ -101,7 +100,7 @@ static void duplicate_ppstrings (int ac, char ***av); static int __cdecl pre_c_init (void); static void __cdecl pre_cpp_init (void); - +static void __cdecl __mingw_prepare_except_for_msvcr80_and_higher (void); _CRTALLOC(".CRT$XIAA") _PIFV mingw_pcinit = pre_c_init; _CRTALLOC(".CRT$XCAA") _PVFV mingw_pcppinit = pre_cpp_init; @@ -115,8 +114,8 @@ pre_c_init (void) __set_app_type (_CONSOLE_APP); __onexitbegin = __onexitend = (_PVFV *) _encode_pointer ((_PVFV *)(-1)); - *_imp___fmode = _fmode; - *_imp___commode = _commode; + * __MINGW_IMP_SYMBOL(_fmode) = _fmode; + * __MINGW_IMP_SYMBOL(_commode) = _commode; #ifdef WPRFLAG _wsetargv(); @@ -152,6 +151,8 @@ pre_cpp_init (void) static int __tmainCRTStartup (void); +int WinMainCRTStartup (void); + int WinMainCRTStartup (void) { mingw_app_type = 1; @@ -159,6 +160,12 @@ int WinMainCRTStartup (void) return __tmainCRTStartup (); } +int mainCRTStartup (void); + +#ifdef _WIN64 +int __mingw_init_ehandler (void); +#endif + int mainCRTStartup (void) { mingw_app_type = 0; @@ -166,7 +173,7 @@ int mainCRTStartup (void) return __tmainCRTStartup (); } - +static __declspec(noinline) int __tmainCRTStartup (void) { @@ -174,7 +181,7 @@ __tmainCRTStartup (void) STARTUPINFO StartupInfo; BOOL inDoubleQuote = FALSE; memset (&StartupInfo, 0, sizeof (STARTUPINFO)); - + if (mingw_app_type) GetStartupInfo (&StartupInfo); { @@ -211,18 +218,17 @@ __tmainCRTStartup (void) _ASSERTE(__native_startup_state == __initialized); if (! nested) (VOID)InterlockedExchangePointer ((volatile PVOID *) &__native_startup_lock, 0); - - if (__dyn_tls_init_callback != NULL && _IsNonwritableInCurrentImage ((PBYTE) &__dyn_tls_init_callback)) + + if (__dyn_tls_init_callback != NULL) __dyn_tls_init_callback (NULL, DLL_THREAD_ATTACH, NULL); - + _pei386_runtime_relocator (); - -#if defined(__i386__) || defined(_M_IX86) - __writefsdword(0, 0xffffffff); + __mingw_oldexcpt_handler = SetUnhandledExceptionFilter (_gnu_exception_handler); +#ifdef _WIN64 + __mingw_init_ehandler (); #endif - //AddVectoredExceptionHandler (0, (PVECTORED_EXCEPTION_HANDLER)__mingw_vex); - SetUnhandledExceptionFilter (_gnu_exception_handler); - + __mingw_prepare_except_for_msvcr80_and_higher (); + _fpreset (); if (mingw_app_type) @@ -239,7 +245,7 @@ __tmainCRTStartup (void) #ifdef _MBCS if (_ismbblead (*lpszCommandLine)) { - if (lpszCommandLine) + if (*lpszCommandLine) lpszCommandLine++; } #endif @@ -248,21 +254,11 @@ __tmainCRTStartup (void) while (*lpszCommandLine && (*lpszCommandLine <= SPACECHAR)) lpszCommandLine++; -#ifdef WPRFLAG - /* C++ initialization. - gcc inserts this call automatically for a function called main, but not for wmain. */ - __main (); - mainret = wmain ( - (int) (StartupInfo.dwFlags & STARTF_USESHOWWINDOW ? StartupInfo.wShowWindow : SW_SHOWDEFAULT), - (wchar_t **) lpszCommandLine, (wchar_t **) (HINSTANCE) &__ImageBase); -#else - mainret = main ( - (int) (StartupInfo.dwFlags & STARTF_USESHOWWINDOW ? StartupInfo.wShowWindow : SW_SHOWDEFAULT), - (char **) lpszCommandLine, (char **) (HINSTANCE) &__ImageBase); -#endif + __mingw_winmain_hInstance = (HINSTANCE) &__ImageBase; + __mingw_winmain_lpCmdLine = lpszCommandLine; + __mingw_winmain_nShowCmd = StartupInfo.dwFlags & STARTF_USESHOWWINDOW ? + StartupInfo.wShowWindow : SW_SHOWDEFAULT; } - else - { duplicate_ppstrings (argc, &argv); #ifdef WPRFLAG __winitenv = envp; @@ -274,7 +270,6 @@ __tmainCRTStartup (void) __initenv = envp; mainret = main (argc, argv, envp); #endif - } if (!managedapp) exit (mainret); @@ -328,7 +323,7 @@ check_managed_app (void) } static long CALLBACK -_gnu_exception_handler (EXCEPTION_POINTERS * exception_data) +_gnu_exception_handler (EXCEPTION_POINTERS *exception_data) { void (*old_handler) (int); long action = EXCEPTION_CONTINUE_SEARCH; @@ -399,42 +394,26 @@ _gnu_exception_handler (EXCEPTION_POINTERS * exception_data) action = EXCEPTION_CONTINUE_EXECUTION; } break; - +#ifdef _WIN64 + case EXCEPTION_DATATYPE_MISALIGNMENT: + case EXCEPTION_ARRAY_BOUNDS_EXCEEDED: + case EXCEPTION_FLT_STACK_CHECK: + case EXCEPTION_INT_OVERFLOW: + case EXCEPTION_INVALID_HANDLE: + /*case EXCEPTION_POSSIBLE_DEADLOCK: */ + action = EXCEPTION_CONTINUE_EXECUTION; + break; +#endif default: break; } + + if (action == EXCEPTION_CONTINUE_SEARCH && __mingw_oldexcpt_handler) + action = (*__mingw_oldexcpt_handler)(exception_data); return action; } -#if 0 -static LONG __mingw_vex(EXCEPTION_POINTERS * exception_data) -{ - /* TODO this is not chainablem, therefore need rewrite. Disabled the ill code. */ - #if 0 - #ifdef _WIN64 - __asm__ __volatile__ ( - "movq %gs:0,%rax" "\n\t" - "orq %rax,%rax\n\t" - "jz l1\n\t" - "jmp *8(%rax)\n\r" - "l1:\n\t" - "nop\n"); -#else - __asm__ __volatile__ ( - "movl %fs:0,%eax" "\n\t" - "orl %eax,%eax\n\t" - "jz l1\n\t" - "jmp *4(%eax)\n\r" - "l1:\n\t" - "nop\n"); -#endif -#endif - return _gnu_exception_handler(exception_data); -} -#endif - #ifdef WPRFLAG - static size_t wbytelen(const wchar_t *p) { size_t ret = 1; @@ -465,7 +444,7 @@ static void duplicate_ppstrings (int ac, char ***av) char **avl; int i; char **n = (char **) malloc (sizeof (char *) * (ac + 1)); - + avl=*av; for (i=0; i < ac; i++) { @@ -477,3 +456,35 @@ static void duplicate_ppstrings (int ac, char ***av) *av = n; } #endif + +static void +__mingw_invalidParameterHandler (const wchar_t *expression __attribute__ ((__unused__)), + const wchar_t *function __attribute__ ((__unused__)), + const wchar_t *file __attribute__ ((__unused__)), + unsigned int line __attribute__ ((__unused__)), + uintptr_t pReserved __attribute__ ((__unused__))) +{ +#ifdef __MINGW_SHOW_INVALID_PARAMETER_EXCEPTION + wprintf(L"Invalid parameter detected in function %s. File: %s Line: %d\n", function, file, line); + wprintf(L"Expression: %s\n", expression); +#endif +} + +static void __cdecl +__mingw_prepare_except_for_msvcr80_and_higher (void) +{ + _invalid_parameter_handler (*fIPH)(_invalid_parameter_handler) = NULL; + HMODULE hmsv = GetModuleHandleA ("msvcr80.dll"); + if(!hmsv) + hmsv = GetModuleHandleA ("msvcr70.dll"); + if (!hmsv) + hmsv = GetModuleHandleA ("msvcrt.dll"); + if (!hmsv) + hmsv = LoadLibraryA ("msvcrt.dll"); + if (!hmsv) + return; + fIPH = (_invalid_parameter_handler (*)(_invalid_parameter_handler)) + GetProcAddress (hmsv, "_set_invalid_parameter_handler"); + if (fIPH) + (*fIPH)(__mingw_invalidParameterHandler); +} diff --git a/reactos/lib/3rdparty/mingw/dll_argv.c b/reactos/lib/3rdparty/mingw/dll_argv.c new file mode 100644 index 00000000000..eb8dad6b667 --- /dev/null +++ b/reactos/lib/3rdparty/mingw/dll_argv.c @@ -0,0 +1,25 @@ +/** + * This file has no copyright assigned and is placed in the Public Domain. + * This file is part of the w64 mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within this package. + */ + +#ifdef CRTDLL +#undef CRTDLL +#endif + +#include + +extern int _dowildcard; + +#ifdef WPRFLAG +int __CRTDECL +__wsetargv (void) +#else +int __CRTDECL +__setargv (void) +#endif +{ + _dowildcard = 1; + return 0; +} diff --git a/reactos/lib/3rdparty/mingw/dllentry.c b/reactos/lib/3rdparty/mingw/dllentry.c index dc0aaa25fdf..80516860214 100644 --- a/reactos/lib/3rdparty/mingw/dllentry.c +++ b/reactos/lib/3rdparty/mingw/dllentry.c @@ -8,7 +8,11 @@ #define _DECL_DLLMAIN #include -BOOL WINAPI DllEntryPoint(HANDLE hDllHandle, DWORD dwReason, LPVOID lpreserved) +BOOL WINAPI DllEntryPoint (HANDLE, DWORD, LPVOID); + +BOOL WINAPI DllEntryPoint (HANDLE hDllHandle __attribute__ ((__unused__)), + DWORD dwReason __attribute__ ((__unused__)), + LPVOID lpreserved __attribute__ ((__unused__))) { return TRUE; } diff --git a/reactos/lib/3rdparty/mingw/dllmain.c b/reactos/lib/3rdparty/mingw/dllmain.c index 1e52c8598d6..834e5a89a66 100644 --- a/reactos/lib/3rdparty/mingw/dllmain.c +++ b/reactos/lib/3rdparty/mingw/dllmain.c @@ -2,7 +2,9 @@ #define _DECL_DLLMAIN #include -BOOL WINAPI DllMain(HANDLE hDllHandle, DWORD dwReason, LPVOID lpreserved) +BOOL WINAPI DllMain (HANDLE hDllHandle __attribute__ ((__unused__)), + DWORD dwReason __attribute__ ((__unused__)), + LPVOID lpreserved __attribute__ ((__unused__))) { return TRUE; } diff --git a/reactos/lib/3rdparty/mingw/dummy_mingwthrd.c b/reactos/lib/3rdparty/mingw/dummy_mingwthrd.c new file mode 100644 index 00000000000..7dd2f462cee --- /dev/null +++ b/reactos/lib/3rdparty/mingw/dummy_mingwthrd.c @@ -0,0 +1,146 @@ +/* + * mthr_stub.c + * + * Implement Mingw-w64 thread-support. + * + * This file is used by if gcc is built with --enable-threads=win32. + * + * Based on version created by Mumit Khan + * + */ + +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#include + +BOOL __mingw_TLScallback (HANDLE hDllHandle, DWORD reason, LPVOID reserved); +int ___w64_mingwthr_remove_key_dtor (DWORD key); +int ___w64_mingwthr_add_key_dtor (DWORD key, void (*dtor)(void *)); + +/* To protect the thread/key association data structure modifications. */ +static CRITICAL_SECTION __mingwthr_cs; +static volatile int __mingwthr_cs_init = 0; + +typedef struct __mingwthr_key __mingwthr_key_t; + +/* The list of threads active with key/dtor pairs. */ +struct __mingwthr_key { + DWORD key; + void (*dtor)(void *); + __mingwthr_key_t volatile *next; +}; + + +static __mingwthr_key_t volatile *key_dtor_list; + +int +___w64_mingwthr_add_key_dtor (DWORD key, void (*dtor)(void *)) +{ + __mingwthr_key_t *new_key; + + if (__mingwthr_cs_init == 0) + return 0; + new_key = (__mingwthr_key_t *) calloc (1, sizeof (__mingwthr_key_t)); + if (new_key == NULL) + return -1; + + new_key->key = key; + new_key->dtor = dtor; + + EnterCriticalSection (&__mingwthr_cs); + + new_key->next = key_dtor_list; + key_dtor_list = new_key; + + LeaveCriticalSection (&__mingwthr_cs); + return 0; +} + +int +___w64_mingwthr_remove_key_dtor (DWORD key) +{ + __mingwthr_key_t volatile *prev_key; + __mingwthr_key_t volatile *cur_key; + + if (__mingwthr_cs_init == 0) + return 0; + + EnterCriticalSection (&__mingwthr_cs); + + prev_key = NULL; + cur_key = key_dtor_list; + + while (cur_key != NULL) + { + if ( cur_key->key == key) + { + if (prev_key == NULL) + key_dtor_list = cur_key->next; + else + prev_key->next = cur_key->next; + + free ((void*)cur_key); + break; + } + prev_key = cur_key; + cur_key = cur_key->next; + } + + LeaveCriticalSection (&__mingwthr_cs); + return 0; +} + +static void +__mingwthr_run_key_dtors (void) +{ + __mingwthr_key_t volatile *keyp; + + if (__mingwthr_cs_init == 0) + return; + EnterCriticalSection (&__mingwthr_cs); + + for (keyp = key_dtor_list; keyp; ) + { + LPVOID value = TlsGetValue (keyp->key); + if (GetLastError () == ERROR_SUCCESS) + { + if (value) + (*keyp->dtor) (value); + } + keyp = keyp->next; + } + + LeaveCriticalSection (&__mingwthr_cs); +} + +BOOL +__mingw_TLScallback (HANDLE hDllHandle __attribute__ ((__unused__)), + DWORD reason, + LPVOID reserved __attribute__ ((__unused__))) +{ + switch (reason) + { + case DLL_PROCESS_ATTACH: + if (__mingwthr_cs_init == 0) + InitializeCriticalSection (&__mingwthr_cs); + __mingwthr_cs_init = 1; + break; + case DLL_PROCESS_DETACH: + __mingwthr_run_key_dtors(); + if (__mingwthr_cs_init == 1) + { + __mingwthr_cs_init = 0; + DeleteCriticalSection (&__mingwthr_cs); + } + break; + case DLL_THREAD_ATTACH: + break; + case DLL_THREAD_DETACH: + __mingwthr_run_key_dtors(); + break; + } + return TRUE; +} + diff --git a/reactos/lib/3rdparty/mingw/gccmain.c b/reactos/lib/3rdparty/mingw/gccmain.c index b2db698c3ad..af68c48a955 100644 --- a/reactos/lib/3rdparty/mingw/gccmain.c +++ b/reactos/lib/3rdparty/mingw/gccmain.c @@ -13,11 +13,16 @@ extern func_ptr __CTOR_LIST__[]; extern func_ptr __DTOR_LIST__[]; static HMODULE hMsvcrt = NULL; +static int free_Msvcrt = 0; typedef void __cdecl flongjmp(jmp_buf _Buf,int _Value); flongjmp *fctMsvcrtLongJmp = NULL; +void __do_global_dtors (void); +void __do_global_ctors (void); +void __main (void); + void __do_global_dtors (void) { @@ -28,8 +33,9 @@ __do_global_dtors (void) (*(p)) (); p++; } - if (hMsvcrt) + if (free_Msvcrt && hMsvcrt) { + free_Msvcrt = 0; FreeLibrary (hMsvcrt); hMsvcrt = NULL; } @@ -42,7 +48,15 @@ __do_global_ctors (void) unsigned long i; if (!hMsvcrt) { - hMsvcrt = LoadLibrary ("msvcrt.dll"); + hMsvcrt = GetModuleHandleA ("msvcr80.dll"); + if (!hMsvcrt) + hMsvcrt = GetModuleHandleA ("msvcr70.dll"); + if (!hMsvcrt) + hMsvcrt = GetModuleHandleA ("msvcrt.dll"); + if (!hMsvcrt) { + hMsvcrt = LoadLibraryA ("msvcrt.dll"); + free_Msvcrt = 1; + } fctMsvcrtLongJmp = (flongjmp *) GetProcAddress( hMsvcrt, "longjmp"); } diff --git a/reactos/lib/3rdparty/mingw/gs_support.c b/reactos/lib/3rdparty/mingw/gs_support.c index 90bd8831cf9..eafb2216d59 100644 --- a/reactos/lib/3rdparty/mingw/gs_support.c +++ b/reactos/lib/3rdparty/mingw/gs_support.c @@ -43,6 +43,8 @@ static const EXCEPTION_POINTERS GS_ExceptionPointers = { DECLSPEC_SELECTANY UINT_PTR __security_cookie = DEFAULT_SECURITY_COOKIE; DECLSPEC_SELECTANY UINT_PTR __security_cookie_complement = ~(DEFAULT_SECURITY_COOKIE); +void __cdecl __security_init_cookie (void); + void __cdecl __security_init_cookie (void) { @@ -86,6 +88,8 @@ __security_init_cookie (void) __security_cookie_complement = ~cookie; } +__declspec(noreturn) void __cdecl __report_gsfailure (ULONGLONG); + __declspec(noreturn) void __cdecl __report_gsfailure (ULONGLONG StackCookie) { @@ -108,22 +112,12 @@ __report_gsfailure (ULONGLONG StackCookie) else #endif { -#ifdef __GNUC__ #ifdef _WIN64 GS_ContextRecord.Rip = (ULONGLONG) __builtin_return_address (0); GS_ContextRecord.Rsp = (ULONGLONG) __builtin_frame_address (0) + 8; #else GS_ContextRecord.Eip = (DWORD) __builtin_return_address (0); GS_ContextRecord.Esp = (DWORD) __builtin_frame_address (0) + 4; -#endif -#else -#ifdef _WIN64 - GS_ContextRecord.Rip = (ULONGLONG) _ReturnAddress(); - GS_ContextRecord.Rsp = (ULONGLONG) _AddressOfReturnAddress(); -#else - GS_ContextRecord.Eip = (DWORD) _ReturnAddress(); - GS_ContextRecord.Esp = (DWORD) _AddressOfReturnAddress(); -#endif #endif } diff --git a/reactos/lib/3rdparty/mingw/mingw.rbuild b/reactos/lib/3rdparty/mingw/mingw.rbuild index c41e7a4b325..777b95e68fc 100644 --- a/reactos/lib/3rdparty/mingw/mingw.rbuild +++ b/reactos/lib/3rdparty/mingw/mingw.rbuild @@ -8,21 +8,28 @@ kernel32 _newmode.c atonexit.c + binmode.c charmax.c cinitexe.c CRT_fp10.c CRT_fp8.c + CRT_glob.c + crt_handler.c dllentry.c + dummy_mingwthrd.c gccmain.c - getopt.c + gs_support.c merr.c + mingw_helpers.c + mingwthrd_nomt.c natstart.c pesect.c pseudo-reloc.c pseudo-reloc-list.c tlssup.c + txtmode.c wildcard.c xncommod.c xthdloc.c @@ -35,6 +42,7 @@ crt0_c.c crtexe.c dllargv.c + ucrtexe.c @@ -44,11 +52,13 @@ crt0_w.c crtexe.c dllargv.c + ucrtexe.c include/reactos/mingw-w64 crtdll.c dllargv.c + udllargc.c diff --git a/reactos/lib/3rdparty/mingw/mingw_custom.c b/reactos/lib/3rdparty/mingw/mingw_custom.c new file mode 100644 index 00000000000..280eab9b1c8 --- /dev/null +++ b/reactos/lib/3rdparty/mingw/mingw_custom.c @@ -0,0 +1,16 @@ +/** + * This file has no copyright assigned and is placed in the Public Domain. + * This file is part of the w64 mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within this package. + */ + +#include <_mingw.h> +#include "../revstamp.h" + +const char *__mingw_get_crt_info (void) +{ + return "MinGW-W64 Runtime " __MINGW64_VERSION_STR " (" + __MINGW64_VERSION_STATE " - " + "rev. " __MINGW_W64_REV ") " __MINGW_W64_REV_STAMP; +} + diff --git a/reactos/lib/3rdparty/mingw/mingwthrd_nomt.c b/reactos/lib/3rdparty/mingw/mingwthrd_nomt.c new file mode 100644 index 00000000000..7df31f67969 --- /dev/null +++ b/reactos/lib/3rdparty/mingw/mingwthrd_nomt.c @@ -0,0 +1,30 @@ +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#include + +/* We support TLS cleanup code in any case. If shared version of libgcc is used _CRT_MT has value 1, otherwise + we do tls cleanup in runtime and _CRT_MT has value 2. */ +int _CRT_MT = 2; + +int __mingwthr_key_dtor (DWORD key, void (*dtor)(void *)); +int __mingwthr_remove_key_dtor (DWORD key); + +extern int ___w64_mingwthr_remove_key_dtor (DWORD key); +extern int ___w64_mingwthr_add_key_dtor (DWORD key, void (*dtor)(void *)); + +int +__mingwthr_remove_key_dtor (DWORD key) +{ + return ___w64_mingwthr_remove_key_dtor (key); +} + +int +__mingwthr_key_dtor (DWORD key, void (*dtor)(void *)) +{ + if (dtor) + return ___w64_mingwthr_add_key_dtor (key, dtor); + + return 0; +} diff --git a/reactos/lib/3rdparty/mingw/pesect.c b/reactos/lib/3rdparty/mingw/pesect.c index d9bbf55513c..2e835f252f8 100644 --- a/reactos/lib/3rdparty/mingw/pesect.c +++ b/reactos/lib/3rdparty/mingw/pesect.c @@ -5,6 +5,7 @@ */ #include +#include #if defined (_WIN64) && defined (__ia64__) #error FIXME: Unsupported __ImageBase implementation. @@ -15,6 +16,8 @@ extern IMAGE_DOS_HEADER __ImageBase; #endif +BOOL _ValidateImageBase (PBYTE); + BOOL _ValidateImageBase (PBYTE pImageBase) { @@ -34,6 +37,8 @@ _ValidateImageBase (PBYTE pImageBase) return TRUE; } +PIMAGE_SECTION_HEADER _FindPESection (PBYTE, DWORD_PTR); + PIMAGE_SECTION_HEADER _FindPESection (PBYTE pImageBase, DWORD_PTR rva) { @@ -54,6 +59,80 @@ _FindPESection (PBYTE pImageBase, DWORD_PTR rva) return NULL; } +PIMAGE_SECTION_HEADER _FindPESectionByName (const char *); + +PIMAGE_SECTION_HEADER +_FindPESectionByName (const char *pName) +{ + PBYTE pImageBase; + PIMAGE_NT_HEADERS pNTHeader; + PIMAGE_SECTION_HEADER pSection; + unsigned int iSection; + + /* Long names aren't supported. */ + if (strlen (pName) > IMAGE_SIZEOF_SHORT_NAME) + return NULL; + + pImageBase = (PBYTE) &__ImageBase; + if (! _ValidateImageBase (pImageBase)) + return NULL; + + pNTHeader = (PIMAGE_NT_HEADERS) (pImageBase + ((PIMAGE_DOS_HEADER) pImageBase)->e_lfanew); + + for (iSection = 0, pSection = IMAGE_FIRST_SECTION (pNTHeader); + iSection < pNTHeader->FileHeader.NumberOfSections; + ++iSection,++pSection) + { + if (!strncmp ((char *) &pSection->Name[0], pName, IMAGE_SIZEOF_SHORT_NAME)) + return pSection; + } + return NULL; +} + +PIMAGE_SECTION_HEADER _FindPESectionExec (size_t); + +PIMAGE_SECTION_HEADER +_FindPESectionExec (size_t eNo) +{ + PBYTE pImageBase; + PIMAGE_NT_HEADERS pNTHeader; + PIMAGE_SECTION_HEADER pSection; + unsigned int iSection; + + pImageBase = (PBYTE) &__ImageBase; + if (! _ValidateImageBase (pImageBase)) + return NULL; + + pNTHeader = (PIMAGE_NT_HEADERS) (pImageBase + ((PIMAGE_DOS_HEADER) pImageBase)->e_lfanew); + + for (iSection = 0, pSection = IMAGE_FIRST_SECTION (pNTHeader); + iSection < pNTHeader->FileHeader.NumberOfSections; + ++iSection,++pSection) + { + if ((pSection->Characteristics & IMAGE_SCN_MEM_EXECUTE) != 0) + { + if (!eNo) + return pSection; + --eNo; + } + } + return NULL; +} + +PBYTE _GetPEImageBase (void); + +PBYTE +_GetPEImageBase (void) +{ + PBYTE pImageBase; + pImageBase = (PBYTE) &__ImageBase; + if (! _ValidateImageBase (pImageBase)) + return NULL; + return pImageBase; +} + +BOOL _IsNonwritableInCurrentImage (PBYTE); + BOOL _IsNonwritableInCurrentImage (PBYTE pTarget) { diff --git a/reactos/lib/3rdparty/mingw/pseudo-reloc.c b/reactos/lib/3rdparty/mingw/pseudo-reloc.c index b107f62a68a..8b5de51ff53 100644 --- a/reactos/lib/3rdparty/mingw/pseudo-reloc.c +++ b/reactos/lib/3rdparty/mingw/pseudo-reloc.c @@ -2,12 +2,17 @@ * This file has no copyright assigned and is placed in the Public Domain. * This file is part of the w64 mingw-runtime package. * No warranty is given; refer to the file DISCLAIMER within this package. + * + * Contributed by Egor Duda + * Modified by addition of runtime_pseudo_reloc version 2 + * by Kai Tietz */ #include #include #include #include +#include extern char __RUNTIME_PSEUDO_RELOC_LIST__; extern char __RUNTIME_PSEUDO_RELOC_LIST_END__; @@ -31,15 +36,14 @@ typedef struct { } runtime_pseudo_reloc_v2; static void -__write_memory (void *addr,const void *src,size_t len) +__write_memory (void *addr, const void *src, size_t len) { MEMORY_BASIC_INFORMATION b; DWORD oldprot; if (!len) return; - if (!VirtualQuery (addr, &b, sizeof(b))) - abort (); - // Protect + assert (VirtualQuery (addr, &b, sizeof(b))); + /* Temporarily allow write access to read-only protected memory. */ if (b.Protect != PAGE_EXECUTE_READWRITE && b.Protect != PAGE_READWRITE) VirtualProtect (b.BaseAddress, b.RegionSize, PAGE_EXECUTE_READWRITE, &oldprot); @@ -52,7 +56,7 @@ __write_memory (void *addr,const void *src,size_t len) #define RP_VERSION_V2 1 static void -do_pseudo_reloc (void* start,void *end,void *base) +do_pseudo_reloc (void *start, void *end, void *base) { ptrdiff_t addr_imp, reldata; ptrdiff_t reloc_target = (ptrdiff_t) ((char *)end - (char*)start); @@ -81,8 +85,10 @@ do_pseudo_reloc (void* start,void *end,void *base) /* Check if this is a known version. */ if (v2_hdr->version != RP_VERSION_V2) { +#ifdef DEBUG fprintf (stderr, "pseudo_relocation protocol version %d is unknown to this runtime.\n", (int) v2_hdr->version); +#endif return; } /* Walk over header. */ @@ -120,7 +126,9 @@ do_pseudo_reloc (void* start,void *end,void *base) #endif default: reldata=0; +#ifdef DEBUG fprintf(stderr, "Unknown pseudo relocation bit size %d\n",(int) (r->flags & 0xff)); +#endif break; } reldata -= ((ptrdiff_t) base + r->sym); @@ -145,8 +153,10 @@ do_pseudo_reloc (void* start,void *end,void *base) } } +void _pei386_runtime_relocator (void); + void -_pei386_runtime_relocator () +_pei386_runtime_relocator (void) { static int was_init = 0; if (was_init) diff --git a/reactos/lib/3rdparty/mingw/tlssup.c b/reactos/lib/3rdparty/mingw/tlssup.c index f933fa652dd..0088beb2f1a 100644 --- a/reactos/lib/3rdparty/mingw/tlssup.c +++ b/reactos/lib/3rdparty/mingw/tlssup.c @@ -14,6 +14,8 @@ #include #include +extern BOOL __mingw_TLScallback (HANDLE hDllHandle, DWORD reason, LPVOID reserved); + #define FUNCS_PER_NODE 30 typedef struct TlsDtorNode { @@ -24,20 +26,21 @@ typedef struct TlsDtorNode { ULONG _tls_index = 0; -_CRTALLOC(".tls") char _tls_start = 0; +/* TLS raw template data start and end. */ +_CRTALLOC(".tls$AAA") char _tls_start = 0; _CRTALLOC(".tls$ZZZ") char _tls_end = 0; _CRTALLOC(".CRT$XLA") PIMAGE_TLS_CALLBACK __xl_a = 0; _CRTALLOC(".CRT$XLZ") PIMAGE_TLS_CALLBACK __xl_z = 0; #ifdef _WIN64 -_CRTALLOC(".rdata$T") const IMAGE_TLS_DIRECTORY64 _tls_used = { - (ULONGLONG) &_tls_start, (ULONGLONG) &_tls_end, (ULONGLONG) &_tls_index, +_CRTALLOC(".tls") const IMAGE_TLS_DIRECTORY64 _tls_used = { + (ULONGLONG) &_tls_start+1, (ULONGLONG) &_tls_end, (ULONGLONG) &_tls_index, (ULONGLONG) (&__xl_a+1), (ULONG) 0, (ULONG) 0 }; #else -_CRTALLOC(".rdata$T") const IMAGE_TLS_DIRECTORY _tls_used = { - (ULONG)(ULONG_PTR) &_tls_start, (ULONG)(ULONG_PTR) &_tls_end, +_CRTALLOC(".tls") const IMAGE_TLS_DIRECTORY _tls_used = { + (ULONG)(ULONG_PTR) &_tls_start+1, (ULONG)(ULONG_PTR) &_tls_end, (ULONG)(ULONG_PTR) &_tls_index, (ULONG)(ULONG_PTR) (&__xl_a+1), (ULONG) 0, (ULONG) 0 }; @@ -47,38 +50,59 @@ _CRTALLOC(".rdata$T") const IMAGE_TLS_DIRECTORY _tls_used = { #ifdef HAVE_ATTRIBUTE_THREAD #define __CRT_THREAD __declspec(thread) #else -#define __CRT_THREAD +#define __CRT_THREAD __thread #endif #endif +#define DISABLE_MS_TLS 1 + static _CRTALLOC(".CRT$XDA") _PVFV __xd_a = 0; static _CRTALLOC(".CRT$XDZ") _PVFV __xd_z = 0; + +#if !defined (DISABLE_MS_TLS) static __CRT_THREAD TlsDtorNode *dtor_list; static __CRT_THREAD TlsDtorNode dtor_list_head; +#endif + +extern int _CRT_MT; + +BOOL WINAPI __dyn_tls_init (HANDLE, DWORD, LPVOID); BOOL WINAPI __dyn_tls_init (HANDLE hDllHandle, DWORD dwReason, LPVOID lpreserved) { _PVFV *pfunc; + /* We don't let us trick here. */ + if (_CRT_MT != 2) + _CRT_MT = 2; + if (dwReason != DLL_THREAD_ATTACH) - return TRUE; + { + if (dwReason == DLL_PROCESS_ATTACH) + __mingw_TLScallback (hDllHandle, dwReason, lpreserved); + return TRUE; + } for (pfunc = &__xd_a + 1; pfunc != &__xd_z; ++pfunc) { if (*pfunc != NULL) (*pfunc)(); } - return TRUE; } const PIMAGE_TLS_CALLBACK __dyn_tls_init_callback = (const PIMAGE_TLS_CALLBACK) __dyn_tls_init; _CRTALLOC(".CRT$XLC") PIMAGE_TLS_CALLBACK __xl_c = (PIMAGE_TLS_CALLBACK) __dyn_tls_init; +int __cdecl __tlregdtor (_PVFV); + int __cdecl __tlregdtor (_PVFV func) { + if (!func) + return 0; +#if !defined (DISABLE_MS_TLS) if (dtor_list == NULL) { dtor_list = &dtor_list_head; @@ -96,29 +120,42 @@ __tlregdtor (_PVFV func) dtor_list->count = 0; } dtor_list->funcs[dtor_list->count++] = func; +#endif return 0; } static BOOL WINAPI __dyn_tls_dtor (HANDLE hDllHandle, DWORD dwReason, LPVOID lpreserved) { +#if !defined (DISABLE_MS_TLS) TlsDtorNode *pnode, *pnext; int i; +#endif if (dwReason != DLL_THREAD_DETACH && dwReason != DLL_PROCESS_DETACH) return TRUE; - - for (pnode = dtor_list; pnode != NULL; pnode = pnext) + /* As TLS variables are detroyed already by DLL_THREAD_DETACH + call, we have to avoid access on the possible DLL_PROCESS_DETACH + call the already destroyed TLS vars. + TODO: The used local thread based variables have to be handled + manually, so that we can control their lifetime here. */ +#if !defined (DISABLE_MS_TLS) + if (dwReason != DLL_PROCESS_DETACH) { - for (i = pnode->count - 1; i >= 0; --i) - { - if (pnode->funcs[i] != NULL) - (*pnode->funcs[i])(); - } - pnext = pnode->next; - if (pnext != NULL) - free ((void *) pnode); + for (pnode = dtor_list; pnode != NULL; pnode = pnext) + { + for (i = pnode->count - 1; i >= 0; --i) + { + if (pnode->funcs[i] != NULL) + (*pnode->funcs[i])(); + } + pnext = pnode->next; + if (pnext != NULL) + free ((void *) pnode); + } } +#endif + __mingw_TLScallback (hDllHandle, dwReason, lpreserved); return TRUE; } diff --git a/reactos/lib/3rdparty/mingw/txtmode.c b/reactos/lib/3rdparty/mingw/txtmode.c new file mode 100644 index 00000000000..59a960ceecf --- /dev/null +++ b/reactos/lib/3rdparty/mingw/txtmode.c @@ -0,0 +1,13 @@ +/** + * This file has no copyright assigned and is placed in the Public Domain. + * This file is part of the w64 mingw-runtime package. + * No warranty is given; refer to the file DISCLAIMER within this package. + */ + +#include + +/* Set default file mode to text */ + +/* Is this correct? Default value of _fmode in msvcrt.dll is 0. */ + +int _fmode = _O_TEXT; diff --git a/reactos/lib/3rdparty/mingw/wildcard.c b/reactos/lib/3rdparty/mingw/wildcard.c index bb7ff704e94..82085d31cec 100644 --- a/reactos/lib/3rdparty/mingw/wildcard.c +++ b/reactos/lib/3rdparty/mingw/wildcard.c @@ -4,4 +4,16 @@ * No warranty is given; refer to the file DISCLAIMER within this package. */ +/* _dowildcard is an int that controls the globbing of the command line. + * If _dowildcard is non-zero, the command line will be globbed: *.* + * will be expanded to be all files in the startup directory. + * In the mingw-w64 library the _dowildcard variable is defined as being + * 0, therefore command line globbing is DISABLED by default. To turn it + * on and to leave wildcard command line processing MS's globbing code, + * include a line in one of your source modules defining _dowildcard and + * setting it to -1, like so: + * int _dowildcard = -1; + */ + int _dowildcard = 0; + From 0252732c7f996335134741d0895f7abef5bf24ca Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Wed, 4 Nov 2009 21:34:46 +0000 Subject: [PATCH 064/286] Fix rbuild file svn path=/branches/ros-amd64-bringup/; revision=43957 --- reactos/lib/3rdparty/mingw/mingw.rbuild | 3 --- 1 file changed, 3 deletions(-) diff --git a/reactos/lib/3rdparty/mingw/mingw.rbuild b/reactos/lib/3rdparty/mingw/mingw.rbuild index 777b95e68fc..84f92ac83d8 100644 --- a/reactos/lib/3rdparty/mingw/mingw.rbuild +++ b/reactos/lib/3rdparty/mingw/mingw.rbuild @@ -42,7 +42,6 @@ crt0_c.c crtexe.c dllargv.c - ucrtexe.c @@ -52,13 +51,11 @@ crt0_w.c crtexe.c dllargv.c - ucrtexe.c include/reactos/mingw-w64 crtdll.c dllargv.c - udllargc.c From 1dac06d95f52858796c5ac4e58ea9aaf131e1e38 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Wed, 4 Nov 2009 23:15:07 +0000 Subject: [PATCH 065/286] Hey Arch, next time you change 3rdparty code, either make sure, it's merged upstream or provide a diff, please. Adding back MSVC fixes. svn path=/branches/ros-amd64-bringup/; revision=43964 --- reactos/include/reactos/mingw-w64/internal.h | 10 +++ reactos/include/reactos/mingw-w64/oscalls.h | 9 ++ .../include/reactos/mingw-w64/reactos.diff | 83 ++++++++++++++++++ .../include/reactos/mingw-w64/sect_attribs.h | 10 ++- reactos/lib/3rdparty/mingw/CRT_fp10.c | 12 ++- reactos/lib/3rdparty/mingw/CRT_fp8.c | 4 + reactos/lib/3rdparty/mingw/crtexe.c | 5 ++ reactos/lib/3rdparty/mingw/gs_support.c | 10 +++ reactos/lib/3rdparty/mingw/reactos.diff | 87 +++++++++++++++++++ 9 files changed, 228 insertions(+), 2 deletions(-) create mode 100644 reactos/include/reactos/mingw-w64/reactos.diff create mode 100644 reactos/lib/3rdparty/mingw/reactos.diff diff --git a/reactos/include/reactos/mingw-w64/internal.h b/reactos/include/reactos/mingw-w64/internal.h index 13376e28ed9..235e13cbe64 100644 --- a/reactos/include/reactos/mingw-w64/internal.h +++ b/reactos/include/reactos/mingw-w64/internal.h @@ -32,6 +32,12 @@ extern "C" { #define __IOINFO_TM_UTF8 1 #define __IOINFO_TM_UTF16LE 2 +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable:4214) +#pragma warning(disable:4820) +#endif + typedef struct { intptr_t osfhnd; char osfile; @@ -43,6 +49,10 @@ extern "C" { char pipech2[2]; } ioinfo; +#ifdef _MSC_VER +#pragma warning(pop) +#endif + #define IOINFO_ARRAY_ELTS (1 << 5) #define _pioinfo(i) (__pioinfo[(i) >> 5] + ((i) & (IOINFO_ARRAY_ELTS - 1))) diff --git a/reactos/include/reactos/mingw-w64/oscalls.h b/reactos/include/reactos/mingw-w64/oscalls.h index cdcb23e51db..132686d15c4 100644 --- a/reactos/include/reactos/mingw-w64/oscalls.h +++ b/reactos/include/reactos/mingw-w64/oscalls.h @@ -30,6 +30,11 @@ #endif #endif +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable:4214) +#endif + typedef struct _FTIME { unsigned short twosecs : 5; @@ -46,6 +51,10 @@ typedef struct _FDATE unsigned short year : 7; } FDATE; +#ifdef _MSC_VER +#pragma warning(pop) +#endif + typedef FDATE *PFDATE; #endif diff --git a/reactos/include/reactos/mingw-w64/reactos.diff b/reactos/include/reactos/mingw-w64/reactos.diff new file mode 100644 index 00000000000..412066108cf --- /dev/null +++ b/reactos/include/reactos/mingw-w64/reactos.diff @@ -0,0 +1,83 @@ +Index: internal.h +=================================================================== +--- internal.h (Revision 43956) ++++ internal.h (Arbeitskopie) +@@ -32,6 +32,12 @@ + #define __IOINFO_TM_UTF8 1 + #define __IOINFO_TM_UTF16LE 2 + ++#ifdef _MSC_VER ++#pragma warning(push) ++#pragma warning(disable:4214) ++#pragma warning(disable:4820) ++#endif ++ + typedef struct { + intptr_t osfhnd; + char osfile; +@@ -43,6 +49,10 @@ + char pipech2[2]; + } ioinfo; + ++#ifdef _MSC_VER ++#pragma warning(pop) ++#endif ++ + #define IOINFO_ARRAY_ELTS (1 << 5) + + #define _pioinfo(i) (__pioinfo[(i) >> 5] + ((i) & (IOINFO_ARRAY_ELTS - 1))) +Index: oscalls.h +=================================================================== +--- oscalls.h (Revision 43956) ++++ oscalls.h (Arbeitskopie) +@@ -30,6 +30,11 @@ + #endif + #endif + ++#ifdef _MSC_VER ++#pragma warning(push) ++#pragma warning(disable:4214) ++#endif ++ + typedef struct _FTIME + { + unsigned short twosecs : 5; +@@ -46,6 +51,10 @@ + unsigned short year : 7; + } FDATE; + ++#ifdef _MSC_VER ++#pragma warning(pop) ++#endif ++ + typedef FDATE *PFDATE; + + #endif +Index: sect_attribs.h +=================================================================== +--- sect_attribs.h (Revision 43956) ++++ sect_attribs.h (Arbeitskopie) +@@ -10,7 +10,7 @@ + #define _ATTRIBUTES shared + #endif + +-#if 0 ++#if defined(_MSC_VER) + /* Reference list of existing section for msvcrt. */ + #pragma section(".CRTMP$XCA",long,_ATTRIBUTES) + #pragma section(".CRTMP$XCZ",long,_ATTRIBUTES) +@@ -55,6 +55,14 @@ + #pragma section(".rtc$IZZ",long,read) + #pragma section(".rtc$TAA",long,read) + #pragma section(".rtc$TZZ",long,read) ++#pragma section(".tls",long,read,write) ++#pragma section(".tls$ZZZ",long,read,write) + #endif + ++#if defined(_MSC_VER) ++#define _CRTALLOC(x) __declspec(allocate(x)) ++#elif defined(__GNUC__) + #define _CRTALLOC(x) __attribute__ ((section (x) )) ++#else ++#error ++#endif diff --git a/reactos/include/reactos/mingw-w64/sect_attribs.h b/reactos/include/reactos/mingw-w64/sect_attribs.h index 681b0cb3197..da09e9bbad2 100644 --- a/reactos/include/reactos/mingw-w64/sect_attribs.h +++ b/reactos/include/reactos/mingw-w64/sect_attribs.h @@ -10,7 +10,7 @@ #define _ATTRIBUTES shared #endif -#if 0 +#if defined(_MSC_VER) /* Reference list of existing section for msvcrt. */ #pragma section(".CRTMP$XCA",long,_ATTRIBUTES) #pragma section(".CRTMP$XCZ",long,_ATTRIBUTES) @@ -55,6 +55,14 @@ #pragma section(".rtc$IZZ",long,read) #pragma section(".rtc$TAA",long,read) #pragma section(".rtc$TZZ",long,read) +#pragma section(".tls",long,read,write) +#pragma section(".tls$ZZZ",long,read,write) #endif +#if defined(_MSC_VER) +#define _CRTALLOC(x) __declspec(allocate(x)) +#elif defined(__GNUC__) #define _CRTALLOC(x) __attribute__ ((section (x) )) +#else +#error +#endif diff --git a/reactos/lib/3rdparty/mingw/CRT_fp10.c b/reactos/lib/3rdparty/mingw/CRT_fp10.c index 4069ad7c204..34384b09458 100644 --- a/reactos/lib/3rdparty/mingw/CRT_fp10.c +++ b/reactos/lib/3rdparty/mingw/CRT_fp10.c @@ -7,6 +7,16 @@ void _fpreset (void); void _fpreset (void) - { __asm__ ("fninit" ) ;} +{ +#ifdef __GNUC__ + __asm__ ("fninit" ); +#else + __asm fninit; +#endif +} +#ifdef __GNUC__ void __attribute__ ((alias ("_fpreset"))) fpreset(void); +#else +void fpreset(void) { _fpreset(); } +#endif diff --git a/reactos/lib/3rdparty/mingw/CRT_fp8.c b/reactos/lib/3rdparty/mingw/CRT_fp8.c index 13240e5e04a..7e46c15fbe9 100644 --- a/reactos/lib/3rdparty/mingw/CRT_fp8.c +++ b/reactos/lib/3rdparty/mingw/CRT_fp8.c @@ -14,4 +14,8 @@ void _fpreset (void) (* __MINGW_IMP_SYMBOL(_fpreset))(); } +#ifdef __GNUC__ void __attribute__ ((alias ("_fpreset"))) fpreset(void); +#else +void fpreset(void) { _fpreset(); } +#endif diff --git a/reactos/lib/3rdparty/mingw/crtexe.c b/reactos/lib/3rdparty/mingw/crtexe.c index 9fabd0e338f..409b76bbdfa 100644 --- a/reactos/lib/3rdparty/mingw/crtexe.c +++ b/reactos/lib/3rdparty/mingw/crtexe.c @@ -20,6 +20,7 @@ #include #include #include +#include #ifndef __winitenv extern wchar_t *** __MINGW_IMP_SYMBOL(__winitenv); @@ -51,7 +52,11 @@ extern int * __MINGW_IMP_SYMBOL(_commode); #define _commode (* __MINGW_IMP_SYMBOL(_commode)) extern int _dowildcard; +#if defined(__GNUC__) int _MINGW_INSTALL_DEBUG_MATHERR __attribute__((weak)) = 0; +#else +int _MINGW_INSTALL_DEBUG_MATHERR = 0; +#endif extern int __defaultmatherr; extern _CRTIMP void __cdecl _initterm(_PVFV *, _PVFV *); diff --git a/reactos/lib/3rdparty/mingw/gs_support.c b/reactos/lib/3rdparty/mingw/gs_support.c index eafb2216d59..cb9ba11a700 100644 --- a/reactos/lib/3rdparty/mingw/gs_support.c +++ b/reactos/lib/3rdparty/mingw/gs_support.c @@ -112,12 +112,22 @@ __report_gsfailure (ULONGLONG StackCookie) else #endif { +#ifdef __GNUC__ #ifdef _WIN64 GS_ContextRecord.Rip = (ULONGLONG) __builtin_return_address (0); GS_ContextRecord.Rsp = (ULONGLONG) __builtin_frame_address (0) + 8; #else GS_ContextRecord.Eip = (DWORD) __builtin_return_address (0); GS_ContextRecord.Esp = (DWORD) __builtin_frame_address (0) + 4; +#endif +#else +#ifdef _WIN64 + GS_ContextRecord.Rip = (ULONGLONG) _ReturnAddress(); + GS_ContextRecord.Rsp = (ULONGLONG) _AddressOfReturnAddress(); +#else + GS_ContextRecord.Eip = (DWORD) _ReturnAddress(); + GS_ContextRecord.Esp = (DWORD) _AddressOfReturnAddress(); +#endif #endif } diff --git a/reactos/lib/3rdparty/mingw/reactos.diff b/reactos/lib/3rdparty/mingw/reactos.diff new file mode 100644 index 00000000000..88d81ed1570 --- /dev/null +++ b/reactos/lib/3rdparty/mingw/reactos.diff @@ -0,0 +1,87 @@ +Index: CRT_fp10.c +=================================================================== +--- CRT_fp10.c (Revision 43956) ++++ CRT_fp10.c (Arbeitskopie) +@@ -7,6 +7,16 @@ + void _fpreset (void); + + void _fpreset (void) +- { __asm__ ("fninit" ) ;} ++{ ++#ifdef __GNUC__ ++ __asm__ ("fninit" ); ++#else ++ __asm fninit; ++#endif ++} + ++#ifdef __GNUC__ + void __attribute__ ((alias ("_fpreset"))) fpreset(void); ++#else ++void fpreset(void) { _fpreset(); } ++#endif +Index: CRT_fp8.c +=================================================================== +--- CRT_fp8.c (Revision 43956) ++++ CRT_fp8.c (Arbeitskopie) +@@ -14,4 +14,8 @@ + (* __MINGW_IMP_SYMBOL(_fpreset))(); + } + ++#ifdef __GNUC__ + void __attribute__ ((alias ("_fpreset"))) fpreset(void); ++#else ++void fpreset(void) { _fpreset(); } ++#endif +Index: crtexe.c +=================================================================== +--- crtexe.c (Revision 43956) ++++ crtexe.c (Arbeitskopie) +@@ -20,6 +20,7 @@ + #include + #include + #include ++#include + + #ifndef __winitenv + extern wchar_t *** __MINGW_IMP_SYMBOL(__winitenv); +@@ -51,7 +52,11 @@ + #define _commode (* __MINGW_IMP_SYMBOL(_commode)) + extern int _dowildcard; + ++#if defined(__GNUC__) + int _MINGW_INSTALL_DEBUG_MATHERR __attribute__((weak)) = 0; ++#else ++int _MINGW_INSTALL_DEBUG_MATHERR = 0; ++#endif + extern int __defaultmatherr; + extern _CRTIMP void __cdecl _initterm(_PVFV *, _PVFV *); + +Index: gs_support.c +=================================================================== +--- gs_support.c (Revision 43956) ++++ gs_support.c (Arbeitskopie) +@@ -112,6 +112,7 @@ + else + #endif + { ++#ifdef __GNUC__ + #ifdef _WIN64 + GS_ContextRecord.Rip = (ULONGLONG) __builtin_return_address (0); + GS_ContextRecord.Rsp = (ULONGLONG) __builtin_frame_address (0) + 8; +@@ -119,6 +120,15 @@ + GS_ContextRecord.Eip = (DWORD) __builtin_return_address (0); + GS_ContextRecord.Esp = (DWORD) __builtin_frame_address (0) + 4; + #endif ++#else ++#ifdef _WIN64 ++ GS_ContextRecord.Rip = (ULONGLONG) _ReturnAddress(); ++ GS_ContextRecord.Rsp = (ULONGLONG) _AddressOfReturnAddress(); ++#else ++ GS_ContextRecord.Eip = (DWORD) _ReturnAddress(); ++ GS_ContextRecord.Esp = (DWORD) _AddressOfReturnAddress(); ++#endif ++#endif + } + + #ifdef _WIN64 From d10c7dea846d0bc1fc6abf618ce2942d12809c35 Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Thu, 5 Nov 2009 01:56:29 +0000 Subject: [PATCH 066/286] [USER32] - Fix several user32 warnings. - Sync GetWindow*A/W with wine and unify all versions, commenting out a wine hack. - As a bonus implement GetWindowLongPtrA/W. - Tested to work in trunk. svn path=/branches/ros-amd64-bringup/; revision=43965 --- reactos/dll/win32/user32/misc/exit.c | 2 +- reactos/dll/win32/user32/misc/misc.c | 6 +- reactos/dll/win32/user32/misc/resources.c | 2 +- reactos/dll/win32/user32/misc/stubs.c | 4 +- reactos/dll/win32/user32/windows/class.c | 184 ++++++++++------------ 5 files changed, 87 insertions(+), 111 deletions(-) diff --git a/reactos/dll/win32/user32/misc/exit.c b/reactos/dll/win32/user32/misc/exit.c index 6c4bfa64da1..b36305560e0 100644 --- a/reactos/dll/win32/user32/misc/exit.c +++ b/reactos/dll/win32/user32/misc/exit.c @@ -101,7 +101,7 @@ RegisterServicesProcess(DWORD ServicesProcessId) NTSTATUS Status; CsrRequest = MAKE_CSR_API(REGISTER_SERVICES_PROCESS, CSR_GUI); - Request.Data.RegisterServicesProcessRequest.ProcessId = (HANDLE)ServicesProcessId; + Request.Data.RegisterServicesProcessRequest.ProcessId = LongToHandle(ServicesProcessId); Status = CsrClientCallServer(&Request, NULL, diff --git a/reactos/dll/win32/user32/misc/misc.c b/reactos/dll/win32/user32/misc/misc.c index 5b8e9be5bf2..811f4ab3afc 100644 --- a/reactos/dll/win32/user32/misc/misc.c +++ b/reactos/dll/win32/user32/misc/misc.c @@ -274,7 +274,7 @@ TestWindowProcess(PWND Wnd) return TRUE; else return (NtUserQueryWindow(Wnd->head.h, QUERY_WINDOW_UNIQUE_PROCESS_ID) == - (DWORD)NtCurrentTeb()->ClientId.UniqueProcess ); + (DWORD_PTR)NtCurrentTeb()->ClientId.UniqueProcess ); } BOOL @@ -300,7 +300,7 @@ GetUser32Handle(HANDLE handle) INT Index; USHORT generation; - Index = (((UINT)handle & 0xffff) - FIRST_USER_HANDLE) >> 1; + Index = (((UINT_PTR)handle & 0xffff) - FIRST_USER_HANDLE) >> 1; if (Index < 0 || Index >= gHandleTable->nb_handles) return NULL; @@ -308,7 +308,7 @@ GetUser32Handle(HANDLE handle) if (!gHandleEntries[Index].type || !gHandleEntries[Index].ptr) return NULL; - generation = (UINT)handle >> 16; + generation = (UINT_PTR)handle >> 16; if (generation == gHandleEntries[Index].generation || !generation || generation == 0xffff) return &gHandleEntries[Index]; diff --git a/reactos/dll/win32/user32/misc/resources.c b/reactos/dll/win32/user32/misc/resources.c index 171494c3192..c0db56c8da2 100644 --- a/reactos/dll/win32/user32/misc/resources.c +++ b/reactos/dll/win32/user32/misc/resources.c @@ -174,7 +174,7 @@ UnregisterDeviceNotification(HDEVNOTIFY Handle) return FALSE; } - ConfigRet = UnRegNotify((ULONG) Handle ); + ConfigRet = UnRegNotify( HandleToUlong(Handle) ); if (ConfigRet != CR_SUCCESS) { switch (ConfigRet) diff --git a/reactos/dll/win32/user32/misc/stubs.c b/reactos/dll/win32/user32/misc/stubs.c index b053f389da9..05c4c92044f 100644 --- a/reactos/dll/win32/user32/misc/stubs.c +++ b/reactos/dll/win32/user32/misc/stubs.c @@ -193,11 +193,11 @@ SetSysColorsTemp(const COLORREF *pPens, SysColorBrushes[i] = pBrushes[i]; } - return (DWORD) pOldCol; /* FIXME: pointer truncation */ + return PtrToLong(pOldCol); /* FIXME: pointer truncation */ } if (!pPens && !pBrushes) /* "restore" call */ { - LPVOID pOldCol = (LPVOID)n; /* FIXME: not 64-bit safe */ + LPVOID pOldCol = LongToPtr(n); /* FIXME: not 64-bit safe */ LPVOID p = pOldCol; DWORD nCount = *(DWORD *)p; p = (char*)p + sizeof(DWORD); diff --git a/reactos/dll/win32/user32/windows/class.c b/reactos/dll/win32/user32/windows/class.c index 1701cc185de..1a8b2924c5a 100644 --- a/reactos/dll/win32/user32/windows/class.c +++ b/reactos/dll/win32/user32/windows/class.c @@ -658,6 +658,65 @@ GetClassWord( } +LONG_PTR Internal_GetWindowLong( HWND hwnd, INT offset, UINT size, BOOL unicode ) +{ + LONG_PTR retvalue = 0; + WND *wndPtr; + + if (offset == GWLP_HWNDPARENT) + { + HWND parent = GetAncestor( hwnd, GA_PARENT ); + if (parent == GetDesktopWindow()) parent = GetWindow( hwnd, GW_OWNER ); + return (ULONG_PTR)parent; + } + + if (!(wndPtr = ValidateHwnd( hwnd ))) + { + SetLastError( ERROR_INVALID_WINDOW_HANDLE ); + return 0; + } + + if (offset >= 0) + { + if (offset > (int)(wndPtr->cbwndExtra - size)) + { + WARN("Invalid offset %d\n", offset ); + SetLastError( ERROR_INVALID_INDEX ); + return 0; + } + retvalue = *((LONG_PTR *)((PCHAR)(wndPtr + 1) + offset)); + + /* WINE: special case for dialog window procedure */ + //if ((offset == DWLP_DLGPROC) && (size == sizeof(LONG_PTR)) && (wndPtr->flags & WIN_ISDIALOG)) + // retvalue = (LONG_PTR)IntGetWndProc( (WNDPROC)retvalue, unicode ); + return retvalue; + } + + switch(offset) + { + case GWLP_USERDATA: retvalue = wndPtr->dwUserData; break; + case GWL_STYLE: retvalue = wndPtr->style; break; + case GWL_EXSTYLE: retvalue = wndPtr->ExStyle; break; + case GWLP_ID: retvalue = wndPtr->IDMenu; break; + case GWLP_HINSTANCE: retvalue = (ULONG_PTR)wndPtr->hModule; break; + case GWLP_WNDPROC: + { + if (!TestWindowProcess(wndPtr)) + { + SetLastError(ERROR_ACCESS_DENIED); + retvalue = 0; + } + retvalue = (ULONG_PTR)IntGetWndProc(wndPtr, unicode); + break; + } + default: + WARN("Unknown offset %d\n", offset ); + SetLastError( ERROR_INVALID_INDEX ); + break; + } + return retvalue; + +} /* * @implemented */ @@ -665,58 +724,9 @@ LONG WINAPI GetWindowLongA ( HWND hWnd, int nIndex ) { - PWND Wnd; - - Wnd = ValidateHwnd(hWnd); - if (Wnd == NULL) - return 0; - - if (nIndex >= 0) - { - if ((DWORD)nIndex + sizeof(LONG) > Wnd->cbwndExtra) - { - SetLastError(ERROR_INVALID_PARAMETER); - return 0; - } - return *((LONG *)((PCHAR)(Wnd + 1) + nIndex)); - } - else - { - switch (nIndex) - { - case GWL_EXSTYLE: - return Wnd->ExStyle; - case GWL_STYLE: - return Wnd->style; - case GWL_HINSTANCE: - return (LONG)Wnd->hModule; - case GWL_ID: - return Wnd->IDMenu; - case GWL_USERDATA: - return Wnd->dwUserData; - - case GWL_HWNDPARENT: - { - HWND parent = GetAncestor( hWnd, GA_PARENT ); - if (parent == GetDesktopWindow()) parent = GetWindow( hWnd, GW_OWNER ); - return (LONG)parent; - } - case GWL_WNDPROC: - if (!TestWindowProcess(Wnd)) - { - SetLastError(ERROR_ACCESS_DENIED); - return 0; - } - return IntGetWndProc(Wnd, TRUE); - - default: - SetLastError(ERROR_INVALID_PARAMETER); - return 0; - } - } + return Internal_GetWindowLong( hWnd, nIndex, sizeof(LONG), FALSE ); } - /* * @implemented */ @@ -724,55 +734,7 @@ LONG WINAPI GetWindowLongW(HWND hWnd, int nIndex) { - PWND Wnd; - - Wnd = ValidateHwnd(hWnd); - if (Wnd == NULL) - return 0; - - if (nIndex >= 0) - { - if ((DWORD)nIndex + sizeof(LONG) > Wnd->cbwndExtra) - { - SetLastError(ERROR_INVALID_PARAMETER); - return 0; - } - return *((LONG *)((PCHAR)(Wnd + 1) + nIndex)); - } - else - { - switch (nIndex) - { - case GWL_EXSTYLE: - return Wnd->ExStyle; - case GWL_STYLE: - return Wnd->style; - case GWL_HINSTANCE: - return (LONG)Wnd->hModule; - case GWL_ID: - return Wnd->IDMenu; - case GWL_USERDATA: - return Wnd->dwUserData; - - case GWL_HWNDPARENT: - { - HWND parent = GetAncestor( hWnd, GA_PARENT ); - if (parent == GetDesktopWindow()) parent = GetWindow( hWnd, GW_OWNER ); - return (LONG)parent; - } - case GWL_WNDPROC: - if (!TestWindowProcess(Wnd)) - { - SetLastError(ERROR_ACCESS_DENIED); - return 0; - } - return IntGetWndProc(Wnd, FALSE); - - default: - SetLastError(ERROR_INVALID_PARAMETER); - return 0; - } - } + return Internal_GetWindowLong( hWnd, nIndex, sizeof(LONG), TRUE ); } #ifdef _WIN64 @@ -784,8 +746,7 @@ WINAPI GetWindowLongPtrA(HWND hWnd, INT nIndex) { - UNIMPLEMENTED; - return 0; + return Internal_GetWindowLong( hWnd, nIndex, sizeof(LONG_PTR), FALSE ); } /* @@ -796,8 +757,8 @@ WINAPI GetWindowLongPtrW(HWND hWnd, INT nIndex) { - UNIMPLEMENTED; - return 0; + return Internal_GetWindowLong( hWnd, nIndex, sizeof(LONG_PTR), TRUE ); + } #endif // _WIN64 @@ -808,7 +769,22 @@ WORD WINAPI GetWindowWord(HWND hWnd, int nIndex) { - return (WORD)GetWindowLongW(hWnd, nIndex); + switch(nIndex) + { + case GWLP_ID: + case GWLP_HINSTANCE: + case GWLP_HWNDPARENT: + break; + default: + if (nIndex < 0) + { + WARN("Invalid offset %d\n", nIndex ); + SetLastError( ERROR_INVALID_INDEX ); + return 0; + } + break; + } + return Internal_GetWindowLong( hWnd, nIndex, sizeof(WORD), FALSE ); } /* From 78f7d3afa42ef025924931227f53a1514cc7f96a Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 5 Nov 2009 03:24:40 +0000 Subject: [PATCH 067/286] add memcpy symbol, to resolve references created by the compiler svn path=/branches/ros-amd64-bringup/; revision=43968 --- reactos/lib/sdk/crt/mem/i386/memmove_asm.s | 2 ++ 1 file changed, 2 insertions(+) diff --git a/reactos/lib/sdk/crt/mem/i386/memmove_asm.s b/reactos/lib/sdk/crt/mem/i386/memmove_asm.s index e27006e3bed..4ca288b8470 100644 --- a/reactos/lib/sdk/crt/mem/i386/memmove_asm.s +++ b/reactos/lib/sdk/crt/mem/i386/memmove_asm.s @@ -4,8 +4,10 @@ * NOTE: This code is duplicated in memcpy_asm.s */ +.globl _memcpy .globl _memmove +_memcpy: _memmove: push %ebp mov %esp,%ebp From f3575b3a3ad55de090a28b287db21043ce2b5ecf Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 5 Nov 2009 03:25:46 +0000 Subject: [PATCH 068/286] undefine i386 in the pspec file svn path=/branches/ros-amd64-bringup/; revision=43969 --- reactos/subsystems/win32/win32k/win32k.pspec | 1 + 1 file changed, 1 insertion(+) diff --git a/reactos/subsystems/win32/win32k/win32k.pspec b/reactos/subsystems/win32/win32k/win32k.pspec index 79bf17ecdc3..bd2a06eb746 100644 --- a/reactos/subsystems/win32/win32k/win32k.pspec +++ b/reactos/subsystems/win32/win32k/win32k.pspec @@ -1,4 +1,5 @@ #include "include/reactos/msvctarget.h" +#undef i386 @ stdcall -arch=i386 FLOATOBJ_AddFloatObj(ptr ptr) FLOATOBJ_Add @ stdcall -arch=i386 FLOATOBJ_DivFloatObj(ptr ptr) FLOATOBJ_Div From 2ba5d7773ffbeb2baa380acbe487429e5e037204 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 5 Nov 2009 12:18:16 +0000 Subject: [PATCH 069/286] [KDCOM] add a few dbgprints svn path=/branches/ros-amd64-bringup/; revision=43972 --- reactos/drivers/base/kddll/kddll.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/reactos/drivers/base/kddll/kddll.c b/reactos/drivers/base/kddll/kddll.c index 43aca1d534a..ee54c9df741 100644 --- a/reactos/drivers/base/kddll/kddll.c +++ b/reactos/drivers/base/kddll/kddll.c @@ -150,6 +150,7 @@ KdReceivePacket( if (KdStatus != KDP_PACKET_RECEIVED) { /* Didn't receive a PacketType. */ + KDDBGPRINT("KdReceivePacket - Didn't receive a PacketType.\n"); return KdStatus; } @@ -157,6 +158,7 @@ KdReceivePacket( if (Packet.PacketLeader == CONTROL_PACKET_LEADER && Packet.PacketType == PACKET_TYPE_KD_RESEND) { + KDDBGPRINT("KdReceivePacket - PACKET_TYPE_KD_RESEND.\n"); return KDP_PACKET_RESEND; } @@ -165,6 +167,7 @@ KdReceivePacket( if (KdStatus != KDP_PACKET_RECEIVED) { /* Didn't receive ByteCount. */ + KDDBGPRINT("KdReceivePacket - Didn't receive ByteCount.\n"); return KdStatus; } @@ -173,6 +176,7 @@ KdReceivePacket( if (KdStatus != KDP_PACKET_RECEIVED) { /* Didn't receive PacketId. */ + KDDBGPRINT("KdReceivePacket - Didn't receive PacketId.\n"); return KdStatus; } @@ -189,6 +193,7 @@ KdReceivePacket( if (KdStatus != KDP_PACKET_RECEIVED) { /* Didn't receive Checksum. */ + KDDBGPRINT("KdReceivePacket - Didn't receive Checksum.\n"); return KdStatus; } @@ -281,7 +286,7 @@ KdReceivePacket( /* Do we have data? */ if (MessageData->Length) { - KDDBGPRINT("KdReceivePacket - got data\n"); + KDDBGPRINT("KdReceivePacket - 0x%lx bytes data\n", *DataLength); /* Receive the message data */ KdStatus = KdpReceiveBuffer(MessageData->Buffer, @@ -325,6 +330,7 @@ KdReceivePacket( if (Packet.PacketId != RemotePacketId) { /* Continue with next packet */ + KDDBGPRINT("KdReceivePacket - Wrong PacketId.\n"); continue; } From d5e954a17defce95327ec3f4617df5a33b786f1b Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 5 Nov 2009 20:35:08 +0000 Subject: [PATCH 070/286] Update kernel32.pspec based on Win7 32 and 64 bit, most stuff commented out so far. svn path=/branches/ros-amd64-bringup/; revision=43979 --- reactos/dll/win32/kernel32/kernel32.pspec | 603 ++++++++++++++++++---- 1 file changed, 512 insertions(+), 91 deletions(-) diff --git a/reactos/dll/win32/kernel32/kernel32.pspec b/reactos/dll/win32/kernel32/kernel32.pspec index af9e822a3fc..fc8bd96d98a 100644 --- a/reactos/dll/win32/kernel32/kernel32.pspec +++ b/reactos/dll/win32/kernel32/kernel32.pspec @@ -5,14 +5,21 @@ @ stdcall AddAtomW(wstr) @ stdcall AddConsoleAliasA(str str str) ;check @ stdcall AddConsoleAliasW(wstr wstr wstr) ;check +;@ stdcall -arch=x86_64 AddIntegrityLabelToBoundaryDescriptor ; Win 7 @ stdcall AddLocalAlternateComputerNameA(str ptr) @ stdcall AddLocalAlternateComputerNameW(wstr ptr) ;@ stdcall AddRefActCtx(ptr) +;@ stdcall AddSIDToBoundaryDescriptor ; Win 7 +;@ stdcall AddSecureMemoryCacheCallback ; Win 7 @ stdcall AddVectoredContinueHandler(long ptr) ntdll.RtlAddVectoredContinueHandler @ stdcall AddVectoredExceptionHandler(long ptr) ntdll.RtlAddVectoredExceptionHandler +;@ stdcall AdjustCalendarDate ; Win 7 @ stdcall AllocConsole() -@ stub AllocLSCallback ; missing in XP SP3 and 2003 R2 +@ stub AllocLSCallback ; missing in XP SP3 and 2003 R2 and Win 7 @ stdcall AllocateUserPhysicalPages(long ptr ptr) +;@ stdcall AllocateUserPhysicalPagesNuma ; Win 7 +;@ stdcall ApplicationRecoveryFinished ; Win 7 +;@ stdcall ApplicationRecoveryInProgress ; Win 7 @ stdcall AreFileApisANSI() @ stdcall AssignProcessToJobObject(ptr ptr) @ stdcall AttachConsole(long) @@ -20,18 +27,36 @@ @ stdcall BackupSeek(ptr long long ptr ptr ptr) @ stdcall BackupWrite(ptr ptr long ptr long long ptr) @ stdcall BaseCheckAppcompatCache(long long long ptr) ;check +;@ stdcall BaseCheckAppcompatCacheEx ; Win7 @ stub BaseCheckRunApp -@ stdcall BaseCleanupAppcompatCache() +@ stdcall BaseCleanupAppcompatCache() ; missing in Win 7 @ stdcall BaseCleanupAppcompatCacheSupport(ptr) +;@ stdcall BaseDllReadWriteIniFile ; Win 7 @ stdcall BaseDumpAppcompatCache() @ stdcall BaseFlushAppcompatCache() -@ stdcall BaseInitAppcompatCache() +;@ stdcall BaseFormatObjectAttributes ; Win 7 +;@ stdcall BaseFormatTimeOut ; Win 7 +;@ stdcall BaseGenerateAppCompatData ; Win 7 +;@ stdcall BaseGetNamedObjectDirectory ; Win 7 +@ stdcall BaseInitAppcompatCache() ; missing in Win 7 @ stdcall BaseInitAppcompatCacheSupport() -@ stdcall BaseProcessInitPostImport() +;@ stdcall BaseIsAppcompatInfrastructureDisabled ; Win 7 +@ stdcall BaseProcessInitPostImport() ; missing in Win 7 @ stdcall BaseQueryModuleData(str str ptr ptr ptr) ;check +;@ stdcall BaseThreadInitThunk ; Win 7 +;@ stdcall BaseSetLastNTError ; Win 7, not 64 bit @ stdcall BaseUpdateAppcompatCache(long long long) +;@ stdcall BaseVerifyUnicodeString ; Win 7 +;@ stdcall Basep8BitStringToDynamicUnicodeString ; Win 7 +;@ stdcall BasepAllocateActivationContextActivationBlock ; Win 7 +;@ stdcall BasepAnsiStringToDynamicUnicodeString ; Win 7 +;@ stdcall BasepCheckAppCompat ; Win 7 +;@ stdcall BasepCheckBadapp ; Win 7 @ stub BasepCheckWinSaferRestrictions -@ stub BasepDebugDump ; missing in XP SP3 +@ stub BasepDebugDump ; missing in XP SP3 and Win 7 +;@ stdcall BasepFreeActivationContextActivationBlock ; Win 7 +;@ stdcall BasepFreeAppCompatData ; Win 7 +;@ stdcall BasepMapModuleHandle ; Win 7 @ stdcall Beep(long long) @ stdcall BeginUpdateResourceA(str long) @ stdcall BeginUpdateResourceW(wstr long) @@ -42,13 +67,18 @@ @ stdcall BuildCommDCBW(wstr ptr) @ stdcall CallNamedPipeA(str ptr long ptr long ptr long) @ stdcall CallNamedPipeW(wstr ptr long ptr long ptr long) +;@ stdcall CallbackMayRunLong ; Win 7 @ stdcall CancelDeviceWakeupRequest(long) @ stdcall CancelIo(long) @ stdcall CancelIoEx(long ptr) @ stdcall CancelSynchronousIo(long) +;@ stdcall CancelThreadpoolIo ; Win 7 @ stdcall CancelTimerQueueTimer(long long) @ stdcall CancelWaitableTimer(long) @ stdcall ChangeTimerQueueTimer(long long long long) +;@ stdcall CheckElevation ; Win 7 +;@ stdcall CheckElevationEnabled ; Win 7 +;@ stdcall CheckForReadOnlyResource ; Win 7 @ stdcall CheckNameLegalDOS8Dot3A(str str long long long) @ stdcall CheckNameLegalDOS8Dot3W(wstr str long long long) @ stdcall CheckRemoteDebuggerPresent(long ptr) @@ -56,81 +86,127 @@ @ stdcall ClearCommError(long ptr ptr) @ stdcall CloseConsoleHandle(long) @ stdcall CloseHandle(long) +;@ stdcall ClosePrivateNamespace ; Win 7 @ stdcall CloseProfileUserMapping() -@ stub CloseSystemHandle ; missing in XP SP3 +@ stub CloseSystemHandle ; missing in XP SP3 and Win 7 +;@ stdcall CloseThreadpool ; Win 7 +;@ stdcall CloseThreadpoolCleanupGroup ; Win 7 +;@ stdcall CloseThreadpoolCleanupGroupMembers ; Win 7 +;@ stdcall CloseThreadpoolIo ; Win 7 +;@ stdcall CloseThreadpoolTimer ; Win 7 +;@ stdcall CloseThreadpoolWait ; Win 7 +;@ stdcall CloseThreadpoolWork ; Win 7 @ stdcall CmdBatNotification(long) @ stdcall CommConfigDialogA(str long ptr) @ stdcall CommConfigDialogW(wstr long ptr) +;@ stdcall CompareCalendarDates ; Win 7 @ stdcall CompareFileTime(ptr ptr) @ stdcall CompareStringA(long long str long str long) +;@ stdcall CompareStringEx ; Win 7 +;@ stdcall CompareStringOrdinal ; Win 7 @ stdcall CompareStringW(long long wstr long wstr long) @ stdcall ConnectNamedPipe(long ptr) @ stdcall ConsoleMenuControl(long long long) -@ stub ConsoleSubst ; missing in XP SP3 +@ stub ConsoleSubst ; missing in XP SP3 and Win 7 @ stdcall ContinueDebugEvent(long long long) +;@ stdcall ConvertCalDateTimeToSystemTime ; Win 7 @ stdcall ConvertDefaultLocale (long) @ stdcall ConvertFiberToThread() +;@ stdcall ConvertNLSDayOfWeekToWin32DayOfWeek ; Win 7 +;@ stdcall ConvertSystemTimeToCalDateTime ; Win 7 @ stdcall ConvertThreadToFiber(ptr) @ stdcall ConvertThreadToFiberEx(ptr long) +;@ stdcall CopyExtendedContext ; Win 7 @ stdcall CopyFileA(str str long) @ stdcall CopyFileExA (str str ptr ptr ptr long) @ stdcall CopyFileExW (wstr wstr ptr ptr ptr long) +;@ stdcall CopyFileTransactedA ; Win 7 +;@ stdcall CopyFileTransactedW ; Win 7 @ stdcall CopyFileW(wstr wstr long) @ stdcall CopyLZFile(long long) LZCopy ;@ stdcall CreateActCtxA(ptr) ;@ stdcall CreateActCtxW(ptr) +;@ stdcall CreateBoundaryDescriptorA ; Win 7 +;@ stdcall CreateBoundaryDescriptorW ; Win 7 @ stdcall CreateConsoleScreenBuffer(long long ptr long ptr) @ stdcall CreateDirectoryA(str ptr) @ stdcall CreateDirectoryExA(str str ptr) @ stdcall CreateDirectoryExW(wstr wstr ptr) +;@ stdcall CreateDirectoryTransactedA ; Win 7 +;@ stdcall CreateDirectoryTransactedW ; Win 7 @ stdcall CreateDirectoryW(wstr ptr) @ stdcall CreateEventA(ptr long long str) +;@ stdcall CreateEventExA ; Win 7 +;@ stdcall CreateEventExW ; Win 7 @ stdcall CreateEventW(ptr long long wstr) @ stdcall CreateFiber(long ptr ptr) @ stdcall CreateFiberEx(long long long ptr ptr) @ stdcall CreateFileA(str long long ptr long long long) @ stdcall CreateFileMappingA(long ptr long long long str) +;@ stdcall CreateFileMappingNumaA ; Win 7 +;@ stdcall CreateFileMappingNumaW ; Win 7 @ stdcall CreateFileMappingW(long ptr long long long wstr) +;@ stdcall CreateFileTransactedA ; Win 7 +;@ stdcall CreateFileTransactedW ; Win 7 @ stdcall CreateFileW(wstr long long ptr long long long) @ stdcall CreateHardLinkA(str str ptr) +;@ stdcall CreateHardLinkTransactedA ; Win 7 +;@ stdcall CreateHardLinkTransactedW ; Win 7 @ stdcall CreateHardLinkW(wstr wstr ptr) @ stdcall CreateIoCompletionPort(long long long long) @ stdcall CreateJobObjectA(ptr str) @ stdcall CreateJobObjectW(ptr wstr) @ stdcall CreateJobSet(long ptr long) -@ stub CreateKernelThread ; missing in XP SP3 +@ stub CreateKernelThread ; missing in XP SP3 and Win 7 @ stdcall CreateMailslotA(ptr long long ptr) @ stdcall CreateMailslotW(ptr long long ptr) @ stdcall CreateMemoryResourceNotification(ptr) @ stdcall CreateMutexA(ptr long str) +;@ stdcall CreateMutexExA ; Win 7 +;@ stdcall CreateMutexExW ; Win 7 @ stdcall CreateMutexW(ptr long wstr) @ stdcall CreateNamedPipeA(str long long long long long long ptr) @ stdcall CreateNamedPipeW(wstr long long long long long long ptr) -@ stdcall CreateNlsSecurityDescriptor(ptr long long) +@ stdcall CreateNlsSecurityDescriptor(ptr long long) ; missing in Win 7 @ stdcall CreatePipe(ptr ptr ptr long) +;@ stdcall CreatePrivateNamespaceA ; Win 7 +;@ stdcall CreatePrivateNamespaceW ; Win 7 @ stdcall CreateProcessA(str str ptr ptr long long ptr str ptr ptr) +;@ stdcall CreateProcessAsUserW ; Win 7 @ stdcall CreateProcessInternalA(ptr str str ptr ptr long long ptr str ptr ptr long) @ stdcall CreateProcessInternalW(ptr wstr wstr ptr ptr long long ptr wstr ptr ptr long) -@ stdcall CreateProcessInternalWSecure() +@ stdcall CreateProcessInternalWSecure() ; missing in Win 7 @ stdcall CreateProcessW(wstr wstr ptr ptr long long ptr wstr ptr ptr) @ stdcall CreateRemoteThread(long ptr long ptr long long ptr) +;@ stdcall CreateRemoteThreadEx ; Win 7 @ stdcall CreateSemaphoreA(ptr long long str) -@ stdcall CreateSemaphoreW(ptr long long wstr) @ stdcall CreateSemaphoreExA(ptr long long str long long) @ stdcall CreateSemaphoreExW(ptr long long wstr long long) -@ stdcall CreateSocketHandle() +@ stdcall CreateSemaphoreW(ptr long long wstr) +@ stdcall CreateSocketHandle() ; missing in Win 7 64 bit @ stdcall CreateSymbolicLinkA(str str long) +;@ stdcall CreateSymbolicLinkTransactedA ; Win 7 +;@ stdcall CreateSymbolicLinkTransactedW ; Win 7 @ stdcall CreateSymbolicLinkW(wstr wstr long) @ stdcall CreateTapePartition(long long long long) @ stdcall CreateThread(ptr long ptr long long ptr) +;@ stdcall CreateThreadpool ; Win 7 +;@ stdcall CreateThreadpoolCleanupGroup ; Win 7 +;@ stdcall CreateThreadpoolIo ; Win 7 +;@ stdcall CreateThreadpoolTimer ; Win 7 +;@ stdcall CreateThreadpoolWait ; Win 7 +;@ stdcall CreateThreadpoolWork ; Win 7 @ stdcall CreateTimerQueue () @ stdcall CreateTimerQueueTimer(ptr long ptr ptr long long long) @ stdcall CreateToolhelp32Snapshot(long long) -@ stdcall CreateVirtualBuffer(long long long) +;@ stdcall arch=x86_64 CreateUmsCompletionList +;@ stdcall arch=x86_64 CreateUmsThreadContext +@ stdcall CreateVirtualBuffer(long long long) ; missing in Win 7 @ stdcall CreateWaitableTimerA(ptr long str) -@ stdcall CreateWaitableTimerW(ptr long wstr) @ stdcall CreateWaitableTimerExA (ptr str long long) @ stdcall CreateWaitableTimerExW (ptr wstr long long) +@ stdcall CreateWaitableTimerW(ptr long wstr) +;@ stdcall CtrlRoutine ; Win 7 ;@ stdcall DeactivateActCtx(long ptr) @ stdcall DebugActiveProcess(long) @ stdcall DebugActiveProcessStop(long) @@ -143,17 +219,26 @@ @ stdcall DefineDosDeviceW(long wstr wstr) @ stdcall DelayLoadFailureHook(str str) @ stdcall DeleteAtom(long) +;@ stdcall DeleteBoundaryDescriptor ; Win 7 @ stdcall DeleteCriticalSection(ptr) ntdll.RtlDeleteCriticalSection @ stdcall DeleteFiber(ptr) @ stdcall DeleteFileA(str) +;@ stdcall DeleteFileTransactedA ; Win 7 +;@ stdcall DeleteFileTransactedW ; Win 7 @ stdcall DeleteFileW(wstr) +;@ stdcall DeleteProcThreadAttributeList ; Win 7 @ stdcall DeleteTimerQueue(long) @ stdcall DeleteTimerQueueEx (long long) @ stdcall DeleteTimerQueueTimer(long long long) +;@ stdcall -arch=x86_64 DeleteUmsCompletionList +;@ stdcall -arch=x86_64 DeleteUmsThreadContext @ stdcall DeleteVolumeMountPointA(str) ;check @ stdcall DeleteVolumeMountPointW(wstr) ;check +;@ stdcall -arch=x86_64 DequeueUmsCompletionListItems @ stdcall DeviceIoControl(long long ptr long ptr long ptr ptr) @ stdcall DisableThreadLibraryCalls(long) +;@ stdcall DisableThreadProfiling ; Win 7 +;@ stdcall DisassociateCurrentThreadFromCallback ; Win 7 @ stdcall DisconnectNamedPipe(long) @ stdcall DnsHostnameToComputerNameA (str ptr ptr) @ stdcall DnsHostnameToComputerNameW (wstr ptr ptr) @@ -162,35 +247,48 @@ @ stdcall DosPathToSessionPathW(long wstr wstr) @ stdcall DuplicateConsoleHandle(long long long long) @ stdcall DuplicateHandle(long long long ptr long long long) +;@ stdcall EnableThreadProfiling ; Win 7 @ stdcall EncodePointer(ptr) ntdll.RtlEncodePointer @ stdcall EncodeSystemPointer(ptr) ntdll.RtlEncodeSystemPointer @ stdcall EndUpdateResourceA(long long) @ stdcall EndUpdateResourceW(long long) @ stdcall EnterCriticalSection(ptr) ntdll.RtlEnterCriticalSection +;@ stdcall -arch=x86_64 EnterUmsSchedulingMode @ stdcall EnumCalendarInfoA(ptr long long long) @ stdcall EnumCalendarInfoExA(ptr long long long) +;@ stdcall EnumCalendarInfoExEx ; Win 7 @ stdcall EnumCalendarInfoExW(ptr long long long) @ stdcall EnumCalendarInfoW(ptr long long long) @ stdcall EnumDateFormatsA(ptr long long) @ stdcall EnumDateFormatsExA(ptr long long) +;@ stdcall EnumDateFormatsExEx ; Win 7 @ stdcall EnumDateFormatsExW(ptr long long) @ stdcall EnumDateFormatsW(ptr long long) @ stdcall EnumLanguageGroupLocalesA(ptr long long ptr) @ stdcall EnumLanguageGroupLocalesW(ptr long long ptr) @ stdcall EnumResourceLanguagesA(long str str ptr long) +;@ stdcall EnumResourceLanguagesExA ; Win 7 +;@ stdcall EnumResourceLanguagesExW ; Win 7 @ stdcall EnumResourceLanguagesW(long wstr wstr ptr long) @ stdcall EnumResourceNamesA(long str ptr long) +;@ stdcall EnumResourceNamesExA ; Win 7 +;@ stdcall EnumResourceNamesExW ; Win 7 @ stdcall EnumResourceNamesW(long wstr ptr long) @ stdcall EnumResourceTypesA(long ptr long) +;@ stdcall EnumResourceTypesExA ; Win 7 +;@ stdcall EnumResourceTypesExW ; Win 7 @ stdcall EnumResourceTypesW(long ptr long) @ stdcall EnumSystemCodePagesA(ptr long) @ stdcall EnumSystemCodePagesW(ptr long) +;@ stdcall EnumSystemFirmwareTables ; Win 7 @ stdcall EnumSystemGeoID(long long ptr) @ stdcall EnumSystemLanguageGroupsA(ptr long ptr) @ stdcall EnumSystemLanguageGroupsW(ptr long ptr) @ stdcall EnumSystemLocalesA(ptr long) +;@ stdcall EnumSystemLocalesEx ; Win 7 @ stdcall EnumSystemLocalesW(ptr long) @ stdcall EnumTimeFormatsA(ptr long long) +;@ stdcall EnumTimeFormatsEx ; Win 7 @ stdcall EnumTimeFormatsW(ptr long long) @ stdcall EnumUILanguagesA(ptr long long) @ stdcall EnumUILanguagesW(ptr long long) @@ -205,7 +303,7 @@ @ stdcall ExpandEnvironmentStringsW(wstr ptr long) @ stdcall ExpungeConsoleCommandHistoryA(long) @ stdcall ExpungeConsoleCommandHistoryW(long) -@ stdcall ExtendVirtualBuffer(long long) +@ stdcall ExtendVirtualBuffer(long long) ; missing in Win 7 @ stdcall FatalAppExitA(long str) @ stdcall FatalAppExitW(long wstr) @ stdcall FatalExit(long) @@ -227,15 +325,24 @@ @ stdcall FindFirstFileA(str ptr) @ stdcall FindFirstFileExA(str long ptr long ptr long) @ stdcall FindFirstFileExW(wstr long ptr long ptr long) +;@ stdcall FindFirstFileNameTransactedW ; Win 7 +;@ stdcall FindFirstFileNameW ; Win 7 +;@ stdcall FindFirstFileTransactedA ; Win 7 +;@ stdcall FindFirstFileTransactedW ; Win 7 @ stdcall FindFirstFileW(wstr ptr) +;@ stdcall FindFirstStreamTransactedW ; Win 7 @ stdcall FindFirstStreamW(wstr ptr ptr long) @ stdcall FindFirstVolumeA(ptr long) @ stdcall FindFirstVolumeMountPointA(str ptr long) @ stdcall FindFirstVolumeMountPointW(wstr ptr long) @ stdcall FindFirstVolumeW(ptr long) +;@ stdcall FindNLSString ; Win 7 +;@ stdcall FindNLSStringEx ; Win 7 @ stdcall FindNextChangeNotification(long) @ stdcall FindNextFileA(long ptr) +;@ stdcall FindNextFileNameW ; Win 7 @ stdcall FindNextFileW(long ptr) +;@ stdcall FindNextStreamW ; Win 7 @ stdcall FindNextVolumeA(long ptr long) @ stdcall FindNextVolumeMountPointA(long str long) @ stdcall FindNextVolumeMountPointW(long wstr long) @@ -244,6 +351,7 @@ @ stdcall FindResourceExA(long str str long) @ stdcall FindResourceExW(long wstr wstr long) @ stdcall FindResourceW(long wstr wstr) +;@ stdcall FindStringOrdinal ; Win 7 @ stdcall FindVolumeClose(ptr) @ stdcall FindVolumeMountPointClose(ptr) ;@ stdcall FlsAlloc(ptr) ; missing in XP SP3 @@ -253,6 +361,7 @@ @ stdcall FlushConsoleInputBuffer(long) @ stdcall FlushFileBuffers(long) @ stdcall FlushInstructionCache(long long long) +;@ stdcall FlushProcessWriteBuffers ; Win 7 @ stdcall FlushViewOfFile(ptr long) @ stdcall FoldStringA(long str long ptr long) @ stdcall FoldStringW(long wstr long ptr long) @@ -263,22 +372,35 @@ @ stdcall FreeEnvironmentStringsW(ptr) @ stdcall FreeLibrary(long) @ stdcall FreeLibraryAndExitThread(long long) +;@ stdcall FreeLibraryWhenCallbackReturns ; Win 7 @ stdcall FreeResource(long) @ stdcall FreeUserPhysicalPages(long long long) -@ stdcall FreeVirtualBuffer(ptr) +@ stdcall FreeVirtualBuffer(ptr) ; missing in Win 7 @ stdcall GenerateConsoleCtrlEvent(long long) @ stdcall GetACP() +;@ stdcall GetActiveProcessorCount ; Win 7 +;@ stdcall GetActiveProcessorGroupCount ; Win 7 +;@ stdcall GetApplicationRecoveryCallback ; Win 7 +;@ stdcall GetApplicationRestartSettings ; Win 7 @ stdcall GetAtomNameA(long ptr long) @ stdcall GetAtomNameW(long ptr long) @ stdcall GetBinaryType(str ptr) GetBinaryTypeA @ stdcall GetBinaryTypeA(str ptr) @ stdcall GetBinaryTypeW(wstr ptr) -@ stdcall GetCPFileNameFromRegistry(long wstr long) ;check +@ stdcall GetCPFileNameFromRegistry(long wstr long) ;check missing in Win 7 @ stdcall GetCPInfo(long ptr) @ stdcall GetCPInfoExA(long long ptr) @ stdcall GetCPInfoExW(long long ptr) +;@ stdcall GetCalendarDateFormat ; Win 7 +;@ stdcall GetCalendarDateFormatEx ; Win 7 +;@ stdcall GetCalendarDaysInMonth ; Win 7 +;@ stdcall GetCalendarDifferenceInDays ; Win 7 @ stdcall GetCalendarInfoA(long long long ptr long ptr) +;@ stdcall GetCalendarInfoEx ; Win 7 @ stdcall GetCalendarInfoW(long long long ptr long ptr) +;@ stdcall GetCalendarMonthsInYear ; Win 7 +;@ stdcall GetCalendarSupportedDateRange ; Win 7 +;@ stdcall GetCalendarWeekNumber ; Win 7 @ stdcall GetComPlusPackageInstallStatus() @ stdcall GetCommConfig(long ptr long) @ stdcall GetCommMask(long ptr) @@ -289,6 +411,8 @@ @ stdcall GetCommandLineA() @ stdcall GetCommandLineW() @ stdcall GetCompressedFileSizeA(long ptr) +;@ stdcall GetCompressedFileSizeTransactedA ; Win 7 +;@ stdcall GetCompressedFileSizeTransactedW ; Win 7 @ stdcall GetCompressedFileSizeW(long ptr) @ stdcall GetComputerNameA(ptr ptr) @ stdcall GetComputerNameExA(long ptr ptr) @@ -316,6 +440,7 @@ @ stdcall GetConsoleFontInfo(long long long ptr) @ stdcall GetConsoleFontSize(long long) @ stdcall GetConsoleHardwareState(long long ptr) +;@ stdcall GetConsoleHistoryInfo ; Win 7 @ stdcall GetConsoleInputExeNameA(long ptr) @ stdcall GetConsoleInputExeNameW(long ptr) @ stdcall GetConsoleInputWaitHandle() @@ -323,30 +448,38 @@ @ stdcall GetConsoleKeyboardLayoutNameW(ptr) @ stdcall GetConsoleMode(long ptr) @ stdcall GetConsoleNlsMode(long ptr) +;@ stdcall GetConsoleOriginalTitleA ; Win 7 +;@ stdcall GetConsoleOriginalTitleW ; Win 7 @ stdcall GetConsoleOutputCP() -@ stub GetConsoleProcessList ; missing in XP SP3 +@ stub GetConsoleProcessList ; missing in XP SP3, present in Win 7 @ stdcall GetConsoleScreenBufferInfo(long ptr) +;@ stdcall GetConsoleScreenBufferInfoEx ; Win 7 @ stdcall GetConsoleSelectionInfo(ptr) @ stdcall GetConsoleTitleA(ptr long) @ stdcall GetConsoleTitleW(ptr long) @ stdcall GetConsoleWindow() @ stdcall GetCurrencyFormatA(long long str ptr str long) +;@ stdcall GetCurrencyFormatEx ; Win 7 @ stdcall GetCurrencyFormatW(long long str ptr str long) ;@ stdcall GetCurrentActCtx(ptr) @ stdcall GetCurrentConsoleFont(long long ptr) +;@ stdcall GetCurrentConsoleFontEx ; Win 7 @ stdcall GetCurrentDirectoryA(long ptr) @ stdcall GetCurrentDirectoryW(long ptr) @ stdcall GetCurrentProcess() @ stdcall GetCurrentProcessId() @ stdcall GetCurrentProcessorNumber() ntdll.RtlGetCurrentProcessorNumber +;@ stdcall GetCurrentProcessorNumberEx ; Win 7 @ stdcall GetCurrentThread() @ stdcall GetCurrentThreadId() +;@ stdcall GetCurrentUmsThread @ stdcall GetDateFormatA(long long ptr str ptr long) +;@ stdcall GetDateFormatEx ; Win 7 @ stdcall GetDateFormatW(long long ptr wstr ptr long) -@ stub GetDaylightFlag ; missing in XP SP3 +@ stub GetDaylightFlag ; missing in XP SP3 and Win 7 @ stdcall GetDefaultCommConfigA(str ptr long) @ stdcall GetDefaultCommConfigW(wstr ptr long) -@ stdcall GetDefaultSortkeySize(ptr) +@ stdcall GetDefaultSortkeySize(ptr) ; missing in Win 7 @ stdcall GetDevicePowerState(long ptr) @ stdcall GetDiskFreeSpaceA(str ptr ptr ptr ptr) @ stdcall GetDiskFreeSpaceExA (str ptr ptr ptr) @@ -356,23 +489,35 @@ @ stdcall GetDllDirectoryW(long ptr) @ stdcall GetDriveTypeA(str) @ stdcall GetDriveTypeW(wstr) +;@ stdcall GetDurationFormat ; Win 7 +;@ stdcall GetDurationFormatEx ; Win 7 +;@ stdcall GetDynamicTimeZoneInformation +;@ stdcall GetEnabledExtendedFeatures @ stdcall GetEnvironmentStrings() @ stdcall GetEnvironmentStringsA() GetEnvironmentStrings @ stdcall GetEnvironmentStringsW() @ stdcall GetEnvironmentVariableA(str ptr long) @ stdcall GetEnvironmentVariableW(wstr ptr long) +;@ stdcall GetEraNameCountedString ; Win 7 @ stdcall GetErrorMode() @ stdcall GetExitCodeProcess(long ptr) @ stdcall GetExitCodeThread(long ptr) @ stdcall GetExpandedNameA(str ptr) @ stdcall GetExpandedNameW(wstr ptr) +;@ stdcall GetExtendedContextLength ; Win 7 +;@ stdcall GetExtendedFeaturesMask ; Win 7 @ stdcall GetFileAttributesA(str) -@ stdcall GetFileAttributesByHandle(long ptr long) +@ stdcall GetFileAttributesByHandle(long ptr long) ; missing in Win 7 @ stdcall GetFileAttributesExA(str long ptr) @ stdcall GetFileAttributesExW(wstr long ptr) +;@ stdcall GetFileAttributesTransactedA ; Win 7 +;@ stdcall GetFileAttributesTransactedW ; Win 7 @ stdcall GetFileAttributesW(wstr) @ stdcall GetFileBandwidthReservation(long ptr ptr ptr ptr ptr) @ stdcall GetFileInformationByHandle(long ptr) +;@ stdcall GetFileInformationByHandleEx ; Win 7 +;@ stdcall GetFileMUIInfo ; Win 7 +;@ stdcall GetFileMUIPath ; Win 7 @ stdcall GetFileSize(long ptr) @ stdcall GetFileSizeEx(long ptr) @ stdcall GetFileTime(long ptr ptr ptr) @@ -382,53 +527,78 @@ @ stdcall GetFirmwareEnvironmentVariableA(str str ptr long) @ stdcall GetFirmwareEnvironmentVariableW(wstr wstr ptr long) @ stdcall GetFullPathNameA(str long ptr ptr) +;@ stdcall GetFullPathNameTransactedA ; Win 7 +;@ stdcall GetFullPathNameTransactedW ; Win 7 @ stdcall GetFullPathNameW(wstr long ptr ptr) @ stdcall GetGeoInfoA(long long ptr long long) @ stdcall GetGeoInfoW(long long ptr long long) -@ stdcall GetHandleContext(long) +@ stdcall GetHandleContext(long) ; missing on x64 @ stdcall GetHandleInformation(long ptr) -@ stub GetSCallbackTarget ; missing in XP SP3 -@ stub GetSCallbackTemplate ; missing in XP SP3 +@ stub GetSCallbackTarget ; missing in XP SP3 and Win 7 +@ stub GetSCallbackTemplate ; missing in XP SP3 and Win 7 @ stdcall GetLargePageMinimum() @ stdcall GetLargestConsoleWindowSize(long) @ stdcall GetLastError() ntdll.RtlGetLastWin32Error -@ stdcall GetLinguistLangSize(ptr) +@ stdcall GetLinguistLangSize(ptr) ; missing in Win 7 @ stdcall GetLocalTime(ptr) @ stdcall GetLocaleInfoA(long long ptr long) -@ stdcall GetLocaleInfoW(long long ptr long) @ stdcall GetLocaleInfoEx(wstr long wstr long) +@ stdcall GetLocaleInfoW(long long ptr long) @ stdcall GetLogicalDriveStringsA(long ptr) @ stdcall GetLogicalDriveStringsW(long ptr) @ stdcall GetLogicalDrives() @ stdcall GetLogicalProcessorInformation(ptr ptr) +;@ stdcall GetLogicalProcessorInformationEx ; Win 7 @ stdcall GetLongPathNameA (str long long) +;@ stdcall GetLongPathNameTransactedA ; Win 7 +;@ stdcall GetLongPathNameTransactedW ; Win 7 @ stdcall GetLongPathNameW (wstr long long) @ stdcall GetMailslotInfo(long ptr ptr ptr ptr) +;@ stdcall GetMaximumProcessorCount ; Win 7 +;@ stdcall GetMaximumProcessorGroupCount ; Win 7 @ stdcall GetModuleFileNameA(long ptr long) @ stdcall GetModuleFileNameW(long ptr long) @ stdcall GetModuleHandleA(str) @ stdcall GetModuleHandleExA(long ptr ptr) @ stdcall GetModuleHandleExW(long ptr ptr) @ stdcall GetModuleHandleW(wstr) +;@ stdcall GetNLSVersion ; Win 7 +;@ stdcall GetNLSVersionEx ; Win 7 +;@ stdcall GetNamedPipeAttribute ; Win 7 +;@ stdcall GetNamedPipeClientComputerNameA ; Win 7 +;@ stdcall GetNamedPipeClientComputerNameW ; Win 7 +;@ stdcall GetNamedPipeClientProcessId ; Win 7 +;@ stdcall GetNamedPipeClientSessionId ; Win 7 @ stdcall GetNamedPipeHandleStateA(long ptr ptr ptr ptr str long) @ stdcall GetNamedPipeHandleStateW(long ptr ptr ptr ptr wstr long) @ stdcall GetNamedPipeInfo(long ptr ptr ptr ptr) +;@ stdcall GetNamedPipeServerProcessId ; Win 7 +;@ stdcall GetNamedPipeServerSessionId ; Win 7 @ stdcall GetNativeSystemInfo(ptr) +;@ stdcall -arch=x86_64 GetNextUmsListItem @ stdcall GetNextVDMCommand(long) -@ stdcall GetNlsSectionName(long long double str str double) -@ stdcall GetNumaAvailableMemory(ptr double ptr) +@ stdcall GetNlsSectionName(long long double str str double) ; missing in Win 7 +@ stdcall GetNumaAvailableMemory(ptr double ptr) ; missing in Win 7 @ stdcall GetNumaAvailableMemoryNode(double ptr) +;@ stdcall GetNumaAvailableMemoryNodeEx ; Win 7 @ stdcall GetNumaHighestNodeNumber(ptr) +;@ stdcall GetNumaNodeNumberFromHandle ; Win 7 @ stdcall GetNumaNodeProcessorMask(double ptr) -@ stdcall GetNumaProcessorMap(ptr double ptr) +;@ stdcall GetNumaNodeProcessorMaskEx ; Win 7 +@ stdcall GetNumaProcessorMap(ptr double ptr) ; missing in Win 7 @ stdcall GetNumaProcessorNode(double ptr) +;@ stdcall GetNumaProcessorNodeEx ; Win 7 +;@ stdcall GetNumaProximityNode ; Win 7 +;@ stdcall GetNumaProximityNodeEx ; Win 7 @ stdcall GetNumberFormatA(long long str ptr ptr long) +;@ stdcall GetNumberFormatEx ; Win 7 @ stdcall GetNumberFormatW(long long wstr ptr ptr long) @ stdcall GetNumberOfConsoleFonts() @ stdcall GetNumberOfConsoleInputEvents(long ptr) @ stdcall GetNumberOfConsoleMouseButtons(ptr) @ stdcall GetOEMCP() @ stdcall GetOverlappedResult(long ptr ptr long) +;@ stdcall GetPhysicallyInstalledSystemMemory ; Win 7 @ stdcall GetPriorityClass(long) @ stdcall GetPrivateProfileIntA(str str long str) @ stdcall GetPrivateProfileIntW(wstr wstr long wstr) @@ -442,17 +612,24 @@ @ stdcall GetPrivateProfileStructW(wstr wstr ptr long wstr) @ stdcall GetProcAddress(long str) @ stdcall GetProcessAffinityMask(long ptr ptr) +;@ stdcall GetProcessDEPPolicy ; Win 7 +;@ stdcall GetProcessGroupAffinity ; Win 7 @ stdcall GetProcessHandleCount(long ptr) @ stdcall GetProcessHeap() @ stdcall GetProcessHeaps(long ptr) @ stdcall GetProcessId(long) +;@ stdcall GetProcessIdOfThread ; Win 7 @ stdcall GetProcessIoCounters(long ptr) +;@ stdcall GetProcessPreferredUILanguages ; Win 7 @ stdcall GetProcessPriorityBoost(long ptr) @ stdcall GetProcessShutdownParameters(ptr ptr) @ stdcall GetProcessTimes(long ptr ptr ptr ptr) @ stdcall GetProcessVersion(long) @ stdcall GetProcessWorkingSetSize(long ptr ptr) -@ stub GetProductName ; missing in XP SP3 +;@ stdcall GetProcessWorkingSetSizeEx ; Win 7 +;@ stdcall GetProcessorSystemCycleTime ; Win 7 +;@ stdcall GetProductInfo ; Win 7 +@ stub GetProductName ; missing in XP SP3 and Win 7 @ stdcall GetProfileIntA(str str long) @ stdcall GetProfileIntW(wstr wstr long) @ stdcall GetProfileSectionA(str ptr long) @@ -460,24 +637,31 @@ @ stdcall GetProfileStringA(str str str ptr long) @ stdcall GetProfileStringW(wstr wstr wstr ptr long) @ stdcall GetQueuedCompletionStatus(long ptr ptr ptr long) -@ stub GetLSCallbackTarget ; missing in XP SP3 -@ stub GetLSCallbackTemplate ; missing in XP SP3 +;@ stdcall GetQueuedCompletionStatusEx ; Win 7 +@ stub GetLSCallbackTarget ; missing in XP SP3 and Win 7 +@ stub GetLSCallbackTemplate ; missing in XP SP3 and Win 7 @ stdcall GetShortPathNameA(str ptr long) @ stdcall GetShortPathNameW(wstr ptr long) @ stdcall GetStartupInfoA(ptr) @ stdcall GetStartupInfoW(ptr) @ stdcall GetStdHandle(long) +;@ stdcall GetStringScripts ; Win 7 @ stdcall GetStringTypeA(long long str long ptr) @ stdcall GetStringTypeExA(long long str long ptr) @ stdcall GetStringTypeExW(long long wstr long ptr) @ stdcall GetStringTypeW(long wstr long ptr) +;@ stdcall GetSystemDEPPolicy ; Win 7 @ stdcall GetSystemDefaultLCID() @ stdcall GetSystemDefaultLangID() +;@ stdcall GetSystemDefaultLocaleName ; Win 7 @ stdcall GetSystemDefaultUILanguage() @ stdcall GetSystemDirectoryA(ptr long) @ stdcall GetSystemDirectoryW(ptr long) +;@ stdcall GetSystemFileCacheSize ; Win 7 +;@ stdcall GetSystemFirmwareTable ; Win 7 @ stdcall GetSystemInfo(ptr) @ stdcall GetSystemPowerStatus(ptr) +;@ stdcall GetSystemPreferredUILanguages ; Win 7 @ stdcall GetSystemRegistryQuota(ptr ptr) @ stdcall GetSystemTime(ptr) @ stdcall GetSystemTimeAdjustment(ptr ptr ptr) @@ -495,27 +679,40 @@ @ stdcall GetTempPathA(long ptr) @ stdcall GetTempPathW(long ptr) @ stdcall GetThreadContext(long ptr) +;@ stdcall GetThreadErrorMode ; Win 7 +;@ stdcall GetThreadGroupAffinity ; Win 7 +;@ stdcall GetThreadIOPendingFlag ; Win 7 @ stdcall GetThreadId(ptr) -@ stdcall GetThreadIOPendingFlag(long ptr) +;@ stdcall GetThreadIdealProcessorEx ; Win 7 +@ stdcall GetThreadIOPendingFlag(long ptr) ; missing in Win 7 @ stdcall GetThreadLocale() +;@ stdcall GetThreadPreferredUILanguages ; Win 7 @ stdcall GetThreadPriority(long) @ stdcall GetThreadPriorityBoost(long ptr) @ stdcall GetThreadSelectorEntry(long long ptr) @ stdcall GetThreadTimes(long ptr ptr ptr ptr) +;@ stdcall GetThreadUILanguage ; Win 7 @ stdcall GetTickCount() @ stdcall -ret64 GetTickCount64() @ stdcall GetTimeFormatA(long long ptr str ptr long) +;@ stdcall GetTimeFormatEx ; Win 7 @ stdcall GetTimeFormatW(long long ptr wstr ptr long) @ stdcall GetTimeZoneInformation(ptr) +;@ stdcall GetTimeZoneInformationForYear ; Win 7 +;@ stdcall GetUILanguageInfo ; Win 7 +;@ stdcall -arch=x86_64 GetUmsCompletionListEvent @ stdcall GetUserDefaultLCID() @ stdcall GetUserDefaultLangID() +;@ stdcall GetUserDefaultLocaleName ; Win 7 @ stdcall GetUserDefaultUILanguage() @ stdcall GetUserGeoID(long) +;@ stdcall GetUserPreferredUILanguages ; Win 7 @ stdcall GetVDMCurrentDirectories(long long) @ stdcall GetVersion() @ stdcall GetVersionExA(ptr) @ stdcall GetVersionExW(ptr) @ stdcall GetVolumeInformationA(str ptr long ptr ptr ptr ptr long) +;@ stdcall GetVolumeInformationByHandleW ; Win 7 @ stdcall GetVolumeInformationW(wstr ptr long ptr ptr ptr ptr long) @ stdcall GetVolumeNameForVolumeMountPointA(str ptr long) @ stdcall GetVolumeNameForVolumeMountPointW(wstr ptr long) @@ -555,39 +752,50 @@ @ stdcall HeapAlloc(long long long) ntdll.RtlAllocateHeap @ stdcall HeapCompact(long long) @ stdcall HeapCreate(long long long) -@ stdcall HeapCreateTagsW(long long wstr wstr) +@ stdcall HeapCreateTagsW(long long wstr wstr) ; missing in Win 7 @ stdcall HeapDestroy(long) -@ stdcall HeapExtend(long long ptr long) +@ stdcall HeapExtend(long long ptr long) ; missing in Win 7 @ stdcall HeapFree(long long long) ntdll.RtlFreeHeap @ stdcall HeapLock(long) @ stdcall HeapQueryInformation(long long ptr long ptr) -@ stdcall HeapQueryTagW(long long long long ptr) +@ stdcall HeapQueryTagW(long long long long ptr) ; missing in Win 7 @ stdcall HeapReAlloc(long long ptr long) ntdll.RtlReAllocateHeap -@ stub HeapSetFlags ; missing in XP SP3 +@ stub HeapSetFlags ; missing in XP SP3 and Win 7 @ stdcall HeapSetInformation(ptr long ptr long) @ stdcall HeapSize(long long ptr) ntdll.RtlSizeHeap @ stdcall HeapSummary(long long ptr) @ stdcall HeapUnlock(long) -@ stdcall HeapUsage(long long long long ptr) +@ stdcall HeapUsage(long long long long ptr) ; missing in Win 7 @ stdcall HeapValidate(long long ptr) @ stdcall HeapWalk(long ptr) +;@ stdcall IdnToAscii ; Win 7 +;@ stdcall IdnToNameprepUnicode ; Win 7 +;@ stdcall IdnToUnicode ; Win 7 @ stdcall InitAtomTable(long) +;@ stdcall InitOnceBeginInitialize ; Win 7 +;@ stdcall InitOnceComplete ; Win 7 +;@ stdcall InitOnceExecuteOnce ; Win 7 +;@ stdcall InitOnceInitialize ; Win 7 +;@ stdcall InitializeConditionVariable ; Win 7 @ stdcall InitializeCriticalSection(ptr) @ stdcall InitializeCriticalSectionAndSpinCount(ptr long) ;@ stdcall InitializeCriticalSectionEx(ptr long long) ; missing in XP SP3 +;@ stdcall InitializeExtendedContext ; Win 7 +;@ stdcall InitializeProcThreadAttributeList ; Win 7 @ stdcall InitializeSListHead(ptr) ntdll.RtlInitializeSListHead @ stdcall InitializeSRWLock(ptr) ntdll.RtlInitializeSRWLock -@ stdcall InterlockedCompareExchange(ptr long long) -@ stdcall InterlockedCompareExchange64(ptr double double) ntdll.RtlInterlockedCompareExchange64 -@ stdcall InterlockedDecrement(ptr) -@ stdcall InterlockedExchange(ptr long) -@ stdcall InterlockedExchangeAdd (ptr long ) +@ stdcall InterlockedCompareExchange(ptr long long) ; missing in Win 7 x64 +@ stdcall InterlockedCompareExchange64(ptr double double) ntdll.RtlInterlockedCompareExchange64 ; missing in Win7 x64 +@ stdcall InterlockedDecrement(ptr) ; missing in Win 7 x64 +@ stdcall InterlockedExchange(ptr long) ; missing in Win 7 x64 +@ stdcall InterlockedExchangeAdd (ptr long ) ; missing in Win 7 x64 @ stdcall InterlockedFlushSList(ptr) ntdll.RtlInterlockedFlushSList -@ stdcall InterlockedIncrement(ptr) +@ stdcall InterlockedIncrement(ptr) ; missing in Win 7 x64 @ stdcall InterlockedPopEntrySList(ptr) ntdll.RtlInterlockedPopEntrySList @ stdcall InterlockedPushEntrySList(ptr ptr) ntdll.RtlInterlockedPushEntrySList +;@ stdcall InterlockedPushListSList ; Win 7 @ stdcall InvalidateConsoleDIBits(long long) -@ stub InvalidateNSCache ; missing in XP SP3 +@ stub InvalidateNSCache ; missing in XP SP3 and Win 7 @ stdcall IsBadCodePtr(ptr) @ stdcall IsBadHugeReadPtr(ptr long) @ stdcall IsBadHugeWritePtr(ptr long) @@ -595,27 +803,80 @@ @ stdcall IsBadStringPtrA(ptr long) @ stdcall IsBadStringPtrW(ptr long) @ stdcall IsBadWritePtr(ptr long) +;@ stdcall IsCalendarLeapDay ; Win 7 +;@ stdcall IsCalendarLeapMonth ; Win 7 +;@ stdcall IsCalendarLeapYear ; Win 7 @ stdcall IsDBCSLeadByte(long) @ stdcall IsDBCSLeadByteEx(long long) @ stdcall IsDebuggerPresent() +;@ stdcall IsNLSDefinedString ; Win 7 +;@ stdcall IsNormalizedString ; Win 7 @ stdcall IsProcessInJob(long long ptr) @ stdcall IsProcessorFeaturePresent(long) @ stdcall IsSystemResumeAutomatic() +;@ stdcall IsThreadAFiber ; Win 7 +;@ stdcall IsThreadpoolTimerSet ; Win 7 +;@ stdcall IsTimeZoneRedirectionEnabled ; Win 7 +;@ stdcall IsValidCalDateTime ; Win 7 @ stdcall IsValidCodePage(long) @ stdcall IsValidLanguageGroup(long long) @ stdcall IsValidLocale(long long) -@ stdcall IsValidUILanguage(long) +;@ stdcall IsValidLocaleName ; Win 7 +@ stdcall IsValidUILanguage(long) ; missing in Win 7 @ stdcall IsWow64Process(ptr ptr) +;@ stdcall K32EmptyWorkingSet ; Win 7 +;@ stdcall K32EnumDeviceDrivers ; Win 7 +;@ stdcall K32EnumPageFilesA ; Win 7 +;@ stdcall K32EnumPageFilesW ; Win 7 +;@ stdcall K32EnumProcessModules ; Win 7 +;@ stdcall K32EnumProcessModulesEx ; Win 7 +;@ stdcall K32EnumProcesses ; Win 7 +;@ stdcall K32GetDeviceDriverBaseNameA ; Win 7 +;@ stdcall K32GetDeviceDriverBaseNameW ; Win 7 +;@ stdcall K32GetDeviceDriverFileNameA ; Win 7 +;@ stdcall K32GetDeviceDriverFileNameW ; Win 7 +;@ stdcall K32GetMappedFileNameA ; Win 7 +;@ stdcall K32GetMappedFileNameW ; Win 7 +;@ stdcall K32GetModuleBaseNameA ; Win 7 +;@ stdcall K32GetModuleBaseNameW ; Win 7 +;@ stdcall K32GetModuleFileNameExA ; Win 7 +;@ stdcall K32GetModuleFileNameExW ; Win 7 +;@ stdcall K32GetModuleInformation ; Win 7 +;@ stdcall K32GetPerformanceInfo ; Win 7 +;@ stdcall K32GetProcessImageFileNameA ; Win 7 +;@ stdcall K32GetProcessImageFileNameW ; Win 7 +;@ stdcall K32GetProcessMemoryInfo ; Win 7 +;@ stdcall K32GetWsChanges ; Win 7 +;@ stdcall K32GetWsChangesEx ; Win 7 +;@ stdcall K32InitializeProcessForWsWatch ; Win 7 +;@ stdcall K32QueryWorkingSet ; Win 7 +;@ stdcall K32QueryWorkingSetEx ; Win 7 @ stdcall LCIDToLocaleName(long wstr long long) ; needed for wine gecko; missing in XP SP3 @ stdcall LCMapStringA(long long str long ptr long) +;@ stdcall LCMapStringEx ; Win 7 @ stdcall LCMapStringW(long long wstr long ptr long) +@ stdcall LZClose(long) +;@ stdcall LZCloseFile ; Win 7 +@ stdcall LZCopy(long long) +;@ stdcall LZCreateFileW ; Win 7 +@ stdcall LZDone() +@ stdcall LZInit(long) +@ stdcall LZOpenFileA(str ptr long) +@ stdcall LZOpenFileW(wstr ptr long) +@ stdcall LZRead(long str long) ;check +@ stdcall LZSeek(long long long) ;check +@ stdcall LZStart() @ stdcall LeaveCriticalSection(ptr) ntdll.RtlLeaveCriticalSection +;@ stdcall LeaveCriticalSectionWhenCallbackReturns ; Win 7 +;@ stdcall LoadAppInitDlls ; Win 7 @ stdcall LoadLibraryA(str) @ stdcall LoadLibraryExA( str long long) @ stdcall LoadLibraryExW(wstr long long) @ stdcall LoadLibraryW(wstr) @ stdcall LoadModule(str ptr) @ stdcall LoadResource(long long) +;@ stdcall LoadStringBaseExW ; Win 7 +;@ stdcall LoadStringBaseW ; Win 7 @ stdcall LocalAlloc(long long) @ stdcall LocalCompact(long) @ stdcall LocalFileTimeToFileTime(ptr ptr) @@ -628,22 +889,16 @@ @ stdcall LocalSize(long) @ stdcall LocalUnlock(long) @ stub LocaleNameToLCID ; missing in XP SP3 +;@ stdcall LocateExtendedFeature ; Win 7 +;@ stdcall LocateLegacyContext ; Win 7 @ stdcall LockFile(long long long long long) @ stdcall LockFileEx(long long long long long ptr) @ stdcall LockResource(long) -@ stdcall LZClose(long) -@ stdcall LZCopy(long long) -@ stdcall LZDone() -@ stdcall LZInit(long) -@ stdcall LZOpenFileA(str ptr long) -@ stdcall LZOpenFileW(wstr ptr long) -@ stdcall LZRead(long str long) ;check -@ stdcall LZSeek(long long long) ;check -@ stdcall LZStart() @ stdcall MapUserPhysicalPages(ptr long ptr) @ stdcall MapUserPhysicalPagesScatter(ptr long ptr) @ stdcall MapViewOfFile(long long long long long) @ stdcall MapViewOfFileEx(long long long long long ptr) +;@ stdcall MapViewOfFileExNuma ; Win 7 @ stdcall Module32First(long ptr) @ stdcall Module32FirstW(long ptr) @ stdcall Module32Next(long ptr) @@ -651,6 +906,8 @@ @ stdcall MoveFileA(str str) @ stdcall MoveFileExA(str str long) @ stdcall MoveFileExW(wstr wstr long) +;@ stdcall MoveFileTransactedA ; Win 7 +;@ stdcall MoveFileTransactedW ; Win 7 @ stdcall MoveFileW(wstr wstr) @ stdcall MoveFileWithProgressA(str str ptr ptr long) @ stdcall MoveFileWithProgressW(wstr wstr ptr ptr long) @@ -658,27 +915,40 @@ @ stdcall MultiByteToWideChar(long long str long ptr long) @ stdcall NeedCurrentDirectoryForExePathA(str) @ stdcall NeedCurrentDirectoryForExePathW(wstr) -@ stdcall NlsConvertIntegerToString(double double double wstr double) +;@ stdcall NlsCheckPolicy ; Win 7 +@ stdcall NlsConvertIntegerToString(double double double wstr double) ; missing in Win 7 +;@ stdcall NlsEventDataDescCreate ; Win 7 @ stdcall NlsGetCacheUpdateCount() -@ stub NlsResetProcessLocale ; missing in XP SP3 -@ stub NotifyNLSUserCache ; missing in XP SP3 -@ stdcall NumaVirtualQueryNode(long long long long) +@ stub NlsResetProcessLocale ; missing in XP SP3 and Win 7 +;@ stdcall NlsUpdateLocale ; Win 7 +;@ stdcall NlsUpdateSystemLocale ; Win 7 +;@ stdcall NlsWriteEtwEvent ; Win 7 +;@ stdcall NormalizeString ; Win 7 +;@ stdcall NotifyMountMgr ; Win 7 +@ stub NotifyNLSUserCache ; missing in XP SP3 and win 7 +;@ stdcall NotifyUILanguageChange ; Win 7 +@ stdcall NumaVirtualQueryNode(long long long long) ; missing in win 7 @ stdcall OpenConsoleW(wstr long long long) -@ stdcall OpenDataFile(long long) +@ stdcall OpenDataFile(long long) ; missing in Win 7 @ stdcall OpenEventA(long long str) @ stdcall OpenEventW(long long wstr) @ stdcall OpenFile(str ptr long) +;@ stdcall OpenFileById ; Win 7 @ stdcall OpenFileMappingA(long long str) @ stdcall OpenFileMappingW(long long wstr) @ stdcall OpenJobObjectA(long long str) @ stdcall OpenJobObjectW(long long wstr) @ stdcall OpenMutexA(long long str) @ stdcall OpenMutexW(long long wstr) +;@ stdcall OpenPrivateNamespaceA ; Win 7 +;@ stdcall OpenPrivateNamespaceW ; Win 7 @ stdcall OpenProcess(long long long) +;@ stdcall OpenProcessToken ; Win 7 @ stdcall OpenProfileUserMapping() @ stdcall OpenSemaphoreA(long long str) @ stdcall OpenSemaphoreW(long long wstr) @ stdcall OpenThread(long long long) +;@ stdcall OpenThreadToken @ stdcall OpenWaitableTimerA(long long str) @ stdcall OpenWaitableTimerW(long long wstr) @ stdcall OutputDebugStringA(str) @@ -687,6 +957,9 @@ @ stdcall PeekConsoleInputW(ptr ptr long ptr) @ stdcall PeekNamedPipe(long ptr long ptr ptr ptr) @ stdcall PostQueuedCompletionStatus(long long ptr ptr) +;@ stdcall PowerClearRequest ; Win 7 +;@ stdcall PowerCreateRequest ; Win 7 +;@ stdcall PowerSetRequest ; Win 7 @ stdcall PrepareTape(ptr long long) @ stdcall PrivCopyFileExW(wstr wstr ptr ptr long long) @ stdcall PrivMoveFileIdentityW(long long long) @@ -697,20 +970,33 @@ @ stdcall ProcessIdToSessionId(long ptr) @ stdcall PulseEvent(long) @ stdcall PurgeComm(long long) +;@ stdcall QueryActCtxSettingsW ; Win 7 ;@ stdcall QueryActCtxW(long ptr ptr long ptr long ptr) @ stdcall QueryDepthSList(ptr) ntdll.RtlQueryDepthSList @ stdcall QueryDosDeviceA(str ptr long) @ stdcall QueryDosDeviceW(wstr ptr long) +@ stdcall QueryFullProcessImageNameA(ptr long str ptr) ; Vista and later +@ stdcall QueryFullProcessImageNameW(ptr long wstr ptr) ; Vista and later +;@ stdcall QueryIdleProcessorCycleTime ; Win 7 +;@ stdcall QueryIdleProcessorCycleTimeEx ; Win 7 @ stdcall QueryInformationJobObject(long long ptr long ptr) @ stdcall QueryMemoryResourceNotification(long ptr) -@ stub QueryNumberOfEventLogRecords ; missing in XP SP3 -@ stub QueryOldestEventLogRecord ; missing in XP SP3 +@ stub QueryNumberOfEventLogRecords ; missing in XP SP3 and Win 7 +@ stub QueryOldestEventLogRecord ; missing in XP SP3 and Win 7 @ stdcall QueryPerformanceCounter(ptr) @ stdcall QueryPerformanceFrequency(ptr) -@ stdcall QueryWin31IniFilesMappedToRegistry(long long long long) +;@ stdcall QueryProcessAffinityUpdateMode ; Win 7 +;@ stdcall QueryProcessCycleTime ; Win 7 +;@ stdcall QueryThreadCycleTime ; Win 7 +;@ stdcall QueryThreadProfiling ; Win 7 +;@ stdcall QueryThreadpoolStackInformation ; Win 7 +;@ stdcall -arch=x86_64 QueryUmsThreadInformation +;@ stdcall QueryUnbiasedInterruptTime ; Win 7 +@ stdcall QueryWin31IniFilesMappedToRegistry(long long long long) ; missing in Win 7 @ stdcall QueueUserAPC(ptr long long) @ stdcall QueueUserWorkItem(ptr ptr long) @ stdcall RaiseException(long long long ptr) +;@ stdcall RaiseFailFastException ; Win 7 @ stub ReOpenFile ;@ stdcall ReOpenFile(ptr long long long) @ stdcall ReadConsoleA(long ptr long ptr ptr) @ stdcall ReadConsoleInputA(long ptr long ptr) @@ -728,12 +1014,56 @@ @ stdcall ReadFileEx(long ptr long ptr ptr) @ stdcall ReadFileScatter(long ptr long ptr ptr) @ stdcall ReadProcessMemory(long ptr ptr long ptr) +;@ stdcall ReadThreadProfilingData ; Win 7 +;@ stdcall RegCloseKey ; Win 7 +;@ stdcall RegCreateKeyExA ; Win 7 +;@ stdcall RegCreateKeyExW ; Win 7 +;@ stdcall RegDeleteKeyExA ; Win 7 +;@ stdcall RegDeleteKeyExW ; Win 7 +;@ stdcall RegDeleteTreeA ; Win 7 +;@ stdcall RegDeleteTreeW ; Win 7 +;@ stdcall RegDeleteValueA ; Win 7 +;@ stdcall RegDeleteValueW ; Win 7 +;@ stdcall RegDisablePredefinedCacheEx ; Win 7 +;@ stdcall RegEnumKeyExA ; Win 7 +;@ stdcall RegEnumKeyExW ; Win 7 +;@ stdcall RegEnumValueA ; Win 7 +;@ stdcall RegEnumValueW ; Win 7 +;@ stdcall RegFlushKey ; Win 7 +;@ stdcall RegGetKeySecurity ; Win 7 +;@ stdcall RegGetValueA ; Win 7 +;@ stdcall RegGetValueW ; Win 7 +;@ stdcall RegKrnGetGlobalState ; Win 7 +;@ stdcall RegKrnInitialize ; Win 7 +;@ stdcall RegLoadKeyA ; Win 7 +;@ stdcall RegLoadKeyW ; Win 7 +;@ stdcall RegLoadMUIStringA ; Win 7 +;@ stdcall RegLoadMUIStringW ; Win 7 +;@ stdcall RegNotifyChangeKeyValue ; Win 7 +;@ stdcall RegOpenCurrentUser ; Win 7 +;@ stdcall RegOpenKeyExA ; Win 7 +;@ stdcall RegOpenKeyExW ; Win 7 +;@ stdcall RegOpenUserClassesRoot ; Win 7 +;@ stdcall RegQueryInfoKeyA ; Win 7 +;@ stdcall RegQueryInfoKeyW ; Win 7 +;@ stdcall RegQueryValueExA ; Win 7 +;@ stdcall RegQueryValueExW ; Win 7 +;@ stdcall RegRestoreKeyA ; Win 7 +;@ stdcall RegRestoreKeyW ; Win 7 +;@ stdcall RegSaveKeyExA ; Win 7 +;@ stdcall RegSaveKeyExW ; Win 7 +;@ stdcall RegSetKeySecurity ; Win 7 +;@ stdcall RegSetValueExA ; Win 7 +;@ stdcall RegSetValueExW ; Win 7 +;@ stdcall RegUnLoadKeyA ; Win 7 +;@ stdcall RegUnLoadKeyW ; Win 7 +;@ stdcall RegisterApplicationRecoveryCallback ; Win 7 @ stdcall RegisterApplicationRestart(wstr long) @ stdcall RegisterConsoleIME(ptr ptr) @ stdcall RegisterConsoleOS2(long) @ stdcall RegisterConsoleVDM(long long long long long long long long long long long) -@ stub RegisterServiceProcess ; missing in XP SP3 -@ stub RegisterSysMsgHandler ; missing in XP SP3 +@ stub RegisterServiceProcess ; missing in XP SP3 and Win 7 +@ stub RegisterSysMsgHandler ; missing in XP SP3 and win 7 @ stdcall RegisterWaitForInputIdle(ptr) @ stdcall RegisterWaitForSingleObject(ptr long ptr ptr long long) @ stdcall RegisterWaitForSingleObjectEx(long ptr ptr long long) @@ -741,22 +1071,29 @@ @ stdcall RegisterWowExec(long) ;@ stdcall ReleaseActCtx(ptr) @ stdcall ReleaseMutex(long) -@ stdcall ReleaseSemaphore(long long ptr) +;@ stdcall ReleaseMutexWhenCallbackReturns ; Win 7 @ stdcall ReleaseSRWLockExclusive(ptr) ntdll.RtlReleaseSRWLockExclusive @ stdcall ReleaseSRWLockShared(ptr) ntdll.RtlReleaseSRWLockShared +@ stdcall ReleaseSemaphore(long long ptr) +;@ stdcall ReleaseSemaphoreWhenCallbackReturns ; Win 7 @ stdcall RemoveDirectoryA(str) +;@ stdcall RemoveDirectoryTransactedA ; Win 7 +;@ stdcall RemoveDirectoryTransactedW ; Win 7 @ stdcall RemoveDirectoryW(wstr) @ stdcall RemoveLocalAlternateComputerNameA(str long) @ stdcall RemoveLocalAlternateComputerNameW(wstr long) +;@ stdcall RemoveSecureMemoryCacheCallback ; Win 7 @ stdcall RemoveVectoredContinueHandler(ptr) ntdll.RtlRemoveVectoredContinueHandler @ stdcall RemoveVectoredExceptionHandler(ptr) ntdll.RtlRemoveVectoredExceptionHandler @ stdcall ReplaceFile(wstr wstr wstr long ptr ptr) ReplaceFileW @ stdcall ReplaceFileA(str str str long ptr ptr) @ stdcall ReplaceFileW(wstr wstr wstr long ptr ptr) +;@ stdcall ReplacePartitionUnit ; Win 7 @ stdcall RequestDeviceWakeup(long) @ stdcall RequestWakeupLatency(long) @ stdcall ResetEvent(long) @ stdcall ResetWriteWatch(ptr long) +;@ stdcall ResolveLocaleName ; Win 7 @ stdcall RestoreLastError(long) ntdll.RtlRestoreLastWin32Error @ stdcall ResumeThread(long) @ stdcall -arch=x86_64 RtlAddFunctionTable(ptr long double) @@ -767,16 +1104,20 @@ @ stdcall -arch=x86_64 RtlDeleteFunctionTable(ptr) @ stdcall RtlFillMemory(ptr long long) ntdll.RtlFillMemory @ stdcall -arch=x86_64 RtlInstallFunctionTableCallback(double double long ptr ptr ptr) +@ stdcall -arch=x86_64 RtlLookupFunctionEntry(ptr ptr ptr) ntdll.RtlLookupFunctionEntry @ stdcall RtlMoveMemory(ptr ptr long) ntdll.RtlMoveMemory +@ stdcall -arch=x86_64 RtlPcToFileHeader(ptr ptr) ntdll.RtlPcToFileHeader +@ stdcall -arch=x86_64 RtlRaiseException(ptr) ntdll.RtlRaiseException +@ stdcall -arch=x86_64 RtlRestoreContext(ptr ptr) ntdll.RtlRestoreContext @ stdcall RtlUnwind(ptr ptr ptr long) ntdll.RtlUnwind -@ stdcall RtlVirtualUnwind(ptr ptr ptr long) ntdll.RtlVirtualUnwind -@ stdcall RtlLookupFunctionEntry(ptr ptr ptr) ntdll.RtlLookupFunctionEntry +@ stdcall -arch=x86_64 RtlUnwindEx(ptr ptr ptr ptr ptr ptr) ntdll.RtlUnwindEx +@ stdcall -arch=x86_64 RtlVirtualUnwind(ptr ptr ptr long) ntdll.RtlVirtualUnwind @ stdcall RtlZeroMemory(ptr long) ntdll.RtlZeroMemory @ stdcall ScrollConsoleScreenBufferA(long ptr ptr ptr ptr) @ stdcall ScrollConsoleScreenBufferW(long ptr ptr ptr ptr) @ stdcall SearchPathA(str str str long ptr ptr) @ stdcall SearchPathW(wstr wstr wstr long ptr ptr) -@ stdcall SetCPGlobal(long) +@ stdcall SetCPGlobal(long) ; missing in Win 7 @ stdcall SetCalendarInfoA(long long long str) @ stdcall SetCalendarInfoW(long long long wstr) @ stdcall SetClientTimeZoneInformation(ptr) @@ -792,7 +1133,7 @@ @ stdcall SetComputerNameW(wstr) @ stdcall SetConsoleActiveScreenBuffer(long) @ stdcall SetConsoleCP(long) -@ stdcall SetConsoleCommandHistoryMode(long) +@ stdcall SetConsoleCommandHistoryMode(long) ; missing in win 7 @ stdcall SetConsoleCtrlHandler(ptr long) @ stdcall SetConsoleCursor(long long) @ stdcall SetConsoleCursorInfo(long ptr) @@ -801,6 +1142,7 @@ @ stdcall SetConsoleDisplayMode(long long ptr) @ stdcall SetConsoleFont(long long) @ stdcall SetConsoleHardwareState(long long long) +;@ stdcall SetConsoleHistoryInfo ; Win 7 @ stdcall SetConsoleIcon(ptr) @ stdcall SetConsoleInputExeNameA(ptr) @ stdcall SetConsoleInputExeNameW(ptr) @@ -815,28 +1157,41 @@ @ stdcall SetConsoleOS2OemFormat(long) @ stdcall SetConsoleOutputCP(long) @ stdcall SetConsolePalette(long long long) +;@ stdcall SetConsoleScreenBufferInfoEx ; Win 7 @ stdcall SetConsoleScreenBufferSize(long long) @ stdcall SetConsoleTextAttribute(long long) @ stdcall SetConsoleTitleA(str) @ stdcall SetConsoleTitleW(wstr) @ stdcall SetConsoleWindowInfo(long long ptr) @ stdcall SetCriticalSectionSpinCount(ptr long) ntdll.RtlSetCriticalSectionSpinCount +;@ stdcall SetCurrentConsoleFontEx ; Win 7 @ stdcall SetCurrentDirectoryA(str) @ stdcall SetCurrentDirectoryW(wstr) -@ stub SetDaylightFlag ; missing in XP SP3 +@ stub SetDaylightFlag ; missing in XP SP3 and Win 7 @ stdcall SetDefaultCommConfigA(str ptr long) @ stdcall SetDefaultCommConfigW(wstr ptr long) @ stdcall SetDllDirectoryA(str) @ stdcall SetDllDirectoryW(wstr) +;@ stdcall SetDynamicTimeZoneInformation ; Win 7 @ stdcall SetEndOfFile(long) +;@ stdcall SetEnvironmentStringsA ; Win 7 +;@ stdcall SetEnvironmentStringsW ; Win 7 @ stdcall SetEnvironmentVariableA(str str) @ stdcall SetEnvironmentVariableW(wstr wstr) @ stdcall SetErrorMode(long) @ stdcall SetEvent(long) +;@ stdcall SetEventWhenCallbackReturns ; Win 7 +;@ stdcall SetExtendedFeaturesMask ; Win 7 @ stdcall SetFileApisToANSI() @ stdcall SetFileApisToOEM() @ stdcall SetFileAttributesA(str long) +;@ stdcall SetFileAttributesTransactedA ; Win 7 +;@ stdcall SetFileAttributesTransactedW ; Win 7 @ stdcall SetFileAttributesW(wstr long) +;@ stdcall SetFileBandwidthReservation ; Win 7 +;@ stdcall SetFileCompletionNotificationModes ; Win 7 +;@ stdcall SetFileInformationByHandle ; Win 7 +;@ stdcall SetFileIoOverlappedRange ; Win 7 @ stdcall SetFilePointer(long long ptr long) @ stdcall SetFilePointerEx(long double ptr long) @ stdcall SetFileShortNameA(long str) @@ -845,7 +1200,7 @@ @ stdcall SetFileValidData(long double) @ stdcall SetFirmwareEnvironmentVariableA(str str ptr long) @ stdcall SetFirmwareEnvironmentVariableW(wstr wstr ptr long) -@ stdcall SetHandleContext(long long) +@ stdcall SetHandleContext(long long) ; missing in Win 7 x64 @ stdcall SetHandleCount(long) @ stdcall SetHandleInformation(long long long) @ stdcall SetInformationJobObject(long long ptr long) @@ -858,13 +1213,21 @@ @ stdcall SetLocaleInfoW(long long wstr) @ stdcall SetMailslotInfo(long long) @ stdcall SetMessageWaitingIndicator(long double) +;@ stdcall SetNamedPipeAttribute ; Win 7 @ stdcall SetNamedPipeHandleState(long ptr ptr ptr) @ stdcall SetPriorityClass(long long) @ stdcall SetProcessAffinityMask(long long) +;@ stdcall SetProcessAffinityUpdateMode ; Win 7 +;@ stdcall SetProcessDEPPolicy ; Win 7 +;@ stdcall SetProcessPreferredUILanguages ; Win 7 @ stdcall SetProcessPriorityBoost(long long) @ stdcall SetProcessShutdownParameters(long long) @ stdcall SetProcessWorkingSetSize(long long long) +;@ stdcall SetProcessWorkingSetSizeEx ; Win 7 +;@ stdcall SetSearchPathMode ; Win 7 @ stdcall SetStdHandle(long long) +;@ stdcall SetStdHandleEx ; Win 7 +;@ stdcall SetSystemFileCacheSize ; Win 7 @ stdcall SetSystemPowerState(long long) @ stdcall SetSystemTime(ptr) @ stdcall SetSystemTimeAdjustment(long long) @@ -873,14 +1236,26 @@ @ stdcall SetTermsrvAppInstallMode(long) @ stdcall SetThreadAffinityMask(long long) @ stdcall SetThreadContext(long ptr) +;@ stdcall SetThreadErrorMode ; Win 7 @ stdcall SetThreadExecutionState(long) +;@ stdcall SetThreadGroupAffinity ; Win 7 @ stdcall SetThreadIdealProcessor(long long) +;@ stdcall SetThreadIdealProcessorEx ; Win 7 @ stdcall SetThreadLocale(long) +;@ stdcall SetThreadPreferredUILanguages ; Win 7 @ stdcall SetThreadPriority(long long) @ stdcall SetThreadPriorityBoost(long long) +;@ stdcall SetThreadStackGuarantee ; Win 7 +;@ stdcall SetThreadToken ; Win 7 @ stdcall SetThreadUILanguage(long) +;@ stdcall SetThreadpoolStackInformation ; Win 7 +;@ stdcall SetThreadpoolThreadMaximum ; Win 7 +;@ stdcall SetThreadpoolThreadMinimum ; Win 7 +;@ stdcall SetThreadpoolTimer ; Win 7 +;@ stdcall SetThreadpoolWait ; Win 7 @ stdcall SetTimeZoneInformation(ptr) @ stdcall SetTimerQueueTimer(long ptr ptr long long long) +;@ stdcall -arch?x86_64 SetUmsThreadInformation @ stdcall SetUnhandledExceptionFilter(ptr) @ stdcall SetUserGeoID(long) @ stdcall SetVDMCurrentDirectories(long long) @@ -889,12 +1264,19 @@ @ stdcall SetVolumeMountPointA(str str) @ stdcall SetVolumeMountPointW(wstr wstr) @ stdcall SetWaitableTimer(long ptr long ptr ptr long) +;@ stdcall SetWaitableTimerEx ; Win 7 @ stdcall SetupComm(long long long) @ stdcall ShowConsoleCursor(long long) @ stdcall SignalObjectAndWait(long long long long) @ stdcall SizeofResource(long long) @ stdcall Sleep(long) +;@ stdcall SleepConditionVariableCS ; Win 7 +;@ stdcall SleepConditionVariableSRW ; Win 7 @ stdcall SleepEx(long long) +;@ stdcall SortCloseHandle ; Win 7 +;@ stdcall SortGetHandle ; Win 7 +;@ stdcall StartThreadpoolIo ; Win 7 +;@ stdcall SubmitThreadpoolWork ; Win 7 @ stdcall SuspendThread(long) @ stdcall SwitchToFiber(ptr) @ stdcall SwitchToThread() @@ -907,41 +1289,51 @@ @ stdcall Thread32First(long ptr) @ stdcall Thread32Next(long ptr) @ stdcall TlsAlloc() -@ stub TlsAllocInternal ; missing in XP SP3 +@ stub TlsAllocInternal ; missing in XP SP3 and Win 7 @ stdcall TlsFree(long) -@ stub TlsFreeInternal ; missing in XP SP3 +@ stub TlsFreeInternal ; missing in XP SP3 and Win 7 @ stdcall TlsGetValue(long) @ stdcall TlsSetValue(long ptr) @ stdcall Toolhelp32ReadProcessMemory(long ptr ptr long ptr) @ stdcall TransactNamedPipe(long ptr long ptr long ptr ptr) @ stdcall TransmitCommChar(long long) -@ stdcall TrimVirtualBuffer(ptr) +@ stdcall TrimVirtualBuffer(ptr) ; missing in Win 7 +;@ stdcall TryAcquireSRWLockExclusive ; Win 7 +;@ stdcall TryAcquireSRWLockShared ; Win 7 @ stdcall TryEnterCriticalSection(ptr) ntdll.RtlTryEnterCriticalSection +;@ stdcall TrySubmitThreadpoolCallback ; Win 7 @ stdcall TzSpecificLocalTimeToSystemTime(ptr ptr ptr) @ stdcall UTRegister(long str str str ptr ptr ptr) @ stdcall UTUnRegister(long) +;@ stdcall -arch=x86_64 UmsThreadYield @ stdcall UnhandledExceptionFilter(ptr) @ stdcall UnlockFile(long long long long long) @ stdcall UnlockFileEx(long long long long ptr) @ stdcall UnmapViewOfFile(ptr) +;@ stdcall UnregisterApplicationRecoveryCallback ; Win 7 +;@ stdcall UnregisterApplicationRestart ; Win 7 @ stdcall UnregisterConsoleIME() @ stdcall UnregisterWait(long) @ stdcall UnregisterWaitEx(long long) +;@ stdcall UpdateCalendarDayOfWeek ; Win 7 +;@ stdcall UpdateProcThreadAttribute ; Win 7 @ stdcall UpdateResourceA(long str str long ptr long) @ stdcall UpdateResourceW(long wstr wstr long ptr long) @ stdcall VDMConsoleOperation(long long) @ stdcall VDMOperationStarted(long) -@ stub ValidateCType ; missing in XP SP3 -@ stub ValidateLocale ; missing in XP SP3 +@ stub ValidateCType ; missing in XP SP3 and Win 7 +@ stub ValidateLocale ; missing in XP SP3 and Win 7 @ stdcall VerLanguageNameA(long str long) @ stdcall VerLanguageNameW(long wstr long) @ stdcall -ret64 VerSetConditionMask(long long long long) ntdll.VerSetConditionMask @ stdcall VerifyConsoleIoHandle(long) +;@ stdcall VerifyScripts ; Win 7 @ stdcall VerifyVersionInfoA(long long double) @ stdcall VerifyVersionInfoW(long long double) @ stdcall VirtualAlloc(ptr long long long) @ stdcall VirtualAllocEx(long ptr long long long) -@ stdcall VirtualBufferExceptionHandler(long long long) +;@ stdcall VirtualAllocExNuma ; Win 7 +@ stdcall VirtualBufferExceptionHandler(long long long) ; missing in Win 7 @ stdcall VirtualFree(ptr long long) @ stdcall VirtualFreeEx(long ptr long long) @ stdcall VirtualLock(ptr long) @@ -950,23 +1342,44 @@ @ stdcall VirtualQuery(ptr ptr long) @ stdcall VirtualQueryEx(long ptr ptr long) @ stdcall VirtualUnlock(ptr long) -@ stdcall WakeAllConditionVariable(ptr) ntdll.RtlWakeAllConditionVariable -@ stdcall WakeConditionVariable(ptr) ntdll.RtlWakeConditionVariable +;@ stdcall WTSGetActiveConsoleSessionId ; Win 7 @ stdcall WaitCommEvent(long ptr ptr) @ stdcall WaitForDebugEvent(ptr long) @ stdcall WaitForMultipleObjects(long ptr long long) @ stdcall WaitForMultipleObjectsEx(long ptr long long long) @ stdcall WaitForSingleObject(long long) @ stdcall WaitForSingleObjectEx(long long long) +;@ stdcall WaitForThreadpoolIoCallbacks ; Win 7 +;@ stdcall WaitForThreadpoolTimerCallbacks ; Win 7 +;@ stdcall WaitForThreadpoolWaitCallbacks ; Win 7 +;@ stdcall WaitForThreadpoolWorkCallbacks ; Win 7 @ stdcall WaitNamedPipeA (str long) @ stdcall WaitNamedPipeW (wstr long) +@ stdcall WakeAllConditionVariable(ptr) ntdll.RtlWakeAllConditionVariable +@ stdcall WakeConditionVariable(ptr) ntdll.RtlWakeConditionVariable +;@ stdcall WerGetFlags ; Win 7 +;@ stdcall WerRegisterFile ; Win 7 +;@ stdcall WerRegisterMemoryBlock ; Win 7 +;@ stdcall WerRegisterRuntimeExceptionModule ; Win 7 +;@ stdcall WerSetFlags ; Win 7 +;@ stdcall WerUnregisterFile ; Win 7 +;@ stdcall WerUnregisterMemoryBlock ; Win 7 +;@ stdcall WerUnregisterRuntimeExceptionModule ; Win 7 +;@ stdcall WerpCleanupMessageMapping ; Win 7 +;@ stdcall WerpInitiateRemoteRecovery ; Win 7 +;@ stdcall WerpNotifyLoadStringResource ; Win 7 +;@ stdcall WerpNotifyLoadStringResourceEx ; Win 7 +;@ stdcall WerpNotifyUseStringResource ; Win 7 +;@ stdcall WerpStringLookup ; Win 7 @ stdcall WideCharToMultiByte(long long wstr long ptr long ptr ptr) @ stdcall WinExec(str long) -#ifdef _M_AMD64 -@ stdcall Wow64EnableWow64FsRedirection(long) @ stdcall Wow64DisableWow64FsRedirection(long) +@ stdcall Wow64EnableWow64FsRedirection(long) +;@ stdcall Wow64GetThreadContext ; Win 7 +;@ stdcall Wow64GetThreadSelectorEntry ; Win 7 @ stdcall Wow64RevertWow64FsRedirection(long) -#endif +;@ stdcall Wow64SetThreadContext ; Win 7 +;@ stdcall Wow64SuspendThread ; Win 7 @ stdcall WriteConsoleA(long ptr long ptr ptr) @ stdcall WriteConsoleInputA(long ptr long ptr) @ stdcall WriteConsoleInputVDMA(long long long long) @@ -993,19 +1406,23 @@ @ stdcall WriteProfileStringA(str str str) @ stdcall WriteProfileStringW(wstr wstr wstr) @ stdcall WriteTapemark(ptr long long long) -@ stdcall WTSGetActiveConsoleSessionId() +@ stdcall WTSGetActiveConsoleSessionId() ; missing in win 7 ;@ stdcall ZombifyActCtx(ptr) -@ stub _DebugOut ; missing in XP SP3 -@ stub _DebugPrintf ; missing in XP SP3 +;@ stdcall -arch=x86_64 __C_specific_handler +;@ stdcall -arch=x86_64 __chkstk +;@ stdcall -arch=x86_64 __misaligned_access +@ stub _DebugOut ; missing in XP SP3 and Win 7 +@ stub _DebugPrintf ; missing in XP SP3 and Win 7 @ stdcall _hread(long ptr long) @ stdcall _hwrite(long ptr long) @ stdcall _lclose(long) @ stdcall _lcreat(str long) @ stdcall _llseek(long long long) +;@ stdcall -arch=x86_64 _local_unwind ; Win 7 @ stdcall _lopen(str long) @ stdcall _lread(long ptr long) _hread @ stdcall _lwrite(long ptr long) _hwrite -@ stub dprintf ; missing in XP SP3 +@ stub dprintf ; missing in XP SP3 and Win 7 @ stdcall lstrcat(str str) lstrcatA @ stdcall lstrcatA(str str) @ stdcall lstrcatW(wstr wstr) @@ -1024,7 +1441,11 @@ @ stdcall lstrlen(str) lstrlenA @ stdcall lstrlenA(str) @ stdcall lstrlenW(wstr) - -; Functions added in Win Vista -@ stdcall QueryFullProcessImageNameA(ptr long str ptr) -@ stdcall QueryFullProcessImageNameW(ptr long wstr ptr) +;@ stdcall -arch=x86_64 uaw_lstrcmpW ; Win 7 +;@ stdcall -arch=x86_64 uaw_lstrcmpiW ; Win 7 +;@ stdcall -arch=x86_64 uaw_lstrlenW ; Win 7 +;@ stdcall -arch=x86_64 uaw_wcschr ; Win 7 +;@ stdcall -arch=x86_64 uaw_wcscpy ; Win 7 +;@ stdcall -arch=x86_64 uaw_wcsicmp ; Win 7 +;@ stdcall -arch=x86_64 uaw_wcslen ; Win 7 +;@ stdcall -arch=x86_64 uaw_wcsrchr ; Win 7 From 4896a4fbb274ba1a8fb0d9bf10438d3f8ce1d79f Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 5 Nov 2009 20:57:53 +0000 Subject: [PATCH 071/286] use RtlPcToFileHeader instead of RtlpLookupModuleBase svn path=/branches/ros-amd64-bringup/; revision=43980 --- reactos/dll/ntdll/rtl/libsupp.c | 57 --------------------------------- reactos/lib/rtl/amd64/unwind.c | 8 +---- reactos/ntoskrnl/rtl/libsupp.c | 14 ++++---- 3 files changed, 8 insertions(+), 71 deletions(-) diff --git a/reactos/dll/ntdll/rtl/libsupp.c b/reactos/dll/ntdll/rtl/libsupp.c index c10bb87461f..c1ad5f09485 100644 --- a/reactos/dll/ntdll/rtl/libsupp.c +++ b/reactos/dll/ntdll/rtl/libsupp.c @@ -385,63 +385,6 @@ RtlpGetAtomEntry(PRTL_ATOM_TABLE AtomTable, ULONG Index) return NULL; } -PVOID -NTAPI -RtlpLookupModuleBase( - PVOID Address) -{ - NTSTATUS Status; - MEMORY_BASIC_INFORMATION MemoryInformation; - ULONG_PTR Base, Limit; - PIMAGE_DOS_HEADER DosHeader; - PIMAGE_NT_HEADERS NtHeader; - - Status = NtQueryVirtualMemory(NtCurrentProcess(), - Address, - MemoryBasicInformation, - &MemoryInformation, - sizeof(MEMORY_BASIC_INFORMATION), - NULL); - if (!NT_SUCCESS(Status)) - { - return NULL; - } - - /* FIXME: remove these checks? */ - Base = (ULONG_PTR)MemoryInformation.BaseAddress; - Limit = Base + MemoryInformation.RegionSize; - if ( ((ULONG_PTR)Address < Base) || - ((ULONG_PTR)Address >= Limit) ) - { - /* WTF? */ - return NULL; - } - - /* Check if we got the right kind of memory */ - if ( (MemoryInformation.State != MEM_COMMIT) || - (MemoryInformation.Type != MEM_IMAGE) ) - { - return NULL; - } - - /* Check DOS magic */ - DosHeader = MemoryInformation.AllocationBase; - if (DosHeader->e_magic != IMAGE_DOS_MAGIC) - { - return NULL; - } - - /* Check NT header */ - NtHeader = (PVOID)((ULONG_PTR)DosHeader + DosHeader->e_lfanew); - if (NtHeader->Signature != IMAGE_PE_MAGIC) - { - return NULL; - } - - return MemoryInformation.AllocationBase; -} - - /* * Ldr Resource support code */ diff --git a/reactos/lib/rtl/amd64/unwind.c b/reactos/lib/rtl/amd64/unwind.c index 2a8de06ecdf..5d1597f9b72 100644 --- a/reactos/lib/rtl/amd64/unwind.c +++ b/reactos/lib/rtl/amd64/unwind.c @@ -58,11 +58,6 @@ typedef struct _UNWIND_INFO */ } UNWIND_INFO, *PUNWIND_INFO; -PVOID -NTAPI -RtlpLookupModuleBase( - PVOID Address); - /* FUNCTIONS *****************************************************************/ PRUNTIME_FUNCTION @@ -77,8 +72,7 @@ RtlLookupFunctionTable( PIMAGE_DATA_DIRECTORY Directory; /* Find ModuleBase */ - DosHeader = RtlpLookupModuleBase((PVOID)ControlPc); - if (!DosHeader) + if (!RtlPcToFileHeader((PVOID)ControlPc, (PVOID*)&DosHeader)) { return NULL; } diff --git a/reactos/ntoskrnl/rtl/libsupp.c b/reactos/ntoskrnl/rtl/libsupp.c index 8ff65d51a92..54b9354f4b8 100644 --- a/reactos/ntoskrnl/rtl/libsupp.c +++ b/reactos/ntoskrnl/rtl/libsupp.c @@ -30,26 +30,26 @@ SIZE_T RtlpAllocDeallocQueryBufferSize = 128; PVOID NTAPI -RtlpLookupModuleBase( - PVOID Address) +RtlPcToFileHeader( + IN PVOID PcValue, + OUT PVOID *BaseOfImage) { PLDR_DATA_TABLE_ENTRY LdrEntry; BOOLEAN InSystem; - PVOID p; /* Get the base for this file */ - if ((ULONG_PTR)Address > (ULONG_PTR)MmHighestUserAddress) + if ((ULONG_PTR)PcValue > (ULONG_PTR)MmHighestUserAddress) { /* We are in kernel */ - p = KiPcToFileHeader(Address, &LdrEntry, FALSE, &InSystem); + *BaseOfImage = KiPcToFileHeader(PcValue, &LdrEntry, FALSE, &InSystem); } else { /* We are in user land */ - p = KiRosPcToUserFileHeader(Address, &LdrEntry); + *BaseOfImage = KiRosPcToUserFileHeader(PcValue, &LdrEntry); } - return p; + return *BaseOfImage; } VOID From 37df53da636c1468a395e7ac0b32518fc1a29bc5 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 5 Nov 2009 22:04:28 +0000 Subject: [PATCH 072/286] Update forwarder entries in kernel32.pspec svn path=/branches/ros-amd64-bringup/; revision=43981 --- reactos/dll/win32/kernel32/kernel32.pspec | 108 +++++++++++----------- 1 file changed, 54 insertions(+), 54 deletions(-) diff --git a/reactos/dll/win32/kernel32/kernel32.pspec b/reactos/dll/win32/kernel32/kernel32.pspec index fc8bd96d98a..3ed0e818def 100644 --- a/reactos/dll/win32/kernel32/kernel32.pspec +++ b/reactos/dll/win32/kernel32/kernel32.pspec @@ -72,7 +72,7 @@ @ stdcall CancelIo(long) @ stdcall CancelIoEx(long ptr) @ stdcall CancelSynchronousIo(long) -;@ stdcall CancelThreadpoolIo ; Win 7 +;@ stdcall CancelThreadpoolIo(ptr) ntdll.TpCancelAsyncIoOperation; Win 7 @ stdcall CancelTimerQueueTimer(long long) @ stdcall CancelWaitableTimer(long) @ stdcall ChangeTimerQueueTimer(long long long long) @@ -89,13 +89,13 @@ ;@ stdcall ClosePrivateNamespace ; Win 7 @ stdcall CloseProfileUserMapping() @ stub CloseSystemHandle ; missing in XP SP3 and Win 7 -;@ stdcall CloseThreadpool ; Win 7 -;@ stdcall CloseThreadpoolCleanupGroup ; Win 7 -;@ stdcall CloseThreadpoolCleanupGroupMembers ; Win 7 -;@ stdcall CloseThreadpoolIo ; Win 7 -;@ stdcall CloseThreadpoolTimer ; Win 7 -;@ stdcall CloseThreadpoolWait ; Win 7 -;@ stdcall CloseThreadpoolWork ; Win 7 +;@ stdcall CloseThreadpool(ptr) ntdll.TpReleasePool ; Win 7 +;@ stdcall CloseThreadpoolCleanupGroup(ptr) ntdll.TpReleaseCleanupGroup ; Win 7 +;@ stdcall CloseThreadpoolCleanupGroupMembers(ptr long ptr) ntdll.TpReleaseCleanupGroupMembers ; Win 7 +;@ stdcall CloseThreadpoolIo ntdll.TpReleaseIoCompletion ; Win 7 +;@ stdcall CloseThreadpoolTimer ntdll.TpReleaseTimer ; Win 7 +;@ stdcall CloseThreadpoolWait ntdll.TpReleaseWait ; Win 7 +;@ stdcall CloseThreadpoolWork ntdll.TpReleaseWork ; Win 7 @ stdcall CmdBatNotification(long) @ stdcall CommConfigDialogA(str long ptr) @ stdcall CommConfigDialogW(wstr long ptr) @@ -178,7 +178,7 @@ @ stdcall CreateProcessInternalWSecure() ; missing in Win 7 @ stdcall CreateProcessW(wstr wstr ptr ptr long long ptr wstr ptr ptr) @ stdcall CreateRemoteThread(long ptr long ptr long long ptr) -;@ stdcall CreateRemoteThreadEx ; Win 7 +;@ stdcall CreateRemoteThreadEx api-ms-win-core-processthreads-l1-1-0.CreateRemoteThreadEx ; Win 7 @ stdcall CreateSemaphoreA(ptr long long str) @ stdcall CreateSemaphoreExA(ptr long long str long long) @ stdcall CreateSemaphoreExW(ptr long long wstr long long) @@ -219,14 +219,14 @@ @ stdcall DefineDosDeviceW(long wstr wstr) @ stdcall DelayLoadFailureHook(str str) @ stdcall DeleteAtom(long) -;@ stdcall DeleteBoundaryDescriptor ; Win 7 +;@ stdcall DeleteBoundaryDescriptor ntdll.RtlDeleteBoundaryDescriptor ; Win 7 @ stdcall DeleteCriticalSection(ptr) ntdll.RtlDeleteCriticalSection @ stdcall DeleteFiber(ptr) @ stdcall DeleteFileA(str) ;@ stdcall DeleteFileTransactedA ; Win 7 ;@ stdcall DeleteFileTransactedW ; Win 7 @ stdcall DeleteFileW(wstr) -;@ stdcall DeleteProcThreadAttributeList ; Win 7 +;@ stdcall DeleteProcThreadAttributeList api-ms-win-core-processthreads-l1-1-0.DeleteProcThreadAttributeList ; Win 7 @ stdcall DeleteTimerQueue(long) @ stdcall DeleteTimerQueueEx (long long) @ stdcall DeleteTimerQueueTimer(long long long) @@ -238,7 +238,7 @@ @ stdcall DeviceIoControl(long long ptr long ptr long ptr ptr) @ stdcall DisableThreadLibraryCalls(long) ;@ stdcall DisableThreadProfiling ; Win 7 -;@ stdcall DisassociateCurrentThreadFromCallback ; Win 7 +;@ stdcall DisassociateCurrentThreadFromCallback ntdll.TpDisassociateCallback ; Win 7 @ stdcall DisconnectNamedPipe(long) @ stdcall DnsHostnameToComputerNameA (str ptr ptr) @ stdcall DnsHostnameToComputerNameW (wstr ptr ptr) @@ -296,8 +296,8 @@ @ stdcall EnumerateLocalComputerNamesW(ptr long wstr ptr) @ stdcall EraseTape(ptr long long) @ stdcall EscapeCommFunction(long long) -@ stdcall ExitProcess(long) -@ stdcall ExitThread(long) +@ stdcall ExitProcess(long) ; FIXME: ntdll.RtlExitUserProcess +@ stdcall ExitThread(long) ; FIXME: ntdll.RtlExitUserThread @ stdcall ExitVDM(long long) @ stdcall ExpandEnvironmentStringsA(str ptr long) @ stdcall ExpandEnvironmentStringsW(wstr ptr long) @@ -361,7 +361,7 @@ @ stdcall FlushConsoleInputBuffer(long) @ stdcall FlushFileBuffers(long) @ stdcall FlushInstructionCache(long long long) -;@ stdcall FlushProcessWriteBuffers ; Win 7 +;@ stdcall FlushProcessWriteBuffers ntdll.NtFlushProcessWriteBuffers ; Win 7 @ stdcall FlushViewOfFile(ptr long) @ stdcall FoldStringA(long str long ptr long) @ stdcall FoldStringW(long wstr long ptr long) @@ -372,7 +372,7 @@ @ stdcall FreeEnvironmentStringsW(ptr) @ stdcall FreeLibrary(long) @ stdcall FreeLibraryAndExitThread(long long) -;@ stdcall FreeLibraryWhenCallbackReturns ; Win 7 +;@ stdcall FreeLibraryWhenCallbackReturns ntdll.TpCallbackUnloadDllOnCompletion ; Win 7 @ stdcall FreeResource(long) @ stdcall FreeUserPhysicalPages(long long long) @ stdcall FreeVirtualBuffer(ptr) ; missing in Win 7 @@ -469,7 +469,7 @@ @ stdcall GetCurrentProcess() @ stdcall GetCurrentProcessId() @ stdcall GetCurrentProcessorNumber() ntdll.RtlGetCurrentProcessorNumber -;@ stdcall GetCurrentProcessorNumberEx ; Win 7 +;@ stdcall GetCurrentProcessorNumberEx ntdll.RtlGetCurrentProcessorNumberEx ; Win 7 @ stdcall GetCurrentThread() @ stdcall GetCurrentThreadId() ;@ stdcall GetCurrentUmsThread @@ -491,8 +491,8 @@ @ stdcall GetDriveTypeW(wstr) ;@ stdcall GetDurationFormat ; Win 7 ;@ stdcall GetDurationFormatEx ; Win 7 -;@ stdcall GetDynamicTimeZoneInformation -;@ stdcall GetEnabledExtendedFeatures +;@ stdcall GetDynamicTimeZoneInformation ; Win 7 +;@ stdcall GetEnabledExtendedFeatures api-ms-win-core-xstate-l1-1-0.RtlGetEnabledExtendedFeatures ; Win 7 @ stdcall GetEnvironmentStrings() @ stdcall GetEnvironmentStringsA() GetEnvironmentStrings @ stdcall GetEnvironmentStringsW() @@ -505,7 +505,7 @@ @ stdcall GetExpandedNameA(str ptr) @ stdcall GetExpandedNameW(wstr ptr) ;@ stdcall GetExtendedContextLength ; Win 7 -;@ stdcall GetExtendedFeaturesMask ; Win 7 +;@ stdcall GetExtendedFeaturesMask api-ms-win-core-xstate-l1-1-0.RtlGetExtendedFeaturesMask ; Win 7 @ stdcall GetFileAttributesA(str) @ stdcall GetFileAttributesByHandle(long ptr long) ; missing in Win 7 @ stdcall GetFileAttributesExA(str long ptr) @@ -548,7 +548,7 @@ @ stdcall GetLogicalDriveStringsW(long ptr) @ stdcall GetLogicalDrives() @ stdcall GetLogicalProcessorInformation(ptr ptr) -;@ stdcall GetLogicalProcessorInformationEx ; Win 7 +;@ stdcall GetLogicalProcessorInformationEx api-ms-win-core-sysinfo-l1-1-0.GetLogicalProcessorInformationEx ; Win 7 @ stdcall GetLongPathNameA (str long long) ;@ stdcall GetLongPathNameTransactedA ; Win 7 ;@ stdcall GetLongPathNameTransactedW ; Win 7 @@ -775,13 +775,13 @@ ;@ stdcall InitOnceBeginInitialize ; Win 7 ;@ stdcall InitOnceComplete ; Win 7 ;@ stdcall InitOnceExecuteOnce ; Win 7 -;@ stdcall InitOnceInitialize ; Win 7 -;@ stdcall InitializeConditionVariable ; Win 7 -@ stdcall InitializeCriticalSection(ptr) +;@ stdcall InitOnceInitialize ntdll.RtlRunOnceInitialize ; Win 7 +;@ stdcall InitializeConditionVariable ntdll.RtlInitializeConditionVariable ; Win 7 +@ stdcall InitializeCriticalSection(ptr) ; FIXME: ntdll.RtlInitializeCriticalSection @ stdcall InitializeCriticalSectionAndSpinCount(ptr long) ;@ stdcall InitializeCriticalSectionEx(ptr long long) ; missing in XP SP3 ;@ stdcall InitializeExtendedContext ; Win 7 -;@ stdcall InitializeProcThreadAttributeList ; Win 7 +;@ stdcall InitializeProcThreadAttributeList api-ms-win-core-processthreads-l1-1-0.InitializeProcThreadAttributeList ; Win 7 @ stdcall InitializeSListHead(ptr) ntdll.RtlInitializeSListHead @ stdcall InitializeSRWLock(ptr) ntdll.RtlInitializeSRWLock @ stdcall InterlockedCompareExchange(ptr long long) ; missing in Win 7 x64 @@ -793,7 +793,7 @@ @ stdcall InterlockedIncrement(ptr) ; missing in Win 7 x64 @ stdcall InterlockedPopEntrySList(ptr) ntdll.RtlInterlockedPopEntrySList @ stdcall InterlockedPushEntrySList(ptr ptr) ntdll.RtlInterlockedPushEntrySList -;@ stdcall InterlockedPushListSList ; Win 7 +;@ stdcall InterlockedPushListSList ntdll.RtlInterlockedPushListSList ; Win 7 @ stdcall InvalidateConsoleDIBits(long long) @ stub InvalidateNSCache ; missing in XP SP3 and Win 7 @ stdcall IsBadCodePtr(ptr) @@ -815,7 +815,7 @@ @ stdcall IsProcessorFeaturePresent(long) @ stdcall IsSystemResumeAutomatic() ;@ stdcall IsThreadAFiber ; Win 7 -;@ stdcall IsThreadpoolTimerSet ; Win 7 +;@ stdcall IsThreadpoolTimerSet ntdll.TpIsTimerSet ; Win 7 ;@ stdcall IsTimeZoneRedirectionEnabled ; Win 7 ;@ stdcall IsValidCalDateTime ; Win 7 @ stdcall IsValidCodePage(long) @@ -867,7 +867,7 @@ @ stdcall LZSeek(long long long) ;check @ stdcall LZStart() @ stdcall LeaveCriticalSection(ptr) ntdll.RtlLeaveCriticalSection -;@ stdcall LeaveCriticalSectionWhenCallbackReturns ; Win 7 +;@ stdcall LeaveCriticalSectionWhenCallbackReturns ntdll.TpCallbackLeaveCriticalSectionOnCompletion ; Win 7 ;@ stdcall LoadAppInitDlls ; Win 7 @ stdcall LoadLibraryA(str) @ stdcall LoadLibraryExA( str long long) @@ -889,8 +889,8 @@ @ stdcall LocalSize(long) @ stdcall LocalUnlock(long) @ stub LocaleNameToLCID ; missing in XP SP3 -;@ stdcall LocateExtendedFeature ; Win 7 -;@ stdcall LocateLegacyContext ; Win 7 +;@ stdcall LocateExtendedFeature api-ms-win-core-xstate-l1-1-0.RtlLocateExtendedFeature ; Win 7 +;@ stdcall LocateLegacyContext api-ms-win-core-xstate-l1-1-0.RtlLocateLegacyContext ; Win 7 @ stdcall LockFile(long long long long long) @ stdcall LockFileEx(long long long long long ptr) @ stdcall LockResource(long) @@ -943,12 +943,12 @@ ;@ stdcall OpenPrivateNamespaceA ; Win 7 ;@ stdcall OpenPrivateNamespaceW ; Win 7 @ stdcall OpenProcess(long long long) -;@ stdcall OpenProcessToken ; Win 7 +;@ stdcall OpenProcessToken api-ms-win-core-processthreads-l1-1-0.OpenProcessToken ; Win 7 @ stdcall OpenProfileUserMapping() @ stdcall OpenSemaphoreA(long long str) @ stdcall OpenSemaphoreW(long long wstr) @ stdcall OpenThread(long long long) -;@ stdcall OpenThreadToken +;@ stdcall OpenThreadToken api-ms-win-core-processthreads-l1-1-0.OpenThreadToken ; win 7 @ stdcall OpenWaitableTimerA(long long str) @ stdcall OpenWaitableTimerW(long long wstr) @ stdcall OutputDebugStringA(str) @@ -1071,11 +1071,11 @@ @ stdcall RegisterWowExec(long) ;@ stdcall ReleaseActCtx(ptr) @ stdcall ReleaseMutex(long) -;@ stdcall ReleaseMutexWhenCallbackReturns ; Win 7 +;@ stdcall ReleaseMutexWhenCallbackReturns ntdll.TpCallbackReleaseMutexOnCompletion ; Win 7 @ stdcall ReleaseSRWLockExclusive(ptr) ntdll.RtlReleaseSRWLockExclusive @ stdcall ReleaseSRWLockShared(ptr) ntdll.RtlReleaseSRWLockShared @ stdcall ReleaseSemaphore(long long ptr) -;@ stdcall ReleaseSemaphoreWhenCallbackReturns ; Win 7 +;@ stdcall ReleaseSemaphoreWhenCallbackReturns ntdll.TpCallbackReleaseSemaphoreOnCompletion ; Win 7 @ stdcall RemoveDirectoryA(str) ;@ stdcall RemoveDirectoryTransactedA ; Win 7 ;@ stdcall RemoveDirectoryTransactedW ; Win 7 @@ -1180,8 +1180,8 @@ @ stdcall SetEnvironmentVariableW(wstr wstr) @ stdcall SetErrorMode(long) @ stdcall SetEvent(long) -;@ stdcall SetEventWhenCallbackReturns ; Win 7 -;@ stdcall SetExtendedFeaturesMask ; Win 7 +;@ stdcall SetEventWhenCallbackReturns ntdll.TpCallbackSetEventOnCompletion ; Win 7 +;@ stdcall SetExtendedFeaturesMask api-ms-win-core-xstate-l1-1-0.RtlSetExtendedFeaturesMask ; Win 7 @ stdcall SetFileApisToANSI() @ stdcall SetFileApisToOEM() @ stdcall SetFileAttributesA(str long) @@ -1246,13 +1246,13 @@ @ stdcall SetThreadPriority(long long) @ stdcall SetThreadPriorityBoost(long long) ;@ stdcall SetThreadStackGuarantee ; Win 7 -;@ stdcall SetThreadToken ; Win 7 +;@ stdcall SetThreadToken api-ms-win-core-processthreads-l1-1-0.SetThreadToken ; Win 7 @ stdcall SetThreadUILanguage(long) ;@ stdcall SetThreadpoolStackInformation ; Win 7 -;@ stdcall SetThreadpoolThreadMaximum ; Win 7 +;@ stdcall SetThreadpoolThreadMaximum ntdll.TpSetPoolMaxThreads ; Win 7 ;@ stdcall SetThreadpoolThreadMinimum ; Win 7 -;@ stdcall SetThreadpoolTimer ; Win 7 -;@ stdcall SetThreadpoolWait ; Win 7 +;@ stdcall SetThreadpoolTimer ntdll.TpSetTimer ; Win 7 +;@ stdcall SetThreadpoolWait ntdll.TpSetWait ; Win 7 @ stdcall SetTimeZoneInformation(ptr) @ stdcall SetTimerQueueTimer(long ptr ptr long long long) ;@ stdcall -arch?x86_64 SetUmsThreadInformation @@ -1264,7 +1264,7 @@ @ stdcall SetVolumeMountPointA(str str) @ stdcall SetVolumeMountPointW(wstr wstr) @ stdcall SetWaitableTimer(long ptr long ptr ptr long) -;@ stdcall SetWaitableTimerEx ; Win 7 +;@ stdcall SetWaitableTimerEx api-ms-win-core-threadpool-l1-1-0.SetWaitableTimerEx ; Win 7 @ stdcall SetupComm(long long long) @ stdcall ShowConsoleCursor(long long) @ stdcall SignalObjectAndWait(long long long long) @@ -1275,8 +1275,8 @@ @ stdcall SleepEx(long long) ;@ stdcall SortCloseHandle ; Win 7 ;@ stdcall SortGetHandle ; Win 7 -;@ stdcall StartThreadpoolIo ; Win 7 -;@ stdcall SubmitThreadpoolWork ; Win 7 +;@ stdcall StartThreadpoolIo ntdll.TpStartAsyncIoOperation ; Win 7 +;@ stdcall SubmitThreadpoolWork ntdll.TpPostWork ; Win 7 @ stdcall SuspendThread(long) @ stdcall SwitchToFiber(ptr) @ stdcall SwitchToThread() @@ -1298,8 +1298,8 @@ @ stdcall TransactNamedPipe(long ptr long ptr long ptr ptr) @ stdcall TransmitCommChar(long long) @ stdcall TrimVirtualBuffer(ptr) ; missing in Win 7 -;@ stdcall TryAcquireSRWLockExclusive ; Win 7 -;@ stdcall TryAcquireSRWLockShared ; Win 7 +;@ stdcall TryAcquireSRWLockExclusive ntdll.RtlTryAcquireSRWLockExclusive ; Win 7 +;@ stdcall TryAcquireSRWLockShared ntdll.RtlTryAcquireSRWLockShared ; Win 7 @ stdcall TryEnterCriticalSection(ptr) ntdll.RtlTryEnterCriticalSection ;@ stdcall TrySubmitThreadpoolCallback ; Win 7 @ stdcall TzSpecificLocalTimeToSystemTime(ptr ptr ptr) @@ -1316,7 +1316,7 @@ @ stdcall UnregisterWait(long) @ stdcall UnregisterWaitEx(long long) ;@ stdcall UpdateCalendarDayOfWeek ; Win 7 -;@ stdcall UpdateProcThreadAttribute ; Win 7 +;@ stdcall UpdateProcThreadAttribute api-ms-win-core-processthreads-l1-1-0.UpdateProcThreadAttribute ; Win 7 @ stdcall UpdateResourceA(long str str long ptr long) @ stdcall UpdateResourceW(long wstr wstr long ptr long) @ stdcall VDMConsoleOperation(long long) @@ -1349,10 +1349,10 @@ @ stdcall WaitForMultipleObjectsEx(long ptr long long long) @ stdcall WaitForSingleObject(long long) @ stdcall WaitForSingleObjectEx(long long long) -;@ stdcall WaitForThreadpoolIoCallbacks ; Win 7 -;@ stdcall WaitForThreadpoolTimerCallbacks ; Win 7 -;@ stdcall WaitForThreadpoolWaitCallbacks ; Win 7 -;@ stdcall WaitForThreadpoolWorkCallbacks ; Win 7 +;@ stdcall WaitForThreadpoolIoCallbacks ntdll.TpWaitForIoCompletion ; Win 7 +;@ stdcall WaitForThreadpoolTimerCallbacks ntdll.TpWaitForTimer ; Win 7 +;@ stdcall WaitForThreadpoolWaitCallbacks ntdll.TpWaitForWait ; Win 7 +;@ stdcall WaitForThreadpoolWorkCallbacks ntdll.TpWaitForWork ; Win 7 @ stdcall WaitNamedPipeA (str long) @ stdcall WaitNamedPipeW (wstr long) @ stdcall WakeAllConditionVariable(ptr) ntdll.RtlWakeAllConditionVariable @@ -1408,9 +1408,9 @@ @ stdcall WriteTapemark(ptr long long long) @ stdcall WTSGetActiveConsoleSessionId() ; missing in win 7 ;@ stdcall ZombifyActCtx(ptr) -;@ stdcall -arch=x86_64 __C_specific_handler -;@ stdcall -arch=x86_64 __chkstk -;@ stdcall -arch=x86_64 __misaligned_access +;@ stdcall -arch=x86_64 __C_specific_handler ntdll.__C_specific_handler +;@ stdcall -arch=x86_64 __chkstk ntdll.__chkstk +;@ stdcall -arch=x86_64 __misaligned_access ntdll.__misaligned_access @ stub _DebugOut ; missing in XP SP3 and Win 7 @ stub _DebugPrintf ; missing in XP SP3 and Win 7 @ stdcall _hread(long ptr long) @@ -1418,7 +1418,7 @@ @ stdcall _lclose(long) @ stdcall _lcreat(str long) @ stdcall _llseek(long long long) -;@ stdcall -arch=x86_64 _local_unwind ; Win 7 +;@ stdcall -arch=x86_64 _local_unwind ntdll._local_unwind; Win 7 @ stdcall _lopen(str long) @ stdcall _lread(long ptr long) _hread @ stdcall _lwrite(long ptr long) _hwrite From 32acc784014b21292b2d241658d73fe504231e19 Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Sat, 7 Nov 2009 00:10:56 +0000 Subject: [PATCH 073/286] Fix user32 build mostly tested in trunk. Some local changes still not committed. svn path=/branches/ros-amd64-bringup/; revision=43992 --- reactos/dll/win32/user32/include/window.h | 2 +- reactos/dll/win32/user32/windows/class.c | 97 +++++++++++-------- reactos/dll/win32/user32/windows/clipboard.c | 8 +- reactos/dll/win32/user32/windows/dialog.c | 10 +- reactos/dll/win32/user32/windows/hook.c | 4 +- reactos/dll/win32/user32/windows/menu.c | 27 +++--- reactos/dll/win32/user32/windows/message.c | 20 ++-- reactos/dll/win32/user32/windows/messagebox.c | 20 ++-- reactos/dll/win32/user32/windows/nonclient.c | 6 +- reactos/dll/win32/user32/windows/prop.c | 6 +- reactos/dll/win32/user32/windows/spy.c | 2 +- reactos/dll/win32/user32/windows/window.c | 12 +-- 12 files changed, 111 insertions(+), 103 deletions(-) diff --git a/reactos/dll/win32/user32/include/window.h b/reactos/dll/win32/user32/include/window.h index 5fa8fdfc9f6..3b604e25f6a 100644 --- a/reactos/dll/win32/user32/include/window.h +++ b/reactos/dll/win32/user32/include/window.h @@ -65,5 +65,5 @@ User32CreateWindowEx(DWORD dwExStyle, BOOL Unicode); HWND* WIN_ListChildren (HWND hWndparent); -ULONG_PTR FASTCALL IntGetWndProc(PWND, BOOL); +WNDPROC FASTCALL IntGetWndProc(PWND, BOOL); DWORD WINAPI GetRealWindowOwner(HWND); diff --git a/reactos/dll/win32/user32/windows/class.c b/reactos/dll/win32/user32/windows/class.c index 1a8b2924c5a..36a68b24508 100644 --- a/reactos/dll/win32/user32/windows/class.c +++ b/reactos/dll/win32/user32/windows/class.c @@ -266,11 +266,11 @@ IntGetClsWndProc(PWND pWnd, PCLS Class, BOOL Ansi) // // Based on IntGetClsWndProc // -ULONG_PTR FASTCALL +WNDPROC FASTCALL IntGetWndProc(PWND pWnd, BOOL Ansi) { INT i; - ULONG_PTR gcpd, Ret = 0; + WNDPROC gcpd, Ret = 0; PCLS Class = DesktopPtrToUser(pWnd->pcls); if (!Class) return Ret; @@ -282,9 +282,9 @@ IntGetWndProc(PWND pWnd, BOOL Ansi) if (GETPFNSERVER(i) == pWnd->lpfnWndProc) { if (Ansi) - Ret = (ULONG_PTR)GETPFNCLIENTA(i); + Ret = GETPFNCLIENTA(i); else - Ret = (ULONG_PTR)GETPFNCLIENTW(i); + Ret = GETPFNCLIENTW(i); } } return Ret; @@ -296,36 +296,36 @@ IntGetWndProc(PWND pWnd, BOOL Ansi) is treated specially. */ if (Class->fnid == FNID_EDIT) - Ret = (ULONG_PTR)pWnd->lpfnWndProc; + Ret = pWnd->lpfnWndProc; else { // Set return proc. - Ret = (ULONG_PTR)pWnd->lpfnWndProc; + Ret = pWnd->lpfnWndProc; if (Class->fnid <= FNID_GHOST && Class->fnid >= FNID_BUTTON) { if (Ansi) { if (GETPFNCLIENTW(Class->fnid) == pWnd->lpfnWndProc) - Ret = (ULONG_PTR)GETPFNCLIENTA(Class->fnid); + Ret = GETPFNCLIENTA(Class->fnid); } else { if (GETPFNCLIENTA(Class->fnid) == pWnd->lpfnWndProc) - Ret = (ULONG_PTR)GETPFNCLIENTW(Class->fnid); + Ret = GETPFNCLIENTW(Class->fnid); } } // Return on the change. - if ( Ret != (ULONG_PTR)pWnd->lpfnWndProc) + if ( Ret != pWnd->lpfnWndProc) return Ret; } if ( Ansi == !!(pWnd->state & WNDS_ANSIWINDOWPROC) ) return Ret; - gcpd = NtUserGetCPD( UserHMGetHandle(pWnd), - (Ansi ? UserGetCPDA2U : UserGetCPDU2A )|UserGetCPDWindow, - Ret); + gcpd = (WNDPROC)NtUserGetCPD( UserHMGetHandle(pWnd), + (Ansi ? UserGetCPDA2U : UserGetCPDU2A )|UserGetCPDWindow, + (ULONG_PTR)&Ret); return (gcpd ? gcpd : Ret); } @@ -658,7 +658,7 @@ GetClassWord( } -LONG_PTR Internal_GetWindowLong( HWND hwnd, INT offset, UINT size, BOOL unicode ) +LONG_PTR IntGetWindowLong( HWND hwnd, INT offset, UINT size, BOOL unicode ) { LONG_PTR retvalue = 0; WND *wndPtr; @@ -724,7 +724,7 @@ LONG WINAPI GetWindowLongA ( HWND hWnd, int nIndex ) { - return Internal_GetWindowLong( hWnd, nIndex, sizeof(LONG), FALSE ); + return IntGetWindowLong( hWnd, nIndex, sizeof(LONG), FALSE ); } /* @@ -734,30 +734,30 @@ LONG WINAPI GetWindowLongW(HWND hWnd, int nIndex) { - return Internal_GetWindowLong( hWnd, nIndex, sizeof(LONG), TRUE ); + return IntGetWindowLong( hWnd, nIndex, sizeof(LONG), TRUE ); } #ifdef _WIN64 /* - * @unimplemented + * @implemented */ LONG_PTR WINAPI GetWindowLongPtrA(HWND hWnd, INT nIndex) { - return Internal_GetWindowLong( hWnd, nIndex, sizeof(LONG_PTR), FALSE ); + return IntGetWindowLong( hWnd, nIndex, sizeof(LONG_PTR), FALSE ); } /* - * @unimplemented + * @implemented */ LONG_PTR WINAPI GetWindowLongPtrW(HWND hWnd, INT nIndex) { - return Internal_GetWindowLong( hWnd, nIndex, sizeof(LONG_PTR), TRUE ); + return IntGetWindowLong( hWnd, nIndex, sizeof(LONG_PTR), TRUE ); } #endif // _WIN64 @@ -784,17 +784,7 @@ GetWindowWord(HWND hWnd, int nIndex) } break; } - return Internal_GetWindowLong( hWnd, nIndex, sizeof(WORD), FALSE ); -} - -/* - * @implemented - */ -WORD -WINAPI -SetWindowWord ( HWND hWnd,int nIndex,WORD wNewWord ) -{ - return (WORD)NtUserSetWindowLong ( hWnd, nIndex, (LONG)wNewWord, TRUE ); + return IntGetWindowLong( hWnd, nIndex, sizeof(WORD), FALSE ); } /* @@ -1200,7 +1190,7 @@ SetClassLongA (HWND hWnd, int nIndex, LONG dwNewLong) { - PSTR lpStr = (PSTR)dwNewLong; + PSTR lpStr = (PSTR)(ULONG_PTR)dwNewLong; UNICODE_STRING Value = {0}; BOOL Allocated = FALSE; DWORD Ret; @@ -1223,7 +1213,7 @@ SetClassLongA (HWND hWnd, else Value.Buffer = (PWSTR)lpStr; - dwNewLong = (LONG)&Value; + dwNewLong = (LONG_PTR)&Value; } else if (nIndex == GCW_ATOM && lpStr != NULL) { @@ -1241,7 +1231,7 @@ SetClassLongA (HWND hWnd, else Value.Buffer = (PWSTR)lpStr; - dwNewLong = (LONG)&Value; + dwNewLong = (LONG_PTR)&Value; } Ret = (DWORD)NtUserSetClassLong(hWnd, @@ -1267,7 +1257,7 @@ SetClassLongW(HWND hWnd, int nIndex, LONG dwNewLong) { - PWSTR lpStr = (PWSTR)dwNewLong; + PWSTR lpStr = (PWSTR)(ULONG_PTR)dwNewLong; UNICODE_STRING Value = {0}; TRACE("%p %d %lx\n", hWnd, nIndex, dwNewLong); @@ -1284,7 +1274,7 @@ SetClassLongW(HWND hWnd, else Value.Buffer = lpStr; - dwNewLong = (LONG)&Value; + dwNewLong = (LONG_PTR)&Value; } else if (nIndex == GCW_ATOM && lpStr != NULL) { @@ -1296,7 +1286,7 @@ SetClassLongW(HWND hWnd, else Value.Buffer = lpStr; - dwNewLong = (LONG)&Value; + dwNewLong = (LONG_PTR)&Value; } return (DWORD)NtUserSetClassLong(hWnd, @@ -1352,6 +1342,30 @@ SetClassWord( return (WORD) SetClassLongW ( hWnd, nIndex, wNewWord ); } +/* + * @implemented + */ +WORD +WINAPI +SetWindowWord ( HWND hWnd,int nIndex,WORD wNewWord ) +{ + switch(nIndex) + { + case GWLP_ID: + case GWLP_HINSTANCE: + case GWLP_HWNDPARENT: + break; + default: + if (nIndex < 0) + { + WARN("Invalid offset %d\n", nIndex ); + SetLastError( ERROR_INVALID_INDEX ); + return 0; + } + break; + } + return NtUserSetWindowLong( hWnd, nIndex, wNewWord, FALSE ); +} /* * @implemented @@ -1366,7 +1380,6 @@ SetWindowLongA( return NtUserSetWindowLong(hWnd, nIndex, dwNewLong, TRUE); } - /* * @implemented */ @@ -1382,7 +1395,7 @@ SetWindowLongW( #ifdef _WIN64 /* - * @unimplemented + * @implemented */ LONG_PTR WINAPI @@ -1390,12 +1403,11 @@ SetWindowLongPtrA(HWND hWnd, INT nIndex, LONG_PTR dwNewLong) { - UNIMPLEMENTED; - return 0; + return NtUserSetWindowLong(hWnd, nIndex, dwNewLong, FALSE); } /* - * @unimplemented + * @implemented */ LONG_PTR WINAPI @@ -1403,8 +1415,7 @@ SetWindowLongPtrW(HWND hWnd, INT nIndex, LONG_PTR dwNewLong) { - UNIMPLEMENTED; - return 0; + return NtUserSetWindowLong(hWnd, nIndex, dwNewLong, FALSE); } #endif diff --git a/reactos/dll/win32/user32/windows/clipboard.c b/reactos/dll/win32/user32/windows/clipboard.c index 2dad84d2f6f..ca8a3d2ec9e 100644 --- a/reactos/dll/win32/user32/windows/clipboard.c +++ b/reactos/dll/win32/user32/windows/clipboard.c @@ -54,26 +54,26 @@ GetClipboardData(UINT uFormat) { HGLOBAL hGlobal = NULL; PVOID pGlobal = NULL; - DWORD size = 0; + DWORD_PTR size = 0; /* dealing with bitmap object */ if (uFormat != CF_BITMAP) { - size = (DWORD)NtUserGetClipboardData(uFormat, NULL); + size = NtUserGetClipboardData(uFormat, NULL); if (size) { hGlobal = GlobalAlloc(GMEM_DDESHARE | GMEM_MOVEABLE, size); pGlobal = GlobalLock(hGlobal); - size = (DWORD)NtUserGetClipboardData(uFormat, pGlobal); + size = NtUserGetClipboardData(uFormat, pGlobal); GlobalUnlock(hGlobal); } } else { - hGlobal = NtUserGetClipboardData(CF_BITMAP, NULL); + hGlobal = (HANDLE)NtUserGetClipboardData(CF_BITMAP, NULL); } return hGlobal; diff --git a/reactos/dll/win32/user32/windows/dialog.c b/reactos/dll/win32/user32/windows/dialog.c index 2569b58804f..909bc5dfcf4 100644 --- a/reactos/dll/win32/user32/windows/dialog.c +++ b/reactos/dll/win32/user32/windows/dialog.c @@ -159,7 +159,7 @@ DIALOGINFO * DIALOG_get_info( HWND hWnd, BOOL create ) SETDLGINFO( hWnd, dlgInfo ); - NtUserCallHwndParam( hWnd, (DWORD)dlgInfo, HWNDPARAM_ROUTINE_SETDIALOGPOINTER ); + NtUserCallHwndParam( hWnd, (DWORD_PTR)dlgInfo, HWNDPARAM_ROUTINE_SETDIALOGPOINTER ); } else { @@ -342,7 +342,7 @@ static BOOL DIALOG_CreateControls32( HWND hwnd, LPCSTR template, const DLG_TEMPL MulDiv(info.y, dlgInfo->yBaseUnit, 8), MulDiv(info.cx, dlgInfo->xBaseUnit, 4), MulDiv(info.cy, dlgInfo->yBaseUnit, 8), - hwnd, (HMENU)info.id, + hwnd, (HMENU)(ULONG_PTR)info.id, hInst, (LPVOID)info.data ); } else @@ -373,7 +373,7 @@ static BOOL DIALOG_CreateControls32( HWND hwnd, LPCSTR template, const DLG_TEMPL MulDiv(info.y, dlgInfo->yBaseUnit, 8), MulDiv(info.cx, dlgInfo->xBaseUnit, 4), MulDiv(info.cy, dlgInfo->yBaseUnit, 8), - hwnd, (HMENU)info.id, + hwnd, (HMENU)(ULONG_PTR)info.id, hInst, (LPVOID)info.data ); } else @@ -612,7 +612,7 @@ static LPCSTR DIALOG_ParseTemplate32( LPCSTR template, DLG_TEMPLATE * result ) p++; break; case 0xffff: - result->menuName = (LPCWSTR)(UINT)GET_WORD( p + 1 ); + result->menuName = (LPCWSTR)(UINT_PTR)GET_WORD( p + 1 ); p += 2; break; default: @@ -630,7 +630,7 @@ static LPCSTR DIALOG_ParseTemplate32( LPCSTR template, DLG_TEMPLATE * result ) p++; break; case 0xffff: - result->className = (LPCWSTR)(UINT)GET_WORD( p + 1 ); + result->className = (LPCWSTR)(UINT_PTR)GET_WORD( p + 1 ); p += 2; break; default: diff --git a/reactos/dll/win32/user32/windows/hook.c b/reactos/dll/win32/user32/windows/hook.c index 4abff2aac49..304f9320a96 100644 --- a/reactos/dll/win32/user32/windows/hook.c +++ b/reactos/dll/win32/user32/windows/hook.c @@ -441,12 +441,12 @@ User32CallHookProcFromKernel(PVOID Arguments, ULONG ArgumentLength) if (NULL != CbtCreatewndExtra->Cs.lpszName) { Csw.lpszName = (LPCWSTR)((PCHAR) CbtCreatewndExtra - + (ULONG) CbtCreatewndExtra->Cs.lpszName); + + (ULONG_PTR) CbtCreatewndExtra->Cs.lpszName); } if (0 != HIWORD(CbtCreatewndExtra->Cs.lpszClass)) { Csw.lpszClass = (LPCWSTR)((PCHAR) CbtCreatewndExtra - + LOWORD((ULONG) CbtCreatewndExtra->Cs.lpszClass)); + + LOWORD((ULONG_PTR) CbtCreatewndExtra->Cs.lpszClass)); } wParam = Common->wParam; if (Common->Ansi) diff --git a/reactos/dll/win32/user32/windows/menu.c b/reactos/dll/win32/user32/windows/menu.c index 86ff286aabf..9f9dbee64a5 100644 --- a/reactos/dll/win32/user32/windows/menu.c +++ b/reactos/dll/win32/user32/windows/menu.c @@ -330,7 +330,7 @@ MenuGetBitmapItemSize(PROSMENUITEMINFO lpitem, SIZE *Size, HWND WndOwner) case (INT_PTR) HBMMENU_SYSTEM: if (0 != lpitem->dwItemData) { - Bmp = (HBITMAP) lpitem->dwItemData; + Bmp = (HBITMAP)(ULONG_PTR) lpitem->dwItemData; break; } /* fall through */ @@ -982,7 +982,7 @@ PopupMenuWndProcA(HWND Wnd, UINT Message, WPARAM wParam, LPARAM lParam) case WM_CREATE: { CREATESTRUCTA *cs = (CREATESTRUCTA *) lParam; - SetWindowLongPtrA(Wnd, 0, (LONG) cs->lpCreateParams); + SetWindowLongPtrA(Wnd, 0, (LONG_PTR)cs->lpCreateParams); return 0; } @@ -1054,7 +1054,7 @@ PopupMenuWndProcW(HWND Wnd, UINT Message, WPARAM wParam, LPARAM lParam) case WM_CREATE: { CREATESTRUCTW *cs = (CREATESTRUCTW *) lParam; - SetWindowLongPtrW(Wnd, 0, (LONG) cs->lpCreateParams); + SetWindowLongPtrW(Wnd, 0, (LONG_PTR)cs->lpCreateParams); return 0; } @@ -1144,11 +1144,11 @@ static LPCSTR MENUEX_ParseResource( LPCSTR res, HMENU hMenu) resinfo = GET_WORD(res); res += sizeof(WORD); /* Align the text on a word boundary. */ - res += (~((int)res - 1)) & 1; + res += (~((UINT_PTR)res - 1)) & 1; mii.dwTypeData = (LPWSTR) res; res += (1 + strlenW(mii.dwTypeData)) * sizeof(WCHAR); /* Align the following fields on a dword boundary. */ - res += (~((int)res - 1)) & 3; + res += (~((UINT_PTR)res - 1)) & 3; if (resinfo & 1) /* Pop-up? */ { @@ -1164,7 +1164,7 @@ static LPCSTR MENUEX_ParseResource( LPCSTR res, HMENU hMenu) } mii.fMask |= MIIM_SUBMENU; mii.fType |= MF_POPUP; - mii.wID = (UINT) mii.hSubMenu; + mii.wID = (UINT_PTR) mii.hSubMenu; } else if(!*mii.dwTypeData && !(mii.fType & MF_SEPARATOR)) { @@ -1218,9 +1218,9 @@ static LPCSTR MENU_ParseResource( LPCSTR res, HMENU hMenu, BOOL unicode ) if(!(res = MENU_ParseResource(res, hSubMenu, unicode))) return NULL; if(!unicode) - AppendMenuA(hMenu, flags, (UINT)hSubMenu, str); + AppendMenuA(hMenu, flags, (UINT_PTR)hSubMenu, str); else - AppendMenuW(hMenu, flags, (UINT)hSubMenu, (LPCWSTR)str); + AppendMenuW(hMenu, flags, (UINT_PTR)hSubMenu, (LPCWSTR)str); } else /* Not a popup */ { @@ -3868,7 +3868,7 @@ MenuSetItemData( { mii->fType |= MFT_OWNERDRAW; mii->fMask |= MIIM_DATA; - mii->dwItemData = (DWORD) NewItem; + mii->dwItemData = (DWORD_PTR) NewItem; } else if (Flags & MF_SEPARATOR) { @@ -4245,12 +4245,9 @@ EndMenu(VOID) HMENU WINAPI GetMenu(HWND hWnd) { - PWND Wnd = ValidateHwnd(hWnd); - - if (!Wnd) - return NULL; - - return (HMENU)Wnd->IDMenu; + HMENU retvalue = (HMENU)GetWindowLongPtrW( hWnd, GWLP_ID ); + TRACE("for %p returning %p\n", hWnd, retvalue); + return retvalue; } diff --git a/reactos/dll/win32/user32/windows/message.c b/reactos/dll/win32/user32/windows/message.c index bff9ee5b42c..4c831fc747f 100644 --- a/reactos/dll/win32/user32/windows/message.c +++ b/reactos/dll/win32/user32/windows/message.c @@ -163,19 +163,19 @@ MsgiUMToKMMessage(PMSG UMMsg, PMSG KMMsg, BOOL Posted) { DdeLparam->Packed = TRUE; if (! UnpackDDElParam(UMMsg->message, UMMsg->lParam, - &DdeLparam->Value.Packed.uiLo, - &DdeLparam->Value.Packed.uiHi)) + (PUINT_PTR)&DdeLparam->Value.Packed.uiLo, + (PUINT_PTR)&DdeLparam->Value.Packed.uiHi)) { return FALSE; } if (0 != HIWORD(DdeLparam->Value.Packed.uiHi)) { /* uiHi should contain a hMem from WM_DDE_EXECUTE */ - HGLOBAL h = DdeGetPair((HGLOBAL) DdeLparam->Value.Packed.uiHi); + HGLOBAL h = DdeGetPair((HGLOBAL)(ULONG_PTR)DdeLparam->Value.Packed.uiHi); if (NULL != h) { - GlobalFree((HGLOBAL) DdeLparam->Value.Packed.uiHi); - DdeLparam->Value.Packed.uiHi = (UINT) h; + GlobalFree((HGLOBAL)(ULONG_PTR)DdeLparam->Value.Packed.uiHi); + DdeLparam->Value.Packed.uiHi = (UINT_PTR) h; } } FreeDDElParam(UMMsg->message, UMMsg->lParam); @@ -685,7 +685,7 @@ MsgiUnicodeToAnsiMessage(LPMSG AnsiMsg, LPMSG UnicodeMsg) return FALSE; } CsA->lpszName = AnsiString.Buffer; - if (HIWORD((ULONG)CsW->lpszClass) != 0) + if (HIWORD((ULONG_PTR)CsW->lpszClass) != 0) { RtlInitUnicodeString(&UnicodeString, CsW->lpszClass); Status = RtlUnicodeStringToAnsiString(&AnsiString, &UnicodeString, TRUE); @@ -849,7 +849,7 @@ MsgiUnicodeToAnsiCleanup(LPMSG AnsiMsg, LPMSG UnicodeMsg) Cs = (CREATESTRUCTA*) AnsiMsg->lParam; RtlInitAnsiString(&AnsiString, Cs->lpszName); RtlFreeAnsiString(&AnsiString); - if (HIWORD((ULONG)Cs->lpszClass) != 0) + if (HIWORD((ULONG_PTR)Cs->lpszClass) != 0) { RtlInitAnsiString(&AnsiString, Cs->lpszClass); RtlFreeAnsiString(&AnsiString); @@ -946,7 +946,7 @@ typedef struct tagMSGCONVERSION MSG UnicodeMsg; MSG AnsiMsg; PMSG FinalMsg; - ULONG LParamSize; + SIZE_T LParamSize; } MSGCONVERSION, *PMSGCONVERSION; static PMSGCONVERSION MsgConversions = NULL; @@ -2397,7 +2397,7 @@ SendNotifyMessageW( * @implemented */ BOOL WINAPI -TranslateMessageEx(CONST MSG *lpMsg, DWORD unk) +TranslateMessageEx(CONST MSG *lpMsg, UINT Flags) { switch (lpMsg->message) { @@ -2405,7 +2405,7 @@ TranslateMessageEx(CONST MSG *lpMsg, DWORD unk) case WM_KEYUP: case WM_SYSKEYDOWN: case WM_SYSKEYUP: - return(NtUserTranslateMessage((LPMSG)lpMsg, (HKL)unk)); + return(NtUserTranslateMessage((LPMSG)lpMsg, Flags)); default: if ( lpMsg->message & ~WM_MAXIMUM ) diff --git a/reactos/dll/win32/user32/windows/messagebox.c b/reactos/dll/win32/user32/windows/messagebox.c index 598eabea96b..7ea0b9016e2 100644 --- a/reactos/dll/win32/user32/windows/messagebox.c +++ b/reactos/dll/win32/user32/windows/messagebox.c @@ -423,7 +423,7 @@ MessageBoxTimeoutIndirectW( } /* create static for text */ - dest = (BYTE*)(((DWORD)dest + 3) & ~3); + dest = (BYTE*)(((UINT_PTR)dest + 3) & ~3); itxt = (DLGITEMTEMPLATE *)dest; itxt->style = WS_CHILD | WS_VISIBLE | SS_NOPREFIX; if(lpMsgBoxParams->dwStyle & MB_RIGHT) @@ -450,7 +450,7 @@ MessageBoxTimeoutIndirectW( btnrect.left = btnrect.top = 0; for(i = 0; i < nButtons; i++) { - dest = (BYTE*)(((DWORD)dest + 3) & ~3); + dest = (BYTE*)(((UINT_PTR)dest + 3) & ~3); ibtn[i] = (DLGITEMTEMPLATE *)dest; ibtn[i]->style = WS_CHILD | WS_VISIBLE | WS_TABSTOP; if(!defbtn && (i == ((lpMsgBoxParams->dwStyle & MB_DEFMASK) >> 8))) @@ -699,7 +699,7 @@ MessageBoxIndirectA( UNICODE_STRING textW, captionW, iconW; int ret; - if (HIWORD((UINT)lpMsgBoxParams->lpszText)) + if (HIWORD((UINT_PTR)lpMsgBoxParams->lpszText)) { RtlCreateUnicodeStringFromAsciiz(&textW, (PCSZ)lpMsgBoxParams->lpszText); /* @@ -711,7 +711,7 @@ MessageBoxIndirectA( else textW.Buffer = (LPWSTR)lpMsgBoxParams->lpszText; - if (HIWORD((UINT)lpMsgBoxParams->lpszCaption)) + if (HIWORD((UINT_PTR)lpMsgBoxParams->lpszCaption)) { RtlCreateUnicodeStringFromAsciiz(&captionW, (PCSZ)lpMsgBoxParams->lpszCaption); /* @@ -725,7 +725,7 @@ MessageBoxIndirectA( if(lpMsgBoxParams->dwStyle & MB_USERICON) { - if (HIWORD((UINT)lpMsgBoxParams->lpszIcon)) + if (HIWORD((UINT_PTR)lpMsgBoxParams->lpszIcon)) { RtlCreateUnicodeStringFromAsciiz(&iconW, (PCSZ)lpMsgBoxParams->lpszIcon); /* @@ -753,13 +753,13 @@ MessageBoxIndirectA( ret = MessageBoxTimeoutIndirectW(&msgboxW, (UINT)-1); - if (HIWORD((UINT)lpMsgBoxParams->lpszText)) + if (HIWORD((UINT_PTR)lpMsgBoxParams->lpszText)) RtlFreeUnicodeString(&textW); - if (HIWORD((UINT)lpMsgBoxParams->lpszCaption)) + if (HIWORD((UINT_PTR)lpMsgBoxParams->lpszCaption)) RtlFreeUnicodeString(&captionW); - if ((lpMsgBoxParams->dwStyle & MB_USERICON) && HIWORD((UINT)iconW.Buffer)) + if ((lpMsgBoxParams->dwStyle & MB_USERICON) && HIWORD((UINT_PTR)iconW.Buffer)) RtlFreeUnicodeString(&iconW); return ret; @@ -809,12 +809,12 @@ MessageBoxTimeoutA( UNICODE_STRING textW, captionW; int ret; - if (HIWORD((UINT)lpText)) + if (HIWORD((UINT_PTR)lpText)) RtlCreateUnicodeStringFromAsciiz(&textW, (PCSZ)lpText); else textW.Buffer = (LPWSTR)lpText; - if (HIWORD((UINT)lpCaption)) + if (HIWORD((UINT_PTR)lpCaption)) RtlCreateUnicodeStringFromAsciiz(&captionW, (PCSZ)lpCaption); else captionW.Buffer = (LPWSTR)lpCaption; diff --git a/reactos/dll/win32/user32/windows/nonclient.c b/reactos/dll/win32/user32/windows/nonclient.c index 0f0b05ad3b0..9cf331e7ced 100644 --- a/reactos/dll/win32/user32/windows/nonclient.c +++ b/reactos/dll/win32/user32/windows/nonclient.c @@ -123,13 +123,13 @@ UserGetWindowIcon(HWND hwnd) { HICON hIcon = 0; - SendMessageTimeout(hwnd, WM_GETICON, ICON_SMALL2, 0, SMTO_ABORTIFHUNG, 1000, (LPDWORD)&hIcon); + SendMessageTimeout(hwnd, WM_GETICON, ICON_SMALL2, 0, SMTO_ABORTIFHUNG, 1000, (PDWORD_PTR)&hIcon); if (!hIcon) - SendMessageTimeout(hwnd, WM_GETICON, ICON_SMALL, 0, SMTO_ABORTIFHUNG, 1000, (LPDWORD)&hIcon); + SendMessageTimeout(hwnd, WM_GETICON, ICON_SMALL, 0, SMTO_ABORTIFHUNG, 1000, (PDWORD_PTR)&hIcon); if (!hIcon) - SendMessageTimeout(hwnd, WM_GETICON, ICON_BIG, 0, SMTO_ABORTIFHUNG, 1000, (LPDWORD)&hIcon); + SendMessageTimeout(hwnd, WM_GETICON, ICON_BIG, 0, SMTO_ABORTIFHUNG, 1000, (PDWORD_PTR)&hIcon); if (!hIcon) hIcon = (HICON)GetClassLongPtr(hwnd, GCL_HICONSM); diff --git a/reactos/dll/win32/user32/windows/prop.c b/reactos/dll/win32/user32/windows/prop.c index 4bcc942a400..16bbbd50059 100644 --- a/reactos/dll/win32/user32/windows/prop.c +++ b/reactos/dll/win32/user32/windows/prop.c @@ -377,7 +377,7 @@ GetPropW(HWND hWnd, LPCWSTR lpString) } else { - Atom = LOWORD((DWORD)lpString); + Atom = LOWORD((DWORD_PTR)lpString); } Prop = IntGetProp(hWnd, Atom); if (Prop != NULL) Data = Prop->Data; @@ -428,7 +428,7 @@ RemovePropW(HWND hWnd, } else { - Atom = LOWORD((DWORD)lpString); + Atom = LOWORD((DWORD_PTR)lpString); } return(NtUserRemoveProp(hWnd, Atom)); } @@ -476,7 +476,7 @@ SetPropW(HWND hWnd, LPCWSTR lpString, HANDLE hData) } else { - Atom = LOWORD((DWORD)lpString); + Atom = LOWORD((DWORD_PTR)lpString); } return(NtUserSetProp(hWnd, Atom, hData)); diff --git a/reactos/dll/win32/user32/windows/spy.c b/reactos/dll/win32/user32/windows/spy.c index a6b64edc0c8..ff7d7d2b0de 100644 --- a/reactos/dll/win32/user32/windows/spy.c +++ b/reactos/dll/win32/user32/windows/spy.c @@ -2010,7 +2010,7 @@ static void SPY_GetClassName( SPY_INSTANCE *sp_e ) /* save and restore error code over the next call */ save_error = GetLastError(); /* special code to detect a property sheet dialog */ - if ((GetClassLongPtrW(sp_e->msg_hwnd, GCW_ATOM) == (LONG)WC_DIALOG) && + if ((GetClassLongPtrW(sp_e->msg_hwnd, GCW_ATOM) == (ULONG_PTR)WC_DIALOG) && (GetPropW(sp_e->msg_hwnd, PropSheetInfoStr))) { strcpyW(sp_e->wnd_class, WC_PROPSHEETW); } diff --git a/reactos/dll/win32/user32/windows/window.c b/reactos/dll/win32/user32/windows/window.c index c6dcb146950..c06ad42f884 100644 --- a/reactos/dll/win32/user32/windows/window.c +++ b/reactos/dll/win32/user32/windows/window.c @@ -145,7 +145,7 @@ CloseWindow(HWND hWnd) { SendMessageA(hWnd, WM_SYSCOMMAND, SC_CLOSE, 0); - return (BOOL)(hWnd); + return HandleToUlong(hWnd); } @@ -346,7 +346,7 @@ CreateWindowExA(DWORD dwExStyle, MDI_CalcDefaultChildPos(hWndParent, -1, mPos, 0, &id); - if (!(dwStyle & WS_POPUP)) hMenu = (HMENU)id; + if (!(dwStyle & WS_POPUP)) hMenu = UlongToHandle(id); if (dwStyle & (WS_CHILD | WS_POPUP)) { @@ -458,7 +458,7 @@ CreateWindowExW(DWORD dwExStyle, MDI_CalcDefaultChildPos(hWndParent, -1, mPos, 0, &id); - if (!(dwStyle & WS_POPUP)) hMenu = (HMENU)id; + if (!(dwStyle & WS_POPUP)) hMenu = UlongToHandle(id); if (dwStyle & (WS_CHILD | WS_POPUP)) { @@ -618,7 +618,7 @@ User32EnumWindows(HDESK hDesktop, * Once that's fixed, we shouldn't have to check for a NULL HWND * here */ - if (!(ULONG)pHwnd[i]) /* don't enumerate a NULL HWND */ + if (!pHwnd[i]) /* don't enumerate a NULL HWND */ continue; if (!(*lpfn)(pHwnd[i], lParam)) { @@ -1343,8 +1343,8 @@ GetWindowThreadProcessId(HWND hWnd, { // We are current. //FIXME("Current!\n"); if (lpdwProcessId) - *lpdwProcessId = (DWORD)NtCurrentTeb()->ClientId.UniqueProcess; - Ret = (DWORD)NtCurrentTeb()->ClientId.UniqueThread; + *lpdwProcessId = (DWORD_PTR)NtCurrentTeb()->ClientId.UniqueProcess; + Ret = (DWORD_PTR)NtCurrentTeb()->ClientId.UniqueThread; } else { // Ask kernel for info. From 033911d0ffa830ad5f6de4ebb657405d411ac7e4 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 7 Nov 2009 03:33:00 +0000 Subject: [PATCH 074/286] [RTL] Simplify RtlLookupFunctionTable svn path=/branches/ros-amd64-bringup/; revision=43993 --- reactos/lib/rtl/amd64/unwind.c | 48 ++++++++++++++++++---------------- 1 file changed, 26 insertions(+), 22 deletions(-) diff --git a/reactos/lib/rtl/amd64/unwind.c b/reactos/lib/rtl/amd64/unwind.c index 5d1597f9b72..276981df6cb 100644 --- a/reactos/lib/rtl/amd64/unwind.c +++ b/reactos/lib/rtl/amd64/unwind.c @@ -60,6 +60,17 @@ typedef struct _UNWIND_INFO /* FUNCTIONS *****************************************************************/ +/*! RtlLookupFunctionTable + * \brief Locates the table of RUNTIME_FUNCTION entries for a code address. + * \param ControlPc + * Address of the code, for which the table should be searched. + * \param ImageBase + * Pointer to a DWORD64 that receives the base address of the + * corresponding executable image. + * \param Length + * Pointer to an ULONG that receives the number of table entries + * present in the table. + */ PRUNTIME_FUNCTION NTAPI RtlLookupFunctionTable( @@ -67,34 +78,27 @@ RtlLookupFunctionTable( OUT PDWORD64 ImageBase, OUT PULONG Length) { - PIMAGE_DOS_HEADER DosHeader; - PIMAGE_NT_HEADERS NtHeader; - PIMAGE_DATA_DIRECTORY Directory; + PVOID Table; + ULONG Size; - /* Find ModuleBase */ - if (!RtlPcToFileHeader((PVOID)ControlPc, (PVOID*)&DosHeader)) - { - return NULL; - } - - /* Locate NT header and check number of directories */ - NtHeader = (PVOID)((ULONG64)DosHeader + DosHeader->e_lfanew); - if (NtHeader->OptionalHeader.NumberOfRvaAndSizes - < IMAGE_DIRECTORY_ENTRY_EXCEPTION) + /* Find corresponding file header from code address */ + if (!RtlPcToFileHeader((PVOID)ControlPc, (PVOID*)ImageBase)) { + /* Nothing found */ return NULL; } /* Locate the exception directory */ - Directory = &NtHeader->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXCEPTION]; - *Length = Directory->Size / sizeof(RUNTIME_FUNCTION); - *ImageBase = (ULONG64)DosHeader; - if (!Directory->VirtualAddress) - { - return NULL; - } + Table = RtlImageDirectoryEntryToData((PVOID)*ImageBase, + TRUE, + IMAGE_DIRECTORY_ENTRY_EXCEPTION, + &Size); - return (PVOID)((ULONG64)DosHeader + Directory->VirtualAddress); + /* Return the number of entries */ + *Length = Size / sizeof(RUNTIME_FUNCTION); + + /* Return the address of the table */ + return Table; } /*! RtlLookupFunctionEntry @@ -119,7 +123,7 @@ RtlLookupFunctionEntry( /* Fail, if no table is found */ if (!FunctionTable) { - return (PVOID)1; + return NULL; } /* Use relative virtual address */ From 666dea45e0363944bf20f1e8f202f609605e683b Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 7 Nov 2009 15:26:12 +0000 Subject: [PATCH 075/286] [RTL] - Implement RtlRaiseException svn path=/branches/ros-amd64-bringup/; revision=44001 --- reactos/lib/rtl/amd64/unwind.c | 73 +++++++++++++++++++++++++++++++++- reactos/lib/rtl/exception.c | 6 ++- 2 files changed, 77 insertions(+), 2 deletions(-) diff --git a/reactos/lib/rtl/amd64/unwind.c b/reactos/lib/rtl/amd64/unwind.c index 276981df6cb..fabda830821 100644 --- a/reactos/lib/rtl/amd64/unwind.c +++ b/reactos/lib/rtl/amd64/unwind.c @@ -1,7 +1,7 @@ /* * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS system libraries - * PURPOSE: Exception related functions + * PURPOSE: Unwinding related functions * PROGRAMMER: Timo Kreuzer (timo.kreuzer@reactos.org) */ @@ -28,6 +28,11 @@ #define UWOP_SAVE_XMM128_FAR 9 #define UWOP_PUSH_MACHFRAME 10 +#define UNW_FLAG_NHANDLER 0 +#define UNW_FLAG_EHANDLER 1 +#define UNW_FLAG_UHANDLER 2 +#define UNW_FLAG_CHAININFO 4 + typedef unsigned char UBYTE; typedef union _UNWIND_CODE @@ -611,3 +616,69 @@ RtlGetCallersAddress( return; } + +// FIXME: move to different file +VOID +NTAPI +RtlRaiseException(IN PEXCEPTION_RECORD ExceptionRecord) +{ + CONTEXT Context; + NTSTATUS Status; + ULONG64 ImageBase; + PRUNTIME_FUNCTION FunctionEntry; + PVOID HandlerData; + ULONG64 EstablisherFrame; + + /* Capture the context */ + RtlCaptureContext(&Context); + + /* Get the function entry for this function */ + FunctionEntry = RtlLookupFunctionEntry(Context.Rip, + &ImageBase, + NULL); + + /* Check if we found it */ + if (FunctionEntry) + { + /* Unwind to the caller of this function */ + RtlVirtualUnwind(UNW_FLAG_NHANDLER, + ImageBase, + Context.Rip, + FunctionEntry, + &Context, + &HandlerData, + &EstablisherFrame, + NULL); + + /* Save the exception address */ + ExceptionRecord->ExceptionAddress = (PVOID)Context.Rip; + + /* Write the context flag */ + Context.ContextFlags = CONTEXT_FULL; + + /* Check if user mode debugger is active */ + if (RtlpCheckForActiveDebugger()) + { + /* Raise an exception immediately */ + Status = ZwRaiseException(ExceptionRecord, &Context, TRUE); + } + else + { + /* Dispatch the exception and check if we should continue */ + if (!RtlDispatchException(ExceptionRecord, &Context)) + { + /* Raise the exception */ + Status = ZwRaiseException(ExceptionRecord, &Context, FALSE); + } + else + { + /* Continue, go back to previous context */ + Status = ZwContinue(&Context, FALSE); + } + } + } + + /* If we returned, raise a status */ + RtlRaiseStatus(Status); +} + diff --git a/reactos/lib/rtl/exception.c b/reactos/lib/rtl/exception.c index d4462e32111..e0970d182e7 100644 --- a/reactos/lib/rtl/exception.c +++ b/reactos/lib/rtl/exception.c @@ -17,7 +17,7 @@ /* FUNCTIONS ***************************************************************/ -#if !defined(_M_IX86) +#if !defined(_M_IX86) && !defined(_M_AMD64) /* * @implemented @@ -63,6 +63,10 @@ RtlRaiseException(IN PEXCEPTION_RECORD ExceptionRecord) RtlRaiseStatus(Status); } +#endif + +#if !defined(_M_IX86) + #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable:4717) // RtlRaiseStatus is recursive by design From de180934266e9e3b3eedb91f7afaaccaafd73f50 Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Sat, 7 Nov 2009 16:39:44 +0000 Subject: [PATCH 076/286] Fix spider build. svn path=/branches/ros-amd64-bringup/; revision=44002 --- reactos/base/applications/games/spider/spider.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/reactos/base/applications/games/spider/spider.cpp b/reactos/base/applications/games/spider/spider.cpp index b89d3290b16..96188e0c518 100644 --- a/reactos/base/applications/games/spider/spider.cpp +++ b/reactos/base/applications/games/spider/spider.cpp @@ -50,7 +50,7 @@ void MakePath(TCHAR *szDest, UINT nDestLen, const TCHAR *szExt) lstrcpy(ptr + 1, szExt); } -BOOL CALLBACK DifficultyDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) +INT_PTR CALLBACK DifficultyDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { @@ -239,7 +239,7 @@ CardImageWndProc(HWND hwnd, } -BOOL CALLBACK CardBackDlgProc(HWND hDlg, +INT_PTR CALLBACK CardBackDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) From 624fb936cfc553427c534053ccf4062392bf51a1 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 7 Nov 2009 17:36:39 +0000 Subject: [PATCH 077/286] revert r43841 svn path=/branches/ros-amd64-bringup/; revision=44007 --- reactos/include/psdk/ntgdi.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/reactos/include/psdk/ntgdi.h b/reactos/include/psdk/ntgdi.h index 766f7409e5e..e8050217a23 100644 --- a/reactos/include/psdk/ntgdi.h +++ b/reactos/include/psdk/ntgdi.h @@ -2794,7 +2794,7 @@ NtGdiEnumFontChunk( IN HDC hdc, IN ULONG_PTR idEnum, IN ULONG cjEfdw, - OUT ULONG_PTR *pcjEfdw, + OUT ULONG *pcjEfdw, OUT PENUMFONTDATAW pefdw ); #endif @@ -2809,7 +2809,7 @@ NtGdiEnumFontOpen( IN ULONG cwchMax, IN OPTIONAL LPWSTR pwszFaceName, IN ULONG lfCharSet, - OUT ULONG_PTR *pulCount + OUT ULONG *pulCount ); W32KAPI From 4d631cc0ab72e3cf82f5561fbeb722b6a7fb86a5 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 7 Nov 2009 17:43:55 +0000 Subject: [PATCH 078/286] - Remove useless check in KeInvalidateAllCaches - implement KiDoubleFaultAbort svn path=/branches/ros-amd64-bringup/; revision=44008 --- reactos/ntoskrnl/ke/amd64/cpu.c | 3 --- reactos/ntoskrnl/ke/amd64/trap.S | 10 +++++++++- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/reactos/ntoskrnl/ke/amd64/cpu.c b/reactos/ntoskrnl/ke/amd64/cpu.c index ff18215c45b..41b4d5a2392 100644 --- a/reactos/ntoskrnl/ke/amd64/cpu.c +++ b/reactos/ntoskrnl/ke/amd64/cpu.c @@ -601,9 +601,6 @@ BOOLEAN NTAPI KeInvalidateAllCaches(VOID) { - /* Only supported on Pentium Pro and higher */ - if (KeI386CpuType < 6) return FALSE; - /* Invalidate all caches */ __wbinvd(); return TRUE; diff --git a/reactos/ntoskrnl/ke/amd64/trap.S b/reactos/ntoskrnl/ke/amd64/trap.S index 95c22d1243e..795843141ed 100644 --- a/reactos/ntoskrnl/ke/amd64/trap.S +++ b/reactos/ntoskrnl/ke/amd64/trap.S @@ -354,7 +354,15 @@ KiDebugTrapOrFaultKMode: push 0 .allocstack 0x8 - UNIMPLEMENTED KiDoubleFaultAbort + /* Bugcheck code UNEXPECTED_KERNEL_MODE_TRAP */ + mov rcx, 0x0000007F + + /* Specify double fault */ + mov rdx, 0x00000008 + mov r8, 0 + mov r9, 0 + + call _KeBugCheckEx jmp $ .endproc From 543b305ef42c1b04d6457e9d3f669494acc223ab Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 7 Nov 2009 18:11:35 +0000 Subject: [PATCH 079/286] Fix KiDoubleFaultAbort svn path=/branches/ros-amd64-bringup/; revision=44009 --- reactos/ntoskrnl/ke/amd64/trap.S | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/reactos/ntoskrnl/ke/amd64/trap.S b/reactos/ntoskrnl/ke/amd64/trap.S index 795843141ed..124b9553ad6 100644 --- a/reactos/ntoskrnl/ke/amd64/trap.S +++ b/reactos/ntoskrnl/ke/amd64/trap.S @@ -354,13 +354,18 @@ KiDebugTrapOrFaultKMode: push 0 .allocstack 0x8 + /* Reserve stack space for parameters */ + sub rsp, 0x28 + .allocstack 0x28 + /* Bugcheck code UNEXPECTED_KERNEL_MODE_TRAP */ mov rcx, 0x0000007F - /* Specify double fault */ + /* Set double fault parameters */ mov rdx, 0x00000008 mov r8, 0 mov r9, 0 + mov qword ptr [rsp + 0x20], 0 call _KeBugCheckEx From aa636e0ec393b03acc069b5473b773cb46e00ebe Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 7 Nov 2009 20:06:33 +0000 Subject: [PATCH 080/286] cleanup amd64 specific Mm stubs svn path=/branches/ros-amd64-bringup/; revision=44018 --- reactos/ntoskrnl/mm/amd64/page.c | 93 ++------------------------------ 1 file changed, 4 insertions(+), 89 deletions(-) diff --git a/reactos/ntoskrnl/mm/amd64/page.c b/reactos/ntoskrnl/mm/amd64/page.c index 526a378d561..a517f006fcc 100644 --- a/reactos/ntoskrnl/mm/amd64/page.c +++ b/reactos/ntoskrnl/mm/amd64/page.c @@ -4,7 +4,7 @@ * FILE: ntoskrnl/mm/amd64/page.c * PURPOSE: Low level memory managment manipulation * - * PROGRAMMERS: David Welch (welch@cwcom.net) + * PROGRAMMER: Timo Kreuzer (timo.kreuzer@reactos.org) */ /* INCLUDES ***************************************************************/ @@ -24,32 +24,11 @@ ULONG64 MmGlobalKernelPageDirectory[512]; +/* PRIVATE FUNCTIONS *******************************************************/ + + /* FUNCTIONS ***************************************************************/ -BOOLEAN MmUnmapPageTable(PULONG Pt); - -ULONG_PTR -NTAPI -MiFlushTlbIpiRoutine(ULONG_PTR Address) -{ - UNIMPLEMENTED; - return 0; -} - -VOID -MiFlushTlb(PULONG Pt, PVOID Address) -{ - UNIMPLEMENTED; -} - - -/* -static ULONG -ProtectToPTE(ULONG flProtect) -{ - return 0; -} -*/ NTSTATUS NTAPI Mmi386ReleaseMmInfo(PEPROCESS Process) @@ -77,26 +56,6 @@ MmCreateProcessAddressSpace(IN ULONG MinWs, return 0; } -VOID -NTAPI -MmDeletePageTable(PEPROCESS Process, PVOID Address) -{ - UNIMPLEMENTED; -} - -VOID -NTAPI -MmFreePageTable(PEPROCESS Process, PVOID Address) -{ - UNIMPLEMENTED; -} - -BOOLEAN MmUnmapPageTable(PULONG Pt) -{ - UNIMPLEMENTED; - return FALSE; -} - PFN_TYPE NTAPI MmGetPfnForProcess(PEPROCESS Process, @@ -136,13 +95,6 @@ MmDeletePageFileMapping(PEPROCESS Process, PVOID Address, UNIMPLEMENTED; } -BOOLEAN -Mmi386MakeKernelPageTableGlobal(PVOID PAddress) -{ - UNIMPLEMENTED; - return FALSE; -} - BOOLEAN NTAPI MmIsDirtyPage(PEPROCESS Process, PVOID Address) @@ -151,14 +103,6 @@ MmIsDirtyPage(PEPROCESS Process, PVOID Address) return FALSE; } -BOOLEAN -NTAPI -MmIsAccessedAndResetAccessPage(PEPROCESS Process, PVOID Address) -{ - UNIMPLEMENTED; - return 0; -} - VOID NTAPI MmSetCleanPage(PEPROCESS Process, PVOID Address) @@ -196,17 +140,6 @@ MmIsPageSwapEntry(PEPROCESS Process, PVOID Address) return 0; } -NTSTATUS -NTAPI -MmCreateVirtualMappingForKernel(PVOID Address, - ULONG flProtect, - PPFN_TYPE Pages, - ULONG PageCount) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - NTSTATUS NTAPI MmCreatePageFileMapping(PEPROCESS Process, @@ -257,9 +190,6 @@ MmSetPageProtect(PEPROCESS Process, PVOID Address, ULONG flProtect) UNIMPLEMENTED; } -/* - * @implemented - */ PHYSICAL_ADDRESS NTAPI MmGetPhysicalAddress(PVOID vaddr) @@ -269,14 +199,6 @@ MmGetPhysicalAddress(PVOID vaddr) return ret; } -PFN_TYPE -NTAPI -MmChangeHyperspaceMapping(PVOID Address, PFN_TYPE NewPage) -{ - UNIMPLEMENTED; - return 0; -} - VOID NTAPI MmUpdatePageDir(PEPROCESS Process, PVOID Address, ULONG Size) @@ -322,12 +244,5 @@ MmInitGlobalKernelPageDirectory(VOID) UNIMPLEMENTED; } -VOID -INIT_FUNCTION -NTAPI -MiInitPageDirectoryMap(VOID) -{ - UNIMPLEMENTED; -} /* EOF */ From a1908d10b4fe376d5ebc4036fdf74b562ca8060b Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sun, 8 Nov 2009 02:39:47 +0000 Subject: [PATCH 081/286] [MM] Implement amd64 versions for MiIsHyperspaceAddress, MiFlushTlb, MiGetPteForProcess, MiGetPteValueForProcess, MmGetPfnForProcess, MmGetPhysicalAddress, MmIsPagePresent, MmIsPageSwapEntry, MmIsDirtyPage, MmGetPageProtect, MmSetPageProtect, MmSetCleanPage, MmSetDirtyPage, MmDeleteVirtualMapping svn path=/branches/ros-amd64-bringup/; revision=44024 --- reactos/ntoskrnl/mm/amd64/page.c | 436 ++++++++++++++++++++++++------- 1 file changed, 344 insertions(+), 92 deletions(-) diff --git a/reactos/ntoskrnl/mm/amd64/page.c b/reactos/ntoskrnl/mm/amd64/page.c index a517f006fcc..29e76537158 100644 --- a/reactos/ntoskrnl/mm/amd64/page.c +++ b/reactos/ntoskrnl/mm/amd64/page.c @@ -1,5 +1,5 @@ /* - * COPYRIGHT: See COPYING in the top level directory + * COPYRIGHT: GPL, See COPYING in the top level directory * PROJECT: ReactOS kernel * FILE: ntoskrnl/mm/amd64/page.c * PURPOSE: Low level memory managment manipulation @@ -26,9 +26,292 @@ ULONG64 MmGlobalKernelPageDirectory[512]; /* PRIVATE FUNCTIONS *******************************************************/ +BOOLEAN +FORCEINLINE +MiIsHyperspaceAddress(PVOID Address) +{ + return ((ULONG64)Address >= MI_HYPER_SPACE_START && + (ULONG64)Address <= MI_HYPER_SPACE_END); +} + +VOID +MiFlushTlb(PMMPTE Pte, PVOID Address) +{ + if (MiIsHyperspaceAddress(Pte)) + { + MmDeleteHyperspaceMapping((PVOID)PAGE_ROUND_DOWN(Pte)); + } + else + { + __invlpg(Address); + } +} + +static +PMMPTE +MiGetPteForProcess( + PEPROCESS Process, + PVOID Address, + BOOLEAN Create) +{ + PMMPTE Pte; + + /* Check if we need hypersapce mapping */ + if (Address < MmSystemRangeStart && + Process && Process != PsGetCurrentProcess()) + { + UNIMPLEMENTED; + return NULL; + } + else if (Create) + { + /* Get the PXE */ + Pte = MiAddressToPxe(Address); + if (!Pte->u.Hard.Valid) + InterlockedBitTestAndSet64(&Pte->u.Long, 0); + + /* Get the PPE */ + Pte = MiAddressToPpe(Address); + if (!Pte->u.Hard.Valid) + InterlockedBitTestAndSet64(&Pte->u.Long, 0); + + /* Get the PDE */ + Pte = MiAddressToPde(Address); + if (!Pte->u.Hard.Valid) + InterlockedBitTestAndSet64(&Pte->u.Long, 0); + + /* Get the PTE */ + Pte = MiAddressToPte(Address); + + return Pte; + } + else + { + /* Get the PXE */ + Pte = MiAddressToPxe(Address); + if (!Pte->u.Hard.Valid) + return NULL; + + /* Get the PPE */ + Pte = MiAddressToPpe(Address); + if (Pte->u.Hard.Valid) + return NULL; + + /* Get the PDE */ + Pte = MiAddressToPde(Address); + if (Pte->u.Hard.Valid) + return NULL; + + /* Get the PTE */ + Pte = MiAddressToPte(Address); + + return Pte; + } + + return 0; +} + +static +ULONG64 +MiGetPteValueForProcess( + PEPROCESS Process, + PVOID Address) +{ + PMMPTE Pte; + ULONG64 PteValue; + + Pte = MiGetPteForProcess(Process, Address, FALSE); + PteValue = Pte ? Pte->u.Long : 0; + + if (MiIsHyperspaceAddress(Pte)) + MmDeleteHyperspaceMapping((PVOID)PAGE_ROUND_DOWN(Pte)); + + return PteValue; +} + /* FUNCTIONS ***************************************************************/ +PFN_TYPE +NTAPI +MmGetPfnForProcess(PEPROCESS Process, + PVOID Address) +{ + MMPTE Pte; + Pte.u.Long = MiGetPteValueForProcess(Process, Address); + return Pte.u.Hard.Valid ? Pte.u.Hard.PageFrameNumber : 0; +} + +PHYSICAL_ADDRESS +NTAPI +MmGetPhysicalAddress(PVOID Address) +{ + PHYSICAL_ADDRESS p; + MMPTE Pte; + + Pte.u.Long = MiGetPteValueForProcess(NULL, Address); + if (Pte.u.Hard.Valid) + { + p.QuadPart = Pte.u.Hard.PageFrameNumber * PAGE_SIZE; + p.u.LowPart |= (ULONG_PTR)Address & (PAGE_SIZE - 1); + } + else + { + p.QuadPart = 0; + } + + return p; +} + +BOOLEAN +NTAPI +MmIsPagePresent(PEPROCESS Process, PVOID Address) +{ + MMPTE Pte; + Pte.u.Long = MiGetPteValueForProcess(Process, Address); + return Pte.u.Hard.Valid; +} + +BOOLEAN +NTAPI +MmIsPageSwapEntry(PEPROCESS Process, PVOID Address) +{ + MMPTE Pte; + Pte.u.Long = MiGetPteValueForProcess(Process, Address); + return Pte.u.Hard.Valid && Pte.u.Soft.Transition; +} + +BOOLEAN +NTAPI +MmIsDirtyPage(PEPROCESS Process, PVOID Address) +{ + MMPTE Pte; + Pte.u.Long = MiGetPteValueForProcess(Process, Address); + return Pte.u.Hard.Valid && Pte.u.Hard.Dirty; +} + +ULONG +NTAPI +MmGetPageProtect(PEPROCESS Process, PVOID Address) +{ + MMPTE Pte; + ULONG Protect; + + Pte.u.Long = MiGetPteValueForProcess(Process, Address); + + if (!Pte.u.Flush.Valid) + { + Protect = PAGE_NOACCESS; + } + else if (Pte.u.Flush.NoExecute) + { + if (Pte.u.Flush.CopyOnWrite) + Protect = PAGE_WRITECOPY; + else if (Pte.u.Flush.Write) + Protect = PAGE_READWRITE; + else + Protect = PAGE_READONLY; + } + else + { + if (Pte.u.Flush.CopyOnWrite) + Protect = PAGE_EXECUTE_WRITECOPY; + else if (Pte.u.Flush.Write) + Protect = PAGE_EXECUTE_READWRITE; + else + Protect = PAGE_EXECUTE_READ; + } + + if (Pte.u.Flush.CacheDisable) + Protect |= PAGE_NOCACHE; + + if (Pte.u.Flush.WriteThrough) + Protect |= PAGE_WRITETHROUGH; + + // PAGE_GUARD ? + + return Protect; +} + +#define PAGE_EXECUTE_ANY (PAGE_EXECUTE|PAGE_EXECUTE_READ|PAGE_EXECUTE_READWRITE|PAGE_EXECUTE_WRITECOPY) + +VOID +NTAPI +MmSetPageProtect(PEPROCESS Process, PVOID Address, ULONG flProtect) +{ + PMMPTE Pte; + MMPTE NewPte; + + if (!(flProtect & PAGE_EXECUTE_ANY)) + NewPte.u.Flush.NoExecute = 1; + + if (flProtect & (PAGE_EXECUTE_WRITECOPY|PAGE_WRITECOPY)) + { + NewPte.u.Flush.Write = 1; + NewPte.u.Flush.CopyOnWrite = 1; + } + + if (flProtect & (PAGE_EXECUTE_READWRITE|PAGE_READWRITE)) + NewPte.u.Flush.Write = 1; + + if (flProtect & PAGE_NOCACHE) + NewPte.u.Flush.CacheDisable = 1; + + if (flProtect & PAGE_WRITETHROUGH) + NewPte.u.Flush.WriteThrough = 1; + + Pte = MiGetPteForProcess(Process, Address, FALSE); + + InterlockedExchange64(&Pte->u.Long, NewPte.u.Long); + + MiFlushTlb(Pte, Address); +} + +VOID +NTAPI +MmSetCleanPage(PEPROCESS Process, PVOID Address) +{ + PMMPTE Pte; + + Pte = MiGetPteForProcess(Process, Address, FALSE); + if (!Pte) + { + KeBugCheckEx(MEMORY_MANAGEMENT, 0x1234, (ULONG64)Address, 0, 0); + } + + /* Ckear the dirty bit */ + if (InterlockedBitTestAndReset64((PVOID)Pte, 6)) + { + if (!MiIsHyperspaceAddress(Pte)) + __invlpg(Address); + } + + MiFlushTlb(Pte, Address); +} + +VOID +NTAPI +MmSetDirtyPage(PEPROCESS Process, PVOID Address) +{ + PMMPTE Pte; + + Pte = MiGetPteForProcess(Process, Address, FALSE); + if (!Pte) + { + KeBugCheckEx(MEMORY_MANAGEMENT, 0x1234, (ULONG64)Address, 0, 0); + } + + /* Ckear the dirty bit */ + if (InterlockedBitTestAndSet64((PVOID)Pte, 6)) + { + if (!MiIsHyperspaceAddress(Pte)) + __invlpg(Address); + } + + MiFlushTlb(Pte, Address); +} + + NTSTATUS NTAPI Mmi386ReleaseMmInfo(PEPROCESS Process) @@ -37,34 +320,6 @@ Mmi386ReleaseMmInfo(PEPROCESS Process) return STATUS_UNSUCCESSFUL; } -NTSTATUS -NTAPI -MmInitializeHandBuiltProcess(IN PEPROCESS Process, - IN PULONG_PTR DirectoryTableBase) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; -} - -BOOLEAN -NTAPI -MmCreateProcessAddressSpace(IN ULONG MinWs, - IN PEPROCESS Process, - IN PULONG_PTR DirectoryTableBase) -{ - UNIMPLEMENTED; - return 0; -} - -PFN_TYPE -NTAPI -MmGetPfnForProcess(PEPROCESS Process, - PVOID Address) -{ - UNIMPLEMENTED; - return 0; -} - VOID NTAPI MmDisableVirtualMapping(PEPROCESS Process, PVOID Address, BOOLEAN* WasDirty, PPFN_TYPE Page) @@ -81,10 +336,48 @@ MmRawDeleteVirtualMapping(PVOID Address) VOID NTAPI -MmDeleteVirtualMapping(PEPROCESS Process, PVOID Address, BOOLEAN FreePage, - BOOLEAN* WasDirty, PPFN_TYPE Page) +MmDeleteVirtualMapping( + PEPROCESS Process, + PVOID Address, + BOOLEAN FreePage, + BOOLEAN* WasDirty, + PPFN_TYPE Page) { - UNIMPLEMENTED; + PFN_NUMBER Pfn; + PMMPTE Pte; + MMPTE OldPte; + + Pte = MiGetPteForProcess(Process, Address, FALSE); + + if (Pte) + { + /* Atomically set the entry to zero and get the old value. */ + OldPte.u.Long = InterlockedExchange64(&Pte->u.Long, 0); + + if (OldPte.u.Hard.Valid) + { + Pfn = OldPte.u.Hard.PageFrameNumber; + + if (FreePage) + MmReleasePageMemoryConsumer(MC_NPPOOL, Pfn); + } + else + Pfn = 0; + } + else + { + OldPte.u.Long = 0; + Pfn = 0; + } + + /* Return information to the caller */ + if (WasDirty) + *WasDirty = OldPte.u.Hard.Dirty;; + + if (Page) + *Page = Pfn; + + MiFlushTlb(Pte, Address); } VOID @@ -95,27 +388,6 @@ MmDeletePageFileMapping(PEPROCESS Process, PVOID Address, UNIMPLEMENTED; } -BOOLEAN -NTAPI -MmIsDirtyPage(PEPROCESS Process, PVOID Address) -{ - UNIMPLEMENTED; - return FALSE; -} - -VOID -NTAPI -MmSetCleanPage(PEPROCESS Process, PVOID Address) -{ - UNIMPLEMENTED; -} - -VOID -NTAPI -MmSetDirtyPage(PEPROCESS Process, PVOID Address) -{ - UNIMPLEMENTED; -} VOID NTAPI @@ -124,21 +396,6 @@ MmEnableVirtualMapping(PEPROCESS Process, PVOID Address) UNIMPLEMENTED; } -BOOLEAN -NTAPI -MmIsPagePresent(PEPROCESS Process, PVOID Address) -{ - UNIMPLEMENTED; - return 0; -} - -BOOLEAN -NTAPI -MmIsPageSwapEntry(PEPROCESS Process, PVOID Address) -{ - UNIMPLEMENTED; - return 0; -} NTSTATUS NTAPI @@ -175,30 +432,6 @@ MmCreateVirtualMapping(PEPROCESS Process, return STATUS_UNSUCCESSFUL; } -ULONG -NTAPI -MmGetPageProtect(PEPROCESS Process, PVOID Address) -{ - UNIMPLEMENTED; - return 0; -} - -VOID -NTAPI -MmSetPageProtect(PEPROCESS Process, PVOID Address, ULONG flProtect) -{ - UNIMPLEMENTED; -} - -PHYSICAL_ADDRESS -NTAPI -MmGetPhysicalAddress(PVOID vaddr) -{ - PHYSICAL_ADDRESS ret = {{0}}; - UNIMPLEMENTED; - return ret; -} - VOID NTAPI MmUpdatePageDir(PEPROCESS Process, PVOID Address, ULONG Size) @@ -244,5 +477,24 @@ MmInitGlobalKernelPageDirectory(VOID) UNIMPLEMENTED; } +NTSTATUS +NTAPI +MmInitializeHandBuiltProcess(IN PEPROCESS Process, + IN PULONG_PTR DirectoryTableBase) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + +BOOLEAN +NTAPI +MmCreateProcessAddressSpace(IN ULONG MinWs, + IN PEPROCESS Process, + IN PULONG_PTR DirectoryTableBase) +{ + UNIMPLEMENTED; + return 0; +} + /* EOF */ From a97697982bd3fed2a4e6e4e70ceaff93581e5699 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sun, 8 Nov 2009 03:49:08 +0000 Subject: [PATCH 082/286] [MM] - implement MmInitGlobalKernelPageDirectory, MmInitializeHandBuiltProcess - fix MmUpdatePageDir svn path=/branches/ros-amd64-bringup/; revision=44025 --- reactos/ntoskrnl/include/internal/amd64/mm.h | 3 +- reactos/ntoskrnl/mm/amd64/page.c | 68 ++++++++++++++++---- 2 files changed, 59 insertions(+), 12 deletions(-) diff --git a/reactos/ntoskrnl/include/internal/amd64/mm.h b/reactos/ntoskrnl/include/internal/amd64/mm.h index 5776d3c83c9..b99ec6ccc96 100644 --- a/reactos/ntoskrnl/include/internal/amd64/mm.h +++ b/reactos/ntoskrnl/include/internal/amd64/mm.h @@ -17,7 +17,8 @@ MmGetPageDirectory(VOID) #define PAGE_MASK(x) ((x)&(~0xfff)) #define PAE_PAGE_MASK(x) ((x)&(~0xfffLL)) -#define HYPER_SPACE 0xFFFFF70000000000ULL +#define MI_HYPER_SPACE_START 0xFFFFF70000000000ULL +#define MI_HYPER_SPACE_END 0xFFFFF77FFFFFFFFFULL /* Base addresses of PTE and PDE */ //#define PAGETABLE_MAP PTE_BASE diff --git a/reactos/ntoskrnl/mm/amd64/page.c b/reactos/ntoskrnl/mm/amd64/page.c index 29e76537158..47bc5054121 100644 --- a/reactos/ntoskrnl/mm/amd64/page.c +++ b/reactos/ntoskrnl/mm/amd64/page.c @@ -18,10 +18,12 @@ #pragma alloc_text(INIT, MiInitPageDirectoryMap) #endif +extern MMPTE HyperTemplatePte; /* GLOBALS *****************************************************************/ ULONG64 MmGlobalKernelPageDirectory[512]; +ULONG Ke386GlobalPagesEnabled = 0; /* PRIVATE FUNCTIONS *******************************************************/ @@ -437,7 +439,7 @@ NTAPI MmUpdatePageDir(PEPROCESS Process, PVOID Address, ULONG Size) { ULONG StartIndex, EndIndex, Index; - PULONG64 Pde; + PMMPTE Pte; /* Sanity check */ if (Address < MmSystemRangeStart) @@ -446,27 +448,32 @@ MmUpdatePageDir(PEPROCESS Process, PVOID Address, ULONG Size) } /* Get pointer to the page directory to update */ - if (Process != NULL && Process != PsGetCurrentProcess()) + if (Process && Process != PsGetCurrentProcess()) { -// Pde = MmCreateHyperspaceMapping(PTE_TO_PFN(Process->Pcb.DirectoryTableBase[0])); +// Pte = MmCreateHyperspaceMapping(PTE_TO_PFN(Process->Pcb.DirectoryTableBase[0])); } else { - Pde = (PULONG64)PXE_BASE; + Pte = (PMMPTE)PXE_BASE; } /* Update PML4 entries */ StartIndex = VAtoPXI(Address); - EndIndex = VAtoPXI((ULONG64)Address + Size); + EndIndex = VAtoPXI((ULONG64)Address + Size - 1); for (Index = StartIndex; Index <= EndIndex; Index++) { if (Index != VAtoPXI(PXE_BASE)) { - (void)InterlockedCompareExchangePointer((PVOID*)&Pde[Index], - (PVOID)MmGlobalKernelPageDirectory[Index], - 0); + InterlockedCompareExchange64(&Pte[Index].u.Long, + MmGlobalKernelPageDirectory[Index], + 0); + if (!MiIsHyperspaceAddress(Pte)) + __invlpg((PVOID)((ULONG64)Index * PAGE_SIZE)); } } + + if (MiIsHyperspaceAddress(Pte)) + MmDeleteHyperspaceMapping((PVOID)PAGE_ROUND_DOWN(Pte)); } VOID @@ -474,7 +481,35 @@ INIT_FUNCTION NTAPI MmInitGlobalKernelPageDirectory(VOID) { - UNIMPLEMENTED; + PULONG64 CurrentPageDirectory = (PULONG64)PXE_BASE; + MMPTE Pte; + ULONG i; + + /* Setup template pte */ + HyperTemplatePte.u.Long = 0; + HyperTemplatePte.u.Hard.Valid = 1; + HyperTemplatePte.u.Hard.Write = 1; + HyperTemplatePte.u.Hard.Dirty = 1; + HyperTemplatePte.u.Hard.Accessed = 1; + if (Ke386GlobalPagesEnabled) + HyperTemplatePte.u.Hard.Global = 1; + + for (i = VAtoPXI(MmSystemRangeStart); i < 512; i++) + { + if ((i < VAtoPXI(PTE_BASE) || i > VAtoPXI(PTE_TOP)) && + (i < VAtoPXI(MI_HYPER_SPACE_START) || i > VAtoPXI(MI_HYPER_SPACE_END)) && + MmGlobalKernelPageDirectory[i] == 0 && + CurrentPageDirectory[i] != 0) + { + Pte.u.Long = CurrentPageDirectory[i]; + if (Ke386GlobalPagesEnabled) + { + Pte.u.Hard.Global = 1; + CurrentPageDirectory[i] = Pte.u.Hard.Global; + } + MmGlobalKernelPageDirectory[i] = Pte.u.Hard.Global; + } + } } NTSTATUS @@ -482,8 +517,19 @@ NTAPI MmInitializeHandBuiltProcess(IN PEPROCESS Process, IN PULONG_PTR DirectoryTableBase) { - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; + /* Share the directory base with the idle process */ + DirectoryTableBase[0] = PsGetCurrentProcess()->Pcb.DirectoryTableBase[0]; + DirectoryTableBase[1] = PsGetCurrentProcess()->Pcb.DirectoryTableBase[1]; + + /* Initialize the Addresss Space */ + KeInitializeGuardedMutex(&Process->AddressCreationLock); + Process->Vm.WorkingSetExpansionLinks.Flink = NULL; + ASSERT(Process->VadRoot.NumberGenericTableElements == 0); + Process->VadRoot.BalancedRoot.u1.Parent = &Process->VadRoot.BalancedRoot; + + /* The process now has an address space */ + Process->HasAddressSpace = TRUE; + return STATUS_SUCCESS; } BOOLEAN From 256a3cb5cc7561de5cd71c124bcfa049f937e8e4 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 9 Nov 2009 06:29:46 +0000 Subject: [PATCH 083/286] - Move the hack for MmUpdatePageDir before KeInitializeThread where it belongs. svn path=/branches/ros-amd64-bringup/; revision=44034 --- reactos/ntoskrnl/ke/amd64/kiinit.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/reactos/ntoskrnl/ke/amd64/kiinit.c b/reactos/ntoskrnl/ke/amd64/kiinit.c index 3867cd36b2a..6c4c67432c8 100644 --- a/reactos/ntoskrnl/ke/amd64/kiinit.c +++ b/reactos/ntoskrnl/ke/amd64/kiinit.c @@ -529,6 +529,9 @@ KiInitializeKernel(IN PKPROCESS InitProcess, DPRINT1("SMP Boot support not yet present\n"); } + /* HACK for MmUpdatePageDir */ + ((PETHREAD)InitThread)->ThreadsProcess = (PEPROCESS)InitProcess; + /* Setup the Idle Thread */ KeInitializeThread(InitProcess, InitThread, @@ -546,9 +549,6 @@ KiInitializeKernel(IN PKPROCESS InitProcess, InitThread->WaitIrql = DISPATCH_LEVEL; InitProcess->ActiveProcessors = 1 << Number; - /* HACK for MmUpdatePageDir */ - ((PETHREAD)InitThread)->ThreadsProcess = (PEPROCESS)InitProcess; - /* Set basic CPU Features that user mode can read */ SharedUserData->ProcessorFeatures[PF_MMX_INSTRUCTIONS_AVAILABLE] = (KeFeatureBits & KF_MMX) ? TRUE: FALSE; @@ -621,7 +621,7 @@ NTAPI KiSystemStartup(IN ULONG_PTR Dummy, IN PROS_LOADER_PARAMETER_BLOCK LoaderBlock) { - FrLdrDbgPrint = ((PLOADER_PARAMETER_BLOCK)Dummy)->u.Amd64.DbgPrint; + FrLdrDbgPrint = ((PLOADER_PARAMETER_BLOCK)Dummy)->u.I386.CommonDataArea; FrLdrDbgPrint("Hello from KiSystemStartup!!!\n"); KiSystemStartupReal((PLOADER_PARAMETER_BLOCK)Dummy); From 2e7b3fde504e705e448466dcccc3b8cb1a199320 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 9 Nov 2009 06:46:31 +0000 Subject: [PATCH 084/286] [MM] - Halfplement MmArmInitSystem, it's broken atm - Update some variable drfinitions from ULONG to ULONG_PTR - Add some amd64 specific constants svn path=/branches/ros-amd64-bringup/; revision=44035 --- reactos/ntoskrnl/mm/ARM3/miarm.h | 56 +++- reactos/ntoskrnl/mm/amd64/init.c | 456 +++++++++++++++++++++++++++++-- 2 files changed, 481 insertions(+), 31 deletions(-) diff --git a/reactos/ntoskrnl/mm/ARM3/miarm.h b/reactos/ntoskrnl/mm/ARM3/miarm.h index 96e62436bae..1f8968da8c4 100644 --- a/reactos/ntoskrnl/mm/ARM3/miarm.h +++ b/reactos/ntoskrnl/mm/ARM3/miarm.h @@ -6,6 +6,44 @@ * PROGRAMMERS: ReactOS Portable Systems Group */ +#ifdef _M_AMD64 + +#define MI_MIN_PAGES_FOR_NONPAGED_POOL_TUNING ((255*1024*1024) >> PAGE_SHIFT) +#define MI_MIN_PAGES_FOR_SYSPTE_TUNING ((19*1024*1024) >> PAGE_SHIFT) +#define MI_MIN_PAGES_FOR_SYSPTE_BOOST ((32*1024*1024) >> PAGE_SHIFT) +#define MI_MAX_INIT_NONPAGED_POOL_SIZE (128 * 1024 * 1024) +#define MI_MAX_NONPAGED_POOL_SIZE (128 * 1024 * 1024) +#define MI_MAX_FREE_PAGE_LISTS 4 + +#define MI_MIN_INIT_PAGED_POOLSIZE (32 * 1024 * 1024) + +#define MI_SESSION_VIEW_SIZE (20 * 1024 * 1024) +#define MI_SESSION_POOL_SIZE (16 * 1024 * 1024) +#define MI_SESSION_IMAGE_SIZE (8 * 1024 * 1024) +#define MI_SESSION_WORKING_SET_SIZE (4 * 1024 * 1024) +#define MI_SESSION_SIZE (MI_SESSION_VIEW_SIZE + \ + MI_SESSION_POOL_SIZE + \ + MI_SESSION_IMAGE_SIZE + \ + MI_SESSION_WORKING_SET_SIZE) + +#define MI_SYSTEM_VIEW_SIZE (16 * 1024 * 1024) + +#define MI_PAGED_POOL_START (PVOID)0xFFFFFA8000000000ULL +#define MI_NONPAGED_POOL_END (PVOID)0xFFFFFAE000000000ULL + +#define MM_HIGHEST_VAD_ADDRESS \ + (PVOID)((ULONG_PTR)MM_HIGHEST_USER_ADDRESS - (16 * PAGE_SIZE)) + + +// +// FIXFIX: These should go in ex.h after the pool merge +// +#define POOL_LISTS_PER_PAGE (PAGE_SIZE / sizeof(LIST_ENTRY)) +#define BASE_POOL_TYPE_MASK 1 +#define POOL_MAX_ALLOC (PAGE_SIZE - (sizeof(POOL_HEADER) + sizeof(LIST_ENTRY))) + +#else + #define MI_MIN_PAGES_FOR_NONPAGED_POOL_TUNING ((255*1024*1024) >> PAGE_SHIFT) #define MI_MIN_PAGES_FOR_SYSPTE_TUNING ((19*1024*1024) >> PAGE_SHIFT) #define MI_MIN_PAGES_FOR_SYSPTE_BOOST ((32*1024*1024) >> PAGE_SHIFT) @@ -40,6 +78,8 @@ #define BASE_POOL_TYPE_MASK 1 #define POOL_MAX_ALLOC (PAGE_SIZE - (sizeof(POOL_HEADER) + sizeof(LIST_ENTRY))) +#endif + typedef struct _POOL_DESCRIPTOR { POOL_TYPE PoolType; @@ -123,27 +163,27 @@ typedef struct _PHYSICAL_MEMORY_DESCRIPTOR extern MMPTE HyperTemplatePte; -extern ULONG MmSizeOfNonPagedPoolInBytes; -extern ULONG MmMaximumNonPagedPoolInBytes; +extern ULONG_PTR MmSizeOfNonPagedPoolInBytes; +extern ULONG_PTR MmMaximumNonPagedPoolInBytes; extern PVOID MmNonPagedSystemStart; extern PVOID MmNonPagedPoolStart; extern PVOID MmNonPagedPoolExpansionStart; extern PVOID MmNonPagedPoolEnd; -extern ULONG MmSizeOfPagedPoolInBytes; +extern ULONG_PTR MmSizeOfPagedPoolInBytes; extern PVOID MmPagedPoolStart; extern PVOID MmPagedPoolEnd; extern PVOID MmSessionBase; -extern ULONG MmSessionSize; +extern ULONG_PTR MmSessionSize; extern PMMPTE MmFirstReservedMappingPte, MmLastReservedMappingPte; extern PMMPTE MiFirstReservedZeroingPte; extern MI_PFN_CACHE_ATTRIBUTE MiPlatformCacheAttributes[2][MmMaximumCacheType]; extern PPHYSICAL_MEMORY_DESCRIPTOR MmPhysicalMemoryBlock; -extern ULONG MmBootImageSize; +extern ULONG_PTR MmBootImageSize; extern PMMPTE MmSystemPtesStart[MaximumPtePoolTypes]; extern PMMPTE MmSystemPtesEnd[MaximumPtePoolTypes]; extern PMEMORY_ALLOCATION_DESCRIPTOR MxFreeDescriptor; extern MEMORY_ALLOCATION_DESCRIPTOR MxOldFreeDescriptor; -extern ULONG MxPfnAllocation; +extern ULONG_PTR MxPfnAllocation; extern MM_PAGED_POOL_INFO MmPagedPoolInfo; extern RTL_BITMAP MiPfnBitMap; extern KGUARDED_MUTEX MmPagedPoolMutex; @@ -151,10 +191,10 @@ extern PVOID MmPagedPoolStart; extern PVOID MmPagedPoolEnd; extern PVOID MmNonPagedSystemStart; extern PVOID MiSystemViewStart; -extern ULONG MmSystemViewSize; +extern ULONG_PTR MmSystemViewSize; extern PVOID MmSessionBase; extern PVOID MiSessionSpaceEnd; -extern ULONG MmSizeOfPagedPoolInBytes; +extern ULONG_PTR MmSizeOfPagedPoolInBytes; extern PMMPTE MmSystemPagePtes; NTSTATUS diff --git a/reactos/ntoskrnl/mm/amd64/init.c b/reactos/ntoskrnl/mm/amd64/init.c index 8f190154999..92bcf475a33 100644 --- a/reactos/ntoskrnl/mm/amd64/init.c +++ b/reactos/ntoskrnl/mm/amd64/init.c @@ -15,54 +15,464 @@ #include "../ARM3/miarm.h" +#define MI_SESSION_SPACE_END (PVOID)0xFFFFF98000000000ULL +#define MI_SESSION_VIEW_END 0xFFFFF97FFF000000ULL +#define MI_NON_PAGED_SYSTEM_START_MIN 0x0FFFFFAA000000000ULL /* GLOBALS *****************************************************************/ -ULONG MmMaximumNonPagedPoolPercent; -ULONG MmSizeOfNonPagedPoolInBytes; -ULONG MmMaximumNonPagedPoolInBytes; +ULONG64 MmUserProbeAddress = 0x7FFFFFF0000ULL; +PVOID MmHighestUserAddress = (PVOID)0x7FFFFFEFFFFULL; +PVOID MmSystemRangeStart = (PVOID)KSEG0_BASE; // FFFF080000000000 -PVOID MiSessionSpaceEnd; // 0xC0000000 +/* Size of session view, pool, and image */ +ULONG64 MmSessionSize = MI_SESSION_SIZE; +ULONG64 MmSessionViewSize = MI_SESSION_VIEW_SIZE; +ULONG64 MmSessionPoolSize = MI_SESSION_POOL_SIZE; +ULONG64 MmSessionImageSize = MI_SESSION_IMAGE_SIZE; -ULONG64 MmUserProbeAddress; -PVOID MmHighestUserAddress; -PVOID MmSystemRangeStart; +/* Session space addresses */ +PVOID MiSessionSpaceEnd = MI_SESSION_SPACE_END; // FFFFF98000000000 +PVOID MiSessionImageEnd; // FFFFF98000000000 = MiSessionSpaceEnd +PVOID MiSessionImageStart; // ?FFFFF97FFF000000 = MiSessionImageEnd - MmSessionImageSize +PVOID MiSessionViewEnd; // FFFFF97FFF000000 +PVOID MiSessionViewStart; // = MiSessionViewEnd - MmSessionViewSize +PVOID MiSessionPoolEnd; // = MiSessionViewStart +PVOID MiSessionPoolStart; // FFFFF90000000000 = MiSessionPoolEnd - MmSessionPoolSize +PVOID MmSessionBase; // FFFFF90000000000 = MiSessionPoolStart -ULONG MmNumberOfPhysicalPages, MmHighestPhysicalPage, MmLowestPhysicalPage = -1; - -ULONG MmBootImageSize; - -PPHYSICAL_MEMORY_DESCRIPTOR MmPhysicalMemoryBlock; - -RTL_BITMAP MiPfnBitMap; +/* System view */ +ULONG64 MmSystemViewSize = MI_SYSTEM_VIEW_SIZE; +PVOID MiSystemViewStart; +ULONG64 MmMinimumNonPagedPoolSize = 256 * 1024; +ULONG64 MmSizeOfNonPagedPoolInBytes; +ULONG64 MmMaximumNonPagedPoolInBytes; +ULONG64 MmMaximumNonPagedPoolPercent; +ULONG64 MmMinAdditionNonPagedPoolPerMb = 32 * 1024; +ULONG64 MmMaxAdditionNonPagedPoolPerMb = 400 * 1024; +ULONG64 MmDefaultMaximumNonPagedPool = 1024 * 1024; PVOID MmNonPagedSystemStart; PVOID MmNonPagedPoolStart; PVOID MmNonPagedPoolExpansionStart; PVOID MmNonPagedPoolEnd = MI_NONPAGED_POOL_END; +ULONG64 MmSizeOfPagedPoolInBytes = MI_MIN_INIT_PAGED_POOLSIZE; PVOID MmPagedPoolStart = MI_PAGED_POOL_START; PVOID MmPagedPoolEnd; -ULONG MmSizeOfPagedPoolInBytes = MI_MIN_INIT_PAGED_POOLSIZE; -PVOID MmSessionBase; -ULONG MmSessionSize; +ULONG64 MmBootImageSize; +PPHYSICAL_MEMORY_DESCRIPTOR MmPhysicalMemoryBlock; +RTL_BITMAP MiPfnBitMap; +ULONG MmNumberOfPhysicalPages, MmHighestPhysicalPage, MmLowestPhysicalPage = -1; +ULONG64 MmNumberOfSystemPtes; +PMMPTE MmSystemPagePtes; +ULONG64 MxPfnAllocation; + +/////////////////////////////////////////////// PMEMORY_ALLOCATION_DESCRIPTOR MxFreeDescriptor; MEMORY_ALLOCATION_DESCRIPTOR MxOldFreeDescriptor; -PMMPTE MmSystemPagePtes; -ULONG MxPfnAllocation; -PVOID MiSystemViewStart; -ULONG MmSystemViewSize; +PFN_NUMBER MxFreePageBase; +ULONG64 MxFreePageCount = 0; + +VOID +NTAPI +MxSetupFreePageList(IN PLOADER_PARAMETER_BLOCK LoaderBlock) +{ + PMEMORY_ALLOCATION_DESCRIPTOR MdBlock; + PLIST_ENTRY ListEntry; + + /* Loop the memory descriptors */ + for (ListEntry = LoaderBlock->MemoryDescriptorListHead.Flink; + ListEntry != &LoaderBlock->MemoryDescriptorListHead; + ListEntry = ListEntry->Flink) + { + /* Get the memory block */ + MdBlock = CONTAINING_RECORD(ListEntry, + MEMORY_ALLOCATION_DESCRIPTOR, + ListEntry); + + /* Check if this is free memory */ + if ((MdBlock->MemoryType == LoaderFree) || + (MdBlock->MemoryType == LoaderLoadedProgram) || + (MdBlock->MemoryType == LoaderFirmwareTemporary) || + (MdBlock->MemoryType == LoaderOsloaderStack)) + { + /* Check if this is the largest memory descriptor */ + if (MdBlock->PageCount > MxFreePageCount) + { + /* For now, it is */ + MxFreeDescriptor = MdBlock; + MxFreePageBase = MdBlock->BasePage; + MxFreePageCount = MdBlock->PageCount; + } + } + } +} + +PFN_NUMBER +NTAPI +MxGetNextPage(IN PFN_NUMBER PageCount) +{ + PFN_NUMBER Pfn; + + /* Make sure we have enough pages */ + if (PageCount > MxFreePageCount) + { + /* Crash the system */ + KeBugCheckEx(INSTALL_MORE_MEMORY, + MmNumberOfPhysicalPages, + MxFreeDescriptor->PageCount, + MxOldFreeDescriptor.PageCount, + PageCount); + } + + /* Use our lowest usable free pages */ + Pfn = MxFreePageBase; + MxFreePageBase += PageCount; + MxFreePageCount -= PageCount; + return Pfn; +} + +VOID +MxMapPage(PVOID Address) +{ + PMMPTE Pte; + MMPTE TmpPte; + + TmpPte.u.Long = 0; + TmpPte.u.Hard.Valid = 1; + + /* Get a pointer to the PXE */ + Pte = MiAddressToPxe(Address); + if (!Pte->u.Hard.Valid) + { + /* It's not valid, map it! */ + TmpPte.u.Hard.PageFrameNumber = MxGetNextPage(1); + *Pte = TmpPte; + } + + /* Get a pointer to the PPE */ + Pte = MiAddressToPpe(Address); + if (!Pte->u.Hard.Valid) + { + /* It's not valid, map it! */ + TmpPte.u.Hard.PageFrameNumber = MxGetNextPage(1); + *Pte = TmpPte; + } + + /* Get a pointer to the PDE */ + Pte = MiAddressToPde(Address); + if (!Pte->u.Hard.Valid) + { + /* It's not valid, map it! */ + TmpPte.u.Hard.PageFrameNumber = MxGetNextPage(1); + *Pte = TmpPte; + } + + /* Get a pointer to the PTE */ + Pte = MiAddressToPte(Address); + if (!Pte->u.Hard.Valid) + { + /* It's not valid, map it! */ + TmpPte.u.Hard.PageFrameNumber = MxGetNextPage(1); + *Pte = TmpPte; + } +} + +VOID +MxMapPageRange(PVOID Address, ULONG64 PageCount) +{ + ULONG64 i; + + for (i = 0; i < PageCount; i++) + { + MxMapPage(Address); + Address = (PVOID)((ULONG64)Address + PAGE_SIZE); + } +} + + +VOID +NTAPI +MiArmIninializeMemoryLayout(IN PLOADER_PARAMETER_BLOCK LoaderBlock) +{ + /* Get the size of the boot loader's image allocations */ + MmBootImageSize = KeLoaderBlock->Extension->LoaderPagesSpanned; + MmBootImageSize *= PAGE_SIZE; + MmBootImageSize = (MmBootImageSize + (4 * 1024 * 1024) - 1) & ~((4 * 1024 * 1024) - 1); + ASSERT((MmBootImageSize % (4 * 1024 * 1024)) == 0); + + MiSessionSpaceEnd = (PVOID)MI_SESSION_SPACE_END; + + /* This is where we will load Win32k.sys and the video driver */ + MiSessionImageEnd = MiSessionSpaceEnd; + MiSessionImageStart = (PVOID)((ULONG_PTR)MiSessionImageEnd - + MmSessionImageSize); + + /* The view starts right below the session working set (itself below + * the image area) */ + MiSessionViewEnd = (PVOID)MI_SESSION_VIEW_END; + MiSessionViewStart = (PVOID)((ULONG_PTR)MiSessionViewStart - + MmSessionViewSize); + + /* Session pool follows */ + MiSessionPoolEnd = MiSessionViewStart; + MiSessionPoolStart = (PVOID)((ULONG_PTR)MiSessionPoolEnd - + MmSessionPoolSize); + + /* And it all begins here */ + MmSessionBase = MiSessionPoolStart; + + // Sanity check that our math is correct + //ASSERT((ULONG_PTR)MmSessionBase + MmSessionSize == PTE_BASE); + + /* System view space ends at session space, so now that we know where + * this is, we can compute the base address of system view space itself. */ + MiSystemViewStart = (PVOID)((ULONG_PTR)MmSessionBase - + MmSystemViewSize); + + /* Use the default */ + MmNumberOfSystemPtes = 22000; + +} + +VOID +MiArmInitializePageTable() +{ + ULONG64 PageFrameOffset; + PMMPTE StartPte, EndPte; + + /* Set CR3 for the system process */ + PageFrameOffset = ((PMMPTE)PXE_BASE)->u.Hard.PageFrameNumber << PAGE_SHIFT; + PsGetCurrentProcess()->Pcb.DirectoryTableBase[0] = PageFrameOffset; + + /* Clear user mode mappings in PML4 */ + StartPte = MiAddressToPxe(0); + EndPte = MiAddressToPxe(MmSystemRangeStart); + RtlZeroMemory(StartPte, (EndPte - StartPte) * sizeof(MMPTE)); +} + + +VOID +NTAPI +MiArmEvaluateMemoryDescriptors(IN PLOADER_PARAMETER_BLOCK LoaderBlock) +{ + PMEMORY_ALLOCATION_DESCRIPTOR MdBlock; + PLIST_ENTRY ListEntry; + PFN_NUMBER BasePage, LastPage, PageCount; + + /* Loop the memory descriptors */ + for (ListEntry = LoaderBlock->MemoryDescriptorListHead.Flink; + ListEntry != &LoaderBlock->MemoryDescriptorListHead; + ListEntry = ListEntry->Flink) + { + /* Get the descriptor */ + MdBlock = CONTAINING_RECORD(ListEntry, + MEMORY_ALLOCATION_DESCRIPTOR, + ListEntry); + + /* Skip pages that are not part of the PFN database */ + if ((MdBlock->MemoryType == LoaderFirmwarePermanent) || + (MdBlock->MemoryType == LoaderBBTMemory) || + (MdBlock->MemoryType == LoaderHALCachedMemory) || // ??? + (MdBlock->MemoryType == LoaderSpecialMemory)) + { + continue; + } + + /* Check if BURNMEM was used */ + if (MdBlock->MemoryType != LoaderBad) + { + /* Count this in the total of pages */ + MmNumberOfPhysicalPages += MdBlock->PageCount; + } + + BasePage = MdBlock->BasePage; + LastPage = MdBlock->BasePage + MdBlock->PageCount - 1; + + /* Check if this is the new lowest page */ + if (BasePage < MmLowestPhysicalPage) + { + /* Update the lowest page */ + MmLowestPhysicalPage = BasePage; + } + + /* Check if this is the new highest page */ + if (LastPage > MmHighestPhysicalPage) + { + /* Update the highest page */ + MmHighestPhysicalPage = LastPage; + } + + /* Map pages for the PFN database */ + PageCount = (MdBlock->PageCount * sizeof(MMPFN)) / PAGE_SIZE; + MxMapPageRange(&MmPfnDatabase[BasePage], PageCount); + + /* Zero out the pages */ + RtlZeroMemory(&MmPfnDatabase[BasePage], PageCount * PAGE_SIZE); + } + + /* Calculate the number of bytes, and then convert to pages */ + MxPfnAllocation = (MmHighestPhysicalPage + 1) * sizeof(MMPFN); + MxPfnAllocation >>= PAGE_SHIFT; + MxPfnAllocation++; + +} + +VOID +NTAPI +MiArmPrepareNonPagedPool() +{ + PFN_NUMBER PageCount; + + /* Check if this is a machine with less than 256MB of RAM, and no overide */ + if ((MmNumberOfPhysicalPages <= MI_MIN_PAGES_FOR_NONPAGED_POOL_TUNING) && + !(MmSizeOfNonPagedPoolInBytes)) + { + /* Force the non paged pool to be 2MB so we can reduce RAM usage */ + MmSizeOfNonPagedPoolInBytes = 2 * 1024 * 1024; + } + + /* Check if the user gave a ridicuously large nonpaged pool RAM size */ + if ((MmSizeOfNonPagedPoolInBytes >> PAGE_SHIFT) > + (MmNumberOfPhysicalPages * 7 / 8)) + { + /* More than 7/8ths of RAM was dedicated to nonpaged pool, ignore! */ + MmSizeOfNonPagedPoolInBytes = 0; + } + + /* Check if no registry setting was set, or if the setting was too low */ + if (MmSizeOfNonPagedPoolInBytes < MmMinimumNonPagedPoolSize) + { + /* Start with the minimum (256 KB) and add 32 KB for each MB above 4 */ + MmSizeOfNonPagedPoolInBytes = MmMinimumNonPagedPoolSize; + MmSizeOfNonPagedPoolInBytes += (MmNumberOfPhysicalPages - 1024) / + 256 * MmMinAdditionNonPagedPoolPerMb; + } + + /* Check if the registy setting or our dynamic calculation was too high */ + if (MmSizeOfNonPagedPoolInBytes > MI_MAX_INIT_NONPAGED_POOL_SIZE) + { + // Set it to the maximum */ + MmSizeOfNonPagedPoolInBytes = MI_MAX_INIT_NONPAGED_POOL_SIZE; + } + + /* Check if a percentage cap was set through the registry */ + if (MmMaximumNonPagedPoolPercent) + { + /* Don't feel like supporting this right now */ + UNIMPLEMENTED; + } + + /* Page-align the nonpaged pool size */ + MmSizeOfNonPagedPoolInBytes &= ~(PAGE_SIZE - 1); + + /* Now, check if there was a registry size for the maximum size */ + if (!MmMaximumNonPagedPoolInBytes) + { + /* Start with the default (1MB) and add 400 KB for each MB above 4 */ + MmMaximumNonPagedPoolInBytes = MmDefaultMaximumNonPagedPool; + MmMaximumNonPagedPoolInBytes += (MmNumberOfPhysicalPages - 1024) / + 256 * MmMaxAdditionNonPagedPoolPerMb; + } + + /* Don't let the maximum go too high */ + if (MmMaximumNonPagedPoolInBytes > MI_MAX_NONPAGED_POOL_SIZE) + { + /* Set it to the upper limit */ + MmMaximumNonPagedPoolInBytes = MI_MAX_NONPAGED_POOL_SIZE; + } + + /* Calculate the nonpaged pool expansion start region */ + MmNonPagedPoolExpansionStart = (PVOID)((ULONG_PTR)MmNonPagedPoolEnd - + MmMaximumNonPagedPoolInBytes + + MmSizeOfNonPagedPoolInBytes); + MmNonPagedPoolExpansionStart = (PVOID)PAGE_ALIGN(MmNonPagedPoolExpansionStart); + + DPRINT("NP Pool has been tuned to: %d bytes and %d bytes\n", + MmSizeOfNonPagedPoolInBytes, MmMaximumNonPagedPoolInBytes); + + /* Now calculate the nonpaged system VA region, which includes the + * nonpaged pool expansion (above) and the system PTEs. Note that it is + * then aligned to a PDE boundary (4MB). */ + MmNonPagedSystemStart = (PVOID)((ULONG_PTR)MmNonPagedPoolExpansionStart - + (MmNumberOfSystemPtes + 1) * PAGE_SIZE); + MmNonPagedSystemStart = (PVOID)((ULONG_PTR)MmNonPagedSystemStart & + ~((4 * 1024 * 1024) - 1)); + + /* Don't let it go below the minimum */ + if (MmNonPagedSystemStart < (PVOID)MI_NON_PAGED_SYSTEM_START_MIN) + { + /* This is a hard-coded limit in the Windows NT address space */ + MmNonPagedSystemStart = (PVOID)MI_NON_PAGED_SYSTEM_START_MIN; + + /* Reduce the amount of system PTEs to reach this point */ + MmNumberOfSystemPtes = ((ULONG_PTR)MmNonPagedPoolExpansionStart - + (ULONG_PTR)MmNonPagedSystemStart) >> + PAGE_SHIFT; + MmNumberOfSystemPtes--; + ASSERT(MmNumberOfSystemPtes > 1000); + } + + /* Non paged pool comes after the PFN database */ + MmNonPagedPoolStart = (PVOID)((ULONG_PTR)MmPfnDatabase + + (MxPfnAllocation << PAGE_SHIFT)); + + /* Map the nonpaged pool */ + PageCount = (MmSizeOfNonPagedPoolInBytes + PAGE_SIZE - 1) / PAGE_SIZE; + MxMapPageRange(MmNonPagedPoolStart, PageCount); + + /* Sanity check: make sure we have properly defined the system PTE space */ + ASSERT(MiAddressToPte(MmNonPagedSystemStart) < + MiAddressToPte(MmNonPagedPoolExpansionStart)); + +} NTSTATUS NTAPI MmArmInitSystem(IN ULONG Phase, IN PLOADER_PARAMETER_BLOCK LoaderBlock) { - UNIMPLEMENTED; - return STATUS_NOT_IMPLEMENTED; + if (Phase == 0) + { + /* Get a continuous range of physical pages */ + MxSetupFreePageList(LoaderBlock); + + /* Initialize the memory layout */ + MiArmIninializeMemoryLayout(LoaderBlock); + DPRINT1("MmArmInitSystem 3\n"); + + /* Loop descriptors and prepare PFN database */ + MiArmEvaluateMemoryDescriptors(LoaderBlock); + DPRINT1("MmArmInitSystem 4\n"); + + MiArmInitializePageTable(); + DPRINT1("MmArmInitSystem 5\n"); + + /* Configure size of the non paged pool */ + MiArmPrepareNonPagedPool(); + + /* Initialize the ARM3 nonpaged pool */ + MiInitializeArmPool(); + + /* Update the memory descriptor, to make sure the pages we used + won't get inserted into the PFN database */ + MxOldFreeDescriptor = *MxFreeDescriptor; + MxFreeDescriptor->BasePage = MxFreePageBase; + MxFreeDescriptor->PageCount = MxFreePageCount; + } + else if (Phase == 1) + { + /* The PFN database was created, restore the free descriptor */ + *MxFreeDescriptor = MxOldFreeDescriptor; + + + } + + return STATUS_SUCCESS; } From 5ad4bf2911fe26d2f5f73f0851ac74b4d1997625 Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Mon, 9 Nov 2009 07:13:48 +0000 Subject: [PATCH 085/286] Seems that windows cares about manifests and a mismatched processor architecture is not good. Fix amd64 paint in windows. svn path=/branches/ros-amd64-bringup/; revision=44036 --- .../paint/paint.exe.amd64.manifest | 23 +++++++++++++++++++ reactos/base/applications/paint/rsrc.rc | 5 ++++ 2 files changed, 28 insertions(+) create mode 100644 reactos/base/applications/paint/paint.exe.amd64.manifest diff --git a/reactos/base/applications/paint/paint.exe.amd64.manifest b/reactos/base/applications/paint/paint.exe.amd64.manifest new file mode 100644 index 00000000000..1e96c9cb961 --- /dev/null +++ b/reactos/base/applications/paint/paint.exe.amd64.manifest @@ -0,0 +1,23 @@ + + + +Paint + + + + + + diff --git a/reactos/base/applications/paint/rsrc.rc b/reactos/base/applications/paint/rsrc.rc index 00bf8d4dd77..e3b086e8fc7 100644 --- a/reactos/base/applications/paint/rsrc.rc +++ b/reactos/base/applications/paint/rsrc.rc @@ -41,4 +41,9 @@ // THIS WILL MAKE THE PROGRAM USE THE COMMON CONTROLS // LIBRARY VERSION 6.0 (IF IT IS AVAILABLE) // +#ifdef _AMD64_ +1 24 "paint.exe.amd64.manifest" +#elif _X86_ 1 24 "paint.exe.manifest" +#endif + From c465970ad0d845d082884aa0128299d6b537f799 Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Mon, 9 Nov 2009 07:17:03 +0000 Subject: [PATCH 086/286] Fix Build. svn path=/branches/ros-amd64-bringup/; revision=44037 --- reactos/dll/win32/lsasrv/lsarpc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/dll/win32/lsasrv/lsarpc.c b/reactos/dll/win32/lsasrv/lsarpc.c index 039c8f8e3e6..f3641bf7500 100644 --- a/reactos/dll/win32/lsasrv/lsarpc.c +++ b/reactos/dll/win32/lsasrv/lsarpc.c @@ -37,7 +37,7 @@ ReferencePolicyHandle( RtlEnterCriticalSection(&PolicyHandleTableLock); if (RtlIsValidIndexHandle(&PolicyHandleTable, - (ULONG)ObjectHandle, + HandleToUlong(ObjectHandle), (PRTL_HANDLE_TABLE_ENTRY*)&ReferencedPolicy) && !(ReferencedPolicy->Flags & POLICY_DELETE)) { From 1f946323bb2e57c4092584ba21f97cf61f21a9d7 Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Mon, 9 Nov 2009 08:27:48 +0000 Subject: [PATCH 087/286] Fix mmTaskCreate and mciGetDriverData prototypes per MSDN svn path=/branches/ros-amd64-bringup/; revision=44039 --- reactos/include/psdk/mmddk.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/reactos/include/psdk/mmddk.h b/reactos/include/psdk/mmddk.h index 47134dcd132..2634586d2b8 100644 --- a/reactos/include/psdk/mmddk.h +++ b/reactos/include/psdk/mmddk.h @@ -435,7 +435,7 @@ typedef struct { UINT wType; /* driver type (filled in by the driver) */ } MCI_OPEN_DRIVER_PARMSW, *LPMCI_OPEN_DRIVER_PARMSW; -DWORD WINAPI mciGetDriverData(UINT uDeviceID); +DWORD_PTR WINAPI mciGetDriverData(UINT uDeviceID); BOOL WINAPI mciSetDriverData(UINT uDeviceID, DWORD_PTR dwData); UINT WINAPI mciDriverYield(UINT uDeviceID); BOOL WINAPI mciDriverNotify(HWND hwndCallback, UINT uDeviceID, @@ -459,7 +459,7 @@ typedef void (*LPTASKCALLBACK)(DWORD dwInst); #define TASKERR_NOTASKSUPPORT 1 #define TASKERR_OUTOFMEMORY 2 -MMRESULT WINAPI mmTaskCreate(LPTASKCALLBACK, HANDLE*, DWORD); +UINT WINAPI mmTaskCreate(LPTASKCALLBACK, HANDLE*, DWORD_PTR); void WINAPI mmTaskBlock(DWORD); BOOL WINAPI mmTaskSignal(DWORD); void WINAPI mmTaskYield(void); From 23f1416f6e181fa827899ff98b9284ad3be5ad1c Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Mon, 9 Nov 2009 08:28:59 +0000 Subject: [PATCH 088/286] Fix 32bit build. svn path=/branches/ros-amd64-bringup/; revision=44040 --- reactos/include/psdk/windef.h | 4 +++- reactos/include/psdk/winsock.h | 4 +++- reactos/include/psdk/winsock2.h | 4 +++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/reactos/include/psdk/windef.h b/reactos/include/psdk/windef.h index 392eac57fdf..b1de03d90df 100644 --- a/reactos/include/psdk/windef.h +++ b/reactos/include/psdk/windef.h @@ -1,9 +1,11 @@ #ifndef _WINDEF_H #define _WINDEF_H +#ifndef _M_AMD64 #if !defined(__ROS_LONG64__) #ifdef __WINESRC__ -//#define __ROS_LONG64__ +#define __ROS_LONG64__ +#endif #endif #endif diff --git a/reactos/include/psdk/winsock.h b/reactos/include/psdk/winsock.h index 5cc1a33e420..4357e34a464 100644 --- a/reactos/include/psdk/winsock.h +++ b/reactos/include/psdk/winsock.h @@ -11,9 +11,11 @@ #ifndef _WINSOCK_H #define _WINSOCK_H +#ifndef _M_AMD64 #if !defined(__ROS_LONG64__) #ifdef __WINESRC__ -//#define __ROS_LONG64__ +#define __ROS_LONG64__ +#endif #endif #endif diff --git a/reactos/include/psdk/winsock2.h b/reactos/include/psdk/winsock2.h index 6a4807181a2..45ba64127bd 100644 --- a/reactos/include/psdk/winsock2.h +++ b/reactos/include/psdk/winsock2.h @@ -16,9 +16,11 @@ #define _GNU_H_WINDOWS32_SOCKETS +#ifndef _M_AMD64 #if !defined(__ROS_LONG64__) #ifdef __WINESRC__ -//#define __ROS_LONG64__ +#define __ROS_LONG64__ +#endif #endif #endif From bc8ddc9638340e065f3d9f91567ee84cdb86ce09 Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Mon, 9 Nov 2009 08:31:11 +0000 Subject: [PATCH 089/286] Sync with trunk and additional 64bit build hacks^H^H^H^H^H fixes. svn path=/branches/ros-amd64-bringup/; revision=44041 --- reactos/dll/win32/winmm/driver.c | 138 +++------ reactos/dll/win32/winmm/mci.c | 24 +- reactos/dll/win32/winmm/midimap/midimap.c | 26 +- reactos/dll/win32/winmm/mmio.c | 2 +- reactos/dll/win32/winmm/time.c | 336 ++++++++++++---------- reactos/dll/win32/winmm/winemm.h | 8 +- reactos/dll/win32/winmm/winemm16.h | 2 +- reactos/dll/win32/winmm/winmm.c | 62 ++-- reactos/dll/win32/winmm/winmm.rbuild | 2 +- reactos/dll/win32/winmm/winmm_Br.rc | 2 +- reactos/dll/win32/winmm/winmm_Cs.rc | 2 +- reactos/dll/win32/winmm/winmm_De.rc | 2 +- reactos/dll/win32/winmm/winmm_En.rc | 2 +- reactos/dll/win32/winmm/winmm_Es.rc | 2 +- reactos/dll/win32/winmm/winmm_Fr.rc | 2 +- reactos/dll/win32/winmm/winmm_Hu.rc | 2 +- reactos/dll/win32/winmm/winmm_Id.rc | 2 +- reactos/dll/win32/winmm/winmm_It.rc | 2 +- reactos/dll/win32/winmm/winmm_Ja.rc | 2 +- reactos/dll/win32/winmm/winmm_Nl.rc | 2 +- reactos/dll/win32/winmm/winmm_No.rc | 2 +- reactos/dll/win32/winmm/winmm_Pl.rc | 2 +- reactos/dll/win32/winmm/winmm_Pt.rc | 2 +- reactos/dll/win32/winmm/winmm_Ru.rc | 2 +- reactos/dll/win32/winmm/winmm_Si.rc | 2 +- reactos/dll/win32/winmm/winmm_Sk.rc | 2 +- reactos/dll/win32/winmm/winmm_Uk.rc | 2 +- reactos/dll/win32/winmm/winmm_res.rc | 2 +- 28 files changed, 307 insertions(+), 331 deletions(-) diff --git a/reactos/dll/win32/winmm/driver.c b/reactos/dll/win32/winmm/driver.c index f82ae3a394d..48152abaf17 100644 --- a/reactos/dll/win32/winmm/driver.c +++ b/reactos/dll/win32/winmm/driver.c @@ -144,8 +144,8 @@ static inline LRESULT DRIVER_SendMessage(LPWINE_DRIVER lpDrv, UINT msg, * SendDriverMessage [WINMM.@] * DrvSendMessage [WINMM.@] */ -LRESULT WINAPI SendDriverMessage(HDRVR hDriver, UINT msg, LONG lParam1, - LONG lParam2) +LRESULT WINAPI SendDriverMessage(HDRVR hDriver, UINT msg, LPARAM lParam1, + LPARAM lParam2) { LPWINE_DRIVER lpDrv; LRESULT retval = 0; @@ -253,31 +253,23 @@ BOOL DRIVER_GetLibName(LPCWSTR keyName, LPCWSTR sectName, LPWSTR buf, int sz) static const WCHAR wszSystemIni[] = {'S','Y','S','T','E','M','.','I','N','I',0}; WCHAR wsznull = '\0'; - /* This takes us as far as Windows NT\CurrentVersion */ + TRACE("registry: %s, %s, %p, %d\n", debugstr_w(keyName), debugstr_w(sectName), buf, sz); + lRet = RegOpenKeyExW(HKEY_LOCAL_MACHINE, HKLM_BASE, 0, KEY_QUERY_VALUE, &hKey); - - if (lRet == ERROR_SUCCESS) - { - /* Now we descend into the section name that we were given */ - lRet = RegOpenKeyExW(hKey, sectName, 0, KEY_QUERY_VALUE, &hSecKey); - - if (lRet == ERROR_SUCCESS) - { - /* Retrieve the desired value - this is the filename of the lib */ + if (lRet == ERROR_SUCCESS) { + lRet = RegOpenKeyExW(hKey, sectName, 0, KEY_QUERY_VALUE, &hSecKey); + if (lRet == ERROR_SUCCESS) { bufLen = sz; - lRet = RegQueryValueExW(hSecKey, keyName, 0, 0, (void*)buf, &bufLen); - RegCloseKey( hSecKey ); - } - + lRet = RegQueryValueExW(hSecKey, keyName, 0, 0, (void*)buf, &bufLen); + RegCloseKey( hSecKey ); + } RegCloseKey( hKey ); } - - /* Finish up if we've got what we want from the registry */ - if (lRet == ERROR_SUCCESS) - return TRUE; + if (lRet == ERROR_SUCCESS) return TRUE; /* default to system.ini if we can't find it in the registry, * to support native installations where system.ini is still used */ + TRACE("system.ini: %s, %s, %p, %d\n", debugstr_w(keyName), debugstr_w(sectName), buf, sz); return GetPrivateProfileStringW(sectName, keyName, &wsznull, buf, sz / sizeof(WCHAR), wszSystemIni); } @@ -295,40 +287,21 @@ LPWINE_DRIVER DRIVER_TryOpenDriver32(LPCWSTR fn, LPARAM lParam2) TRACE("(%s, %08lX);\n", debugstr_w(fn), lParam2); - if ((ptr = strchrW(fn, ' ')) != NULL) - { - *ptr++ = '\0'; - - while (*ptr == ' ') - ptr++; - - if (*ptr == '\0') - ptr = NULL; + if ((ptr = strchrW(fn, ' ')) != NULL) { + *ptr++ = '\0'; + while (*ptr == ' ') ptr++; + if (*ptr == '\0') ptr = NULL; } lpDrv = HeapAlloc(GetProcessHeap(), 0, sizeof(WINE_DRIVER)); + if (lpDrv == NULL) {cause = "OOM"; goto exit;} - if (lpDrv == NULL) - { - cause = "OOM"; - goto exit; - } - - if ((hModule = LoadLibraryW(fn)) == 0) - { - cause = "Not a 32 bit lib"; - goto exit; - } + if ((hModule = LoadLibraryW(fn)) == 0) {cause = "Not a 32 bit lib"; goto exit;} lpDrv->lpDrvProc = (DRIVERPROC)GetProcAddress(hModule, "DriverProc"); + if (lpDrv->lpDrvProc == NULL) {cause = "no DriverProc"; goto exit;} - if (lpDrv->lpDrvProc == NULL) - { - cause = "no DriverProc"; - goto exit; - } - - lpDrv->dwFlags = 0; + lpDrv->dwFlags = 0; lpDrv->hModule = hModule; lpDrv->dwDriverID = 0; @@ -352,18 +325,15 @@ LPWINE_DRIVER DRIVER_TryOpenDriver32(LPCWSTR fn, LPARAM lParam2) cause = "load1 failed"; goto exit; } + lpDrv->dwFlags |= WINE_GDF_SESSION; return ret; } if (!DRIVER_AddToList(lpDrv, (LPARAM)ptr, lParam2)) - { - cause = "load failed"; - goto exit; - } + {cause = "load failed"; goto exit;} TRACE("=> %p\n", lpDrv); return lpDrv; - exit: FreeLibrary(hModule); HeapFree(GetProcessHeap(), 0, lpDrv); @@ -413,61 +383,37 @@ done: * OpenDriver [WINMM.@] * DrvOpen [WINMM.@] */ -HDRVR WINAPI OpenDriver(LPCWSTR lpDriverName, LPCWSTR lpSectionName, LONG lParam) +HDRVR WINAPI OpenDriver(LPCWSTR lpDriverName, LPCWSTR lpSectionName, LPARAM lParam) { LPWINE_DRIVER lpDrv = NULL; - WCHAR libName[128]; + WCHAR libName[MAX_PATH + 1]; LPCWSTR lsn = lpSectionName; TRACE("(%s, %s, 0x%08lx);\n", debugstr_w(lpDriverName), debugstr_w(lpSectionName), lParam); - /* If no section name is specified, either the caller is intending on - opening a driver by filename, or wants to open a user-installable - driver that has an entry in the Drivers32 key in the registry */ - if (lsn == NULL) - { - /* Default registry key */ + DRIVER_Dump("BEFORE:"); + + if (lsn == NULL) { static const WCHAR wszDrivers32[] = {'D','r','i','v','e','r','s','3','2',0}; + lstrcpynW(libName, lpDriverName, sizeof(libName) / sizeof(WCHAR)); - lstrcpynW(libName, lpDriverName, sizeof(libName) / sizeof(WCHAR)); - - /* Try and open the driver by filename */ - if ( (lpDrv = DRIVER_TryOpenDriver32(libName, lParam)) ) - goto the_end; - - /* If we got here, the file wasn't found. So we assume the caller - wanted a driver specified under the Drivers32 registry key */ - lsn = wszDrivers32; + if ((lpDrv = DRIVER_TryOpenDriver32(libName, lParam))) + goto the_end; + lsn = wszDrivers32; } + if (DRIVER_GetLibName(lpDriverName, lsn, libName, sizeof(libName)) && + (lpDrv = DRIVER_TryOpenDriver32(libName, lParam))) + goto the_end; - /* Attempt to locate the driver filename in the registry */ - if ( DRIVER_GetLibName(lpDriverName, lsn, libName, sizeof(libName)) ) - { - /* Now we have the filename, we can try and load it */ - if ( (lpDrv = DRIVER_TryOpenDriver32(libName, lParam)) ) - goto the_end; - } - - /* now we will try a 16 bit driver (and add all the glue to make it work... which - * is located in our mmsystem implementation) - * so ensure, we can load our mmsystem, otherwise just fail - */ - WINMM_CheckForMMSystem(); -#if 0 - if (pFnOpenDriver16 && - (lpDrv = pFnOpenDriver16(lpDriverName, lpSectionName, lParam))) - { - if (DRIVER_AddToList(lpDrv, 0, lParam)) goto the_end; - HeapFree(GetProcessHeap(), 0, lpDrv); - } TRACE("Failed to open driver %s from system.ini file, section %s\n", debugstr_w(lpDriverName), debugstr_w(lpSectionName)); -#endif - return 0; - the_end: - if (lpDrv) TRACE("=> %p\n", lpDrv); +the_end: + TRACE("=> %p\n", lpDrv); + + DRIVER_Dump("AFTER:"); + return (HDRVR)lpDrv; } @@ -475,7 +421,7 @@ HDRVR WINAPI OpenDriver(LPCWSTR lpDriverName, LPCWSTR lpSectionName, LONG lParam * CloseDriver [WINMM.@] * DrvClose [WINMM.@] */ -LRESULT WINAPI CloseDriver(HDRVR hDrvr, LONG lParam1, LONG lParam2) +LRESULT WINAPI CloseDriver(HDRVR hDrvr, LPARAM lParam1, LPARAM lParam2) { BOOL ret; LPWINE_DRIVER lpDrv; @@ -567,8 +513,8 @@ HMODULE WINAPI GetDriverModuleHandle(HDRVR hDrvr) * DefDriverProc [WINMM.@] * DrvDefDriverProc [WINMM.@] */ -LONG WINAPI DefDriverProc(DWORD dwDriverIdentifier, HDRVR hDrv, - UINT Msg, LONG lParam1, LONG lParam2) +LRESULT WINAPI DefDriverProc(DWORD_PTR dwDriverIdentifier, HDRVR hDrv, + UINT Msg, LPARAM lParam1, LPARAM lParam2) { switch (Msg) { case DRV_LOAD: diff --git a/reactos/dll/win32/winmm/mci.c b/reactos/dll/win32/winmm/mci.c index d16d251cd1a..8bb26488811 100644 --- a/reactos/dll/win32/winmm/mci.c +++ b/reactos/dll/win32/winmm/mci.c @@ -834,7 +834,7 @@ static DWORD MCI_LoadMciDriver(LPCWSTR _strDevTyp, LPWINE_MCIDRIVER* lpwmd) wmd->lpfnYieldProc = MCI_DefYieldProc; wmd->dwYieldData = VK_CANCEL; - wmd->CreatorThread = GetCurrentThreadId(); + wmd->CreatorThread = GetCurrentThread(); EnterCriticalSection(&WINMM_cs); /* wmd must be inserted in list before sending opening the driver, because it @@ -1155,8 +1155,8 @@ static DWORD MCI_HandleReturnValues(DWORD dwRet, LPWINE_MCIDRIVER wmd, DWORD ret { static const WCHAR wszLd [] = {'%','l','d',0}; static const WCHAR wszLd4 [] = {'%','l','d',' ','%','l','d',' ','%','l','d',' ','%','l','d',0}; - static const WCHAR wszCol3[] = {'%','d',':','%','d',':','%','d',0}; - static const WCHAR wszCol4[] = {'%','d',':','%','d',':','%','d',':','%','d',0}; + static const WCHAR wszCol3[] = {'%','0','2','d',':','%','0','2','d',':','%','0','2','d',0}; + static const WCHAR wszCol4[] = {'%','0','2','d',':','%','0','2','d',':','%','0','2','d',':','%','0','2','d',0}; if (lpstrRet) { switch (retType) { @@ -1391,20 +1391,20 @@ DWORD WINAPI mciSendStringW(LPCWSTR lpstrCommand, LPWSTR lpstrRet, /* set up call back */ if (dwFlags & MCI_NOTIFY) { - data[0] = (DWORD)hwndCallback; + data[0] = (DWORD_PTR)hwndCallback; } /* FIXME: the command should get it's own notification window set up and * ask for device closing while processing the notification mechanism */ if (lpstrRet && uRetLen) *lpstrRet = '\0'; - +/* TRACE("[%d, %s, %08x, %08x/%s %08x/%s %08x/%s %08x/%s %08x/%s %08x/%s]\n", wmd->wDeviceID, MCI_MessageToString(MCI_GetMessage(lpCmd)), dwFlags, data[0], debugstr_w((WCHAR *)data[0]), data[1], debugstr_w((WCHAR *)data[1]), data[2], debugstr_w((WCHAR *)data[2]), data[3], debugstr_w((WCHAR *)data[3]), data[4], debugstr_w((WCHAR *)data[4]), data[5], debugstr_w((WCHAR *)data[5])); - +*/ if (strcmpW(verb, wszOpen) == 0) { if ((dwRet = MCI_FinishOpen(wmd, (LPMCI_OPEN_PARMSW)data, dwFlags))) MCI_UnLoadMciDriver(wmd); @@ -1466,7 +1466,7 @@ BOOL WINAPI mciExecute(LPCSTR lpstrCommand) ret = mciSendStringA(lpstrCommand, strRet, sizeof(strRet), 0); if (ret != 0) { if (!mciGetErrorStringA(ret, strRet, sizeof(strRet))) { - sprintf(strRet, "Unknown MCI error (%lu)", ret); + sprintf(strRet, "Unknown MCI error (%d)", ret); } MessageBoxA(0, strRet, "Error in mciExecute()", MB_OK); } @@ -1676,7 +1676,7 @@ static DWORD MCI_Close(UINT16 wDevID, DWORD dwParam, LPMCI_GENERIC_PARMS lpParms TRACE("(%04x, %08X, %p)\n", wDevID, dwParam, lpParms); - if (wDevID == (UINT16)MCI_ALL_DEVICE_ID) { + if (wDevID == MCI_ALL_DEVICE_ID) { /* FIXME: shall I notify once after all is done, or for * each of the open drivers ? if the latest, which notif * to return when only one fails ? @@ -1746,8 +1746,8 @@ static DWORD MCI_SysInfo(UINT uDevID, DWORD dwFlags, LPMCI_SYSINFO_PARMSW lpParm LPWINE_MCIDRIVER wmd; HKEY hKey; - if (lpParms == NULL || lpParms->lpstrReturn == NULL) - return MCIERR_NULL_PARAMETER_BLOCK; + if (lpParms == NULL) return MCIERR_NULL_PARAMETER_BLOCK; + if (lpParms->lpstrReturn == NULL) return MCIERR_PARAM_OVERFLOW; TRACE("(%08x, %08X, %p[num=%d, wDevTyp=%u])\n", uDevID, dwFlags, lpParms, lpParms->dwNumber, lpParms->wDeviceType); @@ -2079,7 +2079,7 @@ BOOL WINAPI mciSetDriverData(MCIDEVICEID uDeviceID, DWORD_PTR data) * mciSendCommandW [WINMM.@] * */ -DWORD WINAPI mciSendCommandW(MCIDEVICEID wDevID, UINT wMsg, DWORD dwParam1, DWORD_PTR dwParam2) +DWORD WINAPI mciSendCommandW(MCIDEVICEID wDevID, UINT wMsg, DWORD_PTR dwParam1, DWORD_PTR dwParam2) { DWORD dwRet; @@ -2095,7 +2095,7 @@ DWORD WINAPI mciSendCommandW(MCIDEVICEID wDevID, UINT wMsg, DWORD dwParam1, DWOR /************************************************************************** * mciSendCommandA [WINMM.@] */ -DWORD WINAPI mciSendCommandA(MCIDEVICEID wDevID, UINT wMsg, DWORD dwParam1, DWORD_PTR dwParam2) +DWORD WINAPI mciSendCommandA(MCIDEVICEID wDevID, UINT wMsg, DWORD_PTR dwParam1, DWORD_PTR dwParam2) { DWORD ret; int mapped; diff --git a/reactos/dll/win32/winmm/midimap/midimap.c b/reactos/dll/win32/winmm/midimap/midimap.c index 73df8f3d63e..e2b27d122c9 100644 --- a/reactos/dll/win32/winmm/midimap/midimap.c +++ b/reactos/dll/win32/winmm/midimap/midimap.c @@ -16,7 +16,7 @@ * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * * TODO: * notification has to be implemented @@ -270,7 +270,7 @@ static DWORD modOpen(LPDWORD lpdwUser, LPMIDIOPENDESC lpDesc, DWORD dwFlags) if (MIDIMAP_LoadSettings(mom)) { - *lpdwUser = (DWORD_PTR)mom; + *lpdwUser = (DWORD)mom; mom->self = mom; return MMSYSERR_NOERROR; @@ -306,7 +306,7 @@ static DWORD modClose(MIDIMAPDATA* mom) return ret; } -static DWORD modLongData(MIDIMAPDATA* mom, LPMIDIHDR lpMidiHdr, DWORD_PTR dwParam2) +static DWORD modLongData(MIDIMAPDATA* mom, LPMIDIHDR lpMidiHdr, DWORD dwParam2) { WORD chn; DWORD ret = MMSYSERR_NOERROR; @@ -330,7 +330,7 @@ static DWORD modLongData(MIDIMAPDATA* mom, LPMIDIHDR lpMidiHdr, DWORD_PTR dwPara return ret; } -static DWORD modData(MIDIMAPDATA* mom, DWORD_PTR dwParam) +static DWORD modData(MIDIMAPDATA* mom, DWORD dwParam) { BYTE lb = LOBYTE(LOWORD(dwParam)); WORD chn = lb & 0x0F; @@ -393,7 +393,7 @@ static DWORD modData(MIDIMAPDATA* mom, DWORD_PTR dwParam) return ret; } -static DWORD modPrepare(MIDIMAPDATA* mom, LPMIDIHDR lpMidiHdr, DWORD_PTR dwParam2) +static DWORD modPrepare(MIDIMAPDATA* mom, LPMIDIHDR lpMidiHdr, DWORD dwParam2) { if (MIDIMAP_IsBadData(mom)) return MMSYSERR_ERROR; if (lpMidiHdr->dwFlags & (MHDR_ISSTRM|MHDR_PREPARED)) @@ -403,7 +403,7 @@ static DWORD modPrepare(MIDIMAPDATA* mom, LPMIDIHDR lpMidiHdr, DWORD_PTR dwParam return MMSYSERR_NOERROR; } -static DWORD modUnprepare(MIDIMAPDATA* mom, LPMIDIHDR lpMidiHdr, DWORD_PTR dwParam2) +static DWORD modUnprepare(MIDIMAPDATA* mom, LPMIDIHDR lpMidiHdr, DWORD dwParam2) { if (MIDIMAP_IsBadData(mom)) return MMSYSERR_ERROR; if ((lpMidiHdr->dwFlags & MHDR_ISSTRM) || !(lpMidiHdr->dwFlags & MHDR_PREPARED)) @@ -413,7 +413,7 @@ static DWORD modUnprepare(MIDIMAPDATA* mom, LPMIDIHDR lpMidiHdr, DWORD_PTR dwPar return MMSYSERR_NOERROR; } -static DWORD modGetDevCaps(UINT wDevID, MIDIMAPDATA* mom, LPMIDIOUTCAPSW lpMidiCaps, DWORD_PTR size) +static DWORD modGetDevCaps(UINT wDevID, MIDIMAPDATA* mom, LPMIDIOUTCAPSW lpMidiCaps, DWORD size) { static const WCHAR name[] = {'W','i','n','e',' ','m','i','d','i',' ','m','a','p','p','e','r',0}; lpMidiCaps->wMid = 0x00FF; @@ -451,8 +451,8 @@ static DWORD modReset(MIDIMAPDATA* mom) /************************************************************************** * modMessage (MIDIMAP.@) */ -DWORD WINAPI MIDIMAP_modMessage(UINT wDevID, UINT wMsg, DWORD_PTR dwUser, - DWORD_PTR dwParam1, DWORD_PTR dwParam2) +DWORD WINAPI MIDIMAP_modMessage(UINT wDevID, UINT wMsg, DWORD dwUser, + DWORD dwParam1, DWORD dwParam2) { TRACE("(%u, %04X, %08lX, %08lX, %08lX);\n", wDevID, wMsg, dwUser, dwParam1, dwParam2); @@ -492,7 +492,7 @@ DWORD WINAPI MIDIMAP_modMessage(UINT wDevID, UINT wMsg, DWORD_PTR dwUser, /************************************************************************** * MIDIMAP_drvOpen [internal] */ -static LRESULT MIDIMAP_drvOpen(LPSTR str) +static DWORD MIDIMAP_drvOpen(LPSTR str) { MIDIOUTCAPSW moc; unsigned dev, i; @@ -527,7 +527,7 @@ static LRESULT MIDIMAP_drvOpen(LPSTR str) /************************************************************************** * MIDIMAP_drvClose [internal] */ -static LRESULT MIDIMAP_drvClose(DWORD_PTR dwDevID) +static DWORD MIDIMAP_drvClose(DWORD dwDevID) { if (midiOutPorts) { @@ -541,8 +541,8 @@ static LRESULT MIDIMAP_drvClose(DWORD_PTR dwDevID) /************************************************************************** * DriverProc (MIDIMAP.@) */ -LRESULT CALLBACK MIDIMAP_DriverProc(DWORD_PTR dwDevID, HDRVR hDriv, UINT wMsg, - LPARAM dwParam1, LPARAM dwParam2) +LONG CALLBACK MIDIMAP_DriverProc(DWORD dwDevID, HDRVR hDriv, DWORD wMsg, + DWORD dwParam1, DWORD dwParam2) { /* EPP TRACE("(%08lX, %04X, %08lX, %08lX, %08lX)\n", */ /* EPP dwDevID, hDriv, wMsg, dwParam1, dwParam2); */ diff --git a/reactos/dll/win32/winmm/mmio.c b/reactos/dll/win32/winmm/mmio.c index b774003abb8..132abfbe6d6 100644 --- a/reactos/dll/win32/winmm/mmio.c +++ b/reactos/dll/win32/winmm/mmio.c @@ -666,7 +666,7 @@ static HMMIO MMIO_Open(LPSTR szFileName, MMIOINFO* refmminfo, DWORD dwOpenFlags, (LPARAM)szFileName, 0, FALSE); /* grab file size, when possible */ - wm->dwFileSize = GetFileSize((HANDLE)wm->info.adwInfo[0], NULL); + wm->dwFileSize = GetFileSize(LongToHandle(wm->info.adwInfo[0]), NULL); if (refmminfo->wErrorRet == 0) return wm->info.hmmio; diff --git a/reactos/dll/win32/winmm/time.c b/reactos/dll/win32/winmm/time.c index 85577c20b42..dfd3eb4bc1e 100644 --- a/reactos/dll/win32/winmm/time.c +++ b/reactos/dll/win32/winmm/time.c @@ -17,14 +17,13 @@ * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "config.h" #include "wine/port.h" #include -#include #include #ifdef HAVE_SYS_TIME_H # include @@ -32,12 +31,6 @@ #ifdef HAVE_UNISTD_H # include #endif -#ifdef HAVE_POLL_H -#include -#endif -#ifdef HAVE_SYS_POLL_H -#include -#endif #include "windef.h" #include "winbase.h" @@ -45,47 +38,26 @@ #include "winemm.h" -#include "wine/list.h" #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(mmtime); typedef struct tagWINE_TIMERENTRY { - struct list entry; - UINT wDelay; - UINT wResol; + UINT wDelay; + UINT wResol; LPTIMECALLBACK lpFunc; /* can be lots of things */ - DWORD_PTR dwUser; - UINT16 wFlags; - UINT16 wTimerID; - DWORD dwTriggerTime; + DWORD dwUser; + UINT16 wFlags; + UINT16 wTimerID; + DWORD dwTriggerTime; + struct tagWINE_TIMERENTRY* lpNext; } WINE_TIMERENTRY, *LPWINE_TIMERENTRY; -static struct list timer_list = LIST_INIT(timer_list); - -static CRITICAL_SECTION TIME_cbcrst; -static CRITICAL_SECTION_DEBUG critsect_debug = -{ - 0, 0, &TIME_cbcrst, - { &critsect_debug.ProcessLocksList, &critsect_debug.ProcessLocksList }, - 0, 0, { (DWORD_PTR)(__FILE__ ": TIME_cbcrst") } -}; -static CRITICAL_SECTION TIME_cbcrst = { &critsect_debug, -1, 0, 0, 0, 0 }; - static HANDLE TIME_hMMTimer; +static LPWINE_TIMERENTRY TIME_TimersList; +static HANDLE TIME_hKillEvent; +static HANDLE TIME_hWakeEvent; static BOOL TIME_TimeToDie = TRUE; -static int TIME_fdWake[2] = { -1, -1 }; - -/* link timer at the appropriate spot in the list */ -static inline void link_timer( WINE_TIMERENTRY *timer ) -{ - WINE_TIMERENTRY *next; - - LIST_FOR_EACH_ENTRY( next, &timer_list, WINE_TIMERENTRY, entry ) - if ((int)(next->dwTriggerTime - timer->dwTriggerTime) >= 0) break; - - list_add_before( &next->entry, &timer->entry ); -} /* * Some observations on the behavior of winmm on Windows. @@ -94,7 +66,7 @@ static inline void link_timer( WINE_TIMERENTRY *timer ) * * Second, a brief survey of a variety of Win 2k and Win X * machines showed that a 'standard' (aka default) timer - * resolution was 1 ms (Win9x is documented as being 1). However, one + * resolution was 1 ms (Win9x is documented as being 1). However, one * machine had a standard timer resolution of 10 ms. * * Further, if we set our default resolution to 1, @@ -116,15 +88,54 @@ static inline void link_timer( WINE_TIMERENTRY *timer ) #define MMSYSTIME_MININTERVAL (1) #define MMSYSTIME_MAXINTERVAL (65535) -#ifdef HAVE_POLL + +static void TIME_TriggerCallBack(LPWINE_TIMERENTRY lpTimer) +{ + TRACE("%04lx:CallBack => lpFunc=%p wTimerID=%04X dwUser=%08lX dwTriggerTime %ld(delta %ld)\n", + GetCurrentThreadId(), lpTimer->lpFunc, lpTimer->wTimerID, lpTimer->dwUser, + lpTimer->dwTriggerTime, GetTickCount() - lpTimer->dwTriggerTime); + + /* - TimeProc callback that is called here is something strange, under Windows 3.1x it is called + * during interrupt time, is allowed to execute very limited number of API calls (like + * PostMessage), and must reside in DLL (therefore uses stack of active application). So I + * guess current implementation via SetTimer has to be improved upon. + */ + switch (lpTimer->wFlags & 0x30) { + case TIME_CALLBACK_FUNCTION: + (lpTimer->lpFunc)(lpTimer->wTimerID, 0, lpTimer->dwUser, 0, 0); + break; + case TIME_CALLBACK_EVENT_SET: + SetEvent((HANDLE)lpTimer->lpFunc); + break; + case TIME_CALLBACK_EVENT_PULSE: + PulseEvent((HANDLE)lpTimer->lpFunc); + break; + default: + FIXME("Unknown callback type 0x%04x for mmtime callback (%p), ignored.\n", + lpTimer->wFlags, lpTimer->lpFunc); + break; + } +} /************************************************************************** * TIME_MMSysTimeCallback */ -static int TIME_MMSysTimeCallback(void) +static DWORD CALLBACK TIME_MMSysTimeCallback() { - WINE_TIMERENTRY *timer, *to_free; - int delta_time; +static int nSizeLpTimers; +static LPWINE_TIMERENTRY lpTimers; + + LPWINE_TIMERENTRY timer, *ptimer, *next_ptimer; + int idx; + DWORD cur_time; + DWORD delta_time; + DWORD ret_time = INFINITE; + DWORD adjust_time; + + + /* optimize for the most frequent case - no events */ + if (! TIME_TimersList) + return(ret_time); /* since timeSetEvent() and timeKillEvent() can be called * from 16 bit code, there are cases where win16 lock is @@ -136,60 +147,84 @@ static int TIME_MMSysTimeCallback(void) * To cope with that, we just copy the WINE_TIMERENTRY struct * that need to trigger the callback, and call it without the * mm timer crit sect locked. + * the hKillTimeEvent is used to mark the section where we + * handle the callbacks so we can do synchronous kills. + * EPP 99/07/13, updated 04/01/10 */ + idx = 0; + cur_time = GetTickCount(); EnterCriticalSection(&WINMM_cs); - for (;;) - { - struct list *ptr = list_head( &timer_list ); - if (!ptr) + for (ptimer = &TIME_TimersList; *ptimer != NULL; ) { + timer = *ptimer; + next_ptimer = &timer->lpNext; + if (cur_time >= timer->dwTriggerTime) { - delta_time = -1; - break; - } + if (timer->lpFunc) { + if (idx == nSizeLpTimers) { + if (lpTimers) + lpTimers = (LPWINE_TIMERENTRY) + HeapReAlloc(GetProcessHeap(), 0, lpTimers, + ++nSizeLpTimers * sizeof(WINE_TIMERENTRY)); + else + lpTimers = (LPWINE_TIMERENTRY) + HeapAlloc(GetProcessHeap(), 0, + ++nSizeLpTimers * sizeof(WINE_TIMERENTRY)); + } + lpTimers[idx++] = *timer; - timer = LIST_ENTRY( ptr, WINE_TIMERENTRY, entry ); - delta_time = timer->dwTriggerTime - GetTickCount(); - if (delta_time > 0) break; - - list_remove( &timer->entry ); - if (timer->wFlags & TIME_PERIODIC) - { - timer->dwTriggerTime += timer->wDelay; - link_timer( timer ); /* restart it */ - to_free = NULL; - } - else to_free = timer; - - switch(timer->wFlags & (TIME_CALLBACK_EVENT_SET|TIME_CALLBACK_EVENT_PULSE)) - { - case TIME_CALLBACK_EVENT_SET: - SetEvent(timer->lpFunc); - break; - case TIME_CALLBACK_EVENT_PULSE: - PulseEvent(timer->lpFunc); - break; - case TIME_CALLBACK_FUNCTION: - { - DWORD_PTR user = timer->dwUser; - UINT16 id = timer->wTimerID; - UINT16 flags = timer->wFlags; - LPTIMECALLBACK func = timer->lpFunc; - - if (flags & TIME_KILL_SYNCHRONOUS) EnterCriticalSection(&TIME_cbcrst); - LeaveCriticalSection(&WINMM_cs); - - func(id, 0, user, 0, 0); - - EnterCriticalSection(&WINMM_cs); - if (flags & TIME_KILL_SYNCHRONOUS) LeaveCriticalSection(&TIME_cbcrst); } - break; + + /* Update the time after we make the copy to preserve + the original trigger time */ + timer->dwTriggerTime += timer->wDelay; + + /* TIME_ONESHOT is defined as 0 */ + if (!(timer->wFlags & TIME_PERIODIC)) + { + /* unlink timer from timers list */ + *ptimer = *next_ptimer; + HeapFree(GetProcessHeap(), 0, timer); + + /* We don't need to trigger oneshots again */ + delta_time = INFINITE; + } + else + { + /* Compute when this event needs this function + to be called again */ + if (timer->dwTriggerTime <= cur_time) + delta_time = 0; + else + delta_time = timer->dwTriggerTime - cur_time; + } } - HeapFree( GetProcessHeap(), 0, to_free ); + else + delta_time = timer->dwTriggerTime - cur_time; + + /* Determine when we need to return to this function */ + ret_time = min(ret_time, delta_time); + + ptimer = next_ptimer; } + if (TIME_hKillEvent) ResetEvent(TIME_hKillEvent); LeaveCriticalSection(&WINMM_cs); - return delta_time; + + while (idx > 0) TIME_TriggerCallBack(&lpTimers[--idx]); + if (TIME_hKillEvent) SetEvent(TIME_hKillEvent); + + /* Finally, adjust the recommended wait time downward + by the amount of time the processing routines + actually took */ + adjust_time = GetTickCount() - cur_time; + if (adjust_time > ret_time) + ret_time = 0; + else + ret_time -= adjust_time; + + /* We return the amount of time our caller should sleep + before needing to check in on us again */ + return(ret_time); } /************************************************************************** @@ -197,12 +232,8 @@ static int TIME_MMSysTimeCallback(void) */ static DWORD CALLBACK TIME_MMSysTimeThread(LPVOID arg) { - int sleep_time, ret; - char readme[16]; - struct pollfd pfd; - - pfd.fd = TIME_fdWake[0]; - pfd.events = POLLIN; + DWORD sleep_time; + DWORD rc; TRACE("Starting main winmm thread\n"); @@ -212,23 +243,19 @@ static DWORD CALLBACK TIME_MMSysTimeThread(LPVOID arg) new event; it's not clear if that would be worth it or not. */ - while (! TIME_TimeToDie) + while (! TIME_TimeToDie) { - sleep_time = TIME_MMSysTimeCallback(); + sleep_time = TIME_MMSysTimeCallback(); if (sleep_time == 0) continue; - if ((ret = poll(&pfd, 1, sleep_time)) < 0) + rc = WaitForSingleObject(TIME_hWakeEvent, sleep_time); + if (rc != WAIT_TIMEOUT && rc != WAIT_OBJECT_0) { - if (errno != EINTR && errno != EAGAIN) - { - ERR("Unexpected error in poll: %s(%d)\n", strerror(errno), errno); - break; - } - } - - while (ret > 0) ret = read(TIME_fdWake[0], readme, sizeof(readme)); + FIXME("Unexpected error %ld(%ld) in timer thread\n", rc, GetLastError()); + break; + } } TRACE("Exiting main winmm thread\n"); return 0; @@ -237,50 +264,34 @@ static DWORD CALLBACK TIME_MMSysTimeThread(LPVOID arg) /************************************************************************** * TIME_MMTimeStart */ -static void TIME_MMTimeStart(void) +void TIME_MMTimeStart(void) { if (!TIME_hMMTimer) { - if (pipe(TIME_fdWake) < 0) - { - TIME_fdWake[0] = TIME_fdWake[1] = -1; - ERR("Cannot create pipe: %s\n", strerror(errno)); - } else { - fcntl(TIME_fdWake[0], F_SETFL, O_NONBLOCK); - fcntl(TIME_fdWake[1], F_SETFL, O_NONBLOCK); - } + TIME_TimersList = NULL; + TIME_hWakeEvent = CreateEventW(NULL, FALSE, FALSE, NULL); TIME_TimeToDie = FALSE; - TIME_hMMTimer = CreateThread(NULL, 0, TIME_MMSysTimeThread, NULL, 0, NULL); + TIME_hMMTimer = CreateThread(NULL, 0, TIME_MMSysTimeThread, NULL, 0, NULL); SetThreadPriority(TIME_hMMTimer, THREAD_PRIORITY_TIME_CRITICAL); } } -#else /* HAVE_POLL */ - -static void TIME_MMTimeStart(void) -{ - FIXME( "not starting system thread\n" ); -} - -#endif /* HAVE_POLL */ - /************************************************************************** * TIME_MMTimeStop */ void TIME_MMTimeStop(void) { if (TIME_hMMTimer) { - const char a='a'; TIME_TimeToDie = TRUE; - write(TIME_fdWake[1], &a, sizeof(a)); + SetEvent(TIME_hWakeEvent); - WaitForSingleObject(TIME_hMMTimer, INFINITE); - close(TIME_fdWake[0]); - close(TIME_fdWake[1]); - TIME_fdWake[0] = TIME_fdWake[1] = -1; - CloseHandle(TIME_hMMTimer); - TIME_hMMTimer = 0; - DeleteCriticalSection(&TIME_cbcrst); + /* FIXME: in the worst case, we're going to wait 65 seconds here :-( */ + WaitForSingleObject(TIME_hMMTimer, INFINITE); + + CloseHandle(TIME_hMMTimer); + CloseHandle(TIME_hWakeEvent); + TIME_hMMTimer = 0; + TIME_TimersList = NULL; } } @@ -300,15 +311,14 @@ MMRESULT WINAPI timeGetSystemTime(LPMMTIME lpTime, UINT wSize) } /************************************************************************** - * timeSetEvent [WINMM.@] + * TIME_SetEventInternal [internal] */ -MMRESULT WINAPI timeSetEvent(UINT wDelay, UINT wResol, LPTIMECALLBACK lpFunc, - DWORD_PTR dwUser, UINT wFlags) +WORD TIME_SetEventInternal(UINT wDelay, UINT wResol, + LPTIMECALLBACK lpFunc, DWORD dwUser, UINT wFlags) { WORD wNewID = 0; LPWINE_TIMERENTRY lpNewTimer; LPWINE_TIMERENTRY lpTimer; - const char c = 'c'; TRACE("(%u, %u, %p, %08lX, %04X);\n", wDelay, wResol, lpFunc, dwUser, wFlags); @@ -319,6 +329,8 @@ MMRESULT WINAPI timeSetEvent(UINT wDelay, UINT wResol, LPTIMECALLBACK lpFunc, if (lpNewTimer == NULL) return 0; + TIME_MMTimeStart(); + lpNewTimer->wDelay = wDelay; lpNewTimer->dwTriggerTime = GetTickCount() + wDelay; @@ -331,40 +343,52 @@ MMRESULT WINAPI timeSetEvent(UINT wDelay, UINT wResol, LPTIMECALLBACK lpFunc, EnterCriticalSection(&WINMM_cs); - LIST_FOR_EACH_ENTRY( lpTimer, &timer_list, WINE_TIMERENTRY, entry ) - wNewID = max(wNewID, lpTimer->wTimerID); + if ((wFlags & TIME_KILL_SYNCHRONOUS) && !TIME_hKillEvent) + TIME_hKillEvent = CreateEventW(NULL, TRUE, TRUE, NULL); - link_timer( lpNewTimer ); + for (lpTimer = TIME_TimersList; lpTimer != NULL; lpTimer = lpTimer->lpNext) { + wNewID = max(wNewID, lpTimer->wTimerID); + } + + lpNewTimer->lpNext = TIME_TimersList; + TIME_TimersList = lpNewTimer; lpNewTimer->wTimerID = wNewID + 1; - TIME_MMTimeStart(); - LeaveCriticalSection(&WINMM_cs); /* Wake the service thread in case there is work to be done */ - write(TIME_fdWake[1], &c, sizeof(c)); + SetEvent(TIME_hWakeEvent); TRACE("=> %u\n", wNewID + 1); return wNewID + 1; } +/************************************************************************** + * timeSetEvent [WINMM.@] + */ +MMRESULT WINAPI timeSetEvent(UINT wDelay, UINT wResol, LPTIMECALLBACK lpFunc, + DWORD_PTR dwUser, UINT wFlags) +{ + return TIME_SetEventInternal(wDelay, wResol, lpFunc, + dwUser, wFlags); +} + /************************************************************************** * timeKillEvent [WINMM.@] */ MMRESULT WINAPI timeKillEvent(UINT wID) { - WINE_TIMERENTRY *lpSelf = NULL, *lpTimer; - DWORD wFlags; + LPWINE_TIMERENTRY lpSelf = NULL, *lpTimer; TRACE("(%u)\n", wID); EnterCriticalSection(&WINMM_cs); /* remove WINE_TIMERENTRY from list */ - LIST_FOR_EACH_ENTRY( lpTimer, &timer_list, WINE_TIMERENTRY, entry ) - { - if (wID == lpTimer->wTimerID) { - lpSelf = lpTimer; - list_remove( &lpTimer->entry ); + for (lpTimer = &TIME_TimersList; *lpTimer; lpTimer = &(*lpTimer)->lpNext) { + if (wID == (*lpTimer)->wTimerID) { + lpSelf = *lpTimer; + /* unlink timer of id 'wID' */ + *lpTimer = (*lpTimer)->lpNext; break; } } @@ -375,12 +399,9 @@ MMRESULT WINAPI timeKillEvent(UINT wID) WARN("wID=%u is not a valid timer ID\n", wID); return MMSYSERR_INVALPARAM; } - wFlags = lpSelf->wFlags; - if (wFlags & TIME_KILL_SYNCHRONOUS) - EnterCriticalSection(&TIME_cbcrst); + if (lpSelf->wFlags & TIME_KILL_SYNCHRONOUS) + WaitForSingleObject(TIME_hKillEvent, INFINITE); HeapFree(GetProcessHeap(), 0, lpSelf); - if (wFlags & TIME_KILL_SYNCHRONOUS) - LeaveCriticalSection(&TIME_cbcrst); return TIMERR_NOERROR; } @@ -438,6 +459,7 @@ MMRESULT WINAPI timeEndPeriod(UINT wPeriod) } /************************************************************************** + * timeGetTime [MMSYSTEM.607] * timeGetTime [WINMM.@] */ DWORD WINAPI timeGetTime(void) @@ -446,7 +468,7 @@ DWORD WINAPI timeGetTime(void) DWORD count; /* FIXME: releasing the win16 lock here is a temporary hack (I hope) - * that lets mciavi32.dll run correctly + * that lets mciavi.drv run correctly */ if (pFnReleaseThunkLock) pFnReleaseThunkLock(&count); if (pFnRestoreThunkLock) pFnRestoreThunkLock(count); diff --git a/reactos/dll/win32/winmm/winemm.h b/reactos/dll/win32/winmm/winemm.h index 725294a7736..0e7dfa1909e 100644 --- a/reactos/dll/win32/winmm/winemm.h +++ b/reactos/dll/win32/winmm/winemm.h @@ -99,14 +99,14 @@ typedef struct { typedef struct tagWINE_MCIDRIVER { UINT wDeviceID; UINT wType; - LPWSTR lpstrElementName; + LPWSTR lpstrElementName; LPWSTR lpstrDeviceType; LPWSTR lpstrAlias; HDRVR hDriver; - DWORD_PTR dwPrivate; + DWORD_PTR dwPrivate; YIELDPROC lpfnYieldProc; - DWORD dwYieldData; - DWORD CreatorThread; + DWORD dwYieldData; + HANDLE CreatorThread; UINT uTypeCmdTable; UINT uSpecificCmdTable; struct tagWINE_MCIDRIVER*lpNext; diff --git a/reactos/dll/win32/winmm/winemm16.h b/reactos/dll/win32/winmm/winemm16.h index 3bb1780fecf..f8e77b68355 100644 --- a/reactos/dll/win32/winmm/winemm16.h +++ b/reactos/dll/win32/winmm/winemm16.h @@ -18,7 +18,7 @@ * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ***************************************************************************** */ #include "winemm.h" diff --git a/reactos/dll/win32/winmm/winmm.c b/reactos/dll/win32/winmm/winmm.c index 20790ec4c13..64540601631 100644 --- a/reactos/dll/win32/winmm/winmm.c +++ b/reactos/dll/win32/winmm/winmm.c @@ -65,13 +65,7 @@ HINSTANCE hWinMM32Instance; HANDLE psLastEvent; HANDLE psStopEvent; -static CRITICAL_SECTION_DEBUG critsect_debug = -{ - 0, 0, &WINMM_cs, - { &critsect_debug.ProcessLocksList, &critsect_debug.ProcessLocksList }, - 0, 0, { (DWORD_PTR)(__FILE__ ": WINMM_cs") } -}; -CRITICAL_SECTION WINMM_cs = { &critsect_debug, -1, 0, 0, 0, 0 }; +CRITICAL_SECTION WINMM_cs; /************************************************************************** * WINMM_CreateIData [internal] @@ -81,6 +75,7 @@ static BOOL WINMM_CreateIData(HINSTANCE hInstDLL) hWinMM32Instance = hInstDLL; psStopEvent = CreateEventW(NULL, TRUE, FALSE, NULL); psLastEvent = CreateEventW(NULL, TRUE, FALSE, NULL); + InitializeCriticalSection(&WINMM_cs); return TRUE; } @@ -717,7 +712,7 @@ UINT WINAPI auxGetNumDevs(void) /************************************************************************** * auxGetDevCapsW [WINMM.@] */ -MMRESULT WINAPI auxGetDevCapsW(UINT_PTR uDeviceID, LPAUXCAPSW lpCaps, UINT uSize) +UINT WINAPI auxGetDevCapsW(UINT_PTR uDeviceID, LPAUXCAPSW lpCaps, UINT uSize) { LPWINE_MLD wmld; @@ -733,7 +728,7 @@ MMRESULT WINAPI auxGetDevCapsW(UINT_PTR uDeviceID, LPAUXCAPSW lpCaps, UINT uSize /************************************************************************** * auxGetDevCapsA [WINMM.@] */ -MMRESULT WINAPI auxGetDevCapsA(UINT_PTR uDeviceID, LPAUXCAPSA lpCaps, UINT uSize) +UINT WINAPI auxGetDevCapsA(UINT_PTR uDeviceID, LPAUXCAPSA lpCaps, UINT uSize) { AUXCAPSW acW; UINT ret; @@ -759,13 +754,13 @@ MMRESULT WINAPI auxGetDevCapsA(UINT_PTR uDeviceID, LPAUXCAPSA lpCaps, UINT uSize /************************************************************************** * auxGetVolume [WINMM.@] */ -MMRESULT WINAPI auxGetVolume(UINT uDeviceID, DWORD* lpdwVolume) +UINT WINAPI auxGetVolume(UINT uDeviceID, DWORD* lpdwVolume) { LPWINE_MLD wmld; TRACE("(%04X, %p) !\n", uDeviceID, lpdwVolume); - if ((wmld = MMDRV_Get((HANDLE)uDeviceID, MMDRV_AUX, TRUE)) == NULL) + if ((wmld = MMDRV_Get(UlongToHandle(uDeviceID), MMDRV_AUX, TRUE)) == NULL) return MMSYSERR_INVALHANDLE; return MMDRV_Message(wmld, AUXDM_GETVOLUME, (DWORD_PTR)lpdwVolume, 0L); } @@ -779,7 +774,7 @@ UINT WINAPI auxSetVolume(UINT uDeviceID, DWORD dwVolume) TRACE("(%04X, %u) !\n", uDeviceID, dwVolume); - if ((wmld = MMDRV_Get((HANDLE)uDeviceID, MMDRV_AUX, TRUE)) == NULL) + if ((wmld = MMDRV_Get(UlongToHandle(uDeviceID), MMDRV_AUX, TRUE)) == NULL) return MMSYSERR_INVALHANDLE; return MMDRV_Message(wmld, AUXDM_SETVOLUME, dwVolume, 0L); } @@ -787,11 +782,11 @@ UINT WINAPI auxSetVolume(UINT uDeviceID, DWORD dwVolume) /************************************************************************** * auxOutMessage [WINMM.@] */ -MMRESULT WINAPI auxOutMessage(UINT uDeviceID, UINT uMessage, DWORD_PTR dw1, DWORD_PTR dw2) +UINT WINAPI auxOutMessage(UINT uDeviceID, UINT uMessage, DWORD_PTR dw1, DWORD_PTR dw2) { LPWINE_MLD wmld; - if ((wmld = MMDRV_Get((HANDLE)uDeviceID, MMDRV_AUX, TRUE)) == NULL) + if ((wmld = MMDRV_Get(UlongToHandle(uDeviceID), MMDRV_AUX, TRUE)) == NULL) return MMSYSERR_INVALHANDLE; return MMDRV_Message(wmld, uMessage, dw1, dw2); @@ -934,7 +929,7 @@ static LPWINE_MIDI MIDI_OutAlloc(HMIDIOUT* lphMidiOut, DWORD_PTR* lpdwCallback, /************************************************************************** * midiOutOpen [WINMM.@] */ -UINT WINAPI midiOutOpen(LPHMIDIOUT lphMidiOut, UINT uDeviceID, +MMRESULT WINAPI midiOutOpen(LPHMIDIOUT lphMidiOut, UINT_PTR uDeviceID, DWORD_PTR dwCallback, DWORD_PTR dwInstance, DWORD dwFlags) { HMIDIOUT hMidiOut; @@ -1144,7 +1139,7 @@ UINT WINAPI midiOutGetID(HMIDIOUT hMidiOut, UINT* lpuDeviceID) /************************************************************************** * midiOutMessage [WINMM.@] */ -DWORD WINAPI midiOutMessage(HMIDIOUT hMidiOut, UINT uMessage, +UINT WINAPI midiOutMessage(HMIDIOUT hMidiOut, UINT uMessage, DWORD_PTR dwParam1, DWORD_PTR dwParam2) { LPWINE_MLD wmld; @@ -1183,7 +1178,7 @@ UINT WINAPI midiInGetNumDevs(void) /************************************************************************** * midiInGetDevCapsW [WINMM.@] */ -MMRESULT WINAPI midiInGetDevCapsW(UINT_PTR uDeviceID, LPMIDIINCAPSW lpCaps, UINT uSize) +UINT WINAPI midiInGetDevCapsW(UINT_PTR uDeviceID, LPMIDIINCAPSW lpCaps, UINT uSize) { LPWINE_MLD wmld; @@ -1200,7 +1195,7 @@ MMRESULT WINAPI midiInGetDevCapsW(UINT_PTR uDeviceID, LPMIDIINCAPSW lpCaps, UINT /************************************************************************** * midiInGetDevCapsA [WINMM.@] */ -MMRESULT WINAPI midiInGetDevCapsA(UINT_PTR uDeviceID, LPMIDIINCAPSA lpCaps, UINT uSize) +UINT WINAPI midiInGetDevCapsA(UINT_PTR uDeviceID, LPMIDIINCAPSA lpCaps, UINT uSize) { MIDIINCAPSW micW; UINT ret; @@ -1225,7 +1220,7 @@ MMRESULT WINAPI midiInGetDevCapsA(UINT_PTR uDeviceID, LPMIDIINCAPSA lpCaps, UINT /************************************************************************** * midiInOpen [WINMM.@] */ -UINT WINAPI midiInOpen(HMIDIIN* lphMidiIn, UINT uDeviceID, +MMRESULT WINAPI midiInOpen(HMIDIIN* lphMidiIn, UINT_PTR uDeviceID, DWORD_PTR dwCallback, DWORD_PTR dwInstance, DWORD dwFlags) { HANDLE hMidiIn; @@ -1403,7 +1398,7 @@ UINT WINAPI midiInGetID(HMIDIIN hMidiIn, UINT* lpuDeviceID) /************************************************************************** * midiInMessage [WINMM.@] */ -DWORD WINAPI midiInMessage(HMIDIIN hMidiIn, UINT uMessage, +UINT WINAPI midiInMessage(HMIDIIN hMidiIn, UINT uMessage, DWORD_PTR dwParam1, DWORD_PTR dwParam2) { LPWINE_MLD wmld; @@ -1471,7 +1466,7 @@ static BOOL MMSYSTEM_GetMidiStream(HMIDISTRM hMidiStrm, WINE_MIDIStream** lpMidi return FALSE; } - *lpMidiStrm = (WINE_MIDIStream*)lpwm->mod.rgIds.dwStreamID; + *lpMidiStrm = (WINE_MIDIStream*)(ULONG_PTR)lpwm->mod.rgIds.dwStreamID; return *lpMidiStrm != NULL; } @@ -1586,7 +1581,7 @@ static BOOL MMSYSTEM_MidiStream_MessageHandler(WINE_MIDIStream* lpMidiStrm, LPWI #endif if (((LPMIDIEVENT)lpData)->dwStreamID != 0 && ((LPMIDIEVENT)lpData)->dwStreamID != 0xFFFFFFFF && - ((LPMIDIEVENT)lpData)->dwStreamID != (DWORD)lpMidiStrm) { + ((LPMIDIEVENT)lpData)->dwStreamID != PtrToLong(lpMidiStrm)) { FIXME("Dropping bad %s lpMidiHdr (streamID=%08x)\n", (lpMidiHdr->dwFlags & MHDR_ISSTRM) ? "stream" : "regular", ((LPMIDIEVENT)lpData)->dwStreamID); @@ -1805,7 +1800,7 @@ MMRESULT WINAPI midiStreamOpen(HMIDISTRM* lphMidiStrm, LPUINT lpuDeviceID, lpMidiStrm->dwTimeDiv = 480; /* 480 is 120 quarter notes per minute *//* FIXME ??*/ lpMidiStrm->dwPositionMS = 0; - mosm.dwStreamID = (DWORD)lpMidiStrm; + mosm.dwStreamID = PtrToLong(lpMidiStrm); /* FIXME: the correct value is not allocated yet for MAPPER */ mosm.wDeviceID = *lpuDeviceID; lpwm = MIDI_OutAlloc(&hMidiOut, &dwCallback, &dwInstance, &fdwOpen, 1, &mosm); @@ -2113,7 +2108,7 @@ UINT WINAPI waveOutGetNumDevs(void) /************************************************************************** * waveOutGetDevCapsA [WINMM.@] */ -MMRESULT WINAPI waveOutGetDevCapsA(UINT_PTR uDeviceID, LPWAVEOUTCAPSA lpCaps, +UINT WINAPI waveOutGetDevCapsA(UINT_PTR uDeviceID, LPWAVEOUTCAPSA lpCaps, UINT uSize) { WAVEOUTCAPSW wocW; @@ -2150,6 +2145,12 @@ UINT WINAPI waveOutGetDevCapsW(UINT_PTR uDeviceID, LPWAVEOUTCAPSW lpCaps, if (lpCaps == NULL) return MMSYSERR_INVALPARAM; + if (uDeviceID == WAVE_MAPPER) + { + FIXME("Support WAVE_MAPPER\n"); + uDeviceID = 0; + } + if ((wmld = MMDRV_Get((HANDLE)uDeviceID, MMDRV_WAVEOUT, TRUE)) == NULL) return MMSYSERR_BADDEVICEID; @@ -2500,7 +2501,7 @@ UINT WINAPI waveOutGetID(HWAVEOUT hWaveOut, UINT* lpuDeviceID) /************************************************************************** * waveOutMessage [WINMM.@] */ -DWORD WINAPI waveOutMessage(HWAVEOUT hWaveOut, UINT uMessage, +UINT WINAPI waveOutMessage(HWAVEOUT hWaveOut, UINT uMessage, DWORD_PTR dwParam1, DWORD_PTR dwParam2) { LPWINE_MLD wmld; @@ -2535,7 +2536,7 @@ UINT WINAPI waveInGetNumDevs(void) /************************************************************************** * waveInGetDevCapsW [WINMM.@] */ -MMRESULT WINAPI waveInGetDevCapsW(UINT_PTR uDeviceID, LPWAVEINCAPSW lpCaps, UINT uSize) +UINT WINAPI waveInGetDevCapsW(UINT_PTR uDeviceID, LPWAVEINCAPSW lpCaps, UINT uSize) { LPWINE_MLD wmld; @@ -2543,6 +2544,13 @@ MMRESULT WINAPI waveInGetDevCapsW(UINT_PTR uDeviceID, LPWAVEINCAPSW lpCaps, UINT if (lpCaps == NULL) return MMSYSERR_INVALPARAM; + if (uDeviceID == WAVE_MAPPER) + { + FIXME("Support WAVE_MAPPER\n"); + uDeviceID = 0; + } + + if ((wmld = MMDRV_Get((HANDLE)uDeviceID, MMDRV_WAVEIN, TRUE)) == NULL) return MMSYSERR_BADDEVICEID; @@ -2768,7 +2776,7 @@ UINT WINAPI waveInGetID(HWAVEIN hWaveIn, UINT* lpuDeviceID) /************************************************************************** * waveInMessage [WINMM.@] */ -DWORD WINAPI waveInMessage(HWAVEIN hWaveIn, UINT uMessage, +UINT WINAPI waveInMessage(HWAVEIN hWaveIn, UINT uMessage, DWORD_PTR dwParam1, DWORD_PTR dwParam2) { LPWINE_MLD wmld; diff --git a/reactos/dll/win32/winmm/winmm.rbuild b/reactos/dll/win32/winmm/winmm.rbuild index 1231b37ddcc..52688daf28b 100644 --- a/reactos/dll/win32/winmm/winmm.rbuild +++ b/reactos/dll/win32/winmm/winmm.rbuild @@ -21,9 +21,9 @@ mci.c mmio.c playsound.c + registry.c time.c winmm.c - registry.c winmm_res.rc diff --git a/reactos/dll/win32/winmm/winmm_Br.rc b/reactos/dll/win32/winmm/winmm_Br.rc index b559becf688..e410c4244e7 100644 --- a/reactos/dll/win32/winmm/winmm_Br.rc +++ b/reactos/dll/win32/winmm/winmm_Br.rc @@ -14,7 +14,7 @@ * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ STRINGTABLE LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN diff --git a/reactos/dll/win32/winmm/winmm_Cs.rc b/reactos/dll/win32/winmm/winmm_Cs.rc index bab91ccf19f..6a9fe0fd2cc 100644 --- a/reactos/dll/win32/winmm/winmm_Cs.rc +++ b/reactos/dll/win32/winmm/winmm_Cs.rc @@ -15,7 +15,7 @@ * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ STRINGTABLE LANGUAGE LANG_CZECH, SUBLANG_DEFAULT diff --git a/reactos/dll/win32/winmm/winmm_De.rc b/reactos/dll/win32/winmm/winmm_De.rc index 3e32162176c..e6d1c9d1283 100644 --- a/reactos/dll/win32/winmm/winmm_De.rc +++ b/reactos/dll/win32/winmm/winmm_De.rc @@ -13,7 +13,7 @@ * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ STRINGTABLE LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL diff --git a/reactos/dll/win32/winmm/winmm_En.rc b/reactos/dll/win32/winmm/winmm_En.rc index a744bb86a03..006440bb5d1 100644 --- a/reactos/dll/win32/winmm/winmm_En.rc +++ b/reactos/dll/win32/winmm/winmm_En.rc @@ -13,7 +13,7 @@ * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ STRINGTABLE LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US diff --git a/reactos/dll/win32/winmm/winmm_Es.rc b/reactos/dll/win32/winmm/winmm_Es.rc index ff6d106f13e..b98d28cfdd9 100644 --- a/reactos/dll/win32/winmm/winmm_Es.rc +++ b/reactos/dll/win32/winmm/winmm_Es.rc @@ -14,7 +14,7 @@ * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ STRINGTABLE LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL diff --git a/reactos/dll/win32/winmm/winmm_Fr.rc b/reactos/dll/win32/winmm/winmm_Fr.rc index a5dee87675e..023ebf1b640 100644 --- a/reactos/dll/win32/winmm/winmm_Fr.rc +++ b/reactos/dll/win32/winmm/winmm_Fr.rc @@ -16,7 +16,7 @@ * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL diff --git a/reactos/dll/win32/winmm/winmm_Hu.rc b/reactos/dll/win32/winmm/winmm_Hu.rc index 8e46f2e406a..45a2b80e52d 100644 --- a/reactos/dll/win32/winmm/winmm_Hu.rc +++ b/reactos/dll/win32/winmm/winmm_Hu.rc @@ -14,7 +14,7 @@ * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ STRINGTABLE LANGUAGE LANG_HUNGARIAN, SUBLANG_DEFAULT diff --git a/reactos/dll/win32/winmm/winmm_Id.rc b/reactos/dll/win32/winmm/winmm_Id.rc index 379d36492a1..8729ef34f6b 100644 --- a/reactos/dll/win32/winmm/winmm_Id.rc +++ b/reactos/dll/win32/winmm/winmm_Id.rc @@ -13,7 +13,7 @@ * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ STRINGTABLE LANGUAGE LANG_INDONESIAN, SUBLANG_DEFAULT diff --git a/reactos/dll/win32/winmm/winmm_It.rc b/reactos/dll/win32/winmm/winmm_It.rc index 68f6c5ca21a..2561e83e57f 100644 --- a/reactos/dll/win32/winmm/winmm_It.rc +++ b/reactos/dll/win32/winmm/winmm_It.rc @@ -14,7 +14,7 @@ * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ STRINGTABLE LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL diff --git a/reactos/dll/win32/winmm/winmm_Ja.rc b/reactos/dll/win32/winmm/winmm_Ja.rc index e2b8c4e234d..257cead1ad3 100644 --- a/reactos/dll/win32/winmm/winmm_Ja.rc +++ b/reactos/dll/win32/winmm/winmm_Ja.rc @@ -13,7 +13,7 @@ * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ STRINGTABLE LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT diff --git a/reactos/dll/win32/winmm/winmm_Nl.rc b/reactos/dll/win32/winmm/winmm_Nl.rc index b34b1b3788b..f8b6305da06 100644 --- a/reactos/dll/win32/winmm/winmm_Nl.rc +++ b/reactos/dll/win32/winmm/winmm_Nl.rc @@ -13,7 +13,7 @@ * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ STRINGTABLE LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL diff --git a/reactos/dll/win32/winmm/winmm_No.rc b/reactos/dll/win32/winmm/winmm_No.rc index c46f93a5764..1a6d9ebf596 100644 --- a/reactos/dll/win32/winmm/winmm_No.rc +++ b/reactos/dll/win32/winmm/winmm_No.rc @@ -17,7 +17,7 @@ * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ STRINGTABLE LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL diff --git a/reactos/dll/win32/winmm/winmm_Pl.rc b/reactos/dll/win32/winmm/winmm_Pl.rc index a1bb8e5d00e..a3aa550a15a 100644 --- a/reactos/dll/win32/winmm/winmm_Pl.rc +++ b/reactos/dll/win32/winmm/winmm_Pl.rc @@ -13,7 +13,7 @@ * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ STRINGTABLE LANGUAGE LANG_POLISH, SUBLANG_DEFAULT diff --git a/reactos/dll/win32/winmm/winmm_Pt.rc b/reactos/dll/win32/winmm/winmm_Pt.rc index 5b6227f3c9b..580e024f0ba 100644 --- a/reactos/dll/win32/winmm/winmm_Pt.rc +++ b/reactos/dll/win32/winmm/winmm_Pt.rc @@ -14,7 +14,7 @@ * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ STRINGTABLE LANGUAGE LANG_PORTUGUESE, SUBLANG_PORTUGUESE_PORTUGAL diff --git a/reactos/dll/win32/winmm/winmm_Ru.rc b/reactos/dll/win32/winmm/winmm_Ru.rc index d25fc143110..5f272796ec3 100644 --- a/reactos/dll/win32/winmm/winmm_Ru.rc +++ b/reactos/dll/win32/winmm/winmm_Ru.rc @@ -13,7 +13,7 @@ * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ STRINGTABLE LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT diff --git a/reactos/dll/win32/winmm/winmm_Si.rc b/reactos/dll/win32/winmm/winmm_Si.rc index f375a753144..e382d98d9a0 100644 --- a/reactos/dll/win32/winmm/winmm_Si.rc +++ b/reactos/dll/win32/winmm/winmm_Si.rc @@ -13,7 +13,7 @@ * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ diff --git a/reactos/dll/win32/winmm/winmm_Sk.rc b/reactos/dll/win32/winmm/winmm_Sk.rc index ecc3654b7b4..1c57db18b7f 100644 --- a/reactos/dll/win32/winmm/winmm_Sk.rc +++ b/reactos/dll/win32/winmm/winmm_Sk.rc @@ -13,7 +13,7 @@ * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ STRINGTABLE LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT diff --git a/reactos/dll/win32/winmm/winmm_Uk.rc b/reactos/dll/win32/winmm/winmm_Uk.rc index ab8e6eaf4e6..fa23cc7b959 100644 --- a/reactos/dll/win32/winmm/winmm_Uk.rc +++ b/reactos/dll/win32/winmm/winmm_Uk.rc @@ -13,7 +13,7 @@ * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ STRINGTABLE LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT diff --git a/reactos/dll/win32/winmm/winmm_res.rc b/reactos/dll/win32/winmm/winmm_res.rc index 5108329e2fd..0c5daefceca 100644 --- a/reactos/dll/win32/winmm/winmm_res.rc +++ b/reactos/dll/win32/winmm/winmm_res.rc @@ -14,7 +14,7 @@ * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * * Note: Win 9x (and of course Win 3.x) store their resources in MMSYSTEM.DLL * Wine stores all resources in WINMM.DLL (as NT does) From c2da24df734ef1b02cbf56d979712bd62a8cf7d8 Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Mon, 9 Nov 2009 08:56:59 +0000 Subject: [PATCH 090/286] Fix ws2_32 64bit build (1 of 2) svn path=/branches/ros-amd64-bringup/; revision=44044 --- reactos/include/psdk/ws2spi.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/reactos/include/psdk/ws2spi.h b/reactos/include/psdk/ws2spi.h index b02ba931daa..c34e0b85585 100644 --- a/reactos/include/psdk/ws2spi.h +++ b/reactos/include/psdk/ws2spi.h @@ -144,15 +144,15 @@ typedef BOOL (WSPAPI *LPWPUCLOSEEVENT)(WSAEVENT,LPINT); typedef INT (WSPAPI *LPWPUCLOSESOCKETHANDLE)(SOCKET,LPINT); typedef INT (WSPAPI *LPWPUCLOSETHREAD)(LPWSATHREADID,LPINT); typedef WSAEVENT (WSPAPI *LPWPUCREATEEVENT)(LPINT); -typedef SOCKET (WSPAPI *LPWPUCREATESOCKETHANDLE)(DWORD,DWORD,LPINT); +typedef SOCKET (WSPAPI *LPWPUCREATESOCKETHANDLE)(DWORD,DWORD_PTR,LPINT); typedef INT (WSPAPI *LPWPUFDISSET)(SOCKET,LPFD_SET); typedef INT (WSPAPI *LPWPUGETPROVIDERPATH)(LPGUID,LPWSTR,LPINT,LPINT); typedef SOCKET (WSPAPI *LPWPUMODIFYIFSHANDLE)(DWORD,SOCKET,LPINT); typedef INT (WSPAPI *LPWPUOPENCURRENTTHREAD)(LPWSATHREADID,LPINT); typedef BOOL (WSPAPI *LPWPUPOSTMESSAGE)(HWND,UINT,WPARAM,LPARAM); -typedef INT (WSPAPI *LPWPUQUERYBLOCKINGCALLBACK)(DWORD,LPBLOCKINGCALLBACK FAR*,LPDWORD,LPINT); -typedef INT (WSPAPI *LPWPUQUERYSOCKETHANDLECONTEXT)(SOCKET,LPDWORD,LPINT); -typedef INT (WSPAPI *LPWPUQUEUEAPC)(LPWSATHREADID,LPWSAUSERAPC,DWORD,LPINT); +typedef INT (WSPAPI *LPWPUQUERYBLOCKINGCALLBACK)(DWORD,LPBLOCKINGCALLBACK FAR*,PDWORD_PTR,LPINT); +typedef INT (WSPAPI *LPWPUQUERYSOCKETHANDLECONTEXT)(SOCKET,PDWORD_PTR,LPINT); +typedef INT (WSPAPI *LPWPUQUEUEAPC)(LPWSATHREADID,LPWSAUSERAPC,DWORD_PTR,LPINT); typedef BOOL (WSPAPI *LPWPURESETEVENT)(WSAEVENT,LPINT); typedef BOOL (WSPAPI *LPWPUSETEVENT)(WSAEVENT,LPINT); typedef INT (WSAAPI *LPNSPSTARTUP)(LPGUID,LPNSP_ROUTINE); From 4e273afd0fd2d8b54274e1b93999b7ee26f3a64b Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Mon, 9 Nov 2009 08:57:37 +0000 Subject: [PATCH 091/286] Fix ws2_32 64bit build (2 of 2) svn path=/branches/ros-amd64-bringup/; revision=44045 --- reactos/dll/win32/ws2_32/include/upcall.h | 8 ++++---- reactos/dll/win32/ws2_32/misc/async.c | 2 -- reactos/dll/win32/ws2_32/misc/upcall.c | 8 ++++---- reactos/dll/win32/ws2_32/ws2_32.rbuild | 2 +- 4 files changed, 9 insertions(+), 11 deletions(-) diff --git a/reactos/dll/win32/ws2_32/include/upcall.h b/reactos/dll/win32/ws2_32/include/upcall.h index 16ec65ad58b..25404f4b9e5 100644 --- a/reactos/dll/win32/ws2_32/include/upcall.h +++ b/reactos/dll/win32/ws2_32/include/upcall.h @@ -34,7 +34,7 @@ SOCKET WSPAPI WPUCreateSocketHandle( IN DWORD dwCatalogEntryId, - IN DWORD dwContext, + IN DWORD_PTR dwContext, OUT LPINT lpErrno); int @@ -69,14 +69,14 @@ WSPAPI WPUQueryBlockingCallback( IN DWORD dwCatalogEntryId, OUT LPBLOCKINGCALLBACK FAR* lplpfnCallback, - OUT LPDWORD lpdwContext, + OUT PDWORD_PTR lpdwContext, OUT LPINT lpErrno); INT WSPAPI WPUQuerySocketHandleContext( IN SOCKET s, - OUT LPDWORD lpContext, + OUT PDWORD_PTR lpContext, OUT LPINT lpErrno); INT @@ -84,7 +84,7 @@ WSPAPI WPUQueueApc( IN LPWSATHREADID lpThreadId, IN LPWSAUSERAPC lpfnUserApc, - IN DWORD dwContext, + IN DWORD_PTR dwContext, OUT LPINT lpErrno); BOOL diff --git a/reactos/dll/win32/ws2_32/misc/async.c b/reactos/dll/win32/ws2_32/misc/async.c index 558960caea0..a130e7a4847 100644 --- a/reactos/dll/win32/ws2_32/misc/async.c +++ b/reactos/dll/win32/ws2_32/misc/async.c @@ -111,8 +111,6 @@ typedef struct protoent WS_protoent; #endif #endif -#define CALLBACK __stdcall - #include "wine/winbase16.h" #include "windef.h" #include "winbase.h" diff --git a/reactos/dll/win32/ws2_32/misc/upcall.c b/reactos/dll/win32/ws2_32/misc/upcall.c index 3ba3b410431..ad0ce94963a 100644 --- a/reactos/dll/win32/ws2_32/misc/upcall.c +++ b/reactos/dll/win32/ws2_32/misc/upcall.c @@ -72,7 +72,7 @@ WPUCreateEvent(OUT LPINT lpErrno) SOCKET WSPAPI WPUCreateSocketHandle(IN DWORD dwCatalogEntryId, - IN DWORD dwContext, + IN DWORD_PTR dwContext, OUT LPINT lpErrno) { UNIMPLEMENTED @@ -167,7 +167,7 @@ INT WSPAPI WPUQueryBlockingCallback(IN DWORD dwCatalogEntryId, OUT LPBLOCKINGCALLBACK FAR* lplpfnCallback, - OUT LPDWORD lpdwContext, + OUT PDWORD_PTR lpdwContext, OUT LPINT lpErrno) { UNIMPLEMENTED @@ -182,7 +182,7 @@ WPUQueryBlockingCallback(IN DWORD dwCatalogEntryId, INT WSPAPI WPUQuerySocketHandleContext(IN SOCKET s, - OUT LPDWORD lpContext, + OUT PDWORD_PTR lpContext, OUT LPINT lpErrno) { UNIMPLEMENTED @@ -198,7 +198,7 @@ INT WSPAPI WPUQueueApc(IN LPWSATHREADID lpThreadId, IN LPWSAUSERAPC lpfnUserApc, - IN DWORD dwContext, + IN DWORD_PTR dwContext, OUT LPINT lpErrno) { UNIMPLEMENTED diff --git a/reactos/dll/win32/ws2_32/ws2_32.rbuild b/reactos/dll/win32/ws2_32/ws2_32.rbuild index 849ed1c88e0..c249ae90f3c 100644 --- a/reactos/dll/win32/ws2_32/ws2_32.rbuild +++ b/reactos/dll/win32/ws2_32/ws2_32.rbuild @@ -1,4 +1,4 @@ - + include include/reactos/wine From 8413bc04b7c2b262d2d2dc4f6f997822c29a3d1f Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 9 Nov 2009 13:42:36 +0000 Subject: [PATCH 092/286] fix build of ntoskrnl svn path=/branches/ros-amd64-bringup/; revision=44047 --- reactos/ntoskrnl/include/internal/amd64/mm.h | 4 ++-- reactos/ntoskrnl/mm/amd64/page.c | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/reactos/ntoskrnl/include/internal/amd64/mm.h b/reactos/ntoskrnl/include/internal/amd64/mm.h index b99ec6ccc96..56cb62a4b43 100644 --- a/reactos/ntoskrnl/include/internal/amd64/mm.h +++ b/reactos/ntoskrnl/include/internal/amd64/mm.h @@ -17,8 +17,8 @@ MmGetPageDirectory(VOID) #define PAGE_MASK(x) ((x)&(~0xfff)) #define PAE_PAGE_MASK(x) ((x)&(~0xfffLL)) -#define MI_HYPER_SPACE_START 0xFFFFF70000000000ULL -#define MI_HYPER_SPACE_END 0xFFFFF77FFFFFFFFFULL +#define HYPER_SPACE 0xFFFFF70000000000ULL +#define HYPER_SPACE_END 0xFFFFF77FFFFFFFFFULL /* Base addresses of PTE and PDE */ //#define PAGETABLE_MAP PTE_BASE diff --git a/reactos/ntoskrnl/mm/amd64/page.c b/reactos/ntoskrnl/mm/amd64/page.c index 47bc5054121..fbf7bdca8fd 100644 --- a/reactos/ntoskrnl/mm/amd64/page.c +++ b/reactos/ntoskrnl/mm/amd64/page.c @@ -32,8 +32,8 @@ BOOLEAN FORCEINLINE MiIsHyperspaceAddress(PVOID Address) { - return ((ULONG64)Address >= MI_HYPER_SPACE_START && - (ULONG64)Address <= MI_HYPER_SPACE_END); + return ((ULONG64)Address >= HYPER_SPACE && + (ULONG64)Address <= HYPER_SPACE_END); } VOID @@ -497,7 +497,7 @@ MmInitGlobalKernelPageDirectory(VOID) for (i = VAtoPXI(MmSystemRangeStart); i < 512; i++) { if ((i < VAtoPXI(PTE_BASE) || i > VAtoPXI(PTE_TOP)) && - (i < VAtoPXI(MI_HYPER_SPACE_START) || i > VAtoPXI(MI_HYPER_SPACE_END)) && + (i < VAtoPXI(HYPER_SPACE) || i > VAtoPXI(HYPER_SPACE_END)) && MmGlobalKernelPageDirectory[i] == 0 && CurrentPageDirectory[i] != 0) { From ca606032fe01494a0e6ac11d0aa09e5e48105a6b Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 9 Nov 2009 19:49:47 +0000 Subject: [PATCH 093/286] [NDK] - Add KEXCEPTION_FRAME offsets svn path=/branches/ros-amd64-bringup/; revision=44052 --- reactos/include/ndk/amd64/asm.h | 36 +++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/reactos/include/ndk/amd64/asm.h b/reactos/include/ndk/amd64/asm.h index 0636261409a..a43da5ffb50 100644 --- a/reactos/include/ndk/amd64/asm.h +++ b/reactos/include/ndk/amd64/asm.h @@ -191,6 +191,42 @@ Author: #define CONTEXT_LastExceptionToRip 0x4c0 #define CONTEXT_LastExceptionFromRip 0x4c8 +// +// KEXCEPTION_FRAME offsets +// +#define KEXCEPTION_FRAME_P1Home 0x000 +#define KEXCEPTION_FRAME_P2Home 0x008 +#define KEXCEPTION_FRAME_P3Home 0x010 +#define KEXCEPTION_FRAME_P4Home 0x018 +#define KEXCEPTION_FRAME_P5 0x020 +#define KEXCEPTION_FRAME_InitialStack 0x028 +#define KEXCEPTION_FRAME_Xmm6 0x030 +#define KEXCEPTION_FRAME_Xmm7 0x040 +#define KEXCEPTION_FRAME_Xmm8 0x050 +#define KEXCEPTION_FRAME_Xmm9 0x060 +#define KEXCEPTION_FRAME_Xmm10 0x070 +#define KEXCEPTION_FRAME_Xmm11 0x080 +#define KEXCEPTION_FRAME_Xmm12 0x090 +#define KEXCEPTION_FRAME_Xmm13 0x0A0 +#define KEXCEPTION_FRAME_Xmm14 0x0B0 +#define KEXCEPTION_FRAME_Xmm15 0x0C0 +#define KEXCEPTION_FRAME_TrapFrame 0x0D0 +#define KEXCEPTION_FRAME_CallbackStack 0x0D8 +#define KEXCEPTION_FRAME_OutputBuffer 0x0E0 +#define KEXCEPTION_FRAME_OutputLength 0x0E8 +#define KEXCEPTION_FRAME_MxCsr 0x0F0 +#define KEXCEPTION_FRAME_Rbp 0x0F8 +#define KEXCEPTION_FRAME_Rbx 0x100 +#define KEXCEPTION_FRAME_Rdi 0x108 +#define KEXCEPTION_FRAME_Rsi 0x110 +#define KEXCEPTION_FRAME_R12 0x118 +#define KEXCEPTION_FRAME_R13 0x120 +#define KEXCEPTION_FRAME_R14 0x128 +#define KEXCEPTION_FRAME_R15 0x130 +#define KEXCEPTION_FRAME_Return 0x138 +#define SIZE_KEXCEPTION_FRAME 0x140 + + // // EXCEPTION_RECORD Offsets // From b2917388629539ad0735b50a8e9ccfc6a52151a3 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 9 Nov 2009 21:03:57 +0000 Subject: [PATCH 094/286] [NDK] - Add KEXCEPTION_FRAME svn path=/branches/ros-amd64-bringup/; revision=44053 --- reactos/include/ndk/amd64/ketypes.h | 36 +++++++++++++++++++++++++++-- 1 file changed, 34 insertions(+), 2 deletions(-) diff --git a/reactos/include/ndk/amd64/ketypes.h b/reactos/include/ndk/amd64/ketypes.h index b75c9bf9d74..1b945e70144 100644 --- a/reactos/include/ndk/amd64/ketypes.h +++ b/reactos/include/ndk/amd64/ketypes.h @@ -807,9 +807,41 @@ typedef struct _KTSS64 #define PKTSS PKTSS64 // -// i386 CPUs don't have exception frames +// KEXCEPTION_FRAME // -typedef struct _KEXCEPTION_FRAME KEXCEPTION_FRAME, *PKEXCEPTION_FRAME; +typedef struct _KEXCEPTION_FRAME +{ + UINT64 P1Home; + UINT64 P2Home; + UINT64 P3Home; + UINT64 P4Home; + UINT64 P5; + UINT64 InitialStack; + M128A Xmm6; + M128A Xmm7; + M128A Xmm8; + M128A Xmm9; + M128A Xmm10; + M128A Xmm11; + M128A Xmm12; + M128A Xmm13; + M128A Xmm14; + M128A Xmm15; + UINT64 TrapFrame; + UINT64 CallbackStack; + UINT64 OutputBuffer; + UINT64 OutputLength; + UINT64 MxCsr; + UINT64 Rbp; + UINT64 Rbx; + UINT64 Rdi; + UINT64 Rsi; + UINT64 R12; + UINT64 R13; + UINT64 R14; + UINT64 R15; + UINT64 Return; +} KEXCEPTION_FRAME, *PKEXCEPTION_FRAME; // // Inline function to get current KPRCB From 906cec399e97d1eca578d1ffa671b328dff3bbea Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 9 Nov 2009 21:44:29 +0000 Subject: [PATCH 095/286] [KE] - Fix KeContextToTrapFrame and KeTrapFrameToContext to use the ExceptionFrame and set CS/SS for CONTEXT_CONTROL flag - Implement _InternalDispatchException, that sets up the ExceptionRecord and ExceptionFrame and calls KiDispatchException This fixes wrong register value display in WinDbg svn path=/branches/ros-amd64-bringup/; revision=44055 --- reactos/ntoskrnl/ke/amd64/context.c | 56 +++++++++-- reactos/ntoskrnl/ke/amd64/trap.S | 149 ++++++++++++++++++++-------- 2 files changed, 155 insertions(+), 50 deletions(-) diff --git a/reactos/ntoskrnl/ke/amd64/context.c b/reactos/ntoskrnl/ke/amd64/context.c index 7466928ba95..38395705848 100644 --- a/reactos/ntoskrnl/ke/amd64/context.c +++ b/reactos/ntoskrnl/ke/amd64/context.c @@ -42,6 +42,10 @@ KeContextToTrapFrame(IN PCONTEXT Context, TrapFrame->R9 = Context->R9; TrapFrame->R10 = Context->R10; TrapFrame->R11 = Context->R11; + ExceptionFrame->R12 = Context->R12; + ExceptionFrame->R13 = Context->R13; + ExceptionFrame->R14 = Context->R14; + ExceptionFrame->R15 = Context->R15; } /* Handle floating point registers */ @@ -54,11 +58,30 @@ KeContextToTrapFrame(IN PCONTEXT Context, TrapFrame->Xmm3 = Context->Xmm3; TrapFrame->Xmm4 = Context->Xmm4; TrapFrame->Xmm5 = Context->Xmm5; + ExceptionFrame->Xmm6 = Context->Xmm6; + ExceptionFrame->Xmm6 = Context->Xmm6; + ExceptionFrame->Xmm6 = Context->Xmm6; + ExceptionFrame->Xmm6 = Context->Xmm6; + ExceptionFrame->Xmm6 = Context->Xmm6; } /* Handle control registers */ if ((Context->ContextFlags & CONTEXT_CONTROL) == CONTEXT_CONTROL) { + /* Check if this was a Kernel Trap */ + if (Context->SegCs == KGDT_64_R0_CODE) + { + /* Set valid selectors */ + TrapFrame->SegCs = KGDT_64_R0_CODE; + TrapFrame->SegSs = KGDT_64_R0_SS; + } + else + { + /* Copy selectors */ + TrapFrame->SegCs = Context->SegCs; + TrapFrame->SegSs = Context->SegSs; + } + /* RIP, RSP, EFLAGS */ TrapFrame->Rip = Context->Rip; TrapFrame->Rsp = Context->Rsp; @@ -72,22 +95,18 @@ KeContextToTrapFrame(IN PCONTEXT Context, if (Context->SegCs == KGDT_64_R0_CODE) { /* Set valid selectors */ - TrapFrame->SegCs = KGDT_64_R0_CODE; TrapFrame->SegDs = KGDT_64_DATA | RPL_MASK; TrapFrame->SegEs = KGDT_64_DATA | RPL_MASK; TrapFrame->SegFs = KGDT_32_R3_TEB; TrapFrame->SegGs = KGDT_64_DATA | RPL_MASK; - TrapFrame->SegSs = KGDT_64_R0_SS; } else { /* Copy selectors */ - TrapFrame->SegCs = Context->SegCs; TrapFrame->SegDs = Context->SegDs; TrapFrame->SegEs = Context->SegEs; TrapFrame->SegFs = Context->SegFs; TrapFrame->SegGs = Context->SegGs; - TrapFrame->SegSs = Context->SegSs; } } @@ -134,6 +153,10 @@ KeTrapFrameToContext(IN PKTRAP_FRAME TrapFrame, Context->R9 = TrapFrame->R9; Context->R10 = TrapFrame->R10; Context->R11 = TrapFrame->R11; + Context->R12 = ExceptionFrame->R12; + Context->R13 = ExceptionFrame->R13; + Context->R14 = ExceptionFrame->R14; + Context->R15 = ExceptionFrame->R15; } /* Handle floating point registers */ @@ -146,12 +169,31 @@ KeTrapFrameToContext(IN PKTRAP_FRAME TrapFrame, Context->Xmm3 = TrapFrame->Xmm3; Context->Xmm4 = TrapFrame->Xmm4; Context->Xmm5 = TrapFrame->Xmm5; + Context->Xmm6 = ExceptionFrame->Xmm6; + Context->Xmm6 = ExceptionFrame->Xmm6; + Context->Xmm6 = ExceptionFrame->Xmm6; + Context->Xmm6 = ExceptionFrame->Xmm6; + Context->Xmm6 = ExceptionFrame->Xmm6; } /* Handle control registers */ if ((Context->ContextFlags & CONTEXT_CONTROL) == CONTEXT_CONTROL) { - /* RIP, RSP, EFLAGS */ + /* Check if this was a Kernel Trap */ + if (TrapFrame->SegCs == KGDT_64_R0_CODE) + { + /* Set valid selectors */ + Context->SegCs = KGDT_64_R0_CODE; + Context->SegSs = KGDT_64_R0_SS; + } + else + { + /* Copy selectors */ + Context->SegCs = TrapFrame->SegCs; + Context->SegSs = TrapFrame->SegSs; + } + + /* Copy RIP, RSP, EFLAGS */ Context->Rip = TrapFrame->Rip; Context->Rsp = TrapFrame->Rsp; Context->EFlags = TrapFrame->EFlags; @@ -164,22 +206,18 @@ KeTrapFrameToContext(IN PKTRAP_FRAME TrapFrame, if (TrapFrame->SegCs == KGDT_64_R0_CODE) { /* Set valid selectors */ - Context->SegCs = KGDT_64_R0_CODE; Context->SegDs = KGDT_64_DATA | RPL_MASK; Context->SegEs = KGDT_64_DATA | RPL_MASK; Context->SegFs = KGDT_32_R3_TEB; Context->SegGs = KGDT_64_DATA | RPL_MASK; - Context->SegSs = KGDT_64_R0_SS; } else { /* Copy selectors */ - Context->SegCs = TrapFrame->SegCs; Context->SegDs = TrapFrame->SegDs; Context->SegEs = TrapFrame->SegEs; Context->SegFs = TrapFrame->SegFs; Context->SegGs = TrapFrame->SegGs; - Context->SegSs = TrapFrame->SegSs; } } diff --git a/reactos/ntoskrnl/ke/amd64/trap.S b/reactos/ntoskrnl/ke/amd64/trap.S index 124b9553ad6..382283f9234 100644 --- a/reactos/ntoskrnl/ke/amd64/trap.S +++ b/reactos/ntoskrnl/ke/amd64/trap.S @@ -35,7 +35,30 @@ _MsgInvalidOpcodeFault: /* Helper Macros *************************************************************/ -#define TRAPFLAG_SYSTEMSERVICE 1 +#define TRAPFLAG_VOLATILES 0x01 +#define TRAPFLAG_NONVOLATILES 0x02 +#define TRAPFLAG_XMM 0x04 +#define TRAPFLAG_SEGMENTS 0x08 +#define TRAPFLAG_DEBUG 0x10 + +#define TRAPFLAG_SYSTEMSERVICE (TRAPFLAG_VOLATILES|TRAPFLAG_DEBUG) +#define TRAPFLAG_ALL 0xff + +/* + * Stack Layout: + * |-------------------| + * | KTRAP_FRAME | + * |-------------------| <- rbp + * | 0x20 bytes params | + * |-------------------| + * | KEXCEPTION_FRAME | + * |-------------------| + * | EXCEPTION_RECORD | + * |-------------------| + * | 0x28 bytes params | + * |-------------------| <- rsp + * + */ /* * ENTER_TRAP_FRAME - Allocate SIZE_KTRAP_FRAME and save registers to it @@ -63,12 +86,14 @@ _MsgInvalidOpcodeFault: // KTRAP_FRAME_P4Home // KTRAP_FRAME_P5 -.if (TRAPFLAGS & TRAPFLAG_SYSTEMSERVICE) +.if (TRAPFLAGS & TRAPFLAG_NONVOLATILES) /* Save non-volatile registers */ mov [rbp + KTRAP_FRAME_Rbx], rbx mov [rbp + KTRAP_FRAME_Rdi], rdi mov [rbp + KTRAP_FRAME_Rsi], rsi -.else +.endif + +.if (TRAPFLAGS & TRAPFLAG_VOLATILES) /* Save volatile registers */ mov [rbp + KTRAP_FRAME_Rax], rax mov [rbp + KTRAP_FRAME_Rcx], rcx @@ -77,7 +102,9 @@ _MsgInvalidOpcodeFault: mov [rbp + KTRAP_FRAME_R9], r9 mov [rbp + KTRAP_FRAME_R10], r10 mov [rbp + KTRAP_FRAME_R11], r11 +.endif +.if (TRAPFLAGS & TRAPFLAG_XMM) /* Save xmm registers */ // movdqa [rbp + KTRAP_FRAME_Xmm0], xmm0 // movdqa [rbp + KTRAP_FRAME_Xmm1], xmm1 @@ -87,6 +114,7 @@ _MsgInvalidOpcodeFault: // movdqa [rbp + KTRAP_FRAME_Xmm5], xmm5 .endif +.if (TRAPFLAGS & TRAPFLAG_SEGMENTS) /* Save segment selectors */ mov ax, ds mov [rbp + KTRAP_FRAME_SegDs], ax @@ -96,6 +124,7 @@ _MsgInvalidOpcodeFault: mov [rbp + KTRAP_FRAME_SegFs], ax mov ax, gs mov [rbp + KTRAP_FRAME_SegGs], ax +.endif /* Save previous mode and swap gs when it was UserMode */ mov ax, [rbp + KTRAP_FRAME_SegCs] @@ -113,7 +142,7 @@ _MsgInvalidOpcodeFault: // KTRAP_FRAME_ExceptionActive // KTRAP_FRAME_MxCsr - +.if (TRAPFLAGS & TRAPFLAG_DEBUG) /* Save debug registers */ mov rax, dr0 mov [rbp + KTRAP_FRAME_Dr0], rax @@ -127,6 +156,7 @@ _MsgInvalidOpcodeFault: mov [rbp + KTRAP_FRAME_Dr6], rax mov rax, dr7 mov [rbp + KTRAP_FRAME_Dr7], rax +.endif // KTRAP_FRAME_DebugControl // KTRAP_FRAME_LastBranchToRip @@ -145,6 +175,7 @@ _MsgInvalidOpcodeFault: */ .macro LEAVE_TRAP_FRAME +.if (TRAPFLAGS & TRAPFLAG_SEGMENTS) /* Restore segment selectors */ mov ax, [rbp + KTRAP_FRAME_SegDs] mov ds, ax @@ -152,17 +183,21 @@ _MsgInvalidOpcodeFault: mov es, ax mov ax, [rbp + KTRAP_FRAME_SegFs] mov fs, ax +.endif + test byte ptr [rbp + KTRAP_FRAME_PreviousMode], 1 jz 1f swapgs 1: -.if (TRAPFLAGS & TRAPFLAG_SYSTEMSERVICE) +.if (TRAPFLAGS & TRAPFLAG_NONVOLATILES) /* Restore non-volatile registers */ mov rbx, [rbp + KTRAP_FRAME_Rbx] mov rdi, [rbp + KTRAP_FRAME_Rdi] mov rsi, [rbp + KTRAP_FRAME_Rsi] -.else +.endif + +.if (TRAPFLAGS & TRAPFLAG_VOLATILES) /* Restore volatile registers */ mov rax, [rbp + KTRAP_FRAME_Rax] mov rcx, [rbp + KTRAP_FRAME_Rcx] @@ -171,7 +206,9 @@ _MsgInvalidOpcodeFault: mov r9, [rbp + KTRAP_FRAME_R9] mov r10, [rbp + KTRAP_FRAME_R10] mov r11, [rbp + KTRAP_FRAME_R11] +.endif +.if (TRAPFLAGS & TRAPFLAG_XMM) /* Restore xmm registers */ // movdqa xmm0, [rbp + KTRAP_FRAME_Xmm0] // movdqa xmm1, [rbp + KTRAP_FRAME_Xmm1] @@ -189,37 +226,47 @@ _MsgInvalidOpcodeFault: .endm -/* - * DISPATCH_EXCEPTION - prepare EXCEPTION_RECORD and call KiDispatchException - */ -.macro DISPATCH_EXCEPTION Code, NumParams, p1, p2, p3 - /* rsp+0x28 points to EXCEPTION_RECORD, set it up */ - mov dword ptr [rsp + 0x28 + EXCEPTION_RECORD_ExceptionCode], \Code +// rbp = TrapFrame, ecx = ExceptionCode, edx = NumParams, r9,r10,r11 = params +_InternalDispatchException: + + /* Allocate stack space for EXCEPTION_RECORD and KEXCEPTION_FRAME */ + sub rsp, SIZE_EXCEPTION_RECORD + SIZE_KEXCEPTION_FRAME + 0x28 + + /* Set up EXCEPTION_RECORD */ + mov [rsp + 0x28 + EXCEPTION_RECORD_ExceptionCode], ecx mov dword ptr [rsp + 0x28 + EXCEPTION_RECORD_ExceptionFlags], 0 mov qword ptr [rsp + 0x28 + EXCEPTION_RECORD_ExceptionRecord], 0 mov rax, [rbp + KTRAP_FRAME_Rip] mov [rsp + 0x28 + EXCEPTION_RECORD_ExceptionAddress], rax - mov dword ptr [rsp + 0x28 + EXCEPTION_RECORD_NumberParameters], \NumParams + mov [rsp + 0x28 + EXCEPTION_RECORD_NumberParameters], edx + mov [rsp + 0x28 + EXCEPTION_RECORD_ExceptionInformation + 0x00], r9 + mov [rsp + 0x28 + EXCEPTION_RECORD_ExceptionInformation + 0x08], r10 + mov [rsp + 0x28 + EXCEPTION_RECORD_ExceptionInformation + 0x10], r11 -.if \NumParams >= 1 - mov qword ptr [rsp + 0x28 + EXCEPTION_RECORD_ExceptionInformation + 0x00], \p1 -.endif -.if \NumParams >= 2 - mov qword ptr [rsp + 0x28 + EXCEPTION_RECORD_ExceptionInformation + 0x08], \p2 -.endif -.if \NumParams >= 3 - mov qword ptr [rsp + 0x28 + EXCEPTION_RECORD_ExceptionInformation + 0x10], \p3 -.endif + /* Set up KEXCEPTION_FRAME */ + lea rdx, [rsp + 0x28 + SIZE_EXCEPTION_RECORD] + mov rax, [rbp + KTRAP_FRAME_Rbp] + mov [rdx + KEXCEPTION_FRAME_Rbp], rax + mov [rdx + KEXCEPTION_FRAME_Rbx], rbx + mov [rdx + KEXCEPTION_FRAME_Rdi], rdi + mov [rdx + KEXCEPTION_FRAME_Rsi], rsi + mov [rdx + KEXCEPTION_FRAME_R12], r12 + mov [rdx + KEXCEPTION_FRAME_R13], r13 + mov [rdx + KEXCEPTION_FRAME_R14], r14 + mov [rdx + KEXCEPTION_FRAME_R15], r15 + mov qword ptr [rdx + KEXCEPTION_FRAME_Return], 0 + /* Call KiDispatchException */ + lea rcx, [rsp + 0x28] // ExceptionRecord + // rdx already points to ExceptionFrame + mov r8, rbp // TrapFrame + mov r9b, [r8 + KTRAP_FRAME_PreviousMode] // PreviousMode mov byte ptr [rsp + 0x20], 1 // FirstChance - mov r9b, [rbp + KTRAP_FRAME_PreviousMode] // PreviousMode - mov r8, rbp // TrapFrame - xor rdx, rdx // ExceptionFrame - lea rcx, [rsp + 0x28] // ExceptionRecord call _KiDispatchException -.endm + add rsp, SIZE_EXCEPTION_RECORD + SIZE_KEXCEPTION_FRAME + 0x28 + ret /* SOFTWARE INTERRUPT SERVICES ***********************************************/ .text @@ -242,7 +289,7 @@ _MsgInvalidOpcodeFault: push 0 .allocstack 0x8 - ENTER_TRAP_FRAME (SIZE_EXCEPTION_RECORD + 0x28), 0 + ENTER_TRAP_FRAME (0x28), TRAPFLAG_ALL /* Check if the frame was from kernelmode */ test word ptr [rbp + KTRAP_FRAME_SegCs], 3 @@ -253,7 +300,13 @@ _MsgInvalidOpcodeFault: KiDebugTrapOrFaultKMode: - DISPATCH_EXCEPTION STATUS_SINGLE_STEP, 0, 0, 0, 0 + /* Dispatch the exception */ + mov ecx, STATUS_SINGLE_STEP + mov edx, 0 + mov r9, 0 + mov r10, 0 + mov r11, 0 + call _InternalDispatchException /* Return */ LEAVE_TRAP_FRAME @@ -277,13 +330,19 @@ KiDebugTrapOrFaultKMode: push 0 .allocstack 0x8 - ENTER_TRAP_FRAME (SIZE_EXCEPTION_RECORD + 0x28), 0 + ENTER_TRAP_FRAME (0x28), TRAPFLAG_ALL lea rcx, _MsgBreakpointTrap[rip] mov rdx, rbp call _FrLdrDbgPrint[rip] - DISPATCH_EXCEPTION STATUS_BREAKPOINT, 3, 0, 0, 0 + /* Dispatch the exception */ + mov ecx, STATUS_BREAKPOINT + mov edx, 3 + mov r9, 0 + mov r10, 0 + mov r11, 0 + call _InternalDispatchException /* Return */ LEAVE_TRAP_FRAME @@ -323,7 +382,7 @@ KiDebugTrapOrFaultKMode: push 0 .allocstack 0x8 - ENTER_TRAP_FRAME (SIZE_EXCEPTION_RECORD + 0x28), 0 + ENTER_TRAP_FRAME (0x28), TRAPFLAG_ALL // DISPATCH_EXCEPTION STATUS_BREAKPOINT, 3, 0, 0, 0 @@ -416,7 +475,7 @@ KiDebugTrapOrFaultKMode: .pushframe 1 /* We have an error code */ - ENTER_TRAP_FRAME (SIZE_EXCEPTION_RECORD + 0x28), 0 + ENTER_TRAP_FRAME (0x28), TRAPFLAG_ALL // DISPATCH_EXCEPTION STATUS_BREAKPOINT, 3, 0, 0, 0 @@ -443,13 +502,19 @@ KiDebugTrapOrFaultKMode: jmp $ - ENTER_TRAP_FRAME (SIZE_EXCEPTION_RECORD + 0x28), 0 + ENTER_TRAP_FRAME (0x28), TRAPFLAG_ALL /* Save page fault address */ mov rax, cr2 mov [rbp + KTRAP_FRAME_FaultAddress], rax - DISPATCH_EXCEPTION STATUS_BREAKPOINT, 0, 0, 0, 0 + /* Dispatch the exception */ + mov ecx, STATUS_BREAKPOINT + mov edx, 0 + mov r9, 0 + mov r10, 0 + mov r11, 0 + call _InternalDispatchException LEAVE_TRAP_FRAME; iretq @@ -520,16 +585,18 @@ KiDebugTrapOrFaultKMode: push 0 .allocstack 0x08 - ENTER_TRAP_FRAME (SIZE_EXCEPTION_RECORD + 0x28), 0 + ENTER_TRAP_FRAME (0x28), TRAPFLAG_ALL /* Increase Rip to skip the int3 */ inc qword ptr [rbp + KTRAP_FRAME_Rip] - /* Call KiDispatchException */ - mov r8, [rbp+KTRAP_FRAME_Rax] // Service - mov rcx, [rbp+KTRAP_FRAME_Rcx] // Buffer - mov rdx, [rbp+KTRAP_FRAME_Rdx] // Length - DISPATCH_EXCEPTION STATUS_BREAKPOINT, 3, r8, rcx, rdx + /* Dispatch the exception */ + mov ecx, STATUS_BREAKPOINT + mov edx, 3 + mov r9, [rbp+KTRAP_FRAME_Rax] // Service + mov r10, [rbp+KTRAP_FRAME_Rcx] // Buffer + mov r11, [rbp+KTRAP_FRAME_Rdx] // Length + call _InternalDispatchException LEAVE_TRAP_FRAME; iretq From 9edbc02f78475abaf9162d746f58f955d8447acf Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 9 Nov 2009 21:49:56 +0000 Subject: [PATCH 096/286] Fix my broken copy pasta, spotted by talley svn path=/branches/ros-amd64-bringup/; revision=44056 --- reactos/ntoskrnl/ke/amd64/context.c | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/reactos/ntoskrnl/ke/amd64/context.c b/reactos/ntoskrnl/ke/amd64/context.c index 38395705848..84dd2dd28b4 100644 --- a/reactos/ntoskrnl/ke/amd64/context.c +++ b/reactos/ntoskrnl/ke/amd64/context.c @@ -59,10 +59,15 @@ KeContextToTrapFrame(IN PCONTEXT Context, TrapFrame->Xmm4 = Context->Xmm4; TrapFrame->Xmm5 = Context->Xmm5; ExceptionFrame->Xmm6 = Context->Xmm6; - ExceptionFrame->Xmm6 = Context->Xmm6; - ExceptionFrame->Xmm6 = Context->Xmm6; - ExceptionFrame->Xmm6 = Context->Xmm6; - ExceptionFrame->Xmm6 = Context->Xmm6; + ExceptionFrame->Xmm7 = Context->Xmm7; + ExceptionFrame->Xmm8 = Context->Xmm8; + ExceptionFrame->Xmm9 = Context->Xmm9; + ExceptionFrame->Xmm10 = Context->Xmm10; + ExceptionFrame->Xmm11 = Context->Xmm11; + ExceptionFrame->Xmm12 = Context->Xmm12; + ExceptionFrame->Xmm13 = Context->Xmm13; + ExceptionFrame->Xmm14 = Context->Xmm14; + ExceptionFrame->Xmm15 = Context->Xmm15; } /* Handle control registers */ @@ -170,10 +175,15 @@ KeTrapFrameToContext(IN PKTRAP_FRAME TrapFrame, Context->Xmm4 = TrapFrame->Xmm4; Context->Xmm5 = TrapFrame->Xmm5; Context->Xmm6 = ExceptionFrame->Xmm6; - Context->Xmm6 = ExceptionFrame->Xmm6; - Context->Xmm6 = ExceptionFrame->Xmm6; - Context->Xmm6 = ExceptionFrame->Xmm6; - Context->Xmm6 = ExceptionFrame->Xmm6; + Context->Xmm7 = ExceptionFrame->Xmm7; + Context->Xmm8 = ExceptionFrame->Xmm8; + Context->Xmm9 = ExceptionFrame->Xmm9; + Context->Xmm10 = ExceptionFrame->Xmm10; + Context->Xmm11 = ExceptionFrame->Xmm11; + Context->Xmm12 = ExceptionFrame->Xmm12; + Context->Xmm13 = ExceptionFrame->Xmm13; + Context->Xmm14 = ExceptionFrame->Xmm14; + Context->Xmm15 = ExceptionFrame->Xmm15; } /* Handle control registers */ From 67918b7bd5e405a385d4c2977354930c4126c92d Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 9 Nov 2009 23:37:54 +0000 Subject: [PATCH 097/286] [KE] - implement KiPageFault svn path=/branches/ros-amd64-bringup/; revision=44064 --- reactos/ntoskrnl/ke/amd64/trap.S | 73 ++++++++++++++++++++++++-------- 1 file changed, 56 insertions(+), 17 deletions(-) diff --git a/reactos/ntoskrnl/ke/amd64/trap.S b/reactos/ntoskrnl/ke/amd64/trap.S index 382283f9234..f59df0e056a 100644 --- a/reactos/ntoskrnl/ke/amd64/trap.S +++ b/reactos/ntoskrnl/ke/amd64/trap.S @@ -235,8 +235,9 @@ _InternalDispatchException: /* Set up EXCEPTION_RECORD */ mov [rsp + 0x28 + EXCEPTION_RECORD_ExceptionCode], ecx - mov dword ptr [rsp + 0x28 + EXCEPTION_RECORD_ExceptionFlags], 0 - mov qword ptr [rsp + 0x28 + EXCEPTION_RECORD_ExceptionRecord], 0 + xor rax, rax + mov [rsp + 0x28 + EXCEPTION_RECORD_ExceptionFlags], eax + mov [rsp + 0x28 + EXCEPTION_RECORD_ExceptionRecord], rax mov rax, [rbp + KTRAP_FRAME_Rip] mov [rsp + 0x28 + EXCEPTION_RECORD_ExceptionAddress], rax mov [rsp + 0x28 + EXCEPTION_RECORD_NumberParameters], edx @@ -494,28 +495,66 @@ KiDebugTrapOrFaultKMode: .pushframe 1 /* We have an error code */ - lea rcx, _MsgPageFault[rip] - mov rdx, [rsp] - mov r8, [rsp+8] - mov r9, rsp - call _FrLdrDbgPrint[rip] - - jmp $ +// lea rcx, _MsgPageFault[rip] +// mov rdx, [rsp] +// mov r8, [rsp+8] +// mov r9, rsp +// call _FrLdrDbgPrint[rip] ENTER_TRAP_FRAME (0x28), TRAPFLAG_ALL /* Save page fault address */ - mov rax, cr2 - mov [rbp + KTRAP_FRAME_FaultAddress], rax + mov rdx, cr2 + mov [rbp + KTRAP_FRAME_FaultAddress], rdx - /* Dispatch the exception */ - mov ecx, STATUS_BREAKPOINT - mov edx, 0 - mov r9, 0 - mov r10, 0 - mov r11, 0 + /* Call page fault handler */ + mov ecx, [ebp + KTRAP_FRAME_ErrorCode] // StoreInstruction + and ecx, 1 + // rdx == Address + mov r8b, [ebp + KTRAP_FRAME_SegCs] // Mode + and r8b, 1 + mov r9, rbp // TrapInformation +// call _MmAccessFault + + // HACK + mov eax, STATUS_ACCESS_VIOLATION + + /* Check for success */ + test eax, eax + jge PageFaultReturn + + /* Set parameter 1 to error code */ + mov r9d, [ebp + KTRAP_FRAME_ErrorCode] + + /* Set parameter2 to faulting address */ + mov r10, cr2 // Param2 = faulting address + + cmp eax, STATUS_ACCESS_VIOLATION + je AccessViolation + cmp eax, STATUS_GUARD_PAGE_VIOLATION + je SpecialCode + cmp eax, STATUS_STACK_OVERFLOW + je SpecialCode + +InPageException: + /* Dispatch in-page exception */ + mov ecx, STATUS_IN_PAGE_ERROR // ExceptionCode + mov r11d, eax // Param3 = Status + mov edx, 3 // ParamCount + call _InternalDispatchException + jmp PageFaultReturn + +AccessViolation: + /* Use more proper status code */ + mov eax, KI_EXCEPTION_ACCESS_VIOLATION + +SpecialCode: + /* Setup a normal page fault exception */ + mov ecx, eax // ExceptionCode + mov edx, 2 // ParamCount call _InternalDispatchException +PageFaultReturn: LEAVE_TRAP_FRAME; iretq .endproc From c9f7c2317c7cd15fecc21899234e4f3ea5fd4120 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Tue, 10 Nov 2009 00:48:09 +0000 Subject: [PATCH 098/286] Use LoaderMemoryData instead of LoaderSpecialMemory for page tables svn path=/branches/ros-amd64-bringup/; revision=44065 --- reactos/boot/freeldr/freeldr/windows/amd64/wlmemory.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/boot/freeldr/freeldr/windows/amd64/wlmemory.c b/reactos/boot/freeldr/freeldr/windows/amd64/wlmemory.c index 2f8b1584771..dd123d5cdc3 100644 --- a/reactos/boot/freeldr/freeldr/windows/amd64/wlmemory.c +++ b/reactos/boot/freeldr/freeldr/windows/amd64/wlmemory.c @@ -80,7 +80,7 @@ MempGetOrCreatePageDir(PPAGE_DIRECTORY_AMD64 pDir, ULONG Index) if (!pDir->Pde[Index].Valid) { - pSubDir = MmAllocateMemoryWithType(PAGE_SIZE, LoaderSpecialMemory); + pSubDir = MmAllocateMemoryWithType(PAGE_SIZE, LoaderMemoryData); if (!pSubDir) return NULL; RtlZeroMemory(pSubDir, PAGE_SIZE); From c203c7f36c529fe14437d0ce06bdf90deaeb1c9f Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Tue, 10 Nov 2009 00:50:27 +0000 Subject: [PATCH 099/286] don't anable interrupts as long as that's all broken, this way we make it a bit further... svn path=/branches/ros-amd64-bringup/; revision=44066 --- reactos/ntoskrnl/ex/init.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/reactos/ntoskrnl/ex/init.c b/reactos/ntoskrnl/ex/init.c index 2b3e79e72eb..6d61a294423 100644 --- a/reactos/ntoskrnl/ex/init.c +++ b/reactos/ntoskrnl/ex/init.c @@ -956,7 +956,8 @@ ExpInitializeExecutive(IN ULONG Cpu, } /* Make sure interrupts are active now */ - _enable(); +// FIXME HAX!!! + //_enable(); /* Clear the crypto exponent */ SharedUserData->CryptoExponent = 0; From 82c97ac922e0b63f3f512de550063662653ae70f Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Tue, 10 Nov 2009 00:54:46 +0000 Subject: [PATCH 100/286] [MM] - Fix MiAddressToP*e macros - move miarm constants - set MmPfnDatabase address - fix PageCount for pfn database mapping (round up) svn path=/branches/ros-amd64-bringup/; revision=44067 --- reactos/ntoskrnl/include/internal/amd64/mm.h | 44 ++++++++++++++++++-- reactos/ntoskrnl/mm/ARM3/miarm.h | 38 +---------------- reactos/ntoskrnl/mm/amd64/init.c | 11 ++--- 3 files changed, 47 insertions(+), 46 deletions(-) diff --git a/reactos/ntoskrnl/include/internal/amd64/mm.h b/reactos/ntoskrnl/include/internal/amd64/mm.h index 56cb62a4b43..df2b9133bb2 100644 --- a/reactos/ntoskrnl/include/internal/amd64/mm.h +++ b/reactos/ntoskrnl/include/internal/amd64/mm.h @@ -26,13 +26,13 @@ MmGetPageDirectory(VOID) /* Converting address to a corresponding PDE or PTE entry */ #define MiAddressToPxe(x) \ - ((PMMPTE)(((((ULONG64)(x)) >> PXI_SHIFT) << 3) + PXE_BASE)) + ((PMMPTE)((((((ULONG64)(x)) >> PXI_SHIFT) & PXI_MASK) << 3) + PXE_BASE)) #define MiAddressToPpe(x) \ - ((PMMPTE)(((((ULONG64)(x)) >> PPI_SHIFT) << 3) + PPE_BASE)) + ((PMMPTE)((((((ULONG64)(x)) >> PPI_SHIFT) & PPI_MASK) << 3) + PPE_BASE)) #define MiAddressToPde(x) \ - ((PMMPTE)(((((ULONG64)(x)) >> PDI_SHIFT) << 3) + PDE_BASE)) + ((PMMPTE)((((((ULONG64)(x)) >> PDI_SHIFT) & PDI_MASK_AMD64) << 3) + PDE_BASE)) #define MiAddressToPte(x) \ - ((PMMPTE)(((((ULONG64)(x)) >> PTI_SHIFT) << 3) + PTE_BASE)) + ((PMMPTE)((((((ULONG64)(x)) >> PTI_SHIFT) & PTI_MASK_AMD64) << 3) + PTE_BASE)) /* Convert a PTE into a corresponding address */ #define MiPteToAddress(PTE) ((PVOID)((ULONG64)(PTE) << 9)) @@ -46,6 +46,7 @@ MmGetPageDirectory(VOID) #define VAtoPDI(va) ((((ULONG64)va) >> PDI_SHIFT) & 0x1FF) #define VAtoPTI(va) ((((ULONG64)va) >> PTI_SHIFT) & 0x1FF) +/// MIARM.H /* Easy accessing PFN in PTE */ #define PFN_FROM_PTE(v) ((v)->u.Hard.PageFrameNumber) @@ -62,4 +63,39 @@ MmGetPageDirectory(VOID) #define MI_MAKE_OWNER_PAGE(x) ((x)->u.Hard.Owner = 1) #define MI_MAKE_WRITE_PAGE(x) ((x)->u.Hard.Write = 1) + +#define MI_MIN_PAGES_FOR_NONPAGED_POOL_TUNING ((255*1024*1024) >> PAGE_SHIFT) +#define MI_MIN_PAGES_FOR_SYSPTE_TUNING ((19*1024*1024) >> PAGE_SHIFT) +#define MI_MIN_PAGES_FOR_SYSPTE_BOOST ((32*1024*1024) >> PAGE_SHIFT) +#define MI_MAX_INIT_NONPAGED_POOL_SIZE (128 * 1024 * 1024) +#define MI_MAX_NONPAGED_POOL_SIZE (128 * 1024 * 1024) +#define MI_MAX_FREE_PAGE_LISTS 4 + +#define MI_MIN_INIT_PAGED_POOLSIZE (32 * 1024 * 1024) + +#define MI_SESSION_VIEW_SIZE (20 * 1024 * 1024) +#define MI_SESSION_POOL_SIZE (16 * 1024 * 1024) +#define MI_SESSION_IMAGE_SIZE (8 * 1024 * 1024) +#define MI_SESSION_WORKING_SET_SIZE (4 * 1024 * 1024) +#define MI_SESSION_SIZE (MI_SESSION_VIEW_SIZE + \ + MI_SESSION_POOL_SIZE + \ + MI_SESSION_IMAGE_SIZE + \ + MI_SESSION_WORKING_SET_SIZE) + +#define MI_SYSTEM_VIEW_SIZE (16 * 1024 * 1024) + +#define MI_PAGED_POOL_START (PVOID)0xFFFFFA8000000000ULL +#define MI_NONPAGED_POOL_END (PVOID)0xFFFFFAE000000000ULL + +#define MM_HIGHEST_VAD_ADDRESS \ + (PVOID)((ULONG_PTR)MM_HIGHEST_USER_ADDRESS - (16 * PAGE_SIZE)) + + +// +// FIXFIX: These should go in ex.h after the pool merge +// +#define POOL_LISTS_PER_PAGE (PAGE_SIZE / sizeof(LIST_ENTRY)) +#define BASE_POOL_TYPE_MASK 1 +#define POOL_MAX_ALLOC (PAGE_SIZE - (sizeof(POOL_HEADER) + sizeof(LIST_ENTRY))) + #endif /* __NTOSKRNL_INCLUDE_INTERNAL_AMD64_MM_H */ diff --git a/reactos/ntoskrnl/mm/ARM3/miarm.h b/reactos/ntoskrnl/mm/ARM3/miarm.h index 1f8968da8c4..a02664a29c8 100644 --- a/reactos/ntoskrnl/mm/ARM3/miarm.h +++ b/reactos/ntoskrnl/mm/ARM3/miarm.h @@ -6,43 +6,7 @@ * PROGRAMMERS: ReactOS Portable Systems Group */ -#ifdef _M_AMD64 - -#define MI_MIN_PAGES_FOR_NONPAGED_POOL_TUNING ((255*1024*1024) >> PAGE_SHIFT) -#define MI_MIN_PAGES_FOR_SYSPTE_TUNING ((19*1024*1024) >> PAGE_SHIFT) -#define MI_MIN_PAGES_FOR_SYSPTE_BOOST ((32*1024*1024) >> PAGE_SHIFT) -#define MI_MAX_INIT_NONPAGED_POOL_SIZE (128 * 1024 * 1024) -#define MI_MAX_NONPAGED_POOL_SIZE (128 * 1024 * 1024) -#define MI_MAX_FREE_PAGE_LISTS 4 - -#define MI_MIN_INIT_PAGED_POOLSIZE (32 * 1024 * 1024) - -#define MI_SESSION_VIEW_SIZE (20 * 1024 * 1024) -#define MI_SESSION_POOL_SIZE (16 * 1024 * 1024) -#define MI_SESSION_IMAGE_SIZE (8 * 1024 * 1024) -#define MI_SESSION_WORKING_SET_SIZE (4 * 1024 * 1024) -#define MI_SESSION_SIZE (MI_SESSION_VIEW_SIZE + \ - MI_SESSION_POOL_SIZE + \ - MI_SESSION_IMAGE_SIZE + \ - MI_SESSION_WORKING_SET_SIZE) - -#define MI_SYSTEM_VIEW_SIZE (16 * 1024 * 1024) - -#define MI_PAGED_POOL_START (PVOID)0xFFFFFA8000000000ULL -#define MI_NONPAGED_POOL_END (PVOID)0xFFFFFAE000000000ULL - -#define MM_HIGHEST_VAD_ADDRESS \ - (PVOID)((ULONG_PTR)MM_HIGHEST_USER_ADDRESS - (16 * PAGE_SIZE)) - - -// -// FIXFIX: These should go in ex.h after the pool merge -// -#define POOL_LISTS_PER_PAGE (PAGE_SIZE / sizeof(LIST_ENTRY)) -#define BASE_POOL_TYPE_MASK 1 -#define POOL_MAX_ALLOC (PAGE_SIZE - (sizeof(POOL_HEADER) + sizeof(LIST_ENTRY))) - -#else +#ifndef _M_AMD64 #define MI_MIN_PAGES_FOR_NONPAGED_POOL_TUNING ((255*1024*1024) >> PAGE_SHIFT) #define MI_MIN_PAGES_FOR_SYSPTE_TUNING ((19*1024*1024) >> PAGE_SHIFT) diff --git a/reactos/ntoskrnl/mm/amd64/init.c b/reactos/ntoskrnl/mm/amd64/init.c index 92bcf475a33..12cc704ead2 100644 --- a/reactos/ntoskrnl/mm/amd64/init.c +++ b/reactos/ntoskrnl/mm/amd64/init.c @@ -238,6 +238,9 @@ MiArmIninializeMemoryLayout(IN PLOADER_PARAMETER_BLOCK LoaderBlock) /* Use the default */ MmNumberOfSystemPtes = 22000; + /* FIXME: should start below paged pool */ + MmPfnDatabase = (PVOID)0xFFFFFD5FC0000000ULL; + } VOID @@ -307,9 +310,10 @@ MiArmEvaluateMemoryDescriptors(IN PLOADER_PARAMETER_BLOCK LoaderBlock) /* Update the highest page */ MmHighestPhysicalPage = LastPage; } - +DPRINT1("BasePage = %ld, LastPage = %ld\n", BasePage, LastPage); +__debugbreak(); /* Map pages for the PFN database */ - PageCount = (MdBlock->PageCount * sizeof(MMPFN)) / PAGE_SIZE; + PageCount = PAGE_ROUND_UP(MdBlock->PageCount * sizeof(MMPFN)) / PAGE_SIZE; MxMapPageRange(&MmPfnDatabase[BasePage], PageCount); /* Zero out the pages */ @@ -444,14 +448,11 @@ MmArmInitSystem(IN ULONG Phase, /* Initialize the memory layout */ MiArmIninializeMemoryLayout(LoaderBlock); - DPRINT1("MmArmInitSystem 3\n"); /* Loop descriptors and prepare PFN database */ MiArmEvaluateMemoryDescriptors(LoaderBlock); - DPRINT1("MmArmInitSystem 4\n"); MiArmInitializePageTable(); - DPRINT1("MmArmInitSystem 5\n"); /* Configure size of the non paged pool */ MiArmPrepareNonPagedPool(); From 14914c99dba80b3cc23347d24a2b864314a82f12 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Tue, 10 Nov 2009 03:30:58 +0000 Subject: [PATCH 101/286] fix build of ntoskrnl svn path=/branches/ros-amd64-bringup/; revision=44071 --- reactos/ntoskrnl/include/internal/amd64/ke.h | 15 + reactos/ntoskrnl/include/internal/amd64/mm.h | 3 +- reactos/ntoskrnl/io/iomgr/arcname.c | 2 + reactos/ntoskrnl/kd64/amd64/kdsup.c | 373 ------------------- reactos/ntoskrnl/kd64/amd64/kdx64.c | 259 +++++++++++-- reactos/ntoskrnl/ke/amd64/cpu.c | 33 -- reactos/ntoskrnl/ke/amd64/kiinit.c | 3 + reactos/ntoskrnl/mm/amd64/init.c | 5 + reactos/ntoskrnl/ntoskrnl-generic.rbuild | 4 +- 9 files changed, 266 insertions(+), 431 deletions(-) delete mode 100644 reactos/ntoskrnl/kd64/amd64/kdsup.c diff --git a/reactos/ntoskrnl/include/internal/amd64/ke.h b/reactos/ntoskrnl/include/internal/amd64/ke.h index e489702d702..0778fe2873a 100644 --- a/reactos/ntoskrnl/include/internal/amd64/ke.h +++ b/reactos/ntoskrnl/include/internal/amd64/ke.h @@ -66,6 +66,11 @@ typedef struct _KIDT_INIT #define KfReleaseSpinLock KeReleaseSpinLock extern ULONG Ke386CacheAlignment; +extern ULONG KeI386NpxPresent; +extern ULONG KeI386XMMIPresent; +extern ULONG KeI386FxsrPresent; +extern ULONG KeI386CpuType; +extern ULONG KeI386CpuStep; #define IMAGE_FILE_MACHINE_ARCHITECTURE IMAGE_FILE_MACHINE_AMD64 @@ -101,6 +106,16 @@ extern ULONG Ke386CacheAlignment; #define KeGetTrapFrameInterruptState(TrapFrame) \ BooleanFlagOn((TrapFrame)->EFlags, EFLAGS_INTERRUPT_MASK) +// +// Invalidates the TLB entry for a specified address +// +FORCEINLINE +VOID +KeInvalidateTlbEntry(IN PVOID Address) +{ + /* Invalidate the TLB entry for this address */ + __invlpg(Address); +} struct _KPCR; VOID diff --git a/reactos/ntoskrnl/include/internal/amd64/mm.h b/reactos/ntoskrnl/include/internal/amd64/mm.h index df2b9133bb2..452758b957b 100644 --- a/reactos/ntoskrnl/include/internal/amd64/mm.h +++ b/reactos/ntoskrnl/include/internal/amd64/mm.h @@ -86,7 +86,8 @@ MmGetPageDirectory(VOID) #define MI_PAGED_POOL_START (PVOID)0xFFFFFA8000000000ULL #define MI_NONPAGED_POOL_END (PVOID)0xFFFFFAE000000000ULL - +#define MI_DEBUG_MAPPING (PVOID)0xFFFFFFFF80000000ULL // FIXME + #define MM_HIGHEST_VAD_ADDRESS \ (PVOID)((ULONG_PTR)MM_HIGHEST_USER_ADDRESS - (16 * PAGE_SIZE)) diff --git a/reactos/ntoskrnl/io/iomgr/arcname.c b/reactos/ntoskrnl/io/iomgr/arcname.c index 7e01d4abb52..3f2e6e4ba1f 100644 --- a/reactos/ntoskrnl/io/iomgr/arcname.c +++ b/reactos/ntoskrnl/io/iomgr/arcname.c @@ -354,7 +354,9 @@ IopAssignArcNamesToCdrom(IN PLOADER_PARAMETER_BLOCK LoaderBlock, /* Now calculate the checksum */ for (i = 0; i < 2048 / sizeof(ULONG); i++) CheckSum += Buffer[i]; +#ifndef _M_AMD64 if (KeRosLoaderBlock) goto freeldrhack; +#endif /* Search if this device is the actual boot CD */ for (NextEntry = ArcDiskInfo->DiskSignatureListHead.Flink; diff --git a/reactos/ntoskrnl/kd64/amd64/kdsup.c b/reactos/ntoskrnl/kd64/amd64/kdsup.c deleted file mode 100644 index 6b37040e9cc..00000000000 --- a/reactos/ntoskrnl/kd64/amd64/kdsup.c +++ /dev/null @@ -1,373 +0,0 @@ -/* - * PROJECT: ReactOS Kernel - * LICENSE: GPL - See COPYING in the top level directory - * FILE: ntoskrnl/kd64/amd64/kdsup.c - * PURPOSE: KD support routines for AMD64 - * PROGRAMMERS: Timo Kreuzer (timo.kreuzer@reactos.org) - */ - -/* INCLUDES *****************************************************************/ - -#include -#define NDEBUG -#include - -#undef UNIMPLEMENTED -#define UNIMPLEMENTED KdpDprintf("%s is unimplemented\n", __FUNCTION__) - -/* FUNCTIONS *****************************************************************/ - -VOID -NTAPI -KdpSysGetVersion(IN PDBGKD_GET_VERSION64 Version) -{ - /* Copy the version block */ - RtlCopyMemory(Version, &KdVersionBlock, sizeof(DBGKD_GET_VERSION64)); -} - -VOID -NTAPI -KdpGetStateChange(IN PDBGKD_MANIPULATE_STATE64 State, - IN PCONTEXT Context) -{ - PKPRCB Prcb; - ULONG i; - - /* Check for success */ - if (NT_SUCCESS(State->u.Continue2.ContinueStatus)) - { - /* Check if we're tracing */ - if (State->u.Continue2.ControlSet.TraceFlag) - { - /* Enable TF */ - Context->EFlags |= EFLAGS_TF; - } - else - { - /* Remove it */ - Context->EFlags &= ~EFLAGS_TF; - } - - /* Loop all processors */ - for (i = 0; i < KeNumberProcessors; i++) - { - /* Get the PRCB and update DR7 and DR6 */ - Prcb = KiProcessorBlock[i]; - Prcb->ProcessorState.SpecialRegisters.KernelDr7 = - State->u.Continue2.ControlSet.Dr7; - Prcb->ProcessorState.SpecialRegisters.KernelDr6 = 0; - } - - /* Check if we have new symbol information */ - if (State->u.Continue2.ControlSet.CurrentSymbolStart != 1) - { - /* Update it */ - KdpCurrentSymbolStart = - State->u.Continue2.ControlSet.CurrentSymbolStart; - KdpCurrentSymbolEnd= State->u.Continue2.ControlSet.CurrentSymbolEnd; - } - } -} - -VOID -NTAPI -KdpSetContextState(IN PDBGKD_ANY_WAIT_STATE_CHANGE WaitStateChange, - IN PCONTEXT Context) -{ - PKPRCB Prcb = KeGetCurrentPrcb(); - - /* Copy i386 specific debug registers */ - WaitStateChange->ControlReport.Dr6 = Prcb->ProcessorState.SpecialRegisters. - KernelDr6; - WaitStateChange->ControlReport.Dr7 = Prcb->ProcessorState.SpecialRegisters. - KernelDr7; - - /* Copy i386 specific segments */ - WaitStateChange->ControlReport.SegCs = (USHORT)Context->SegCs; - WaitStateChange->ControlReport.SegDs = (USHORT)Context->SegDs; - WaitStateChange->ControlReport.SegEs = (USHORT)Context->SegEs; - WaitStateChange->ControlReport.SegFs = (USHORT)Context->SegFs; - - /* Copy EFlags */ - WaitStateChange->ControlReport.EFlags = Context->EFlags; - - /* Set Report Flags */ - WaitStateChange->ControlReport.ReportFlags = REPORT_INCLUDES_SEGS; - if (WaitStateChange->ControlReport.SegCs == KGDT_64_R0_CODE) - { - WaitStateChange->ControlReport.ReportFlags |= REPORT_STANDARD_CS; - } -} - -NTSTATUS -NTAPI -KdpSysReadMsr(IN ULONG Msr, - OUT PLARGE_INTEGER MsrValue) -{ - /* Use SEH to protect from invalid MSRs */ - _SEH2_TRY - { - MsrValue->QuadPart = __readmsr(Msr); - } - _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) - { - _SEH2_YIELD(return STATUS_NO_SUCH_DEVICE); - } - _SEH2_END - - return STATUS_SUCCESS; -} - -NTSTATUS -NTAPI -KdpSysWriteMsr(IN ULONG Msr, - IN PLARGE_INTEGER MsrValue) -{ - /* Use SEH to protect from invalid MSRs */ - _SEH2_TRY - { - __writemsr(Msr, MsrValue->QuadPart); - } - _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) - { - _SEH2_YIELD(return STATUS_NO_SUCH_DEVICE); - } - _SEH2_END - - return STATUS_SUCCESS; -} - -NTSTATUS -NTAPI -KdpSysReadBusData(IN ULONG BusDataType, - IN ULONG BusNumber, - IN ULONG SlotNumber, - IN ULONG Offset, - IN PVOID Buffer, - IN ULONG Length, - OUT PULONG ActualLength) -{ - UNIMPLEMENTED; - while (TRUE); - return STATUS_UNSUCCESSFUL; -} - -NTSTATUS -NTAPI -KdpSysWriteBusData(IN ULONG BusDataType, - IN ULONG BusNumber, - IN ULONG SlotNumber, - IN ULONG Offset, - IN PVOID Buffer, - IN ULONG Length, - OUT PULONG ActualLength) -{ - UNIMPLEMENTED; - while (TRUE); - return STATUS_UNSUCCESSFUL; -} - -NTSTATUS -NTAPI -KdpSysReadControlSpace(IN ULONG Processor, - IN ULONG64 BaseAddress, - IN PVOID Buffer, - IN ULONG Length, - OUT PULONG ActualLength) -{ - PVOID ControlStart; - PKPRCB Prcb = KiProcessorBlock[Processor]; - PKIPCR Pcr = CONTAINING_RECORD(Prcb, KIPCR, Prcb); - - switch (BaseAddress) - { - case AMD64_DEBUG_CONTROL_SPACE_KPCR: - /* Copy a pointer to the Pcr */ - ControlStart = &Pcr; - *ActualLength = sizeof(PVOID); - break; - - case AMD64_DEBUG_CONTROL_SPACE_KPRCB: - /* Copy a pointer to the Prcb */ - ControlStart = &Prcb; - *ActualLength = sizeof(PVOID); - break; - - case AMD64_DEBUG_CONTROL_SPACE_KSPECIAL: - /* Copy SpecialRegisters */ - ControlStart = &Prcb->ProcessorState.SpecialRegisters; - *ActualLength = sizeof(KSPECIAL_REGISTERS); - break; - - case AMD64_DEBUG_CONTROL_SPACE_KTHREAD: - /* Copy a pointer to the current Thread */ - ControlStart = &Prcb->CurrentThread; - *ActualLength = sizeof(PVOID); - break; - - default: - *ActualLength = 0; - ASSERT(FALSE); - return STATUS_UNSUCCESSFUL; - } - - /* Copy the memory */ - RtlCopyMemory(Buffer, ControlStart, min(Length, *ActualLength)); - - /* Finish up */ - return STATUS_SUCCESS; -} - -NTSTATUS -NTAPI -KdpSysWriteControlSpace(IN ULONG Processor, - IN ULONG64 BaseAddress, - IN PVOID Buffer, - IN ULONG Length, - OUT PULONG ActualLength) -{ - PVOID ControlStart; - PKPRCB Prcb = KiProcessorBlock[Processor]; - PKIPCR Pcr = CONTAINING_RECORD(Prcb, KIPCR, Prcb); - - switch (BaseAddress) - { - case AMD64_DEBUG_CONTROL_SPACE_KSPECIAL: - /* Copy SpecialRegisters */ - ControlStart = &Prcb->ProcessorState.SpecialRegisters; - *ActualLength = sizeof(KSPECIAL_REGISTERS); - break; - - default: - *ActualLength = 0; - ASSERT(FALSE); - return STATUS_UNSUCCESSFUL; - } - - /* Copy the memory */ - RtlCopyMemory(ControlStart, Buffer, min(Length, *ActualLength)); - - return STATUS_SUCCESS; -} - -NTSTATUS -NTAPI -KdpSysReadIoSpace(IN ULONG InterfaceType, - IN ULONG BusNumber, - IN ULONG AddressSpace, - IN ULONG64 IoAddress, - OUT PVOID DataValue, - IN ULONG DataSize, - OUT PULONG ActualDataSize) -{ - /* Verify parameters */ - if (InterfaceType != Isa || BusNumber != 0 || AddressSpace != 1) - { - /* No data was read */ - *ActualDataSize = 0; - return STATUS_INVALID_PARAMETER; - } - - /* Check for correct alignment */ - if ((IoAddress & (DataSize - 1))) - { - /* Invalid alignment */ - *ActualDataSize = 0; - return STATUS_DATATYPE_MISALIGNMENT; - } - - switch (DataSize) - { - case sizeof(UCHAR): - /* Read one UCHAR */ - *(PUCHAR)DataValue = READ_PORT_UCHAR((PUCHAR)IoAddress); - break; - - case sizeof(USHORT): - /* Read one USHORT */ - *(PUSHORT)DataValue = READ_PORT_USHORT((PUSHORT)IoAddress); - break; - - case sizeof(ULONG): - /* Read one ULONG */ - *(PULONG)DataValue = READ_PORT_ULONG((PULONG)IoAddress); - break; - - default: - /* Invalid data size */ - *ActualDataSize = 0; - return STATUS_INVALID_PARAMETER; - } - - /* Return the size of the data */ - *ActualDataSize = DataSize; - - /* Success! */ - return STATUS_SUCCESS; -} - - -NTSTATUS -NTAPI -KdpSysWriteIoSpace(IN ULONG InterfaceType, - IN ULONG BusNumber, - IN ULONG AddressSpace, - IN ULONG64 IoAddress, - IN PVOID DataValue, - IN ULONG DataSize, - OUT PULONG ActualDataSize) -{ - /* Verify parameters */ - if (InterfaceType != Isa || BusNumber != 0 || AddressSpace != 1) - { - /* No data was written */ - *ActualDataSize = 0; - return STATUS_INVALID_PARAMETER; - } - - /* Check for correct alignment */ - if ((IoAddress & (DataSize - 1))) - { - /* Invalid alignment */ - *ActualDataSize = 0; - return STATUS_DATATYPE_MISALIGNMENT; - } - - switch (DataSize) - { - case sizeof(UCHAR): - /* Write one UCHAR */ - WRITE_PORT_UCHAR((PUCHAR)IoAddress, *(PUCHAR)DataValue); - break; - - case sizeof(USHORT): - /* Write one USHORT */ - WRITE_PORT_USHORT((PUSHORT)IoAddress, *(PUSHORT)DataValue); - break; - - case sizeof(ULONG): - /* Write one ULONG */ - WRITE_PORT_ULONG((PULONG)IoAddress, *(PULONG)DataValue); - break; - - default: - /* Invalid data size */ - *ActualDataSize = 0; - return STATUS_INVALID_PARAMETER; - } - - /* Return the size of the data */ - *ActualDataSize = DataSize; - - /* Success! */ - return STATUS_SUCCESS; -} - -NTSTATUS -NTAPI -KdpSysCheckLowMemory(IN ULONG Flags) -{ - UNIMPLEMENTED; - while (TRUE); - return STATUS_UNSUCCESSFUL; -} diff --git a/reactos/ntoskrnl/kd64/amd64/kdx64.c b/reactos/ntoskrnl/kd64/amd64/kdx64.c index 32193c12061..d29b535aedb 100644 --- a/reactos/ntoskrnl/kd64/amd64/kdx64.c +++ b/reactos/ntoskrnl/kd64/amd64/kdx64.c @@ -22,8 +22,43 @@ NTAPI KdpGetStateChange(IN PDBGKD_MANIPULATE_STATE64 State, IN PCONTEXT Context) { - UNIMPLEMENTED; - while (TRUE); + PKPRCB Prcb; + ULONG i; + + /* Check for success */ + if (NT_SUCCESS(State->u.Continue2.ContinueStatus)) + { + /* Check if we're tracing */ + if (State->u.Continue2.ControlSet.TraceFlag) + { + /* Enable TF */ + Context->EFlags |= EFLAGS_TF; + } + else + { + /* Remove it */ + Context->EFlags &= ~EFLAGS_TF; + } + + /* Loop all processors */ + for (i = 0; i < KeNumberProcessors; i++) + { + /* Get the PRCB and update DR7 and DR6 */ + Prcb = KiProcessorBlock[i]; + Prcb->ProcessorState.SpecialRegisters.KernelDr7 = + State->u.Continue2.ControlSet.Dr7; + Prcb->ProcessorState.SpecialRegisters.KernelDr6 = 0; + } + + /* Check if we have new symbol information */ + if (State->u.Continue2.ControlSet.CurrentSymbolStart != 1) + { + /* Update it */ + KdpCurrentSymbolStart = + State->u.Continue2.ControlSet.CurrentSymbolStart; + KdpCurrentSymbolEnd= State->u.Continue2.ControlSet.CurrentSymbolEnd; + } + } } VOID @@ -31,8 +66,29 @@ NTAPI KdpSetContextState(IN PDBGKD_ANY_WAIT_STATE_CHANGE WaitStateChange, IN PCONTEXT Context) { - UNIMPLEMENTED; - while (TRUE); + PKPRCB Prcb = KeGetCurrentPrcb(); + + /* Copy i386 specific debug registers */ + WaitStateChange->ControlReport.Dr6 = Prcb->ProcessorState.SpecialRegisters. + KernelDr6; + WaitStateChange->ControlReport.Dr7 = Prcb->ProcessorState.SpecialRegisters. + KernelDr7; + + /* Copy i386 specific segments */ + WaitStateChange->ControlReport.SegCs = (USHORT)Context->SegCs; + WaitStateChange->ControlReport.SegDs = (USHORT)Context->SegDs; + WaitStateChange->ControlReport.SegEs = (USHORT)Context->SegEs; + WaitStateChange->ControlReport.SegFs = (USHORT)Context->SegFs; + + /* Copy EFlags */ + WaitStateChange->ControlReport.EFlags = Context->EFlags; + + /* Set Report Flags */ + WaitStateChange->ControlReport.ReportFlags = REPORT_INCLUDES_SEGS; + if (WaitStateChange->ControlReport.SegCs == KGDT_64_R0_CODE) + { + WaitStateChange->ControlReport.ReportFlags |= REPORT_STANDARD_CS; + } } NTSTATUS @@ -40,9 +96,18 @@ NTAPI KdpSysReadMsr(IN ULONG Msr, OUT PLARGE_INTEGER MsrValue) { - UNIMPLEMENTED; - while (TRUE); - return STATUS_UNSUCCESSFUL; + /* Use SEH to protect from invalid MSRs */ + _SEH2_TRY + { + MsrValue->QuadPart = __readmsr(Msr); + } + _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) + { + _SEH2_YIELD(return STATUS_NO_SUCH_DEVICE); + } + _SEH2_END + + return STATUS_SUCCESS; } NTSTATUS @@ -50,9 +115,18 @@ NTAPI KdpSysWriteMsr(IN ULONG Msr, IN PLARGE_INTEGER MsrValue) { - UNIMPLEMENTED; - while (TRUE); - return STATUS_UNSUCCESSFUL; + /* Use SEH to protect from invalid MSRs */ + _SEH2_TRY + { + __writemsr(Msr, MsrValue->QuadPart); + } + _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) + { + _SEH2_YIELD(return STATUS_NO_SUCH_DEVICE); + } + _SEH2_END + + return STATUS_SUCCESS; } NTSTATUS @@ -93,9 +167,47 @@ KdpSysReadControlSpace(IN ULONG Processor, IN ULONG Length, OUT PULONG ActualLength) { - UNIMPLEMENTED; - while (TRUE); - return STATUS_UNSUCCESSFUL; + PVOID ControlStart; + PKPRCB Prcb = KiProcessorBlock[Processor]; + PKIPCR Pcr = CONTAINING_RECORD(Prcb, KIPCR, Prcb); + + switch (BaseAddress) + { + case AMD64_DEBUG_CONTROL_SPACE_KPCR: + /* Copy a pointer to the Pcr */ + ControlStart = &Pcr; + *ActualLength = sizeof(PVOID); + break; + + case AMD64_DEBUG_CONTROL_SPACE_KPRCB: + /* Copy a pointer to the Prcb */ + ControlStart = &Prcb; + *ActualLength = sizeof(PVOID); + break; + + case AMD64_DEBUG_CONTROL_SPACE_KSPECIAL: + /* Copy SpecialRegisters */ + ControlStart = &Prcb->ProcessorState.SpecialRegisters; + *ActualLength = sizeof(KSPECIAL_REGISTERS); + break; + + case AMD64_DEBUG_CONTROL_SPACE_KTHREAD: + /* Copy a pointer to the current Thread */ + ControlStart = &Prcb->CurrentThread; + *ActualLength = sizeof(PVOID); + break; + + default: + *ActualLength = 0; + ASSERT(FALSE); + return STATUS_UNSUCCESSFUL; + } + + /* Copy the memory */ + RtlCopyMemory(Buffer, ControlStart, min(Length, *ActualLength)); + + /* Finish up */ + return STATUS_SUCCESS; } NTSTATUS @@ -106,9 +218,28 @@ KdpSysWriteControlSpace(IN ULONG Processor, IN ULONG Length, OUT PULONG ActualLength) { - UNIMPLEMENTED; - while (TRUE); - return STATUS_UNSUCCESSFUL; + PVOID ControlStart; + PKPRCB Prcb = KiProcessorBlock[Processor]; + PKIPCR Pcr = CONTAINING_RECORD(Prcb, KIPCR, Prcb); + + switch (BaseAddress) + { + case AMD64_DEBUG_CONTROL_SPACE_KSPECIAL: + /* Copy SpecialRegisters */ + ControlStart = &Prcb->ProcessorState.SpecialRegisters; + *ActualLength = sizeof(KSPECIAL_REGISTERS); + break; + + default: + *ActualLength = 0; + ASSERT(FALSE); + return STATUS_UNSUCCESSFUL; + } + + /* Copy the memory */ + RtlCopyMemory(ControlStart, Buffer, min(Length, *ActualLength)); + + return STATUS_SUCCESS; } NTSTATUS @@ -117,13 +248,54 @@ KdpSysReadIoSpace(IN ULONG InterfaceType, IN ULONG BusNumber, IN ULONG AddressSpace, IN ULONG64 IoAddress, - IN PVOID DataValue, + OUT PVOID DataValue, IN ULONG DataSize, OUT PULONG ActualDataSize) { - UNIMPLEMENTED; - while (TRUE); - return STATUS_UNSUCCESSFUL; + /* Verify parameters */ + if (InterfaceType != Isa || BusNumber != 0 || AddressSpace != 1) + { + /* No data was read */ + *ActualDataSize = 0; + return STATUS_INVALID_PARAMETER; + } + + /* Check for correct alignment */ + if ((IoAddress & (DataSize - 1))) + { + /* Invalid alignment */ + *ActualDataSize = 0; + return STATUS_DATATYPE_MISALIGNMENT; + } + + switch (DataSize) + { + case sizeof(UCHAR): + /* Read one UCHAR */ + *(PUCHAR)DataValue = READ_PORT_UCHAR((PUCHAR)IoAddress); + break; + + case sizeof(USHORT): + /* Read one USHORT */ + *(PUSHORT)DataValue = READ_PORT_USHORT((PUSHORT)IoAddress); + break; + + case sizeof(ULONG): + /* Read one ULONG */ + *(PULONG)DataValue = READ_PORT_ULONG((PULONG)IoAddress); + break; + + default: + /* Invalid data size */ + *ActualDataSize = 0; + return STATUS_INVALID_PARAMETER; + } + + /* Return the size of the data */ + *ActualDataSize = DataSize; + + /* Success! */ + return STATUS_SUCCESS; } NTSTATUS @@ -136,9 +308,50 @@ KdpSysWriteIoSpace(IN ULONG InterfaceType, IN ULONG DataSize, OUT PULONG ActualDataSize) { - UNIMPLEMENTED; - while (TRUE); - return STATUS_UNSUCCESSFUL; + /* Verify parameters */ + if (InterfaceType != Isa || BusNumber != 0 || AddressSpace != 1) + { + /* No data was written */ + *ActualDataSize = 0; + return STATUS_INVALID_PARAMETER; + } + + /* Check for correct alignment */ + if ((IoAddress & (DataSize - 1))) + { + /* Invalid alignment */ + *ActualDataSize = 0; + return STATUS_DATATYPE_MISALIGNMENT; + } + + switch (DataSize) + { + case sizeof(UCHAR): + /* Write one UCHAR */ + WRITE_PORT_UCHAR((PUCHAR)IoAddress, *(PUCHAR)DataValue); + break; + + case sizeof(USHORT): + /* Write one USHORT */ + WRITE_PORT_USHORT((PUSHORT)IoAddress, *(PUSHORT)DataValue); + break; + + case sizeof(ULONG): + /* Write one ULONG */ + WRITE_PORT_ULONG((PULONG)IoAddress, *(PULONG)DataValue); + break; + + default: + /* Invalid data size */ + *ActualDataSize = 0; + return STATUS_INVALID_PARAMETER; + } + + /* Return the size of the data */ + *ActualDataSize = DataSize; + + /* Success! */ + return STATUS_SUCCESS; } NTSTATUS diff --git a/reactos/ntoskrnl/ke/amd64/cpu.c b/reactos/ntoskrnl/ke/amd64/cpu.c index 41b4d5a2392..9c0ad21b5b4 100644 --- a/reactos/ntoskrnl/ke/amd64/cpu.c +++ b/reactos/ntoskrnl/ke/amd64/cpu.c @@ -564,39 +564,6 @@ KeRestoreFloatingPointState(IN PKFLOATING_SAVE Save) return STATUS_UNSUCCESSFUL; } -BOOLEAN -NTAPI -KeFreezeExecution(IN PKTRAP_FRAME TrapFrame, - IN PKEXCEPTION_FRAME ExceptionFrame) -{ - ULONG64 Flags = 0; - - /* Disable interrupts and get previous state */ - Flags = __readeflags(); - //Flags = __getcallerseflags(); - _disable(); - - /* Save freeze flag */ - KiFreezeFlag = 4; - - /* Save the old IRQL */ - KiOldIrql = KeGetCurrentIrql(); - - /* Return whether interrupts were enabled */ - return (Flags & EFLAGS_INTERRUPT_MASK) ? TRUE: FALSE; -} - -VOID -NTAPI -KeThawExecution(IN BOOLEAN Enable) -{ - /* Cleanup CPU caches */ - KeFlushCurrentTb(); - - /* Re-enable interrupts */ - if (Enable) _enable(); -} - BOOLEAN NTAPI KeInvalidateAllCaches(VOID) diff --git a/reactos/ntoskrnl/ke/amd64/kiinit.c b/reactos/ntoskrnl/ke/amd64/kiinit.c index 6c4c67432c8..68f9af85477 100644 --- a/reactos/ntoskrnl/ke/amd64/kiinit.c +++ b/reactos/ntoskrnl/ke/amd64/kiinit.c @@ -18,6 +18,9 @@ /* GLOBALS *******************************************************************/ +/* Function pointer for early debug prints */ +ULONG (*FrLdrDbgPrint)(const char *Format, ...); + /* Spinlocks used only on X86 */ KSPIN_LOCK KiFreezeExecutionLock; diff --git a/reactos/ntoskrnl/mm/amd64/init.c b/reactos/ntoskrnl/mm/amd64/init.c index 12cc704ead2..0be522f885c 100644 --- a/reactos/ntoskrnl/mm/amd64/init.c +++ b/reactos/ntoskrnl/mm/amd64/init.c @@ -70,6 +70,11 @@ ULONG64 MmNumberOfSystemPtes; PMMPTE MmSystemPagePtes; ULONG64 MxPfnAllocation; +PVOID MmSystemCacheStart; +PVOID MmSystemCacheEnd; +MMSUPPORT MmSystemCacheWs; + + /////////////////////////////////////////////// PMEMORY_ALLOCATION_DESCRIPTOR MxFreeDescriptor; diff --git a/reactos/ntoskrnl/ntoskrnl-generic.rbuild b/reactos/ntoskrnl/ntoskrnl-generic.rbuild index 81fe109d25d..2d7e03227ca 100644 --- a/reactos/ntoskrnl/ntoskrnl-generic.rbuild +++ b/reactos/ntoskrnl/ntoskrnl-generic.rbuild @@ -111,7 +111,9 @@ dpc.c eventobj.c except.c - freeldr.c + + freeldr.c + freeze.c gate.c gmutex.c From 81a17fc8f42ecaf2cd4a41b85e2fefe24ed8fb9d Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Tue, 10 Nov 2009 03:36:57 +0000 Subject: [PATCH 102/286] add missing file svn path=/branches/ros-amd64-bringup/; revision=44072 --- reactos/hal/halamd64/generic/usage.c | 61 ++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 reactos/hal/halamd64/generic/usage.c diff --git a/reactos/hal/halamd64/generic/usage.c b/reactos/hal/halamd64/generic/usage.c new file mode 100644 index 00000000000..f81099afbad --- /dev/null +++ b/reactos/hal/halamd64/generic/usage.c @@ -0,0 +1,61 @@ +/* + * PROJECT: ReactOS HAL + * LICENSE: GPL - See COPYING in the top level directory + * FILE: hal/halx86/generic/usage.c + * PURPOSE: HAL Resource Report Routines + * PROGRAMMERS: + */ + +/* INCLUDES *******************************************************************/ + +#include +#define NDEBUG +#include + +/* GLOBALS ********************************************************************/ + +PUCHAR KdComPortInUse; + +/* FUNCTIONS ******************************************************************/ +#if 0 +VOID +NTAPI +HalpReportResourceUsage(IN PUNICODE_STRING HalName, + IN INTERFACE_TYPE InterfaceType) +{ + DbgPrint("%wZ has been initialized\n", HalName); +} + +VOID +NTAPI +HalpRegisterVector(IN UCHAR Flags, + IN ULONG BusVector, + IN ULONG SystemVector, + IN KIRQL Irql) +{ + UNIMPLEMENTED; +} + +VOID +NTAPI +HalpEnableInterruptHandler(IN UCHAR Flags, + IN ULONG BusVector, + IN ULONG SystemVector, + IN KIRQL Irql, + IN PVOID Handler, + IN KINTERRUPT_MODE Mode) +{ + UNIMPLEMENTED; +} + +/* + * @unimplemented + */ +VOID +NTAPI +HalReportResourceUsage(VOID) +{ + UNIMPLEMENTED; +} +#endif + From a50151076394b4efc3e440e3c78fcd0d6883c6ff Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Tue, 10 Nov 2009 04:19:43 +0000 Subject: [PATCH 103/286] [MM] Implement MmIsAddressValid for amd64. svn path=/branches/ros-amd64-bringup/; revision=44073 --- reactos/ntoskrnl/mm/ARM3/mmsup.c | 2 ++ reactos/ntoskrnl/mm/amd64/page.c | 15 +++++++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/reactos/ntoskrnl/mm/ARM3/mmsup.c b/reactos/ntoskrnl/mm/ARM3/mmsup.c index 6fc28279a2e..ec7660cab66 100644 --- a/reactos/ntoskrnl/mm/ARM3/mmsup.c +++ b/reactos/ntoskrnl/mm/ARM3/mmsup.c @@ -62,6 +62,7 @@ MmSetAddressRangeModified(IN PVOID Address, return FALSE; } +#ifndef _M_AMD64 /* * @implemented */ @@ -87,6 +88,7 @@ MmIsAddressValid(IN PVOID VirtualAddress) // return TRUE; } +#endif /* * @unimplemented diff --git a/reactos/ntoskrnl/mm/amd64/page.c b/reactos/ntoskrnl/mm/amd64/page.c index fbf7bdca8fd..a561577f321 100644 --- a/reactos/ntoskrnl/mm/amd64/page.c +++ b/reactos/ntoskrnl/mm/amd64/page.c @@ -96,12 +96,12 @@ MiGetPteForProcess( /* Get the PPE */ Pte = MiAddressToPpe(Address); - if (Pte->u.Hard.Valid) + if (!Pte->u.Hard.Valid) return NULL; /* Get the PDE */ Pte = MiAddressToPde(Address); - if (Pte->u.Hard.Valid) + if (!Pte->u.Hard.Valid) return NULL; /* Get the PTE */ @@ -542,5 +542,16 @@ MmCreateProcessAddressSpace(IN ULONG MinWs, return 0; } +BOOLEAN +NTAPI +MmIsAddressValid(IN PVOID VirtualAddress) +{ + /* Check all four page table levels */ + return (MiAddressToPxe(VirtualAddress)->u.Hard.Valid != 0 && + MiAddressToPpe(VirtualAddress)->u.Hard.Valid != 0 && + MiAddressToPde(VirtualAddress)->u.Hard.Valid != 0 && + MiAddressToPte(VirtualAddress)->u.Hard.Valid != 0); +} + /* EOF */ From d3d5631e62ebc59f8c583d97a132da4aa81e0cac Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Wed, 11 Nov 2009 01:53:48 +0000 Subject: [PATCH 104/286] - Correct implementations of MiAddressToP*e() would help a bit... implement them as inline functions. svn path=/branches/ros-amd64-bringup/; revision=44088 --- reactos/ntoskrnl/include/internal/amd64/mm.h | 54 ++++++++++++++------ 1 file changed, 37 insertions(+), 17 deletions(-) diff --git a/reactos/ntoskrnl/include/internal/amd64/mm.h b/reactos/ntoskrnl/include/internal/amd64/mm.h index 452758b957b..c326c85930e 100644 --- a/reactos/ntoskrnl/include/internal/amd64/mm.h +++ b/reactos/ntoskrnl/include/internal/amd64/mm.h @@ -5,7 +5,11 @@ #ifndef __NTOSKRNL_INCLUDE_INTERNAL_AMD64_MM_H #define __NTOSKRNL_INCLUDE_INTERNAL_AMD64_MM_H -struct _EPROCESS; +#define PAGE_MASK(x) ((x)&(~0xfff)) +#define PAE_PAGE_MASK(x) ((x)&(~0xfffLL)) + +#define HYPER_SPACE 0xFFFFF70000000000ULL +#define HYPER_SPACE_END 0xFFFFF77FFFFFFFFFULL PULONG64 FORCEINLINE @@ -14,25 +18,41 @@ MmGetPageDirectory(VOID) return (PULONG64)__readcr3(); } -#define PAGE_MASK(x) ((x)&(~0xfff)) -#define PAE_PAGE_MASK(x) ((x)&(~0xfffLL)) +PMMPTE +FORCEINLINE +MiAddressToPxe(PVOID Address) +{ + ULONG64 Offset = (ULONG64)Address >> (PXI_SHIFT - 3); + Offset &= PXI_MASK << 3; + return (PMMPTE)(PXE_BASE + Offset); +} -#define HYPER_SPACE 0xFFFFF70000000000ULL -#define HYPER_SPACE_END 0xFFFFF77FFFFFFFFFULL +PMMPTE +FORCEINLINE +MiAddressToPpe(PVOID Address) +{ + ULONG64 Offset = (ULONG64)Address >> (PPI_SHIFT - 3); + Offset &= 0x3FFFF << 3; + return (PMMPTE)(PPE_BASE + Offset); +} -/* Base addresses of PTE and PDE */ -//#define PAGETABLE_MAP PTE_BASE -//#define PAGEDIRECTORY_MAP (0xc0000000 + (PAGETABLE_MAP / (1024))) +PMMPTE +FORCEINLINE +MiAddressToPde(PVOID Address) +{ + ULONG64 Offset = (ULONG64)Address >> (PDI_SHIFT - 3); + Offset &= 0x7FFFFFF << 3; + return (PMMPTE)(PDE_BASE + Offset); +} -/* Converting address to a corresponding PDE or PTE entry */ -#define MiAddressToPxe(x) \ - ((PMMPTE)((((((ULONG64)(x)) >> PXI_SHIFT) & PXI_MASK) << 3) + PXE_BASE)) -#define MiAddressToPpe(x) \ - ((PMMPTE)((((((ULONG64)(x)) >> PPI_SHIFT) & PPI_MASK) << 3) + PPE_BASE)) -#define MiAddressToPde(x) \ - ((PMMPTE)((((((ULONG64)(x)) >> PDI_SHIFT) & PDI_MASK_AMD64) << 3) + PDE_BASE)) -#define MiAddressToPte(x) \ - ((PMMPTE)((((((ULONG64)(x)) >> PTI_SHIFT) & PTI_MASK_AMD64) << 3) + PTE_BASE)) +PMMPTE +FORCEINLINE +MiAddressToPte(PVOID Address) +{ + ULONG64 Offset = (ULONG64)Address >> (PTI_SHIFT - 3); + Offset &= 0xFFFFFFFFFULL << 3; + return (PMMPTE)(PTE_BASE + Offset); +} /* Convert a PTE into a corresponding address */ #define MiPteToAddress(PTE) ((PVOID)((ULONG64)(PTE) << 9)) From 2e92cb2a4c8294f58681465a96f4200e61eefff9 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Wed, 11 Nov 2009 04:29:05 +0000 Subject: [PATCH 105/286] Use the kernel mode address for the gdt/idt svn path=/branches/ros-amd64-bringup/; revision=44095 --- reactos/boot/freeldr/freeldr/windows/amd64/wlmemory.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/reactos/boot/freeldr/freeldr/windows/amd64/wlmemory.c b/reactos/boot/freeldr/freeldr/windows/amd64/wlmemory.c index dd123d5cdc3..c5f55cab69f 100644 --- a/reactos/boot/freeldr/freeldr/windows/amd64/wlmemory.c +++ b/reactos/boot/freeldr/freeldr/windows/amd64/wlmemory.c @@ -335,10 +335,13 @@ WinLdrSetProcessorContext(PVOID GdtIdt, IN ULONG64 Pcr, IN ULONG64 Tss) /* Set the new PML4 */ __writecr3((ULONGLONG)pPML4); - RtlZeroMemory(GdtIdt, PAGE_SIZE); + /* Get kernel mode address of gdt / idt */ + GdtIdt = (PVOID)((LONG64)GdtIdt + KSEG0_BASE); + /* Create gdt entries and load gdtr */ WinLdrSetupGdt(GdtIdt, Tss); + /* Copy old Idt and set idtr */ WinLdrSetupIdt((PVOID)((ULONG64)GdtIdt + 2048)); // HACK! /* LDT is unused */ From 2c2f893be1418e9601d77023e81db6bf6421b019 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Fri, 13 Nov 2009 02:16:15 +0000 Subject: [PATCH 106/286] fix a typo svn path=/branches/ros-amd64-bringup/; revision=44123 --- reactos/boot/freeldr/freeldr/windows/amd64/wlmemory.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/boot/freeldr/freeldr/windows/amd64/wlmemory.c b/reactos/boot/freeldr/freeldr/windows/amd64/wlmemory.c index c5f55cab69f..b14ee0ae2b9 100644 --- a/reactos/boot/freeldr/freeldr/windows/amd64/wlmemory.c +++ b/reactos/boot/freeldr/freeldr/windows/amd64/wlmemory.c @@ -161,7 +161,7 @@ MempMapRangeOfPages(ULONGLONG VirtualAddress, ULONGLONG PhysicalAddress, ULONG c for (i = 0; i < cPages; i++) { - if (!FrLdrMapSinglePage(VirtualAddress, PhysicalAddress)) + if (!MempMapSinglePage(VirtualAddress, PhysicalAddress)) { return i; } From 321196255abe909904d03be5a34f63a5e2f528b4 Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Fri, 13 Nov 2009 09:24:35 +0000 Subject: [PATCH 107/286] - re-add explorer (old one) to build, it builds. - use amd64 specific manifest file. - still not a valid exe according to windows 7 svn path=/branches/ros-amd64-bringup/; revision=44124 --- .../explorer/explorer.exe.amd64.manifest | 22 +++++++++++++++++++ reactos/base/shell/explorer/explorer.rbuild | 1 - .../base/shell/explorer/explorer_intres.rc | 4 ++++ reactos/base/shell/shell.rbuild | 8 +++---- 4 files changed, 29 insertions(+), 6 deletions(-) create mode 100644 reactos/base/shell/explorer/explorer.exe.amd64.manifest diff --git a/reactos/base/shell/explorer/explorer.exe.amd64.manifest b/reactos/base/shell/explorer/explorer.exe.amd64.manifest new file mode 100644 index 00000000000..61aceffc839 --- /dev/null +++ b/reactos/base/shell/explorer/explorer.exe.amd64.manifest @@ -0,0 +1,22 @@ + + + +ROS Explorer + + + + + + diff --git a/reactos/base/shell/explorer/explorer.rbuild b/reactos/base/shell/explorer/explorer.rbuild index 04084aac222..ecb39753bd5 100644 --- a/reactos/base/shell/explorer/explorer.rbuild +++ b/reactos/base/shell/explorer/explorer.rbuild @@ -66,7 +66,6 @@ explorer.rc --enable-stdcall-fixup - '$(shell ${TARGET_CPP} -print-file-name=libcoldname.a)' explorer-cfg-template.xml diff --git a/reactos/base/shell/explorer/explorer_intres.rc b/reactos/base/shell/explorer/explorer_intres.rc index a8d5f41439c..2cafd7ff7a8 100644 --- a/reactos/base/shell/explorer/explorer_intres.rc +++ b/reactos/base/shell/explorer/explorer_intres.rc @@ -104,8 +104,12 @@ BEGIN "END\r\n" "#endif\r\n" "#ifndef _DEBUG\r\n" + "#ifdef _AMD64_" + "CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST DISCARDABLE PURE ""explorer.exe.amd64.manifest""\r\n" + "#else" "CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST DISCARDABLE PURE ""explorer.exe.manifest""\r\n" "#endif\r\n" + "#endif\r\n" "\r\n" "#include ""explorer-bg.rc""\r\n" "#include ""explorer-cz.rc""\r\n" diff --git a/reactos/base/shell/shell.rbuild b/reactos/base/shell/shell.rbuild index 538c40256bc..efdd8f323e7 100644 --- a/reactos/base/shell/shell.rbuild +++ b/reactos/base/shell/shell.rbuild @@ -4,11 +4,9 @@ - - - - - + + + From db4d913635f6b8e37360a186901640dce165bf09 Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Fri, 13 Nov 2009 09:30:39 +0000 Subject: [PATCH 108/286] - Enable telnet, and tftpd. - re-add some missing ntdll exports. - export ctime64, its available. svn path=/branches/ros-amd64-bringup/; revision=44125 --- reactos/base/applications/network/network.rbuild | 4 ++-- reactos/base/services/services.rbuild | 6 +++--- reactos/dll/ntdll/def/ntdll_amd64.def | 5 ++++- reactos/dll/win32/msvcrt/msvcrt-amd64.def | 2 +- 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/reactos/base/applications/network/network.rbuild b/reactos/base/applications/network/network.rbuild index 64f344a9a20..61109ec8bd7 100644 --- a/reactos/base/applications/network/network.rbuild +++ b/reactos/base/applications/network/network.rbuild @@ -31,9 +31,9 @@ - + diff --git a/reactos/base/services/services.rbuild b/reactos/base/services/services.rbuild index 3ab94214d60..993f7d01ad9 100644 --- a/reactos/base/services/services.rbuild +++ b/reactos/base/services/services.rbuild @@ -25,9 +25,9 @@ - - - + + + diff --git a/reactos/dll/ntdll/def/ntdll_amd64.def b/reactos/dll/ntdll/def/ntdll_amd64.def index 55349f74159..8af1dd3442d 100644 --- a/reactos/dll/ntdll/def/ntdll_amd64.def +++ b/reactos/dll/ntdll/def/ntdll_amd64.def @@ -648,6 +648,7 @@ RtlComputeCrc32 ;RtlConsoleMultiByteToUnicodeN RtlConvertExclusiveToShared ;RtlConvertLCIDToString +RtlConvertUlongToLargeInteger RtlConvertSharedToExclusive RtlConvertSidToUnicodeString ;RtlConvertToAutoInheritSecurityObject @@ -934,11 +935,13 @@ RtlIsGenericTableEmptyAvl RtlIsNameLegalDOS8Dot3 ;RtlIsNormalizedString RtlIsTextUnicode -;RtlIsThreadWithinLoaderCallout +RtlIsThreadWithinLoaderCallout RtlIsValidHandle RtlIsValidIndexHandle ;RtlIsValidLocaleName ;RtlLCIDToCultureName +RtlLargeIntegerSubtract +RtlLargeIntegerDivide RtlLargeIntegerToChar ;RtlLcidToLocaleName RtlLeaveCriticalSection diff --git a/reactos/dll/win32/msvcrt/msvcrt-amd64.def b/reactos/dll/win32/msvcrt/msvcrt-amd64.def index 6f163ad0f90..2c2e05f8705 100644 --- a/reactos/dll/win32/msvcrt/msvcrt-amd64.def +++ b/reactos/dll/win32/msvcrt/msvcrt-amd64.def @@ -232,7 +232,7 @@ EXPORTS ; _cputws @226 _creat @227 _cscanf @228 -; _ctime64 @229 + _ctime64 @229 _ctype @230 DATA _cwait @231 ; _cwprintf @232 From e9a467330791fc3f2e8d4eac12f18984f8ed1bfd Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Fri, 13 Nov 2009 14:29:39 +0000 Subject: [PATCH 109/286] Convert KdpDprintf to conditional KDDBGPRINT macros to stop spamming WinDbg on invalid addresses. svn path=/branches/ros-amd64-bringup/; revision=44134 --- reactos/ntoskrnl/mm/mmdbg.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/reactos/ntoskrnl/mm/mmdbg.c b/reactos/ntoskrnl/mm/mmdbg.c index 65f9ebc7f47..31cc57bd525 100644 --- a/reactos/ntoskrnl/mm/mmdbg.c +++ b/reactos/ntoskrnl/mm/mmdbg.c @@ -13,6 +13,12 @@ #define NDEBUG #include +#ifndef NDEBUG +#define KDDBGPRINT KdpDprintf +#else +#define KDDBGPRINT if (0) KdpDprintf +#endif + /* GLOBALS ********************************************************************/ PMMPTE MmDebugPte = MiAddressToPte(MI_DEBUG_MAPPING); @@ -47,7 +53,7 @@ MiDbgTranslatePhysicalAddress(IN ULONG64 PhysicalAddress, // // The structures we require aren't initialized yet, fail // - KdpDprintf("MiDbgTranslatePhysicalAddress called too early! " + KDDBGPRINT("MiDbgTranslatePhysicalAddress called too early! " "Address: 0x%I64x\n", PhysicalAddress); return NULL; } @@ -62,7 +68,7 @@ MiDbgTranslatePhysicalAddress(IN ULONG64 PhysicalAddress, // // Fail // - KdpDprintf("MiDbgTranslatePhysicalAddress: Cache Flags not yet supported. " + KDDBGPRINT("MiDbgTranslatePhysicalAddress: Cache Flags not yet supported. " "Flags: 0x%lx\n", Flags & (MMDBG_COPY_CACHED | MMDBG_COPY_UNCACHED | MMDBG_COPY_WRITE_COMBINED)); @@ -92,7 +98,7 @@ MiDbgTranslatePhysicalAddress(IN ULONG64 PhysicalAddress, // // FIXME: We don't support this yet // - KdpDprintf("MiDbgTranslatePhysicalAddress: I/O Space not yet supported. " + KDDBGPRINT("MiDbgTranslatePhysicalAddress: I/O Space not yet supported. " "PFN: 0x%I64x\n", (ULONG64)Pfn); return NULL; } @@ -161,7 +167,7 @@ MmDbgCopyMemory(IN ULONG64 Address, // // Invalid size, fail // - KdpDprintf("MmDbgCopyMemory: Received Illegal Size 0x%lx\n", Size); + KDDBGPRINT("MmDbgCopyMemory: Received Illegal Size 0x%lx\n", Size); return STATUS_INVALID_PARAMETER_3; } @@ -173,7 +179,7 @@ MmDbgCopyMemory(IN ULONG64 Address, // // Fail // - KdpDprintf("MmDbgCopyMemory: Received Unaligned Address 0x%I64x Size %lx\n", + KDDBGPRINT("MmDbgCopyMemory: Received Unaligned Address 0x%I64x Size %lx\n", Address, Size); return STATUS_INVALID_PARAMETER_3; } @@ -196,7 +202,7 @@ MmDbgCopyMemory(IN ULONG64 Address, // // Fail // - KdpDprintf("MmDbgCopyMemory: Failed to Translate Physical Address " + KDDBGPRINT("MmDbgCopyMemory: Failed to Translate Physical Address " "%I64x\n", Address); return STATUS_UNSUCCESSFUL; } @@ -221,7 +227,7 @@ MmDbgCopyMemory(IN ULONG64 Address, // // Fail // - KdpDprintf("MmDbgCopyMemory: Failing %s for invalid " + KDDBGPRINT("MmDbgCopyMemory: Failing %s for invalid " "Virtual Address 0x%p\n", Flags & MMDBG_COPY_WRITE ? "write" : "read", TargetAddress); @@ -257,7 +263,7 @@ MmDbgCopyMemory(IN ULONG64 Address, // FIXME: We should attempt to override the write protection instead of // failing here // - KdpDprintf("MmDbgCopyMemory: Failing Write for Protected Address 0x%p\n", + KDDBGPRINT("MmDbgCopyMemory: Failing Write for Protected Address 0x%p\n", TargetAddress); return STATUS_UNSUCCESSFUL; } From bb7f766eff72734b95c17ef7d8d2e38a85f7ac3c Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Fri, 13 Nov 2009 23:23:53 +0000 Subject: [PATCH 110/286] Initialize MmDebugPte from MiDebugMapping variable instead of using MiAddressToPte for a constant initializer. This way the page can be set dynamically. Use MmDebugPte to determine if ready for mapping physical pages. svn path=/branches/ros-amd64-bringup/; revision=44143 --- reactos/ntoskrnl/include/internal/mm.h | 3 ++- reactos/ntoskrnl/mm/mmdbg.c | 6 +++--- reactos/ntoskrnl/mm/mminit.c | 4 ++-- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/reactos/ntoskrnl/include/internal/mm.h b/reactos/ntoskrnl/include/internal/mm.h index bf2e87d3c8e..eaed9f4ab43 100644 --- a/reactos/ntoskrnl/include/internal/mm.h +++ b/reactos/ntoskrnl/include/internal/mm.h @@ -45,7 +45,8 @@ extern SIZE_T MmPagedPoolCommit; extern SIZE_T MmPeakCommitment; extern SIZE_T MmtotalCommitLimitMaximum; -extern BOOLEAN MiDbgReadyForPhysical; +extern PVOID MiDebugMapping; +extern PMMPTE MmDebugPte; struct _KTRAP_FRAME; struct _EPROCESS; diff --git a/reactos/ntoskrnl/mm/mmdbg.c b/reactos/ntoskrnl/mm/mmdbg.c index 31cc57bd525..a79bf4ac4e9 100644 --- a/reactos/ntoskrnl/mm/mmdbg.c +++ b/reactos/ntoskrnl/mm/mmdbg.c @@ -21,8 +21,8 @@ /* GLOBALS ********************************************************************/ -PMMPTE MmDebugPte = MiAddressToPte(MI_DEBUG_MAPPING); -BOOLEAN MiDbgReadyForPhysical = FALSE; +PVOID MiDebugMapping = MI_DEBUG_MAPPING; +PMMPTE MmDebugPte = NULL; /* FUNCTIONS ******************************************************************/ @@ -48,7 +48,7 @@ MiDbgTranslatePhysicalAddress(IN ULONG64 PhysicalAddress, // // Check if we are called too early // - if (MiDbgReadyForPhysical == FALSE) + if (MmDebugPte == NULL) { // // The structures we require aren't initialized yet, fail diff --git a/reactos/ntoskrnl/mm/mminit.c b/reactos/ntoskrnl/mm/mminit.c index d964c22388b..647db5c7d55 100644 --- a/reactos/ntoskrnl/mm/mminit.c +++ b/reactos/ntoskrnl/mm/mminit.c @@ -388,7 +388,7 @@ MmInitSystem(IN ULONG Phase, // Everything required for the debugger to read and write // physical memory is now set up // - MiDbgReadyForPhysical = TRUE; + MmDebugPte = MiAddressToPte(MiDebugMapping); #endif /* Put the paged pool after the loaded modules */ @@ -508,7 +508,7 @@ MmInitSystem(IN ULONG Phase, // // Now get the PTE for shared data, and read the PFN that holds it // - PointerPte = MiAddressToPte(KI_USER_SHARED_DATA); + PointerPte = MiAddressToPte((PVOID)KI_USER_SHARED_DATA); ASSERT(PointerPte->u.Hard.Valid == 1); PageFrameNumber = PFN_FROM_PTE(PointerPte); From dd9ed9ea92d0aeb30bba4cecac29bbfc68f35982 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Fri, 13 Nov 2009 23:30:44 +0000 Subject: [PATCH 111/286] - Share some more inline functions between the kernel and freeldr - Use __ltr instead of Ke386SetTr - refactor KiInitializeTss - Update some Mm conatnts - Halfplement KeFlushEntireTb - Clean the mapping of page 0 in KiSystemStartup, as long as we don't clean mappings in freeldr - Fix a serious bug in KiPageFault, where ebp was used instead of rbp, resulting in recursive page faults as soon as usermode mappings were cleared - Refactor MmArmInitSystem and related. Pahse 0 initialisation completes here now. we fail later in freelist setup code, which is not 64 bit safe. svn path=/branches/ros-amd64-bringup/; revision=44144 --- .../freeldr/include/arch/amd64/amd64.h | 22 - .../freeldr/freeldr/windows/amd64/wlmemory.c | 4 +- .../include/internal/amd64/intrin_i.h | 74 +++- reactos/ntoskrnl/include/internal/amd64/ke.h | 15 +- reactos/ntoskrnl/include/internal/amd64/mm.h | 24 +- reactos/ntoskrnl/ke/amd64/cpu.c | 54 ++- reactos/ntoskrnl/ke/amd64/kiinit.c | 28 +- reactos/ntoskrnl/ke/amd64/trap.S | 28 +- reactos/ntoskrnl/mm/amd64/init.c | 417 +++++++++++------- 9 files changed, 381 insertions(+), 285 deletions(-) diff --git a/reactos/boot/freeldr/freeldr/include/arch/amd64/amd64.h b/reactos/boot/freeldr/freeldr/include/arch/amd64/amd64.h index f050c3d0ec9..ea7e3800742 100644 --- a/reactos/boot/freeldr/freeldr/include/arch/amd64/amd64.h +++ b/reactos/boot/freeldr/freeldr/include/arch/amd64/amd64.h @@ -58,28 +58,6 @@ typedef struct _PAGE_DIRECTORY_AMD64 HARDWARE_PTE Pde[512]; } PAGE_DIRECTORY_AMD64, *PPAGE_DIRECTORY_AMD64; -PKGDTENTRY64 -FORCEINLINE -KiGetGdtEntry(PVOID pGdt, USHORT Index) -{ - return (PKGDTENTRY64)((ULONG64)pGdt + (Index & ~RPL_MASK)); -} - -VOID -FORCEINLINE -KiInitGdtEntry(PKGDTENTRY64 Entry, ULONG64 Base, ULONG Limit, UCHAR Type, UCHAR Dpl) -{ - Entry->Bits.Type = Type; - Entry->Bits.Present = 1; - Entry->Bits.Dpl = Dpl; - Entry->BaseLow = (USHORT)(Base & 0xFFFF); - Entry->Bytes.BaseMiddle = (UCHAR)(Base >> 16); - Entry->Bytes.BaseHigh = (UCHAR)(Base >> 24); - Entry->BaseUpper = (ULONG)(Base >> 32); - Entry->LimitLow = (USHORT)(Limit & 0xFFFF); - Entry->Bits.LimitHigh = (ULONG)((Limit >> 16) & 0xf); - Entry->MustBeZero = 0; -} VOID FrLdrSetupGdtIdt(); diff --git a/reactos/boot/freeldr/freeldr/windows/amd64/wlmemory.c b/reactos/boot/freeldr/freeldr/windows/amd64/wlmemory.c index b14ee0ae2b9..e331536eeff 100644 --- a/reactos/boot/freeldr/freeldr/windows/amd64/wlmemory.c +++ b/reactos/boot/freeldr/freeldr/windows/amd64/wlmemory.c @@ -354,8 +354,8 @@ WinLdrSetProcessorContext(PVOID GdtIdt, IN ULONG64 Pcr, IN ULONG64 Tss) Ke386SetGs(KGDT_64_DATA | RPL_MASK); // 0x2b Ke386SetSs(KGDT_64_R0_SS); // 0x18 - // Load TSR - Ke386SetTr(KGDT_TSS); + /* Load TSR */ + __ltr(KGDT_TSS); DPRINTM(DPRINT_WINDOWS, "leave WinLdrSetProcessorContext\n"); } diff --git a/reactos/ntoskrnl/include/internal/amd64/intrin_i.h b/reactos/ntoskrnl/include/internal/amd64/intrin_i.h index 1bde1780467..ad1bf1b608c 100644 --- a/reactos/ntoskrnl/include/internal/amd64/intrin_i.h +++ b/reactos/ntoskrnl/include/internal/amd64/intrin_i.h @@ -9,6 +9,57 @@ #define KeSetCurrentIrql(x) __writecr8(x) +PKGDTENTRY64 +FORCEINLINE +KiGetGdtEntry(PVOID pGdt, USHORT Selector) +{ + return (PKGDTENTRY64)((ULONG64)pGdt + (Selector & ~RPL_MASK)); +} + +PVOID +FORCEINLINE +KiGetGdtDescriptorBase(PKGDTENTRY Entry) +{ + return (PVOID)((ULONG64)Entry->BaseLow | + (ULONG64)Entry->Bytes.BaseMiddle << 16 | + (ULONG64)Entry->Bytes.BaseHigh << 24 | + (ULONG64)Entry->BaseUpper << 32); +} + +VOID +FORCEINLINE +KiSetGdtDescriptorBase(PKGDTENTRY Entry, ULONG64 Base) +{ + Entry->BaseLow = Base & 0xffff; + Entry->Bits.BaseMiddle = (Base >> 16) & 0xff; + Entry->Bits.BaseHigh = (Base >> 24) & 0xff; + Entry->BaseUpper = Base >> 32; +} + +PVOID +FORCEINLINE +KiSetGdtDescriptorLimit(PKGDTENTRY Entry, ULONG Limit) +{ + Entry->LimitLow = Limit & 0xffff; + Entry->Bits.LimitHigh = Limit >> 16; +} + +VOID +FORCEINLINE +KiInitGdtEntry(PKGDTENTRY64 Entry, ULONG64 Base, ULONG Size, UCHAR Type, UCHAR Dpl) +{ + KiSetGdtDescriptorBase(Entry, Base); + KiSetGdtDescriptorLimit(Entry, Size - 1); + Entry->Bits.Type = Type; + Entry->Bits.Dpl = Dpl; + Entry->Bits.Present = 1; + Entry->Bits.System = 0; + Entry->Bits.LongMode = 0; + Entry->Bits.DefaultBig = 0; + Entry->Bits.Granularity = 0; + Entry->MustBeZero = 0; +} + #if defined(__GNUC__) static __inline__ __attribute__((always_inline)) void __lgdt(void *Source) @@ -41,9 +92,9 @@ static __inline__ __attribute__((always_inline)) void __stmxcsr(unsigned long *D __asm__ __volatile__("stmxcsr %0" : : "m"(*Destination) : "memory"); } -static __inline__ __attribute__((always_inline)) void __ltr(unsigned short *Source) +static __inline__ __attribute__((always_inline)) void __ltr(unsigned short Source) { - __asm__ __volatile__("ltr %0" : : "m"(*Source)); + __asm__ __volatile__("ltr %0" : : "rm"(Source)); } static __inline__ __attribute__((always_inline)) void __str(unsigned short *Destination) @@ -51,25 +102,6 @@ static __inline__ __attribute__((always_inline)) void __str(unsigned short *Dest __asm__ __volatile__("str %0" : : "m"(*Destination) : "memory"); } -#define Ke386GetLocalDescriptorTable(X) \ - __asm__("sldt %0\n\t" \ - : /* no outputs */ \ - : "m" (X)); - -#define Ke386SetLocalDescriptorTable(X) \ - __asm__("lldt %w0\n\t" \ - : /* no outputs */ \ - : "q" (X)); - -#define Ke386SetTr(X) __asm__ __volatile__("ltr %%ax" : :"a" (X)); - -#define Ke386GetTr(X) \ - __asm__("str %0\n\t" \ - : /* no outputs */ \ - : "m" (X)); - -#define Ke386SaveFlags(x) __asm__ __volatile__("pushfq ; popq %0":"=rm" (x): /* no input */) -#define Ke386RestoreFlags(x) __asm__ __volatile__("pushq %0 ; popfq": /* no output */ :"irm" (x):"memory") #define _Ke386GetSeg(N) ({ \ unsigned int __d; \ diff --git a/reactos/ntoskrnl/include/internal/amd64/ke.h b/reactos/ntoskrnl/include/internal/amd64/ke.h index 0778fe2873a..eeb3856a254 100644 --- a/reactos/ntoskrnl/include/internal/amd64/ke.h +++ b/reactos/ntoskrnl/include/internal/amd64/ke.h @@ -46,6 +46,8 @@ #define X86_MSR_CSTAR 0xC0000083 #define X86_MSR_SFMASK 0xC0000084 +#define AMD64_TSS 9 + #ifndef __ASM__ #include "intrin_i.h" @@ -118,21 +120,10 @@ KeInvalidateTlbEntry(IN PVOID Address) } struct _KPCR; -VOID -KiInitializeGdt(struct _KPCR* Pcr); -VOID -Ki386ApplicationProcessorInitializeTSS(VOID); - -// Hack -VOID KiRosPrepareForSystemStartup(ULONG, PROS_LOADER_PARAMETER_BLOCK); VOID FASTCALL -Ki386InitializeTss( - IN PKTSS Tss, - IN PVOID GdtBase, - IN UINT64 Stack -); +KiInitializeTss(IN PKTSS Tss, IN UINT64 Stack); VOID KiDivideErrorFault(); VOID KiDebugTrapOrFault(); diff --git a/reactos/ntoskrnl/include/internal/amd64/mm.h b/reactos/ntoskrnl/include/internal/amd64/mm.h index c326c85930e..90871e2d63c 100644 --- a/reactos/ntoskrnl/include/internal/amd64/mm.h +++ b/reactos/ntoskrnl/include/internal/amd64/mm.h @@ -5,11 +5,24 @@ #ifndef __NTOSKRNL_INCLUDE_INTERNAL_AMD64_MM_H #define __NTOSKRNL_INCLUDE_INTERNAL_AMD64_MM_H +/* Helper macros */ #define PAGE_MASK(x) ((x)&(~0xfff)) #define PAE_PAGE_MASK(x) ((x)&(~0xfffLL)) -#define HYPER_SPACE 0xFFFFF70000000000ULL -#define HYPER_SPACE_END 0xFFFFF77FFFFFFFFFULL +/* Memory layout base addresses */ +#define HYPER_SPACE 0xFFFFF70000000000ULL +#define HYPER_SPACE_END 0xFFFFF77FFFFFFFFFULL +#define MI_SESSION_VIEW_END (PVOID)0xFFFFF97FFF000000ULL +#define MI_SESSION_SPACE_END (PVOID)0xFFFFF98000000000ULL + +#define MI_PAGED_POOL_START (PVOID)0xFFFFFA8000000000ULL + +#define MI_NON_PAGED_SYSTEM_START_MIN 0xFFFFFAA000000000ULL +#define MI_NONPAGED_POOL_END (PVOID)0xFFFFFAE000000000ULL + +#define MI_DEBUG_MAPPING (PVOID)0xFFFFFFFF80000000ULL // FIXME + + PULONG64 FORCEINLINE @@ -87,8 +100,8 @@ MiAddressToPte(PVOID Address) #define MI_MIN_PAGES_FOR_NONPAGED_POOL_TUNING ((255*1024*1024) >> PAGE_SHIFT) #define MI_MIN_PAGES_FOR_SYSPTE_TUNING ((19*1024*1024) >> PAGE_SHIFT) #define MI_MIN_PAGES_FOR_SYSPTE_BOOST ((32*1024*1024) >> PAGE_SHIFT) -#define MI_MAX_INIT_NONPAGED_POOL_SIZE (128 * 1024 * 1024) -#define MI_MAX_NONPAGED_POOL_SIZE (128 * 1024 * 1024) +#define MI_MAX_INIT_NONPAGED_POOL_SIZE (128ULL * 1024 * 1024 * 1024) +#define MI_MAX_NONPAGED_POOL_SIZE (128ULL * 1024 * 1024 * 1024) #define MI_MAX_FREE_PAGE_LISTS 4 #define MI_MIN_INIT_PAGED_POOLSIZE (32 * 1024 * 1024) @@ -104,9 +117,6 @@ MiAddressToPte(PVOID Address) #define MI_SYSTEM_VIEW_SIZE (16 * 1024 * 1024) -#define MI_PAGED_POOL_START (PVOID)0xFFFFFA8000000000ULL -#define MI_NONPAGED_POOL_END (PVOID)0xFFFFFAE000000000ULL -#define MI_DEBUG_MAPPING (PVOID)0xFFFFFFFF80000000ULL // FIXME #define MM_HIGHEST_VAD_ADDRESS \ (PVOID)((ULONG_PTR)MM_HIGHEST_USER_ADDRESS - (16 * PAGE_SIZE)) diff --git a/reactos/ntoskrnl/ke/amd64/cpu.c b/reactos/ntoskrnl/ke/amd64/cpu.c index 9c0ad21b5b4..9156bd1dc79 100644 --- a/reactos/ntoskrnl/ke/amd64/cpu.c +++ b/reactos/ntoskrnl/ke/amd64/cpu.c @@ -46,6 +46,9 @@ BOOLEAN KiSMTProcessorsPresent; KIRQL KiOldIrql; ULONG KiFreezeFlag; +/* Flush data */ +volatile LONG KiTbFlushTimeStamp; + /* CPU Signatures */ static const CHAR CmpIntelID[] = "GenuineIntel"; static const CHAR CmpAmdID[] = "AuthenticAMD"; @@ -90,7 +93,7 @@ KiSetProcessorType(VOID) KeGetCurrentPrcb()->CpuID = 0; /* Save EFlags */ - Ke386SaveFlags(EFlags); + EFlags = __readeflags(); /* Do CPUID 1 now */ __cpuid(Reg, 1); @@ -115,7 +118,7 @@ KiSetProcessorType(VOID) KeGetCurrentPrcb()->CpuStep = (USHORT)Stepping; /* Restore EFLAGS */ - Ke386RestoreFlags(EFlags); + __writeeflags(EFlags); } ULONG @@ -389,35 +392,19 @@ KiGetCacheInformation(VOID) VOID FASTCALL -Ki386InitializeTss(IN PKTSS64 Tss, - IN PVOID GdtBase, - IN UINT64 Stack) +KiInitializeTss(IN PKTSS64 Tss, + IN UINT64 Stack) { PKGDTENTRY64 TssEntry; - /* Initialize the TSS descriptor entry */ - TssEntry = (PVOID)((ULONG64)GdtBase + KGDT_TSS); - TssEntry->Bits.Type = 9;//AMD64_TSS; - TssEntry->Bits.Dpl = 0; - TssEntry->Bits.Present = 1; - TssEntry->Bits.System = 0; - TssEntry->Bits.LongMode = 0; - TssEntry->Bits.DefaultBig = 0; - TssEntry->Bits.Granularity = 0; - TssEntry->MustBeZero = 0; + /* Get pointer to the GDT entry */ + TssEntry = KiGetGdtEntry(KeGetPcr()->GdtBase, KGDT_TSS); - /* Descriptor base is the TSS address */ - TssEntry->BaseLow = (ULONG64)Tss & 0xffff; - TssEntry->Bits.BaseMiddle = ((ULONG64)Tss >> 16) & 0xff; - TssEntry->Bits.BaseHigh = ((ULONG64)Tss >> 24) & 0xff; - TssEntry->BaseUpper = (ULONG64)Tss >> 32; - - /* Set the limit */ - TssEntry->LimitLow = sizeof(KTSS64) -1; - TssEntry->Bits.LimitHigh = 0; + /* Initialize the GDT entry */ + KiInitGdtEntry(TssEntry, (ULONG64)Tss, sizeof(KTSS64), AMD64_TSS, 0); /* Zero out the TSS */ - RtlZeroMemory(Tss, sizeof(KTSS)); + RtlZeroMemory(Tss, sizeof(KTSS64)); /* FIXME: I/O Map? */ Tss->IoMapBase = 0x68; @@ -435,8 +422,7 @@ Ki386InitializeTss(IN PKTSS64 Tss, Tss->Ist[3] = (ULONG64)KiDoubleFaultStack; /* Load the task register */ - Ke386SetTr(KGDT_TSS); - + __ltr(KGDT_TSS); } VOID @@ -535,7 +521,19 @@ NTAPI KeFlushEntireTb(IN BOOLEAN Invalid, IN BOOLEAN AllProcessors) { - UNIMPLEMENTED; + KIRQL OldIrql; + + // FIXME: halfplemented + /* Raise the IRQL for the TB Flush */ + OldIrql = KeRaiseIrqlToSynchLevel(); + + /* Flush the TB for the Current CPU, and update the flush stamp */ + KeFlushCurrentTb(); + + /* Update the flush stamp and return to original IRQL */ + InterlockedExchangeAdd(&KiTbFlushTimeStamp, 1); + KeLowerIrql(OldIrql); + } KAFFINITY diff --git a/reactos/ntoskrnl/ke/amd64/kiinit.c b/reactos/ntoskrnl/ke/amd64/kiinit.c index 68f9af85477..12ab2ddf65f 100644 --- a/reactos/ntoskrnl/ke/amd64/kiinit.c +++ b/reactos/ntoskrnl/ke/amd64/kiinit.c @@ -337,7 +337,7 @@ KiInitializePcr(IN PKIPCR Pcr, IN PVOID DpcStack) { KDESCRIPTOR GdtDescriptor = {{0},0,0}, IdtDescriptor = {{0},0,0}; - KGDTENTRY64 TssSelector; + PKGDTENTRY64 TssEntry; USHORT Tr = 0; /* Zero out the PCR */ @@ -375,19 +375,16 @@ KiInitializePcr(IN PKIPCR Pcr, Pcr->IdtBase = (PKIDTENTRY)IdtDescriptor.Base; /* Get TSS Selector */ - Ke386GetTr(Tr); // <- FIXME: this is ugly! - if (Tr != KGDT_TSS) Tr = KGDT_TSS; // FIXME: HACKHACK + __str(&Tr); + ASSERT(Tr == KGDT_TSS); - /* Get TSS Selector, mask it and get its GDT Entry */ - TssSelector = *(PKGDTENTRY)((ULONG_PTR)Pcr->GdtBase + (Tr & ~RPL_MASK)); + /* Get TSS Entry */ + TssEntry = KiGetGdtEntry(Pcr->GdtBase, Tr); /* Get the KTSS itself */ - Pcr->TssBase = (PKTSS)(ULONG_PTR)(TssSelector.BaseLow | - TssSelector.Bytes.BaseMiddle << 16 | - TssSelector.Bytes.BaseHigh << 24 | - (ULONG64)TssSelector.BaseUpper << 32); + Pcr->TssBase = KiGetGdtDescriptorBase(TssEntry); - Pcr->Prcb.RspBase = Pcr->TssBase->Rsp0; + Pcr->Prcb.RspBase = Pcr->TssBase->Rsp0; // FIXME /* Set DPC Stack */ Pcr->Prcb.DpcStack = DpcStack; @@ -403,7 +400,7 @@ KiInitializePcr(IN PKIPCR Pcr, Pcr->Prcb.CurrentThread = IdleThread; /* Start us out at PASSIVE_LEVEL */ -// Pcr->Irql = PASSIVE_LEVEL; + Pcr->Irql = PASSIVE_LEVEL; KeSetCurrentIrql(PASSIVE_LEVEL); } @@ -627,6 +624,9 @@ KiSystemStartup(IN ULONG_PTR Dummy, FrLdrDbgPrint = ((PLOADER_PARAMETER_BLOCK)Dummy)->u.I386.CommonDataArea; FrLdrDbgPrint("Hello from KiSystemStartup!!!\n"); + /* HACK, because freeldr maps page 0 */ + MiAddressToPte((PVOID)0)->u.Hard.Valid = 0; + KiSystemStartupReal((PLOADER_PARAMETER_BLOCK)Dummy); // KiRosPrepareForSystemStartup(Dummy, LoaderBlock); @@ -699,7 +699,7 @@ KiSystemStartupReal(IN PLOADER_PARAMETER_BLOCK LoaderBlock) if (Cpu == 0) { /* Setup the TSS descriptors and entries */ - Ki386InitializeTss(Pcr->TssBase, Pcr->GdtBase, InitialStack); + KiInitializeTss(Pcr->TssBase, InitialStack); /* Setup the IDT */ KeInitExceptions(); @@ -711,7 +711,7 @@ KiSystemStartupReal(IN PLOADER_PARAMETER_BLOCK LoaderBlock) KdInitSystem(0, KeLoaderBlock); /* Check for break-in */ -// if (KdPollBreakIn()) DbgBreakPointWithStatus(1); + if (KdPollBreakIn()) DbgBreakPointWithStatus(DBG_STATUS_CONTROL_C); /* Hack! Wait for the debugger! */ while (!KdPollBreakIn()); @@ -728,7 +728,7 @@ KiSystemStartupReal(IN PLOADER_PARAMETER_BLOCK LoaderBlock) // DPRINT1("Gdt = %p, Idt = %p, Pcr = %p, Tss = %p\n", Gdt, Idt, Pcr, Tss); - DbgBreakPointWithStatus(0); + DbgBreakPointWithStatus(DBG_STATUS_CONTROL_C); /* Initialize the Processor with HAL */ HalInitializeProcessor(Cpu, KeLoaderBlock); diff --git a/reactos/ntoskrnl/ke/amd64/trap.S b/reactos/ntoskrnl/ke/amd64/trap.S index f59df0e056a..e7e6910f713 100644 --- a/reactos/ntoskrnl/ke/amd64/trap.S +++ b/reactos/ntoskrnl/ke/amd64/trap.S @@ -19,7 +19,7 @@ _MsgUnimplemented: .asciz "WARNING: %s at %s:%d is UNIMPLEMENTED!\n" _MsgPageFault: -.ascii "Page fault 0x%x at %p!\n\0" +.ascii "Page fault! Code = 0x%x, RIP = %p, FaultingAddress = %p\n\0" _MsgGeneralProtFault: .ascii "General protection fault at %p!\n\0" @@ -333,9 +333,9 @@ KiDebugTrapOrFaultKMode: ENTER_TRAP_FRAME (0x28), TRAPFLAG_ALL - lea rcx, _MsgBreakpointTrap[rip] - mov rdx, rbp - call _FrLdrDbgPrint[rip] +// lea rcx, _MsgBreakpointTrap[rip] +// mov rdx, rsp +// call _FrLdrDbgPrint[rip] /* Dispatch the exception */ mov ecx, STATUS_BREAKPOINT @@ -495,23 +495,25 @@ KiDebugTrapOrFaultKMode: .pushframe 1 /* We have an error code */ -// lea rcx, _MsgPageFault[rip] -// mov rdx, [rsp] -// mov r8, [rsp+8] -// mov r9, rsp -// call _FrLdrDbgPrint[rip] - ENTER_TRAP_FRAME (0x28), TRAPFLAG_ALL +#if 0 + lea rcx, _MsgPageFault[rip] + mov rdx, [rbp + KTRAP_FRAME_ErrorCode] + mov r8, [rbp + KTRAP_FRAME_Rip] + mov r9, [rbp + KTRAP_FRAME_FaultAddress] + call _FrLdrDbgPrint[rip] +#endif + /* Save page fault address */ mov rdx, cr2 mov [rbp + KTRAP_FRAME_FaultAddress], rdx /* Call page fault handler */ - mov ecx, [ebp + KTRAP_FRAME_ErrorCode] // StoreInstruction + mov ecx, [rbp + KTRAP_FRAME_ErrorCode] // StoreInstruction and ecx, 1 // rdx == Address - mov r8b, [ebp + KTRAP_FRAME_SegCs] // Mode + mov r8b, [rbp + KTRAP_FRAME_SegCs] // Mode and r8b, 1 mov r9, rbp // TrapInformation // call _MmAccessFault @@ -524,7 +526,7 @@ KiDebugTrapOrFaultKMode: jge PageFaultReturn /* Set parameter 1 to error code */ - mov r9d, [ebp + KTRAP_FRAME_ErrorCode] + mov r9d, [rbp + KTRAP_FRAME_ErrorCode] /* Set parameter2 to faulting address */ mov r10, cr2 // Param2 = faulting address diff --git a/reactos/ntoskrnl/mm/amd64/init.c b/reactos/ntoskrnl/mm/amd64/init.c index 0be522f885c..8ff9a9bc8ef 100644 --- a/reactos/ntoskrnl/mm/amd64/init.c +++ b/reactos/ntoskrnl/mm/amd64/init.c @@ -15,9 +15,7 @@ #include "../ARM3/miarm.h" -#define MI_SESSION_SPACE_END (PVOID)0xFFFFF98000000000ULL -#define MI_SESSION_VIEW_END 0xFFFFF97FFF000000ULL -#define MI_NON_PAGED_SYSTEM_START_MIN 0x0FFFFFAA000000000ULL +extern PMMPTE MmDebugPte; /* GLOBALS *****************************************************************/ @@ -65,10 +63,11 @@ PVOID MmPagedPoolEnd; ULONG64 MmBootImageSize; PPHYSICAL_MEMORY_DESCRIPTOR MmPhysicalMemoryBlock; RTL_BITMAP MiPfnBitMap; -ULONG MmNumberOfPhysicalPages, MmHighestPhysicalPage, MmLowestPhysicalPage = -1; +ULONG MmNumberOfPhysicalPages, MmHighestPhysicalPage, MmLowestPhysicalPage = -1; // FIXME: ULONG64 ULONG64 MmNumberOfSystemPtes; PMMPTE MmSystemPagePtes; ULONG64 MxPfnAllocation; +ULONG64 MxPfnSizeInBytes; PVOID MmSystemCacheStart; PVOID MmSystemCacheEnd; @@ -83,24 +82,59 @@ MEMORY_ALLOCATION_DESCRIPTOR MxOldFreeDescriptor; PFN_NUMBER MxFreePageBase; ULONG64 MxFreePageCount = 0; +ULONG +NoDbgPrint(const char *Format, ...) +{ + return 0; +} + VOID NTAPI -MxSetupFreePageList(IN PLOADER_PARAMETER_BLOCK LoaderBlock) +MiEvaluateMemoryDescriptors(IN PLOADER_PARAMETER_BLOCK LoaderBlock) { PMEMORY_ALLOCATION_DESCRIPTOR MdBlock; PLIST_ENTRY ListEntry; + PFN_NUMBER LastPage; /* Loop the memory descriptors */ for (ListEntry = LoaderBlock->MemoryDescriptorListHead.Flink; ListEntry != &LoaderBlock->MemoryDescriptorListHead; ListEntry = ListEntry->Flink) { - /* Get the memory block */ + /* Get the memory descriptor */ MdBlock = CONTAINING_RECORD(ListEntry, MEMORY_ALLOCATION_DESCRIPTOR, ListEntry); - /* Check if this is free memory */ + /* Skip pages that are not part of the PFN database */ + if ((MdBlock->MemoryType == LoaderFirmwarePermanent) || + (MdBlock->MemoryType == LoaderBBTMemory) || + (MdBlock->MemoryType == LoaderHALCachedMemory) || + (MdBlock->MemoryType == LoaderSpecialMemory) || + (MdBlock->MemoryType == LoaderBad)) + { + continue; + } + + /* Add this to the total of pages */ + MmNumberOfPhysicalPages += MdBlock->PageCount; + + /* Check if this is the new lowest page */ + if (MdBlock->BasePage < MmLowestPhysicalPage) + { + /* Update the lowest page */ + MmLowestPhysicalPage = MdBlock->BasePage; + } + + /* Check if this is the new highest page */ + LastPage = MdBlock->BasePage + MdBlock->PageCount - 1; + if (LastPage > MmHighestPhysicalPage) + { + /* Update the highest page */ + MmHighestPhysicalPage = LastPage; + } + + /* Check if this is currently free memory */ if ((MdBlock->MemoryType == LoaderFree) || (MdBlock->MemoryType == LoaderLoadedProgram) || (MdBlock->MemoryType == LoaderFirmwareTemporary) || @@ -142,14 +176,17 @@ MxGetNextPage(IN PFN_NUMBER PageCount) return Pfn; } -VOID -MxMapPage(PVOID Address) +PMMPTE +NTAPI +MxGetPte(PVOID Address) { PMMPTE Pte; MMPTE TmpPte; + /* Setup template pte */ TmpPte.u.Long = 0; - TmpPte.u.Hard.Valid = 1; + TmpPte.u.Flush.Valid = 1; + TmpPte.u.Flush.Write = 1; /* Get a pointer to the PXE */ Pte = MiAddressToPxe(Address); @@ -180,163 +217,41 @@ MxMapPage(PVOID Address) /* Get a pointer to the PTE */ Pte = MiAddressToPte(Address); - if (!Pte->u.Hard.Valid) - { - /* It's not valid, map it! */ - TmpPte.u.Hard.PageFrameNumber = MxGetNextPage(1); - *Pte = TmpPte; - } + return Pte; } VOID MxMapPageRange(PVOID Address, ULONG64 PageCount) { - ULONG64 i; + MMPTE TmpPte, *Pte; - for (i = 0; i < PageCount; i++) + /* Setup template pte */ + TmpPte.u.Long = 0; + TmpPte.u.Flush.Valid = 1; + TmpPte.u.Flush.Write = 1; + + while (PageCount--) { - MxMapPage(Address); + /* Get the PTE for that page */ + Pte = MxGetPte(Address); + ASSERT(Pte->u.Hard.Valid == 0); + + /* Map a physical page */ + TmpPte.u.Hard.PageFrameNumber = MxGetNextPage(1); + *Pte = TmpPte; + + /* Goto next page */ Address = (PVOID)((ULONG64)Address + PAGE_SIZE); } } - VOID NTAPI -MiArmIninializeMemoryLayout(IN PLOADER_PARAMETER_BLOCK LoaderBlock) +MiArmConfigureMemorySizes(IN PLOADER_PARAMETER_BLOCK LoaderBloc) { /* Get the size of the boot loader's image allocations */ - MmBootImageSize = KeLoaderBlock->Extension->LoaderPagesSpanned; - MmBootImageSize *= PAGE_SIZE; - MmBootImageSize = (MmBootImageSize + (4 * 1024 * 1024) - 1) & ~((4 * 1024 * 1024) - 1); - ASSERT((MmBootImageSize % (4 * 1024 * 1024)) == 0); - - MiSessionSpaceEnd = (PVOID)MI_SESSION_SPACE_END; - - /* This is where we will load Win32k.sys and the video driver */ - MiSessionImageEnd = MiSessionSpaceEnd; - MiSessionImageStart = (PVOID)((ULONG_PTR)MiSessionImageEnd - - MmSessionImageSize); - - /* The view starts right below the session working set (itself below - * the image area) */ - MiSessionViewEnd = (PVOID)MI_SESSION_VIEW_END; - MiSessionViewStart = (PVOID)((ULONG_PTR)MiSessionViewStart - - MmSessionViewSize); - - /* Session pool follows */ - MiSessionPoolEnd = MiSessionViewStart; - MiSessionPoolStart = (PVOID)((ULONG_PTR)MiSessionPoolEnd - - MmSessionPoolSize); - - /* And it all begins here */ - MmSessionBase = MiSessionPoolStart; - - // Sanity check that our math is correct - //ASSERT((ULONG_PTR)MmSessionBase + MmSessionSize == PTE_BASE); - - /* System view space ends at session space, so now that we know where - * this is, we can compute the base address of system view space itself. */ - MiSystemViewStart = (PVOID)((ULONG_PTR)MmSessionBase - - MmSystemViewSize); - - /* Use the default */ - MmNumberOfSystemPtes = 22000; - - /* FIXME: should start below paged pool */ - MmPfnDatabase = (PVOID)0xFFFFFD5FC0000000ULL; - -} - -VOID -MiArmInitializePageTable() -{ - ULONG64 PageFrameOffset; - PMMPTE StartPte, EndPte; - - /* Set CR3 for the system process */ - PageFrameOffset = ((PMMPTE)PXE_BASE)->u.Hard.PageFrameNumber << PAGE_SHIFT; - PsGetCurrentProcess()->Pcb.DirectoryTableBase[0] = PageFrameOffset; - - /* Clear user mode mappings in PML4 */ - StartPte = MiAddressToPxe(0); - EndPte = MiAddressToPxe(MmSystemRangeStart); - RtlZeroMemory(StartPte, (EndPte - StartPte) * sizeof(MMPTE)); -} - - -VOID -NTAPI -MiArmEvaluateMemoryDescriptors(IN PLOADER_PARAMETER_BLOCK LoaderBlock) -{ - PMEMORY_ALLOCATION_DESCRIPTOR MdBlock; - PLIST_ENTRY ListEntry; - PFN_NUMBER BasePage, LastPage, PageCount; - - /* Loop the memory descriptors */ - for (ListEntry = LoaderBlock->MemoryDescriptorListHead.Flink; - ListEntry != &LoaderBlock->MemoryDescriptorListHead; - ListEntry = ListEntry->Flink) - { - /* Get the descriptor */ - MdBlock = CONTAINING_RECORD(ListEntry, - MEMORY_ALLOCATION_DESCRIPTOR, - ListEntry); - - /* Skip pages that are not part of the PFN database */ - if ((MdBlock->MemoryType == LoaderFirmwarePermanent) || - (MdBlock->MemoryType == LoaderBBTMemory) || - (MdBlock->MemoryType == LoaderHALCachedMemory) || // ??? - (MdBlock->MemoryType == LoaderSpecialMemory)) - { - continue; - } - - /* Check if BURNMEM was used */ - if (MdBlock->MemoryType != LoaderBad) - { - /* Count this in the total of pages */ - MmNumberOfPhysicalPages += MdBlock->PageCount; - } - - BasePage = MdBlock->BasePage; - LastPage = MdBlock->BasePage + MdBlock->PageCount - 1; - - /* Check if this is the new lowest page */ - if (BasePage < MmLowestPhysicalPage) - { - /* Update the lowest page */ - MmLowestPhysicalPage = BasePage; - } - - /* Check if this is the new highest page */ - if (LastPage > MmHighestPhysicalPage) - { - /* Update the highest page */ - MmHighestPhysicalPage = LastPage; - } -DPRINT1("BasePage = %ld, LastPage = %ld\n", BasePage, LastPage); -__debugbreak(); - /* Map pages for the PFN database */ - PageCount = PAGE_ROUND_UP(MdBlock->PageCount * sizeof(MMPFN)) / PAGE_SIZE; - MxMapPageRange(&MmPfnDatabase[BasePage], PageCount); - - /* Zero out the pages */ - RtlZeroMemory(&MmPfnDatabase[BasePage], PageCount * PAGE_SIZE); - } - - /* Calculate the number of bytes, and then convert to pages */ - MxPfnAllocation = (MmHighestPhysicalPage + 1) * sizeof(MMPFN); - MxPfnAllocation >>= PAGE_SHIFT; - MxPfnAllocation++; - -} - -VOID -NTAPI -MiArmPrepareNonPagedPool() -{ - PFN_NUMBER PageCount; + MmBootImageSize = KeLoaderBlock->Extension->LoaderPagesSpanned * PAGE_SIZE; + MmBootImageSize = ROUND_UP(MmBootImageSize, 4 * 1024 * 1024); /* Check if this is a machine with less than 256MB of RAM, and no overide */ if ((MmNumberOfPhysicalPages <= MI_MIN_PAGES_FOR_NONPAGED_POOL_TUNING) && @@ -396,15 +311,174 @@ MiArmPrepareNonPagedPool() MmMaximumNonPagedPoolInBytes = MI_MAX_NONPAGED_POOL_SIZE; } + // MmSessionImageSize +} + +VOID +NTAPI +MiArmInitializeMemoryLayout(IN PLOADER_PARAMETER_BLOCK LoaderBlock) +{ + /* Set up session space */ + MiSessionSpaceEnd = (PVOID)MI_SESSION_SPACE_END; + + /* This is where we will load Win32k.sys and the video driver */ + MiSessionImageEnd = MiSessionSpaceEnd; + MiSessionImageStart = (PVOID)((ULONG_PTR)MiSessionImageEnd - + MmSessionImageSize); + + /* The view starts right below the session working set (itself below + * the image area) */ + MiSessionViewEnd = MI_SESSION_VIEW_END; + MiSessionViewStart = (PVOID)((ULONG_PTR)MiSessionViewStart - + MmSessionViewSize); + + /* Session pool follows */ + MiSessionPoolEnd = MiSessionViewStart; + MiSessionPoolStart = (PVOID)((ULONG_PTR)MiSessionPoolEnd - + MmSessionPoolSize); + + /* And it all begins here */ + MmSessionBase = MiSessionPoolStart; + + /* System view space ends at session space, so now that we know where + * this is, we can compute the base address of system view space itself. */ + MiSystemViewStart = (PVOID)((ULONG_PTR)MmSessionBase - + MmSystemViewSize); + + /* Use the default */ + MmNumberOfSystemPtes = 22000; + + ASSERT(MiSessionViewEnd <= MiSessionImageStart); + ASSERT(MmSessionBase <= MiSessionPoolStart); +} + +VOID +MiArmInitializePageTable() +{ + ULONG64 PageFrameOffset; + PMMPTE Pte, StartPte, EndPte; + + /* Get current directory base */ + PageFrameOffset = ((PMMPTE)PXE_SELFMAP)->u.Hard.PageFrameNumber << PAGE_SHIFT; + ASSERT(PageFrameOffset == __readcr3()); + + /* Set directory base for the system process */ + PsGetCurrentProcess()->Pcb.DirectoryTableBase[0] = PageFrameOffset; + + /* HACK: don't use freeldr debug pront anymore */ + FrLdrDbgPrint = NoDbgPrint; + +#if 1 + /* Clear user mode mappings in PML4 */ + StartPte = MiAddressToPxe(0); + EndPte = MiAddressToPxe(MmHighestUserAddress); + + for (Pte = StartPte; Pte <= EndPte; Pte++) + { + /* Zero the pte */ + Pte->u.Long = 0; + } +#else + /* Clear user mode mappings in PML4 */ + StartPte = MiAddressToPte(0); + EndPte = MiAddressToPte((PVOID)0xa00000); + + for (Pte = StartPte; Pte < EndPte; Pte++) + { + /* Zero the pte */ + //Pte->u.Long = 0; + } + + /* Flush the TLB */ + KeFlushCurrentTb(); + +// MiAddressToPde(0)->u.Long = 0; +// MiAddressToPde((PVOID)0x200000)->u.Long = 0; +// MiAddressToPde((PVOID)0x400000)->u.Long = 0; +// MiAddressToPde((PVOID)0x600000)->u.Long = 0; +// MiAddressToPde((PVOID)0x800000)->u.Long = 0; + + // MiAddressToPpe->u.Long = 0; + +#endif + + /* Flush the TLB */ + KeFlushCurrentTb(); + + /* Setup debug mapping pte */ + MmDebugPte = MxGetPte(MI_DEBUG_MAPPING); +} + + +VOID +NTAPI +MiArmPreparePfnDatabse(IN PLOADER_PARAMETER_BLOCK LoaderBlock) +{ + PMEMORY_ALLOCATION_DESCRIPTOR MdBlock; + PLIST_ENTRY ListEntry; + PFN_COUNT PageCount; + PVOID PageBase; + + /* The PFN database is at the start of the non paged region */ + MmPfnDatabase = (PVOID)((ULONG64)MmNonPagedPoolEnd - MmMaximumNonPagedPoolInBytes); + + /* Loop the memory descriptors */ + for (ListEntry = LoaderBlock->MemoryDescriptorListHead.Flink; + ListEntry != &LoaderBlock->MemoryDescriptorListHead; + ListEntry = ListEntry->Flink) + { + /* Get the memory descriptor */ + MdBlock = CONTAINING_RECORD(ListEntry, + MEMORY_ALLOCATION_DESCRIPTOR, + ListEntry); + + /* Skip pages that are not part of the PFN database */ + if ((MdBlock->MemoryType == LoaderFirmwarePermanent) || + (MdBlock->MemoryType == LoaderBBTMemory) || + (MdBlock->MemoryType == LoaderHALCachedMemory) || + (MdBlock->MemoryType == LoaderSpecialMemory) || + (MdBlock->MemoryType != LoaderBad)) + { + continue; + } + + /* Map pages for the PFN database */ + PageCount = ROUND_TO_PAGES(MdBlock->PageCount * sizeof(MMPFN)) / PAGE_SIZE; + PageBase = PAGE_ALIGN(&MmPfnDatabase[MdBlock->BasePage]); + MxMapPageRange(PageBase, PageCount); + + /* Zero out the pages */ + RtlZeroMemory(PageBase, PageCount * PAGE_SIZE); + } + + /* Calculate the number of bytes, and then convert to pages */ + MxPfnSizeInBytes = ROUND_TO_PAGES(MmHighestPhysicalPage + 1) * sizeof(MMPFN); + MxPfnAllocation = MxPfnSizeInBytes >> PAGE_SHIFT; + + /* Reduce maximum pool size */ + MmMaximumNonPagedPoolInBytes -= MxPfnSizeInBytes; +} + + +VOID +NTAPI +MiArmPrepareNonPagedPool() +{ + PFN_NUMBER PageCount; + PVOID Address; + + /* Non paged pool comes after the PFN database */ + MmNonPagedPoolStart = (PVOID)((ULONG64)MmPfnDatabase + + MxPfnSizeInBytes); + ASSERT((ULONG64)MmNonPagedPoolEnd == (ULONG64)MmNonPagedPoolStart + + MmMaximumNonPagedPoolInBytes); + /* Calculate the nonpaged pool expansion start region */ MmNonPagedPoolExpansionStart = (PVOID)((ULONG_PTR)MmNonPagedPoolEnd - MmMaximumNonPagedPoolInBytes + MmSizeOfNonPagedPoolInBytes); MmNonPagedPoolExpansionStart = (PVOID)PAGE_ALIGN(MmNonPagedPoolExpansionStart); - DPRINT("NP Pool has been tuned to: %d bytes and %d bytes\n", - MmSizeOfNonPagedPoolInBytes, MmMaximumNonPagedPoolInBytes); - /* Now calculate the nonpaged system VA region, which includes the * nonpaged pool expansion (above) and the system PTEs. Note that it is * then aligned to a PDE boundary (4MB). */ @@ -427,15 +501,21 @@ MiArmPrepareNonPagedPool() ASSERT(MmNumberOfSystemPtes > 1000); } - /* Non paged pool comes after the PFN database */ - MmNonPagedPoolStart = (PVOID)((ULONG_PTR)MmPfnDatabase + - (MxPfnAllocation << PAGE_SHIFT)); - /* Map the nonpaged pool */ PageCount = (MmSizeOfNonPagedPoolInBytes + PAGE_SIZE - 1) / PAGE_SIZE; MxMapPageRange(MmNonPagedPoolStart, PageCount); - /* Sanity check: make sure we have properly defined the system PTE space */ + /* Create PTEs for the paged pool extension */ + for (Address = MmNonPagedPoolExpansionStart; + Address < MmNonPagedPoolEnd; + Address = (PVOID)((ULONG64)Address + PAGE_SIZE)) + { + /* Create PXE, PPE, PDE and set PTE to 0*/ + MxGetPte(Address)->u.Long = 0; + } + +//DPRINT1("MmNonPagedPoolStart = %p, Pte=%p \n", MmNonPagedPoolStart, MiAddressToPte(MmNonPagedPoolStart)); + /* Sanity check */ ASSERT(MiAddressToPte(MmNonPagedSystemStart) < MiAddressToPte(MmNonPagedPoolExpansionStart)); @@ -448,18 +528,22 @@ MmArmInitSystem(IN ULONG Phase, { if (Phase == 0) { - /* Get a continuous range of physical pages */ - MxSetupFreePageList(LoaderBlock); + /* Parse memory descriptors */ + MiEvaluateMemoryDescriptors(LoaderBlock); + + /* Configure the memory sizes */ + MiArmConfigureMemorySizes(LoaderBlock); /* Initialize the memory layout */ - MiArmIninializeMemoryLayout(LoaderBlock); + MiArmInitializeMemoryLayout(LoaderBlock); - /* Loop descriptors and prepare PFN database */ - MiArmEvaluateMemoryDescriptors(LoaderBlock); + /* Prepare PFN database mappings */ + MiArmPreparePfnDatabse(LoaderBlock); + /* Initialize some mappings */ MiArmInitializePageTable(); - /* Configure size of the non paged pool */ + /* Prepare paged pool mappings */ MiArmPrepareNonPagedPool(); /* Initialize the ARM3 nonpaged pool */ @@ -476,6 +560,7 @@ MmArmInitSystem(IN ULONG Phase, /* The PFN database was created, restore the free descriptor */ *MxFreeDescriptor = MxOldFreeDescriptor; + ASSERT(FALSE); } From d25b422abbb62a9ca5efa111a9af9850d26b1b1c Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 14 Nov 2009 02:11:01 +0000 Subject: [PATCH 112/286] fix x86 build svn path=/branches/ros-amd64-bringup/; revision=44146 --- reactos/lib/rtl/swprintf.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/reactos/lib/rtl/swprintf.c b/reactos/lib/rtl/swprintf.c index 059cf986302..e6823e4d729 100644 --- a/reactos/lib/rtl/swprintf.c +++ b/reactos/lib/rtl/swprintf.c @@ -395,8 +395,10 @@ int __cdecl _vsnwprintf(wchar_t *buf, size_t cnt, const wchar_t *fmt, va_list ar wchar_t * str, * end; const char *s; const wchar_t *sw; +#if 0 const wchar_t *ss; -// double _double; + double _double; +#endif int flags; /* flags to number() */ From aa646f46189d1cb3f0c724891ec551699694db88 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 14 Nov 2009 04:08:54 +0000 Subject: [PATCH 113/286] The freelist code is an increadible hack. It #defines structure members to other structure members and misuses them. Try to improve the hack by declaring PHYSICAL_PAGE as a unioun of MMPFN and the stuff that is used in the freelist code. Exchange the positions of RmapListHead with MapCount as the former must be pointer sized. More work is required here. svn path=/branches/ros-amd64-bringup/; revision=44147 --- reactos/ntoskrnl/mm/freelist.c | 62 ++++++++++++++++++++++------------ 1 file changed, 41 insertions(+), 21 deletions(-) diff --git a/reactos/ntoskrnl/mm/freelist.c b/reactos/ntoskrnl/mm/freelist.c index 7d7293f0b4b..6bb5cd6c139 100644 --- a/reactos/ntoskrnl/mm/freelist.c +++ b/reactos/ntoskrnl/mm/freelist.c @@ -32,23 +32,45 @@ // // ReactOS to NT Physical Page Descriptor Entry Legacy Mapping Definitions // -// REACTOS NT -// -#define Consumer PageLocation -#define Type CacheAttribute -#define Zero PrototypePte -#define LockCount u3.e1.PageColor -#define RmapListHead AweReferenceCount -#define SavedSwapEntry u4.EntireFrame -#define Flags u3.e1 -#define ReferenceCount u3.ReferenceCount -#define RemoveEntryList(x) RemoveEntryList((PLIST_ENTRY)x) -#define InsertTailList(x, y) InsertTailList(x, (PLIST_ENTRY)y) -#define ListEntry u1 -#define PHYSICAL_PAGE MMPFN -#define PPHYSICAL_PAGE PMMPFN -PPHYSICAL_PAGE MmPfnDatabase; +typedef union +{ + MMPFN Pfn; + + struct + { + LIST_ENTRY ListEntry; // 0x000 + ULONG_PTR RmapListHead; // 0x008 + USHORT ReferenceCount; // 0x00C + struct // 0x00$ + { + USHORT _unused1:1; + USHORT StartOfAllocation:1; + USHORT EndOfAllocation:1; + USHORT Zero:1; + USHORT LockCount:4; + USHORT Consumer:3; + USHORT _unused2:1; + USHORT Type:2; + USHORT _unused3:1; + USHORT _unused4:1; + } Flags; + LONG MapCount; // 0x10 + ULONG_PTR SavedSwapEntry; // 0x018 + }; +} PHYSICAL_PAGE, *PPHYSICAL_PAGE; + +C_ASSERT(sizeof(PHYSICAL_PAGE) == sizeof(MMPFN)); + +#define MiGetPfnEntry(Pfn) ((PPHYSICAL_PAGE)MiGetPfnEntry(Pfn)) +#define MiGetPfnEntryIndex(x) MiGetPfnEntryIndex((struct _MMPFN*)x) +#define LockCount Flags.LockCount + +PMMPFN MmPfnDatabase; +#define MmPfnDatabase ((PPHYSICAL_PAGE)MmPfnDatabase) + +#define MMPFN PHYSICAL_PAGE +#define PMMPFN PPHYSICAL_PAGE ULONG MmAvailablePages; ULONG MmResidentAvailablePages; @@ -99,7 +121,7 @@ MmGetLRUFirstUserPage(VOID) return 0; } PageDescriptor = CONTAINING_RECORD(NextListEntry, PHYSICAL_PAGE, ListEntry); - ASSERT_PFN(PageDescriptor); + ASSERT_PFN(&PageDescriptor->Pfn); KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); return PageDescriptor - MmPfnDatabase; } @@ -731,12 +753,10 @@ MmInitializePageList(VOID) NextEntry != &KeLoaderBlock->MemoryDescriptorListHead; NextEntry = NextEntry->Flink) { -#undef ListEntry /* Get the descriptor */ Md = CONTAINING_RECORD(NextEntry, MEMORY_ALLOCATION_DESCRIPTOR, ListEntry); -#define ListEntry u1 /* Skip bad memory */ if ((Md->MemoryType == LoaderFirmwarePermanent) || @@ -800,7 +820,7 @@ MmSetRmapListHeadPage(PFN_TYPE Pfn, struct _MM_RMAP_ENTRY* ListHead) KIRQL oldIrql; oldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock); - MiGetPfnEntry(Pfn)->RmapListHead = (LONG)ListHead; + MiGetPfnEntry(Pfn)->RmapListHead = (LONG_PTR)ListHead; KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); } @@ -929,7 +949,7 @@ MmDereferencePage(PFN_TYPE Pfn) { MmAvailablePages++; if (Page->Flags.Consumer == MC_USER) RemoveEntryList(&Page->ListEntry); - if (Page->RmapListHead != (LONG)NULL) + if (Page->RmapListHead != (LONG_PTR)NULL) { DPRINT1("Freeing page with rmap entries.\n"); KeBugCheck(MEMORY_MANAGEMENT); From 09feec648d4637c0970c05d0f7a3c5294de93ea0 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 14 Nov 2009 04:15:21 +0000 Subject: [PATCH 114/286] - Remove old debugging code from MiArmInitializePageTable - Fix mapping in MiArmPreparePfnDatabse We now reach phase 1 of MmArmInitSystem svn path=/branches/ros-amd64-bringup/; revision=44148 --- reactos/ntoskrnl/mm/amd64/init.c | 58 ++++++++++++-------------------- 1 file changed, 22 insertions(+), 36 deletions(-) diff --git a/reactos/ntoskrnl/mm/amd64/init.c b/reactos/ntoskrnl/mm/amd64/init.c index 8ff9a9bc8ef..2079b1781be 100644 --- a/reactos/ntoskrnl/mm/amd64/init.c +++ b/reactos/ntoskrnl/mm/amd64/init.c @@ -365,10 +365,9 @@ MiArmInitializePageTable() /* Set directory base for the system process */ PsGetCurrentProcess()->Pcb.DirectoryTableBase[0] = PageFrameOffset; - /* HACK: don't use freeldr debug pront anymore */ + /* HACK: don't use freeldr debug print anymore */ FrLdrDbgPrint = NoDbgPrint; -#if 1 /* Clear user mode mappings in PML4 */ StartPte = MiAddressToPxe(0); EndPte = MiAddressToPxe(MmHighestUserAddress); @@ -378,29 +377,6 @@ MiArmInitializePageTable() /* Zero the pte */ Pte->u.Long = 0; } -#else - /* Clear user mode mappings in PML4 */ - StartPte = MiAddressToPte(0); - EndPte = MiAddressToPte((PVOID)0xa00000); - - for (Pte = StartPte; Pte < EndPte; Pte++) - { - /* Zero the pte */ - //Pte->u.Long = 0; - } - - /* Flush the TLB */ - KeFlushCurrentTb(); - -// MiAddressToPde(0)->u.Long = 0; -// MiAddressToPde((PVOID)0x200000)->u.Long = 0; -// MiAddressToPde((PVOID)0x400000)->u.Long = 0; -// MiAddressToPde((PVOID)0x600000)->u.Long = 0; -// MiAddressToPde((PVOID)0x800000)->u.Long = 0; - - // MiAddressToPpe->u.Long = 0; - -#endif /* Flush the TLB */ KeFlushCurrentTb(); @@ -416,8 +392,8 @@ MiArmPreparePfnDatabse(IN PLOADER_PARAMETER_BLOCK LoaderBlock) { PMEMORY_ALLOCATION_DESCRIPTOR MdBlock; PLIST_ENTRY ListEntry; - PFN_COUNT PageCount; - PVOID PageBase; + SIZE_T Size; + PUCHAR Page, FirstPage; /* The PFN database is at the start of the non paged region */ MmPfnDatabase = (PVOID)((ULONG64)MmNonPagedPoolEnd - MmMaximumNonPagedPoolInBytes); @@ -437,18 +413,28 @@ MiArmPreparePfnDatabse(IN PLOADER_PARAMETER_BLOCK LoaderBlock) (MdBlock->MemoryType == LoaderBBTMemory) || (MdBlock->MemoryType == LoaderHALCachedMemory) || (MdBlock->MemoryType == LoaderSpecialMemory) || - (MdBlock->MemoryType != LoaderBad)) + (MdBlock->MemoryType == LoaderBad)) { continue; } - /* Map pages for the PFN database */ - PageCount = ROUND_TO_PAGES(MdBlock->PageCount * sizeof(MMPFN)) / PAGE_SIZE; - PageBase = PAGE_ALIGN(&MmPfnDatabase[MdBlock->BasePage]); - MxMapPageRange(PageBase, PageCount); + /* Get the base and size of this pfn database entry */ + FirstPage = PAGE_ALIGN(&MmPfnDatabase[MdBlock->BasePage]); + Size = ROUND_TO_PAGES(MdBlock->PageCount * sizeof(MMPFN)); + + /* Loop the pages of this Pfn database entry */ + for (Page = FirstPage; Page < FirstPage + Size; Page += PAGE_SIZE) + { + /* Is the page already mapped? */ + if (!MmIsAddressValid(Page)) + { + /* It's not, map it now */ + MxMapPageRange(Page, 1); + } + } /* Zero out the pages */ - RtlZeroMemory(PageBase, PageCount * PAGE_SIZE); + RtlZeroMemory(FirstPage, Size); } /* Calculate the number of bytes, and then convert to pages */ @@ -537,12 +523,12 @@ MmArmInitSystem(IN ULONG Phase, /* Initialize the memory layout */ MiArmInitializeMemoryLayout(LoaderBlock); - /* Prepare PFN database mappings */ - MiArmPreparePfnDatabse(LoaderBlock); - /* Initialize some mappings */ MiArmInitializePageTable(); + /* Prepare PFN database mappings */ + MiArmPreparePfnDatabse(LoaderBlock); + /* Prepare paged pool mappings */ MiArmPrepareNonPagedPool(); From a181e0135a023587a1e8cc4b93def2007286d2e4 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 14 Nov 2009 14:45:30 +0000 Subject: [PATCH 115/286] Pass pointers to MiAddressToPte instead of integer svn path=/branches/ros-amd64-bringup/; revision=44155 --- reactos/ntoskrnl/mm/mmfault.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/ntoskrnl/mm/mmfault.c b/reactos/ntoskrnl/mm/mmfault.c index 15499870af7..e38e31fc2fe 100644 --- a/reactos/ntoskrnl/mm/mmfault.c +++ b/reactos/ntoskrnl/mm/mmfault.c @@ -231,7 +231,7 @@ MmNotPresentFault(KPROCESSOR_MODE Mode, break; case MEMORY_AREA_SHARED_DATA: - *MiAddressToPte(USER_SHARED_DATA) = *MmSharedUserDataPte; + *MiAddressToPte((PVOID)USER_SHARED_DATA) = *MmSharedUserDataPte; Status = STATUS_SUCCESS; break; From 36c73e8aee29b7df6eeb83136b1c41228d7f1204 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 14 Nov 2009 14:49:50 +0000 Subject: [PATCH 116/286] Don't truncate MI_MAPPING_RANGE_START to ULONG svn path=/branches/ros-amd64-bringup/; revision=44156 --- reactos/ntoskrnl/include/internal/mm.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/ntoskrnl/include/internal/mm.h b/reactos/ntoskrnl/include/internal/mm.h index eaed9f4ab43..96c667f6166 100644 --- a/reactos/ntoskrnl/include/internal/mm.h +++ b/reactos/ntoskrnl/include/internal/mm.h @@ -109,7 +109,7 @@ typedef ULONG PFN_TYPE, *PPFN_TYPE; #define MI_HYPERSPACE_PTES (256 - 1) #define MI_ZERO_PTES (32) -#define MI_MAPPING_RANGE_START (ULONG)HYPER_SPACE +#define MI_MAPPING_RANGE_START (ULONG_PTR)HYPER_SPACE #define MI_MAPPING_RANGE_END (MI_MAPPING_RANGE_START + \ MI_HYPERSPACE_PTES * PAGE_SIZE) #define MI_ZERO_PTE (PMMPTE)(MI_MAPPING_RANGE_END + \ From 5eb72addd0379df9a09fc4a0ceae24ea00d1c48e Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sun, 15 Nov 2009 16:10:52 +0000 Subject: [PATCH 117/286] - Get rid of the MmGlobalKernelPageDirectory hack. It's not going to be used on amd64. Instead set up a total of 256 (1MB) shared PDPs in the PML4. - Partly implement phase 1 of MmArmInitSystem - Fix MiPteToAddress - Fix MmSystemRangeStart svn path=/branches/ros-amd64-bringup/; revision=44174 --- reactos/ntoskrnl/include/internal/amd64/mm.h | 33 +++- reactos/ntoskrnl/mm/amd64/init.c | 152 +++++++++++++++++-- reactos/ntoskrnl/mm/amd64/page.c | 81 ---------- 3 files changed, 172 insertions(+), 94 deletions(-) diff --git a/reactos/ntoskrnl/include/internal/amd64/mm.h b/reactos/ntoskrnl/include/internal/amd64/mm.h index 90871e2d63c..9e81057793d 100644 --- a/reactos/ntoskrnl/include/internal/amd64/mm.h +++ b/reactos/ntoskrnl/include/internal/amd64/mm.h @@ -14,15 +14,15 @@ #define HYPER_SPACE_END 0xFFFFF77FFFFFFFFFULL #define MI_SESSION_VIEW_END (PVOID)0xFFFFF97FFF000000ULL #define MI_SESSION_SPACE_END (PVOID)0xFFFFF98000000000ULL - +#define MI_SYSTEM_PTE_START (PVOID)0xFFFFFAA000000000ULL #define MI_PAGED_POOL_START (PVOID)0xFFFFFA8000000000ULL - #define MI_NON_PAGED_SYSTEM_START_MIN 0xFFFFFAA000000000ULL #define MI_NONPAGED_POOL_END (PVOID)0xFFFFFAE000000000ULL - #define MI_DEBUG_MAPPING (PVOID)0xFFFFFFFF80000000ULL // FIXME +#define MI_HIGHEST_SYSTEM_ADDRESS (PVOID)0xFFFFFFFFFFFFFFFFULL +#define MI_NUMBER_SYSTEM_PTES 22000 PULONG64 FORCEINLINE @@ -68,7 +68,16 @@ MiAddressToPte(PVOID Address) } /* Convert a PTE into a corresponding address */ -#define MiPteToAddress(PTE) ((PVOID)((ULONG64)(PTE) << 9)) +PVOID +FORCEINLINE +MiPteToAddress(PMMPTE Pte) +{ + /* Use signed math */ + LONG64 Temp = (LONG64)Pte; + Temp <<= 25; + Temp >>= 16; + return (PVOID)Temp; +} //#define ADDR_TO_PAGE_TABLE(v) (((ULONG)(v)) / (1024 * PAGE_SIZE)) //#define ADDR_TO_PDE_OFFSET(v) ((((ULONG)(v)) / (1024 * PAGE_SIZE))) @@ -79,6 +88,22 @@ MiAddressToPte(PVOID Address) #define VAtoPDI(va) ((((ULONG64)va) >> PDI_SHIFT) & 0x1FF) #define VAtoPTI(va) ((((ULONG64)va) >> PTI_SHIFT) & 0x1FF) +/* We don't use these hacks */ +VOID +FORCEINLINE +MmUpdatePageDir(PEPROCESS Process, PVOID Address, ULONG Size) +{ + /* Nothing to do */ +} + +VOID +FORCEINLINE +MmInitGlobalKernelPageDirectory(VOID) +{ + /* Nothing to do */ +} + + /// MIARM.H /* Easy accessing PFN in PTE */ diff --git a/reactos/ntoskrnl/mm/amd64/init.c b/reactos/ntoskrnl/mm/amd64/init.c index 2079b1781be..91e398e2ac4 100644 --- a/reactos/ntoskrnl/mm/amd64/init.c +++ b/reactos/ntoskrnl/mm/amd64/init.c @@ -5,12 +5,13 @@ * PURPOSE: Memory Manager Initialization for amd64 * * PROGRAMMERS: Timo kreuzer (timo.kreuzer@reactos.org) + * ReactOS Portable Systems Group */ /* INCLUDES ***************************************************************/ #include -#define NDEBUG +//#define NDEBUG #include #include "../ARM3/miarm.h" @@ -21,7 +22,7 @@ extern PMMPTE MmDebugPte; ULONG64 MmUserProbeAddress = 0x7FFFFFF0000ULL; PVOID MmHighestUserAddress = (PVOID)0x7FFFFFEFFFFULL; -PVOID MmSystemRangeStart = (PVOID)KSEG0_BASE; // FFFF080000000000 +PVOID MmSystemRangeStart = (PVOID)0xFFFF080000000000ULL; /* Size of session view, pool, and image */ ULONG64 MmSessionSize = MI_SESSION_SIZE; @@ -346,7 +347,7 @@ MiArmInitializeMemoryLayout(IN PLOADER_PARAMETER_BLOCK LoaderBlock) MmSystemViewSize); /* Use the default */ - MmNumberOfSystemPtes = 22000; + MmNumberOfSystemPtes = MI_NUMBER_SYSTEM_PTES; ASSERT(MiSessionViewEnd <= MiSessionImageStart); ASSERT(MmSessionBase <= MiSessionPoolStart); @@ -357,6 +358,7 @@ MiArmInitializePageTable() { ULONG64 PageFrameOffset; PMMPTE Pte, StartPte, EndPte; + MMPTE TmpPte; /* Get current directory base */ PageFrameOffset = ((PMMPTE)PXE_SELFMAP)->u.Hard.PageFrameNumber << PAGE_SHIFT; @@ -366,22 +368,54 @@ MiArmInitializePageTable() PsGetCurrentProcess()->Pcb.DirectoryTableBase[0] = PageFrameOffset; /* HACK: don't use freeldr debug print anymore */ - FrLdrDbgPrint = NoDbgPrint; +// FrLdrDbgPrint = NoDbgPrint; /* Clear user mode mappings in PML4 */ StartPte = MiAddressToPxe(0); EndPte = MiAddressToPxe(MmHighestUserAddress); + /* Loop the user mode PXEs */ for (Pte = StartPte; Pte <= EndPte; Pte++) { - /* Zero the pte */ - Pte->u.Long = 0; + /* Zero the PXE */ +// Pte->u.Long = 0; + } + + /* Setup a template PTE */ + TmpPte.u.Long = 0; + TmpPte.u.Flush.Valid = 1; + TmpPte.u.Flush.Write = 1; + + HyperTemplatePte = TmpPte; + + /* Create PDPTs (1MB total) for shared system address space */ + StartPte = MiAddressToPxe(MmSystemRangeStart); + EndPte = MiAddressToPxe(MI_HIGHEST_SYSTEM_ADDRESS); + + /* Loop the system space PXEs */ + for (Pte = StartPte; Pte <= EndPte; Pte++) + { + /* Is the PXE already valid? */ + if (!Pte->u.Hard.Valid) + { + /* It's not Initialize it, creating a PDPT. */ + TmpPte.u.Flush.PageFrameNumber = MxGetNextPage(1); + *Pte = TmpPte; + + /* Zero the page. The PXE is the PTE for the PDPT. */ + RtlZeroMemory(MiPteToAddress(Pte), PAGE_SIZE); + } } /* Flush the TLB */ KeFlushCurrentTb(); - /* Setup debug mapping pte */ + /* Setup the mapping PTEs */ + MmFirstReservedMappingPte = MxGetPte((PVOID)MI_MAPPING_RANGE_START); + MmFirstReservedMappingPte->u.Hard.PageFrameNumber = MI_HYPERSPACE_PTES; + MmLastReservedMappingPte = MiAddressToPte((PVOID)MI_MAPPING_RANGE_END); + + /* Setup debug mapping PTE */ MmDebugPte = MxGetPte(MI_DEBUG_MAPPING); } @@ -500,13 +534,85 @@ MiArmPrepareNonPagedPool() MxGetPte(Address)->u.Long = 0; } -//DPRINT1("MmNonPagedPoolStart = %p, Pte=%p \n", MmNonPagedPoolStart, MiAddressToPte(MmNonPagedPoolStart)); /* Sanity check */ ASSERT(MiAddressToPte(MmNonPagedSystemStart) < MiAddressToPte(MmNonPagedPoolExpansionStart)); } +PPHYSICAL_MEMORY_DESCRIPTOR +NTAPI +MmInitializeMemoryLimits(IN PLOADER_PARAMETER_BLOCK LoaderBlock, + IN PBOOLEAN IncludeType) +{ + UNIMPLEMENTED; + return 0; +} + +VOID +NTAPI +MiBuildPhysicalMemoryBlock(IN PLOADER_PARAMETER_BLOCK LoaderBlock) +{ + BOOLEAN IncludeType[LoaderMaximum]; + PPHYSICAL_MEMORY_RUN Run; + PULONG Bitmap; + ULONG Size, i; + + /* Instantiate memory that we don't consider RAM/usable */ + for (i = 0; i < LoaderMaximum; i++) IncludeType[i] = TRUE; + IncludeType[LoaderBad] = FALSE; + IncludeType[LoaderFirmwarePermanent] = FALSE; + IncludeType[LoaderSpecialMemory] = FALSE; + IncludeType[LoaderBBTMemory] = FALSE; + + /* Build the physical memory block */ + MmPhysicalMemoryBlock = MmInitializeMemoryLimits(LoaderBlock, IncludeType); + + /* Calculate size for the PFN bitmap */ + Size = (MmHighestPhysicalPage + sizeof(ULONG)) / sizeof(ULONG); + + /* Allocate the PFN bitmap */ + Bitmap = ExAllocatePoolWithTag(NonPagedPool, Size, ' mM'); + if (!Bitmap) + { + /* This is critical */ + KeBugCheckEx(INSTALL_MORE_MEMORY, + MmNumberOfPhysicalPages, + MmLowestPhysicalPage, + MmHighestPhysicalPage, + 0x101); + } + + /* Initialize it and clear all the bits to begin with */ + RtlInitializeBitMap(&MiPfnBitMap, Bitmap, MmHighestPhysicalPage + 1); + RtlClearAllBits(&MiPfnBitMap); + + /* Loop physical memory runs */ + for (i = 0; i < MmPhysicalMemoryBlock->NumberOfRuns; i++) + { + /* Get the run */ + Run = &MmPhysicalMemoryBlock->Run[i]; + DPRINT("PHYSICAL RAM [0x%08p to 0x%08p]\n", + Run->BasePage << PAGE_SHIFT, + (Run->BasePage + Run->PageCount) << PAGE_SHIFT); + + /* Make sure it has pages inside it */ + if (Run->PageCount) + { + /* Set the bits in the PFN bitmap */ + RtlSetBits(&MiPfnBitMap, Run->BasePage, Run->PageCount); + } + } +} + +VOID +NTAPI +MiBuildPagedPool(VOID) +{ + UNIMPLEMENTED; +} + + NTSTATUS NTAPI MmArmInitSystem(IN ULONG Phase, @@ -543,11 +649,39 @@ MmArmInitSystem(IN ULONG Phase, } else if (Phase == 1) { + PMMPTE Pte; + ULONG OldCount; + PPHYSICAL_MEMORY_RUN Run; + + __debugbreak(); + /* The PFN database was created, restore the free descriptor */ *MxFreeDescriptor = MxOldFreeDescriptor; - ASSERT(FALSE); + __debugbreak(); + /* Initialize the nonpaged pool */ + InitializePool(NonPagedPool, 0); + +#if 0 + /* Create the system PTE space */ + Pte = MiAddressToPte(MI_SYSTEM_PTE_START); + MiInitializeSystemPtes(Pte, MmNumberOfSystemPtes, SystemPteSpace); + + /* Reserve system PTEs for zeroing PTEs and clear them */ + MiFirstReservedZeroingPte = MiReserveSystemPtes(MI_ZERO_PTES, + SystemPteSpace); + RtlZeroMemory(MiFirstReservedZeroingPte, MI_ZERO_PTES * sizeof(MMPTE)); + + /* Set the counter to maximum */ + MiFirstReservedZeroingPte->u.Hard.PageFrameNumber = MI_ZERO_PTES - 1; +#endif + + /* Build the physical memory block */ + MiBuildPhysicalMemoryBlock(LoaderBlock); + + /* Size up paged pool and build the shadow system page directory */ + MiBuildPagedPool(); } return STATUS_SUCCESS; diff --git a/reactos/ntoskrnl/mm/amd64/page.c b/reactos/ntoskrnl/mm/amd64/page.c index a561577f321..4258dc5f288 100644 --- a/reactos/ntoskrnl/mm/amd64/page.c +++ b/reactos/ntoskrnl/mm/amd64/page.c @@ -22,9 +22,6 @@ extern MMPTE HyperTemplatePte; /* GLOBALS *****************************************************************/ -ULONG64 MmGlobalKernelPageDirectory[512]; -ULONG Ke386GlobalPagesEnabled = 0; - /* PRIVATE FUNCTIONS *******************************************************/ @@ -434,84 +431,6 @@ MmCreateVirtualMapping(PEPROCESS Process, return STATUS_UNSUCCESSFUL; } -VOID -NTAPI -MmUpdatePageDir(PEPROCESS Process, PVOID Address, ULONG Size) -{ - ULONG StartIndex, EndIndex, Index; - PMMPTE Pte; - - /* Sanity check */ - if (Address < MmSystemRangeStart) - { - KeBugCheck(0); - } - - /* Get pointer to the page directory to update */ - if (Process && Process != PsGetCurrentProcess()) - { -// Pte = MmCreateHyperspaceMapping(PTE_TO_PFN(Process->Pcb.DirectoryTableBase[0])); - } - else - { - Pte = (PMMPTE)PXE_BASE; - } - - /* Update PML4 entries */ - StartIndex = VAtoPXI(Address); - EndIndex = VAtoPXI((ULONG64)Address + Size - 1); - for (Index = StartIndex; Index <= EndIndex; Index++) - { - if (Index != VAtoPXI(PXE_BASE)) - { - InterlockedCompareExchange64(&Pte[Index].u.Long, - MmGlobalKernelPageDirectory[Index], - 0); - if (!MiIsHyperspaceAddress(Pte)) - __invlpg((PVOID)((ULONG64)Index * PAGE_SIZE)); - } - } - - if (MiIsHyperspaceAddress(Pte)) - MmDeleteHyperspaceMapping((PVOID)PAGE_ROUND_DOWN(Pte)); -} - -VOID -INIT_FUNCTION -NTAPI -MmInitGlobalKernelPageDirectory(VOID) -{ - PULONG64 CurrentPageDirectory = (PULONG64)PXE_BASE; - MMPTE Pte; - ULONG i; - - /* Setup template pte */ - HyperTemplatePte.u.Long = 0; - HyperTemplatePte.u.Hard.Valid = 1; - HyperTemplatePte.u.Hard.Write = 1; - HyperTemplatePte.u.Hard.Dirty = 1; - HyperTemplatePte.u.Hard.Accessed = 1; - if (Ke386GlobalPagesEnabled) - HyperTemplatePte.u.Hard.Global = 1; - - for (i = VAtoPXI(MmSystemRangeStart); i < 512; i++) - { - if ((i < VAtoPXI(PTE_BASE) || i > VAtoPXI(PTE_TOP)) && - (i < VAtoPXI(HYPER_SPACE) || i > VAtoPXI(HYPER_SPACE_END)) && - MmGlobalKernelPageDirectory[i] == 0 && - CurrentPageDirectory[i] != 0) - { - Pte.u.Long = CurrentPageDirectory[i]; - if (Ke386GlobalPagesEnabled) - { - Pte.u.Hard.Global = 1; - CurrentPageDirectory[i] = Pte.u.Hard.Global; - } - MmGlobalKernelPageDirectory[i] = Pte.u.Hard.Global; - } - } -} - NTSTATUS NTAPI MmInitializeHandBuiltProcess(IN PEPROCESS Process, From a5a0c47af36a3b19d409e83b05536bca95b05b54 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sun, 15 Nov 2009 20:18:34 +0000 Subject: [PATCH 118/286] Fix definition of _CONTEXT. It was defining EFlags as USHORT, this caused the upper 2 bytes being left randomly when the context was initialized from the trap frame on exceptions. And as soon as the VM bits was set, everything went nots. svn path=/branches/ros-amd64-bringup/; revision=44178 --- reactos/include/ddk/winddk.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/include/ddk/winddk.h b/reactos/include/ddk/winddk.h index 599fadac5fc..f096a73d3f9 100644 --- a/reactos/include/ddk/winddk.h +++ b/reactos/include/ddk/winddk.h @@ -5236,7 +5236,7 @@ typedef struct DECLSPEC_ALIGN(16) _CONTEXT { USHORT SegFs; USHORT SegGs; USHORT SegSs; - USHORT EFlags; + ULONG EFlags; /* Debug */ ULONG64 Dr0; From a6656cbfaeeccd51ba2914755237ba1d572c00a4 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sun, 15 Nov 2009 20:28:38 +0000 Subject: [PATCH 119/286] Add some debugging code svn path=/branches/ros-amd64-bringup/; revision=44179 --- reactos/ntoskrnl/ke/amd64/trap.S | 36 ++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/reactos/ntoskrnl/ke/amd64/trap.S b/reactos/ntoskrnl/ke/amd64/trap.S index e7e6910f713..f28fb39a28d 100644 --- a/reactos/ntoskrnl/ke/amd64/trap.S +++ b/reactos/ntoskrnl/ke/amd64/trap.S @@ -33,6 +33,24 @@ _MsgUnexpectedInterrupt: _MsgInvalidOpcodeFault: .ascii "General protection fault at %p!\n\0" +_MsgTrapInfo: +.ascii "Trap: %s at %p\n\0" + +.macro TRAPINFO func +#if 0 + jmp 2f + .equ expr, 12 +1: .asciz "\func" +2: + sub rsp, 0x20 + lea rcx, _MsgTrapInfo[rip] + lea rdx, 1b[rip] + mov r8, [rbp + KTRAP_FRAME_Rip] + call _FrLdrDbgPrint[rip] + add rsp, 0x20 +#endif +.endm + /* Helper Macros *************************************************************/ #define TRAPFLAG_VOLATILES 0x01 @@ -292,6 +310,8 @@ _InternalDispatchException: ENTER_TRAP_FRAME (0x28), TRAPFLAG_ALL + TRAPINFO KiDebugTrapOrFault + /* Check if the frame was from kernelmode */ test word ptr [rbp + KTRAP_FRAME_SegCs], 3 jz KiDebugTrapOrFaultKMode @@ -333,6 +353,8 @@ KiDebugTrapOrFaultKMode: ENTER_TRAP_FRAME (0x28), TRAPFLAG_ALL + TRAPINFO KiBreakpointTrap + // lea rcx, _MsgBreakpointTrap[rip] // mov rdx, rsp // call _FrLdrDbgPrint[rip] @@ -385,6 +407,8 @@ KiDebugTrapOrFaultKMode: ENTER_TRAP_FRAME (0x28), TRAPFLAG_ALL + TRAPINFO KiInvalidOpcodeFault + // DISPATCH_EXCEPTION STATUS_BREAKPOINT, 3, 0, 0, 0 mov rdx, [rbp + KTRAP_FRAME_Rip] @@ -478,6 +502,8 @@ KiDebugTrapOrFaultKMode: ENTER_TRAP_FRAME (0x28), TRAPFLAG_ALL + TRAPINFO KiGeneralProtectionFault + // DISPATCH_EXCEPTION STATUS_BREAKPOINT, 3, 0, 0, 0 mov rdx, [rbp + KTRAP_FRAME_Rip] @@ -497,6 +523,8 @@ KiDebugTrapOrFaultKMode: ENTER_TRAP_FRAME (0x28), TRAPFLAG_ALL + TRAPINFO KiPageFault + #if 0 lea rcx, _MsgPageFault[rip] mov rdx, [rbp + KTRAP_FRAME_ErrorCode] @@ -628,6 +656,8 @@ PageFaultReturn: ENTER_TRAP_FRAME (0x28), TRAPFLAG_ALL + TRAPINFO KiDebugServiceTrap + /* Increase Rip to skip the int3 */ inc qword ptr [rbp + KTRAP_FRAME_Rip] @@ -646,12 +676,18 @@ PageFaultReturn: .proc KiDpcInterrupt .pushframe 1 + + UNIMPLEMENTED KiDpcInterrupt + jmp $ .endproc .proc KiIpiInterrupt .pushframe 1 + + UNIMPLEMENTED KiIpiInterrupt + jmp $ .endproc From bbc5790f22c09993d5781e2752c5ad93e2165913 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 16 Nov 2009 19:35:36 +0000 Subject: [PATCH 120/286] On amd64 the NextEntry member of MMPTE_LIST has 32 bits, but 36 would be required to cover the whole pte space. Therefore use MmSystemPtesStart[SystemPtePoolType] as base for the pfn linked list instead of MmSystemPteBase, which is set to PTE_BASE. svn path=/branches/ros-amd64-bringup/; revision=44204 --- reactos/ntoskrnl/mm/ARM3/syspte.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/reactos/ntoskrnl/mm/ARM3/syspte.c b/reactos/ntoskrnl/mm/ARM3/syspte.c index bbb385e5702..7be87ac583f 100644 --- a/reactos/ntoskrnl/mm/ARM3/syspte.c +++ b/reactos/ntoskrnl/mm/ARM3/syspte.c @@ -64,7 +64,8 @@ MiReserveAlignedSystemPtes(IN ULONG NumberOfPtes, // Now move to the first free system PTE cluster // PreviousPte = PointerPte; - PointerPte = MmSystemPteBase + PointerPte->u.List.NextEntry; + PointerPte = MmSystemPtesStart[SystemPtePoolType] + + PointerPte->u.List.NextEntry; // // Loop each cluster @@ -152,7 +153,8 @@ MiReserveAlignedSystemPtes(IN ULONG NumberOfPtes, // Go to the next cluster // PreviousPte = PointerPte; - PointerPte = MmSystemPteBase + PointerPte->u.List.NextEntry; + PointerPte = MmSystemPtesStart[SystemPtePoolType] + + PointerPte->u.List.NextEntry; ASSERT(PointerPte > PreviousPte); } @@ -214,7 +216,7 @@ MiReleaseSystemPtes(IN PMMPTE StartingPte, // Zero PTEs // RtlZeroMemory(StartingPte, NumberOfPtes * sizeof(MMPTE)); - CurrentSize = (ULONG_PTR)(StartingPte - MmSystemPteBase); + CurrentSize = (ULONG_PTR)(StartingPte - MmSystemPtesStart[SystemPtePoolType]); // // Acquire the system PTE lock @@ -235,7 +237,8 @@ MiReleaseSystemPtes(IN PMMPTE StartingPte, // // Get the first real cluster of PTEs and check if it's ours // - PointerPte = MmSystemPteBase + CurrentPte->u.List.NextEntry; + PointerPte = MmSystemPtesStart[SystemPtePoolType] + + CurrentPte->u.List.NextEntry; if (CurrentSize < CurrentPte->u.List.NextEntry) { // @@ -395,7 +398,7 @@ MiInitializeSystemPtes(IN PMMPTE StartingPte, StartingPte->u.List.NextEntry = ((ULONG)0xFFFFF); MmFirstFreeSystemPte[PoolType].u.Long = 0; MmFirstFreeSystemPte[PoolType].u.List.NextEntry = StartingPte - - MmSystemPteBase; + MmSystemPtesStart[PoolType]; // // The second entry stores the size of this PTE space From 78ea6134bb2473d0a5df48347bb05a8da0fdf453 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 16 Nov 2009 21:56:29 +0000 Subject: [PATCH 121/286] - add BAUDRATE=115000 to boot command line - Improve the code in wlmemory.c, no real functional change svn path=/branches/ros-amd64-bringup/; revision=44205 --- reactos/boot/bootdata/txtsetup.sif | 2 +- .../freeldr/freeldr/windows/amd64/wlmemory.c | 95 ++++++++----------- 2 files changed, 43 insertions(+), 54 deletions(-) diff --git a/reactos/boot/bootdata/txtsetup.sif b/reactos/boot/bootdata/txtsetup.sif index 29c8f2993fd..6673c3e697d 100644 --- a/reactos/boot/bootdata/txtsetup.sif +++ b/reactos/boot/bootdata/txtsetup.sif @@ -50,7 +50,7 @@ Cabinet=reactos.cab [SetupData] DefaultPath = \ReactOS OsLoadOptions = "/NOGUIBOOT /NODEBUG" -DbgOsLoadOptions = "/NOGUIBOOT /DEBUGPORT=COM2" +DbgOsLoadOptions = "/NOGUIBOOT /DEBUGPORT=COM2 /BAUDRATE=115200" ;OsLoadOptions = "/NOGUIBOOT /DEBUGPORT=SCREEN" ;OsLoadOptions = "/NOGUIBOOT /DEBUGPORT=BOCHS" diff --git a/reactos/boot/freeldr/freeldr/windows/amd64/wlmemory.c b/reactos/boot/freeldr/freeldr/windows/amd64/wlmemory.c index e331536eeff..f1497f188b2 100644 --- a/reactos/boot/freeldr/freeldr/windows/amd64/wlmemory.c +++ b/reactos/boot/freeldr/freeldr/windows/amd64/wlmemory.c @@ -15,23 +15,13 @@ //extern ULONG LoaderPagesSpanned; -#define HYPER_SPACE_ENTRY 0x300 - -// This is needed only for SetProcessorContext routine -#pragma pack(2) - typedef struct - { - USHORT Limit; - ULONG Base; - } GDTIDT; -#pragma pack(4) +#define HYPER_SPACE_ENTRY 0x1EE /* GLOBALS ***************************************************************/ -//PHARDWARE_PTE PDE; +PHARDWARE_PTE PxeBase; //PHARDWARE_PTE HalPageTable; -PPAGE_DIRECTORY_AMD64 pPML4; /* FUNCTIONS **************************************************************/ @@ -44,8 +34,8 @@ MempAllocatePageTables() DPRINTM(DPRINT_WINDOWS,">>> MempAllocatePageTables\n"); /* Allocate a page for the PML4 */ - pPML4 = MmAllocateMemoryWithType(PAGE_SIZE, LoaderMemoryData); - if (!pPML4) + PxeBase = MmAllocateMemoryWithType(PAGE_SIZE, LoaderMemoryData); + if (!PxeBase) { DPRINTM(DPRINT_WINDOWS,"failed to allocate PML4\n"); return FALSE; @@ -54,14 +44,14 @@ MempAllocatePageTables() // FIXME: Physical PTEs = FirmwareTemporary ? /* Zero the PML4 */ - RtlZeroMemory(pPML4, PAGE_SIZE); + RtlZeroMemory(PxeBase, PAGE_SIZE); /* The page tables are located at 0xfffff68000000000 * We create a recursive self mapping through all 4 levels at * virtual address 0xfffff6fb7dbedf68 */ - pPML4->Pde[VAtoPXI(PXE_BASE)].Valid = 1; - pPML4->Pde[VAtoPXI(PXE_BASE)].Write = 1; - pPML4->Pde[VAtoPXI(PXE_BASE)].PageFrameNumber = PtrToPfn(pPML4); + PxeBase[VAtoPXI(PXE_BASE)].Valid = 1; + PxeBase[VAtoPXI(PXE_BASE)].Write = 1; + PxeBase[VAtoPXI(PXE_BASE)].PageFrameNumber = PtrToPfn(PxeBase); // FIXME: map PDE's for hals memory mapping @@ -70,57 +60,57 @@ MempAllocatePageTables() return TRUE; } -PPAGE_DIRECTORY_AMD64 -MempGetOrCreatePageDir(PPAGE_DIRECTORY_AMD64 pDir, ULONG Index) +PHARDWARE_PTE +MempGetOrCreatePageDir(PHARDWARE_PTE PdeBase, ULONG Index) { - PPAGE_DIRECTORY_AMD64 pSubDir; + PHARDWARE_PTE SubDir; - if (!pDir) + if (!PdeBase) return NULL; - if (!pDir->Pde[Index].Valid) + if (!PdeBase[Index].Valid) { - pSubDir = MmAllocateMemoryWithType(PAGE_SIZE, LoaderMemoryData); - if (!pSubDir) + SubDir = MmAllocateMemoryWithType(PAGE_SIZE, LoaderMemoryData); + if (!SubDir) return NULL; - RtlZeroMemory(pSubDir, PAGE_SIZE); - pDir->Pde[Index].PageFrameNumber = PtrToPfn(pSubDir); - pDir->Pde[Index].Valid = 1; - pDir->Pde[Index].Write = 1; + RtlZeroMemory(SubDir, PAGE_SIZE); + PdeBase[Index].PageFrameNumber = PtrToPfn(SubDir); + PdeBase[Index].Valid = 1; + PdeBase[Index].Write = 1; } else { - pSubDir = (PPAGE_DIRECTORY_AMD64)((ULONGLONG)(pDir->Pde[Index].PageFrameNumber) * PAGE_SIZE); + SubDir = (PVOID)((ULONG64)(PdeBase[Index].PageFrameNumber) * PAGE_SIZE); } - return pSubDir; + return SubDir; } BOOLEAN MempMapSinglePage(ULONG64 VirtualAddress, ULONG64 PhysicalAddress) { - PPAGE_DIRECTORY_AMD64 pDir3, pDir2, pDir1; + PHARDWARE_PTE PpeBase, PdeBase, PteBase; ULONG Index; - pDir3 = MempGetOrCreatePageDir(pPML4, VAtoPXI(VirtualAddress)); - pDir2 = MempGetOrCreatePageDir(pDir3, VAtoPPI(VirtualAddress)); - pDir1 = MempGetOrCreatePageDir(pDir2, VAtoPDI(VirtualAddress)); + PpeBase = MempGetOrCreatePageDir(PxeBase, VAtoPXI(VirtualAddress)); + PdeBase = MempGetOrCreatePageDir(PpeBase, VAtoPPI(VirtualAddress)); + PteBase = MempGetOrCreatePageDir(PdeBase, VAtoPDI(VirtualAddress)); - if (!pDir1) + if (!PteBase) { - DPRINTM(DPRINT_WINDOWS,"!!!No Dir %p, %p, %p, %p\n", pPML4, pDir3, pDir2, pDir1); + DPRINTM(DPRINT_WINDOWS,"!!!No Dir %p, %p, %p, %p\n", PxeBase, PpeBase, PdeBase, PteBase); return FALSE; } Index = VAtoPTI(VirtualAddress); - if (pDir1->Pde[Index].Valid) + if (PteBase[Index].Valid) { DPRINTM(DPRINT_WINDOWS,"!!!Already mapped %ld\n", Index); return FALSE; } - pDir1->Pde[Index].Valid = 1; - pDir1->Pde[Index].Write = 1; - pDir1->Pde[Index].PageFrameNumber = PhysicalAddress / PAGE_SIZE; + PteBase[Index].Valid = 1; + PteBase[Index].Write = 1; + PteBase[Index].PageFrameNumber = PhysicalAddress / PAGE_SIZE; return TRUE; } @@ -128,34 +118,33 @@ MempMapSinglePage(ULONG64 VirtualAddress, ULONG64 PhysicalAddress) BOOLEAN MempIsPageMapped(PVOID VirtualAddress) { - PPAGE_DIRECTORY_AMD64 pDir; + PHARDWARE_PTE PpeBase, PdeBase, PteBase; ULONG Index; - pDir = pPML4; Index = VAtoPXI(VirtualAddress); - if (!pDir->Pde[Index].Valid) + if (!PxeBase[Index].Valid) return FALSE; - pDir = (PPAGE_DIRECTORY_AMD64)((ULONG64)(pDir->Pde[Index].PageFrameNumber) * PAGE_SIZE); + PpeBase = (PVOID)((ULONG64)(PxeBase[Index].PageFrameNumber) * PAGE_SIZE); Index = VAtoPPI(VirtualAddress); - if (!pDir->Pde[Index].Valid) + if (!PpeBase[Index].Valid) return FALSE; - pDir = (PPAGE_DIRECTORY_AMD64)((ULONG64)(pDir->Pde[Index].PageFrameNumber) * PAGE_SIZE); + PdeBase = (PVOID)((ULONG64)(PpeBase[Index].PageFrameNumber) * PAGE_SIZE); Index = VAtoPDI(VirtualAddress); - if (!pDir->Pde[Index].Valid) + if (!PdeBase[Index].Valid) return FALSE; - pDir = (PPAGE_DIRECTORY_AMD64)((ULONG64)(pDir->Pde[Index].PageFrameNumber) * PAGE_SIZE); + PteBase = (PVOID)((ULONG64)(PdeBase[Index].PageFrameNumber) * PAGE_SIZE); Index = VAtoPTI(VirtualAddress); - if (!pDir->Pde[Index].Valid) + if (!PteBase[Index].Valid) return FALSE; return TRUE; } ULONG -MempMapRangeOfPages(ULONGLONG VirtualAddress, ULONGLONG PhysicalAddress, ULONG cPages) +MempMapRangeOfPages(ULONG64 VirtualAddress, ULONG64 PhysicalAddress, ULONG cPages) { ULONG i; @@ -333,10 +322,10 @@ WinLdrSetProcessorContext(PVOID GdtIdt, IN ULONG64 Pcr, IN ULONG64 Tss) __writeeflags(0); /* Set the new PML4 */ - __writecr3((ULONGLONG)pPML4); + __writecr3((ULONG64)PxeBase); /* Get kernel mode address of gdt / idt */ - GdtIdt = (PVOID)((LONG64)GdtIdt + KSEG0_BASE); + GdtIdt = (PVOID)((ULONG64)GdtIdt + KSEG0_BASE); /* Create gdt entries and load gdtr */ WinLdrSetupGdt(GdtIdt, Tss); From 60e68cd41108abd22b7b6db82ab3d8d0eab4f835 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 16 Nov 2009 22:03:30 +0000 Subject: [PATCH 122/286] add 64 bit POOL_HEADER, to make pool allocations work here, too svn path=/branches/ros-amd64-bringup/; revision=44206 --- reactos/ntoskrnl/mm/ARM3/miarm.h | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/reactos/ntoskrnl/mm/ARM3/miarm.h b/reactos/ntoskrnl/mm/ARM3/miarm.h index ed86fe31656..0a0e6d31ab7 100644 --- a/reactos/ntoskrnl/mm/ARM3/miarm.h +++ b/reactos/ntoskrnl/mm/ARM3/miarm.h @@ -62,6 +62,7 @@ typedef struct _POOL_DESCRIPTOR LIST_ENTRY ListHeads[POOL_LISTS_PER_PAGE]; } POOL_DESCRIPTOR, *PPOOL_DESCRIPTOR; +#ifndef _WIN64 typedef struct _POOL_HEADER { union @@ -85,12 +86,37 @@ typedef struct _POOL_HEADER }; }; } POOL_HEADER, *PPOOL_HEADER; +#else +typedef struct _POOL_HEADER +{ + union + { + struct + { + ULONG PreviousSize : 8; + ULONG PoolIndex : 8; + ULONG BlockSize : 8; + ULONG PoolType : 8; + }; + ULONG Ulong1; + }; + ULONG PoolTag; + union + { + PEPROCESS* ProcessBilled; + struct + { + USHORT AllocatorBackTraceIndex; + USHORT PoolTagHash; + }; + }; +} POOL_HEADER, *PPOOL_HEADER; +#endif // // Everything depends on this // -C_ASSERT(sizeof(POOL_HEADER) == 8); -//C_ASSERT(sizeof(POOL_HEADER) == sizeof(LIST_ENTRY)); +C_ASSERT(sizeof(POOL_HEADER) == sizeof(LIST_ENTRY)); extern ULONG ExpNumberOfPagedPools; extern POOL_DESCRIPTOR NonPagedPoolDescriptor; From 584007b6f66cb413ef9e916f4c79d370744e5aac Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 16 Nov 2009 22:12:36 +0000 Subject: [PATCH 123/286] [MM] - Implement the rest of MmArmInitSystem phase 1 except MiBuildPagedPool svn path=/branches/ros-amd64-bringup/; revision=44207 --- reactos/ntoskrnl/mm/amd64/init.c | 173 +++++++++++++++++++------------ 1 file changed, 104 insertions(+), 69 deletions(-) diff --git a/reactos/ntoskrnl/mm/amd64/init.c b/reactos/ntoskrnl/mm/amd64/init.c index 91e398e2ac4..97969b2b09d 100644 --- a/reactos/ntoskrnl/mm/amd64/init.c +++ b/reactos/ntoskrnl/mm/amd64/init.c @@ -74,6 +74,8 @@ PVOID MmSystemCacheStart; PVOID MmSystemCacheEnd; MMSUPPORT MmSystemCacheWs; +ULONG MiNumberDescriptors = 0; +BOOLEAN MiIncludeType[LoaderMaximum]; /////////////////////////////////////////////// @@ -96,6 +98,14 @@ MiEvaluateMemoryDescriptors(IN PLOADER_PARAMETER_BLOCK LoaderBlock) PMEMORY_ALLOCATION_DESCRIPTOR MdBlock; PLIST_ENTRY ListEntry; PFN_NUMBER LastPage; + ULONG i; + + /* Instantiate memory that we don't consider RAM/usable */ + for (i = 0; i < LoaderMaximum; i++) MiIncludeType[i] = TRUE; + MiIncludeType[LoaderBad] = FALSE; + MiIncludeType[LoaderFirmwarePermanent] = FALSE; + MiIncludeType[LoaderSpecialMemory] = FALSE; + MiIncludeType[LoaderBBTMemory] = FALSE; /* Loop the memory descriptors */ for (ListEntry = LoaderBlock->MemoryDescriptorListHead.Flink; @@ -107,12 +117,11 @@ MiEvaluateMemoryDescriptors(IN PLOADER_PARAMETER_BLOCK LoaderBlock) MEMORY_ALLOCATION_DESCRIPTOR, ListEntry); + /* Count it */ + MiNumberDescriptors++; + /* Skip pages that are not part of the PFN database */ - if ((MdBlock->MemoryType == LoaderFirmwarePermanent) || - (MdBlock->MemoryType == LoaderBBTMemory) || - (MdBlock->MemoryType == LoaderHALCachedMemory) || - (MdBlock->MemoryType == LoaderSpecialMemory) || - (MdBlock->MemoryType == LoaderBad)) + if (!MiIncludeType[MdBlock->MemoryType]) { continue; } @@ -353,12 +362,16 @@ MiArmInitializeMemoryLayout(IN PLOADER_PARAMETER_BLOCK LoaderBlock) ASSERT(MmSessionBase <= MiSessionPoolStart); } + VOID MiArmInitializePageTable() { ULONG64 PageFrameOffset; PMMPTE Pte, StartPte, EndPte; - MMPTE TmpPte; + MMPTE TmplPte; + + /* HACK: don't use freeldr debug print anymore */ + FrLdrDbgPrint = NoDbgPrint; /* Get current directory base */ PageFrameOffset = ((PMMPTE)PXE_SELFMAP)->u.Hard.PageFrameNumber << PAGE_SHIFT; @@ -367,46 +380,60 @@ MiArmInitializePageTable() /* Set directory base for the system process */ PsGetCurrentProcess()->Pcb.DirectoryTableBase[0] = PageFrameOffset; - /* HACK: don't use freeldr debug print anymore */ -// FrLdrDbgPrint = NoDbgPrint; + /* Enable global pages */ + __writecr4(__readcr4() | CR4_PGE); + ASSERT(__readcr4() & CR4_PGE); - /* Clear user mode mappings in PML4 */ + /* Set user mode address range */ StartPte = MiAddressToPxe(0); EndPte = MiAddressToPxe(MmHighestUserAddress); /* Loop the user mode PXEs */ for (Pte = StartPte; Pte <= EndPte; Pte++) { - /* Zero the PXE */ -// Pte->u.Long = 0; + /* Zero the PXE, clear all mappings */ + Pte->u.Long = 0; } - /* Setup a template PTE */ - TmpPte.u.Long = 0; - TmpPte.u.Flush.Valid = 1; - TmpPte.u.Flush.Write = 1; + /* Set up a template PTE */ + TmplPte.u.Long = 0; + TmplPte.u.Flush.Valid = 1; + TmplPte.u.Flush.Write = 1; + HyperTemplatePte = TmplPte; - HyperTemplatePte = TmpPte; + /* Create PDPTs (72 KB) for shared system address space, + * skip page tables and hyperspace */ - /* Create PDPTs (1MB total) for shared system address space */ - StartPte = MiAddressToPxe(MmSystemRangeStart); + /* Set the range */ + StartPte = MiAddressToPxe((PVOID)(HYPER_SPACE_END + 1)); EndPte = MiAddressToPxe(MI_HIGHEST_SYSTEM_ADDRESS); - /* Loop the system space PXEs */ + /* Loop the PXEs */ for (Pte = StartPte; Pte <= EndPte; Pte++) { /* Is the PXE already valid? */ if (!Pte->u.Hard.Valid) { - /* It's not Initialize it, creating a PDPT. */ - TmpPte.u.Flush.PageFrameNumber = MxGetNextPage(1); - *Pte = TmpPte; + /* It's not Initialize it */ + TmplPte.u.Flush.PageFrameNumber = MxGetNextPage(1); + *Pte = TmplPte; /* Zero the page. The PXE is the PTE for the PDPT. */ RtlZeroMemory(MiPteToAddress(Pte), PAGE_SIZE); } } + /* Set the range of system PTEs */ + StartPte = MiAddressToPte(MI_SYSTEM_PTE_START); + EndPte = StartPte + MmNumberOfSystemPtes - 1; + + /* Loop the system PTEs */ + for (Pte = StartPte; Pte <= EndPte; Pte++) + { + /* Make sure the PTE is valid */ + MxGetPte(MiPteToAddress(Pte)); + } + /* Flush the TLB */ KeFlushCurrentTb(); @@ -443,11 +470,7 @@ MiArmPreparePfnDatabse(IN PLOADER_PARAMETER_BLOCK LoaderBlock) ListEntry); /* Skip pages that are not part of the PFN database */ - if ((MdBlock->MemoryType == LoaderFirmwarePermanent) || - (MdBlock->MemoryType == LoaderBBTMemory) || - (MdBlock->MemoryType == LoaderHALCachedMemory) || - (MdBlock->MemoryType == LoaderSpecialMemory) || - (MdBlock->MemoryType == LoaderBad)) + if (!MiIncludeType[MdBlock->MemoryType]) { continue; } @@ -540,40 +563,32 @@ MiArmPrepareNonPagedPool() } -PPHYSICAL_MEMORY_DESCRIPTOR -NTAPI -MmInitializeMemoryLimits(IN PLOADER_PARAMETER_BLOCK LoaderBlock, - IN PBOOLEAN IncludeType) -{ - UNIMPLEMENTED; - return 0; -} VOID NTAPI MiBuildPhysicalMemoryBlock(IN PLOADER_PARAMETER_BLOCK LoaderBlock) { - BOOLEAN IncludeType[LoaderMaximum]; - PPHYSICAL_MEMORY_RUN Run; + PPHYSICAL_MEMORY_DESCRIPTOR Buffer, NewBuffer; + PMEMORY_ALLOCATION_DESCRIPTOR MdBlock; + PLIST_ENTRY ListEntry; + PFN_NUMBER NextPage = -1; PULONG Bitmap; + ULONG Runs = 0; ULONG Size, i; - /* Instantiate memory that we don't consider RAM/usable */ - for (i = 0; i < LoaderMaximum; i++) IncludeType[i] = TRUE; - IncludeType[LoaderBad] = FALSE; - IncludeType[LoaderFirmwarePermanent] = FALSE; - IncludeType[LoaderSpecialMemory] = FALSE; - IncludeType[LoaderBBTMemory] = FALSE; - - /* Build the physical memory block */ - MmPhysicalMemoryBlock = MmInitializeMemoryLimits(LoaderBlock, IncludeType); - /* Calculate size for the PFN bitmap */ Size = (MmHighestPhysicalPage + sizeof(ULONG)) / sizeof(ULONG); /* Allocate the PFN bitmap */ Bitmap = ExAllocatePoolWithTag(NonPagedPool, Size, ' mM'); - if (!Bitmap) + + /* Allocate enough memory for the physical memory block */ + Buffer = ExAllocatePoolWithTag(NonPagedPool, + sizeof(PHYSICAL_MEMORY_DESCRIPTOR) + + sizeof(PHYSICAL_MEMORY_RUN) * + (MiNumberDescriptors - 1), + 'lMmM'); + if (!Bitmap || !Buffer) { /* This is critical */ KeBugCheckEx(INSTALL_MORE_MEMORY, @@ -583,26 +598,52 @@ MiBuildPhysicalMemoryBlock(IN PLOADER_PARAMETER_BLOCK LoaderBlock) 0x101); } - /* Initialize it and clear all the bits to begin with */ + /* Initialize the bitmap and clear all bits */ RtlInitializeBitMap(&MiPfnBitMap, Bitmap, MmHighestPhysicalPage + 1); RtlClearAllBits(&MiPfnBitMap); - /* Loop physical memory runs */ - for (i = 0; i < MmPhysicalMemoryBlock->NumberOfRuns; i++) + /* Loop the memory descriptors */ + for (ListEntry = LoaderBlock->MemoryDescriptorListHead.Flink; + ListEntry != &LoaderBlock->MemoryDescriptorListHead; + ListEntry = ListEntry->Flink) { - /* Get the run */ - Run = &MmPhysicalMemoryBlock->Run[i]; - DPRINT("PHYSICAL RAM [0x%08p to 0x%08p]\n", - Run->BasePage << PAGE_SHIFT, - (Run->BasePage + Run->PageCount) << PAGE_SHIFT); + /* Get the memory descriptor */ + MdBlock = CONTAINING_RECORD(ListEntry, + MEMORY_ALLOCATION_DESCRIPTOR, + ListEntry); - /* Make sure it has pages inside it */ - if (Run->PageCount) + /* Skip pages that are not part of the PFN database */ + if (!MiIncludeType[MdBlock->MemoryType]) { - /* Set the bits in the PFN bitmap */ - RtlSetBits(&MiPfnBitMap, Run->BasePage, Run->PageCount); + continue; } + + /* Does the memory block begin where the last ended? */ + if (MdBlock->BasePage == NextPage) + { + /* Add it to the current run */ + Buffer->Run[Runs - 1].PageCount += MdBlock->PageCount; + } + else + { + /* Create a new run */ + Runs++; + Buffer->Run[Runs - 1].BasePage = MdBlock->BasePage; + Buffer->Run[Runs - 1].PageCount = MdBlock->PageCount; + } + + /* Set the bits in the PFN bitmap */ + RtlSetBits(&MiPfnBitMap, MdBlock->BasePage, MdBlock->PageCount); + + /* Set the next page */ + NextPage = MdBlock->BasePage + MdBlock->PageCount; } + + // FIXME: allocate a buffer of better size + + Buffer->NumberOfRuns = Runs; + Buffer->NumberOfPages = MmNumberOfPhysicalPages; + MmPhysicalMemoryBlock = Buffer; } VOID @@ -629,15 +670,15 @@ MmArmInitSystem(IN ULONG Phase, /* Initialize the memory layout */ MiArmInitializeMemoryLayout(LoaderBlock); - /* Initialize some mappings */ - MiArmInitializePageTable(); - /* Prepare PFN database mappings */ MiArmPreparePfnDatabse(LoaderBlock); /* Prepare paged pool mappings */ MiArmPrepareNonPagedPool(); + /* Initialize some mappings */ + MiArmInitializePageTable(); + /* Initialize the ARM3 nonpaged pool */ MiInitializeArmPool(); @@ -653,17 +694,12 @@ MmArmInitSystem(IN ULONG Phase, ULONG OldCount; PPHYSICAL_MEMORY_RUN Run; - __debugbreak(); - /* The PFN database was created, restore the free descriptor */ *MxFreeDescriptor = MxOldFreeDescriptor; - __debugbreak(); - /* Initialize the nonpaged pool */ InitializePool(NonPagedPool, 0); -#if 0 /* Create the system PTE space */ Pte = MiAddressToPte(MI_SYSTEM_PTE_START); MiInitializeSystemPtes(Pte, MmNumberOfSystemPtes, SystemPteSpace); @@ -675,7 +711,6 @@ MmArmInitSystem(IN ULONG Phase, /* Set the counter to maximum */ MiFirstReservedZeroingPte->u.Hard.PageFrameNumber = MI_ZERO_PTES - 1; -#endif /* Build the physical memory block */ MiBuildPhysicalMemoryBlock(LoaderBlock); From 85a6488b56570fbf33dda981812d14169117a1ac Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Tue, 17 Nov 2009 19:09:38 +0000 Subject: [PATCH 124/286] Create a better definition of C_ASSERT to avoid multiple definition errors caused by included files. svn path=/branches/ros-amd64-bringup/; revision=44218 --- reactos/include/ddk/ntdef.h | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/reactos/include/ddk/ntdef.h b/reactos/include/ddk/ntdef.h index 045c86b30e8..547495b0445 100644 --- a/reactos/include/ddk/ntdef.h +++ b/reactos/include/ddk/ntdef.h @@ -679,10 +679,8 @@ typedef struct _SINGLE_LIST_ENTRY { // // C_ASSERT Definition // -#define __C_ASSERT_JOIN(X, Y) __C_ASSERT_DO_JOIN(X, Y) -#define __C_ASSERT_DO_JOIN(X, Y) __C_ASSERT_DO_JOIN2(X, Y) -#define __C_ASSERT_DO_JOIN2(X, Y) X##Y -#define C_ASSERT(e) typedef char __C_ASSERT_JOIN(__C_ASSERT__, __LINE__)[(e) ? 1 : -1] +#define C_ASSERT(exp) \ + extern char __c_assert__[exp ? 1 : -1]; From 94571497d9e4af9975424bcbbbbb5834c3a3425f Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Tue, 17 Nov 2009 19:11:12 +0000 Subject: [PATCH 125/286] Remove unused variable. svn path=/branches/ros-amd64-bringup/; revision=44219 --- reactos/ntoskrnl/kd64/kdapi.c | 1 - 1 file changed, 1 deletion(-) diff --git a/reactos/ntoskrnl/kd64/kdapi.c b/reactos/ntoskrnl/kd64/kdapi.c index a6cb8d6d4f6..7a23ddc0d41 100644 --- a/reactos/ntoskrnl/kd64/kdapi.c +++ b/reactos/ntoskrnl/kd64/kdapi.c @@ -411,7 +411,6 @@ KdpReadVirtualMemory(IN PDBGKD_MANIPULATE_STATE64 State, PDBGKD_READ_MEMORY64 ReadMemory = &State->u.ReadMemory; STRING Header; ULONG Length = ReadMemory->TransferCount; - ULONG64 TargetBaseAddress = State->u.ReadMemory.TargetBaseAddress; /* Setup the header */ Header.Length = sizeof(DBGKD_MANIPULATE_STATE64); From 4c52a315f101724b6c4c8cf3e066393962cc1230 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Tue, 17 Nov 2009 19:22:55 +0000 Subject: [PATCH 126/286] [MM] - MmCreateMemoryArea: the area type is a bitfield rather than an enum so use %lx instead of %ld to DPRINT it, add 2 more DPRINTs on failure - MiInitSystemMemoryAreas: fix calculation of memory area sizes for 64 bit svn path=/branches/ros-amd64-bringup/; revision=44220 --- reactos/ntoskrnl/include/internal/arm/mm.h | 1 + reactos/ntoskrnl/include/internal/i386/mm.h | 1 + reactos/ntoskrnl/mm/marea.c | 9 +++++++-- reactos/ntoskrnl/mm/mminit.c | 7 +++---- 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/reactos/ntoskrnl/include/internal/arm/mm.h b/reactos/ntoskrnl/include/internal/arm/mm.h index 889ef77a8d0..36f0d061c9d 100644 --- a/reactos/ntoskrnl/include/internal/arm/mm.h +++ b/reactos/ntoskrnl/include/internal/arm/mm.h @@ -178,6 +178,7 @@ typedef enum _ARM_DOMAIN #define PTE_TOP 0xC03FFFFF #define PDE_BASE 0xC1000000 #define HYPER_SPACE 0xC1100000 +#define HYPER_SPACE_END 0xC07FFFFF struct _EPROCESS; PULONG MmGetPageDirectory(VOID); diff --git a/reactos/ntoskrnl/include/internal/i386/mm.h b/reactos/ntoskrnl/include/internal/i386/mm.h index b818d5fc303..9b6d640fe12 100644 --- a/reactos/ntoskrnl/include/internal/i386/mm.h +++ b/reactos/ntoskrnl/include/internal/i386/mm.h @@ -19,6 +19,7 @@ PULONG MmGetPageDirectory(VOID); #define PDE_BASE 0xC0300000 #define PTE_TOP 0xC03FFFFF #define HYPER_SPACE 0xC0400000 +#define HYPER_SPACE_END 0xC07FFFFF /* Converting address to a corresponding PDE or PTE entry */ #define MiAddressToPde(x) \ diff --git a/reactos/ntoskrnl/mm/marea.c b/reactos/ntoskrnl/mm/marea.c index fc3c45afc21..e24221dea54 100644 --- a/reactos/ntoskrnl/mm/marea.c +++ b/reactos/ntoskrnl/mm/marea.c @@ -932,7 +932,7 @@ MmCreateMemoryArea(PMMSUPPORT AddressSpace, ULONG tmpLength; PMEMORY_AREA MemoryArea; - DPRINT("MmCreateMemoryArea(Type %d, BaseAddress %p, " + DPRINT("MmCreateMemoryArea(Type 0x%lx, BaseAddress %p, " "*BaseAddress %p, Length %p, AllocationFlags %x, " "FixedAddress %x, Result %p)\n", Type, BaseAddress, *BaseAddress, Length, AllocationFlags, @@ -968,6 +968,7 @@ MmCreateMemoryArea(PMMSUPPORT AddressSpace, if (MmGetAddressSpaceOwner(AddressSpace) && (ULONG_PTR)(*BaseAddress) + tmpLength > (ULONG_PTR)MmSystemRangeStart) { + DPRINT("Memory area for user mode address space exceeds MmSystemRangeStart\n"); return STATUS_ACCESS_VIOLATION; } @@ -1008,7 +1009,11 @@ MmCreateMemoryArea(PMMSUPPORT AddressSpace, TAG_MAREA); } - if (!MemoryArea) return STATUS_NO_MEMORY; + if (!MemoryArea) + { + DPRINT("Not enough memory.\n"); + return STATUS_NO_MEMORY; + } RtlZeroMemory(MemoryArea, sizeof(MEMORY_AREA)); MemoryArea->Type = Type; diff --git a/reactos/ntoskrnl/mm/mminit.c b/reactos/ntoskrnl/mm/mminit.c index 647db5c7d55..5cc68abddfe 100644 --- a/reactos/ntoskrnl/mm/mminit.c +++ b/reactos/ntoskrnl/mm/mminit.c @@ -84,7 +84,7 @@ MiInitSystemMemoryAreas() Status = MmCreateMemoryArea(MmGetKernelAddressSpace(), MEMORY_AREA_OWNED_BY_ARM3 | MEMORY_AREA_STATIC, &BaseAddress, - 4 * 1024 * 1024, + PTE_BASE - PTE_TOP + 1, PAGE_READWRITE, &MArea, TRUE, @@ -99,7 +99,7 @@ MiInitSystemMemoryAreas() Status = MmCreateMemoryArea(MmGetKernelAddressSpace(), MEMORY_AREA_OWNED_BY_ARM3 | MEMORY_AREA_STATIC, &BaseAddress, - 4 * 1024 * 1024, + HYPER_SPACE_END - HYPER_SPACE + 1, PAGE_READWRITE, &MArea, TRUE, @@ -144,8 +144,7 @@ MiInitSystemMemoryAreas() Status = MmCreateMemoryArea(MmGetKernelAddressSpace(), MEMORY_AREA_OWNED_BY_ARM3 | MEMORY_AREA_STATIC, &BaseAddress, - (ULONG_PTR)MmNonPagedPoolEnd - - (ULONG_PTR)MmNonPagedSystemStart, + (MmNumberOfSystemPtes + 1) * PAGE_SIZE, PAGE_READWRITE, &MArea, TRUE, From 7ee161e3b5daf1563156e3d658457540f50438a2 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Tue, 17 Nov 2009 19:25:19 +0000 Subject: [PATCH 127/286] Ammendment to r44220 svn path=/branches/ros-amd64-bringup/; revision=44221 --- reactos/ntoskrnl/include/internal/mm.h | 1 + 1 file changed, 1 insertion(+) diff --git a/reactos/ntoskrnl/include/internal/mm.h b/reactos/ntoskrnl/include/internal/mm.h index 96c667f6166..2dfd23eeeea 100644 --- a/reactos/ntoskrnl/include/internal/mm.h +++ b/reactos/ntoskrnl/include/internal/mm.h @@ -19,6 +19,7 @@ extern ULONG MmLowestPhysicalPage; extern ULONG MmHighestPhysicalPage; extern ULONG MmAvailablePages; extern ULONG MmResidentAvailablePages; +extern ULONG MmNumberOfSystemPtes; extern PVOID MmPagedPoolBase; extern ULONG MmPagedPoolSize; From d4bcf7f0d7bc640c11a315fa5e6298fc52f23a57 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Tue, 17 Nov 2009 19:30:35 +0000 Subject: [PATCH 128/286] [MM] Overall code improvements. svn path=/branches/ros-amd64-bringup/; revision=44222 --- reactos/ntoskrnl/include/internal/amd64/mm.h | 3 + reactos/ntoskrnl/mm/amd64/init.c | 313 +++++++++---------- 2 files changed, 147 insertions(+), 169 deletions(-) diff --git a/reactos/ntoskrnl/include/internal/amd64/mm.h b/reactos/ntoskrnl/include/internal/amd64/mm.h index 9e81057793d..d6acf2ba9cf 100644 --- a/reactos/ntoskrnl/include/internal/amd64/mm.h +++ b/reactos/ntoskrnl/include/internal/amd64/mm.h @@ -12,6 +12,7 @@ /* Memory layout base addresses */ #define HYPER_SPACE 0xFFFFF70000000000ULL #define HYPER_SPACE_END 0xFFFFF77FFFFFFFFFULL +#define MI_SESSION_SPACE_MINIMUM (PVOID)0xFFFFF90000000000ULL #define MI_SESSION_VIEW_END (PVOID)0xFFFFF97FFF000000ULL #define MI_SESSION_SPACE_END (PVOID)0xFFFFF98000000000ULL #define MI_SYSTEM_PTE_START (PVOID)0xFFFFFAA000000000ULL @@ -103,6 +104,8 @@ MmInitGlobalKernelPageDirectory(VOID) /* Nothing to do */ } +#define IS_ALIGNED(addr, align) (((ULONG64)(addr) & (align - 1)) == 0) +#define IS_PAGE_ALIGNED(addr) IS_ALIGNED(addr, PAGE_SIZE) /// MIARM.H diff --git a/reactos/ntoskrnl/mm/amd64/init.c b/reactos/ntoskrnl/mm/amd64/init.c index 97969b2b09d..b539a4f0924 100644 --- a/reactos/ntoskrnl/mm/amd64/init.c +++ b/reactos/ntoskrnl/mm/amd64/init.c @@ -20,30 +20,8 @@ extern PMMPTE MmDebugPte; /* GLOBALS *****************************************************************/ -ULONG64 MmUserProbeAddress = 0x7FFFFFF0000ULL; -PVOID MmHighestUserAddress = (PVOID)0x7FFFFFEFFFFULL; -PVOID MmSystemRangeStart = (PVOID)0xFFFF080000000000ULL; - -/* Size of session view, pool, and image */ -ULONG64 MmSessionSize = MI_SESSION_SIZE; -ULONG64 MmSessionViewSize = MI_SESSION_VIEW_SIZE; -ULONG64 MmSessionPoolSize = MI_SESSION_POOL_SIZE; -ULONG64 MmSessionImageSize = MI_SESSION_IMAGE_SIZE; - -/* Session space addresses */ -PVOID MiSessionSpaceEnd = MI_SESSION_SPACE_END; // FFFFF98000000000 -PVOID MiSessionImageEnd; // FFFFF98000000000 = MiSessionSpaceEnd -PVOID MiSessionImageStart; // ?FFFFF97FFF000000 = MiSessionImageEnd - MmSessionImageSize -PVOID MiSessionViewEnd; // FFFFF97FFF000000 -PVOID MiSessionViewStart; // = MiSessionViewEnd - MmSessionViewSize -PVOID MiSessionPoolEnd; // = MiSessionViewStart -PVOID MiSessionPoolStart; // FFFFF90000000000 = MiSessionPoolEnd - MmSessionPoolSize -PVOID MmSessionBase; // FFFFF90000000000 = MiSessionPoolStart - -/* System view */ -ULONG64 MmSystemViewSize = MI_SYSTEM_VIEW_SIZE; -PVOID MiSystemViewStart; - +/* Sizes */ +ULONG64 MmBootImageSize; ULONG64 MmMinimumNonPagedPoolSize = 256 * 1024; ULONG64 MmSizeOfNonPagedPoolInBytes; ULONG64 MmMaximumNonPagedPoolInBytes; @@ -51,40 +29,58 @@ ULONG64 MmMaximumNonPagedPoolPercent; ULONG64 MmMinAdditionNonPagedPoolPerMb = 32 * 1024; ULONG64 MmMaxAdditionNonPagedPoolPerMb = 400 * 1024; ULONG64 MmDefaultMaximumNonPagedPool = 1024 * 1024; -PVOID MmNonPagedSystemStart; +ULONG64 MmSessionSize = MI_SESSION_SIZE; +ULONG64 MmSessionViewSize = MI_SESSION_VIEW_SIZE; +ULONG64 MmSessionPoolSize = MI_SESSION_POOL_SIZE; +ULONG64 MmSessionImageSize = MI_SESSION_IMAGE_SIZE; +ULONG64 MmSystemViewSize = MI_SYSTEM_VIEW_SIZE; +ULONG64 MmSizeOfPagedPoolInBytes = MI_MIN_INIT_PAGED_POOLSIZE; +ULONG64 MiNonPagedSystemSize; + +/* Address ranges */ +ULONG64 MmUserProbeAddress = 0x7FFFFFF0000ULL; +PVOID MmHighestUserAddress = (PVOID)0x7FFFFFEFFFFULL; +PVOID MmSystemRangeStart = (PVOID)0xFFFF080000000000ULL; +PVOID MmSessionBase; // FFFFF90000000000 = MiSessionPoolStart +PVOID MiSessionPoolStart; // FFFFF90000000000 = MiSessionPoolEnd - MmSessionPoolSize +PVOID MiSessionPoolEnd; // = MiSessionViewStart +PVOID MiSessionViewStart; // = MiSessionViewEnd - MmSessionViewSize +PVOID MiSessionViewEnd; // FFFFF97FFF000000 +PVOID MiSessionImageStart; // ?FFFFF97FFF000000 = MiSessionImageEnd - MmSessionImageSize +PVOID MiSessionImageEnd; // FFFFF98000000000 = MiSessionSpaceEnd +PVOID MiSessionSpaceEnd = MI_SESSION_SPACE_END; // FFFFF98000000000 +PVOID MmSystemCacheStart; // FFFFF98000000000 +PVOID MmSystemCacheEnd; // FFFFFA8000000000 +PVOID MmPagedPoolStart = MI_PAGED_POOL_START; // FFFFFA8000000000 +PVOID MmPagedPoolEnd; // FFFFFAA000000000 +PVOID MiSystemViewStart; +PVOID MmNonPagedSystemStart; // FFFFFAA000000000 PVOID MmNonPagedPoolStart; PVOID MmNonPagedPoolExpansionStart; -PVOID MmNonPagedPoolEnd = MI_NONPAGED_POOL_END; +PVOID MmNonPagedPoolEnd = MI_NONPAGED_POOL_END; // 0xFFFFFAE000000000 -ULONG64 MmSizeOfPagedPoolInBytes = MI_MIN_INIT_PAGED_POOLSIZE; -PVOID MmPagedPoolStart = MI_PAGED_POOL_START; -PVOID MmPagedPoolEnd; - - -ULONG64 MmBootImageSize; PPHYSICAL_MEMORY_DESCRIPTOR MmPhysicalMemoryBlock; -RTL_BITMAP MiPfnBitMap; ULONG MmNumberOfPhysicalPages, MmHighestPhysicalPage, MmLowestPhysicalPage = -1; // FIXME: ULONG64 -ULONG64 MmNumberOfSystemPtes; + +ULONG MmNumberOfSystemPtes; PMMPTE MmSystemPagePtes; +MMSUPPORT MmSystemCacheWs; + +RTL_BITMAP MiPfnBitMap; ULONG64 MxPfnAllocation; ULONG64 MxPfnSizeInBytes; -PVOID MmSystemCacheStart; -PVOID MmSystemCacheEnd; -MMSUPPORT MmSystemCacheWs; - +PMEMORY_ALLOCATION_DESCRIPTOR MxFreeDescriptor; +MEMORY_ALLOCATION_DESCRIPTOR MxOldFreeDescriptor; ULONG MiNumberDescriptors = 0; BOOLEAN MiIncludeType[LoaderMaximum]; -/////////////////////////////////////////////// - -PMEMORY_ALLOCATION_DESCRIPTOR MxFreeDescriptor; -MEMORY_ALLOCATION_DESCRIPTOR MxOldFreeDescriptor; - PFN_NUMBER MxFreePageBase; ULONG64 MxFreePageCount = 0; + +/* FUNCTIONS *****************************************************************/ + ULONG NoDbgPrint(const char *Format, ...) { @@ -291,7 +287,7 @@ MiArmConfigureMemorySizes(IN PLOADER_PARAMETER_BLOCK LoaderBloc) /* Check if the registy setting or our dynamic calculation was too high */ if (MmSizeOfNonPagedPoolInBytes > MI_MAX_INIT_NONPAGED_POOL_SIZE) { - // Set it to the maximum */ + /* Set it to the maximum */ MmSizeOfNonPagedPoolInBytes = MI_MAX_INIT_NONPAGED_POOL_SIZE; } @@ -333,35 +329,119 @@ MiArmInitializeMemoryLayout(IN PLOADER_PARAMETER_BLOCK LoaderBlock) /* This is where we will load Win32k.sys and the video driver */ MiSessionImageEnd = MiSessionSpaceEnd; - MiSessionImageStart = (PVOID)((ULONG_PTR)MiSessionImageEnd - - MmSessionImageSize); + MiSessionImageStart = (PCHAR)MiSessionImageEnd - MmSessionImageSize; /* The view starts right below the session working set (itself below * the image area) */ MiSessionViewEnd = MI_SESSION_VIEW_END; - MiSessionViewStart = (PVOID)((ULONG_PTR)MiSessionViewStart - - MmSessionViewSize); + MiSessionViewStart = (PCHAR)MiSessionViewEnd - MmSessionViewSize; + ASSERT(IS_PAGE_ALIGNED(MiSessionViewStart)); /* Session pool follows */ MiSessionPoolEnd = MiSessionViewStart; - MiSessionPoolStart = (PVOID)((ULONG_PTR)MiSessionPoolEnd - - MmSessionPoolSize); + MiSessionPoolStart = (PCHAR)MiSessionPoolEnd - MmSessionPoolSize; + ASSERT(IS_PAGE_ALIGNED(MiSessionPoolStart)); /* And it all begins here */ MmSessionBase = MiSessionPoolStart; /* System view space ends at session space, so now that we know where * this is, we can compute the base address of system view space itself. */ - MiSystemViewStart = (PVOID)((ULONG_PTR)MmSessionBase - - MmSystemViewSize); + MiSystemViewStart = (PCHAR)MmSessionBase - MmSystemViewSize; + ASSERT(IS_PAGE_ALIGNED(MiSystemViewStart)); - /* Use the default */ + /* Calculate the size of the PFN database and convert to pages */ + MxPfnSizeInBytes = ROUND_TO_PAGES((MmHighestPhysicalPage + 1) * sizeof(MMPFN)); + MxPfnAllocation = MxPfnSizeInBytes >> PAGE_SHIFT; + + /* The PFN database is at the start of the non paged region */ + MmPfnDatabase = (PVOID)((PCHAR)MmNonPagedPoolEnd - + MmMaximumNonPagedPoolInBytes); + + /* Reduce maximum non paged pool size */ + MmMaximumNonPagedPoolInBytes -= MxPfnSizeInBytes; + + /* Put non paged pool after the PFN database */ + MmNonPagedPoolStart = (PCHAR)MmPfnDatabase + MxPfnSizeInBytes; + ASSERT(IS_PAGE_ALIGNED(MmNonPagedPoolStart)); + + /* Calculate the nonpaged pool expansion start region */ + MmNonPagedPoolExpansionStart = (PCHAR)MmNonPagedPoolStart + + MmSizeOfNonPagedPoolInBytes; + ASSERT(IS_PAGE_ALIGNED(MmNonPagedPoolExpansionStart)); + + /* Use the default numer of system PTEs */ MmNumberOfSystemPtes = MI_NUMBER_SYSTEM_PTES; + /* System PTE pool is below the PFN database */ + MiNonPagedSystemSize = (MmNumberOfSystemPtes + 1) * PAGE_SIZE; + MmNonPagedSystemStart = (PCHAR)MmPfnDatabase - MiNonPagedSystemSize; + MmNonPagedSystemStart = MM_ROUND_DOWN(MmNonPagedSystemStart, 512 * PAGE_SIZE); + + /* Don't let it go below the minimum */ + if (MmNonPagedSystemStart < (PVOID)MI_NON_PAGED_SYSTEM_START_MIN) + { + /* This is a hard-coded limit in the Windows NT address space */ + MmNonPagedSystemStart = (PVOID)MI_NON_PAGED_SYSTEM_START_MIN; + + /* Reduce the amount of system PTEs to reach this point */ + MmNumberOfSystemPtes = ((ULONG64)MmPfnDatabase - + (ULONG64)MmNonPagedSystemStart) >> + PAGE_SHIFT; + MmNumberOfSystemPtes--; + ASSERT(MmNumberOfSystemPtes > 1000); + } + + /* Sanity checks */ ASSERT(MiSessionViewEnd <= MiSessionImageStart); ASSERT(MmSessionBase <= MiSessionPoolStart); } +VOID +NTAPI +MiArmPreparePfnDatabse(IN PLOADER_PARAMETER_BLOCK LoaderBlock) +{ + PMEMORY_ALLOCATION_DESCRIPTOR MdBlock; + PLIST_ENTRY ListEntry; + PUCHAR Page, FirstPage; + SIZE_T Size; + + /* Loop the memory descriptors */ + for (ListEntry = LoaderBlock->MemoryDescriptorListHead.Flink; + ListEntry != &LoaderBlock->MemoryDescriptorListHead; + ListEntry = ListEntry->Flink) + { + /* Get the memory descriptor */ + MdBlock = CONTAINING_RECORD(ListEntry, + MEMORY_ALLOCATION_DESCRIPTOR, + ListEntry); + + /* Skip pages that are not part of the PFN database */ + if (!MiIncludeType[MdBlock->MemoryType]) + { + continue; + } + + /* Get the base and size of this pfn database entry */ + FirstPage = PAGE_ALIGN(&MmPfnDatabase[MdBlock->BasePage]); + Size = ROUND_TO_PAGES(MdBlock->PageCount * sizeof(MMPFN)); + + /* Loop the pages of this Pfn database entry */ + for (Page = FirstPage; Page < FirstPage + Size; Page += PAGE_SIZE) + { + /* Is the page already mapped? */ + if (!MmIsAddressValid(Page)) + { + /* It's not, map it now */ + MxMapPageRange(Page, 1); + } + } + + /* Zero out the pages */ + RtlZeroMemory(FirstPage, Size); + } +} + VOID MiArmInitializePageTable() @@ -369,6 +449,8 @@ MiArmInitializePageTable() ULONG64 PageFrameOffset; PMMPTE Pte, StartPte, EndPte; MMPTE TmplPte; + PFN_NUMBER PageCount; + PVOID Address; /* HACK: don't use freeldr debug print anymore */ FrLdrDbgPrint = NoDbgPrint; @@ -395,6 +477,9 @@ MiArmInitializePageTable() Pte->u.Long = 0; } + /* Flush the TLB */ + KeFlushCurrentTb(); + /* Set up a template PTE */ TmplPte.u.Long = 0; TmplPte.u.Flush.Valid = 1; @@ -434,116 +519,6 @@ MiArmInitializePageTable() MxGetPte(MiPteToAddress(Pte)); } - /* Flush the TLB */ - KeFlushCurrentTb(); - - /* Setup the mapping PTEs */ - MmFirstReservedMappingPte = MxGetPte((PVOID)MI_MAPPING_RANGE_START); - MmFirstReservedMappingPte->u.Hard.PageFrameNumber = MI_HYPERSPACE_PTES; - MmLastReservedMappingPte = MiAddressToPte((PVOID)MI_MAPPING_RANGE_END); - - /* Setup debug mapping PTE */ - MmDebugPte = MxGetPte(MI_DEBUG_MAPPING); -} - - -VOID -NTAPI -MiArmPreparePfnDatabse(IN PLOADER_PARAMETER_BLOCK LoaderBlock) -{ - PMEMORY_ALLOCATION_DESCRIPTOR MdBlock; - PLIST_ENTRY ListEntry; - SIZE_T Size; - PUCHAR Page, FirstPage; - - /* The PFN database is at the start of the non paged region */ - MmPfnDatabase = (PVOID)((ULONG64)MmNonPagedPoolEnd - MmMaximumNonPagedPoolInBytes); - - /* Loop the memory descriptors */ - for (ListEntry = LoaderBlock->MemoryDescriptorListHead.Flink; - ListEntry != &LoaderBlock->MemoryDescriptorListHead; - ListEntry = ListEntry->Flink) - { - /* Get the memory descriptor */ - MdBlock = CONTAINING_RECORD(ListEntry, - MEMORY_ALLOCATION_DESCRIPTOR, - ListEntry); - - /* Skip pages that are not part of the PFN database */ - if (!MiIncludeType[MdBlock->MemoryType]) - { - continue; - } - - /* Get the base and size of this pfn database entry */ - FirstPage = PAGE_ALIGN(&MmPfnDatabase[MdBlock->BasePage]); - Size = ROUND_TO_PAGES(MdBlock->PageCount * sizeof(MMPFN)); - - /* Loop the pages of this Pfn database entry */ - for (Page = FirstPage; Page < FirstPage + Size; Page += PAGE_SIZE) - { - /* Is the page already mapped? */ - if (!MmIsAddressValid(Page)) - { - /* It's not, map it now */ - MxMapPageRange(Page, 1); - } - } - - /* Zero out the pages */ - RtlZeroMemory(FirstPage, Size); - } - - /* Calculate the number of bytes, and then convert to pages */ - MxPfnSizeInBytes = ROUND_TO_PAGES(MmHighestPhysicalPage + 1) * sizeof(MMPFN); - MxPfnAllocation = MxPfnSizeInBytes >> PAGE_SHIFT; - - /* Reduce maximum pool size */ - MmMaximumNonPagedPoolInBytes -= MxPfnSizeInBytes; -} - - -VOID -NTAPI -MiArmPrepareNonPagedPool() -{ - PFN_NUMBER PageCount; - PVOID Address; - - /* Non paged pool comes after the PFN database */ - MmNonPagedPoolStart = (PVOID)((ULONG64)MmPfnDatabase + - MxPfnSizeInBytes); - ASSERT((ULONG64)MmNonPagedPoolEnd == (ULONG64)MmNonPagedPoolStart + - MmMaximumNonPagedPoolInBytes); - - /* Calculate the nonpaged pool expansion start region */ - MmNonPagedPoolExpansionStart = (PVOID)((ULONG_PTR)MmNonPagedPoolEnd - - MmMaximumNonPagedPoolInBytes + - MmSizeOfNonPagedPoolInBytes); - MmNonPagedPoolExpansionStart = (PVOID)PAGE_ALIGN(MmNonPagedPoolExpansionStart); - - /* Now calculate the nonpaged system VA region, which includes the - * nonpaged pool expansion (above) and the system PTEs. Note that it is - * then aligned to a PDE boundary (4MB). */ - MmNonPagedSystemStart = (PVOID)((ULONG_PTR)MmNonPagedPoolExpansionStart - - (MmNumberOfSystemPtes + 1) * PAGE_SIZE); - MmNonPagedSystemStart = (PVOID)((ULONG_PTR)MmNonPagedSystemStart & - ~((4 * 1024 * 1024) - 1)); - - /* Don't let it go below the minimum */ - if (MmNonPagedSystemStart < (PVOID)MI_NON_PAGED_SYSTEM_START_MIN) - { - /* This is a hard-coded limit in the Windows NT address space */ - MmNonPagedSystemStart = (PVOID)MI_NON_PAGED_SYSTEM_START_MIN; - - /* Reduce the amount of system PTEs to reach this point */ - MmNumberOfSystemPtes = ((ULONG_PTR)MmNonPagedPoolExpansionStart - - (ULONG_PTR)MmNonPagedSystemStart) >> - PAGE_SHIFT; - MmNumberOfSystemPtes--; - ASSERT(MmNumberOfSystemPtes > 1000); - } - /* Map the nonpaged pool */ PageCount = (MmSizeOfNonPagedPoolInBytes + PAGE_SIZE - 1) / PAGE_SIZE; MxMapPageRange(MmNonPagedPoolStart, PageCount); @@ -557,10 +532,13 @@ MiArmPrepareNonPagedPool() MxGetPte(Address)->u.Long = 0; } - /* Sanity check */ - ASSERT(MiAddressToPte(MmNonPagedSystemStart) < - MiAddressToPte(MmNonPagedPoolExpansionStart)); + /* Setup the mapping PTEs */ + MmFirstReservedMappingPte = MxGetPte((PVOID)MI_MAPPING_RANGE_START); + MmFirstReservedMappingPte->u.Hard.PageFrameNumber = MI_HYPERSPACE_PTES; + MmLastReservedMappingPte = MiAddressToPte((PVOID)MI_MAPPING_RANGE_END); + /* Setup debug mapping PTE */ + MmDebugPte = MxGetPte(MI_DEBUG_MAPPING); } @@ -673,9 +651,6 @@ MmArmInitSystem(IN ULONG Phase, /* Prepare PFN database mappings */ MiArmPreparePfnDatabse(LoaderBlock); - /* Prepare paged pool mappings */ - MiArmPrepareNonPagedPool(); - /* Initialize some mappings */ MiArmInitializePageTable(); From 84c574f9feabf2c84c6c21d4f872fabfdf8b2fc9 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Wed, 18 Nov 2009 21:20:09 +0000 Subject: [PATCH 129/286] [MM] Don't assume 1024 PTEs per page, instead use PTE_PER_PAGE constant. svn path=/branches/ros-amd64-bringup/; revision=44228 --- reactos/ntoskrnl/include/internal/i386/mm.h | 1 + reactos/ntoskrnl/mm/mminit.c | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/reactos/ntoskrnl/include/internal/i386/mm.h b/reactos/ntoskrnl/include/internal/i386/mm.h index 9b6d640fe12..ed14249f66a 100644 --- a/reactos/ntoskrnl/include/internal/i386/mm.h +++ b/reactos/ntoskrnl/include/internal/i386/mm.h @@ -18,6 +18,7 @@ PULONG MmGetPageDirectory(VOID); #define PTE_BASE 0xC0000000 #define PDE_BASE 0xC0300000 #define PTE_TOP 0xC03FFFFF +#define PTE_PER_PAGE 1024 #define HYPER_SPACE 0xC0400000 #define HYPER_SPACE_END 0xC07FFFFF diff --git a/reactos/ntoskrnl/mm/mminit.c b/reactos/ntoskrnl/mm/mminit.c index 5cc68abddfe..a669bd39948 100644 --- a/reactos/ntoskrnl/mm/mminit.c +++ b/reactos/ntoskrnl/mm/mminit.c @@ -433,7 +433,7 @@ MmInitSystem(IN ULONG Phase, Test[i] = MiAllocatePoolPages(PagedPool, PAGE_SIZE); if (!Test[i]) { - ASSERT(i == 1024); + ASSERT(i == PTE_PER_PAGE); break; } } From 84c2495bb91cfa5a0dc33354b4e7d56e40e857ba Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Wed, 18 Nov 2009 21:35:14 +0000 Subject: [PATCH 130/286] [MM] Implement MiBuildPagedPool. Refactor MmArmInitSystem. Use a hardcoded address for the PFN database, this might not be identical to windows, but it makes things simpler and there's no real point in dynamically putting it below the non paged pool. Use a global MxPhase to decide whether to do early page allocations using MxAllocEarlyPage or use MmAllocPage in phase 1. Paged pool allocations work now, but the page fault isn't handled yet. svn path=/branches/ros-amd64-bringup/; revision=44229 --- reactos/ntoskrnl/mm/amd64/init.c | 630 +++++++++++++++++++------------ 1 file changed, 393 insertions(+), 237 deletions(-) diff --git a/reactos/ntoskrnl/mm/amd64/init.c b/reactos/ntoskrnl/mm/amd64/init.c index b539a4f0924..89d7d1e5778 100644 --- a/reactos/ntoskrnl/mm/amd64/init.c +++ b/reactos/ntoskrnl/mm/amd64/init.c @@ -77,6 +77,10 @@ BOOLEAN MiIncludeType[LoaderMaximum]; PFN_NUMBER MxFreePageBase; ULONG64 MxFreePageCount = 0; +ULONG MxPhase = 0; + +PFN_NUMBER MmSystemPageDirectory; +PFN_NUMBER MmSizeOfPagedPoolInPages = MI_MIN_INIT_PAGED_POOLSIZE / PAGE_SIZE; /* FUNCTIONS *****************************************************************/ @@ -96,6 +100,10 @@ MiEvaluateMemoryDescriptors(IN PLOADER_PARAMETER_BLOCK LoaderBlock) PFN_NUMBER LastPage; ULONG i; + /* Get the size of the boot loader's image allocations */ + MmBootImageSize = KeLoaderBlock->Extension->LoaderPagesSpanned * PAGE_SIZE; + MmBootImageSize = ROUND_UP(MmBootImageSize, 4 * 1024 * 1024); + /* Instantiate memory that we don't consider RAM/usable */ for (i = 0; i < LoaderMaximum; i++) MiIncludeType[i] = TRUE; MiIncludeType[LoaderBad] = FALSE; @@ -160,47 +168,54 @@ MiEvaluateMemoryDescriptors(IN PLOADER_PARAMETER_BLOCK LoaderBlock) PFN_NUMBER NTAPI -MxGetNextPage(IN PFN_NUMBER PageCount) +MxAllocEarlyPage() { PFN_NUMBER Pfn; /* Make sure we have enough pages */ - if (PageCount > MxFreePageCount) + if (!MxFreePageCount) { /* Crash the system */ KeBugCheckEx(INSTALL_MORE_MEMORY, MmNumberOfPhysicalPages, MxFreeDescriptor->PageCount, MxOldFreeDescriptor.PageCount, - PageCount); + 1); } /* Use our lowest usable free pages */ Pfn = MxFreePageBase; - MxFreePageBase += PageCount; - MxFreePageCount -= PageCount; + MxFreePageBase++; + MxFreePageCount--; return Pfn; } +PFN_NUMBER +NTAPI +MxAllocPage() +{ + return (MxPhase == 0) ? MxAllocEarlyPage() : MmAllocPage(MC_SYSTEM, 0); +} + PMMPTE NTAPI MxGetPte(PVOID Address) { PMMPTE Pte; - MMPTE TmpPte; + MMPTE TmplPte; /* Setup template pte */ - TmpPte.u.Long = 0; - TmpPte.u.Flush.Valid = 1; - TmpPte.u.Flush.Write = 1; + TmplPte.u.Long = 0; + TmplPte.u.Flush.Valid = 1; + TmplPte.u.Flush.Write = 1; /* Get a pointer to the PXE */ Pte = MiAddressToPxe(Address); if (!Pte->u.Hard.Valid) { /* It's not valid, map it! */ - TmpPte.u.Hard.PageFrameNumber = MxGetNextPage(1); - *Pte = TmpPte; + TmplPte.u.Hard.PageFrameNumber = MxAllocPage(); + *Pte = TmplPte; } /* Get a pointer to the PPE */ @@ -208,8 +223,8 @@ MxGetPte(PVOID Address) if (!Pte->u.Hard.Valid) { /* It's not valid, map it! */ - TmpPte.u.Hard.PageFrameNumber = MxGetNextPage(1); - *Pte = TmpPte; + TmplPte.u.Hard.PageFrameNumber = MxAllocPage(); + *Pte = TmplPte; } /* Get a pointer to the PDE */ @@ -217,8 +232,8 @@ MxGetPte(PVOID Address) if (!Pte->u.Hard.Valid) { /* It's not valid, map it! */ - TmpPte.u.Hard.PageFrameNumber = MxGetNextPage(1); - *Pte = TmpPte; + TmplPte.u.Hard.PageFrameNumber = MxAllocPage(); + *Pte = TmplPte; } /* Get a pointer to the PTE */ @@ -227,24 +242,31 @@ MxGetPte(PVOID Address) } VOID -MxMapPageRange(PVOID Address, ULONG64 PageCount) +MxMapPage(PVOID Address) { - MMPTE TmpPte, *Pte; + MMPTE TmplPte, *Pte; /* Setup template pte */ - TmpPte.u.Long = 0; - TmpPte.u.Flush.Valid = 1; - TmpPte.u.Flush.Write = 1; + TmplPte.u.Long = 0; + TmplPte.u.Flush.Valid = 1; + TmplPte.u.Flush.Write = 1; + TmplPte.u.Hard.PageFrameNumber = MxAllocPage(); + /* Get the PTE for that page */ + Pte = MxGetPte(Address); + ASSERT(Pte->u.Hard.Valid == 0); + + /* Map a physical page */ + *Pte = TmplPte; +} + +VOID +MxMapPageRange(PVOID Address, ULONG64 PageCount) +{ while (PageCount--) { - /* Get the PTE for that page */ - Pte = MxGetPte(Address); - ASSERT(Pte->u.Hard.Valid == 0); - - /* Map a physical page */ - TmpPte.u.Hard.PageFrameNumber = MxGetNextPage(1); - *Pte = TmpPte; + /* Map the page */ + MxMapPage(Address); /* Goto next page */ Address = (PVOID)((ULONG64)Address + PAGE_SIZE); @@ -253,11 +275,170 @@ MxMapPageRange(PVOID Address, ULONG64 PageCount) VOID NTAPI -MiArmConfigureMemorySizes(IN PLOADER_PARAMETER_BLOCK LoaderBloc) +MiPreparePfnDatabse(IN PLOADER_PARAMETER_BLOCK LoaderBlock) { - /* Get the size of the boot loader's image allocations */ - MmBootImageSize = KeLoaderBlock->Extension->LoaderPagesSpanned * PAGE_SIZE; - MmBootImageSize = ROUND_UP(MmBootImageSize, 4 * 1024 * 1024); + PMEMORY_ALLOCATION_DESCRIPTOR MdBlock; + PLIST_ENTRY ListEntry; + PUCHAR Page, FirstPage; + SIZE_T Size; + + /* Calculate the size of the PFN database and convert to pages */ + MxPfnSizeInBytes = ROUND_TO_PAGES((MmHighestPhysicalPage + 1) * sizeof(MMPFN)); + MxPfnAllocation = MxPfnSizeInBytes >> PAGE_SHIFT; + + /* Sinply start at hardcoded address */ + MmPfnDatabase = (PVOID)0xFFFFFAC000000000ULL; + + /* Loop the memory descriptors */ + for (ListEntry = LoaderBlock->MemoryDescriptorListHead.Flink; + ListEntry != &LoaderBlock->MemoryDescriptorListHead; + ListEntry = ListEntry->Flink) + { + /* Get the memory descriptor */ + MdBlock = CONTAINING_RECORD(ListEntry, + MEMORY_ALLOCATION_DESCRIPTOR, + ListEntry); + + /* Skip pages that are not part of the PFN database */ + if (MiIncludeType[MdBlock->MemoryType]) + { + /* Get the base and size of this pfn database entry */ + FirstPage = PAGE_ALIGN(&MmPfnDatabase[MdBlock->BasePage]); + Size = ROUND_TO_PAGES(MdBlock->PageCount * sizeof(MMPFN)); + + /* Loop the pages of this Pfn database entry */ + for (Page = FirstPage; Page < FirstPage + Size; Page += PAGE_SIZE) + { + /* Is the page already mapped? */ + if (!MmIsAddressValid(Page)) + { + /* It's not, map it now */ + MxMapPage(Page); + } + } + + /* Zero out the pages */ + RtlZeroMemory(FirstPage, Size); + } + } +} + + +VOID +NTAPI +MiInitializeSessionSpace(IN PLOADER_PARAMETER_BLOCK LoaderBlock) +{ + /* Set up session space */ + MiSessionSpaceEnd = (PVOID)MI_SESSION_SPACE_END; + + /* This is where we will load Win32k.sys and the video driver */ + MiSessionImageEnd = MiSessionSpaceEnd; + MiSessionImageStart = (PCHAR)MiSessionImageEnd - MmSessionImageSize; + + /* The view starts right below the session working set (itself below + * the image area) */ + MiSessionViewEnd = MI_SESSION_VIEW_END; + MiSessionViewStart = (PCHAR)MiSessionViewEnd - MmSessionViewSize; + ASSERT(IS_PAGE_ALIGNED(MiSessionViewStart)); + + /* Session pool follows */ + MiSessionPoolEnd = MiSessionViewStart; + MiSessionPoolStart = (PCHAR)MiSessionPoolEnd - MmSessionPoolSize; + ASSERT(IS_PAGE_ALIGNED(MiSessionPoolStart)); + + /* And it all begins here */ + MmSessionBase = MiSessionPoolStart; + + /* System view space ends at session space, so now that we know where + * this is, we can compute the base address of system view space itself. */ + MiSystemViewStart = (PCHAR)MmSessionBase - MmSystemViewSize; + ASSERT(IS_PAGE_ALIGNED(MiSystemViewStart)); + + /* Sanity checks */ + ASSERT(MiSessionViewEnd <= MiSessionImageStart); + ASSERT(MmSessionBase <= MiSessionPoolStart); +} + +VOID +MiInitializePageTable() +{ + ULONG64 PageFrameOffset; + PMMPTE Pte, StartPte, EndPte; + MMPTE TmplPte; + PFN_NUMBER PageCount; + + /* HACK: don't use freeldr debug print anymore */ + FrLdrDbgPrint = NoDbgPrint; + + /* Get current directory base */ + MmSystemPageDirectory = ((PMMPTE)PXE_SELFMAP)->u.Hard.PageFrameNumber; + PageFrameOffset = MmSystemPageDirectory << PAGE_SHIFT; + ASSERT(PageFrameOffset == __readcr3()); + + /* Set directory base for the system process */ + PsGetCurrentProcess()->Pcb.DirectoryTableBase[0] = PageFrameOffset; + + /* Enable global pages */ + __writecr4(__readcr4() | CR4_PGE); + ASSERT(__readcr4() & CR4_PGE); + + /* Set user mode address range */ + StartPte = MiAddressToPxe(0); + EndPte = MiAddressToPxe(MmHighestUserAddress); + + /* Loop the user mode PXEs */ + for (Pte = StartPte; Pte <= EndPte; Pte++) + { + /* Zero the PXE, clear all mappings */ + Pte->u.Long = 0; + } + + /* Flush the TLB */ + KeFlushCurrentTb(); + + /* Set up a template PTE */ + TmplPte.u.Long = 0; + TmplPte.u.Flush.Valid = 1; + TmplPte.u.Flush.Write = 1; + HyperTemplatePte = TmplPte; + + /* Create PDPTs (72 KB) for shared system address space, + * skip page tables and hyperspace */ + + /* Set the range */ + StartPte = MiAddressToPxe((PVOID)(HYPER_SPACE_END + 1)); + EndPte = MiAddressToPxe(MI_HIGHEST_SYSTEM_ADDRESS); + + /* Loop the PXEs */ + for (Pte = StartPte; Pte <= EndPte; Pte++) + { + /* Is the PXE already valid? */ + if (!Pte->u.Hard.Valid) + { + /* It's not Initialize it */ + TmplPte.u.Flush.PageFrameNumber = MxAllocPage(); + *Pte = TmplPte; + + /* Zero the page. The PXE is the PTE for the PDPT. */ + RtlZeroMemory(MiPteToAddress(Pte), PAGE_SIZE); + } + } + + /* Setup the mapping PTEs */ + MmFirstReservedMappingPte = MxGetPte((PVOID)MI_MAPPING_RANGE_START); + MmFirstReservedMappingPte->u.Hard.PageFrameNumber = MI_HYPERSPACE_PTES; + MmLastReservedMappingPte = MiAddressToPte((PVOID)MI_MAPPING_RANGE_END); + + /* Setup debug mapping PTE */ + MmDebugPte = MxGetPte(MI_DEBUG_MAPPING); +} + +VOID +NTAPI +MiBuildNonPagedPool(VOID) +{ + PMMPTE Pte; + PFN_COUNT PageCount; /* Check if this is a machine with less than 256MB of RAM, and no overide */ if ((MmNumberOfPhysicalPages <= MI_MIN_PAGES_FOR_NONPAGED_POOL_TUNING) && @@ -317,52 +498,18 @@ MiArmConfigureMemorySizes(IN PLOADER_PARAMETER_BLOCK LoaderBloc) MmMaximumNonPagedPoolInBytes = MI_MAX_NONPAGED_POOL_SIZE; } - // MmSessionImageSize -} + /* Put non paged pool to the end of the region */ + MmNonPagedPoolStart = (PCHAR)MmNonPagedPoolEnd - MmMaximumNonPagedPoolInBytes; -VOID -NTAPI -MiArmInitializeMemoryLayout(IN PLOADER_PARAMETER_BLOCK LoaderBlock) -{ - /* Set up session space */ - MiSessionSpaceEnd = (PVOID)MI_SESSION_SPACE_END; + /* Make sure it doesn't collide with the PFN database */ + if ((PCHAR)MmNonPagedPoolStart < (PCHAR)MmPfnDatabase + MxPfnSizeInBytes) + { + /* Put non paged pool after the PFN database */ + MmNonPagedPoolStart = (PCHAR)MmPfnDatabase + MxPfnSizeInBytes; + MmMaximumNonPagedPoolInBytes = (ULONG64)MmNonPagedPoolEnd - + (ULONG64)MmNonPagedPoolStart; + } - /* This is where we will load Win32k.sys and the video driver */ - MiSessionImageEnd = MiSessionSpaceEnd; - MiSessionImageStart = (PCHAR)MiSessionImageEnd - MmSessionImageSize; - - /* The view starts right below the session working set (itself below - * the image area) */ - MiSessionViewEnd = MI_SESSION_VIEW_END; - MiSessionViewStart = (PCHAR)MiSessionViewEnd - MmSessionViewSize; - ASSERT(IS_PAGE_ALIGNED(MiSessionViewStart)); - - /* Session pool follows */ - MiSessionPoolEnd = MiSessionViewStart; - MiSessionPoolStart = (PCHAR)MiSessionPoolEnd - MmSessionPoolSize; - ASSERT(IS_PAGE_ALIGNED(MiSessionPoolStart)); - - /* And it all begins here */ - MmSessionBase = MiSessionPoolStart; - - /* System view space ends at session space, so now that we know where - * this is, we can compute the base address of system view space itself. */ - MiSystemViewStart = (PCHAR)MmSessionBase - MmSystemViewSize; - ASSERT(IS_PAGE_ALIGNED(MiSystemViewStart)); - - /* Calculate the size of the PFN database and convert to pages */ - MxPfnSizeInBytes = ROUND_TO_PAGES((MmHighestPhysicalPage + 1) * sizeof(MMPFN)); - MxPfnAllocation = MxPfnSizeInBytes >> PAGE_SHIFT; - - /* The PFN database is at the start of the non paged region */ - MmPfnDatabase = (PVOID)((PCHAR)MmNonPagedPoolEnd - - MmMaximumNonPagedPoolInBytes); - - /* Reduce maximum non paged pool size */ - MmMaximumNonPagedPoolInBytes -= MxPfnSizeInBytes; - - /* Put non paged pool after the PFN database */ - MmNonPagedPoolStart = (PCHAR)MmPfnDatabase + MxPfnSizeInBytes; ASSERT(IS_PAGE_ALIGNED(MmNonPagedPoolStart)); /* Calculate the nonpaged pool expansion start region */ @@ -370,6 +517,32 @@ MiArmInitializeMemoryLayout(IN PLOADER_PARAMETER_BLOCK LoaderBlock) MmSizeOfNonPagedPoolInBytes; ASSERT(IS_PAGE_ALIGNED(MmNonPagedPoolExpansionStart)); + /* Map the nonpaged pool */ + PageCount = (MmSizeOfNonPagedPoolInBytes + PAGE_SIZE - 1) / PAGE_SIZE; + MxMapPageRange(MmNonPagedPoolStart, PageCount); + + /* Loop the non paged pool extension PTEs */ + for (Pte = MiAddressToPte(MmNonPagedPoolExpansionStart); + Pte <= MiAddressToPte(MmNonPagedPoolEnd); + Pte++) + { + /* Create PXE, PPE, PDE and zero the PTE */ + MxGetPte(MiPteToAddress(Pte))->u.Long = 0; + } + + /* Initialize the ARM3 nonpaged pool */ + MiInitializeArmPool(); + + /* Initialize the nonpaged pool */ + InitializePool(NonPagedPool, 0); +} + +VOID +NTAPI +MiBuildSystemPteSpace() +{ + PMMPTE Pte, StartPte, EndPte; + /* Use the default numer of system PTEs */ MmNumberOfSystemPtes = MI_NUMBER_SYSTEM_PTES; @@ -392,122 +565,6 @@ MiArmInitializeMemoryLayout(IN PLOADER_PARAMETER_BLOCK LoaderBlock) ASSERT(MmNumberOfSystemPtes > 1000); } - /* Sanity checks */ - ASSERT(MiSessionViewEnd <= MiSessionImageStart); - ASSERT(MmSessionBase <= MiSessionPoolStart); -} - -VOID -NTAPI -MiArmPreparePfnDatabse(IN PLOADER_PARAMETER_BLOCK LoaderBlock) -{ - PMEMORY_ALLOCATION_DESCRIPTOR MdBlock; - PLIST_ENTRY ListEntry; - PUCHAR Page, FirstPage; - SIZE_T Size; - - /* Loop the memory descriptors */ - for (ListEntry = LoaderBlock->MemoryDescriptorListHead.Flink; - ListEntry != &LoaderBlock->MemoryDescriptorListHead; - ListEntry = ListEntry->Flink) - { - /* Get the memory descriptor */ - MdBlock = CONTAINING_RECORD(ListEntry, - MEMORY_ALLOCATION_DESCRIPTOR, - ListEntry); - - /* Skip pages that are not part of the PFN database */ - if (!MiIncludeType[MdBlock->MemoryType]) - { - continue; - } - - /* Get the base and size of this pfn database entry */ - FirstPage = PAGE_ALIGN(&MmPfnDatabase[MdBlock->BasePage]); - Size = ROUND_TO_PAGES(MdBlock->PageCount * sizeof(MMPFN)); - - /* Loop the pages of this Pfn database entry */ - for (Page = FirstPage; Page < FirstPage + Size; Page += PAGE_SIZE) - { - /* Is the page already mapped? */ - if (!MmIsAddressValid(Page)) - { - /* It's not, map it now */ - MxMapPageRange(Page, 1); - } - } - - /* Zero out the pages */ - RtlZeroMemory(FirstPage, Size); - } -} - - -VOID -MiArmInitializePageTable() -{ - ULONG64 PageFrameOffset; - PMMPTE Pte, StartPte, EndPte; - MMPTE TmplPte; - PFN_NUMBER PageCount; - PVOID Address; - - /* HACK: don't use freeldr debug print anymore */ - FrLdrDbgPrint = NoDbgPrint; - - /* Get current directory base */ - PageFrameOffset = ((PMMPTE)PXE_SELFMAP)->u.Hard.PageFrameNumber << PAGE_SHIFT; - ASSERT(PageFrameOffset == __readcr3()); - - /* Set directory base for the system process */ - PsGetCurrentProcess()->Pcb.DirectoryTableBase[0] = PageFrameOffset; - - /* Enable global pages */ - __writecr4(__readcr4() | CR4_PGE); - ASSERT(__readcr4() & CR4_PGE); - - /* Set user mode address range */ - StartPte = MiAddressToPxe(0); - EndPte = MiAddressToPxe(MmHighestUserAddress); - - /* Loop the user mode PXEs */ - for (Pte = StartPte; Pte <= EndPte; Pte++) - { - /* Zero the PXE, clear all mappings */ - Pte->u.Long = 0; - } - - /* Flush the TLB */ - KeFlushCurrentTb(); - - /* Set up a template PTE */ - TmplPte.u.Long = 0; - TmplPte.u.Flush.Valid = 1; - TmplPte.u.Flush.Write = 1; - HyperTemplatePte = TmplPte; - - /* Create PDPTs (72 KB) for shared system address space, - * skip page tables and hyperspace */ - - /* Set the range */ - StartPte = MiAddressToPxe((PVOID)(HYPER_SPACE_END + 1)); - EndPte = MiAddressToPxe(MI_HIGHEST_SYSTEM_ADDRESS); - - /* Loop the PXEs */ - for (Pte = StartPte; Pte <= EndPte; Pte++) - { - /* Is the PXE already valid? */ - if (!Pte->u.Hard.Valid) - { - /* It's not Initialize it */ - TmplPte.u.Flush.PageFrameNumber = MxGetNextPage(1); - *Pte = TmplPte; - - /* Zero the page. The PXE is the PTE for the PDPT. */ - RtlZeroMemory(MiPteToAddress(Pte), PAGE_SIZE); - } - } - /* Set the range of system PTEs */ StartPte = MiAddressToPte(MI_SYSTEM_PTE_START); EndPte = StartPte + MmNumberOfSystemPtes - 1; @@ -515,33 +572,22 @@ MiArmInitializePageTable() /* Loop the system PTEs */ for (Pte = StartPte; Pte <= EndPte; Pte++) { - /* Make sure the PTE is valid */ - MxGetPte(MiPteToAddress(Pte)); + /* Create PXE, PPE, PDE and zero the PTE */ + MxGetPte(MiPteToAddress(Pte))->u.Long = 0; } - /* Map the nonpaged pool */ - PageCount = (MmSizeOfNonPagedPoolInBytes + PAGE_SIZE - 1) / PAGE_SIZE; - MxMapPageRange(MmNonPagedPoolStart, PageCount); + /* Create the system PTE space */ + Pte = MiAddressToPte(MI_SYSTEM_PTE_START); + MiInitializeSystemPtes(Pte, MmNumberOfSystemPtes, SystemPteSpace); - /* Create PTEs for the paged pool extension */ - for (Address = MmNonPagedPoolExpansionStart; - Address < MmNonPagedPoolEnd; - Address = (PVOID)((ULONG64)Address + PAGE_SIZE)) - { - /* Create PXE, PPE, PDE and set PTE to 0*/ - MxGetPte(Address)->u.Long = 0; - } + /* Reserve system PTEs for zeroing PTEs and clear them */ + MiFirstReservedZeroingPte = MiReserveSystemPtes(MI_ZERO_PTES, SystemPteSpace); + RtlZeroMemory(MiFirstReservedZeroingPte, MI_ZERO_PTES * sizeof(MMPTE)); - /* Setup the mapping PTEs */ - MmFirstReservedMappingPte = MxGetPte((PVOID)MI_MAPPING_RANGE_START); - MmFirstReservedMappingPte->u.Hard.PageFrameNumber = MI_HYPERSPACE_PTES; - MmLastReservedMappingPte = MiAddressToPte((PVOID)MI_MAPPING_RANGE_END); - - /* Setup debug mapping PTE */ - MmDebugPte = MxGetPte(MI_DEBUG_MAPPING); + /* Set the counter to maximum */ + MiFirstReservedZeroingPte->u.Hard.PageFrameNumber = MI_ZERO_PTES - 1; } - VOID NTAPI MiBuildPhysicalMemoryBlock(IN PLOADER_PARAMETER_BLOCK LoaderBlock) @@ -555,7 +601,7 @@ MiBuildPhysicalMemoryBlock(IN PLOADER_PARAMETER_BLOCK LoaderBlock) ULONG Size, i; /* Calculate size for the PFN bitmap */ - Size = (MmHighestPhysicalPage + sizeof(ULONG)) / sizeof(ULONG); + Size = ROUND_UP(MmHighestPhysicalPage + 1, sizeof(ULONG)); /* Allocate the PFN bitmap */ Bitmap = ExAllocatePoolWithTag(NonPagedPool, Size, ' mM'); @@ -628,7 +674,129 @@ VOID NTAPI MiBuildPagedPool(VOID) { - UNIMPLEMENTED; + PMMPTE Pte; + MMPTE TmplPte; + PFN_NUMBER PageFrameIndex; + KIRQL OldIrql; + ULONG Size, BitMapSize; + + /* Default size for paged pool is 4 times non paged pool */ + MmSizeOfPagedPoolInBytes = 4 * MmMaximumNonPagedPoolInBytes; + + /* Make sure it doesn't overflow */ + if (MmSizeOfPagedPoolInBytes > ((ULONG64)MmNonPagedSystemStart - + (ULONG64)MmPagedPoolStart)) + { + MmSizeOfPagedPoolInBytes = (ULONG64)MmNonPagedSystemStart - + (ULONG64)MmPagedPoolStart; + } + + /* Make sure paged pool is big enough */ + if (MmSizeOfPagedPoolInBytes < MI_MIN_INIT_PAGED_POOLSIZE) + { + MmSizeOfPagedPoolInBytes = MI_MIN_INIT_PAGED_POOLSIZE; + } + + /* Align down to a PDE boundary */ + MmSizeOfPagedPoolInBytes = ROUND_DOWN(MmSizeOfPagedPoolInBytes, + 512 * PAGE_SIZE); + MmSizeOfPagedPoolInPages = MmSizeOfPagedPoolInBytes >> PAGE_SHIFT; + + /* This is where paged pool ends */ + MmPagedPoolEnd = (PCHAR)MmPagedPoolStart + MmSizeOfPagedPoolInBytes - 1; + + /* Sanity check */ + ASSERT(MmPagedPoolEnd < MmNonPagedSystemStart); + + /* setup a template PTE */ + TmplPte.u.Long = 0; + TmplPte.u.Flush.Valid = 1; + TmplPte.u.Flush.Write = 1; + + /* Make sure the PXE is valid */ + Pte = MiAddressToPxe(MmPagedPoolStart); + if (!Pte->u.Flush.Valid) + { + /* Map it! */ + TmplPte.u.Flush.PageFrameNumber = MmAllocPage(MC_SYSTEM, 0); + *Pte = TmplPte; + } + + /* Map all page directories (max 128) */ + for (Pte = MiAddressToPpe(MmPagedPoolStart); + Pte <= MiAddressToPpe(MmPagedPoolEnd); + Pte++) + { + if (!Pte->u.Flush.Valid) + { + /* Map it! */ + TmplPte.u.Flush.PageFrameNumber = MxAllocPage(); + *Pte = TmplPte; + } + } + + /* Create and map the first PTE for paged pool */ + Pte = MxGetPte(MmPagedPoolStart); + TmplPte.u.Flush.PageFrameNumber = MxAllocPage(); + *Pte = TmplPte; + + /* Save the first and last paged pool PTE */ + MmPagedPoolInfo.FirstPteForPagedPool = MiAddressToPte(MmPagedPoolStart); + MmPagedPoolInfo.LastPteForPagedPool = MiAddressToPte(MmPagedPoolEnd); + + MmPagedPoolInfo.NextPdeForPagedPoolExpansion = + MiAddressToPde(MmPagedPoolStart) + 1; + + // We keep track of each page via a bit, so check how big the bitmap will + // have to be (make sure to align our page count such that it fits nicely + // into a 4-byte aligned bitmap. + + /* The size of the bitmap in bits is the size in pages */ + BitMapSize = MmSizeOfPagedPoolInPages; + + /* Calculate buffer size in bytes, aligned to 32 bits */ + Size = sizeof(RTL_BITMAP) + ROUND_UP(BitMapSize, 32) / 8; + + // Allocate the allocation bitmap, which tells us which regions have not yet + // been mapped into memory + + MmPagedPoolInfo.PagedPoolAllocationMap = + ExAllocatePoolWithTag(NonPagedPool, Size, ' mM'); + ASSERT(MmPagedPoolInfo.PagedPoolAllocationMap); + + DPRINT1("BitMapSize = 0x%lx, Size = 0x%lx\n", BitMapSize, Size); + // Initialize it such that at first, only the first page's worth of PTEs is + // marked as allocated (incidentially, the first PDE we allocated earlier). + RtlInitializeBitMap(MmPagedPoolInfo.PagedPoolAllocationMap, + (PULONG)(MmPagedPoolInfo.PagedPoolAllocationMap + 1), + BitMapSize); + RtlSetAllBits(MmPagedPoolInfo.PagedPoolAllocationMap); + RtlClearBits(MmPagedPoolInfo.PagedPoolAllocationMap, 0, 512); + + // We have a second bitmap, which keeps track of where allocations end. + // Given the allocation bitmap and a base address, we can therefore figure + // out which page is the last page of that allocation, and thus how big the + // entire allocation is. + MmPagedPoolInfo.EndOfPagedPoolBitmap = + ExAllocatePoolWithTag(NonPagedPool, Size, ' mM'); + ASSERT(MmPagedPoolInfo.EndOfPagedPoolBitmap); + + DPRINT1("PagedPoolAllocationMap=%p, EndOfPagedPoolBitmap=%p\n", + MmPagedPoolInfo.PagedPoolAllocationMap, MmPagedPoolInfo.EndOfPagedPoolBitmap); + + /* Initialize the bitmap */ + RtlInitializeBitMap(MmPagedPoolInfo.EndOfPagedPoolBitmap, + (PULONG)(MmPagedPoolInfo.EndOfPagedPoolBitmap + 1), + BitMapSize); + + /* No allocations, no allocation ends; clear all bits. */ + RtlClearAllBits(MmPagedPoolInfo.EndOfPagedPoolBitmap); + + /* Initialize the paged pool mutex */ + KeInitializeGuardedMutex(&MmPagedPoolMutex); + + /* Initialize the paged pool */ + InitializePool(PagedPool, 0); } @@ -642,20 +810,14 @@ MmArmInitSystem(IN ULONG Phase, /* Parse memory descriptors */ MiEvaluateMemoryDescriptors(LoaderBlock); - /* Configure the memory sizes */ - MiArmConfigureMemorySizes(LoaderBlock); - - /* Initialize the memory layout */ - MiArmInitializeMemoryLayout(LoaderBlock); - /* Prepare PFN database mappings */ - MiArmPreparePfnDatabse(LoaderBlock); + MiPreparePfnDatabse(LoaderBlock); + + /* Initialize the session space */ + MiInitializeSessionSpace(LoaderBlock); /* Initialize some mappings */ - MiArmInitializePageTable(); - - /* Initialize the ARM3 nonpaged pool */ - MiInitializeArmPool(); + MiInitializePageTable(); /* Update the memory descriptor, to make sure the pages we used won't get inserted into the PFN database */ @@ -672,20 +834,14 @@ MmArmInitSystem(IN ULONG Phase, /* The PFN database was created, restore the free descriptor */ *MxFreeDescriptor = MxOldFreeDescriptor; + /* Switch to phase 1 */ + MxPhase = 1; + /* Initialize the nonpaged pool */ - InitializePool(NonPagedPool, 0); + MiBuildNonPagedPool(); - /* Create the system PTE space */ - Pte = MiAddressToPte(MI_SYSTEM_PTE_START); - MiInitializeSystemPtes(Pte, MmNumberOfSystemPtes, SystemPteSpace); - - /* Reserve system PTEs for zeroing PTEs and clear them */ - MiFirstReservedZeroingPte = MiReserveSystemPtes(MI_ZERO_PTES, - SystemPteSpace); - RtlZeroMemory(MiFirstReservedZeroingPte, MI_ZERO_PTES * sizeof(MMPTE)); - - /* Set the counter to maximum */ - MiFirstReservedZeroingPte->u.Hard.PageFrameNumber = MI_ZERO_PTES - 1; + /* Initialize system PTE handling */ + MiBuildSystemPteSpace(); /* Build the physical memory block */ MiBuildPhysicalMemoryBlock(LoaderBlock); From 22b47450d3b1adb57e4871166fcaf5565936b338 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 21 Nov 2009 15:28:14 +0000 Subject: [PATCH 131/286] - Update MMPFN for WIN64 svn path=/branches/ros-amd64-bringup/; revision=44256 --- reactos/ntoskrnl/include/internal/mm.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/reactos/ntoskrnl/include/internal/mm.h b/reactos/ntoskrnl/include/internal/mm.h index 2dfd23eeeea..0112b73c7b3 100644 --- a/reactos/ntoskrnl/include/internal/mm.h +++ b/reactos/ntoskrnl/include/internal/mm.h @@ -374,6 +374,9 @@ typedef struct _MMPFN USHORT ShortFlags; } e2; } u3; +#ifdef _WIN64 + ULONG UsedPageTableEntries; +#endif union { MMPTE OriginalPte; @@ -384,7 +387,7 @@ typedef struct _MMPFN ULONG_PTR EntireFrame; // SavedSwapEntry struct { - ULONG_PTR PteFrame:25; + ULONG_PTR PteFrame: 8*sizeof(PVOID)-7; ULONG_PTR InPageError:1; ULONG_PTR VerifierAllocation:1; ULONG_PTR AweAllocation:1; From 5374d2c307811ddb4237a7a8460e9b2642105bae Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 21 Nov 2009 15:43:26 +0000 Subject: [PATCH 132/286] PFN_TYPE -> PFN_NUMBER svn path=/branches/ros-amd64-bringup/; revision=44257 --- reactos/ntoskrnl/cc/copy.c | 8 +-- reactos/ntoskrnl/cc/view.c | 8 +-- reactos/ntoskrnl/include/internal/mm.h | 93 +++++++++++++------------- reactos/ntoskrnl/mm/ARM3/iosup.c | 2 +- reactos/ntoskrnl/mm/amd64/page.c | 10 +-- reactos/ntoskrnl/mm/anonmem.c | 10 +-- reactos/ntoskrnl/mm/arm/stubs.c | 10 +-- reactos/ntoskrnl/mm/balance.c | 12 ++-- reactos/ntoskrnl/mm/freelist.c | 40 +++++------ reactos/ntoskrnl/mm/i386/page.c | 16 ++--- reactos/ntoskrnl/mm/i386/pagepae.c | 34 +++++----- reactos/ntoskrnl/mm/marea.c | 4 +- reactos/ntoskrnl/mm/mmfault.c | 2 +- reactos/ntoskrnl/mm/mpw.c | 4 +- reactos/ntoskrnl/mm/pagefile.c | 8 +-- reactos/ntoskrnl/mm/powerpc/page.c | 28 ++++---- reactos/ntoskrnl/mm/rmap.c | 16 ++--- reactos/ntoskrnl/mm/section.c | 24 +++---- 18 files changed, 164 insertions(+), 165 deletions(-) diff --git a/reactos/ntoskrnl/cc/copy.c b/reactos/ntoskrnl/cc/copy.c index 92c66c74c23..bcc24387efb 100644 --- a/reactos/ntoskrnl/cc/copy.c +++ b/reactos/ntoskrnl/cc/copy.c @@ -15,7 +15,7 @@ /* GLOBALS *******************************************************************/ -static PFN_TYPE CcZeroPage = 0; +static PFN_NUMBER CcZeroPage = 0; #define MAX_ZERO_LENGTH (256 * 1024) #define MAX_RW_LENGTH (256 * 1024) @@ -98,7 +98,7 @@ ReadCacheSegmentChain(PBCB Bcb, ULONG ReadOffset, ULONG Length, PCACHE_SEGMENT current2; ULONG current_size; ULONG i; - PPFN_TYPE MdlPages; + PPFN_NUMBER MdlPages; /* * Count the maximum number of bytes we could read starting @@ -119,7 +119,7 @@ ReadCacheSegmentChain(PBCB Bcb, ULONG ReadOffset, ULONG Length, Mdl->MdlFlags |= (MDL_PAGES_LOCKED | MDL_IO_PAGE_READ); current2 = current; current_size = 0; - MdlPages = (PPFN_TYPE)(Mdl + 1); + MdlPages = (PPFN_NUMBER)(Mdl + 1); while (current2 != NULL && !current2->Valid && current_size < MAX_RW_LENGTH) { PVOID address = current2->BaseAddress; @@ -619,7 +619,7 @@ CcZeroData (IN PFILE_OBJECT FileObject, Mdl->MdlFlags |= (MDL_PAGES_LOCKED | MDL_IO_PAGE_READ); for (i = 0; i < ((Mdl->Size - sizeof(MDL)) / sizeof(ULONG)); i++) { - ((PPFN_TYPE)(Mdl + 1))[i] = CcZeroPage; + ((PPFN_NUMBER)(Mdl + 1))[i] = CcZeroPage; } KeInitializeEvent(&Event, NotificationEvent, FALSE); Status = IoSynchronousPageWrite(FileObject, Mdl, &WriteOffset, &Event, &Iosb); diff --git a/reactos/ntoskrnl/cc/view.c b/reactos/ntoskrnl/cc/view.c index a453eccaf74..35b8ef49d1e 100644 --- a/reactos/ntoskrnl/cc/view.c +++ b/reactos/ntoskrnl/cc/view.c @@ -330,8 +330,8 @@ CcRosTrimCache(ULONG Target, ULONG Priority, PULONG NrFreed) KeReleaseGuardedMutex(&ViewLock); for (i = 0; i < current->Bcb->CacheSegmentSize / PAGE_SIZE; i++) { - PFN_TYPE Page; - Page = (PFN_TYPE)(MmGetPhysicalAddress((char*)current->BaseAddress + i * PAGE_SIZE).QuadPart >> PAGE_SHIFT); + PFN_NUMBER Page; + Page = (PFN_NUMBER)(MmGetPhysicalAddress((char*)current->BaseAddress + i * PAGE_SIZE).QuadPart >> PAGE_SHIFT); Status = MmPageOutPhysicalAddress(Page); } KeAcquireGuardedMutex(&ViewLock); @@ -842,7 +842,7 @@ CcRosRequestCacheSegment(PBCB Bcb, #else static VOID CcFreeCachePage(PVOID Context, MEMORY_AREA* MemoryArea, PVOID Address, - PFN_TYPE Page, SWAPENTRY SwapEntry, BOOLEAN Dirty) + PFN_NUMBER Page, SWAPENTRY SwapEntry, BOOLEAN Dirty) { ASSERT(SwapEntry == 0); if (Page != 0) @@ -861,7 +861,7 @@ CcRosInternalFreeCacheSegment(PCACHE_SEGMENT CacheSeg) ULONG i; ULONG RegionSize; ULONG Base; - PFN_TYPE Page; + PFN_NUMBER Page; KIRQL oldIrql; #endif DPRINT("Freeing cache segment 0x%p\n", CacheSeg); diff --git a/reactos/ntoskrnl/include/internal/mm.h b/reactos/ntoskrnl/include/internal/mm.h index 0112b73c7b3..10f30e6a787 100644 --- a/reactos/ntoskrnl/include/internal/mm.h +++ b/reactos/ntoskrnl/include/internal/mm.h @@ -54,7 +54,6 @@ struct _EPROCESS; struct _MM_RMAP_ENTRY; struct _MM_PAGEOP; typedef ULONG SWAPENTRY; -typedef ULONG PFN_TYPE, *PPFN_TYPE; // // MmDbgCopyMemory Flags @@ -499,7 +498,7 @@ typedef VOID PVOID Context, PMEMORY_AREA MemoryArea, PVOID Address, - PFN_TYPE Page, + PFN_NUMBER Page, SWAPENTRY SwapEntry, BOOLEAN Dirty ); @@ -721,7 +720,7 @@ VOID NTAPI MmBuildMdlFromPages( PMDL Mdl, - PULONG Pages + PPFN_NUMBER Pages ); /* mminit.c ******************************************************************/ @@ -771,7 +770,7 @@ NTSTATUS NTAPI MmReadFromSwapPage( SWAPENTRY SwapEntry, - PFN_TYPE Page + PFN_NUMBER Page ); BOOLEAN @@ -782,7 +781,7 @@ NTSTATUS NTAPI MmWriteToSwapPage( SWAPENTRY SwapEntry, - PFN_TYPE Page + PFN_NUMBER Page ); NTSTATUS @@ -950,18 +949,18 @@ ExUnmapPage(PVOID Addr); PVOID NTAPI -ExAllocatePageWithPhysPage(PFN_TYPE Page); +ExAllocatePageWithPhysPage(PFN_NUMBER Page); NTSTATUS NTAPI MiCopyFromUserPage( - PFN_TYPE Page, + PFN_NUMBER Page, PVOID SourceAddress ); NTSTATUS NTAPI -MiZeroPage(PFN_TYPE Page); +MiZeroPage(PFN_NUMBER Page); /* memsafe.s *****************************************************************/ @@ -1032,7 +1031,7 @@ NTSTATUS NTAPI MmReleasePageMemoryConsumer( ULONG Consumer, - PFN_TYPE Page + PFN_NUMBER Page ); NTSTATUS @@ -1040,7 +1039,7 @@ NTAPI MmRequestPageMemoryConsumer( ULONG Consumer, BOOLEAN MyWait, - PPFN_TYPE AllocatedPage + PPFN_NUMBER AllocatedPage ); VOID @@ -1056,18 +1055,18 @@ MmRebalanceMemoryConsumers(VOID); VOID NTAPI MmSetRmapListHeadPage( - PFN_TYPE Page, + PFN_NUMBER Page, struct _MM_RMAP_ENTRY* ListHead ); struct _MM_RMAP_ENTRY* NTAPI -MmGetRmapListHeadPage(PFN_TYPE Page); +MmGetRmapListHeadPage(PFN_NUMBER Page); VOID NTAPI MmInsertRmap( - PFN_TYPE Page, + PFN_NUMBER Page, struct _EPROCESS *Process, PVOID Address ); @@ -1075,7 +1074,7 @@ MmInsertRmap( VOID NTAPI MmDeleteAllRmaps( - PFN_TYPE Page, + PFN_NUMBER Page, PVOID Context, VOID (*DeleteMapping)(PVOID Context, struct _EPROCESS *Process, PVOID Address) ); @@ -1083,7 +1082,7 @@ MmDeleteAllRmaps( VOID NTAPI MmDeleteRmap( - PFN_TYPE Page, + PFN_NUMBER Page, struct _EPROCESS *Process, PVOID Address ); @@ -1094,23 +1093,23 @@ MmInitializeRmapList(VOID); VOID NTAPI -MmSetCleanAllRmaps(PFN_TYPE Page); +MmSetCleanAllRmaps(PFN_NUMBER Page); VOID NTAPI -MmSetDirtyAllRmaps(PFN_TYPE Page); +MmSetDirtyAllRmaps(PFN_NUMBER Page); BOOLEAN NTAPI -MmIsDirtyPageRmap(PFN_TYPE Page); +MmIsDirtyPageRmap(PFN_NUMBER Page); NTSTATUS NTAPI -MmWritePagePhysicalAddress(PFN_TYPE Page); +MmWritePagePhysicalAddress(PFN_NUMBER Page); NTSTATUS NTAPI -MmPageOutPhysicalAddress(PFN_TYPE Page); +MmPageOutPhysicalAddress(PFN_NUMBER Page); /* freelist.c **********************************************************/ @@ -1118,7 +1117,7 @@ MmPageOutPhysicalAddress(PFN_TYPE Page); FORCEINLINE PMMPFN -MiGetPfnEntry(IN PFN_TYPE Pfn) +MiGetPfnEntry(IN PFN_NUMBER Pfn) { PMMPFN Page; extern RTL_BITMAP MiPfnBitMap; @@ -1149,33 +1148,33 @@ MiGetPfnEntryIndex(IN PMMPFN Pfn1) return Pfn1 - MmPfnDatabase; } -PFN_TYPE +PFN_NUMBER NTAPI -MmGetLRUNextUserPage(PFN_TYPE PreviousPage); +MmGetLRUNextUserPage(PFN_NUMBER PreviousPage); -PFN_TYPE +PFN_NUMBER NTAPI MmGetLRUFirstUserPage(VOID); VOID NTAPI -MmInsertLRULastUserPage(PFN_TYPE Page); +MmInsertLRULastUserPage(PFN_NUMBER Page); VOID NTAPI -MmRemoveLRUUserPage(PFN_TYPE Page); +MmRemoveLRUUserPage(PFN_NUMBER Page); VOID NTAPI -MmLockPage(PFN_TYPE Page); +MmLockPage(PFN_NUMBER Page); VOID NTAPI -MmUnlockPage(PFN_TYPE Page); +MmUnlockPage(PFN_NUMBER Page); ULONG NTAPI -MmGetLockCountPage(PFN_TYPE Page); +MmGetLockCountPage(PFN_NUMBER Page); VOID NTAPI @@ -1189,7 +1188,7 @@ MmDumpPfnDatabase( VOID ); -PFN_TYPE +PFN_NUMBER NTAPI MmGetContinuousPages( ULONG NumberOfBytes, @@ -1260,7 +1259,7 @@ NTAPI MmCreateVirtualMappingForKernel( PVOID Address, ULONG flProtect, - PPFN_TYPE Pages, + PPFN_NUMBER Pages, ULONG PageCount ); @@ -1277,7 +1276,7 @@ MmCreateVirtualMapping( struct _EPROCESS* Process, PVOID Address, ULONG flProtect, - PPFN_TYPE Pages, + PPFN_NUMBER Pages, ULONG PageCount ); @@ -1287,7 +1286,7 @@ MmCreateVirtualMappingUnsafe( struct _EPROCESS* Process, PVOID Address, ULONG flProtect, - PPFN_TYPE Pages, + PPFN_NUMBER Pages, ULONG PageCount ); @@ -1322,7 +1321,7 @@ MmDisableVirtualMapping( struct _EPROCESS *Process, PVOID Address, BOOLEAN* WasDirty, - PPFN_TYPE Page + PPFN_NUMBER Page ); VOID @@ -1362,7 +1361,7 @@ MmIsPageSwapEntry( VOID NTAPI MmTransferOwnershipPage( - PFN_TYPE Page, + PFN_NUMBER Page, ULONG NewConsumer ); @@ -1373,7 +1372,7 @@ MmSetDirtyPage( PVOID Address ); -PFN_TYPE +PFN_NUMBER NTAPI MmAllocPage( ULONG Consumer, @@ -1387,34 +1386,34 @@ MmAllocPagesSpecifyRange( PHYSICAL_ADDRESS LowestAddress, PHYSICAL_ADDRESS HighestAddress, ULONG NumberOfPages, - PPFN_TYPE Pages + PPFN_NUMBER Pages ); VOID NTAPI -MmDereferencePage(PFN_TYPE Page); +MmDereferencePage(PFN_NUMBER Page); VOID NTAPI -MmReferencePage(PFN_TYPE Page); +MmReferencePage(PFN_NUMBER Page); ULONG NTAPI -MmGetReferenceCountPage(PFN_TYPE Page); +MmGetReferenceCountPage(PFN_NUMBER Page); BOOLEAN NTAPI -MmIsPageInUse(PFN_TYPE Page); +MmIsPageInUse(PFN_NUMBER Page); VOID NTAPI MmSetSavedSwapEntryPage( - PFN_TYPE Page, + PFN_NUMBER Page, SWAPENTRY SavedSwapEntry); SWAPENTRY NTAPI -MmGetSavedSwapEntryPage(PFN_TYPE Page); +MmGetSavedSwapEntryPage(PFN_NUMBER Page); VOID NTAPI @@ -1434,7 +1433,7 @@ MmDeletePageTable( PVOID Address ); -PFN_TYPE +PFN_NUMBER NTAPI MmGetPfnForProcess( struct _EPROCESS *Process, @@ -1478,7 +1477,7 @@ MmDeleteVirtualMapping( PVOID Address, BOOLEAN FreePage, BOOLEAN* WasDirty, - PPFN_TYPE Page + PPFN_NUMBER Page ); BOOLEAN @@ -1490,11 +1489,11 @@ MmIsDirtyPage( VOID NTAPI -MmMarkPageMapped(PFN_TYPE Page); +MmMarkPageMapped(PFN_NUMBER Page); VOID NTAPI -MmMarkPageUnmapped(PFN_TYPE Page); +MmMarkPageUnmapped(PFN_NUMBER Page); VOID NTAPI diff --git a/reactos/ntoskrnl/mm/ARM3/iosup.c b/reactos/ntoskrnl/mm/ARM3/iosup.c index 03f38da6b0e..bf5d83f3f5f 100644 --- a/reactos/ntoskrnl/mm/ARM3/iosup.c +++ b/reactos/ntoskrnl/mm/ARM3/iosup.c @@ -50,7 +50,7 @@ MmMapIoSpace(IN PHYSICAL_ADDRESS PhysicalAddress, IN MEMORY_CACHING_TYPE CacheType) { - PFN_TYPE Pfn, PageCount; + PFN_NUMBER Pfn, PageCount; PMMPTE PointerPte; PVOID BaseAddress; MMPTE TempPte; diff --git a/reactos/ntoskrnl/mm/amd64/page.c b/reactos/ntoskrnl/mm/amd64/page.c index 4258dc5f288..4c14d932c2e 100644 --- a/reactos/ntoskrnl/mm/amd64/page.c +++ b/reactos/ntoskrnl/mm/amd64/page.c @@ -131,7 +131,7 @@ MiGetPteValueForProcess( /* FUNCTIONS ***************************************************************/ -PFN_TYPE +PFN_NUMBER NTAPI MmGetPfnForProcess(PEPROCESS Process, PVOID Address) @@ -321,7 +321,7 @@ Mmi386ReleaseMmInfo(PEPROCESS Process) VOID NTAPI -MmDisableVirtualMapping(PEPROCESS Process, PVOID Address, BOOLEAN* WasDirty, PPFN_TYPE Page) +MmDisableVirtualMapping(PEPROCESS Process, PVOID Address, BOOLEAN* WasDirty, PPFN_NUMBER Page) { UNIMPLEMENTED; } @@ -340,7 +340,7 @@ MmDeleteVirtualMapping( PVOID Address, BOOLEAN FreePage, BOOLEAN* WasDirty, - PPFN_TYPE Page) + PPFN_NUMBER Page) { PFN_NUMBER Pfn; PMMPTE Pte; @@ -412,7 +412,7 @@ NTAPI MmCreateVirtualMappingUnsafe(PEPROCESS Process, PVOID Address, ULONG flProtect, - PPFN_TYPE Pages, + PPFN_NUMBER Pages, ULONG PageCount) { UNIMPLEMENTED; @@ -424,7 +424,7 @@ NTAPI MmCreateVirtualMapping(PEPROCESS Process, PVOID Address, ULONG flProtect, - PPFN_TYPE Pages, + PPFN_NUMBER Pages, ULONG PageCount) { UNIMPLEMENTED; diff --git a/reactos/ntoskrnl/mm/anonmem.c b/reactos/ntoskrnl/mm/anonmem.c index 375d18c52bd..e5c907ad8af 100644 --- a/reactos/ntoskrnl/mm/anonmem.c +++ b/reactos/ntoskrnl/mm/anonmem.c @@ -53,7 +53,7 @@ MmWritePageVirtualMemory(PMMSUPPORT AddressSpace, PMM_PAGEOP PageOp) { SWAPENTRY SwapEntry; - PFN_TYPE Page; + PFN_NUMBER Page; NTSTATUS Status; PEPROCESS Process = MmGetAddressSpaceOwner(AddressSpace); @@ -135,7 +135,7 @@ MmPageOutVirtualMemory(PMMSUPPORT AddressSpace, PVOID Address, PMM_PAGEOP PageOp) { - PFN_TYPE Page; + PFN_NUMBER Page; BOOLEAN WasDirty; SWAPENTRY SwapEntry; NTSTATUS Status; @@ -253,7 +253,7 @@ MmNotPresentFaultVirtualMemory(PMMSUPPORT AddressSpace, * NOTES: This function is called with the address space lock held. */ { - PFN_TYPE Page; + PFN_NUMBER Page; NTSTATUS Status; PMM_REGION Region; PMM_PAGEOP PageOp; @@ -476,7 +476,7 @@ MmModifyAttributes(PMMSUPPORT AddressSpace, for (i=0; i < PAGE_ROUND_UP(RegionSize)/PAGE_SIZE; i++) { - PFN_TYPE Page; + PFN_NUMBER Page; if (MmIsPageSwapEntry(Process, (char*)BaseAddress + (i * PAGE_SIZE))) @@ -872,7 +872,7 @@ static VOID MmFreeVirtualMemoryPage(PVOID Context, MEMORY_AREA* MemoryArea, PVOID Address, - PFN_TYPE Page, + PFN_NUMBER Page, SWAPENTRY SwapEntry, BOOLEAN Dirty) { diff --git a/reactos/ntoskrnl/mm/arm/stubs.c b/reactos/ntoskrnl/mm/arm/stubs.c index 50bc6d6e64c..0388f2bb586 100644 --- a/reactos/ntoskrnl/mm/arm/stubs.c +++ b/reactos/ntoskrnl/mm/arm/stubs.c @@ -430,7 +430,7 @@ NTAPI MmDisableVirtualMapping(IN PEPROCESS Process, IN PVOID Address, OUT PBOOLEAN WasDirty, - OUT PPFN_TYPE Page) + OUT PPFN_NUMBER Page) { // // TODO @@ -557,7 +557,7 @@ NTAPI MmCreateVirtualMappingUnsafe(IN PEPROCESS Process, IN PVOID Address, IN ULONG Protection, - IN PPFN_TYPE Pages, + IN PPFN_NUMBER Pages, IN ULONG PageCount) { // @@ -588,7 +588,7 @@ NTAPI MmCreateVirtualMapping(IN PEPROCESS Process, IN PVOID Address, IN ULONG Protection, - IN PPFN_TYPE Pages, + IN PPFN_NUMBER Pages, IN ULONG PageCount) { ULONG i; @@ -644,7 +644,7 @@ MmDeleteVirtualMapping(IN PEPROCESS Process, IN PVOID Address, IN BOOLEAN FreePage, OUT PBOOLEAN WasDirty, - OUT PPFN_TYPE Page) + OUT PPFN_NUMBER Page) { PMMPTE PointerPte; MMPTE Pte; @@ -712,7 +712,7 @@ MmCreatePageFileMapping(IN PEPROCESS Process, return 0; } -PFN_TYPE +PFN_NUMBER NTAPI MmGetPfnForProcess(IN PEPROCESS Process, IN PVOID Address) diff --git a/reactos/ntoskrnl/mm/balance.c b/reactos/ntoskrnl/mm/balance.c index 9f6192bedf2..853af294b77 100644 --- a/reactos/ntoskrnl/mm/balance.c +++ b/reactos/ntoskrnl/mm/balance.c @@ -23,7 +23,7 @@ /* TYPES ********************************************************************/ typedef struct _MM_ALLOCATION_REQUEST { - PFN_TYPE Page; + PFN_NUMBER Page; LIST_ENTRY ListEntry; KEVENT Event; } @@ -101,7 +101,7 @@ MmInitializeMemoryConsumer(ULONG Consumer, NTSTATUS NTAPI -MmReleasePageMemoryConsumer(ULONG Consumer, PFN_TYPE Page) +MmReleasePageMemoryConsumer(ULONG Consumer, PFN_NUMBER Page) { PMM_ALLOCATION_REQUEST Request; PLIST_ENTRY Entry; @@ -170,8 +170,8 @@ MiTrimMemoryConsumer(ULONG Consumer) NTSTATUS MmTrimUserMemory(ULONG Target, ULONG Priority, PULONG NrFreedPages) { - PFN_TYPE CurrentPage; - PFN_TYPE NextPage; + PFN_NUMBER CurrentPage; + PFN_NUMBER NextPage; NTSTATUS Status; (*NrFreedPages) = 0; @@ -235,10 +235,10 @@ MiIsBalancerThread(VOID) NTSTATUS NTAPI MmRequestPageMemoryConsumer(ULONG Consumer, BOOLEAN CanWait, - PPFN_TYPE AllocatedPage) + PPFN_NUMBER AllocatedPage) { ULONG OldUsed; - PFN_TYPE Page; + PFN_NUMBER Page; KIRQL OldIrql; /* diff --git a/reactos/ntoskrnl/mm/freelist.c b/reactos/ntoskrnl/mm/freelist.c index 6bb5cd6c139..1deed647a04 100644 --- a/reactos/ntoskrnl/mm/freelist.c +++ b/reactos/ntoskrnl/mm/freelist.c @@ -105,7 +105,7 @@ static ULONG UnzeroedPageCount = 0; /* FUNCTIONS *************************************************************/ -PFN_TYPE +PFN_NUMBER NTAPI MmGetLRUFirstUserPage(VOID) { @@ -128,7 +128,7 @@ MmGetLRUFirstUserPage(VOID) VOID NTAPI -MmInsertLRULastUserPage(PFN_TYPE Pfn) +MmInsertLRULastUserPage(PFN_NUMBER Pfn) { KIRQL oldIrql; PPHYSICAL_PAGE Page; @@ -142,9 +142,9 @@ MmInsertLRULastUserPage(PFN_TYPE Pfn) KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); } -PFN_TYPE +PFN_NUMBER NTAPI -MmGetLRUNextUserPage(PFN_TYPE PreviousPfn) +MmGetLRUNextUserPage(PFN_NUMBER PreviousPfn) { PLIST_ENTRY NextListEntry; PHYSICAL_PAGE* PageDescriptor; @@ -169,7 +169,7 @@ MmGetLRUNextUserPage(PFN_TYPE PreviousPfn) VOID NTAPI -MmRemoveLRUUserPage(PFN_TYPE Page) +MmRemoveLRUUserPage(PFN_NUMBER Page) { RemoveEntryList(&MiGetPfnEntry(Page)->ListEntry); } @@ -815,7 +815,7 @@ MmInitializePageList(VOID) VOID NTAPI -MmSetRmapListHeadPage(PFN_TYPE Pfn, struct _MM_RMAP_ENTRY* ListHead) +MmSetRmapListHeadPage(PFN_NUMBER Pfn, struct _MM_RMAP_ENTRY* ListHead) { KIRQL oldIrql; @@ -826,7 +826,7 @@ MmSetRmapListHeadPage(PFN_TYPE Pfn, struct _MM_RMAP_ENTRY* ListHead) struct _MM_RMAP_ENTRY* NTAPI -MmGetRmapListHeadPage(PFN_TYPE Pfn) +MmGetRmapListHeadPage(PFN_NUMBER Pfn) { KIRQL oldIrql; struct _MM_RMAP_ENTRY* ListHead; @@ -840,7 +840,7 @@ MmGetRmapListHeadPage(PFN_TYPE Pfn) VOID NTAPI -MmSetSavedSwapEntryPage(PFN_TYPE Pfn, SWAPENTRY SwapEntry) +MmSetSavedSwapEntryPage(PFN_NUMBER Pfn, SWAPENTRY SwapEntry) { KIRQL oldIrql; @@ -851,7 +851,7 @@ MmSetSavedSwapEntryPage(PFN_TYPE Pfn, SWAPENTRY SwapEntry) SWAPENTRY NTAPI -MmGetSavedSwapEntryPage(PFN_TYPE Pfn) +MmGetSavedSwapEntryPage(PFN_NUMBER Pfn) { SWAPENTRY SwapEntry; KIRQL oldIrql; @@ -865,7 +865,7 @@ MmGetSavedSwapEntryPage(PFN_TYPE Pfn) VOID NTAPI -MmReferencePage(PFN_TYPE Pfn) +MmReferencePage(PFN_NUMBER Pfn) { PPHYSICAL_PAGE Page; @@ -889,7 +889,7 @@ MmReferencePage(PFN_TYPE Pfn) ULONG NTAPI -MmGetReferenceCountPage(PFN_TYPE Pfn) +MmGetReferenceCountPage(PFN_NUMBER Pfn) { KIRQL oldIrql; ULONG RCount; @@ -914,7 +914,7 @@ MmGetReferenceCountPage(PFN_TYPE Pfn) BOOLEAN NTAPI -MmIsPageInUse(PFN_TYPE Pfn) +MmIsPageInUse(PFN_NUMBER Pfn) { DPRINT("MmIsPageInUse(PhysicalAddress %x)\n", Pfn << PAGE_SHIFT); @@ -924,7 +924,7 @@ MmIsPageInUse(PFN_TYPE Pfn) VOID NTAPI -MmDereferencePage(PFN_TYPE Pfn) +MmDereferencePage(PFN_NUMBER Pfn) { PPHYSICAL_PAGE Page; @@ -984,7 +984,7 @@ MmDereferencePage(PFN_TYPE Pfn) ULONG NTAPI -MmGetLockCountPage(PFN_TYPE Pfn) +MmGetLockCountPage(PFN_NUMBER Pfn) { KIRQL oldIrql; ULONG CurrentLockCount; @@ -1010,7 +1010,7 @@ MmGetLockCountPage(PFN_TYPE Pfn) VOID NTAPI -MmLockPage(PFN_TYPE Pfn) +MmLockPage(PFN_NUMBER Pfn) { PPHYSICAL_PAGE Page; @@ -1029,7 +1029,7 @@ MmLockPage(PFN_TYPE Pfn) VOID NTAPI -MmUnlockPage(PFN_TYPE Pfn) +MmUnlockPage(PFN_NUMBER Pfn) { PPHYSICAL_PAGE Page; @@ -1046,11 +1046,11 @@ MmUnlockPage(PFN_TYPE Pfn) Page->LockCount--; } -PFN_TYPE +PFN_NUMBER NTAPI MmAllocPage(ULONG Consumer, SWAPENTRY SwapEntry) { - PFN_TYPE PfnOffset; + PFN_NUMBER PfnOffset; PLIST_ENTRY ListEntry; PPHYSICAL_PAGE PageDescriptor; BOOLEAN NeedClear = FALSE; @@ -1112,7 +1112,7 @@ MmAllocPage(ULONG Consumer, SWAPENTRY SwapEntry) NTSTATUS NTAPI -MiZeroPage(PFN_TYPE Page) +MiZeroPage(PFN_NUMBER Page) { KIRQL Irql; PVOID TempAddress; @@ -1137,7 +1137,7 @@ MmZeroPageThreadMain(PVOID Ignored) KIRQL oldIrql; PLIST_ENTRY ListEntry; PPHYSICAL_PAGE PageDescriptor; - PFN_TYPE Pfn; + PFN_NUMBER Pfn; ULONG Count; /* Free initial kernel memory */ diff --git a/reactos/ntoskrnl/mm/i386/page.c b/reactos/ntoskrnl/mm/i386/page.c index daa2ffe5323..d224dbd08a8 100644 --- a/reactos/ntoskrnl/mm/i386/page.c +++ b/reactos/ntoskrnl/mm/i386/page.c @@ -183,7 +183,7 @@ MmCreateProcessAddressSpace(IN ULONG MinWs, { NTSTATUS Status; ULONG i, j; - PFN_TYPE Pfn[2]; + PFN_NUMBER Pfn[2]; PULONG_PTR PageDirectory; DPRINT("MmCopyMmInfo(Src %x, Dest %x)\n", MinWs, Process); @@ -225,7 +225,7 @@ MmGetPageTableForProcess(PEPROCESS Process, PVOID Address, BOOLEAN Create) { ULONG PdeOffset = ADDR_TO_PDE_OFFSET(Address); NTSTATUS Status; - PFN_TYPE Pfn; + PFN_NUMBER Pfn; ULONG Entry; PULONG Pt, PageDir; @@ -348,7 +348,7 @@ static ULONG MmGetPageEntryForProcess(PEPROCESS Process, PVOID Address) return 0; } -PFN_TYPE +PFN_NUMBER NTAPI MmGetPfnForProcess(PEPROCESS Process, PVOID Address) @@ -364,7 +364,7 @@ MmGetPfnForProcess(PEPROCESS Process, VOID NTAPI -MmDisableVirtualMapping(PEPROCESS Process, PVOID Address, BOOLEAN* WasDirty, PPFN_TYPE Page) +MmDisableVirtualMapping(PEPROCESS Process, PVOID Address, BOOLEAN* WasDirty, PPFN_NUMBER Page) /* * FUNCTION: Delete a virtual mapping */ @@ -426,13 +426,13 @@ MmRawDeleteVirtualMapping(PVOID Address) VOID NTAPI MmDeleteVirtualMapping(PEPROCESS Process, PVOID Address, BOOLEAN FreePage, - BOOLEAN* WasDirty, PPFN_TYPE Page) + BOOLEAN* WasDirty, PPFN_NUMBER Page) /* * FUNCTION: Delete a virtual mapping */ { BOOLEAN WasValid = FALSE; - PFN_TYPE Pfn; + PFN_NUMBER Pfn; ULONG Pte; PULONG Pt; @@ -705,7 +705,7 @@ NTAPI MmCreateVirtualMappingUnsafe(PEPROCESS Process, PVOID Address, ULONG flProtect, - PPFN_TYPE Pages, + PPFN_NUMBER Pages, ULONG PageCount) { ULONG Attributes; @@ -824,7 +824,7 @@ NTAPI MmCreateVirtualMapping(PEPROCESS Process, PVOID Address, ULONG flProtect, - PPFN_TYPE Pages, + PPFN_NUMBER Pages, ULONG PageCount) { ULONG i; diff --git a/reactos/ntoskrnl/mm/i386/pagepae.c b/reactos/ntoskrnl/mm/i386/pagepae.c index 609e2faa819..e05f7ededa6 100644 --- a/reactos/ntoskrnl/mm/i386/pagepae.c +++ b/reactos/ntoskrnl/mm/i386/pagepae.c @@ -348,7 +348,7 @@ MmCreateProcessAddressSpace(IN ULONG MinWs, { NTSTATUS Status; ULONG i, j; - PFN_TYPE Pfn[7]; + PFN_NUMBER Pfn[7]; ULONG Count; DPRINT("MmCopyMmInfo(Src %x, Dest %x)\n", MinWs, Process); @@ -459,7 +459,7 @@ MmFreePageTable(PEPROCESS Process, PVOID Address) { PEPROCESS CurrentProcess = PsGetCurrentProcess(); ULONG i; - PFN_TYPE Pfn; + PFN_NUMBER Pfn; DPRINT("ProcessId %d, Address %x\n", Process->UniqueProcessId, Address); if (Process != NULL && Process != CurrentProcess) @@ -521,7 +521,7 @@ static PULONGLONG MmGetPageTableForProcessForPAE(PEPROCESS Process, PVOID Address, BOOLEAN Create) { NTSTATUS Status; - PFN_TYPE Pfn; + PFN_NUMBER Pfn; ULONGLONG Entry; ULONGLONG ZeroEntry = 0LL; PULONGLONG Pt; @@ -636,7 +636,7 @@ MmGetPageTableForProcess(PEPROCESS Process, PVOID Address, BOOLEAN Create) { ULONG PdeOffset = ADDR_TO_PDE_OFFSET(Address); NTSTATUS Status; - PFN_TYPE Pfn; + PFN_NUMBER Pfn; ULONG Entry; PULONG Pt, PageDir; @@ -780,7 +780,7 @@ static ULONG MmGetPageEntryForProcess(PEPROCESS Process, PVOID Address) return 0; } -PFN_TYPE +PFN_NUMBER NTAPI MmGetPfnForProcess(PEPROCESS Process, PVOID Address) @@ -810,7 +810,7 @@ MmGetPfnForProcess(PEPROCESS Process, VOID NTAPI -MmDisableVirtualMapping(PEPROCESS Process, PVOID Address, BOOLEAN* WasDirty, PPFN_TYPE Page) +MmDisableVirtualMapping(PEPROCESS Process, PVOID Address, BOOLEAN* WasDirty, PPFN_NUMBER Page) /* * FUNCTION: Delete a virtual mapping */ @@ -931,13 +931,13 @@ MmRawDeleteVirtualMapping(PVOID Address) VOID NTAPI MmDeleteVirtualMapping(PEPROCESS Process, PVOID Address, BOOLEAN FreePage, - BOOLEAN* WasDirty, PPFN_TYPE Page) + BOOLEAN* WasDirty, PPFN_NUMBER Page) /* * FUNCTION: Delete a virtual mapping */ { BOOLEAN WasValid = FALSE; - PFN_TYPE Pfn; + PFN_NUMBER Pfn; DPRINT("MmDeleteVirtualMapping(%x, %x, %d, %x, %x)\n", Process, Address, FreePage, WasDirty, Page); @@ -1510,7 +1510,7 @@ NTSTATUS NTAPI MmCreateVirtualMappingForKernel(PVOID Address, ULONG flProtect, - PPFN_TYPE Pages, + PPFN_NUMBER Pages, ULONG PageCount) { ULONG Attributes; @@ -1727,7 +1727,7 @@ NTAPI MmCreateVirtualMappingUnsafe(PEPROCESS Process, PVOID Address, ULONG flProtect, - PPFN_TYPE Pages, + PPFN_NUMBER Pages, ULONG PageCount) { ULONG Attributes; @@ -1933,7 +1933,7 @@ NTAPI MmCreateVirtualMapping(PEPROCESS Process, PVOID Address, ULONG flProtect, - PPFN_TYPE Pages, + PPFN_NUMBER Pages, ULONG PageCount) { ULONG i; @@ -2114,7 +2114,7 @@ MmGetPhysicalAddress(PVOID vaddr) PVOID NTAPI -MmCreateHyperspaceMapping(PFN_TYPE Page) +MmCreateHyperspaceMapping(PFN_NUMBER Page) { PVOID Address; ULONG i; @@ -2241,11 +2241,11 @@ MmCreateHyperspaceMapping(PFN_TYPE Page) return Address; } -PFN_TYPE +PFN_NUMBER NTAPI -MmChangeHyperspaceMapping(PVOID Address, PFN_TYPE NewPage) +MmChangeHyperspaceMapping(PVOID Address, PFN_NUMBER NewPage) { - PFN_TYPE Pfn; + PFN_NUMBER Pfn; ASSERT (IS_HYPERSPACE(Address)); if (Ke386Pae) { @@ -2263,11 +2263,11 @@ MmChangeHyperspaceMapping(PVOID Address, PFN_TYPE NewPage) return Pfn; } -PFN_TYPE +PFN_NUMBER NTAPI MmDeleteHyperspaceMapping(PVOID Address) { - PFN_TYPE Pfn; + PFN_NUMBER Pfn; ASSERT (IS_HYPERSPACE(Address)); if (Ke386Pae) { diff --git a/reactos/ntoskrnl/mm/marea.c b/reactos/ntoskrnl/mm/marea.c index e24221dea54..19373dc6317 100644 --- a/reactos/ntoskrnl/mm/marea.c +++ b/reactos/ntoskrnl/mm/marea.c @@ -754,7 +754,7 @@ MmFreeMemoryArea( { BOOLEAN Dirty = FALSE; SWAPENTRY SwapEntry = 0; - PFN_TYPE Page = 0; + PFN_NUMBER Page = 0; if (MmIsPageSwapEntry(Process, (PVOID)Address)) { @@ -1044,7 +1044,7 @@ MmMapMemoryArea(PVOID BaseAddress, for (i = 0; i < PAGE_ROUND_UP(Length) / PAGE_SIZE; i++) { - PFN_TYPE Page; + PFN_NUMBER Page; Status = MmRequestPageMemoryConsumer(Consumer, TRUE, &Page); if (!NT_SUCCESS(Status)) diff --git a/reactos/ntoskrnl/mm/mmfault.c b/reactos/ntoskrnl/mm/mmfault.c index e38e31fc2fe..871d5079b5f 100644 --- a/reactos/ntoskrnl/mm/mmfault.c +++ b/reactos/ntoskrnl/mm/mmfault.c @@ -304,7 +304,7 @@ NTAPI MmCommitPagedPoolAddress(PVOID Address, BOOLEAN Locked) { NTSTATUS Status; - PFN_TYPE AllocatedPage; + PFN_NUMBER AllocatedPage; KIRQL OldIrql; Status = MmRequestPageMemoryConsumer(MC_PPOOL, FALSE, &AllocatedPage); diff --git a/reactos/ntoskrnl/mm/mpw.c b/reactos/ntoskrnl/mm/mpw.c index 8acdc5afddd..76b021bf128 100644 --- a/reactos/ntoskrnl/mm/mpw.c +++ b/reactos/ntoskrnl/mm/mpw.c @@ -26,8 +26,8 @@ BOOLEAN MpwThreadShouldTerminate; NTSTATUS NTAPI MmWriteDirtyPages(ULONG Target, PULONG Actual) { - PFN_TYPE Page; - PFN_TYPE NextPage; + PFN_NUMBER Page; + PFN_NUMBER NextPage; NTSTATUS Status; Page = MmGetLRUFirstUserPage(); diff --git a/reactos/ntoskrnl/mm/pagefile.c b/reactos/ntoskrnl/mm/pagefile.c index 1af2faccaa5..b95d62e8329 100644 --- a/reactos/ntoskrnl/mm/pagefile.c +++ b/reactos/ntoskrnl/mm/pagefile.c @@ -119,9 +119,9 @@ static BOOLEAN MmSwapSpaceMessage = FALSE; VOID NTAPI -MmBuildMdlFromPages(PMDL Mdl, PPFN_TYPE Pages) +MmBuildMdlFromPages(PMDL Mdl, PPFN_NUMBER Pages) { - memcpy(Mdl + 1, Pages, sizeof(PFN_TYPE) * (PAGE_ROUND_UP(Mdl->ByteOffset+Mdl->ByteCount)/PAGE_SIZE)); + memcpy(Mdl + 1, Pages, sizeof(PFN_NUMBER) * (PAGE_ROUND_UP(Mdl->ByteOffset+Mdl->ByteCount)/PAGE_SIZE)); /* FIXME: this flag should be set by the caller perhaps? */ Mdl->MdlFlags |= MDL_IO_PAGE_READ; @@ -215,7 +215,7 @@ MmGetOffsetPageFile(PRETRIEVAL_POINTERS_BUFFER RetrievalPointers, LARGE_INTEGER NTSTATUS NTAPI -MmWriteToSwapPage(SWAPENTRY SwapEntry, PFN_TYPE Page) +MmWriteToSwapPage(SWAPENTRY SwapEntry, PFN_NUMBER Page) { ULONG i, offset; LARGE_INTEGER file_offset; @@ -276,7 +276,7 @@ MmWriteToSwapPage(SWAPENTRY SwapEntry, PFN_TYPE Page) NTSTATUS NTAPI -MmReadFromSwapPage(SWAPENTRY SwapEntry, PFN_TYPE Page) +MmReadFromSwapPage(SWAPENTRY SwapEntry, PFN_NUMBER Page) { ULONG i, offset; LARGE_INTEGER file_offset; diff --git a/reactos/ntoskrnl/mm/powerpc/page.c b/reactos/ntoskrnl/mm/powerpc/page.c index bdf378aa43d..5ce9f20dfd7 100644 --- a/reactos/ntoskrnl/mm/powerpc/page.c +++ b/reactos/ntoskrnl/mm/powerpc/page.c @@ -191,17 +191,17 @@ MmGetPhysicalAddress(PVOID vaddr) return Addr; } -PFN_TYPE +PFN_NUMBER NTAPI MmGetPfnForProcess(PEPROCESS Process, PVOID Address) { - return((PFN_TYPE)MmGetPhysicalAddressProcess(Process, Address) >> PAGE_SHIFT); + return((PFN_NUMBER)MmGetPhysicalAddressProcess(Process, Address) >> PAGE_SHIFT); } VOID NTAPI -MmDisableVirtualMapping(PEPROCESS Process, PVOID Address, BOOLEAN* WasDirty, PPFN_TYPE Page) +MmDisableVirtualMapping(PEPROCESS Process, PVOID Address, BOOLEAN* WasDirty, PPFN_NUMBER Page) /* * FUNCTION: Delete a virtual mapping */ @@ -221,7 +221,7 @@ MmRawDeleteVirtualMapping(PVOID Address) VOID NTAPI MmDeleteVirtualMapping(PEPROCESS Process, PVOID Address, BOOLEAN FreePage, - BOOLEAN* WasDirty, PPFN_TYPE Page) + BOOLEAN* WasDirty, PPFN_NUMBER Page) /* * FUNCTION: Delete a virtual mapping */ @@ -358,7 +358,7 @@ NTSTATUS NTAPI MmCreateVirtualMappingForKernel(PVOID Address, ULONG flProtect, - PPFN_TYPE Pages, + PPFN_NUMBER Pages, ULONG PageCount) { ULONG i; @@ -424,7 +424,7 @@ NTAPI MmCreateVirtualMappingUnsafe(PEPROCESS Process, PVOID Address, ULONG flProtect, - PPFN_TYPE Pages, + PPFN_NUMBER Pages, ULONG PageCount) { ULONG Attributes; @@ -498,7 +498,7 @@ NTAPI MmCreateVirtualMapping(PEPROCESS Process, PVOID Address, ULONG flProtect, - PPFN_TYPE Pages, + PPFN_NUMBER Pages, ULONG PageCount) { ULONG i; @@ -573,7 +573,7 @@ MmSetPageProtect(PEPROCESS Process, PVOID Address, ULONG flProtect) PVOID NTAPI -MmCreateHyperspaceMapping(PFN_TYPE Page) +MmCreateHyperspaceMapping(PFN_NUMBER Page) { PVOID Address; ppc_map_info_t info = { 0 }; @@ -587,11 +587,11 @@ MmCreateHyperspaceMapping(PFN_TYPE Page) return Address; } -PFN_TYPE +PFN_NUMBER NTAPI -MmChangeHyperspaceMapping(PVOID Address, PFN_TYPE NewPage) +MmChangeHyperspaceMapping(PVOID Address, PFN_NUMBER NewPage) { - PFN_TYPE OldPage; + PFN_NUMBER OldPage; ppc_map_info_t info = { 0 }; info.proc = 0; @@ -604,7 +604,7 @@ MmChangeHyperspaceMapping(PVOID Address, PFN_TYPE NewPage) return NewPage; } -PFN_TYPE +PFN_NUMBER NTAPI MmDeleteHyperspaceMapping(PVOID Address) { @@ -616,7 +616,7 @@ MmDeleteHyperspaceMapping(PVOID Address) MmuUnmapPage(&info, 1); - return (PFN_TYPE)info.phys; + return (PFN_NUMBER)info.phys; } VOID @@ -658,7 +658,7 @@ NTSTATUS MmPPCCreatePrimitiveMapping(ULONG_PTR PageAddr) } /* Use our primitive allocator */ -PFN_TYPE MmPPCPrimitiveAllocPage() +PFN_NUMBER MmPPCPrimitiveAllocPage() { paddr_t Result = MmuGetPage(); DbgPrint("Got Page %x\n", Result); diff --git a/reactos/ntoskrnl/mm/rmap.c b/reactos/ntoskrnl/mm/rmap.c index e4f096ec9a0..5568a60261b 100644 --- a/reactos/ntoskrnl/mm/rmap.c +++ b/reactos/ntoskrnl/mm/rmap.c @@ -54,7 +54,7 @@ MmInitializeRmapList(VOID) NTSTATUS NTAPI -MmWritePagePhysicalAddress(PFN_TYPE Page) +MmWritePagePhysicalAddress(PFN_NUMBER Page) { PMM_RMAP_ENTRY entry; PMEMORY_AREA MemoryArea; @@ -188,7 +188,7 @@ MmWritePagePhysicalAddress(PFN_TYPE Page) NTSTATUS NTAPI -MmPageOutPhysicalAddress(PFN_TYPE Page) +MmPageOutPhysicalAddress(PFN_NUMBER Page) { PMM_RMAP_ENTRY entry; PMEMORY_AREA MemoryArea; @@ -312,7 +312,7 @@ MmPageOutPhysicalAddress(PFN_TYPE Page) VOID NTAPI -MmSetCleanAllRmaps(PFN_TYPE Page) +MmSetCleanAllRmaps(PFN_NUMBER Page) { PMM_RMAP_ENTRY current_entry; @@ -333,7 +333,7 @@ MmSetCleanAllRmaps(PFN_TYPE Page) VOID NTAPI -MmSetDirtyAllRmaps(PFN_TYPE Page) +MmSetDirtyAllRmaps(PFN_NUMBER Page) { PMM_RMAP_ENTRY current_entry; @@ -354,7 +354,7 @@ MmSetDirtyAllRmaps(PFN_TYPE Page) BOOLEAN NTAPI -MmIsDirtyPageRmap(PFN_TYPE Page) +MmIsDirtyPageRmap(PFN_NUMBER Page) { PMM_RMAP_ENTRY current_entry; @@ -380,7 +380,7 @@ MmIsDirtyPageRmap(PFN_TYPE Page) VOID NTAPI -MmInsertRmap(PFN_TYPE Page, PEPROCESS Process, +MmInsertRmap(PFN_NUMBER Page, PEPROCESS Process, PVOID Address) { PMM_RMAP_ENTRY current_entry; @@ -450,7 +450,7 @@ MmInsertRmap(PFN_TYPE Page, PEPROCESS Process, VOID NTAPI -MmDeleteAllRmaps(PFN_TYPE Page, PVOID Context, +MmDeleteAllRmaps(PFN_NUMBER Page, PVOID Context, VOID (*DeleteMapping)(PVOID Context, PEPROCESS Process, PVOID Address)) { @@ -491,7 +491,7 @@ MmDeleteAllRmaps(PFN_TYPE Page, PVOID Context, VOID NTAPI -MmDeleteRmap(PFN_TYPE Page, PEPROCESS Process, +MmDeleteRmap(PFN_NUMBER Page, PEPROCESS Process, PVOID Address) { PMM_RMAP_ENTRY current_entry, previous_entry; diff --git a/reactos/ntoskrnl/mm/section.c b/reactos/ntoskrnl/mm/section.c index bcf61d08e31..3cfc9406a8c 100644 --- a/reactos/ntoskrnl/mm/section.c +++ b/reactos/ntoskrnl/mm/section.c @@ -463,7 +463,7 @@ MmUnsharePageEntrySectionSegment(PROS_SECTION_OBJECT Section, PFILE_OBJECT FileObject; PBCB Bcb; SWAPENTRY SavedSwapEntry; - PFN_TYPE Page; + PFN_NUMBER Page; BOOLEAN IsImageSection; ULONG FileOffset; @@ -578,7 +578,7 @@ BOOLEAN MiIsPageFromCache(PMEMORY_AREA MemoryArea, NTSTATUS NTAPI -MiCopyFromUserPage(PFN_TYPE DestPage, PVOID SourceAddress) +MiCopyFromUserPage(PFN_NUMBER DestPage, PVOID SourceAddress) { PEPROCESS Process; KIRQL Irql; @@ -599,7 +599,7 @@ NTSTATUS NTAPI MiReadPage(PMEMORY_AREA MemoryArea, ULONG SegOffset, - PPFN_TYPE Page) + PPFN_NUMBER Page) /* * FUNCTION: Read a page for a section backed memory area. * PARAMETERS: @@ -780,7 +780,7 @@ MmNotPresentFaultSectionView(PMMSUPPORT AddressSpace, BOOLEAN Locked) { ULONG Offset; - PFN_TYPE Page; + PFN_NUMBER Page; NTSTATUS Status; PVOID PAddress; PROS_SECTION_OBJECT Section; @@ -1318,8 +1318,8 @@ MmAccessFaultSectionView(PMMSUPPORT AddressSpace, { PMM_SECTION_SEGMENT Segment; PROS_SECTION_OBJECT Section; - PFN_TYPE OldPage; - PFN_TYPE NewPage; + PFN_NUMBER OldPage; + PFN_NUMBER NewPage; NTSTATUS Status; PVOID PAddress; ULONG Offset; @@ -1494,7 +1494,7 @@ MmPageOutDeleteMapping(PVOID Context, PEPROCESS Process, PVOID Address) { MM_SECTION_PAGEOUT_CONTEXT* PageOutContext; BOOLEAN WasDirty; - PFN_TYPE Page; + PFN_NUMBER Page; PageOutContext = (MM_SECTION_PAGEOUT_CONTEXT*)Context; if (Process) @@ -1541,7 +1541,7 @@ MmPageOutSectionView(PMMSUPPORT AddressSpace, PVOID Address, PMM_PAGEOP PageOp) { - PFN_TYPE Page; + PFN_NUMBER Page; MM_SECTION_PAGEOUT_CONTEXT Context; SWAPENTRY SwapEntry; ULONG Entry; @@ -1901,7 +1901,7 @@ MmWritePageSectionView(PMMSUPPORT AddressSpace, ULONG Offset; PROS_SECTION_OBJECT Section; PMM_SECTION_SEGMENT Segment; - PFN_TYPE Page; + PFN_NUMBER Page; SWAPENTRY SwapEntry; ULONG Entry; BOOLEAN Private; @@ -2078,7 +2078,7 @@ MmAlterViewAttributes(PMMSUPPORT AddressSpace, { ULONG Offset; ULONG Entry; - PFN_TYPE Page; + PFN_NUMBER Page; Offset = (ULONG_PTR)Address - (ULONG_PTR)MemoryArea->StartingAddress + MemoryArea->Data.SectionData.ViewOffset; @@ -2187,7 +2187,7 @@ MmpFreePageFileSegment(PMM_SECTION_SEGMENT Segment) ULONG Offset; ULONG Entry; ULONG SavedSwapEntry; - PFN_TYPE Page; + PFN_NUMBER Page; Page = 0; @@ -3936,7 +3936,7 @@ NtMapViewOfSection(IN HANDLE SectionHandle, static VOID MmFreeSectionPage(PVOID Context, MEMORY_AREA* MemoryArea, PVOID Address, - PFN_TYPE Page, SWAPENTRY SwapEntry, BOOLEAN Dirty) + PFN_NUMBER Page, SWAPENTRY SwapEntry, BOOLEAN Dirty) { ULONG Entry; PFILE_OBJECT FileObject; From 66fbb30e234964a6f5344ce52e97f323acb4e9aa Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 21 Nov 2009 15:52:28 +0000 Subject: [PATCH 133/286] - MmArmAccessFault: Don't assume that PDE's are accessible, instead use MiIsPdeForAddressValid - Use HYPER_SPACE_END / MI_PFN_DATABASE constants instead of hardcoded values - Remove the MmAccessFault hack, it works now. svn path=/branches/ros-amd64-bringup/; revision=44258 --- reactos/ntoskrnl/include/internal/amd64/mm.h | 10 +++++++ reactos/ntoskrnl/include/internal/i386/mm.h | 1 + reactos/ntoskrnl/ke/amd64/trap.S | 5 +--- reactos/ntoskrnl/mm/ARM3/pagfault.c | 10 +++---- reactos/ntoskrnl/mm/amd64/init.c | 28 +++++++------------- 5 files changed, 26 insertions(+), 28 deletions(-) diff --git a/reactos/ntoskrnl/include/internal/amd64/mm.h b/reactos/ntoskrnl/include/internal/amd64/mm.h index d6acf2ba9cf..eb1ef0f6ff9 100644 --- a/reactos/ntoskrnl/include/internal/amd64/mm.h +++ b/reactos/ntoskrnl/include/internal/amd64/mm.h @@ -18,6 +18,7 @@ #define MI_SYSTEM_PTE_START (PVOID)0xFFFFFAA000000000ULL #define MI_PAGED_POOL_START (PVOID)0xFFFFFA8000000000ULL #define MI_NON_PAGED_SYSTEM_START_MIN 0xFFFFFAA000000000ULL +#define MI_PFN_DATABASE (PVOID)0xFFFFFAC000000000ULL #define MI_NONPAGED_POOL_END (PVOID)0xFFFFFAE000000000ULL #define MI_DEBUG_MAPPING (PVOID)0xFFFFFFFF80000000ULL // FIXME #define MI_HIGHEST_SYSTEM_ADDRESS (PVOID)0xFFFFFFFFFFFFFFFFULL @@ -80,6 +81,15 @@ MiPteToAddress(PMMPTE Pte) return (PVOID)Temp; } +BOOLEAN +FORCEINLINE +MiIsPdeForAddressValid(PVOID Address) +{ + return ((MiAddressToPxe(Address)->u.Hard.Valid) && + (MiAddressToPpe(Address)->u.Hard.Valid) && + (MiAddressToPde(Address)->u.Hard.Valid)); +} + //#define ADDR_TO_PAGE_TABLE(v) (((ULONG)(v)) / (1024 * PAGE_SIZE)) //#define ADDR_TO_PDE_OFFSET(v) ((((ULONG)(v)) / (1024 * PAGE_SIZE))) //#define ADDR_TO_PTE_OFFSET(v) ((((ULONG)(v)) % (1024 * PAGE_SIZE)) / PAGE_SIZE) diff --git a/reactos/ntoskrnl/include/internal/i386/mm.h b/reactos/ntoskrnl/include/internal/i386/mm.h index ed14249f66a..a74a49f6bf3 100644 --- a/reactos/ntoskrnl/include/internal/i386/mm.h +++ b/reactos/ntoskrnl/include/internal/i386/mm.h @@ -34,6 +34,7 @@ PULONG MmGetPageDirectory(VOID); // Convert a PTE into a corresponding address // #define MiPteToAddress(PTE) ((PVOID)((ULONG)(PTE) << 10)) +#define MiIsPdeForAddressValid(Pde) (MiAddressToPde(Address)->u.Hard.Valid) #define ADDR_TO_PAGE_TABLE(v) (((ULONG)(v)) / (1024 * PAGE_SIZE)) #define ADDR_TO_PDE_OFFSET(v) ((((ULONG)(v)) / (1024 * PAGE_SIZE))) diff --git a/reactos/ntoskrnl/ke/amd64/trap.S b/reactos/ntoskrnl/ke/amd64/trap.S index f28fb39a28d..4a720cd2be1 100644 --- a/reactos/ntoskrnl/ke/amd64/trap.S +++ b/reactos/ntoskrnl/ke/amd64/trap.S @@ -544,10 +544,7 @@ KiDebugTrapOrFaultKMode: mov r8b, [rbp + KTRAP_FRAME_SegCs] // Mode and r8b, 1 mov r9, rbp // TrapInformation -// call _MmAccessFault - - // HACK - mov eax, STATUS_ACCESS_VIOLATION + call _MmAccessFault /* Check for success */ test eax, eax diff --git a/reactos/ntoskrnl/mm/ARM3/pagfault.c b/reactos/ntoskrnl/mm/ARM3/pagfault.c index e3b740114b8..ea633a1af0c 100644 --- a/reactos/ntoskrnl/mm/ARM3/pagfault.c +++ b/reactos/ntoskrnl/mm/ARM3/pagfault.c @@ -200,7 +200,7 @@ MmArmAccessFault(IN BOOLEAN StoreInstruction, IN PVOID TrapInformation) { KIRQL OldIrql = KeGetCurrentIrql(), LockIrql; - PMMPTE PointerPde, PointerPte; + PMMPTE PointerPte; MMPTE TempPte; PETHREAD CurrentThread; NTSTATUS Status; @@ -210,7 +210,6 @@ MmArmAccessFault(IN BOOLEAN StoreInstruction, // Get the PTE and PDE // PointerPte = MiAddressToPte(Address); - PointerPde = MiAddressToPde(Address); // // Check for dispatch-level snafu @@ -239,7 +238,7 @@ MmArmAccessFault(IN BOOLEAN StoreInstruction, // // Is the PDE valid? // - if (!PointerPde->u.Hard.Valid == 0) + if (!MiIsPdeForAddressValid(Address)) { // // Debug spew (eww!) @@ -254,7 +253,7 @@ MmArmAccessFault(IN BOOLEAN StoreInstruction, // // Now we SHOULD be good // - if (PointerPde->u.Hard.Valid == 0) + if (!MiIsPdeForAddressValid(Address)) { // // FIXFIX: Do the S-LIST hack @@ -297,9 +296,8 @@ MmArmAccessFault(IN BOOLEAN StoreInstruction, // // Check for a fault on the page table or hyperspace itself - // FIXME: Use MmHyperSpaceEnd // - if ((Address >= (PVOID)PTE_BASE) && (Address <= (PVOID)0xC0800000)) + if ((Address >= (PVOID)PTE_BASE) && (Address <= (PVOID)HYPER_SPACE_END)) { // // This might happen...not sure yet diff --git a/reactos/ntoskrnl/mm/amd64/init.c b/reactos/ntoskrnl/mm/amd64/init.c index 89d7d1e5778..019175f2661 100644 --- a/reactos/ntoskrnl/mm/amd64/init.c +++ b/reactos/ntoskrnl/mm/amd64/init.c @@ -242,6 +242,7 @@ MxGetPte(PVOID Address) } VOID +NTAPI MxMapPage(PVOID Address) { MMPTE TmplPte, *Pte; @@ -286,8 +287,8 @@ MiPreparePfnDatabse(IN PLOADER_PARAMETER_BLOCK LoaderBlock) MxPfnSizeInBytes = ROUND_TO_PAGES((MmHighestPhysicalPage + 1) * sizeof(MMPFN)); MxPfnAllocation = MxPfnSizeInBytes >> PAGE_SHIFT; - /* Sinply start at hardcoded address */ - MmPfnDatabase = (PVOID)0xFFFFFAC000000000ULL; + /* Simply start at hardcoded address */ + MmPfnDatabase = MI_PFN_DATABASE; /* Loop the memory descriptors */ for (ListEntry = LoaderBlock->MemoryDescriptorListHead.Flink; @@ -363,8 +364,7 @@ VOID MiInitializePageTable() { ULONG64 PageFrameOffset; - PMMPTE Pte, StartPte, EndPte; - MMPTE TmplPte; + MMPTE TmplPte, *Pte; PFN_NUMBER PageCount; /* HACK: don't use freeldr debug print anymore */ @@ -382,12 +382,10 @@ MiInitializePageTable() __writecr4(__readcr4() | CR4_PGE); ASSERT(__readcr4() & CR4_PGE); - /* Set user mode address range */ - StartPte = MiAddressToPxe(0); - EndPte = MiAddressToPxe(MmHighestUserAddress); - /* Loop the user mode PXEs */ - for (Pte = StartPte; Pte <= EndPte; Pte++) + for (Pte = MiAddressToPxe(0); + Pte <= MiAddressToPxe(MmHighestUserAddress); + Pte++) { /* Zero the PXE, clear all mappings */ Pte->u.Long = 0; @@ -405,12 +403,10 @@ MiInitializePageTable() /* Create PDPTs (72 KB) for shared system address space, * skip page tables and hyperspace */ - /* Set the range */ - StartPte = MiAddressToPxe((PVOID)(HYPER_SPACE_END + 1)); - EndPte = MiAddressToPxe(MI_HIGHEST_SYSTEM_ADDRESS); - /* Loop the PXEs */ - for (Pte = StartPte; Pte <= EndPte; Pte++) + for (Pte = MiAddressToPxe((PVOID)(HYPER_SPACE_END + 1)); + Pte <= MiAddressToPxe(MI_HIGHEST_SYSTEM_ADDRESS); + Pte++) { /* Is the PXE already valid? */ if (!Pte->u.Hard.Valid) @@ -764,7 +760,6 @@ MiBuildPagedPool(VOID) ExAllocatePoolWithTag(NonPagedPool, Size, ' mM'); ASSERT(MmPagedPoolInfo.PagedPoolAllocationMap); - DPRINT1("BitMapSize = 0x%lx, Size = 0x%lx\n", BitMapSize, Size); // Initialize it such that at first, only the first page's worth of PTEs is // marked as allocated (incidentially, the first PDE we allocated earlier). RtlInitializeBitMap(MmPagedPoolInfo.PagedPoolAllocationMap, @@ -781,9 +776,6 @@ MiBuildPagedPool(VOID) ExAllocatePoolWithTag(NonPagedPool, Size, ' mM'); ASSERT(MmPagedPoolInfo.EndOfPagedPoolBitmap); - DPRINT1("PagedPoolAllocationMap=%p, EndOfPagedPoolBitmap=%p\n", - MmPagedPoolInfo.PagedPoolAllocationMap, MmPagedPoolInfo.EndOfPagedPoolBitmap); - /* Initialize the bitmap */ RtlInitializeBitMap(MmPagedPoolInfo.EndOfPagedPoolBitmap, (PULONG)(MmPagedPoolInfo.EndOfPagedPoolBitmap + 1), From 7ae6f1e2be5a89934707f6168eb7514bbba74346 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 21 Nov 2009 15:56:05 +0000 Subject: [PATCH 134/286] ULONG -> ULONG_PTR svn path=/branches/ros-amd64-bringup/; revision=44259 --- reactos/ntoskrnl/mm/anonmem.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/reactos/ntoskrnl/mm/anonmem.c b/reactos/ntoskrnl/mm/anonmem.c index e5c907ad8af..0ffb2ee0ed7 100644 --- a/reactos/ntoskrnl/mm/anonmem.c +++ b/reactos/ntoskrnl/mm/anonmem.c @@ -737,10 +737,10 @@ NtAllocateVirtualMemory(IN HANDLE ProcessHandle, MemoryAreaLength = (ULONG_PTR)MemoryArea->EndingAddress - (ULONG_PTR)MemoryArea->StartingAddress; - if (((ULONG)BaseAddress + RegionSize) > (ULONG)MemoryArea->EndingAddress) + if (((ULONG_PTR)BaseAddress + RegionSize) > (ULONG_PTR)MemoryArea->EndingAddress) { DPRINT("BaseAddress + RegionSize %x is larger than MemoryArea's EndingAddress %x\n", - (ULONG)BaseAddress + RegionSize, MemoryArea->EndingAddress); + (ULONG_PTR)BaseAddress + RegionSize, MemoryArea->EndingAddress); MmUnlockAddressSpace(AddressSpace); ObDereferenceObject(Process); From a504eda297852eb285e84fe9eccacb0fba082a50 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sun, 22 Nov 2009 19:16:50 +0000 Subject: [PATCH 135/286] [MM] Use an array of PFN_NUMBER to pass to MiMapPagesToZeroInHyperSpace instead of MMPFNs which were then converted to PFN_NUMBERs. svn path=/branches/ros-amd64-bringup/; revision=44268 --- reactos/ntoskrnl/include/internal/mm.h | 5 ++--- reactos/ntoskrnl/mm/ARM3/hypermap.c | 6 ++---- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/reactos/ntoskrnl/include/internal/mm.h b/reactos/ntoskrnl/include/internal/mm.h index 10f30e6a787..0970dc9af36 100644 --- a/reactos/ntoskrnl/include/internal/mm.h +++ b/reactos/ntoskrnl/include/internal/mm.h @@ -1223,7 +1223,7 @@ MiUnmapPageInHyperSpace(IN PEPROCESS Process, PVOID NTAPI -MiMapPagesToZeroInHyperSpace(IN PMMPFN *Pages, +MiMapPagesToZeroInHyperSpace(IN PFN_NUMBER *Pages, IN PFN_NUMBER NumberOfPages); VOID @@ -1246,8 +1246,7 @@ FORCEINLINE PVOID MiMapPageToZeroInHyperSpace(IN PFN_NUMBER Page) { - PMMPFN Pfn1 = MiGetPfnEntry(Page); - return MiMapPagesToZeroInHyperSpace(&Pfn1, 1); + return MiMapPagesToZeroInHyperSpace(&Page, 1); } #define MmDeleteHyperspaceMapping(x) MiUnmapPageInHyperSpace(HyperProcess, x, HyperIrql); diff --git a/reactos/ntoskrnl/mm/ARM3/hypermap.c b/reactos/ntoskrnl/mm/ARM3/hypermap.c index 29d44893e5d..79d16067363 100644 --- a/reactos/ntoskrnl/mm/ARM3/hypermap.c +++ b/reactos/ntoskrnl/mm/ARM3/hypermap.c @@ -114,13 +114,12 @@ MiUnmapPageInHyperSpace(IN PEPROCESS Process, PVOID NTAPI -MiMapPagesToZeroInHyperSpace(IN PMMPFN *Pages, +MiMapPagesToZeroInHyperSpace(IN PFN_NUMBER *Pages, IN PFN_NUMBER NumberOfPages) { MMPTE TempPte; PMMPTE PointerPte; PFN_NUMBER Offset, PageFrameIndex; - PMMPFN Page; // // Sanity checks @@ -164,8 +163,7 @@ MiMapPagesToZeroInHyperSpace(IN PMMPFN *Pages, // // Get the first page entry and its PFN // - Page = *Pages++; - PageFrameIndex = MiGetPfnEntryIndex(Page); + PageFrameIndex = *Pages++; // // Write the PFN From aae3e9fba500b38dd2f3768b07ad38f65f20318e Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sun, 22 Nov 2009 20:33:49 +0000 Subject: [PATCH 136/286] [MM] Don't acquire the pfn lock before calling MmReleasePageMemoryConsumer. The function acquires it already and before that it acquires a different spinlock, leading to a race condition on SMP systems. svn path=/branches/ros-amd64-bringup/; revision=44269 --- reactos/ntoskrnl/mm/ARM3/contmem.c | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/reactos/ntoskrnl/mm/ARM3/contmem.c b/reactos/ntoskrnl/mm/ARM3/contmem.c index 7c11c574a89..601ae92b12c 100644 --- a/reactos/ntoskrnl/mm/ARM3/contmem.c +++ b/reactos/ntoskrnl/mm/ARM3/contmem.c @@ -320,11 +320,6 @@ MiFreeContiguousMemory(IN PVOID BaseAddress) // MmUnmapIoSpace(BaseAddress, PageCount << PAGE_SHIFT); - // - // Lock the PFN database - // - OldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock); - // // Loop all the pages // @@ -336,11 +331,6 @@ MiFreeContiguousMemory(IN PVOID BaseAddress) // MmReleasePageMemoryConsumer(MC_NPPOOL, PageFrameIndex); } while (++PageFrameIndex < LastPage); - - // - // Release the PFN lock - // - KeReleaseQueuedSpinLock(LockQueuePfnLock, OldIrql); } /* PUBLIC FUNCTIONS ***********************************************************/ From 7ccba78dc77ec4570d882e8ae547dc26acd02aec Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sun, 22 Nov 2009 21:10:06 +0000 Subject: [PATCH 137/286] Remove some useless code. svn path=/branches/ros-amd64-bringup/; revision=44270 --- reactos/ntoskrnl/mm/ARM3/iosup.c | 6 +----- reactos/ntoskrnl/mm/ARM3/mdlsup.c | 2 -- 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/reactos/ntoskrnl/mm/ARM3/iosup.c b/reactos/ntoskrnl/mm/ARM3/iosup.c index bf5d83f3f5f..c4e6dd49cb6 100644 --- a/reactos/ntoskrnl/mm/ARM3/iosup.c +++ b/reactos/ntoskrnl/mm/ARM3/iosup.c @@ -54,7 +54,6 @@ MmMapIoSpace(IN PHYSICAL_ADDRESS PhysicalAddress, PMMPTE PointerPte; PVOID BaseAddress; MMPTE TempPte; - PMMPFN Pfn1 = NULL; MI_PFN_CACHE_ATTRIBUTE CacheAttribute; BOOLEAN IsIoMapping; @@ -91,7 +90,6 @@ MmMapIoSpace(IN PHYSICAL_ADDRESS PhysicalAddress, // Pfn = (PFN_NUMBER)(PhysicalAddress.QuadPart >> PAGE_SHIFT); IsIoMapping = (Pfn > MmHighestPhysicalPage) ? TRUE : FALSE; - if (!IsIoMapping) Pfn1 = MiGetPfnEntry(Pfn); CacheAttribute = MiPlatformCacheAttributes[IsIoMapping][CacheType]; // @@ -159,10 +157,8 @@ MmMapIoSpace(IN PHYSICAL_ADDRESS PhysicalAddress, } // - // Sanity check and re-flush + // Re-flush // - Pfn = (PFN_NUMBER)(PhysicalAddress.QuadPart >> PAGE_SHIFT); - ASSERT((Pfn1 == MiGetPfnEntry(Pfn)) || (Pfn1 == NULL)); KeFlushEntireTb(TRUE, TRUE); KeInvalidateAllCaches(); diff --git a/reactos/ntoskrnl/mm/ARM3/mdlsup.c b/reactos/ntoskrnl/mm/ARM3/mdlsup.c index 2839b23f0a4..995ff787e47 100644 --- a/reactos/ntoskrnl/mm/ARM3/mdlsup.c +++ b/reactos/ntoskrnl/mm/ARM3/mdlsup.c @@ -581,7 +581,6 @@ MmProbeAndLockPages(IN PMDL Mdl, NTSTATUS ProbeStatus; PMMPTE PointerPte, PointerPde, LastPte; PFN_NUMBER PageFrameIndex; - PMMPFN Pfn1; BOOLEAN UsePfnLock; KIRQL OldIrql; DPRINT("Probing MDL: %p\n", Mdl); @@ -958,7 +957,6 @@ MmProbeAndLockPages(IN PMDL Mdl, // // Get the PFN entry // - Pfn1 = MiGetPfnEntry(PageFrameIndex); ASSERT((CurrentProcess == NULL) || (UsePfnLock == FALSE)); // From c6aa60e093e86f94121878778bdbd22aaa280b90 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 23 Nov 2009 20:44:21 +0000 Subject: [PATCH 138/286] Mm64BitPhysicalAddress is a BOOLEAN, not a PBOOLEAN svn path=/branches/ros-amd64-bringup/; revision=44274 --- reactos/ntoskrnl/mm/mminit.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/ntoskrnl/mm/mminit.c b/reactos/ntoskrnl/mm/mminit.c index a669bd39948..4f956042d25 100644 --- a/reactos/ntoskrnl/mm/mminit.c +++ b/reactos/ntoskrnl/mm/mminit.c @@ -48,7 +48,7 @@ MemType[] = "LoaderXIPRom " }; -PBOOLEAN Mm64BitPhysicalAddress = FALSE; +BOOLEAN Mm64BitPhysicalAddress = FALSE; ULONG MmReadClusterSize; // // 0 | 1 is on/off paging, 2 is undocumented From a78c631dcdf6f016d4a17039015f61807e3203ab Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 23 Nov 2009 21:52:18 +0000 Subject: [PATCH 139/286] SeCaptureSecurityDescriptor: instead of first copying the relative offsets of a SECURITY_DESCRIPTOR_RELATIVE into the pointer fields of a SECURITY_DESCRIPTOR and later adding the base pointer, do it directly as the code already needs to handle relative and absolute structures differently before. svn path=/branches/ros-amd64-bringup/; revision=44276 --- reactos/ntoskrnl/se/sd.c | 40 ++++++++-------------------------------- 1 file changed, 8 insertions(+), 32 deletions(-) diff --git a/reactos/ntoskrnl/se/sd.c b/reactos/ntoskrnl/se/sd.c index fded835b6af..fad49f38ad3 100644 --- a/reactos/ntoskrnl/se/sd.c +++ b/reactos/ntoskrnl/se/sd.c @@ -436,10 +436,10 @@ SeCaptureSecurityDescriptor(IN PSECURITY_DESCRIPTOR _OriginalSecurityDescriptor, { PISECURITY_DESCRIPTOR_RELATIVE RelSD = (PISECURITY_DESCRIPTOR_RELATIVE)OriginalSecurityDescriptor; - DescriptorCopy.Owner = (PSID)RelSD->Owner; - DescriptorCopy.Group = (PSID)RelSD->Group; - DescriptorCopy.Sacl = (PACL)RelSD->Sacl; - DescriptorCopy.Dacl = (PACL)RelSD->Dacl; + DescriptorCopy.Owner = (PSID)((PCHAR)RelSD + RelSD->Owner); + DescriptorCopy.Group = (PSID)((PCHAR)RelSD + RelSD->Group); + DescriptorCopy.Sacl = (PACL)((PCHAR)RelSD + RelSD->Sacl); + DescriptorCopy.Dacl = (PACL)((PCHAR)RelSD + RelSD->Dacl); } else { @@ -483,10 +483,10 @@ SeCaptureSecurityDescriptor(IN PSECURITY_DESCRIPTOR _OriginalSecurityDescriptor, { PISECURITY_DESCRIPTOR_RELATIVE RelSD = (PISECURITY_DESCRIPTOR_RELATIVE)OriginalSecurityDescriptor; - DescriptorCopy.Owner = (PSID)RelSD->Owner; - DescriptorCopy.Group = (PSID)RelSD->Group; - DescriptorCopy.Sacl = (PACL)RelSD->Sacl; - DescriptorCopy.Dacl = (PACL)RelSD->Dacl; + DescriptorCopy.Owner = (PSID)((PCHAR)RelSD + RelSD->Owner); + DescriptorCopy.Group = (PSID)((PCHAR)RelSD + RelSD->Group); + DescriptorCopy.Sacl = (PACL)((PCHAR)RelSD + RelSD->Sacl); + DescriptorCopy.Dacl = (PACL)((PCHAR)RelSD + RelSD->Dacl); } else { @@ -497,30 +497,6 @@ SeCaptureSecurityDescriptor(IN PSECURITY_DESCRIPTOR _OriginalSecurityDescriptor, } } - if(DescriptorCopy.Control & SE_SELF_RELATIVE) - { - /* in case we're dealing with a self-relative descriptor, do a basic convert - to an absolute descriptor. We do this so we can simply access the data - using the pointers without calculating them again. */ - DescriptorCopy.Control &= ~SE_SELF_RELATIVE; - if(DescriptorCopy.Owner != NULL) - { - DescriptorCopy.Owner = (PSID)((ULONG_PTR)OriginalSecurityDescriptor + (ULONG_PTR)DescriptorCopy.Owner); - } - if(DescriptorCopy.Group != NULL) - { - DescriptorCopy.Group = (PSID)((ULONG_PTR)OriginalSecurityDescriptor + (ULONG_PTR)DescriptorCopy.Group); - } - if(DescriptorCopy.Dacl != NULL) - { - DescriptorCopy.Dacl = (PACL)((ULONG_PTR)OriginalSecurityDescriptor + (ULONG_PTR)DescriptorCopy.Dacl); - } - if(DescriptorCopy.Sacl != NULL) - { - DescriptorCopy.Sacl = (PACL)((ULONG_PTR)OriginalSecurityDescriptor + (ULONG_PTR)DescriptorCopy.Sacl); - } - } - /* determine the size of the SIDs */ #define DetermineSIDSize(SidType) \ do { \ From ba13b6786a014a6e70335dd34220838cf3842135 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 26 Nov 2009 22:40:07 +0000 Subject: [PATCH 140/286] - rewrite the completely broken RtlInterlockedPopEntrySList, implement RtlInterlockedPushEntrySList, RtlInterlockedFlushSList - use these for ExpInterlocked* - remove a bunch of Interlocked* functions from amd64 kernel exports svn path=/branches/ros-amd64-bringup/; revision=44289 --- reactos/lib/rtl/amd64/interlck.S | 188 ------------- reactos/lib/rtl/amd64/slist.S | 343 +++++++++++++++++++++++ reactos/lib/rtl/rtl.rbuild | 2 +- reactos/ntoskrnl/ex/amd64/fastinterlck.c | 24 -- reactos/ntoskrnl/ntoskrnl.pspec | 2 +- 5 files changed, 345 insertions(+), 214 deletions(-) delete mode 100644 reactos/lib/rtl/amd64/interlck.S create mode 100644 reactos/lib/rtl/amd64/slist.S diff --git a/reactos/lib/rtl/amd64/interlck.S b/reactos/lib/rtl/amd64/interlck.S deleted file mode 100644 index f127c265fae..00000000000 --- a/reactos/lib/rtl/amd64/interlck.S +++ /dev/null @@ -1,188 +0,0 @@ -/* - * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS system libraries - * FILE: lib/rtl/amd64/interlck.S - * PURPOSE: Rtl Interlocked Functions for amd64 - * PROGRAMMERS: Timo Kreuzer - */ - -#include -#include -.intel_syntax noprefix - - -#define SLIST8A_DEPTH_MASK 0x000000000000FFFF -#define SLIST8A_DEPTH_INC 0x0000000000000001 -#define SLIST8A_SEQUENCE_MASK 0x0000000001FF0000 -#define SLIST8A_SEQUENCE_INC 0x0000000000010000 -#define SLIST8A_NEXTENTRY_MASK 0xFFFFFFFFFE000000 -#define SLIST8A_NEXTENTRY_SHIFT 21 -#define SLIST8B_HEADERTYPE_MASK 0x0000000000000001 -#define SLIST8B_INIT_MASK 0x0000000000000002 -#define SLIST8B_REGION_MASK 0xE000000000000000 - -#define SLIST16A_DEPTH_MASK 0x000000000000FFFF -#define SLIST16A_DEPTH_INC 0x0000000000000001 -#define SLIST16A_SEQUENCE_MASK 0xFFFFFFFFFFFF0000 -#define SLIST16B_HEADERTYPE_MASK 0x0000000000000001 -#define SLIST16B_INIT_MASK 0x0000000000000002 -#define SLIST16B_NEXTENTY_MASK 0xFFFFFFFFFFFFFFF0 - - -POINTER_MASK: .quad 0x000007FFFFFFFFF0 - -SLIST16_POINTER_MASK: .quad 0xFFFFFFFFFFFFFFF0 - - -/* FUNCTIONS ****************************************************************/ - - -/* PSLIST_ENTRY - * NTAPI - * RtlInterlockedPopEntrySList( - * IN PSLIST_HEADER ListHead); - */ -.proc RtlInterlockedPopEntrySList - - /* Save registers */ - push rbx - push rbp - - /* Load ListHead->Region into rax */ - mov rax, [rcx + 8] - - /* Check what kind of header this is */ - test rax, SLIST8B_HEADERTYPE_MASK - jnz 3f - - /* We have an 8 byte header */ - - /* Load ListHead->Alignment into rax */ - mov rax, [rcx] - - /* Check if ListHead->NextEntry is NULL */ - and rax, SLIST8A_NEXTENTRY_MASK - jz 2f - - /* Copy rcx to rbp, as we need ecx for the exchange */ - mov rbp, rcx - - /* Copy the low 32 bits to eax */ - mov eax, [rbp] - - /* Copy the high 32 bits to edx */ - mov edx, [rbp + 4] - -1: - /* Use rbp as pointer template in rbx*/ - mov rbx, rbp - and rbx, POINTER_MASK - - /* Extract the NextEntry pointer */ - mov rcx, [rbp] - and rcx, SLIST8A_NEXTENTRY_MASK - shr rcx, SLIST8A_NEXTENTRY_SHIFT - - /* Combine to new pointer in rcx */ - or rcx, rbx - - /* Load the next NextEntry pointer to rcx */ - mov rcx, [rcx] - - /* Copy Depth and Sequence number and adjust Depth */ - lea rbx, [rax - SLIST8A_DEPTH_INC] - - /* Shift bits in place */ - shl rcx, SLIST8A_NEXTENTRY_SHIFT - - /* Combine into rbx */ - and rbx, SLIST8A_SEQUENCE_INC | SLIST8A_DEPTH_MASK - or rbx, rcx - - /* Copy higher 32 bits into ecx */ - mov rcx, rbx - shr rcx, 32 - - /* If [rbp] equals edx:eax, exchange it with ecx:ebx */ - lock cmpxchg8b [rbp] - - /* If not equal, retry with edx:eax, being the content of [rbp] now */ - jnz 1b - - /* Move result from edx:eax to rax */ - shl rdx, 32 - or rax, rdx - - /* Use rbp as pointer template */ - and rbp, POINTER_MASK - - and rax, SLIST8A_NEXTENTRY_MASK - shr rax, SLIST8A_NEXTENTRY_SHIFT - or rax, rbp - -2: - /* Restore registers and return */ - pop rbp - pop rbx - ret - -3: /* This is a 16 byte header */ - - /* Copy rcx to rbp, as we need rcx for the exchange */ - mov rbp, rcx - - -4: - /* Check if ListHead->NextEntry is NULL */ - mov rcx, rdx - and rcx, SLIST16_POINTER_MASK - jz 5f - - /* Copy Depth and Sequence number and adjust Depth */ - lea rbx, [rax - SLIST16A_DEPTH_INC] - - /* Get next pointer */ - mov rcx, [rcx] - - /* Set ListHead->HeaderType = 1 */ - or rcx, 1 - - /* If [rbp] equals rdx:rax, exchange it with rcx:rbx */ - lock cmpxchg16b [rbp] - - /* If not equal, retry with rdx:rax, being the content of [rbp] now */ - jnz 4b - -5: - - - /* Restore registers and return */ - pop rbp - pop rbx - ret -.endproc - - -/* PSLIST_ENTRY - * NTAPI - * RtlInterlockedPushEntrySList( - * IN PSLIST_HEADER ListHead, - * IN PSLIST_ENTRY ListEntry); - */ -.proc RtlInterlockedPushEntrySList - - - ret -.endproc - - -/* PSLIST_ENTRY - * NTAPI - * RtlInterlockedFlushSList( - * IN PSINGLE_LIST_ENTRY ListHead); - */ -.proc RtlInterlockedFlushSList - - - ret -.endproc diff --git a/reactos/lib/rtl/amd64/slist.S b/reactos/lib/rtl/amd64/slist.S new file mode 100644 index 00000000000..e813d81db57 --- /dev/null +++ b/reactos/lib/rtl/amd64/slist.S @@ -0,0 +1,343 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS system libraries + * FILE: lib/rtl/amd64/interlck.S + * PURPOSE: Rtl Interlocked Functions for amd64 + * PROGRAMMERS: Timo Kreuzer + */ + +#include +#include +.intel_syntax noprefix + +#define SLIST8A_DEPTH_MASK 0x000000000000FFFF +#define SLIST8A_DEPTH_INC 0x0000000000000001 +#define SLIST8A_SEQUENCE_MASK 0x0000000001FF0000 +#define SLIST8A_SEQUENCE_INC 0x0000000000010000 +#define SLIST8A_NEXTENTRY_MASK 0xFFFFFFFFFE000000 +#define SLIST8A_NEXTENTRY_SHIFT 21 +#define SLIST8B_HEADERTYPE_MASK 0x0000000000000001 +#define SLIST8B_INIT_MASK 0x0000000000000002 +#define SLIST8B_REGION_MASK 0xE000000000000000 +#define SLIST8_POINTER_MASK 0x000007FFFFFFFFF0 + +#define SLIST16A_DEPTH_MASK 0x000000000000FFFF +#define SLIST16A_DEPTH_INC 0x0000000000000001 +#define SLIST16A_SEQUENCE_MASK 0xFFFFFFFFFFFF0000 +#define SLIST16A_SEQUENCE_INC 0x0000000000010000 +#define SLIST16B_HEADERTYPE_MASK 0x0000000000000001 +#define SLIST16B_INIT_MASK 0x0000000000000002 +#define SLIST16B_NEXTENTY_MASK 0xFFFFFFFFFFFFFFF0 + + +/* FUNCTIONS ****************************************************************/ + +.global _ExpInterlockedPopEntrySList +.global _ExpInterlockedPopEntrySListResume +.global _ExpInterlockedPopEntrySListFault +.global _ExpInterlockedPopEntrySListEnd +.global _ExpInterlockedPopEntrySListResume16 +.global _ExpInterlockedPopEntrySListFault16 +.global _ExpInterlockedPopEntrySListEnd16 +.global _ExpInterlockedPushEntrySList +.global _ExpInterlockedFlushSList + +/* PSLIST_ENTRY + * NTAPI + * RtlInterlockedPopEntrySList( + * IN PSLIST_HEADER ListHead); + */ +.proc RtlInterlockedPopEntrySList +_ExpInterlockedPopEntrySList: + + /* Load ListHead->Region into rdx */ + mov rdx, [rcx + 8] + + /* Load ListHead->Alignment into rax */ + mov rax, [rcx] + + /* Check what kind of header this is */ + test rdx, SLIST8B_HEADERTYPE_MASK + jnz _RtlInterlockedPopEntrySList16 + + /* We have an 8 byte header */ + +_ExpInterlockedPopEntrySListResume: + + /* Check if ListHead->NextEntry is NULL */ + mov r9, rax + and r9, SLIST8A_NEXTENTRY_MASK + jz _RtlInterlockedPopEntrySListEmpty + + /* Copy Depth and Sequence number and adjust Depth */ + lea r8, [rax - SLIST8A_DEPTH_INC] + and r8, SLIST8A_SEQUENCE_MASK | SLIST8A_DEPTH_MASK + + /* Create a pointer template from rcx in rdx */ + mov rdx, ~SLIST8_POINTER_MASK + and rdx, rcx + + /* Shift the NextEntry pointer */ + shr r9, SLIST8A_NEXTENTRY_SHIFT + + /* Combine to new pointer in rdx */ + or rdx, r9 + +_ExpInterlockedPopEntrySListFault: + + /* Load the next NextEntry pointer to r9 */ + mov r9, [rdx] + + /* Shift bits in place */ + shl r9, SLIST8A_NEXTENTRY_SHIFT + + /* Combine into r8 */ + or r8, r9 + +_ExpInterlockedPopEntrySListEnd: + + /* If [rcx] equals rax, exchange it with r8 */ + lock cmpxchg [rcx], r8 + + /* If not equal, retry with rax, being the content of [rcx] now */ + jnz _ExpInterlockedPopEntrySListResume + + /* Shift the pointer bits in place */ + and rax, SLIST8A_NEXTENTRY_MASK + shr rax, SLIST8A_NEXTENTRY_SHIFT + + /* Use rcx as pointer template */ + mov rdx, ~SLIST8_POINTER_MASK + or rdx, rcx + + /* Combine result and return */ + or rax, rdx + ret + +_RtlInterlockedPopEntrySListEmpty: + xor rax, rax + ret + +_RtlInterlockedPopEntrySList16: + /* This is a 16 byte header */ + + /* Save rbx */ + push rbx + + /* Copy rcx to r8, as we need rcx for the exchange */ + mov r8, rcx + +_ExpInterlockedPopEntrySListResume16: + + /* Check if ListHead->NextEntry is NULL */ + mov r9, rdx + and r9, SLIST16B_NEXTENTY_MASK + jz _RtlInterlockedPopEntrySListEmpty16 + +_ExpInterlockedPopEntrySListFault16: + + /* Get next pointer */ + mov rcx, [r9] + + /* Set ListHead->HeaderType = 1 and ListHead->Init = 1 */ + or rcx, 0x3 + + /* Copy Depth and Sequence number and adjust Depth */ + lea rbx, [rax - SLIST16A_DEPTH_INC] + +_ExpInterlockedPopEntrySListEnd16: + + /* If [r8] equals rdx:rax, exchange it with rcx:rbx */ + lock cmpxchg16b [r8] + + /* If not equal, retry with rdx:rax, being the content of [r8] now */ + jnz _ExpInterlockedPopEntrySListResume16 + + /* Copy the old NextEntry pointer to rax */ + mov rax, rdx + and rax, SLIST16B_NEXTENTY_MASK + + /* Return */ + pop rbx + ret + +_RtlInterlockedPopEntrySListEmpty16: + xor rax, rax + pop rbx + ret + +.endproc + + +/* PSLIST_ENTRY + * NTAPI + * RtlInterlockedPushEntrySList( + * IN PSLIST_HEADER ListHead, + * IN PSLIST_ENTRY ListEntry); + */ +.proc RtlInterlockedPushEntrySList +_ExpInterlockedPushEntrySList: + + /* Move 2nd parameter to r9 */ + mov r9, rdx + + /* Load ListHead->Region into rdx */ + mov rdx, [rcx + 8] + + /* Load ListHead->Alignment into rax */ + mov rax, [rcx] + + /* Check what kind of header this is */ + test rdx, SLIST8B_HEADERTYPE_MASK + jnz _RtlInterlockedPushEntrySList16 + + /* We have an 8 byte header */ + +_RtlInterlockedPushEntrySListLoop: + + /* Get ListHead->NextEntry */ + mov r8, rax + and r8, SLIST8A_NEXTENTRY_MASK + + /* Shift the NextEntry pointer */ + shr r8, SLIST8A_NEXTENTRY_SHIFT + + /* Create a pointer template from rcx in rdx */ + mov rdx, ~SLIST8_POINTER_MASK + and rdx, rcx + + /* Combine to new pointer and save as ListEntry->NextEntry */ + or rdx, r8 + mov [r9], rdx + + /* Shift and mask the new ListEntry pointer */ + shl r9, SLIST8A_NEXTENTRY_SHIFT + and r9, SLIST8A_NEXTENTRY_MASK + + /* Copy and adjust depth and sequence number */ + lea r8, [rax + SLIST8A_DEPTH_INC + SLIST8A_SEQUENCE_INC] + and r8, SLIST8A_SEQUENCE_MASK | SLIST8A_DEPTH_MASK + + /* Combine to exchange value in r8 */ + or r8, r9 + + /* If [rcx] equals rax, exchange it with r8 */ + lock cmpxchg [rcx], r8 + + /* If not equal, retry with rax, being the content of [rcx] now */ + jnz _RtlInterlockedPushEntrySListLoop + + /* Shift the pointer bits in place */ + and rax, SLIST8A_NEXTENTRY_MASK + shr rax, SLIST8A_NEXTENTRY_SHIFT + + /* Use rcx as pointer template */ + mov rdx, ~SLIST8_POINTER_MASK + or rdx, rcx + + /* Combine result and return */ + or rax, rdx + ret + +_RtlInterlockedPushEntrySList16: + /* This is a 16 byte header */ + + /* Save rbx */ + push rbx + + /* Copy rcx to r8, as we need rcx for the exchange */ + mov r8, rcx + + /* Set ListHead->HeaderType = 1 and ListHead->Init = 1 */ + mov rcx, r9 + or rcx, 0x3 + +_RtlInterlockedPushEntrySListLoop16: + + /* Move ListHead->NextEntry to rbx */ + mov rbx, rdx + and rbx, SLIST16B_NEXTENTY_MASK + + /* Store next pointer in ListEntry->NextEntry */ + mov [r9], rbx + + /* Copy Depth and Sequence number and adjust Depth */ + lea rbx, [rax + SLIST16A_DEPTH_INC + SLIST16A_SEQUENCE_INC] + + /* If [r8] equals rdx:rax, exchange it with rcx:rbx */ + lock cmpxchg16b [r8] + + /* If not equal, retry with rdx:rax, being the content of [r8] now */ + jnz _RtlInterlockedPushEntrySListLoop16 + + /* Copy the old NextEntry pointer to rax */ + mov rax, rdx + and rax, SLIST16B_NEXTENTY_MASK + + /* Return */ + pop rbx + ret + +.endproc + +/* PSLIST_ENTRY + * NTAPI + * RtlInterlockedFlushSList( + * IN PSINGLE_LIST_ENTRY ListHead); + */ +.proc RtlInterlockedFlushSList +_ExpInterlockedFlushSList: + + /* Load ListHead->Region into rdx */ + mov rax, [rcx + 8] + + /* Check what kind of header this is */ + test rax, SLIST8B_HEADERTYPE_MASK + jnz _RtlInterlockedFlushSList16 + + /* We have an 8 byte header */ + +_RtlInterlockedFlushSListLoop: + + /* Zero ListHead->Alignment */ + xor r8, r8 + + /* If [rcx] equals rax, exchange it with r8 */ + lock cmpxchg [rcx], r8 + + /* If not equal, retry with rax, being the content of [rcx] now */ + jnz _RtlInterlockedFlushSListLoop + + /* Use rcx as pointer template */ + mov rdx, ~SLIST8_POINTER_MASK + or rdx, rcx + + /* Combine result and return */ + or rax, rdx + ret + +_RtlInterlockedFlushSList16: + /* We have a 16 byte header */ + push rbx + + mov rdx, [rcx + 8] + xor rbx, rbx + mov rcx, 0x3 + +_RtlInterlockedFlushSListLoop16: + + /* If [r8] equals rdx:rax, exchange it with rcx:rbx */ + lock cmpxchg16b [r8] + + /* If not equal, retry with rdx:rax, being the content of [r8] now */ + jnz _RtlInterlockedFlushSListLoop16 + + /* Copy the old NextEntry pointer to rax */ + mov rax, rdx + and rax, SLIST16B_NEXTENTY_MASK + + /* Return */ + pop rbx + ret + +.endproc diff --git a/reactos/lib/rtl/rtl.rbuild b/reactos/lib/rtl/rtl.rbuild index ab52ed1a4ad..59b7262964c 100644 --- a/reactos/lib/rtl/rtl.rbuild +++ b/reactos/lib/rtl/rtl.rbuild @@ -39,7 +39,7 @@ debug_asm.S except_asm.S - interlck.S + slist.S unwind.c stubs.c diff --git a/reactos/ntoskrnl/ex/amd64/fastinterlck.c b/reactos/ntoskrnl/ex/amd64/fastinterlck.c index 69d10c53f5c..dbd9564327e 100644 --- a/reactos/ntoskrnl/ex/amd64/fastinterlck.c +++ b/reactos/ntoskrnl/ex/amd64/fastinterlck.c @@ -111,27 +111,3 @@ ExInterlockedRemoveHeadList(IN PLIST_ENTRY ListHead, return OldHead; } -PSLIST_ENTRY -ExpInterlockedFlushSList( - PSLIST_HEADER ListHead) -{ - UNIMPLEMENTED; - return NULL; -} - -PSLIST_ENTRY -ExpInterlockedPopEntrySList( - IN PSLIST_HEADER ListHead) -{ - UNIMPLEMENTED; - return NULL; -} - -PSLIST_ENTRY -ExpInterlockedPushEntrySList( - PSLIST_HEADER ListHead, - PSLIST_ENTRY ListEntry) -{ - UNIMPLEMENTED; - return NULL; -} diff --git a/reactos/ntoskrnl/ntoskrnl.pspec b/reactos/ntoskrnl/ntoskrnl.pspec index 538a9472e18..195542de008 100644 --- a/reactos/ntoskrnl/ntoskrnl.pspec +++ b/reactos/ntoskrnl/ntoskrnl.pspec @@ -339,12 +339,12 @@ @ stdcall InbvSetTextColor(long) @ stdcall InbvSolidColorFill(long long long long long) @ extern InitSafeBootMode +#ifndef __x86_64__ @ FASTCALL InterlockedCompareExchange(ptr long long) @ FASTCALL InterlockedDecrement(ptr) @ FASTCALL InterlockedExchange(ptr long) @ FASTCALL InterlockedExchangeAdd(ptr long) @ FASTCALL InterlockedIncrement(ptr) -#ifndef __x86_64__ @ FASTCALL InterlockedPopEntrySList(ptr) @ FASTCALL InterlockedPushEntrySList(ptr ptr) #endif From 644d3aee302b107bf827ff64c17a3e7870b9effd Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Fri, 27 Nov 2009 17:06:54 +0000 Subject: [PATCH 141/286] - Don't use a pointer to SINGLE_LIST_ENTRY as parameter for InterlockedPushEntrySList. It's not the same as SLIST_ENTRY! svn path=/branches/ros-amd64-bringup/; revision=44293 --- reactos/ntoskrnl/include/internal/ob_x.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/reactos/ntoskrnl/include/internal/ob_x.h b/reactos/ntoskrnl/include/internal/ob_x.h index 545b41fc67e..aa9d59cd05d 100644 --- a/reactos/ntoskrnl/include/internal/ob_x.h +++ b/reactos/ntoskrnl/include/internal/ob_x.h @@ -358,14 +358,14 @@ ObpFreeCapturedAttributes(IN PVOID Buffer, { /* The free was within the Depth */ InterlockedPushEntrySList(&List->L.ListHead, - (PSINGLE_LIST_ENTRY)Buffer); + (PSLIST_ENTRY)Buffer); } } else { /* The free was within the Depth */ InterlockedPushEntrySList(&List->L.ListHead, - (PSINGLE_LIST_ENTRY)Buffer); + (PSLIST_ENTRY)Buffer); } } From 892c213bdcc1e0c5efc32888cb5aa1dc62d2f76a Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Fri, 27 Nov 2009 17:23:05 +0000 Subject: [PATCH 142/286] Fix SLIST_ENTRY for WIN64 svn path=/branches/ros-amd64-bringup/; revision=44294 --- reactos/include/ddk/wdm.h | 11 +++++++---- reactos/include/psdk/winnt.h | 11 +++++++---- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/reactos/include/ddk/wdm.h b/reactos/include/ddk/wdm.h index 2b7492d403f..38fdb0eb1d6 100644 --- a/reactos/include/ddk/wdm.h +++ b/reactos/include/ddk/wdm.h @@ -575,11 +575,11 @@ InterlockedAdd64( #ifndef _SLIST_HEADER_ #define _SLIST_HEADER_ -#define SLIST_ENTRY SINGLE_LIST_ENTRY -#define _SLIST_ENTRY _SINGLE_LIST_ENTRY -#define PSLIST_ENTRY PSINGLE_LIST_ENTRY - #if defined(_WIN64) +typedef struct DECLSPEC_ALIGN(16) _SLIST_ENTRY *PSLIST_ENTRY; +typedef struct DECLSPEC_ALIGN(16) _SLIST_ENTRY { + PSLIST_ENTRY Next; +} SLIST_ENTRY; typedef union DECLSPEC_ALIGN(16) _SLIST_HEADER { struct { ULONGLONG Alignment; @@ -604,6 +604,9 @@ typedef union DECLSPEC_ALIGN(16) _SLIST_HEADER { } Header16; } SLIST_HEADER, *PSLIST_HEADER; #else +#define SLIST_ENTRY SINGLE_LIST_ENTRY +#define _SLIST_ENTRY _SINGLE_LIST_ENTRY +#define PSLIST_ENTRY PSINGLE_LIST_ENTRY typedef union _SLIST_HEADER { ULONGLONG Alignment; struct { diff --git a/reactos/include/psdk/winnt.h b/reactos/include/psdk/winnt.h index b1b61a8a66a..630605da041 100644 --- a/reactos/include/psdk/winnt.h +++ b/reactos/include/psdk/winnt.h @@ -3248,11 +3248,11 @@ typedef struct _SINGLE_LIST_ENTRY { #ifndef _SLIST_HEADER_ #define _SLIST_HEADER_ -#define SLIST_ENTRY SINGLE_LIST_ENTRY -#define _SLIST_ENTRY _SINGLE_LIST_ENTRY -#define PSLIST_ENTRY PSINGLE_LIST_ENTRY - #if defined(_WIN64) +typedef struct DECLSPEC_ALIGN(16) _SLIST_ENTRY *PSLIST_ENTRY; +typedef struct DECLSPEC_ALIGN(16) _SLIST_ENTRY { + PSLIST_ENTRY Next; +} SLIST_ENTRY; typedef union DECLSPEC_ALIGN(16) _SLIST_HEADER { struct { ULONGLONG Alignment; @@ -3277,6 +3277,9 @@ typedef union DECLSPEC_ALIGN(16) _SLIST_HEADER { } Header16; } SLIST_HEADER, *PSLIST_HEADER; #else +#define SLIST_ENTRY SINGLE_LIST_ENTRY +#define _SLIST_ENTRY _SINGLE_LIST_ENTRY +#define PSLIST_ENTRY PSINGLE_LIST_ENTRY typedef union _SLIST_HEADER { ULONGLONG Alignment; struct { From a3ec73cfafe469cd5af5ac9d15c0c645527b92f5 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Fri, 27 Nov 2009 17:30:25 +0000 Subject: [PATCH 143/286] Some more fixes for RtlInterlockedPopEntrySList and RtlInterlockedPushEntrySList svn path=/branches/ros-amd64-bringup/; revision=44295 --- reactos/lib/rtl/amd64/slist.S | 56 +++++++++++++++++------------------ 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/reactos/lib/rtl/amd64/slist.S b/reactos/lib/rtl/amd64/slist.S index e813d81db57..3488fb5a8f3 100644 --- a/reactos/lib/rtl/amd64/slist.S +++ b/reactos/lib/rtl/amd64/slist.S @@ -108,7 +108,7 @@ _ExpInterlockedPopEntrySListEnd: /* Use rcx as pointer template */ mov rdx, ~SLIST8_POINTER_MASK - or rdx, rcx + and rdx, rcx /* Combine result and return */ or rax, rdx @@ -178,17 +178,14 @@ _RtlInterlockedPopEntrySListEmpty16: .proc RtlInterlockedPushEntrySList _ExpInterlockedPushEntrySList: - /* Move 2nd parameter to r9 */ - mov r9, rdx - - /* Load ListHead->Region into rdx */ - mov rdx, [rcx + 8] - /* Load ListHead->Alignment into rax */ mov rax, [rcx] + /* Load ListHead->Region into rdx */ + mov r9, [rcx + 8] + /* Check what kind of header this is */ - test rdx, SLIST8B_HEADERTYPE_MASK + test r9, SLIST8B_HEADERTYPE_MASK jnz _RtlInterlockedPushEntrySList16 /* We have an 8 byte header */ @@ -198,45 +195,45 @@ _RtlInterlockedPushEntrySListLoop: /* Get ListHead->NextEntry */ mov r8, rax and r8, SLIST8A_NEXTENTRY_MASK + jz _RtlInterlockedPushEntrySListEmpty /* Shift the NextEntry pointer */ shr r8, SLIST8A_NEXTENTRY_SHIFT /* Create a pointer template from rcx in rdx */ - mov rdx, ~SLIST8_POINTER_MASK - and rdx, rcx + mov r9, ~SLIST8_POINTER_MASK + and r9, rcx /* Combine to new pointer and save as ListEntry->NextEntry */ - or rdx, r8 - mov [r9], rdx + or r8, r9 + +_RtlInterlockedPushEntrySListEmpty: + /* Store the NextEntry pointer in the new ListEntry */ + mov [rdx], r8 /* Shift and mask the new ListEntry pointer */ - shl r9, SLIST8A_NEXTENTRY_SHIFT - and r9, SLIST8A_NEXTENTRY_MASK + mov r8, rdx + shl r8, SLIST8A_NEXTENTRY_SHIFT + and r8, SLIST8A_NEXTENTRY_MASK /* Copy and adjust depth and sequence number */ - lea r8, [rax + SLIST8A_DEPTH_INC + SLIST8A_SEQUENCE_INC] - and r8, SLIST8A_SEQUENCE_MASK | SLIST8A_DEPTH_MASK + lea r9, [rax + SLIST8A_DEPTH_INC + SLIST8A_SEQUENCE_INC] + and r9, SLIST8A_SEQUENCE_MASK | SLIST8A_DEPTH_MASK /* Combine to exchange value in r8 */ or r8, r9 + /* Save the NextEntry in r9 */ + mov r9, [rdx] + /* If [rcx] equals rax, exchange it with r8 */ lock cmpxchg [rcx], r8 /* If not equal, retry with rax, being the content of [rcx] now */ jnz _RtlInterlockedPushEntrySListLoop - /* Shift the pointer bits in place */ - and rax, SLIST8A_NEXTENTRY_MASK - shr rax, SLIST8A_NEXTENTRY_SHIFT - - /* Use rcx as pointer template */ - mov rdx, ~SLIST8_POINTER_MASK - or rdx, rcx - - /* Combine result and return */ - or rax, rdx + /* Return the old NextEntry pointer */ + mov rax, r9 ret _RtlInterlockedPushEntrySList16: @@ -245,13 +242,16 @@ _RtlInterlockedPushEntrySList16: /* Save rbx */ push rbx - /* Copy rcx to r8, as we need rcx for the exchange */ + /* Copy rcx/rdx to r8/r9, as we need rcx/rdx for the exchange */ mov r8, rcx + mov r9, rdx /* Set ListHead->HeaderType = 1 and ListHead->Init = 1 */ - mov rcx, r9 + mov rcx, rdx or rcx, 0x3 + mov rdx, [r8 + 8] + _RtlInterlockedPushEntrySListLoop16: /* Move ListHead->NextEntry to rbx */ From 60bf8d9cd4e4e1b1e63e159daa7c2940adfe2e82 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Fri, 27 Nov 2009 17:37:07 +0000 Subject: [PATCH 144/286] Implement "portable" SList code for 64 bit svn path=/branches/ros-amd64-bringup/; revision=44296 --- reactos/lib/rtl/slist.c | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/reactos/lib/rtl/slist.c b/reactos/lib/rtl/slist.c index 1eef23d9bdf..4d291abe70e 100644 --- a/reactos/lib/rtl/slist.c +++ b/reactos/lib/rtl/slist.c @@ -20,7 +20,10 @@ NTAPI RtlInitializeSListHead(IN PSLIST_HEADER ListHead) { #ifdef _WIN64 - UNIMPLEMENTED; + ListHead->Alignment = 0; + ListHead->Region = 0; + ListHead->Header8.Init = 1; + // ListHead->Header8.HeaderType = 1; // FIXME: depending on cmpxchg16b support? #else ListHead->Alignment = 0; #endif @@ -31,8 +34,25 @@ NTAPI RtlFirstEntrySList(IN const SLIST_HEADER *ListHead) { #ifdef _WIN64 - UNIMPLEMENTED; - return NULL; + if (ListHead->Header8.HeaderType) + { + return (PVOID)(ListHead->Region & ~0xF); + } + else + { + union { + PVOID P; + struct { + ULONG64 Reserved:4; + ULONG64 NextEntry:39; + ULONG64 Reserved2:21; + } Bits; + } Pointer; + + Pointer.P = (PVOID)ListHead; + Pointer.Bits.NextEntry = ListHead->Header8.NextEntry; + return Pointer.P; + } #else return ListHead->Next.Next; #endif @@ -43,8 +63,8 @@ NTAPI RtlQueryDepthSList(IN PSLIST_HEADER ListHead) { #ifdef _WIN64 - UNIMPLEMENTED; - return 0; + return ListHead->Header8.HeaderType ? + ListHead->Header16.Sequence : ListHead->Header8.Sequence; #else return ListHead->Depth; #endif From 1e3affa73f59fa1633803e5b211bda1cf0fa94a7 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sun, 29 Nov 2009 15:26:31 +0000 Subject: [PATCH 145/286] [MM] MmCreateMemoryArea: Make tmpLength an ULONG_PTR, so it dowsn't overflow on 64 bit svn path=/branches/ros-amd64-bringup/; revision=44319 --- reactos/ntoskrnl/mm/marea.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/ntoskrnl/mm/marea.c b/reactos/ntoskrnl/mm/marea.c index 19373dc6317..13754a99196 100644 --- a/reactos/ntoskrnl/mm/marea.c +++ b/reactos/ntoskrnl/mm/marea.c @@ -929,7 +929,7 @@ MmCreateMemoryArea(PMMSUPPORT AddressSpace, { PVOID EndAddress; ULONG Granularity; - ULONG tmpLength; + ULONG_PTR tmpLength; PMEMORY_AREA MemoryArea; DPRINT("MmCreateMemoryArea(Type 0x%lx, BaseAddress %p, " From 43eaa8106d94b897ac162bade25d640fbcb9248d Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sun, 29 Nov 2009 15:51:46 +0000 Subject: [PATCH 146/286] [MM] MiReloadBootLoadedDrivers: - Allow images with relocations stripped. - Make sure NumberOfRvaAndSizes is *>* IMAGE_DIRECTORY_ENTRY_BASERELOC (== is not enough) - Move one ASSERT, remove a useless ASSERT svn path=/branches/ros-amd64-bringup/; revision=44320 --- reactos/ntoskrnl/mm/sysldr.c | 47 +++++++++++++++++------------------- 1 file changed, 22 insertions(+), 25 deletions(-) diff --git a/reactos/ntoskrnl/mm/sysldr.c b/reactos/ntoskrnl/mm/sysldr.c index 1cef79c3e43..b9bfd818719 100644 --- a/reactos/ntoskrnl/mm/sysldr.c +++ b/reactos/ntoskrnl/mm/sysldr.c @@ -1200,11 +1200,14 @@ MiReloadBootLoadedDrivers(IN PLOADER_PARAMETER_BLOCK LoaderBlock) PIMAGE_NT_HEADERS NtHeader; PLDR_DATA_TABLE_ENTRY LdrEntry; PIMAGE_FILE_HEADER FileHeader; - BOOLEAN ValidRelocs; + BOOLEAN ValidRelocs = FALSE; PIMAGE_DATA_DIRECTORY DataDirectory; PVOID DllBase, NewImageAddress; NTSTATUS Status; + /* Sanity check */ + ASSERT(ExpInitializationPhase == 0); + /* Loop driver list */ for (NextEntry = LoaderBlock->LoadOrderListHead.Flink; NextEntry != &LoaderBlock->LoadOrderListHead; @@ -1230,32 +1233,28 @@ MiReloadBootLoadedDrivers(IN PLOADER_PARAMETER_BLOCK LoaderBlock) /* Skip non-drivers */ if (!NtHeader) continue; - /* Get the file header and make sure we can relocate */ + /* Get the file header and check if we can relocate */ FileHeader = &NtHeader->FileHeader; - if (FileHeader->Characteristics & IMAGE_FILE_RELOCS_STRIPPED) continue; - if (NtHeader->OptionalHeader.NumberOfRvaAndSizes < - IMAGE_DIRECTORY_ENTRY_BASERELOC) continue; - - /* Everything made sense until now, check the relocation section too */ - DataDirectory = &NtHeader->OptionalHeader. - DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC]; - if (!DataDirectory->VirtualAddress) + if ( !(FileHeader->Characteristics & IMAGE_FILE_RELOCS_STRIPPED) && + (NtHeader->OptionalHeader.NumberOfRvaAndSizes > + IMAGE_DIRECTORY_ENTRY_BASERELOC) ) { - /* We don't really have relocations */ - ValidRelocs = FALSE; - } - else - { - /* Make sure the size is valid */ - if ((DataDirectory->VirtualAddress + DataDirectory->Size) > - LdrEntry->SizeOfImage) + /* Everything made sense until now, check the relocation section too */ + DataDirectory = &NtHeader->OptionalHeader. + DataDirectory[IMAGE_DIRECTORY_ENTRY_BASERELOC]; + if (DataDirectory->VirtualAddress) { - /* They're not, skip */ - continue; - } + /* Make sure the size is valid */ + if ((DataDirectory->VirtualAddress + DataDirectory->Size) > + LdrEntry->SizeOfImage) + { + /* They're not, skip */ + continue; + } - /* We have relocations */ - ValidRelocs = TRUE; + /* We have relocations */ + ValidRelocs = TRUE; + } } /* Remember the original address */ @@ -1270,9 +1269,7 @@ MiReloadBootLoadedDrivers(IN PLOADER_PARAMETER_BLOCK LoaderBlock) while (TRUE); } - /* Sanity check */ DPRINT("[Mm0]: Copying from: %p to: %p\n", DllBase, NewImageAddress); - ASSERT(ExpInitializationPhase == 0); /* Now copy the entire driver over */ RtlCopyMemory(NewImageAddress, DllBase, LdrEntry->SizeOfImage); From 8a4f13825c0f7e59e5d555201c6caf693a014028 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sun, 29 Nov 2009 15:55:46 +0000 Subject: [PATCH 147/286] [MM] - Fix calculation of MemoryArea size for the Page tables - Fix debug output for page table and hyperspace addresses svn path=/branches/ros-amd64-bringup/; revision=44321 --- reactos/ntoskrnl/mm/mminit.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/reactos/ntoskrnl/mm/mminit.c b/reactos/ntoskrnl/mm/mminit.c index 4f956042d25..481d0af206d 100644 --- a/reactos/ntoskrnl/mm/mminit.c +++ b/reactos/ntoskrnl/mm/mminit.c @@ -84,7 +84,7 @@ MiInitSystemMemoryAreas() Status = MmCreateMemoryArea(MmGetKernelAddressSpace(), MEMORY_AREA_OWNED_BY_ARM3 | MEMORY_AREA_STATIC, &BaseAddress, - PTE_BASE - PTE_TOP + 1, + PTE_TOP - PTE_BASE + 1, PAGE_READWRITE, &MArea, TRUE, @@ -308,13 +308,13 @@ MiDbgDumpAddressSpace(VOID) MiSessionSpaceEnd, "Session Space"); DPRINT1(" 0x%p - 0x%p\t%s\n", - PTE_BASE, PDE_BASE, + PTE_BASE, PTE_TOP, "Page Tables"); DPRINT1(" 0x%p - 0x%p\t%s\n", - PDE_BASE, HYPER_SPACE, + PDE_BASE, PDE_TOP, "Page Directories"); DPRINT1(" 0x%p - 0x%p\t%s\n", - HYPER_SPACE, HYPER_SPACE + (4 * 1024 * 1024), + HYPER_SPACE, HYPER_SPACE_END, "Hyperspace"); DPRINT1(" 0x%p - 0x%p\t%s\n", MmPagedPoolStart, From 2fdf38accfa8c2043cf54696ab6bb47c79776886 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 30 Nov 2009 00:24:55 +0000 Subject: [PATCH 148/286] [MM] Rewrite the broken MmFindGap* functions. They were first searching for a gap between the already allocated memory areas and only after that trying to find a gap below or above these areas. This bug helped with 2 things. 1. Not overwriting the kernel mapping, because no memory area was defined for it and 2. allow csrss to map video memory at virtual adress 0x000a0000. The former is fixed by adding the appropriate memory area, the latter is hacked away, by making the addressing range start at 0x00100000. Also use MmHighestUserAddress instead of MmSystemRangestart - 1. Simplyfy overcomplicated code. Fix a DPRINT svn path=/branches/ros-amd64-bringup/; revision=44327 --- reactos/ntoskrnl/mm/marea.c | 109 ++++++++++------------------------- reactos/ntoskrnl/mm/mminit.c | 21 ++++++- 2 files changed, 48 insertions(+), 82 deletions(-) diff --git a/reactos/ntoskrnl/mm/marea.c b/reactos/ntoskrnl/mm/marea.c index 13754a99196..93cb9706b69 100644 --- a/reactos/ntoskrnl/mm/marea.c +++ b/reactos/ntoskrnl/mm/marea.c @@ -469,13 +469,12 @@ MmFindGapBottomUp( ULONG_PTR Length, ULONG_PTR Granularity) { - PVOID LowestAddress = MmGetAddressSpaceOwner(AddressSpace) ? MM_LOWEST_USER_ADDRESS : MmSystemRangeStart; + // HACK: csrss really wants to map video memory at 0x000a0000 - 0x00100000, so keep that free + PVOID LowestAddress = MmGetAddressSpaceOwner(AddressSpace) ? (PVOID)0x00100000 : MmSystemRangeStart; PVOID HighestAddress = MmGetAddressSpaceOwner(AddressSpace) ? - (PVOID)((ULONG_PTR)MmSystemRangeStart - 1) : (PVOID)MAXULONG_PTR; + MmHighestUserAddress : (PVOID)MAXULONG_PTR; PVOID AlignedAddress; - PMEMORY_AREA Node; - PMEMORY_AREA FirstNode; - PMEMORY_AREA PreviousNode; + PMEMORY_AREA Root, Node; MmVerifyMemoryAreas(AddressSpace); @@ -484,42 +483,28 @@ MmFindGapBottomUp( AlignedAddress = MM_ROUND_UP(LowestAddress, Granularity); - /* Special case for empty tree. */ - if (AddressSpace->WorkingSetExpansionLinks.Flink == NULL) - { - if ((ULONG_PTR)HighestAddress - (ULONG_PTR)AlignedAddress >= Length) - { - DPRINT("MmFindGapBottomUp: %p\n", AlignedAddress); - return AlignedAddress; - } - DPRINT("MmFindGapBottomUp: 0\n"); - return 0; - } + Root = (PMEMORY_AREA)AddressSpace->WorkingSetExpansionLinks.Flink; /* Go to the node with lowest address in the tree. */ - FirstNode = Node = MmIterateFirstNode((PMEMORY_AREA)AddressSpace->WorkingSetExpansionLinks.Flink); + if (Root) + Node = MmIterateFirstNode(Root); + else + Node = NULL; - /* Traverse the tree from left to right. */ - PreviousNode = Node; - for (;;) + while (Node) { - Node = MmIterateNextNode(Node); - if (Node == NULL) - break; - - AlignedAddress = MM_ROUND_UP(PreviousNode->EndingAddress, Granularity); if (Node->StartingAddress > AlignedAddress && - (ULONG_PTR)Node->StartingAddress - (ULONG_PTR)AlignedAddress >= Length) + (ULONG_PTR)Node->StartingAddress >= (ULONG_PTR)AlignedAddress + Length) { DPRINT("MmFindGapBottomUp: %p\n", AlignedAddress); return AlignedAddress; } - PreviousNode = Node; + AlignedAddress = MM_ROUND_UP(Node->EndingAddress, Granularity); + Node = MmIterateNextNode(Node); } /* Check if there is enough space after the last memory area. */ - AlignedAddress = MM_ROUND_UP(PreviousNode->EndingAddress, Granularity); if ((ULONG_PTR)HighestAddress > (ULONG_PTR)AlignedAddress && (ULONG_PTR)HighestAddress - (ULONG_PTR)AlignedAddress >= Length) { @@ -527,15 +512,6 @@ MmFindGapBottomUp( return AlignedAddress; } - /* Check if there is enough space before the first memory area. */ - AlignedAddress = MM_ROUND_UP(LowestAddress, Granularity); - if (FirstNode->StartingAddress > AlignedAddress && - (ULONG_PTR)FirstNode->StartingAddress - (ULONG_PTR)AlignedAddress >= Length) - { - DPRINT("MmFindGapBottomUp: %p\n", AlignedAddress); - return AlignedAddress; - } - DPRINT("MmFindGapBottomUp: 0\n"); return 0; } @@ -549,73 +525,47 @@ MmFindGapTopDown( { PVOID LowestAddress = MmGetAddressSpaceOwner(AddressSpace) ? MM_LOWEST_USER_ADDRESS : MmSystemRangeStart; PVOID HighestAddress = MmGetAddressSpaceOwner(AddressSpace) ? - (PVOID)((ULONG_PTR)MmSystemRangeStart - 1) : (PVOID)MAXULONG_PTR; + MmHighestUserAddress : (PVOID)MAXULONG_PTR; PVOID AlignedAddress; - PMEMORY_AREA Node; - PMEMORY_AREA PreviousNode; + PMEMORY_AREA Root, Node; MmVerifyMemoryAreas(AddressSpace); DPRINT("LowestAddress: %p HighestAddress: %p\n", LowestAddress, HighestAddress); - AlignedAddress = MM_ROUND_DOWN((ULONG_PTR)HighestAddress - Length + 1, Granularity); + AlignedAddress = MM_ROUND_DOWN((ULONG_PTR)HighestAddress - Length, Granularity); /* Check for overflow. */ if (AlignedAddress > HighestAddress) return NULL; - /* Special case for empty tree. */ - if (AddressSpace->WorkingSetExpansionLinks.Flink == NULL) - { - if (AlignedAddress >= LowestAddress) - { - DPRINT("MmFindGapTopDown: %p\n", AlignedAddress); - return AlignedAddress; - } - DPRINT("MmFindGapTopDown: 0\n"); - return 0; - } + Root = (PMEMORY_AREA)AddressSpace->WorkingSetExpansionLinks.Flink; /* Go to the node with highest address in the tree. */ - Node = MmIterateLastNode((PMEMORY_AREA)AddressSpace->WorkingSetExpansionLinks.Flink); - - /* Check if there is enough space after the last memory area. */ - if (Node->EndingAddress <= AlignedAddress) - { - DPRINT("MmFindGapTopDown: %p\n", AlignedAddress); - return AlignedAddress; - } + if (Root) + Node = MmIterateLastNode(Root); + else + Node = NULL; /* Traverse the tree from left to right. */ - PreviousNode = Node; - for (;;) + while (Node) { - Node = MmIteratePrevNode(Node); - if (Node == NULL) - break; - - AlignedAddress = MM_ROUND_DOWN((ULONG_PTR)PreviousNode->StartingAddress - Length + 1, Granularity); - - /* Check for overflow. */ - if (AlignedAddress > PreviousNode->StartingAddress) - return NULL; - if (Node->EndingAddress <= AlignedAddress) { DPRINT("MmFindGapTopDown: %p\n", AlignedAddress); return AlignedAddress; } - PreviousNode = Node; + AlignedAddress = MM_ROUND_DOWN((ULONG_PTR)Node->StartingAddress - Length, Granularity); + + /* Check for overflow. */ + if (AlignedAddress > Node->StartingAddress) + return NULL; + + Node = MmIteratePrevNode(Node); } - AlignedAddress = MM_ROUND_DOWN((ULONG_PTR)PreviousNode->StartingAddress - Length + 1, Granularity); - - /* Check for overflow. */ - if (AlignedAddress > PreviousNode->StartingAddress) - return NULL; - if (AlignedAddress >= LowestAddress) { DPRINT("MmFindGapTopDown: %p\n", AlignedAddress); @@ -944,6 +894,7 @@ MmCreateMemoryArea(PMMSUPPORT AddressSpace, if ((*BaseAddress) == 0 && !FixedAddress) { tmpLength = PAGE_ROUND_UP(Length); + __debugbreak(); *BaseAddress = MmFindGap(AddressSpace, tmpLength, Granularity, diff --git a/reactos/ntoskrnl/mm/mminit.c b/reactos/ntoskrnl/mm/mminit.c index 481d0af206d..01bfb68b4bc 100644 --- a/reactos/ntoskrnl/mm/mminit.c +++ b/reactos/ntoskrnl/mm/mminit.c @@ -1,4 +1,4 @@ -/* +/* * PROJECT: ReactOS Kernel * LICENSE: GPL - See COPYING in the top level directory * FILE: ntoskrnl/mm/mminit.c @@ -77,6 +77,21 @@ MiInitSystemMemoryAreas() NTSTATUS Status; BoundaryAddressMultiple.QuadPart = 0; + // + // Create the memory area to define the loader mappings + // + BaseAddress = (PVOID)KSEG0_BASE; + Status = MmCreateMemoryArea(MmGetKernelAddressSpace(), + MEMORY_AREA_OWNED_BY_ARM3 | MEMORY_AREA_STATIC, + &BaseAddress, + MmBootImageSize, + PAGE_EXECUTE_READWRITE, + &MArea, + TRUE, + 0, + BoundaryAddressMultiple); + ASSERT(Status == STATUS_SUCCESS); + // // Create the memory area to define the PTE base // @@ -284,8 +299,8 @@ MiDbgDumpAddressSpace(VOID) // Print the memory layout // DPRINT1(" 0x%p - 0x%p\t%s\n", - MmSystemRangeStart, - (ULONG_PTR)MmSystemRangeStart + MmBootImageSize, + KSEG0_BASE, + (ULONG_PTR)KSEG0_BASE + MmBootImageSize, "Boot Loaded Image"); DPRINT1(" 0x%p - 0x%p\t%s\n", MmPagedPoolBase, From b2bc2c64b7118badb98d6748156c8946fe3fcf15 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Tue, 1 Dec 2009 02:03:34 +0000 Subject: [PATCH 149/286] fix build svn path=/branches/ros-amd64-bringup/; revision=44337 --- reactos/include/ddk/wdm.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/include/ddk/wdm.h b/reactos/include/ddk/wdm.h index 38fdb0eb1d6..e821cbcc540 100644 --- a/reactos/include/ddk/wdm.h +++ b/reactos/include/ddk/wdm.h @@ -576,7 +576,7 @@ InterlockedAdd64( #define _SLIST_HEADER_ #if defined(_WIN64) -typedef struct DECLSPEC_ALIGN(16) _SLIST_ENTRY *PSLIST_ENTRY; +typedef struct _SLIST_ENTRY *PSLIST_ENTRY; typedef struct DECLSPEC_ALIGN(16) _SLIST_ENTRY { PSLIST_ENTRY Next; } SLIST_ENTRY; From 071909e1df1c5e88eb78f51ae92749f01fe15fe5 Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Tue, 1 Dec 2009 03:17:54 +0000 Subject: [PATCH 150/286] fix build. svn path=/branches/ros-amd64-bringup/; revision=44338 --- reactos/include/psdk/winnt.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/include/psdk/winnt.h b/reactos/include/psdk/winnt.h index 630605da041..ee3c1a2ab73 100644 --- a/reactos/include/psdk/winnt.h +++ b/reactos/include/psdk/winnt.h @@ -3249,7 +3249,7 @@ typedef struct _SINGLE_LIST_ENTRY { #define _SLIST_HEADER_ #if defined(_WIN64) -typedef struct DECLSPEC_ALIGN(16) _SLIST_ENTRY *PSLIST_ENTRY; +typedef struct _SLIST_ENTRY *PSLIST_ENTRY; typedef struct DECLSPEC_ALIGN(16) _SLIST_ENTRY { PSLIST_ENTRY Next; } SLIST_ENTRY; From 3619d4c3e9c1c13660cac9c9eb170bbe05c1d24e Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Tue, 1 Dec 2009 03:36:35 +0000 Subject: [PATCH 151/286] Hack fix ndis build. svn path=/branches/ros-amd64-bringup/; revision=44339 --- reactos/drivers/network/ndis/ndis/misc.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/reactos/drivers/network/ndis/ndis/misc.c b/reactos/drivers/network/ndis/ndis/misc.c index f8b05a80849..dca3726dcba 100644 --- a/reactos/drivers/network/ndis/ndis/misc.c +++ b/reactos/drivers/network/ndis/ndis/misc.c @@ -426,7 +426,7 @@ NdisInterlockedPopEntrySList( * NDIS 5.0 */ { - return ExInterlockedPopEntrySList ( ListHead, Lock ); + return (PSINGLE_LIST_ENTRY)ExInterlockedPopEntrySList ( ListHead, Lock ); } @@ -447,7 +447,7 @@ NdisInterlockedPushEntrySList( * NDIS 5.0 */ { - return ExInterlockedPushEntrySList ( ListHead, ListEntry, Lock ); + return (PSINGLE_LIST_ENTRY)ExInterlockedPushEntrySList ( ListHead, (PSLIST_ENTRY)ListEntry, Lock ); } From d2a93c234a43b61e671ce9a248adfbcfb52d8017 Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Wed, 2 Dec 2009 02:50:16 +0000 Subject: [PATCH 152/286] fix warning about no newline at end of file svn path=/branches/ros-amd64-bringup/; revision=44352 --- reactos/tools/widl/hash.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/tools/widl/hash.c b/reactos/tools/widl/hash.c index fb33d19e2b9..551039c2cfa 100644 --- a/reactos/tools/widl/hash.c +++ b/reactos/tools/widl/hash.c @@ -636,4 +636,4 @@ unsigned int lhash_val_of_name_sys( syskind_t skind, LCID lcid, LPCSTR lpStr) nLoWord = (nLoWord % 65599) & 0xffff; return nHiWord | nLoWord; -} \ No newline at end of file +} From e7c948033c08c24827b5373bf55a99900f60f6fe Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Thu, 3 Dec 2009 08:56:36 +0000 Subject: [PATCH 153/286] Attempt to fix building some modules. svn path=/branches/ros-amd64-bringup/; revision=44374 --- reactos/tools/rbuild/backend/mingw/mingw.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/reactos/tools/rbuild/backend/mingw/mingw.cpp b/reactos/tools/rbuild/backend/mingw/mingw.cpp index aa4c3fec427..69a1983b8e4 100644 --- a/reactos/tools/rbuild/backend/mingw/mingw.cpp +++ b/reactos/tools/rbuild/backend/mingw/mingw.cpp @@ -480,15 +480,15 @@ MingwBackend::GenerateGlobalVariables () const fputs ( "BUILTIN_CXXINCLUDES+= $(TARGET_CPPFLAGS)\n", fMakefile ); fprintf ( fMakefile, "PROJECT_CCLIBS := \"$(shell ${TARGET_CC} -print-libgcc-file-name)\"\n" ); - fprintf ( fMakefile, "PROJECT_CXXLIBS := \"$(shell ${TARGET_CPP} -print-file-name=libstdc++.a)\" \"$(shell ${TARGET_CPP} -print-file-name=libgcc.a)\" \"$(shell ${TARGET_CPP} -print-file-name=libmingw32.a)\" \"$(shell ${TARGET_CPP} -print-file-name=libmingwex.a)\" \"$(shell ${TARGET_CPP} -print-file-name=libcoldname.a)\"\n" ); + fprintf ( fMakefile, "PROJECT_CXXLIBS := \"$(shell ${TARGET_CPP} -print-file-name=libstdc++.a)\" \"$(shell ${TARGET_CPP} -print-file-name=libgcc.a)\" \"$(shell ${TARGET_CPP} -print-file-name=libmingw32.a)\" \"$(shell ${TARGET_CPP} -print-file-name=libmingwex.a)\" " ); /* hack to get libgcc_eh.a, should check mingw version or something */ if (Environment::GetArch() == "amd64") { - fprintf ( fMakefile, "PROJECT_LPPFLAGS += $(shell ${TARGET_CPP} -print-file-name=libgcc_eh.a)\n" ); + fprintf ( fMakefile, " \"$(shell ${TARGET_CPP} -print-file-name=libgcc_eh.a)\"" ); } + fprintf ( fMakefile,"\n"); } - MingwModuleHandler::GenerateParameters ( "PROJECT", "+=", ProjectNode.non_if_data ); MingwModuleHandler::GenerateParameters ( "PROJECT_HOST", "+=", ProjectNode.host_non_if_data ); From f94596c837a348e9e1c5b79156662191b67ad76e Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Thu, 3 Dec 2009 09:20:03 +0000 Subject: [PATCH 154/286] Fix msvcrt build svn path=/branches/ros-amd64-bringup/; revision=44375 --- reactos/dll/win32/msvcrt/msvcrt-amd64.def | 16 +++--- reactos/dll/win32/msvcrt/msvcrt-i386.def | 60 +++++++++++++---------- 2 files changed, 44 insertions(+), 32 deletions(-) diff --git a/reactos/dll/win32/msvcrt/msvcrt-amd64.def b/reactos/dll/win32/msvcrt/msvcrt-amd64.def index 2c2e05f8705..61b42844390 100644 --- a/reactos/dll/win32/msvcrt/msvcrt-amd64.def +++ b/reactos/dll/win32/msvcrt/msvcrt-amd64.def @@ -120,7 +120,7 @@ EXPORTS __fpecode @115 __getmainargs @116 __initenv @117 - __iob_func @118 + __iob_func=__p__iob @118 __isascii @119 __iscsym @120 __iscsymf @121 @@ -365,9 +365,10 @@ EXPORTS _isnan @359 _itoa @360 _itow @361 - _j0 @362 - _j1 @363 - _jn @364 +; FIXME: these aren't actually implemented in CRT +; _j0 @362 +; _j1 @363 +; _jn @364 _kbhit @365 _lfind @366 _loaddll @367 @@ -648,9 +649,10 @@ EXPORTS _wunlink @642 _wutime @643 ; _wutime64 @644 - _y0 @645 - _y1 @646 - _yn @647 +; FIXME: these aren't actually implemented in CRT +; _y0 @645 +; _y1 @646 +; _yn @647 abort @648 abs @649 acos @650 diff --git a/reactos/dll/win32/msvcrt/msvcrt-i386.def b/reactos/dll/win32/msvcrt/msvcrt-i386.def index de912fd48a4..bcf3fe378c8 100644 --- a/reactos/dll/win32/msvcrt/msvcrt-i386.def +++ b/reactos/dll/win32/msvcrt/msvcrt-i386.def @@ -120,7 +120,7 @@ EXPORTS __fpecode @115 __getmainargs @116 __initenv @117 -; __iob_func @118 + __iob_func=__p__iob @118 __isascii @119 __iscsym @120 __iscsymf @121 @@ -271,11 +271,11 @@ EXPORTS _fileno @265 _findclose @266 _findfirst @267 -; _findfirst64 @268 - ;_findfirsti64 @269 + _findfirst64 @268 + _findfirsti64 @269 _findnext @270 -; _findnext64 @271 - ;_findnexti64 @272 + _findnext64 @271 + _findnexti64 @272 _finite @273 _flsbuf @274 _flushall @275 @@ -288,8 +288,8 @@ EXPORTS _fsopen @282 _fstat @283 _fstat64 @284 - ;_fstati64 @285 - ;_ftime @286 + _fstati64 @285 + _ftime @286 ; _ftime64 @287 _ftol @288 _fullpath @289 @@ -365,9 +365,10 @@ EXPORTS _isnan @359 _itoa @360 _itow @361 - _j0 @362 - _j1 @363 - _jn @364 +; FIXME: these aren't actually implemented in CRT +; _j0 @362 +; _j1 @363 +; _jn @364 _kbhit @365 _lfind @366 _loaddll @367 @@ -513,7 +514,7 @@ EXPORTS _splitpath @507 _stat @508 _stat64 @509 - ;_stati64 @510 + _stati64 @510 _statusfp @511 _strcmpi @512 _strdate @513 @@ -529,7 +530,7 @@ EXPORTS _strrev @523 _strset @524 _strtime @525 -; _strtoi64 @526 + _strtoi64 @526 _strtoui64=strtoull @527 _strupr @528 _swab @529 @@ -577,8 +578,8 @@ EXPORTS _wcsnset @571 _wcsrev @572 _wcsset @573 -; _wcstoi64 @574 -; _wcstoui64 @575 + _wcstoi64 @574 + _wcstoui64 @575 _wcsupr @576 _wctime @577 ; _wctime64 @578 @@ -593,12 +594,12 @@ EXPORTS _wexecvp @587 _wexecvpe @588 _wfdopen @589 - ;_wfindfirst @590 -; _wfindfirst64 @591 - ;_wfindfirsti64 @592 - ;_wfindnext @593 -; _wfindnext64 @594 - ;_wfindnexti64 @595 + _wfindfirst @590 + _wfindfirst64 @591 + _wfindfirsti64 @592 + _wfindnext @593 + _wfindnext64 @594 + _wfindnexti64 @595 _wfopen @596 _wfreopen @597 _wfsopen @598 @@ -635,7 +636,7 @@ EXPORTS _wsplitpath @629 _wstat @630 _wstat64 @631 - ;_wstati64 @632 + _wstati64 @632 _wstrdate @633 _wstrtime @634 _wsystem @635 @@ -648,9 +649,10 @@ EXPORTS _wunlink @642 _wutime @643 ; _wutime64 @644 - _y0 @645 - _y1 @646 - _yn @647 +; FIXME: these aren't actually implemented in CRT +; _y0 @645 +; _y1 @646 +; _yn @647 abort @648 abs @649 acos @650 @@ -750,7 +752,7 @@ EXPORTS mbtowc @744 memchr @745 memcmp @746 - memcpy=memmove @747 + memcpy @747 memmove @748 memset @749 mktime @750 @@ -847,4 +849,12 @@ EXPORTS wprintf @841 wscanf @842 + _mbsnbcpy_s + wcscpy_s + wcsncpy_s + _ftol2=_ftol + _ftol2_sse=_ftol + strcat_s + strcpy_s + _swprintf=swprintf From fe58a9592333ee0f048afa0b4e3d3cbfb89bec31 Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Thu, 3 Dec 2009 18:03:22 +0000 Subject: [PATCH 155/286] Re-add old name hack, fixes building some modules svn path=/branches/ros-amd64-bringup/; revision=44380 --- reactos/lib/3rdparty/mingw/mingw.rbuild | 1 + 1 file changed, 1 insertion(+) diff --git a/reactos/lib/3rdparty/mingw/mingw.rbuild b/reactos/lib/3rdparty/mingw/mingw.rbuild index 940e5afacf3..d0fa578bb4f 100644 --- a/reactos/lib/3rdparty/mingw/mingw.rbuild +++ b/reactos/lib/3rdparty/mingw/mingw.rbuild @@ -3,6 +3,7 @@ + include/reactos/mingw-w64 kernel32 _newmode.c From 5da523a6b0615ea5ee540d8c1b921db64d018c22 Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Thu, 3 Dec 2009 18:10:08 +0000 Subject: [PATCH 156/286] Don't use calloc, fixes building even more modules. svn path=/branches/ros-amd64-bringup/; revision=44381 --- reactos/lib/3rdparty/mingw/dummy_mingwthrd.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/reactos/lib/3rdparty/mingw/dummy_mingwthrd.c b/reactos/lib/3rdparty/mingw/dummy_mingwthrd.c index 7dd2f462cee..e0d7ebf0a41 100644 --- a/reactos/lib/3rdparty/mingw/dummy_mingwthrd.c +++ b/reactos/lib/3rdparty/mingw/dummy_mingwthrd.c @@ -42,7 +42,8 @@ ___w64_mingwthr_add_key_dtor (DWORD key, void (*dtor)(void *)) if (__mingwthr_cs_init == 0) return 0; - new_key = (__mingwthr_key_t *) calloc (1, sizeof (__mingwthr_key_t)); + new_key = (__mingwthr_key_t *)malloc(sizeof (__mingwthr_key_t)); + memset(new_key, 0,sizeof (__mingwthr_key_t)); if (new_key == NULL) return -1; From 3c616c6610b2bc80b780207371ecc10c8701f156 Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Thu, 3 Dec 2009 18:26:55 +0000 Subject: [PATCH 157/286] fix copy/paste mistake. svn path=/branches/ros-amd64-bringup/; revision=44382 --- reactos/lib/3rdparty/mingw/dummy_mingwthrd.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/reactos/lib/3rdparty/mingw/dummy_mingwthrd.c b/reactos/lib/3rdparty/mingw/dummy_mingwthrd.c index e0d7ebf0a41..597144fc06b 100644 --- a/reactos/lib/3rdparty/mingw/dummy_mingwthrd.c +++ b/reactos/lib/3rdparty/mingw/dummy_mingwthrd.c @@ -43,10 +43,11 @@ ___w64_mingwthr_add_key_dtor (DWORD key, void (*dtor)(void *)) if (__mingwthr_cs_init == 0) return 0; new_key = (__mingwthr_key_t *)malloc(sizeof (__mingwthr_key_t)); - memset(new_key, 0,sizeof (__mingwthr_key_t)); + if (new_key == NULL) return -1; - + + memset(new_key, 0,sizeof (__mingwthr_key_t)); new_key->key = key; new_key->dtor = dtor; From 460cdf83514bd0873efeead8f9290d5c5d1c947f Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Thu, 3 Dec 2009 18:46:04 +0000 Subject: [PATCH 158/286] Fix midimap build. svn path=/branches/ros-amd64-bringup/; revision=44385 --- reactos/dll/win32/winmm/midimap/midimap.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/reactos/dll/win32/winmm/midimap/midimap.c b/reactos/dll/win32/winmm/midimap/midimap.c index e2b27d122c9..d96f5e46fc4 100644 --- a/reactos/dll/win32/winmm/midimap/midimap.c +++ b/reactos/dll/win32/winmm/midimap/midimap.c @@ -270,7 +270,7 @@ static DWORD modOpen(LPDWORD lpdwUser, LPMIDIOPENDESC lpDesc, DWORD dwFlags) if (MIDIMAP_LoadSettings(mom)) { - *lpdwUser = (DWORD)mom; + *lpdwUser = (DWORD_PTR)mom; mom->self = mom; return MMSYSERR_NOERROR; @@ -451,8 +451,8 @@ static DWORD modReset(MIDIMAPDATA* mom) /************************************************************************** * modMessage (MIDIMAP.@) */ -DWORD WINAPI MIDIMAP_modMessage(UINT wDevID, UINT wMsg, DWORD dwUser, - DWORD dwParam1, DWORD dwParam2) +DWORD WINAPI MIDIMAP_modMessage(UINT wDevID, UINT wMsg, DWORD_PTR dwUser, + DWORD_PTR dwParam1, DWORD_PTR dwParam2) { TRACE("(%u, %04X, %08lX, %08lX, %08lX);\n", wDevID, wMsg, dwUser, dwParam1, dwParam2); @@ -541,8 +541,8 @@ static DWORD MIDIMAP_drvClose(DWORD dwDevID) /************************************************************************** * DriverProc (MIDIMAP.@) */ -LONG CALLBACK MIDIMAP_DriverProc(DWORD dwDevID, HDRVR hDriv, DWORD wMsg, - DWORD dwParam1, DWORD dwParam2) +LRESULT CALLBACK MIDIMAP_DriverProc(DWORD_PTR dwDevID, HDRVR hDriv, UINT wMsg, + LPARAM dwParam1, LPARAM dwParam2) { /* EPP TRACE("(%08lX, %04X, %08lX, %08lX, %08lX)\n", */ /* EPP dwDevID, hDriv, wMsg, dwParam1, dwParam2); */ From 0d9a397e302bd46686340a2d6f230cc36269d953 Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Thu, 3 Dec 2009 19:03:25 +0000 Subject: [PATCH 159/286] - Allow warnings in gdi32 - Fix ntdll build - Fix mysteriously broken (in last sync) obdc32 svn path=/branches/ros-amd64-bringup/; revision=44388 --- reactos/dll/ntdll/def/ntdll_amd64.def | 2 +- reactos/dll/ntdll/ldr/actctx.c | 4 ++-- reactos/dll/ntdll/ldr/utils.c | 4 ++-- reactos/dll/win32/gdi32/gdi32.rbuild | 2 +- reactos/dll/win32/odbc32/odbc32.rbuild | 1 + 5 files changed, 7 insertions(+), 6 deletions(-) diff --git a/reactos/dll/ntdll/def/ntdll_amd64.def b/reactos/dll/ntdll/def/ntdll_amd64.def index 8af1dd3442d..d8c141d4674 100644 --- a/reactos/dll/ntdll/def/ntdll_amd64.def +++ b/reactos/dll/ntdll/def/ntdll_amd64.def @@ -1015,7 +1015,7 @@ RtlQueryEnvironmentVariable_U RtlQueryHeapInformation RtlQueryInformationAcl RtlQueryInformationActivationContext -RtlQueryInformationActiveActivationContext +;RtlQueryInformationActiveActivationContext ;RtlQueryInterfaceMemoryStream ;RtlQueryModuleInformation ;RtlQueryProcessBackTraceInformation diff --git a/reactos/dll/ntdll/ldr/actctx.c b/reactos/dll/ntdll/ldr/actctx.c index 80e15ae8e91..6517b86a75b 100644 --- a/reactos/dll/ntdll/ldr/actctx.c +++ b/reactos/dll/ntdll/ldr/actctx.c @@ -15,8 +15,8 @@ NTSTATUS create_module_activation_context( LDR_DATA_TABLE_ENTRY *module ) LDR_RESOURCE_INFO info; IMAGE_RESOURCE_DATA_ENTRY *entry; - info.Type = (ULONG)RT_MANIFEST; - info.Name = (ULONG)ISOLATIONAWARE_MANIFEST_RESOURCE_ID; + info.Type = (ULONG_PTR)RT_MANIFEST; + info.Name = (ULONG_PTR)ISOLATIONAWARE_MANIFEST_RESOURCE_ID; info.Language = 0; if (!(status = LdrFindResource_U( module->DllBase, &info, 3, &entry ))) { diff --git a/reactos/dll/ntdll/ldr/utils.c b/reactos/dll/ntdll/ldr/utils.c index dd92cabdf64..2f22ba5436c 100644 --- a/reactos/dll/ntdll/ldr/utils.c +++ b/reactos/dll/ntdll/ldr/utils.c @@ -3477,7 +3477,7 @@ LdrLockLoaderLock(IN ULONG Flags, } /* FIXME: Cookie is based on part of the thread id */ - *Cookie = (ULONG)NtCurrentTeb()->RealClientId.UniqueThread; + *Cookie = (ULONG_PTR)NtCurrentTeb()->RealClientId.UniqueThread; return Status; } @@ -3489,7 +3489,7 @@ LdrUnlockLoaderLock(IN ULONG Flags, if (Flags != 0x01) return STATUS_INVALID_PARAMETER_1; - if (Cookie != (ULONG)NtCurrentTeb()->RealClientId.UniqueThread) + if (Cookie != (ULONG_PTR)NtCurrentTeb()->RealClientId.UniqueThread) return STATUS_INVALID_PARAMETER_2; RtlLeaveCriticalSection(NtCurrentPeb()->LoaderLock); diff --git a/reactos/dll/win32/gdi32/gdi32.rbuild b/reactos/dll/win32/gdi32/gdi32.rbuild index 5e47b5bc0a4..ee2ed7761f0 100644 --- a/reactos/dll/win32/gdi32/gdi32.rbuild +++ b/reactos/dll/win32/gdi32/gdi32.rbuild @@ -1,4 +1,4 @@ - + include diff --git a/reactos/dll/win32/odbc32/odbc32.rbuild b/reactos/dll/win32/odbc32/odbc32.rbuild index f7fa25b3cba..30d8de7cea1 100644 --- a/reactos/dll/win32/odbc32/odbc32.rbuild +++ b/reactos/dll/win32/odbc32/odbc32.rbuild @@ -7,6 +7,7 @@ include/reactos/wine wine + advapi32 proxyodbc.c \ No newline at end of file From 8f51e0fb9de92b4d62ee0b4a2460578edd63bbc5 Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Thu, 3 Dec 2009 19:40:01 +0000 Subject: [PATCH 160/286] Fix build and enable building usermode components, since they all build. svn path=/branches/ros-amd64-bringup/; revision=44389 --- reactos/base/applications/sndrec32/audio_resampler_acm.cpp | 1 + reactos/config-amd64.template.rbuild | 2 +- reactos/dll/win32/shell32/shell32.rbuild | 2 +- reactos/dll/win32/ws2_32_new/src/socklife.c | 4 ++-- reactos/dll/win32/ws2_32_new/src/sputil.c | 2 +- reactos/dll/win32/ws2_32_new/ws2_32.rbuild | 2 +- reactos/dll/win32/ws2help/ws2help.rbuild | 2 +- 7 files changed, 8 insertions(+), 7 deletions(-) diff --git a/reactos/base/applications/sndrec32/audio_resampler_acm.cpp b/reactos/base/applications/sndrec32/audio_resampler_acm.cpp index fa2617ac177..da1dec0a488 100644 --- a/reactos/base/applications/sndrec32/audio_resampler_acm.cpp +++ b/reactos/base/applications/sndrec32/audio_resampler_acm.cpp @@ -8,6 +8,7 @@ #include "stdafx.h" #include "audio_resampler_acm.hpp" +#include _AUDIO_NAMESPACE_START_ diff --git a/reactos/config-amd64.template.rbuild b/reactos/config-amd64.template.rbuild index e3ab7541de1..942da261250 100644 --- a/reactos/config-amd64.template.rbuild +++ b/reactos/config-amd64.template.rbuild @@ -86,7 +86,7 @@ Whether to compile any usermode parts. This is while kernel mode is under heavy development and usermode part not relevant for bootcd. --> - + diff --git a/reactos/dll/win32/shell32/shell32.rbuild b/reactos/dll/win32/shell32/shell32.rbuild index 5276af049f5..f020da53f1c 100644 --- a/reactos/dll/win32/shell32/shell32.rbuild +++ b/reactos/dll/win32/shell32/shell32.rbuild @@ -1,5 +1,5 @@ - + . diff --git a/reactos/dll/win32/ws2_32_new/src/socklife.c b/reactos/dll/win32/ws2_32_new/src/socklife.c index 5d8dc80cc58..d1cd3a9a349 100644 --- a/reactos/dll/win32/ws2_32_new/src/socklife.c +++ b/reactos/dll/win32/ws2_32_new/src/socklife.c @@ -176,7 +176,7 @@ WPUCloseSocketHandle(IN SOCKET s, SOCKET WSPAPI WPUCreateSocketHandle(IN DWORD dwCatalogEntryId, - IN DWORD dwContext, + IN DWORD_PTR dwContext, OUT LPINT lpErrno) { UNIMPLEMENTED; @@ -277,7 +277,7 @@ WPUModifyIFSHandle(IN DWORD dwCatalogEntryId, INT WSPAPI WPUQuerySocketHandleContext(IN SOCKET s, - OUT LPDWORD lpContext, + OUT PDWORD_PTR lpContext, OUT LPINT lpErrno) { UNIMPLEMENTED; diff --git a/reactos/dll/win32/ws2_32_new/src/sputil.c b/reactos/dll/win32/ws2_32_new/src/sputil.c index e82922a7e9a..80277c33fe3 100644 --- a/reactos/dll/win32/ws2_32_new/src/sputil.c +++ b/reactos/dll/win32/ws2_32_new/src/sputil.c @@ -173,7 +173,7 @@ INT WSPAPI WPUQueueApc(IN LPWSATHREADID lpThreadId, IN LPWSAUSERAPC lpfnUserApc, - IN DWORD dwContext, + IN DWORD_PTR dwContext, OUT LPINT lpErrno) { UNIMPLEMENTED; diff --git a/reactos/dll/win32/ws2_32_new/ws2_32.rbuild b/reactos/dll/win32/ws2_32_new/ws2_32.rbuild index 2fee79c1a9e..5e768ff99e6 100644 --- a/reactos/dll/win32/ws2_32_new/ws2_32.rbuild +++ b/reactos/dll/win32/ws2_32_new/ws2_32.rbuild @@ -1,4 +1,4 @@ - + inc include/reactos/winsock diff --git a/reactos/dll/win32/ws2help/ws2help.rbuild b/reactos/dll/win32/ws2help/ws2help.rbuild index 045c924e7ff..b802793480a 100644 --- a/reactos/dll/win32/ws2help/ws2help.rbuild +++ b/reactos/dll/win32/ws2help/ws2help.rbuild @@ -1,4 +1,4 @@ - + . include/reactos/winsock From 9fd420498df6ef2b0d41d59cbb35550cfe6ca706 Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Thu, 3 Dec 2009 19:51:31 +0000 Subject: [PATCH 161/286] Unhack bootcd file list svn path=/branches/ros-amd64-bringup/; revision=44390 --- reactos/boot/bootdata/packages/reactos.dff | 1192 ++++++++++---------- 1 file changed, 587 insertions(+), 605 deletions(-) diff --git a/reactos/boot/bootdata/packages/reactos.dff b/reactos/boot/bootdata/packages/reactos.dff index b13543a4070..bf616387568 100644 --- a/reactos/boot/bootdata/packages/reactos.dff +++ b/reactos/boot/bootdata/packages/reactos.dff @@ -31,645 +31,642 @@ Signature = "$ReactOS$" ; Base files -;base\applications\cacls\cacls.exe 1 -;base\applications\calc\calc.exe 1 -;base\applications\charmap\charmap.exe 1 -;base\applications\cmdutils\dbgprint\dbgprint.exe 1 -;base\applications\cmdutils\doskey\doskey.exe 1 -;base\applications\cmdutils\find\find.exe 1 -;base\applications\cmdutils\hostname\hostname.exe 1 -;base\applications\cmdutils\lodctr\lodctr.exe 1 -;base\applications\cmdutils\more\more.exe 1 -;base\applications\cmdutils\xcopy\xcopy.exe 1 -;base\applications\control\control.exe 1 -;base\applications\dxdiag\dxdiag.exe 1 -;base\applications\fontview\fontview.exe 1 -;base\applications\mscutils\devmgmt\devmgmt.exe 1 -;base\applications\mscutils\eventvwr\eventvwr.exe 1 -;base\applications\games\solitaire\sol.exe 1 -;base\applications\games\spider\spider.exe 1 -;base\applications\games\winemine\winemine.exe 1 -;base\applications\hh\hh.exe 4 -;base\applications\kbswitch\kbswitch.exe 1 -;base\applications\kbswitch\kbsdll\kbsdll.dll 1 -;base\applications\logoff\logoff.exe 1 -;base\applications\magnify\magnify.exe 1 -;base\applications\mplay32\mplay32.exe 1 -;base\applications\msconfig\msconfig.exe 1 -;base\applications\mstsc\mstsc.exe 1 -;base\applications\network\arp\arp.exe 1 -;base\applications\network\dwnl\dwnl.exe 1 -;base\applications\network\route\route.exe 1 -;base\applications\network\finger\finger.exe 1 -;base\applications\network\ftp\ftp.exe 1 -;base\applications\network\ipconfig\ipconfig.exe 1 -;base\applications\network\netstat\netstat.exe 1 -;base\applications\network\ping\ping.exe 1 -;base\applications\network\telnet\telnet.exe 1 -;base\applications\network\tracert\tracert.exe 1 -;base\applications\network\whois\whois.exe 1 -;base\applications\network\ftp\ftp.exe 1 -;base\applications\network\ipconfig\ipconfig.exe 1 -;base\applications\network\netstat\netstat.exe 1 -;base\applications\network\ping\ping.exe 1 -;base\applications\network\telnet\telnet.exe 1 -;base\applications\network\tracert\tracert.exe 1 -;base\applications\network\whois\whois.exe 1 -;base\applications\notepad\notepad.exe 1 -;base\applications\paint\paint.exe 1 -;base\applications\rapps\rapps.exe 1 -;base\applications\regedit\regedit.exe 4 -;base\applications\regedit\clb\clb.dll 1 -;base\applications\regedt32\regedt32.exe 1 -;base\applications\sc\sc.exe 1 -;base\applications\screensavers\3dtext\3dtext.scr 1 -;base\applications\screensavers\logon\logon.scr 1 -;base\applications\mscutils\servman\servman.exe 1 -;base\applications\shutdown\shutdown.exe 1 -;base\applications\sndvol32\sndvol32.exe 1 -;base\applications\taskmgr\taskmgr.exe 1 -;base\applications\winhlp32\winhlp32.exe 4 -;base\applications\winver\winver.exe 1 -;base\applications\wordpad\wordpad.exe 1 -;base\applications\write\write.exe 1 +base\applications\cacls\cacls.exe 1 +base\applications\calc\calc.exe 1 +base\applications\charmap\charmap.exe 1 +base\applications\cmdutils\dbgprint\dbgprint.exe 1 +base\applications\cmdutils\doskey\doskey.exe 1 +base\applications\cmdutils\find\find.exe 1 +base\applications\cmdutils\hostname\hostname.exe 1 +base\applications\cmdutils\lodctr\lodctr.exe 1 +base\applications\cmdutils\more\more.exe 1 +base\applications\cmdutils\reg\reg.exe 1 +base\applications\cmdutils\xcopy\xcopy.exe 1 +base\applications\control\control.exe 1 +base\applications\dxdiag\dxdiag.exe 1 +base\applications\fontview\fontview.exe 1 +base\applications\mscutils\devmgmt\devmgmt.exe 1 +base\applications\mscutils\eventvwr\eventvwr.exe 1 +base\applications\games\solitaire\sol.exe 1 +base\applications\games\spider\spider.exe 1 +base\applications\games\winemine\winemine.exe 1 +base\applications\hh\hh.exe 4 +base\applications\kbswitch\kbswitch.exe 1 +base\applications\kbswitch\kbsdll\kbsdll.dll 1 +base\applications\logoff\logoff.exe 1 +base\applications\magnify\magnify.exe 1 +base\applications\mplay32\mplay32.exe 1 +base\applications\msconfig\msconfig.exe 1 +base\applications\mstsc\mstsc.exe 1 +base\applications\network\arp\arp.exe 1 +base\applications\network\dwnl\dwnl.exe 1 +base\applications\network\route\route.exe 1 +base\applications\network\finger\finger.exe 1 +base\applications\network\ftp\ftp.exe 1 +base\applications\network\ipconfig\ipconfig.exe 1 +base\applications\network\netstat\netstat.exe 1 +base\applications\network\nslookup\nslookup.exe 1 +base\applications\network\ping\ping.exe 1 +base\applications\network\telnet\telnet.exe 1 +base\applications\network\tracert\tracert.exe 1 +base\applications\network\whois\whois.exe 1 +base\applications\notepad\notepad.exe 1 +base\applications\paint\paint.exe 1 +base\applications\rapps\rapps.exe 1 +base\applications\regedit\regedit.exe 4 +base\applications\regedit\clb\clb.dll 1 +base\applications\regedt32\regedt32.exe 1 +base\applications\sc\sc.exe 1 +base\applications\screensavers\3dtext\3dtext.scr 1 +base\applications\screensavers\logon\logon.scr 1 +base\applications\mscutils\servman\servman.exe 1 +base\applications\shutdown\shutdown.exe 1 +base\applications\sndvol32\sndvol32.exe 1 +base\applications\taskmgr\taskmgr.exe 1 +base\applications\winhlp32\winhlp32.exe 4 +base\applications\winver\winver.exe 1 +base\applications\wordpad\wordpad.exe 1 +base\applications\write\write.exe 1 -;base\services\audiosrv\audiosrv.exe 1 -;base\services\dhcp\dhcp.exe 1 -;base\services\eventlog\eventlog.exe 1 -;base\services\rpcss\rpcss.exe 1 -;base\services\spoolsv\spoolsv.exe 1 -;base\services\tcpsvcs\tcpsvcs.exe 1 -;base\services\telnetd\telnetd.exe 1 -;base\services\tcpsvcs\quotes 5 -;base\services\umpnpmgr\umpnpmgr.exe 1 -;base\services\wlansvc\wlansvc.exe 1 -;base\services\svchost\svchost.exe 1 +base\services\audiosrv\audiosrv.exe 1 +base\services\dhcp\dhcp.exe 1 +base\services\eventlog\eventlog.exe 1 +base\services\rpcss\rpcss.exe 1 +base\services\spoolsv\spoolsv.exe 1 +base\services\tcpsvcs\tcpsvcs.exe 1 +base\services\telnetd\telnetd.exe 1 +base\services\tcpsvcs\quotes 5 +base\services\umpnpmgr\umpnpmgr.exe 1 +base\services\wlansvc\wlansvc.exe 1 +base\services\svchost\svchost.exe 1 -;base\setup\setup\setup.exe 1 -;base\setup\vmwinst\vmwinst.exe 1 +base\setup\setup\setup.exe 1 +base\setup\vmwinst\vmwinst.exe 1 -;base\shell\cmd\cmd.exe 1 -;base\shell\explorer\explorer.exe 4 -;base\shell\explorer\explorer-cfg-template.xml 4 -;base\shell\explorer\notifyhook\notifyhook.dll 1 -;base\shell\explorer-new\explorer_new.exe 4 optional +base\shell\cmd\cmd.exe 1 +base\shell\explorer\explorer.exe 4 +base\shell\explorer\explorer-cfg-template.xml 4 +base\shell\explorer\notifyhook\notifyhook.dll 1 +base\shell\explorer-new\explorer_new.exe 4 optional -;base\system\autochk\autochk.exe 1 -;base\system\bootok\bootok.exe 1 -;base\system\format\format.exe 1 -;base\system\lsass\lsass.exe 1 -;base\system\msiexec\msiexec.exe 1 -;base\system\regsvr32\regsvr32.exe 1 -;base\system\rundll32\rundll32.exe 1 -;base\system\services\services.exe 1 -;base\system\userinit\userinit.exe 1 -;base\system\winlogon\winlogon.exe 1 -;base\system\expand\expand.exe 1 -;base\system\smss\smss.exe 1 +base\system\autochk\autochk.exe 1 +base\system\bootok\bootok.exe 1 +base\system\format\format.exe 1 +base\system\lsass\lsass.exe 1 +base\system\msiexec\msiexec.exe 1 +base\system\regsvr32\regsvr32.exe 1 +base\system\rundll32\rundll32.exe 1 +base\system\runonce\runonce.exe 1 +base\system\services\services.exe 1 +base\system\userinit\userinit.exe 1 +base\system\winlogon\winlogon.exe 1 +base\system\expand\expand.exe 1 +base\system\smss\smss.exe 1 ; Dynamic Link Libraries -;dll\3rdparty\mesa32\mesa32.dll 1 -;dll\3rdparty\libjpeg\libjpeg.dll 1 -;dll\3rdparty\libxslt\libxslt.dll 1 -;dll\3rdparty\dxtn\dxtn.dll 1 optional +dll\3rdparty\mesa32\mesa32.dll 1 +dll\3rdparty\libjpeg\libjpeg.dll 1 +dll\3rdparty\libxslt\libxslt.dll 1 +dll\3rdparty\dxtn\dxtn.dll 1 optional -;dll\cpl\access\access.cpl 1 -;dll\cpl\appwiz\appwiz.cpl 1 -;dll\cpl\console\console.dll 1 -;dll\cpl\desk\desk.cpl 1 -;dll\cpl\hdwwiz\hdwwiz.cpl 1 -;dll\cpl\input\input.dll 1 -;dll\cpl\intl\intl.cpl 1 -;dll\cpl\joy\joy.cpl 1 +dll\cpl\access\access.cpl 1 +dll\cpl\appwiz\appwiz.cpl 1 +dll\cpl\console\console.dll 1 +dll\cpl\desk\desk.cpl 1 +dll\cpl\hdwwiz\hdwwiz.cpl 1 +dll\cpl\input\input.dll 1 +dll\cpl\intl\intl.cpl 1 +dll\cpl\joy\joy.cpl 1 ;dll\cpl\liccpa\liccpa.cpl 1 -;dll\cpl\main\main.cpl 1 -;dll\cpl\mmsys\mmsys.cpl 1 -;dll\cpl\ncpa\ncpa.cpl 1 +dll\cpl\main\main.cpl 1 +dll\cpl\mmsys\mmsys.cpl 1 +dll\cpl\ncpa\ncpa.cpl 1 ;dll\cpl\odbccp32\odbccp32.cpl 1 -;dll\cpl\powercfg\powercfg.cpl 1 -;dll\cpl\sysdm\sysdm.cpl 1 +dll\cpl\powercfg\powercfg.cpl 1 +dll\cpl\sysdm\sysdm.cpl 1 ;dll\cpl\telephon\telephon.cpl 1 -;dll\cpl\timedate\timedate.cpl 1 +dll\cpl\timedate\timedate.cpl 1 ;dll\cpl\usrmgr\usrmgr.cpl 1 -;dll\directx\amstream\amstream.dll 1 -;dll\directx\dinput\dinput.dll 1 -;dll\directx\dinput8\dinput8.dll 1 -;dll\directx\dplay\dplay.dll 1 -;dll\directx\dplayx\dplayx.dll 1 -;dll\directx\dsound\dsound.dll 1 -;dll\directx\dxdiagn\dxdiagn.dll 1 -;dll\directx\wine\ddraw\ddraw.dll 1 -;dll\directx\d3d8thk\d3d8thk.dll 1 -;dll\directx\devenum\devenum.dll 1 -;dll\directx\ksproxy\ksproxy.ax 1 -;dll\directx\ksuser\ksuser.dll 1 -;dll\directx\msdmo\msdmo.dll 1 -;dll\directx\quartz\quartz.dll 1 -;dll\directx\qedit\qedit.dll 1 -;dll\directx\wine\d3d8\d3d8.dll 1 -;dll\directx\wine\wined3d\wined3d.dll 1 -;dll\directx\wine\d3d9\d3d9.dll 1 +dll\directx\amstream\amstream.dll 1 +dll\directx\dinput\dinput.dll 1 +dll\directx\dinput8\dinput8.dll 1 +dll\directx\dmusic\dmusic.dll 1 +dll\directx\dplay\dplay.dll 1 +dll\directx\dplayx\dplayx.dll 1 +dll\directx\dsound\dsound.dll 1 +dll\directx\dxdiagn\dxdiagn.dll 1 +dll\directx\wine\ddraw\ddraw.dll 1 +dll\directx\d3d8thk\d3d8thk.dll 1 +dll\directx\devenum\devenum.dll 1 +dll\directx\ksproxy\ksproxy.ax 1 +dll\directx\ksuser\ksuser.dll 1 +dll\directx\msdmo\msdmo.dll 1 +dll\directx\quartz\quartz.dll 1 +dll\directx\qedit\qedit.dll 1 +dll\directx\wine\d3d8\d3d8.dll 1 +dll\directx\wine\wined3d\wined3d.dll 1 +dll\directx\wine\d3d9\d3d9.dll 1 -;dll\keyboard\kbda1\kbda1.dll 1 -;dll\keyboard\kbda2\kbda2.dll 1 -;dll\keyboard\kbda3\kbda3.dll 1 -;dll\keyboard\kbdal\kbdal.dll 1 -;dll\keyboard\kbdarme\kbdarme.dll 1 -;dll\keyboard\kbdarmw\kbdarmw.dll 1 -;dll\keyboard\kbdaze\kbdaze.dll 1 -;dll\keyboard\kbdazel\kbdazel.dll 1 -;dll\keyboard\kbdbgm\kbdbgm.dll 1 -;dll\keyboard\kbdbgt\kbdbgt.dll 1 -;dll\keyboard\kbdblr\kbdblr.dll 1 -;dll\keyboard\kbdbr\kbdbr.dll 1 -;dll\keyboard\kbdbga\kbdbga.dll 1 -;dll\keyboard\kbdbe\kbdbe.dll 1 -;dll\keyboard\kbdbur\kbdbur.dll 1 -;dll\keyboard\kbdcan\kbdcan.dll 1 -;dll\keyboard\kbdcr\kbdcr.dll 1 -;dll\keyboard\kbdcz\kbdcz.dll 1 -;dll\keyboard\kbdcz1\kbdcz1.dll 1 -;dll\keyboard\kbdda\kbdda.dll 1 -;dll\keyboard\kbddv\kbddv.dll 1 -;dll\keyboard\kbdes\kbdes.dll 1 -;dll\keyboard\kbdest\kbdest.dll 1 -;dll\keyboard\kbdfc\kbdfc.dll 1 -;dll\keyboard\kbdfi\kbdfi.dll 1 -;dll\keyboard\kbdfr\kbdfr.dll 1 -;dll\keyboard\kbdgeo\kbdgeo.dll 1 -;dll\keyboard\kbdgerg\kbdgerg.dll 1 -;dll\keyboard\kbdgneo\kbdgneo.dll 1 -;dll\keyboard\kbdgrist\kbdgrist.dll 1 -;dll\keyboard\kbdgr\kbdgr.dll 1 -;dll\keyboard\kbdhe\kbdhe.dll 1 -;dll\keyboard\kbdheb\kbdheb.dll 1 -;dll\keyboard\kbdhu\kbdhu.dll 1 -;dll\keyboard\kbdic\kbdic.dll 1 -;dll\keyboard\kbdinasa\kbdinasa.dll 1 -;dll\keyboard\kbdinben\kbdinben.dll 1 -;dll\keyboard\kbdindev\kbdindev.dll 1 -;dll\keyboard\kbdinguj\kbdinguj.dll 1 -;dll\keyboard\kbdinmal\kbdinmal.dll 1 -;dll\keyboard\kbdir\kbdir.dll 1 -;dll\keyboard\kbdit\kbdit.dll 1 -;dll\keyboard\kbdja\kbdja.dll 1 -;dll\keyboard\kbdkaz\kbdkaz.dll 1 -;dll\keyboard\kbdla\kbdla.dll 1 -;dll\keyboard\kbdlt1\kbdlt1.dll 1 -;dll\keyboard\kbdlv\kbdlv.dll 1 -;dll\keyboard\kbdmac\kbdmac.dll 1 -;dll\keyboard\kbdne\kbdne.dll 1 -;dll\keyboard\kbdno\kbdno.dll 1 -;dll\keyboard\kbdpl1\kbdpl1.dll 1 -;dll\keyboard\kbdpo\kbdpo.dll 1 -;dll\keyboard\kbdro\kbdro.dll 1 -;dll\keyboard\kbdru\kbdru.dll 1 -;dll\keyboard\kbdru1\kbdru1.dll 1 -;dll\keyboard\kbdsg\kbdsg.dll 1 -;dll\keyboard\kbdsk\kbdsk.dll 1 -;dll\keyboard\kbdsk1\kbdsk1.dll 1 -;dll\keyboard\kbdsw\kbdsw.dll 1 -;dll\keyboard\kbdtat\kbdtat.dll 1 -;dll\keyboard\kbdth0\kbdth0.dll 1 -;dll\keyboard\kbdth1\kbdth1.dll 1 -;dll\keyboard\kbdth2\kbdth2.dll 1 -;dll\keyboard\kbdth3\kbdth3.dll 1 -;dll\keyboard\kbdtuf\kbdtuf.dll 1 -;dll\keyboard\kbdtuq\kbdtuq.dll 1 -;dll\keyboard\kbduk\kbduk.dll 1 -;dll\keyboard\kbdur\kbdur.dll 1 -;dll\keyboard\kbdurs\kbdurs.dll 1 -;dll\keyboard\kbdus\kbdus.dll 1 -;dll\keyboard\kbdusa\kbdusa.dll 1 -;dll\keyboard\kbdusl\kbdusl.dll 1 -;dll\keyboard\kbdusr\kbdusr.dll 1 -;dll\keyboard\kbdusx\kbdusx.dll 1 -;dll\keyboard\kbduzb\kbduzb.dll 1 -;dll\keyboard\kbdvntc\kbdvntc.dll 1 -;dll\keyboard\kbdycc\kbdycc.dll 1 -;dll\keyboard\kbdycl\kbdycl.dll 1 -;dll\keyboard\kbdko\kbdko.dll 1 +dll\keyboard\kbda1\kbda1.dll 1 +dll\keyboard\kbda2\kbda2.dll 1 +dll\keyboard\kbda3\kbda3.dll 1 +dll\keyboard\kbdal\kbdal.dll 1 +dll\keyboard\kbdarme\kbdarme.dll 1 +dll\keyboard\kbdarmw\kbdarmw.dll 1 +dll\keyboard\kbdaze\kbdaze.dll 1 +dll\keyboard\kbdazel\kbdazel.dll 1 +dll\keyboard\kbdbgm\kbdbgm.dll 1 +dll\keyboard\kbdbgt\kbdbgt.dll 1 +dll\keyboard\kbdblr\kbdblr.dll 1 +dll\keyboard\kbdbr\kbdbr.dll 1 +dll\keyboard\kbdbga\kbdbga.dll 1 +dll\keyboard\kbdbe\kbdbe.dll 1 +dll\keyboard\kbdbur\kbdbur.dll 1 +dll\keyboard\kbdcan\kbdcan.dll 1 +dll\keyboard\kbdcr\kbdcr.dll 1 +dll\keyboard\kbdcz\kbdcz.dll 1 +dll\keyboard\kbdcz1\kbdcz1.dll 1 +dll\keyboard\kbdda\kbdda.dll 1 +dll\keyboard\kbddv\kbddv.dll 1 +dll\keyboard\kbdes\kbdes.dll 1 +dll\keyboard\kbdest\kbdest.dll 1 +dll\keyboard\kbdfc\kbdfc.dll 1 +dll\keyboard\kbdfi\kbdfi.dll 1 +dll\keyboard\kbdfr\kbdfr.dll 1 +dll\keyboard\kbdgeo\kbdgeo.dll 1 +dll\keyboard\kbdgerg\kbdgerg.dll 1 +dll\keyboard\kbdgneo\kbdgneo.dll 1 +dll\keyboard\kbdgrist\kbdgrist.dll 1 +dll\keyboard\kbdgr\kbdgr.dll 1 +dll\keyboard\kbdhe\kbdhe.dll 1 +dll\keyboard\kbdheb\kbdheb.dll 1 +dll\keyboard\kbdhu\kbdhu.dll 1 +dll\keyboard\kbdic\kbdic.dll 1 +dll\keyboard\kbdinasa\kbdinasa.dll 1 +dll\keyboard\kbdinben\kbdinben.dll 1 +dll\keyboard\kbdindev\kbdindev.dll 1 +dll\keyboard\kbdinguj\kbdinguj.dll 1 +dll\keyboard\kbdinmal\kbdinmal.dll 1 +dll\keyboard\kbdir\kbdir.dll 1 +dll\keyboard\kbdit\kbdit.dll 1 +dll\keyboard\kbdja\kbdja.dll 1 +dll\keyboard\kbdkaz\kbdkaz.dll 1 +dll\keyboard\kbdla\kbdla.dll 1 +dll\keyboard\kbdlt1\kbdlt1.dll 1 +dll\keyboard\kbdlv\kbdlv.dll 1 +dll\keyboard\kbdmac\kbdmac.dll 1 +dll\keyboard\kbdne\kbdne.dll 1 +dll\keyboard\kbdno\kbdno.dll 1 +dll\keyboard\kbdpl1\kbdpl1.dll 1 +dll\keyboard\kbdpo\kbdpo.dll 1 +dll\keyboard\kbdro\kbdro.dll 1 +dll\keyboard\kbdru\kbdru.dll 1 +dll\keyboard\kbdru1\kbdru1.dll 1 +dll\keyboard\kbdsg\kbdsg.dll 1 +dll\keyboard\kbdsk\kbdsk.dll 1 +dll\keyboard\kbdsk1\kbdsk1.dll 1 +dll\keyboard\kbdsw\kbdsw.dll 1 +dll\keyboard\kbdtat\kbdtat.dll 1 +dll\keyboard\kbdth0\kbdth0.dll 1 +dll\keyboard\kbdth1\kbdth1.dll 1 +dll\keyboard\kbdth2\kbdth2.dll 1 +dll\keyboard\kbdth3\kbdth3.dll 1 +dll\keyboard\kbdtuf\kbdtuf.dll 1 +dll\keyboard\kbdtuq\kbdtuq.dll 1 +dll\keyboard\kbduk\kbduk.dll 1 +dll\keyboard\kbdur\kbdur.dll 1 +dll\keyboard\kbdurs\kbdurs.dll 1 +dll\keyboard\kbdus\kbdus.dll 1 +dll\keyboard\kbdusa\kbdusa.dll 1 +dll\keyboard\kbdusl\kbdusl.dll 1 +dll\keyboard\kbdusr\kbdusr.dll 1 +dll\keyboard\kbdusx\kbdusx.dll 1 +dll\keyboard\kbduzb\kbduzb.dll 1 +dll\keyboard\kbdvntc\kbdvntc.dll 1 +dll\keyboard\kbdycc\kbdycc.dll 1 +dll\keyboard\kbdycl\kbdycl.dll 1 +dll\keyboard\kbdko\kbdko.dll 1 -;dll\nt;dll\ntdll.dll 1 +dll\ntdll\ntdll.dll 1 -;dll\win32\acledit\acledit.dll 1 -;dll\win32\aclui\aclui.dll 1 -;dll\win32\activeds\activeds.dll 1 -;dll\win32\advapi32\advapi32.dll 1 -;dll\win32\advpack\advpack.dll 1 -;dll\win32\actxprxy\actxprxy.dll 1 -;dll\win32\atl\atl.dll 1 -;dll\win32\authz\authz.dll 1 -;dll\win32\avicap32\avicap32.dll 1 -;dll\win32\avifil32\avifil32.dll 1 -;dll\win32\bcrypt\bcrypt.dll 1 -;dll\win32\beepmidi\beepmidi.dll 1 -;dll\win32\browseui\browseui.dll 1 -;dll\win32\cabinet\cabinet.dll 1 -;dll\win32\cards\cards.dll 1 -;dll\win32\cfgmgr32\cfgmgr32.dll 1 -;dll\win32\clusapi\clusapi.dll 1 -;dll\win32\comcat\comcat.dll 1 -;dll\win32\comctl32\comctl32.dll 1 -;dll\win32\comdlg32\comdlg32.dll 1 -;dll\win32\compstui\compstui.dll 1 -;dll\win32\credui\credui.dll 1 -;dll\win32\crtdll\crtdll.dll 1 -;dll\win32\crypt32\crypt32.dll 1 -;dll\win32\cryptdlg\cryptdlg.dll 1 -;dll\win32\cryptdll\cryptdll.dll 1 -;dll\win32\cryptnet\cryptnet.dll 1 -;dll\win32\cryptui\cryptui.dll 1 -;dll\win32\dbghelp\dbghelp.dll 1 -;dll\win32\dciman32\dciman32.dll 1 -;dll\win32\dwmapi\dwmapi.dll 1 -;dll\win32\devmgr\devmgr.dll 1 -;dll\win32\dhcpcsvc\dhcpcsvc.dll 1 -;dll\win32\dnsapi\dnsapi.dll 1 -;dll\win32\fmifs\fmifs.dll 1 -;dll\win32\fusion\fusion.dll 1 -;dll\win32\gdi32\gdi32.dll 1 -;dll\win32\gdiplus\gdiplus.dll 1 -;dll\win32\getuname\getuname.dll 1 -;dll\win32\glu32\glu32.dll 1 -;dll\win32\hhctrl.ocx\hhctrl.ocx 1 -;dll\win32\hid\hid.dll 1 -;dll\win32\hlink\hlink.dll 1 -;dll\win32\hnetcfg\hnetcfg.dll 1 -;dll\win32\httpapi\httpapi.dll 1 -;dll\win32\iccvid\iccvid.dll 1 -;dll\win32\icmp\icmp.dll 1 -;dll\win32\imaadp32.acm\imaadp32.acm 1 -;dll\win32\imagehlp\imagehlp.dll 1 -;dll\win32\imm32\imm32.dll 1 -;dll\win32\inetcomm\inetcomm.dll 1 -;dll\win32\inetmib1\inetmib1.dll 1 -;dll\win32\initpki\initpki.dll 1 -;dll\win32\inseng\inseng.dll 1 -;dll\win32\iphlpapi\iphlpapi.dll 1 -;dll\win32\itircl\itircl.dll 1 -;dll\win32\itss\itss.dll 1 -;dll\win32\jscript\jscript.dll 1 -;dll\win32\kernel32\kernel32.dll 1 -;dll\win32\loadperf\loadperf.dll 1 -;dll\win32\localspl\localspl.dll 1 -;dll\win32\localui\localui.dll 1 -;dll\win32\lsasrv\lsasrv.dll 1 -;dll\win32\lz32\lz32.dll 1 -;dll\win32\mapi32\mapi32.dll 1 -;dll\win32\mciavi32\mciavi32.dll 1 -;dll\win32\mcicda\mcicda.dll 1 -;dll\win32\mciqtz32\mciqtz32.dll 1 -;dll\win32\mciseq\mciseq.dll 1 -;dll\win32\mciwave\mciwave.dll 1 -;dll\win32\mlang\mlang.dll 1 -;dll\win32\mmdrv\mmdrv.dll 1 -;dll\win32\modemui\modemui.dll 1 -;dll\win32\mpr\mpr.dll 1 -;dll\win32\mprapi\mprapi.dll 1 -;dll\win32\msacm32\msacm32.dll 1 -;dll\win32\msacm32\msacm32.drv\msacm32.drv 1 -;dll\win32\msadp32.acm\msadp32.acm 1 -;dll\win32\msafd\msafd.dll 1 -;dll\win32\mscat32\mscat32.dll 1 -;dll\win32\mscms\mscms.dll 1 -;dll\win32\mscoree\mscoree.dll 1 -;dll\win32\msctf\msctf.dll 1 -;dll\win32\msftedit\msftedit.dll 1 -;dll\win32\msg711.acm\msg711.acm 1 -;dll\win32\msgina\msgina.dll 1 -;dll\win32\msgsm32.acm\msgsm32.acm 1 -;dll\win32\mshtml\mshtml.dll 1 -;dll\win32\mshtml.tlb\mshtml.tlb 1 -;dll\win32\msi\msi.dll 1 -;dll\win32\msimg32\msimg32.dll 1 -;dll\win32\msimtf\msimtf.dll 1 -;dll\win32\msisip\msisip.dll 1 -;dll\win32\msisys.ocx\msisys.ocx 1 -;dll\win32\msnet32\msnet32.dll 1 -;dll\win32\msrle32\msrle32.dll 1 -;dll\win32\mssign32\mssign32.dll 1 -;dll\win32\mssip32\mssip32.dll 1 -;dll\win32\mstask\mstask.dll 1 -;dll\win32\msvcrt\msvcrt.dll 1 -;dll\win32\msvcrt20\msvcrt20.dll 1 -;dll\win32\msvcrt40\msvcrt40.dll 1 -;dll\win32\msvfw32\msvfw32.dll 1 -;dll\win32\msvidc32\msvidc32.dll 1 -;dll\win32\mswsock\mswsock.dll 1 -;dll\win32\msxml3\msxml3.dll 1 -;dll\win32\nddeapi\nddeapi.dll 1 -;dll\win32\netapi32\netapi32.dll 1 -;dll\win32\netcfgx\netcfgx.dll 1 -;dll\win32\netid\netid.dll 1 -;dll\win32\netshell\netshell.dll 1 -;dll\win32\newdev\newdev.dll 1 -;dll\win32\ntdsapi\ntdsapi.dll 1 -;dll\win32\ntlanman\ntlanman.dll 1 -;dll\win32\ntmarta\ntmarta.dll 1 -;dll\win32\ntprint\ntprint.dll 1 -;dll\win32\objsel\objsel.dll 1 -;dll\win32\odbc32\odbc32.dll 1 -;dll\win32\odbccp32\odbccp32.dll 1 -;dll\win32\ole32\ole32.dll 1 -;dll\win32\oleacc\oleacc.dll 1 -;dll\win32\oleaut32\oleaut32.dll 1 -;dll\win32\olecli32\olecli32.dll 1 -;dll\win32\oledlg\oledlg.dll 1 -;dll\win32\olepro32\olepro32.dll 1 -;dll\win32\olesvr32\olesvr32.dll 1 -;dll\win32\olethk32\olethk32.dll 1 -;dll\win32\opengl32\opengl32.dll 1 -;dll\win32\pdh\pdh.dll 1 -;dll\win32\pidgen\pidgen.dll 1 -;dll\win32\powrprof\powrprof.dll 1 -;dll\win32\printui\printui.dll 1 -;dll\win32\psapi\psapi.dll 1 -;dll\win32\pstorec\pstorec.dll 1 -;dll\win32\qmgr\qmgr.dll 1 -;dll\win32\qmgrprxy\qmgrprxy.dll 1 -;dll\win32\query\query.dll 1 -;dll\win32\rasapi32\rasapi32.dll 1 -;dll\win32\rasdlg\rasdlg.dll 1 -;dll\win32\resutils\resutils.dll 1 -;dll\win32\rasman\rasman.dll 1 -;dll\win32\riched20\riched20.dll 1 -;dll\win32\riched32\riched32.dll 1 -;dll\win32\rpcrt4\rpcrt4.dll 1 -;dll\win32\rsabase\rsabase.dll 1 -;dll\win32\rsaenh\rsaenh.dll 1 -;dll\win32\samlib\samlib.dll 1 -;dll\win32\samsrv\samsrv.dll 1 -;dll\win32\sccbase\sccbase.dll 1 -;dll\win32\schannel\schannel.dll 1 -;dll\win32\secur32\secur32.dll 1 -;dll\win32\security\security.dll 1 -;dll\win32\sensapi\sensapi.dll 1 -;dll\win32\serialui\serialui.dll 1 -;dll\win32\setupapi\setupapi.dll 1 -;dll\win32\sfc\sfc.dll 1 -;dll\win32\sfc_os\sfc_os.dll 1 -;dll\win32\shdoclc\shdoclc.dll 1 -;dll\win32\shdocvw\shdocvw.dll 1 -;dll\win32\shell32\shell32.dll 1 -;dll\win32\shfolder\shfolder.dll 1 -;dll\win32\shimgvw\shimgvw.dll 1 -;dll\win32\shlwapi\shlwapi.dll 1 -;dll\win32\slbcsp\slbcsp.dll 1 -;dll\win32\smdll\smdll.dll 1 -;dll\win32\snmpapi\snmpapi.dll 1 -;dll\win32\softpub\softpub.dll 1 -;dll\win32\spoolss\spoolss.dll 1 -;dll\win32\srclient\srclient.dll 1 -;dll\win32\stdole2.tlb\stdole2.tlb 1 -;dll\win32\stdole32.tlb\stdole32.tlb 1 -;dll\win32\sti\sti.dll 1 -;dll\win32\sxs\sxs.dll 1 -;dll\win32\syssetup\syssetup.dll 1 -;dll\win32\t2embed\t2embed.dll 1 -;dll\win32\tapi32\tapi32.dll 1 -;dll\win32\tapiui\tapiui.dll 1 -;dll\win32\traffic\traffic.dll 1 -;dll\win32\twain_32\twain_32.dll 1 -;dll\win32\uext2\uext2.dll 1 -;dll\win32\ufat\ufat.dll 1 -;dll\win32\ufatx\ufatx.dll 1 optional -;dll\win32\untfs\untfs.dll 1 -;dll\win32\updspapi\updspapi.dll 1 -;dll\win32\url\url.dll 1 -;dll\win32\urlmon\urlmon.dll 1 -;dll\win32\user32\user32.dll 1 -;dll\win32\userenv\userenv.dll 1 -;dll\win32\usp10\usp10.dll 1 -;dll\win32\uxtheme\uxtheme.dll 1 -;dll\win32\vdmdbg\vdmdbg.dll 1 -;dll\win32\version\version.dll 1 -;dll\win32\windowscodecs\windowscodecs.dll 1 -;dll\win32\winemp3.acm\winemp3.acm 1 -;dll\win32\winfax\winfax.dll 1 -;dll\win32\winhttp\winhttp.dll 1 -;dll\win32\wininet\wininet.dll 1 -;dll\win32\winmm\winmm.dll 1 -;dll\win32\winspool\winspool.drv 1 -;dll\win32\winsta\winsta.dll 1 -;dll\win32\wlanapi\wlanapi.dll 1 -;dll\win32\wintrust\wintrust.dll 1 -;dll\win32\wldap32\wldap32.dll 1 -;dll\win32\wmi\wmi.dll 1 -;dll\win32\ws2_32\ws2_32.dll 1 -;dll\win32\ws2help\ws2help.dll 1 -;dll\win32\wshirda\wshirda.dll 1 -;dll\win32\wshtcpip\wshtcpip.dll 1 -;dll\win32\wsock32\wsock32.dll 1 -;dll\win32\wtsapi32\wtsapi32.dll 1 -;dll\win32\wuapi\wuapi.dll 1 -;dll\win32\xinput1_1\xinput1_1.dll 1 -;dll\win32\xinput1_2\xinput1_2.dll 1 -;dll\win32\xinput1_3\xinput1_3.dll 1 -;dll\win32\xinput9_1_0\xinput9_1_0.dll 1 -;dll\win32\xmllite\xmllite.dll 1 -;dll\win32\winmm\midimap\midimap.dll 1 -;dll\win32\wdmaud.drv\wdmaud.drv 1 +dll\win32\acledit\acledit.dll 1 +dll\win32\aclui\aclui.dll 1 +dll\win32\activeds\activeds.dll 1 +dll\win32\advapi32\advapi32.dll 1 +dll\win32\advpack\advpack.dll 1 +dll\win32\actxprxy\actxprxy.dll 1 +dll\win32\atl\atl.dll 1 +dll\win32\authz\authz.dll 1 +dll\win32\avicap32\avicap32.dll 1 +dll\win32\avifil32\avifil32.dll 1 +dll\win32\bcrypt\bcrypt.dll 1 +dll\win32\beepmidi\beepmidi.dll 1 +dll\win32\browseui\browseui.dll 1 +dll\win32\cabinet\cabinet.dll 1 +dll\win32\cards\cards.dll 1 +dll\win32\cfgmgr32\cfgmgr32.dll 1 +dll\win32\clusapi\clusapi.dll 1 +dll\win32\comcat\comcat.dll 1 +dll\win32\comctl32\comctl32.dll 1 +dll\win32\comdlg32\comdlg32.dll 1 +dll\win32\compstui\compstui.dll 1 +dll\win32\credui\credui.dll 1 +dll\win32\crtdll\crtdll.dll 1 +dll\win32\crypt32\crypt32.dll 1 +dll\win32\cryptdlg\cryptdlg.dll 1 +dll\win32\cryptdll\cryptdll.dll 1 +dll\win32\cryptnet\cryptnet.dll 1 +dll\win32\cryptui\cryptui.dll 1 +dll\win32\dbghelp\dbghelp.dll 1 +dll\win32\dciman32\dciman32.dll 1 +dll\win32\dwmapi\dwmapi.dll 1 +dll\win32\devmgr\devmgr.dll 1 +dll\win32\dhcpcsvc\dhcpcsvc.dll 1 +dll\win32\dnsapi\dnsapi.dll 1 +dll\win32\fmifs\fmifs.dll 1 +dll\win32\fusion\fusion.dll 1 +dll\win32\gdi32\gdi32.dll 1 +dll\win32\gdiplus\gdiplus.dll 1 +dll\win32\getuname\getuname.dll 1 +dll\win32\glu32\glu32.dll 1 +dll\win32\hhctrl.ocx\hhctrl.ocx 1 +dll\win32\hid\hid.dll 1 +dll\win32\hlink\hlink.dll 1 +dll\win32\hnetcfg\hnetcfg.dll 1 +dll\win32\httpapi\httpapi.dll 1 +dll\win32\iccvid\iccvid.dll 1 +dll\win32\icmp\icmp.dll 1 +dll\win32\imaadp32.acm\imaadp32.acm 1 +dll\win32\imagehlp\imagehlp.dll 1 +dll\win32\imm32\imm32.dll 1 +dll\win32\inetcomm\inetcomm.dll 1 +dll\win32\inetmib1\inetmib1.dll 1 +dll\win32\initpki\initpki.dll 1 +dll\win32\inseng\inseng.dll 1 +dll\win32\iphlpapi\iphlpapi.dll 1 +dll\win32\itircl\itircl.dll 1 +dll\win32\itss\itss.dll 1 +dll\win32\jscript\jscript.dll 1 +dll\win32\kernel32\kernel32.dll 1 +dll\win32\loadperf\loadperf.dll 1 +dll\win32\localspl\localspl.dll 1 +dll\win32\localui\localui.dll 1 +dll\win32\lsasrv\lsasrv.dll 1 +dll\win32\lz32\lz32.dll 1 +dll\win32\mapi32\mapi32.dll 1 +dll\win32\mciavi32\mciavi32.dll 1 +dll\win32\mcicda\mcicda.dll 1 +dll\win32\mciqtz32\mciqtz32.dll 1 +dll\win32\mciseq\mciseq.dll 1 +dll\win32\mciwave\mciwave.dll 1 +dll\win32\mlang\mlang.dll 1 +dll\win32\mmdrv\mmdrv.dll 1 +dll\win32\modemui\modemui.dll 1 +dll\win32\mpr\mpr.dll 1 +dll\win32\mprapi\mprapi.dll 1 +dll\win32\msacm32\msacm32.dll 1 +dll\win32\msacm32\msacm32.drv\msacm32.drv 1 +dll\win32\msadp32.acm\msadp32.acm 1 +dll\win32\msafd\msafd.dll 1 +dll\win32\mscat32\mscat32.dll 1 +dll\win32\mscms\mscms.dll 1 +dll\win32\mscoree\mscoree.dll 1 +dll\win32\msctf\msctf.dll 1 +dll\win32\msftedit\msftedit.dll 1 +dll\win32\msg711.acm\msg711.acm 1 +dll\win32\msgina\msgina.dll 1 +dll\win32\msgsm32.acm\msgsm32.acm 1 +dll\win32\mshtml\mshtml.dll 1 +dll\win32\mshtml.tlb\mshtml.tlb 1 +dll\win32\msi\msi.dll 1 +dll\win32\msimg32\msimg32.dll 1 +dll\win32\msimtf\msimtf.dll 1 +dll\win32\msisip\msisip.dll 1 +dll\win32\msisys.ocx\msisys.ocx 1 +dll\win32\msnet32\msnet32.dll 1 +dll\win32\msrle32\msrle32.dll 1 +dll\win32\mssign32\mssign32.dll 1 +dll\win32\mssip32\mssip32.dll 1 +dll\win32\mstask\mstask.dll 1 +dll\win32\msvcrt\msvcrt.dll 1 +dll\win32\msvcrt20\msvcrt20.dll 1 +dll\win32\msvcrt40\msvcrt40.dll 1 +dll\win32\msvfw32\msvfw32.dll 1 +dll\win32\msvidc32\msvidc32.dll 1 +dll\win32\mswsock\mswsock.dll 1 +dll\win32\msxml3\msxml3.dll 1 +dll\win32\nddeapi\nddeapi.dll 1 +dll\win32\netapi32\netapi32.dll 1 +dll\win32\netcfgx\netcfgx.dll 1 +dll\win32\netid\netid.dll 1 +dll\win32\netshell\netshell.dll 1 +dll\win32\newdev\newdev.dll 1 +dll\win32\ntdsapi\ntdsapi.dll 1 +dll\win32\ntlanman\ntlanman.dll 1 +dll\win32\ntmarta\ntmarta.dll 1 +dll\win32\ntprint\ntprint.dll 1 +dll\win32\objsel\objsel.dll 1 +dll\win32\odbc32\odbc32.dll 1 +dll\win32\odbccp32\odbccp32.dll 1 +dll\win32\ole32\ole32.dll 1 +dll\win32\oleacc\oleacc.dll 1 +dll\win32\oleaut32\oleaut32.dll 1 +dll\win32\olecli32\olecli32.dll 1 +dll\win32\oledlg\oledlg.dll 1 +dll\win32\olepro32\olepro32.dll 1 +dll\win32\olesvr32\olesvr32.dll 1 +dll\win32\olethk32\olethk32.dll 1 +dll\win32\opengl32\opengl32.dll 1 +dll\win32\pdh\pdh.dll 1 +dll\win32\pidgen\pidgen.dll 1 +dll\win32\powrprof\powrprof.dll 1 +dll\win32\printui\printui.dll 1 +dll\win32\psapi\psapi.dll 1 +dll\win32\pstorec\pstorec.dll 1 +dll\win32\qmgr\qmgr.dll 1 +dll\win32\qmgrprxy\qmgrprxy.dll 1 +dll\win32\query\query.dll 1 +dll\win32\rasadhlp\rasadhlp.dll 1 +dll\win32\rasapi32\rasapi32.dll 1 +dll\win32\rasdlg\rasdlg.dll 1 +dll\win32\resutils\resutils.dll 1 +dll\win32\rasman\rasman.dll 1 +dll\win32\riched20\riched20.dll 1 +dll\win32\riched32\riched32.dll 1 +dll\win32\rpcrt4\rpcrt4.dll 1 +dll\win32\rsabase\rsabase.dll 1 +dll\win32\rsaenh\rsaenh.dll 1 +dll\win32\samlib\samlib.dll 1 +dll\win32\samsrv\samsrv.dll 1 +dll\win32\sccbase\sccbase.dll 1 +dll\win32\schannel\schannel.dll 1 +dll\win32\secur32\secur32.dll 1 +dll\win32\security\security.dll 1 +dll\win32\sensapi\sensapi.dll 1 +dll\win32\serialui\serialui.dll 1 +dll\win32\setupapi\setupapi.dll 1 +dll\win32\sfc\sfc.dll 1 +dll\win32\sfc_os\sfc_os.dll 1 +dll\win32\shdoclc\shdoclc.dll 1 +dll\win32\shdocvw\shdocvw.dll 1 +dll\win32\shell32\shell32.dll 1 +dll\win32\shfolder\shfolder.dll 1 +dll\win32\shimgvw\shimgvw.dll 1 +dll\win32\shlwapi\shlwapi.dll 1 +dll\win32\slbcsp\slbcsp.dll 1 +dll\win32\smdll\smdll.dll 1 +dll\win32\snmpapi\snmpapi.dll 1 +dll\win32\softpub\softpub.dll 1 +dll\win32\spoolss\spoolss.dll 1 +dll\win32\srclient\srclient.dll 1 +dll\win32\stdole2.tlb\stdole2.tlb 1 +dll\win32\stdole32.tlb\stdole32.tlb 1 +dll\win32\sti\sti.dll 1 +dll\win32\sxs\sxs.dll 1 +dll\win32\syssetup\syssetup.dll 1 +dll\win32\t2embed\t2embed.dll 1 +dll\win32\tapi32\tapi32.dll 1 +dll\win32\tapiui\tapiui.dll 1 +dll\win32\traffic\traffic.dll 1 +dll\win32\twain_32\twain_32.dll 1 +dll\win32\uext2\uext2.dll 1 +dll\win32\ufat\ufat.dll 1 +dll\win32\ufatx\ufatx.dll 1 optional +dll\win32\untfs\untfs.dll 1 +dll\win32\updspapi\updspapi.dll 1 +dll\win32\url\url.dll 1 +dll\win32\urlmon\urlmon.dll 1 +dll\win32\user32\user32.dll 1 +dll\win32\userenv\userenv.dll 1 +dll\win32\usp10\usp10.dll 1 +dll\win32\uxtheme\uxtheme.dll 1 +dll\win32\vdmdbg\vdmdbg.dll 1 +dll\win32\version\version.dll 1 +dll\win32\windowscodecs\windowscodecs.dll 1 +dll\win32\winemp3.acm\winemp3.acm 1 +dll\win32\winfax\winfax.dll 1 +dll\win32\winhttp\winhttp.dll 1 +dll\win32\wininet\wininet.dll 1 +dll\win32\winmm\winmm.dll 1 +dll\win32\winspool\winspool.drv 1 +dll\win32\winsta\winsta.dll 1 +dll\win32\wlanapi\wlanapi.dll 1 +dll\win32\wintrust\wintrust.dll 1 +dll\win32\wldap32\wldap32.dll 1 +dll\win32\wmi\wmi.dll 1 +dll\win32\ws2_32\ws2_32.dll 1 +dll\win32\ws2help\ws2help.dll 1 +dll\win32\wshirda\wshirda.dll 1 +dll\win32\wshtcpip\wshtcpip.dll 1 +dll\win32\wsock32\wsock32.dll 1 +dll\win32\wtsapi32\wtsapi32.dll 1 +dll\win32\wuapi\wuapi.dll 1 +dll\win32\xinput1_1\xinput1_1.dll 1 +dll\win32\xinput1_2\xinput1_2.dll 1 +dll\win32\xinput1_3\xinput1_3.dll 1 +dll\win32\xinput9_1_0\xinput9_1_0.dll 1 +dll\win32\xmllite\xmllite.dll 1 +dll\win32\winmm\midimap\midimap.dll 1 +dll\win32\wdmaud.drv\wdmaud.drv 1 ; Shell Extensions -;dll\shellext\deskadp\deskadp.dll 1 -;dll\shellext\deskmon\deskmon.dll 1 +dll\shellext\deskadp\deskadp.dll 1 +dll\shellext\deskmon\deskmon.dll 1 ; Drivers -;drivers\base\bootvid\bootvid.dll 1 -;drivers\base\beep\beep.sys 2 -;drivers\base\null\null.sys 2 +drivers\base\bootvid\bootvid.dll 1 +drivers\base\beep\beep.sys 2 +drivers\base\null\null.sys 2 -;drivers\bus\isapnp\isapnp.sys 2 +drivers\bus\isapnp\isapnp.sys 2 -;drivers\directx\dxapi\dxapi.sys 2 -;drivers\directx\dxg\dxg.sys 2 -;drivers\directx\dxgthk\dxgthk.sys 2 +drivers\directx\dxapi\dxapi.sys 2 +drivers\directx\dxg\dxg.sys 2 +drivers\directx\dxgthk\dxgthk.sys 2 -;drivers\filesystems\fs_rec\fs_rec.sys 2 -;drivers\filesystems\msfs\msfs.sys 2 -;drivers\filesystems\mup\mup.sys 2 -;drivers\filesystems\npfs\npfs.sys 2 +drivers\filesystems\fs_rec\fs_rec.sys 2 +drivers\filesystems\msfs\msfs.sys 2 +drivers\filesystems\mup\mup.sys 2 +drivers\filesystems\npfs\npfs.sys 2 -;drivers\input\mouclass\mouclass.sys 2 -;drivers\input\sermouse\sermouse.sys 2 +drivers\input\mouclass\mouclass.sys 2 +drivers\input\sermouse\sermouse.sys 2 -;drivers\ksfilter\ks\ks.sys 2 +drivers\ksfilter\ks\ks.sys 2 -;drivers\network\afd\afd.sys 2 -;drivers\network\ndis\ndis.sys 2 -;drivers\network\tcpip\tcpip.sys 2 -;drivers\network\tdi\tdi.sys 2 -;drivers\network\dd\ne2000\ne2000.sys 2 -;drivers\network\dd\pcnet\pcnet.sys 2 +drivers\network\afd\afd.sys 2 +drivers\network\ndis\ndis.sys 2 +drivers\network\tcpip\tcpip.sys 2 +drivers\network\tdi\tdi.sys 2 +drivers\network\dd\ne2000\ne2000.sys 2 +drivers\network\dd\pcnet\pcnet.sys 2 -;drivers\serial\serenum\serenum.sys 2 -;drivers\serial\serial\serial.sys 2 +drivers\serial\serenum\serenum.sys 2 +drivers\serial\serial\serial.sys 2 -;drivers\storage\ide\pciide\pciide.sys 2 -;drivers\storage\ide\pciidex\pciidex.sys 2 +drivers\storage\ide\pciide\pciide.sys 2 +drivers\storage\ide\pciidex\pciidex.sys 2 -;drivers\usb\miniport\usbohci\usbohci.sys . 2 -;drivers\usb\miniport\usbuhci\usbuhci.sys . 2 -;drivers\usb\usbhub\usbhub.sys . 2 -;drivers\usb\usbport\usbport.sys . 2 -;drivers\usb\nt4compat\usbdriver\usbdriver.sys 2 +;drivers\usb\miniport\usbohci\usbohci.sys 2 +;drivers\usb\miniport\usbuhci\usbuhci.sys 2 +;drivers\usb\usbhub\usbhub.sys 2 +;drivers\usb\usbport\usbport.sys 2 +drivers\usb\nt4compat\usbdriver\usbdriver.sys 2 -;drivers\video\displays\vga\vgaddi.dll 1 -;drivers\video\displays\framebuf\framebuf.dll 1 -;drivers\video\miniport\vga\vgamp.sys 2 -;drivers\video\miniport\vbe\vbemp.sys 2 -;drivers\video\videoprt\videoprt.sys 2 -;drivers\video\font\ftfd\ftfd.dll 1 +drivers\video\displays\vga\vgaddi.dll 1 +drivers\video\displays\framebuf\framebuf.dll 1 +drivers\video\miniport\vga\vgamp.sys 2 +drivers\video\miniport\vbe\vbemp.sys 2 +drivers\video\videoprt\videoprt.sys 2 +drivers\video\font\ftfd\ftfd.dll 1 -;drivers\wdm\audio\filters\kmixer\kmixer.sys 2 -;drivers\wdm\audio\sysaudio\sysaudio.sys 2 -;drivers\wdm\audio\legacy\wdmaud\wdmaud.sys 2 -;drivers\wdm\audio\backpln\portcls\portcls.sys 2 -;drivers\wdm\audio\drm\drmk\drmk.sys 2 -;drivers\wmi\wmilib.sys 2 +drivers\wdm\audio\filters\kmixer\kmixer.sys 2 +drivers\wdm\audio\sysaudio\sysaudio.sys 2 +drivers\wdm\audio\legacy\wdmaud\wdmaud.sys 2 +drivers\wdm\audio\backpln\portcls\portcls.sys 2 +drivers\wdm\audio\drm\drmk\drmk.sys 2 +drivers\wmi\wmilib.sys 2 ; Media -;media\fonts\DejaVuSans.ttf 3 -;media\fonts\DejaVuSans-Bold.ttf 3 -;media\fonts\DejaVuSans-BoldOblique.ttf 3 -;media\fonts\DejaVuSansMono.ttf 3 -;media\fonts\DejaVuSansMono-Bold.ttf 3 -;media\fonts\DejaVuSansMono-BoldOblique.ttf 3 -;media\fonts\DejaVuSansMono-Oblique.ttf 3 -;media\fonts\DejaVuSans-Oblique.ttf 3 -;media\fonts\DejaVuSerif.ttf 3 -;media\fonts\DejaVuSerif-Bold.ttf 3 -;media\fonts\DejaVuSerif-BoldItalic.ttf 3 -;media\fonts\DejaVuSerif-Italic.ttf 3 +media\fonts\DejaVuSans.ttf 3 +media\fonts\DejaVuSans-Bold.ttf 3 +media\fonts\DejaVuSans-BoldOblique.ttf 3 +media\fonts\DejaVuSansMono.ttf 3 +media\fonts\DejaVuSansMono-Bold.ttf 3 +media\fonts\DejaVuSansMono-BoldOblique.ttf 3 +media\fonts\DejaVuSansMono-Oblique.ttf 3 +media\fonts\DejaVuSans-Oblique.ttf 3 +media\fonts\DejaVuSerif.ttf 3 +media\fonts\DejaVuSerif-Bold.ttf 3 +media\fonts\DejaVuSerif-BoldItalic.ttf 3 +media\fonts\DejaVuSerif-Italic.ttf 3 -;media\fonts\FreeMono.ttf 3 -;media\fonts\FreeMonoBold.ttf 3 -;media\fonts\FreeMonoBoldOblique.ttf 3 -;media\fonts\FreeMonoOblique.ttf 3 +media\fonts\FreeMono.ttf 3 +media\fonts\FreeMonoBold.ttf 3 +media\fonts\FreeMonoBoldOblique.ttf 3 +media\fonts\FreeMonoOblique.ttf 3 -;media\fonts\LiberationMono-Bold.ttf 3 -;media\fonts\LiberationMono-BoldItalic.ttf 3 -;media\fonts\LiberationMono-Italic.ttf 3 -;media\fonts\LiberationMono-Regular.ttf 3 -;media\fonts\LiberationSans-Bold.ttf 3 -;media\fonts\LiberationSans-BoldItalic.ttf 3 -;media\fonts\LiberationSans-Italic.ttf 3 -;media\fonts\LiberationSans-Regular.ttf 3 -;media\fonts\LiberationSerif-Bold.ttf 3 -;media\fonts\LiberationSerif-BoldItalic.ttf 3 -;media\fonts\LiberationSerif-Italic.ttf 3 -;media\fonts\LiberationSerif-Regular.ttf 3 +media\fonts\LiberationMono-Bold.ttf 3 +media\fonts\LiberationMono-BoldItalic.ttf 3 +media\fonts\LiberationMono-Italic.ttf 3 +media\fonts\LiberationMono-Regular.ttf 3 +media\fonts\LiberationSans-Bold.ttf 3 +media\fonts\LiberationSans-BoldItalic.ttf 3 +media\fonts\LiberationSans-Italic.ttf 3 +media\fonts\LiberationSans-Regular.ttf 3 +media\fonts\LiberationSerif-Bold.ttf 3 +media\fonts\LiberationSerif-BoldItalic.ttf 3 +media\fonts\LiberationSerif-Italic.ttf 3 +media\fonts\LiberationSerif-Regular.ttf 3 -;media\fonts\Marlett.ttf 3 -;media\fonts\tahoma.ttf 3 -;media\fonts\tahomabd.ttf 3 +media\fonts\Marlett.ttf 3 +media\fonts\symbol.ttf 3 +media\fonts\tahoma.ttf 3 +media\fonts\tahomabd.ttf 3 -;media\nls\c_037.nls 1 -;media\nls\c_424.nls 1 -;media\nls\c_500.nls 1 -;media\nls\c_737.nls 1 -;media\nls\c_775.nls 1 -;media\nls\c_850.nls 1 -;media\nls\c_852.nls 1 -;media\nls\c_855.nls 1 -;media\nls\c_856.nls 1 -;media\nls\c_857.nls 1 -;media\nls\c_860.nls 1 -;media\nls\c_861.nls 1 -;media\nls\c_862.nls 1 -;media\nls\c_863.nls 1 -;media\nls\c_864.nls 1 -;media\nls\c_865.nls 1 -;media\nls\c_866.nls 1 -;media\nls\c_869.nls 1 -;media\nls\c_874.nls 1 -;media\nls\c_875.nls 1 -;media\nls\c_878.nls 1 -;media\nls\c_932.nls 1 -;media\nls\c_936.nls 1 -;media\nls\c_949.nls 1 -;media\nls\c_950.nls 1 -;media\nls\c_1006.nls 1 -;media\nls\c_1026.nls 1 -;media\nls\c_1250.nls 1 -;media\nls\c_1251.nls 1 -;media\nls\c_1253.nls 1 -;media\nls\c_1254.nls 1 -;media\nls\c_1255.nls 1 -;media\nls\c_1256.nls 1 -;media\nls\c_1257.nls 1 -;media\nls\c_1258.nls 1 -;media\nls\c_10000.nls 1 -;media\nls\c_10006.nls 1 -;media\nls\c_10007.nls 1 -;media\nls\c_10029.nls 1 -;media\nls\c_10079.nls 1 -;media\nls\c_10081.nls 1 -;media\nls\c_20866.nls 1 -;media\nls\c_21866.nls 1 -;media\nls\c_28591.nls 1 -;media\nls\c_28592.nls 1 -;media\nls\c_28593.nls 1 -;media\nls\c_28594.nls 1 -;media\nls\c_28595.nls 1 -;media\nls\c_28596.nls 1 -;media\nls\c_28597.nls 1 -;media\nls\c_28598.nls 1 -;media\nls\c_28599.nls 1 -;media\nls\c_28600.nls 1 -;media\nls\c_28603.nls 1 -;media\nls\c_28604.nls 1 -;media\nls\c_28605.nls 1 -;media\nls\c_28606.nls 1 -;media\drivers\etc\services 5 -;media\inf\audio.inf 6 -;media\inf\acpi.inf 6 -;media\inf\cdrom.inf 6 -;media\inf\display.inf 6 -;media\inf\font.inf 6 -;media\inf\fdc.inf 6 -;media\inf\hdc.inf 6 -;media\inf\intl.inf 6 -;media\inf\layout.inf 6 -;media\inf\machine.inf 6 -;media\inf\msmouse.inf 6 -;media\inf\keyboard.inf 6 -;media\inf\ks.inf 6 -;media\inf\NET_NIC.inf 6 -;media\inf\netamd.inf 6 -;media\inf\netisa.inf 6 -;media\inf\netrtpnt.inf 6 -;media\inf\nettcpip.inf 6 -;media\inf\ports.inf 6 -;media\inf\scsi.inf 6 -;media\inf\syssetup.inf 6 -;media\inf\usbport.inf 6 -;media\inf\usb.inf 6 -;media\inf\usbstor.inf 6 -;media\inf\xboxdisp.inf 6 +media\nls\c_037.nls 1 +media\nls\c_424.nls 1 +media\nls\c_500.nls 1 +media\nls\c_737.nls 1 +media\nls\c_775.nls 1 +media\nls\c_850.nls 1 +media\nls\c_852.nls 1 +media\nls\c_855.nls 1 +media\nls\c_856.nls 1 +media\nls\c_857.nls 1 +media\nls\c_860.nls 1 +media\nls\c_861.nls 1 +media\nls\c_862.nls 1 +media\nls\c_863.nls 1 +media\nls\c_864.nls 1 +media\nls\c_865.nls 1 +media\nls\c_866.nls 1 +media\nls\c_869.nls 1 +media\nls\c_874.nls 1 +media\nls\c_875.nls 1 +media\nls\c_878.nls 1 +media\nls\c_932.nls 1 +media\nls\c_936.nls 1 +media\nls\c_949.nls 1 +media\nls\c_950.nls 1 +media\nls\c_1006.nls 1 +media\nls\c_1026.nls 1 +media\nls\c_1250.nls 1 +media\nls\c_1251.nls 1 +media\nls\c_1253.nls 1 +media\nls\c_1254.nls 1 +media\nls\c_1255.nls 1 +media\nls\c_1256.nls 1 +media\nls\c_1257.nls 1 +media\nls\c_1258.nls 1 +media\nls\c_10000.nls 1 +media\nls\c_10006.nls 1 +media\nls\c_10007.nls 1 +media\nls\c_10029.nls 1 +media\nls\c_10079.nls 1 +media\nls\c_10081.nls 1 +media\nls\c_20866.nls 1 +media\nls\c_21866.nls 1 +media\nls\c_28591.nls 1 +media\nls\c_28592.nls 1 +media\nls\c_28593.nls 1 +media\nls\c_28594.nls 1 +media\nls\c_28595.nls 1 +media\nls\c_28596.nls 1 +media\nls\c_28597.nls 1 +media\nls\c_28598.nls 1 +media\nls\c_28599.nls 1 +media\nls\c_28600.nls 1 +media\nls\c_28603.nls 1 +media\nls\c_28604.nls 1 +media\nls\c_28605.nls 1 +media\nls\c_28606.nls 1 +media\drivers\etc\services 5 +media\inf\audio.inf 6 +media\inf\acpi.inf 6 +media\inf\cdrom.inf 6 +media\inf\display.inf 6 +media\inf\font.inf 6 +media\inf\fdc.inf 6 +media\inf\hdc.inf 6 +media\inf\intl.inf 6 +media\inf\layout.inf 6 +media\inf\machine.inf 6 +media\inf\msmouse.inf 6 +media\inf\keyboard.inf 6 +media\inf\ks.inf 6 +media\inf\NET_NIC.inf 6 +media\inf\netamd.inf 6 +media\inf\netisa.inf 6 +media\inf\netrtpnt.inf 6 +media\inf\nettcpip.inf 6 +media\inf\ports.inf 6 +media\inf\scsi.inf 6 +media\inf\syssetup.inf 6 +media\inf\usbport.inf 6 +media\inf\usb.inf 6 +media\inf\usbstor.inf 6 +media\inf\xboxdisp.inf 6 ; Media Files media\sounds\ReactOS_LogOn.wav 8 ; Ini Files -;boot\bootdata\system.ini 4 +boot\bootdata\system.ini 4 ; Regression Testing boot\bootdata\bootcdregtest\regtest.cmd 7 optional ; Subsystems -;subsystems\win32\csrss\csrss.exe 1 -;subsystems\win32\csrss\win32csr\win32csr.dll 1 -;subsystems\ntvdm\ntvdm.exe 1 -;subsystems\win32\win32k\win32k.sys 1 +subsystems\win32\csrss\csrss.exe 1 +subsystems\win32\csrss\win32csr\win32csr.dll 1 +subsystems\ntvdm\ntvdm.exe 1 +subsystems\win32\win32k\win32k.sys 1 ; Optional/proprietary files -modules\optional\DroidSansFallback.ttf 3 optional -modules\optional\NOTICE_for_Droid_Font.txt 4 optional modules\optional\netkvm2k.inf 6 optional modules\optional\netkvm2k.cat 6 optional modules\optional\netkvm.sys 2 optional @@ -684,6 +681,7 @@ modules\optional\msvbvm60.dll 1 optional modules\optional\msvcirt.dll 1 optional modules\optional\msvcp71.dll 1 optional modules\optional\msvcr71.dll 1 optional +modules\optional\Systema.ttf 3 optional modules\optional\vmx_fb.dll 1 optional modules\optional\vmx_mode.dll 1 optional modules\optional\vmx_svga.inf 6 optional @@ -714,16 +712,6 @@ modules\rosapps\applications\net\niclist\niclist.exe modules\rosapps\applications\net\roshttpd\roshttpd.exe 1 optional modules\rosapps\applications\notevil\notevil.exe 1 optional modules\rosapps\applications\sysutils\chkdsk\chkdsk.exe 1 optional -modules\rosapps\applications\net\ncftp\ncftp.exe 1 optional -modules\rosapps\applications\net\netreg\netreg.exe 1 optional -modules\rosapps\applications\net\niclist\niclist.exe 1 optional -modules\rosapps\applications\net\roshttpd\roshttpd.exe 1 optional -modules\rosapps\applications\notevil\notevil.exe 1 optional -modules\rosapps\applications\magnify\magnify.exe 1 optional -modules\rosapps\applications\packmgr\cmd-line\rosget.exe 1 optional -modules\rosapps\applications\packmgr\gui\packmgr.exe 1 optional -modules\rosapps\applications\packmgr\lib\package.dll 1 optional -modules\rosapps\applications\sysutils\chkdsk\chkdsk.exe 1 optional modules\rosapps\applications\sysutils\systeminfo\systeminfo.exe 1 optional modules\rosapps\applications\sysutils\chklib\chklib.exe 1 optional modules\rosapps\applications\sysutils\ctm\ctm.exe 1 optional @@ -733,7 +721,6 @@ modules\rosapps\applications\sysutils\man\man.exe modules\rosapps\applications\sysutils\pedump\pedump.exe 1 optional modules\rosapps\applications\sysutils\regexpl\regexpl.exe 1 optional modules\rosapps\applications\sysutils\tcat\tcat.exe 1 optional -modules\rosapps\applications\sysutils\telnetd\telnetd.exe 1 optional modules\rosapps\applications\sysutils\tlist\tlist.exe 1 optional modules\rosapps\applications\sysutils\screenshot\screenshot.exe 1 optional modules\rosapps\applications\sysutils\utils\binpatch\binpatch.exe 1 optional @@ -749,13 +736,8 @@ modules\rosapps\applications\sysutils\utils\rosperf\rosperf.exe modules\rosapps\applications\sysutils\utils\stats\stats.exe 1 optional modules\rosapps\applications\sysutils\utils\tickcount\tickcount.exe 1 optional modules\rosapps\applications\winfile\winfile.exe 1 optional -modules\rosapps\applications\winver\winver.exe 1 optional -modules\rosapps\applications\write\write.exe 1 optional -modules\rosapps\demos\ddraw\ddraw_demo.exe 1 optional modules\rosapps\demos\maze\maze.exe 1 optional -modules\rosapps\dflat32\edit.exe 1 optional modules\rosapps\drivers\green\green.sys 2 optional -modules\rosapps\templates\dialog\dialog.exe 1 optional ; Rostests modules\rostests\rosautotest\rosautotest.exe 1 optional From bd9dc6c5fbe77b86602433da2853eab88d970267 Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Thu, 3 Dec 2009 20:02:52 +0000 Subject: [PATCH 162/286] fix 32bit build svn path=/branches/ros-amd64-bringup/; revision=44391 --- reactos/dll/win32/browseui/shellbrowser.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/dll/win32/browseui/shellbrowser.cpp b/reactos/dll/win32/browseui/shellbrowser.cpp index 71ecd6d8b6d..50e00d656cb 100644 --- a/reactos/dll/win32/browseui/shellbrowser.cpp +++ b/reactos/dll/win32/browseui/shellbrowser.cpp @@ -282,7 +282,7 @@ void CToolbarProxy::Initialize(HWND parent, IUnknown *explorerToolbar) LRESULT CToolbarProxy::OnAddBitmap(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled) { - LONG result; + long int result; HRESULT hResult; result = 0; From 8744e698e929f14a5109ca2d8724f7eb11ddf17d Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Fri, 4 Dec 2009 00:12:31 +0000 Subject: [PATCH 163/286] Remove broken definitions from oskit bsd headers. Fixes numerous warnings. svn path=/branches/ros-amd64-bringup/; revision=44396 --- .../include/freebsd/src/sys/machine/ansi.h | 22 ++++++++++-------- .../include/freebsd/src/sys/sys/types.h | 23 ------------------- 2 files changed, 12 insertions(+), 33 deletions(-) diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/machine/ansi.h b/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/machine/ansi.h index 7d84a8237ef..a0b97dc81ce 100644 --- a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/machine/ansi.h +++ b/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/machine/ansi.h @@ -36,6 +36,8 @@ #ifndef _MACHINE_ANSI_H_ #define _MACHINE_ANSI_H_ +#include + /* * Types which are fundamental to the implementation and must be declared * in more than one standard header are defined here. Standard headers @@ -45,13 +47,13 @@ * #undef _BSD_SIZE_T_ * #endif */ -#define _BSD_CLOCK_T_ unsigned long /* clock() */ -#define _BSD_PTRDIFF_T_ int /* ptr1 - ptr2 */ +#define _BSD_CLOCK_T_ clock_t /* clock() */ +#define _BSD_PTRDIFF_T_ ptrdiff_t /* ptr1 - ptr2 */ #ifndef _BSD_SIZE_T_ -#define _BSD_SIZE_T_ unsigned int /* sizeof() */ +#define _BSD_SIZE_T_ size_t /* sizeof() */ #endif -#define _BSD_SSIZE_T_ int /* byte count or error */ -#define _BSD_TIME_T_ long /* time() */ +#define _BSD_SSIZE_T_ ssize_t /* byte count or error */ +#define _BSD_TIME_T_ time_t /* time() */ /* * Types which are fundamental to the implementation and must be used @@ -59,9 +61,9 @@ * one (perhaps nonstandard) header are defined here. Standard headers * use _BSD_XXX_T_ without undef'ing it. */ -#define _BSD_OFF_T_ long long /* file offset */ -#define _BSD_PID_T_ long /* process [group] */ -#define _BSD_VA_LIST_ char * /* va_list */ +#define _BSD_OFF_T_ off_t /* file offset */ +#define _BSD_PID_T_ pid_t /* process [group] */ +#define _BSD_VA_LIST_ va_list /* va_list */ /* * Runes (wchar_t) is declared to be an ``int'' instead of the more natural @@ -77,8 +79,8 @@ * and rune_t are typedef'd, _WCHAR_T_ will be undef'd, but _RUNE_T remains * defined for ctype.h. */ -#define _BSD_WCHAR_T_ int /* wchar_t */ -#define _BSD_RUNE_T_ int /* rune_t */ +#define _BSD_WCHAR_T_ wchar_t /* wchar_t */ +#define _BSD_RUNE_T_ rune_t /* rune_t */ /* * Frequencies of the clock ticks reported by clock() and times(). They diff --git a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/types.h b/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/types.h index e55825568ae..20fb420163a 100644 --- a/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/types.h +++ b/reactos/lib/drivers/oskittcp/include/freebsd/src/sys/sys/types.h @@ -112,29 +112,6 @@ __END_DECLS #include #include -#ifdef _BSD_CLOCK_T_ -#define _CLOCK_T_DEFINED -typedef _BSD_CLOCK_T_ clock_t; -#undef _BSD_CLOCK_T_ -#endif - -#ifdef _BSD_SIZE_T_ -#define _SIZE_T_DEFINED -typedef _BSD_SIZE_T_ size_t; -#undef _BSD_SIZE_T_ -#endif - -#ifdef _BSD_SSIZE_T_ -typedef _BSD_SSIZE_T_ ssize_t; -#define _SSIZE_T_DEFINED -#undef _BSD_SSIZE_T_ -#endif - -#ifdef _BSD_TIME_T_ -#define _TIME_T_DEFINED -typedef _BSD_TIME_T_ time_t; -#undef _BSD_TIME_T_ -#endif #ifndef _POSIX_SOURCE #define NBBY 8 /* number of bits in a byte */ From 4d8e5b9b6ec07b170a8b59c492eedfc0edc43dd2 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Fri, 4 Dec 2009 13:06:00 +0000 Subject: [PATCH 164/286] [MM] Rewrite MmAllocateSection to use system PTEs. Store the MDL pointer in the first PFN, to avoid allocating an additional PTE. Implement MmFreeSection. Now the bootdrivers go where they should go, freeing up lower system memory, and unloaded drivers actually get their memory freed (saving us 188 KB each boot). svn path=/branches/ros-amd64-bringup/; revision=44402 --- reactos/ntoskrnl/include/internal/mm.h | 1 + reactos/ntoskrnl/mm/section.c | 134 +++++++++++++++++++------ reactos/ntoskrnl/mm/sysldr.c | 4 +- 3 files changed, 108 insertions(+), 31 deletions(-) diff --git a/reactos/ntoskrnl/include/internal/mm.h b/reactos/ntoskrnl/include/internal/mm.h index cc352e1f2f5..fb03b7d0ead 100644 --- a/reactos/ntoskrnl/include/internal/mm.h +++ b/reactos/ntoskrnl/include/internal/mm.h @@ -233,6 +233,7 @@ typedef ULONG SWAPENTRY; (PAGE_WRITECOPY | \ PAGE_EXECUTE_WRITECOPY) +#define MI_PFN_ELEMENT(Pfn) (&MmPfnDatabase[Pfn]) #define InterlockedCompareExchangePte(PointerPte, Exchange, Comperand) \ InterlockedCompareExchange((PLONG)(PointerPte), Exchange, Comperand) diff --git a/reactos/ntoskrnl/mm/section.c b/reactos/ntoskrnl/mm/section.c index 3cfc9406a8c..30bb9fcad5e 100644 --- a/reactos/ntoskrnl/mm/section.c +++ b/reactos/ntoskrnl/mm/section.c @@ -48,6 +48,7 @@ #define NDEBUG #include #include +#include "ARM3/miarm.h" #if defined (ALLOC_PRAGMA) #pragma alloc_text(INIT, MmCreatePhysicalMemorySection) @@ -4501,42 +4502,117 @@ NtExtendSection(IN HANDLE SectionHandle, PVOID NTAPI MmAllocateSection (IN ULONG Length, PVOID BaseAddress) { - PVOID Result; - MEMORY_AREA* marea; - NTSTATUS Status; - PMMSUPPORT AddressSpace; - PHYSICAL_ADDRESS BoundaryAddressMultiple; + PHYSICAL_ADDRESS LowAddress, HighAddress, SkipBytes; + PMDL Mdl; + PFN_COUNT PageCount; + PPFN_NUMBER MdlPages; + MMPTE TempPte, *PointerPte; + PMMPFN Pfn; - DPRINT("MmAllocateSection(Length %x)\n",Length); - - BoundaryAddressMultiple.QuadPart = 0; - - AddressSpace = MmGetKernelAddressSpace(); - Result = BaseAddress; - MmLockAddressSpace(AddressSpace); - Status = MmCreateMemoryArea (AddressSpace, - MEMORY_AREA_SYSTEM, - &Result, + /* Allocate an MDL */ + LowAddress.QuadPart = 0; + HighAddress.QuadPart = -1; + SkipBytes.QuadPart = 0; + Mdl = MiAllocatePagesForMdl(LowAddress, + HighAddress, + SkipBytes, Length, - 0, - &marea, - FALSE, - 0, - BoundaryAddressMultiple); - MmUnlockAddressSpace(AddressSpace); + MiPlatformCacheAttributes[0][MmCached], + 0); // use MM_ALLOCATE_FULLY_REQUIRED + if (!Mdl) + { + /* Fail */ + return NULL; + } - if (!NT_SUCCESS(Status)) - { - return (NULL); - } - DPRINT("Result %p\n",Result); + /* Check if we got all we need */ + if (Mdl->ByteCount < Length) + { + /* We didn't get enough */ + MmFreePagesFromMdl(Mdl); + ExFreePool(Mdl); + return NULL; + } - /* Create a virtual mapping for this memory area */ - MmMapMemoryArea(Result, Length, MC_NPPOOL, PAGE_READWRITE); + /* Calculate how many pages we should have */ + PageCount = BYTES_TO_PAGES(Length); - return ((PVOID)Result); + /* Reserve system PTEs */ + PointerPte = MiReserveSystemPtes(PageCount, SystemPteSpace); + if (!PointerPte) + { + /* Free the MDL and fail */ + MmFreePagesFromMdl(Mdl); + ExFreePool(Mdl); + return NULL; + } + + /* Safe the base address */ + BaseAddress = MiPteToAddress(PointerPte); + + /* Get a pointer to the page array */ + MdlPages = (PPFN_NUMBER)(Mdl + 1); + + /* Get the first page's PFN entry */ + Pfn = MI_PFN_ELEMENT(*MdlPages); + + /* Save the pointer to the MDL in the PFN entry */ + *(PMDL*)&Pfn->OriginalPte = Mdl; + + /* Setup template PTE */ + TempPte = HyperTemplatePte; + + /* Map the PTEs */ + do + { + /* Sanity checks */ + ASSERT(PointerPte->u.Hard.Valid == 0); + ASSERT(PointerPte->u.Soft.Transition == 0); + + /* Get the PFN */ + TempPte.u.Hard.PageFrameNumber = *MdlPages++; + + /* Write the PTE */ + *PointerPte++ = TempPte; + } while (--PageCount); + + /* Return the base address */ + return BaseAddress; } +VOID +NTAPI +MmFreeSection(PVOID BaseAddress) +{ + PMMPTE PointerPte; + PFN_NUMBER *MdlPages, PageFrameNumber, PageCount; + PMMPFN Pfn; + PMDL Mdl; + + /* Get a pointer to the first PTE */ + PointerPte = MiAddressToPte(BaseAddress); + + /* Get the page frame number of the first page */ + PageFrameNumber = PFN_FROM_PTE(PointerPte); + + /* Get the first pages's PFN entry */ + Pfn = MI_PFN_ELEMENT(PageFrameNumber); + + /* Get the MDL from the PFN */ + Mdl = *(PMDL*)&Pfn->OriginalPte; + *(PMDL*)&Pfn->OriginalPte = NULL; + + /* Get the page array and count from the MDL */ + MdlPages = (PPFN_NUMBER)(Mdl + 1); + PageCount = BYTES_TO_PAGES(Mdl->ByteCount); + + /* Release the system PTEs */ + MiReleaseSystemPtes(PointerPte, PageCount, SystemPteSpace); + + /* Free the pages and the MDL */ + MmFreePagesFromMdl(Mdl); + ExFreePool(Mdl); +} /********************************************************************** * NAME EXPORTED diff --git a/reactos/ntoskrnl/mm/sysldr.c b/reactos/ntoskrnl/mm/sysldr.c index 6b12102290d..9b015de993e 100644 --- a/reactos/ntoskrnl/mm/sysldr.c +++ b/reactos/ntoskrnl/mm/sysldr.c @@ -780,8 +780,8 @@ MmUnloadSystemImage(IN PVOID ImageHandle) } } - /* FIXME: Free the driver */ - //MmFreeSection(LdrEntry->DllBase); + /* Free the driver */ + MmFreeSection(LdrEntry->DllBase); /* Check if we're linked in */ if (LdrEntry->InLoadOrderLinks.Flink) From 2bd0dde813da8adfb247fb77681710ced9690610 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Fri, 4 Dec 2009 15:50:55 +0000 Subject: [PATCH 165/286] Add some msr constants svn path=/branches/ros-amd64-bringup/; revision=44405 --- reactos/ntoskrnl/include/internal/amd64/ke.h | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/reactos/ntoskrnl/include/internal/amd64/ke.h b/reactos/ntoskrnl/include/internal/amd64/ke.h index eeb3856a254..16591f82ab8 100644 --- a/reactos/ntoskrnl/include/internal/amd64/ke.h +++ b/reactos/ntoskrnl/include/internal/amd64/ke.h @@ -41,11 +41,19 @@ #define X86_MSR_GSBASE 0xC0000101 #define X86_MSR_KERNEL_GSBASE 0xC0000102 +#define X86_MSR_EFER 0xC0000080 #define X86_MSR_STAR 0xC0000081 #define X86_MSR_LSTAR 0xC0000082 #define X86_MSR_CSTAR 0xC0000083 #define X86_MSR_SFMASK 0xC0000084 +#define EFER_SCE 0x01 +#define EFER_LME 0x10 +#define EFER_LMA 0x40 +#define EFER_NXE 0x80 +#define EFER_SVME 0x100 +#define EFER_FFXSR 0x400 + #define AMD64_TSS 9 #ifndef __ASM__ From 6578ba71c19948e3986d3eb532241f14df0e5f11 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Fri, 4 Dec 2009 21:36:43 +0000 Subject: [PATCH 166/286] fix a debugprint svn path=/branches/ros-amd64-bringup/; revision=44407 --- reactos/ntoskrnl/ke/amd64/kiinit.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/reactos/ntoskrnl/ke/amd64/kiinit.c b/reactos/ntoskrnl/ke/amd64/kiinit.c index 12ab2ddf65f..e7dbf08ba73 100644 --- a/reactos/ntoskrnl/ke/amd64/kiinit.c +++ b/reactos/ntoskrnl/ke/amd64/kiinit.c @@ -726,7 +726,8 @@ KiSystemStartupReal(IN PLOADER_PARAMETER_BLOCK LoaderBlock) LoaderBlock->NtBootPathName); } -// DPRINT1("Gdt = %p, Idt = %p, Pcr = %p, Tss = %p\n", Gdt, Idt, Pcr, Tss); + DPRINT("Pcr = %p, Gdt = %p, Idt = %p, Tss = %p\n", + Pcr, Pcr->GdtBase, Pcr->IdtBase, Pcr->TssBase); DbgBreakPointWithStatus(DBG_STATUS_CONTROL_C); From ca9707ca00cf3c03169d3746e89ce3977ac4b885 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Fri, 4 Dec 2009 21:42:40 +0000 Subject: [PATCH 167/286] [MM] Don't create a memory area for the PCR on amd64, as we use our own from the kernel mapping instead of a hardcoded address mapped by the loader. Skip initializing the old page pool. It will probably not live on long enough to deserve any 64 bit fixing. svn path=/branches/ros-amd64-bringup/; revision=44408 --- reactos/ntoskrnl/mm/mminit.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/reactos/ntoskrnl/mm/mminit.c b/reactos/ntoskrnl/mm/mminit.c index b1d392d22de..6c230cf91eb 100644 --- a/reactos/ntoskrnl/mm/mminit.c +++ b/reactos/ntoskrnl/mm/mminit.c @@ -227,6 +227,7 @@ MiInitSystemMemoryAreas() BoundaryAddressMultiple); ASSERT(Status == STATUS_SUCCESS); +#ifndef _M_AMD64 // // Next, the KPCR // @@ -241,6 +242,7 @@ MiInitSystemMemoryAreas() 0, BoundaryAddressMultiple); ASSERT(Status == STATUS_SUCCESS); +#endif // // Now the KUSER_SHARED_DATA @@ -474,8 +476,10 @@ MmInitSystem(IN ULONG Phase, /* Dump the address space */ MiDbgDumpAddressSpace(); +#ifndef _M_AMD64 // skip old paged pool /* Initialize paged pool */ MmInitializePagedPool(); +#endif /* Initialize working sets */ MmInitializeMemoryConsumer(MC_USER, MmTrimUserMemory); From 17e075c784ec1495aac5597d4ca38b4768678898 Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Fri, 4 Dec 2009 22:32:35 +0000 Subject: [PATCH 168/286] wined3d.dll - Missing floating point math operations. ddraw.dll - depends on wined3d d3d8.dll - depends on wined3d d3d9.dll - depends on wined3d usbdriver.sys - numerous build errors ntvdm.exe - not built svn path=/branches/ros-amd64-bringup/; revision=44409 --- reactos/boot/bootdata/packages/reactos.dff | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/reactos/boot/bootdata/packages/reactos.dff b/reactos/boot/bootdata/packages/reactos.dff index bf616387568..337915ae0eb 100644 --- a/reactos/boot/bootdata/packages/reactos.dff +++ b/reactos/boot/bootdata/packages/reactos.dff @@ -157,7 +157,7 @@ dll\directx\dplay\dplay.dll 1 dll\directx\dplayx\dplayx.dll 1 dll\directx\dsound\dsound.dll 1 dll\directx\dxdiagn\dxdiagn.dll 1 -dll\directx\wine\ddraw\ddraw.dll 1 +dll\directx\wine\ddraw\ddraw.dll 1 optional dll\directx\d3d8thk\d3d8thk.dll 1 dll\directx\devenum\devenum.dll 1 dll\directx\ksproxy\ksproxy.ax 1 @@ -165,9 +165,9 @@ dll\directx\ksuser\ksuser.dll 1 dll\directx\msdmo\msdmo.dll 1 dll\directx\quartz\quartz.dll 1 dll\directx\qedit\qedit.dll 1 -dll\directx\wine\d3d8\d3d8.dll 1 -dll\directx\wine\wined3d\wined3d.dll 1 -dll\directx\wine\d3d9\d3d9.dll 1 +dll\directx\wine\d3d8\d3d8.dll 1 optional +dll\directx\wine\wined3d\wined3d.dll 1 optional +dll\directx\wine\d3d9\d3d9.dll 1 optional dll\keyboard\kbda1\kbda1.dll 1 dll\keyboard\kbda2\kbda2.dll 1 @@ -513,7 +513,7 @@ drivers\storage\ide\pciidex\pciidex.sys 2 ;drivers\usb\miniport\usbuhci\usbuhci.sys 2 ;drivers\usb\usbhub\usbhub.sys 2 ;drivers\usb\usbport\usbport.sys 2 -drivers\usb\nt4compat\usbdriver\usbdriver.sys 2 +drivers\usb\nt4compat\usbdriver\usbdriver.sys 2 optional drivers\video\displays\vga\vgaddi.dll 1 drivers\video\displays\framebuf\framebuf.dll 1 @@ -663,7 +663,7 @@ boot\bootdata\bootcdregtest\regtest.cmd 7 optional ; Subsystems subsystems\win32\csrss\csrss.exe 1 subsystems\win32\csrss\win32csr\win32csr.dll 1 -subsystems\ntvdm\ntvdm.exe 1 +subsystems\ntvdm\ntvdm.exe 1 optional subsystems\win32\win32k\win32k.sys 1 ; Optional/proprietary files From a52c17e747b712bd268780eb22887180f484f63d Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 5 Dec 2009 18:17:59 +0000 Subject: [PATCH 169/286] [KE] Don't use fastcall functions svn path=/branches/ros-amd64-bringup/; revision=44414 --- reactos/ntoskrnl/ke/amd64/spinlock.c | 30 ++++++++++++++++++---------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/reactos/ntoskrnl/ke/amd64/spinlock.c b/reactos/ntoskrnl/ke/amd64/spinlock.c index 73e1bceecbc..9c485fd8d43 100644 --- a/reactos/ntoskrnl/ke/amd64/spinlock.c +++ b/reactos/ntoskrnl/ke/amd64/spinlock.c @@ -24,8 +24,10 @@ KIRQL KeAcquireSpinLockRaiseToSynch(PKSPIN_LOCK SpinLock) { #ifndef CONFIG_SMP + KIRQL OldIrql; /* Simply raise to dispatch */ - return KfRaiseIrql(DISPATCH_LEVEL); + KeRaiseIrql(DISPATCH_LEVEL, &OldIrql); + return OldIrql; #else UNIMPLEMENTED; #endif @@ -39,8 +41,10 @@ NTAPI KeAcquireSpinLockRaiseToDpc(PKSPIN_LOCK SpinLock) { #ifndef CONFIG_SMP + KIRQL OldIrql; /* Simply raise to dispatch */ - return KfRaiseIrql(DISPATCH_LEVEL); + KeRaiseIrql(DISPATCH_LEVEL, &OldIrql); + return OldIrql; #else UNIMPLEMENTED; #endif @@ -56,7 +60,7 @@ KeReleaseSpinLock(PKSPIN_LOCK SpinLock, { #ifndef CONFIG_SMP /* Simply lower IRQL back */ - KfLowerIrql(OldIrql); + KeLowerIrql(OldIrql); #else UNIMPLEMENTED; #endif @@ -69,8 +73,10 @@ KIRQL KeAcquireQueuedSpinLock(IN KSPIN_LOCK_QUEUE_NUMBER LockNumber) { #ifndef CONFIG_SMP + KIRQL OldIrql; /* Simply raise to dispatch */ - return KfRaiseIrql(DISPATCH_LEVEL); + KeRaiseIrql(DISPATCH_LEVEL, &OldIrql); + return OldIrql; #else UNIMPLEMENTED; #endif @@ -83,8 +89,10 @@ KIRQL KeAcquireQueuedSpinLockRaiseToSynch(IN KSPIN_LOCK_QUEUE_NUMBER LockNumber) { #ifndef CONFIG_SMP + KIRQL OldIrql; /* Simply raise to dispatch */ - return KfRaiseIrql(DISPATCH_LEVEL); + KeRaiseIrql(DISPATCH_LEVEL, &OldIrql); + return OldIrql; #else UNIMPLEMENTED; #endif @@ -99,7 +107,7 @@ KeAcquireInStackQueuedSpinLock(IN PKSPIN_LOCK SpinLock, { #ifndef CONFIG_SMP /* Simply raise to dispatch */ - LockHandle->OldIrql = KfRaiseIrql(DISPATCH_LEVEL); + KeRaiseIrql(DISPATCH_LEVEL, &LockHandle->OldIrql); #else UNIMPLEMENTED; #endif @@ -114,7 +122,7 @@ KeAcquireInStackQueuedSpinLockRaiseToSynch(IN PKSPIN_LOCK SpinLock, { #ifndef CONFIG_SMP /* Simply raise to synch */ - LockHandle->OldIrql = KfRaiseIrql(SYNCH_LEVEL); + KeRaiseIrql(SYNCH_LEVEL, &LockHandle->OldIrql); #else UNIMPLEMENTED; #endif @@ -129,7 +137,7 @@ KeReleaseQueuedSpinLock(IN KSPIN_LOCK_QUEUE_NUMBER LockNumber, { #ifndef CONFIG_SMP /* Simply lower IRQL back */ - KfLowerIrql(OldIrql); + KeLowerIrql(OldIrql); #else UNIMPLEMENTED; #endif @@ -143,7 +151,7 @@ KeReleaseInStackQueuedSpinLock(IN PKLOCK_QUEUE_HANDLE LockHandle) { #ifndef CONFIG_SMP /* Simply lower IRQL back */ - KfLowerIrql(LockHandle->OldIrql); + KeLowerIrql(LockHandle->OldIrql); #else UNIMPLEMENTED; #endif @@ -158,7 +166,7 @@ KeTryToAcquireQueuedSpinLockRaiseToSynch(IN KSPIN_LOCK_QUEUE_NUMBER LockNumber, { #ifndef CONFIG_SMP /* Simply raise to dispatch */ - *OldIrql = KfRaiseIrql(DISPATCH_LEVEL); + KeRaiseIrql(DISPATCH_LEVEL, OldIrql); /* Always return true on UP Machines */ return TRUE; @@ -176,7 +184,7 @@ KeTryToAcquireQueuedSpinLock(IN KSPIN_LOCK_QUEUE_NUMBER LockNumber, { #ifndef CONFIG_SMP /* Simply raise to dispatch */ - *OldIrql = KfRaiseIrql(DISPATCH_LEVEL); + KeRaiseIrql(DISPATCH_LEVEL, OldIrql); /* Always return true on UP Machines */ return TRUE; From db10ad10903c435e31cd629d3251e69019221a30 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 5 Dec 2009 18:46:22 +0000 Subject: [PATCH 170/286] Move architecture specific inline functions in into the respective headers. Remove some unused definitions from amd64 header. svn path=/branches/ros-amd64-bringup/; revision=44415 --- reactos/ntoskrnl/include/internal/amd64/ke.h | 33 ++++++++--- reactos/ntoskrnl/include/internal/arm/ke.h | 17 ++++++ reactos/ntoskrnl/include/internal/i386/ke.h | 33 +++++++++++ reactos/ntoskrnl/include/internal/ke_x.h | 55 ------------------- .../ntoskrnl/include/internal/powerpc/ke.h | 23 ++++++++ 5 files changed, 99 insertions(+), 62 deletions(-) diff --git a/reactos/ntoskrnl/include/internal/amd64/ke.h b/reactos/ntoskrnl/include/internal/amd64/ke.h index 16591f82ab8..b5140b0b52c 100644 --- a/reactos/ntoskrnl/include/internal/amd64/ke.h +++ b/reactos/ntoskrnl/include/internal/amd64/ke.h @@ -68,13 +68,6 @@ typedef struct _KIDT_INIT PVOID ServiceRoutine; } KIDT_INIT, *PKIDT_INIT; -//#define KeArchFnInit() Ke386FnInit() -#define KeArchFnInit() DbgPrint("KeArchFnInit is unimplemented!\n"); -#define KeArchHaltProcessor() Ke386HaltProcessor() -#define KfLowerIrql KeLowerIrql -#define KfAcquireSpinLock KeAcquireSpinLock -#define KfReleaseSpinLock KeReleaseSpinLock - extern ULONG Ke386CacheAlignment; extern ULONG KeI386NpxPresent; extern ULONG KeI386XMMIPresent; @@ -127,6 +120,32 @@ KeInvalidateTlbEntry(IN PVOID Address) __invlpg(Address); } +FORCEINLINE +VOID +KeFlushProcessTb(VOID) +{ + /* Flush the TLB by resetting CR3 */ + __writecr3(__readcr3()); +} + +FORCEINLINE +PRKTHREAD +KeGetCurrentThread(VOID) +{ + return (PRKTHREAD)__readgsqword(FIELD_OFFSET(KIPCR, Prcb.CurrentThread)); +} + +FORCEINLINE +VOID +KiRundownThread(IN PKTHREAD Thread) +{ +#ifndef CONFIG_SMP + DbgPrint("KiRundownThread is unimplemented\n"); +#else + /* Nothing to do */ +#endif +} + struct _KPCR; VOID diff --git a/reactos/ntoskrnl/include/internal/arm/ke.h b/reactos/ntoskrnl/include/internal/arm/ke.h index f539cf4facb..66827014189 100644 --- a/reactos/ntoskrnl/include/internal/arm/ke.h +++ b/reactos/ntoskrnl/include/internal/arm/ke.h @@ -51,6 +51,23 @@ KeInvalidateTlbEntry(IN PVOID Address) KeArmInvalidateTlbEntry(Address); } +FORCEINLINE +VOID +KeFlushProcessTb(VOID) +{ + // + // We need to implement this! + // + ASSERTMSG("Need ARM flush routine\n", FALSE); +} + +FORCEINLINE +VOID +KiRundownThread(IN PKTHREAD Thread) +{ + /* FIXME */ +} + VOID KiPassiveRelease( VOID diff --git a/reactos/ntoskrnl/include/internal/i386/ke.h b/reactos/ntoskrnl/include/internal/i386/ke.h index ea2f8bc286f..3b8433f6e99 100644 --- a/reactos/ntoskrnl/include/internal/i386/ke.h +++ b/reactos/ntoskrnl/include/internal/i386/ke.h @@ -59,6 +59,39 @@ KeInvalidateTlbEntry(IN PVOID Address) __invlpg(Address); } +FORCEINLINE +VOID +KeFlushProcessTb(VOID) +{ + /* Flush the TLB by resetting CR3 */ + __writecr3(__readcr3()); +} + +FORCEINLINE +PRKTHREAD +KeGetCurrentThread(VOID) +{ + /* Return the current thread */ + return ((PKIPCR)KeGetPcr())->PrcbData.CurrentThread; +} + +FORCEINLINE +VOID +KiRundownThread(IN PKTHREAD Thread) +{ +#ifndef CONFIG_SMP + /* Check if this is the NPX Thread */ + if (KeGetCurrentPrcb()->NpxThread == Thread) + { + /* Clear it */ + KeGetCurrentPrcb()->NpxThread = NULL; + Ke386FnInit(); + } +#else + /* Nothing to do */ +#endif +} + VOID FASTCALL Ki386InitializeTss( diff --git a/reactos/ntoskrnl/include/internal/ke_x.h b/reactos/ntoskrnl/include/internal/ke_x.h index f0d8e6fa410..e8945ff3b59 100644 --- a/reactos/ntoskrnl/include/internal/ke_x.h +++ b/reactos/ntoskrnl/include/internal/ke_x.h @@ -7,21 +7,6 @@ */ #ifndef _M_ARM -FORCEINLINE -PRKTHREAD -KeGetCurrentThread(VOID) -{ -#ifdef _M_IX86 - /* Return the current thread */ - return ((PKIPCR)KeGetPcr())->PrcbData.CurrentThread; -#elif defined (_M_AMD64) - return (PRKTHREAD)__readgsqword(FIELD_OFFSET(KIPCR, Prcb.CurrentThread)); -#else - PKPRCB Prcb = KeGetCurrentPrcb(); - return Prcb->CurrentThread; -#endif -} - FORCEINLINE UCHAR KeGetPreviousMode(VOID) @@ -31,23 +16,6 @@ KeGetPreviousMode(VOID) } #endif -FORCEINLINE -VOID -KeFlushProcessTb(VOID) -{ - /* Flush the TLB by resetting CR3 */ -#ifdef _M_PPC - __asm__("sync\n\tisync\n\t"); -#elif _M_ARM - // - // We need to implement this! - // - ASSERTMSG("Need ARM flush routine\n", FALSE); -#else - __writecr3(__readcr3()); -#endif -} - // // Enters a Guarded Region // @@ -302,21 +270,6 @@ KiCheckDeferredReadyList(IN PKPRCB Prcb) UNREFERENCED_PARAMETER(Prcb); } -FORCEINLINE -VOID -KiRundownThread(IN PKTHREAD Thread) -{ -#if defined(_M_IX86) - /* Check if this is the NPX Thread */ - if (KeGetCurrentPrcb()->NpxThread == Thread) - { - /* Clear it */ - KeGetCurrentPrcb()->NpxThread = NULL; - Ke386FnInit(); - } -#endif -} - FORCEINLINE VOID KiRequestApcInterrupt(IN BOOLEAN NeedApc, @@ -659,14 +612,6 @@ KiCheckDeferredReadyList(IN PKPRCB Prcb) if (Prcb->DeferredReadyListHead.Next) KiProcessDeferredReadyList(Prcb); } -FORCEINLINE -VOID -KiRundownThread(IN PKTHREAD Thread) -{ - /* Nothing to do */ - return; -} - FORCEINLINE VOID KiRequestApcInterrupt(IN BOOLEAN NeedApc, diff --git a/reactos/ntoskrnl/include/internal/powerpc/ke.h b/reactos/ntoskrnl/include/internal/powerpc/ke.h index 578590e2914..ba47ffcbf02 100644 --- a/reactos/ntoskrnl/include/internal/powerpc/ke.h +++ b/reactos/ntoskrnl/include/internal/powerpc/ke.h @@ -77,6 +77,29 @@ FORCEINLINE struct _KPCR * NTHALAPI KeGetCurrentKPCR( return (struct _KPCR *)__readfsdword(0x1c); } +FORCEINLINE +VOID +KeFlushProcessTb(VOID) +{ + /* Flush the TLB */ + __asm__("sync\n\tisync\n\t"); +} + +FORCEINLINE +PRKTHREAD +KeGetCurrentThread(VOID) +{ + /* Return the current thread */ + return KeGetCurrentPrcb()->CurrentThread; +} + +FORCEINLINE +VOID +KiRundownThread(IN PKTHREAD Thread) +{ + /* FIXME */ +} + #ifdef _NTOSKRNL_ /* FIXME: Move flags above to NDK instead of here */ VOID NTAPI From dca92a4d3746d8f030d25ab8d7ed88cd1fc66dfe Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 5 Dec 2009 22:39:17 +0000 Subject: [PATCH 171/286] remove unused variables svn path=/branches/ros-amd64-bringup/; revision=44426 --- reactos/boot/freeldr/freeldr/windows/amd64/wlmemory.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/reactos/boot/freeldr/freeldr/windows/amd64/wlmemory.c b/reactos/boot/freeldr/freeldr/windows/amd64/wlmemory.c index f1497f188b2..3e3288a682a 100644 --- a/reactos/boot/freeldr/freeldr/windows/amd64/wlmemory.c +++ b/reactos/boot/freeldr/freeldr/windows/amd64/wlmemory.c @@ -28,9 +28,6 @@ PHARDWARE_PTE PxeBase; BOOLEAN MempAllocatePageTables() { - ULONG KernelPages; - PVOID UserSharedData; - DPRINTM(DPRINT_WINDOWS,">>> MempAllocatePageTables\n"); /* Allocate a page for the PML4 */ From 3422ff6695b1b292b6ec2c5cc24669f6b4ea07f1 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 5 Dec 2009 22:40:03 +0000 Subject: [PATCH 172/286] Fix a typo svn path=/branches/ros-amd64-bringup/; revision=44427 --- reactos/ntoskrnl/include/internal/amd64/intrin_i.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/ntoskrnl/include/internal/amd64/intrin_i.h b/reactos/ntoskrnl/include/internal/amd64/intrin_i.h index ad1bf1b608c..9b5611553c3 100644 --- a/reactos/ntoskrnl/include/internal/amd64/intrin_i.h +++ b/reactos/ntoskrnl/include/internal/amd64/intrin_i.h @@ -36,7 +36,7 @@ KiSetGdtDescriptorBase(PKGDTENTRY Entry, ULONG64 Base) Entry->BaseUpper = Base >> 32; } -PVOID +VOID FORCEINLINE KiSetGdtDescriptorLimit(PKGDTENTRY Entry, ULONG Limit) { From 7fc806568556c44c36809ffec2d8bb294420b488 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 5 Dec 2009 22:48:43 +0000 Subject: [PATCH 173/286] Fix uninitialized variable svn path=/branches/ros-amd64-bringup/; revision=44428 --- reactos/lib/rtl/amd64/unwind.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/lib/rtl/amd64/unwind.c b/reactos/lib/rtl/amd64/unwind.c index fabda830821..914317f1717 100644 --- a/reactos/lib/rtl/amd64/unwind.c +++ b/reactos/lib/rtl/amd64/unwind.c @@ -623,7 +623,7 @@ NTAPI RtlRaiseException(IN PEXCEPTION_RECORD ExceptionRecord) { CONTEXT Context; - NTSTATUS Status; + NTSTATUS Status = STATUS_INVALID_DISPOSITION; ULONG64 ImageBase; PRUNTIME_FUNCTION FunctionEntry; PVOID HandlerData; From 85cc9dffaa90c8c529ef9c2d1feb62e434149591 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sun, 6 Dec 2009 01:11:32 +0000 Subject: [PATCH 174/286] - unhack the rbuild file - move some architecture specific stuff out of ReactOS-generic.rbuild svn path=/branches/ros-amd64-bringup/; revision=44429 --- reactos/ReactOS-amd64.rbuild | 301 +++------------------------------ reactos/ReactOS-generic.rbuild | 3 - reactos/ReactOS-i386.rbuild | 3 + 3 files changed, 31 insertions(+), 276 deletions(-) diff --git a/reactos/ReactOS-amd64.rbuild b/reactos/ReactOS-amd64.rbuild index a7339938bfc..9d299caafb8 100644 --- a/reactos/ReactOS-amd64.rbuild +++ b/reactos/ReactOS-amd64.rbuild @@ -7,6 +7,8 @@ + + @@ -21,133 +23,31 @@ - - -Os - -ftracer - -momit-leaf-frame-pointer - - - -Os - - - -O1 - - - -O2 - - - -O3 - - - -U_X86_ - -mpreferred-stack-boundary=4 - -m64 --win64 - -fno-strict-aliasing - -Wno-strict-aliasing - -Wpointer-arith - -Wno-multichar - -Wno-format - - - - -disable-stdcall-fixup - -static - --unique=.eh_frame - -file-alignment=0x1000 - -section-alignment=0x1000 + + + -ftracer + -momit-leaf-frame-pointer + + -mpreferred-stack-boundary=4 + -m64 --win64 + + + -U_X86_ + -Wno-format - - - - - - - - - 1 - - - - - 0 - - - - 1 - - - - - - - - 0x400 - 0x600 - 0x400 - 0x400 - 0x400 - - - - 0x500 - 0x600 - 0x500 - 0x500 - 0x500 - - - - 0x501 - 0x600 - 0x501 - 0x501 - 0x501 - - - - 0x502 - 0x600 - 0x502 - 0x502 - 0x502 - - - - 0x600 - 0x600 - 0x600 - 0x600 - 0x600 - - - . - include - include - include/psdk - include/psdk - include/dxsdk - include/dxsdk - include/crt - include/crt/mingw32 - include/ddk - include/GL - include/ndk - include/reactos - include/reactos - include/reactos/mc - include/reactos/libs - - include - include - include/reactos - include/reactos/wine + + -disable-stdcall-fixup + -file-alignment=0x1000 + -section-alignment=0x1000 + --unique=.eh_frame + -static + - @@ -156,180 +56,35 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - + + + + + + - - - - diff --git a/reactos/ReactOS-generic.rbuild b/reactos/ReactOS-generic.rbuild index 86d3a2df237..e6668389440 100644 --- a/reactos/ReactOS-generic.rbuild +++ b/reactos/ReactOS-generic.rbuild @@ -89,8 +89,6 @@ -Wall -Wno-non-virtual-dtor - -gstabs+ - -gstabs+ @@ -156,5 +154,4 @@ /GS- - diff --git a/reactos/ReactOS-i386.rbuild b/reactos/ReactOS-i386.rbuild index b6fc035dd91..897fadbfa2e 100644 --- a/reactos/ReactOS-i386.rbuild +++ b/reactos/ReactOS-i386.rbuild @@ -15,6 +15,7 @@ + @@ -25,6 +26,8 @@ -mpreferred-stack-boundary=2 -m32 --win32 + -gstabs+ + -gstabs+ From 51d9a767a72d61d13edd42e2390cb7d2fd51bd37 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sun, 6 Dec 2009 14:44:33 +0000 Subject: [PATCH 175/286] copy widl from trunk svn path=/branches/ros-amd64-bringup/; revision=44438 --- reactos/tools/widl/header.c | 70 ++++++++++++++--------------- reactos/tools/widl/parser.tab.c | 8 ++-- reactos/tools/widl/parser.y | 8 ++-- reactos/tools/widl/typegen.c | 80 ++++++++++++++++----------------- 4 files changed, 83 insertions(+), 83 deletions(-) diff --git a/reactos/tools/widl/header.c b/reactos/tools/widl/header.c index 9c8e3b29339..e87a44e9077 100644 --- a/reactos/tools/widl/header.c +++ b/reactos/tools/widl/header.c @@ -318,14 +318,14 @@ void write_type_right(FILE *h, type_t *t, int is_field) { if (is_conformant_array(t)) { - fprintf(h, "[%s]", is_field ? "1" : ""); - t = type_array_get_element(t); + fprintf(h, "[%s]", is_field ? "1" : ""); + t = type_array_get_element(t); + } + for ( ; + type_get_type(t) == TYPE_ARRAY && !type_array_is_decl_as_ptr(t); + t = type_array_get_element(t)) + fprintf(h, "[%u]", type_array_get_dim(t)); } - for ( ; - type_get_type(t) == TYPE_ARRAY && !type_array_is_decl_as_ptr(t); - t = type_array_get_element(t)) - fprintf(h, "[%u]", type_array_get_dim(t)); - } break; case TYPE_BITFIELD: fprintf(h, " : %lu", type_bitfield_get_bits(t)->cval); @@ -343,7 +343,7 @@ void write_type_right(FILE *h, type_t *t, int is_field) case TYPE_INTERFACE: case TYPE_POINTER: break; -} + } } static void write_type_v(FILE *h, type_t *t, int is_field, int declonly, const char *name) @@ -354,40 +354,40 @@ static void write_type_v(FILE *h, type_t *t, int is_field, int declonly, const c if (!h) return; if (t) { - for (pt = t; is_ptr(pt); pt = type_pointer_get_ref(pt), ptr_level++) - ; + for (pt = t; is_ptr(pt); pt = type_pointer_get_ref(pt), ptr_level++) + ; - if (type_get_type_detect_alias(pt) == TYPE_FUNCTION) { - int i; - const char *callconv = get_attrp(pt->attrs, ATTR_CALLCONV); - if (!callconv) callconv = ""; - if (is_attr(pt->attrs, ATTR_INLINE)) fprintf(h, "inline "); - write_type_left(h, type_function_get_rettype(pt), declonly); - fputc(' ', h); - if (ptr_level) fputc('(', h); - fprintf(h, "%s ", callconv); - for (i = 0; i < ptr_level; i++) - fputc('*', h); - } else - write_type_left(h, t, declonly); + if (type_get_type_detect_alias(pt) == TYPE_FUNCTION) { + int i; + const char *callconv = get_attrp(pt->attrs, ATTR_CALLCONV); + if (!callconv) callconv = ""; + if (is_attr(pt->attrs, ATTR_INLINE)) fprintf(h, "inline "); + write_type_left(h, type_function_get_rettype(pt), declonly); + fputc(' ', h); + if (ptr_level) fputc('(', h); + fprintf(h, "%s ", callconv); + for (i = 0; i < ptr_level; i++) + fputc('*', h); + } else + write_type_left(h, t, declonly); } if (name) fprintf(h, "%s%s", !t || needs_space_after(t) ? " " : "", name ); if (t) { - if (type_get_type_detect_alias(pt) == TYPE_FUNCTION) { - const var_list_t *args = type_function_get_args(pt); + if (type_get_type_detect_alias(pt) == TYPE_FUNCTION) { + const var_list_t *args = type_function_get_args(pt); - if (ptr_level) fputc(')', h); - fputc('(', h); - if (args) - write_args(h, args, NULL, 0, FALSE); - else - fprintf(h, "void"); - fputc(')', h); - } else - write_type_right(h, t, is_field); -} + if (ptr_level) fputc(')', h); + fputc('(', h); + if (args) + write_args(h, args, NULL, 0, FALSE); + else + fprintf(h, "void"); + fputc(')', h); + } else + write_type_right(h, t, is_field); + } } void write_type_def_or_decl(FILE *f, type_t *t, int field, const char *name) diff --git a/reactos/tools/widl/parser.tab.c b/reactos/tools/widl/parser.tab.c index 2ed6178b49a..198575fba90 100644 --- a/reactos/tools/widl/parser.tab.c +++ b/reactos/tools/widl/parser.tab.c @@ -5541,7 +5541,7 @@ static type_t *append_ptrchain_type(type_t *ptrchain, type_t *type) } static var_t *declare_var(attr_list_t *attrs, decl_spec_t *decl_spec, const declarator_t *decl, - int top) + int top) { var_t *v = decl->var; expr_list_t *sizes = get_attrp(attrs, ATTR_SIZEIS); @@ -5614,8 +5614,8 @@ static var_t *declare_var(attr_list_t *attrs, decl_spec_t *decl_spec, const decl type_t *t = type; if (!is_ptr(v->type) && !arr) - error_loc("'%s': [string] attribute applied to non-pointer, non-array type\n", - v->name); + error_loc("'%s': [string] attribute applied to non-pointer, non-array type\n", + v->name); while (is_ptr(t)) t = type_pointer_get_ref(t); @@ -6712,7 +6712,7 @@ static void check_remoting_args(const var_t *func) var.name = xstrdup("return value"); check_field_common(func->type, funcname, &var); free(var.name); -} + } } static void add_explicit_handle_if_necessary(var_t *func) diff --git a/reactos/tools/widl/parser.y b/reactos/tools/widl/parser.y index f18c10f6880..de44ab5626f 100644 --- a/reactos/tools/widl/parser.y +++ b/reactos/tools/widl/parser.y @@ -1376,7 +1376,7 @@ static type_t *append_ptrchain_type(type_t *ptrchain, type_t *type) } static var_t *declare_var(attr_list_t *attrs, decl_spec_t *decl_spec, const declarator_t *decl, - int top) + int top) { var_t *v = decl->var; expr_list_t *sizes = get_attrp(attrs, ATTR_SIZEIS); @@ -1449,8 +1449,8 @@ static var_t *declare_var(attr_list_t *attrs, decl_spec_t *decl_spec, const decl type_t *t = type; if (!is_ptr(v->type) && !arr) - error_loc("'%s': [string] attribute applied to non-pointer, non-array type\n", - v->name); + error_loc("'%s': [string] attribute applied to non-pointer, non-array type\n", + v->name); while (is_ptr(t)) t = type_pointer_get_ref(t); @@ -2547,7 +2547,7 @@ static void check_remoting_args(const var_t *func) var.name = xstrdup("return value"); check_field_common(func->type, funcname, &var); free(var.name); -} + } } static void add_explicit_handle_if_necessary(var_t *func) diff --git a/reactos/tools/widl/typegen.c b/reactos/tools/widl/typegen.c index 9072033c615..fdb2379a070 100644 --- a/reactos/tools/widl/typegen.c +++ b/reactos/tools/widl/typegen.c @@ -3249,7 +3249,7 @@ void print_phase_basetype(FILE *file, int indent, const char *local_var_prefix, local_var_prefix, var->name); print_file(file, indent+1, "0x%02x /* %s */);\n", fc, string_of_type(fc)); - } + } else { const type_t *ref = is_ptr(type) ? type_pointer_get_ref(type) : type; @@ -3298,45 +3298,45 @@ void print_phase_basetype(FILE *file, int indent, const char *local_var_prefix, size = 0; } - if (phase == PHASE_MARSHAL) - print_file(file, indent, "MIDL_memset(__frame->_StubMsg.Buffer, 0, (0x%x - (ULONG_PTR)__frame->_StubMsg.Buffer) & 0x%x);\n", alignment, alignment - 1); - print_file(file, indent, "__frame->_StubMsg.Buffer = (unsigned char *)(((ULONG_PTR)__frame->_StubMsg.Buffer + %u) & ~0x%x);\n", - alignment - 1, alignment - 1); + if (phase == PHASE_MARSHAL) + print_file(file, indent, "MIDL_memset(__frame->_StubMsg.Buffer, 0, (0x%x - (ULONG_PTR)__frame->_StubMsg.Buffer) & 0x%x);\n", alignment, alignment - 1); + print_file(file, indent, "__frame->_StubMsg.Buffer = (unsigned char *)(((ULONG_PTR)__frame->_StubMsg.Buffer + %u) & ~0x%x);\n", + alignment - 1, alignment - 1); - if (phase == PHASE_MARSHAL) - { - print_file(file, indent, "*("); - write_type_decl(file, is_ptr(type) ? type_pointer_get_ref(type) : type, NULL); - if (is_ptr(type)) - fprintf(file, " *)__frame->_StubMsg.Buffer = *"); - else - fprintf(file, " *)__frame->_StubMsg.Buffer = "); - fprintf(file, "%s%s", local_var_prefix, varname); - fprintf(file, ";\n"); - } - else if (phase == PHASE_UNMARSHAL) - { - print_file(file, indent, "if (__frame->_StubMsg.Buffer + sizeof("); - write_type_decl(file, is_ptr(type) ? type_pointer_get_ref(type) : type, NULL); - fprintf(file, ") > __frame->_StubMsg.BufferEnd)\n"); - print_file(file, indent, "{\n"); - print_file(file, indent + 1, "RpcRaiseException(RPC_X_BAD_STUB_DATA);\n"); - print_file(file, indent, "}\n"); - print_file(file, indent, "%s%s%s", - (pass == PASS_IN || pass == PASS_RETURN) ? "" : "*", - local_var_prefix, varname); - if (pass == PASS_IN && is_ptr(type)) - fprintf(file, " = ("); - else - fprintf(file, " = *("); - write_type_decl(file, is_ptr(type) ? type_pointer_get_ref(type) : type, NULL); - fprintf(file, " *)__frame->_StubMsg.Buffer;\n"); - } + if (phase == PHASE_MARSHAL) + { + print_file(file, indent, "*("); + write_type_decl(file, is_ptr(type) ? type_pointer_get_ref(type) : type, NULL); + if (is_ptr(type)) + fprintf(file, " *)__frame->_StubMsg.Buffer = *"); + else + fprintf(file, " *)__frame->_StubMsg.Buffer = "); + fprintf(file, "%s%s", local_var_prefix, varname); + fprintf(file, ";\n"); + } + else if (phase == PHASE_UNMARSHAL) + { + print_file(file, indent, "if (__frame->_StubMsg.Buffer + sizeof("); + write_type_decl(file, is_ptr(type) ? type_pointer_get_ref(type) : type, NULL); + fprintf(file, ") > __frame->_StubMsg.BufferEnd)\n"); + print_file(file, indent, "{\n"); + print_file(file, indent + 1, "RpcRaiseException(RPC_X_BAD_STUB_DATA);\n"); + print_file(file, indent, "}\n"); + print_file(file, indent, "%s%s%s", + (pass == PASS_IN || pass == PASS_RETURN) ? "" : "*", + local_var_prefix, varname); + if (pass == PASS_IN && is_ptr(type)) + fprintf(file, " = ("); + else + fprintf(file, " = *("); + write_type_decl(file, is_ptr(type) ? type_pointer_get_ref(type) : type, NULL); + fprintf(file, " *)__frame->_StubMsg.Buffer;\n"); + } - print_file(file, indent, "__frame->_StubMsg.Buffer += sizeof("); - write_type_decl(file, is_ptr(type) ? type_pointer_get_ref(type) : type, NULL); - fprintf(file, ");\n"); -} + print_file(file, indent, "__frame->_StubMsg.Buffer += sizeof("); + write_type_decl(file, is_ptr(type) ? type_pointer_get_ref(type) : type, NULL); + fprintf(file, ");\n"); + } } /* returns whether the MaxCount, Offset or ActualCount members need to be @@ -3589,7 +3589,7 @@ static void write_remoting_arg(FILE *file, int indent, const var_t *func, const break; } case TGT_BASIC: - print_phase_basetype(file, indent, local_var_prefix, phase, pass, var, var->name); + print_phase_basetype(file, indent, local_var_prefix, phase, pass, var, var->name); break; case TGT_ENUM: print_phase_basetype(file, indent, local_var_prefix, phase, pass, var, var->name); @@ -3661,7 +3661,7 @@ static void write_remoting_arg(FILE *file, int indent, const var_t *func, const if (pointer_type == RPC_FC_RP) switch (typegen_detect_type(ref, NULL, TDT_ALL_TYPES)) { case TGT_BASIC: - print_phase_basetype(file, indent, local_var_prefix, phase, pass, var, var->name); + print_phase_basetype(file, indent, local_var_prefix, phase, pass, var, var->name); break; case TGT_ENUM: /* base types have known sizes, so don't need a sizing pass From af9094fe3935215052d6537a5e43bdd9e2c21ea9 Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Mon, 7 Dec 2009 18:41:34 +0000 Subject: [PATCH 176/286] Add mysteriously missing file svn path=/branches/ros-amd64-bringup/; revision=44457 --- .../sysutils/utils/rosperf/scroll.c | 47 +++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 rosapps/applications/sysutils/utils/rosperf/scroll.c diff --git a/rosapps/applications/sysutils/utils/rosperf/scroll.c b/rosapps/applications/sysutils/utils/rosperf/scroll.c new file mode 100644 index 00000000000..1d892029632 --- /dev/null +++ b/rosapps/applications/sysutils/utils/rosperf/scroll.c @@ -0,0 +1,47 @@ +/* + * ReactOS RosPerf - ReactOS GUI performance test program + * + * 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. + */ + +#include +#include "rosperf.h" + +void +ScrollProc(void *Context, PPERF_INFO PerfInfo, unsigned Reps) +{ + unsigned Rep; + RECT rect; + int x = 0, y = 0, dx = 1, dy = 1; + + rect.left = rect.top = 0; + rect.right = PerfInfo->WndWidth; + rect.bottom = PerfInfo->WndHeight; + + DrawTextW(PerfInfo->ForegroundDc, L"rosperf", -1, &rect, DT_LEFT | DT_TOP); + + for (Rep = 0; Rep < Reps; Rep++) + { + ScrollDC((Rep & 0x100) ? PerfInfo->BackgroundDc : PerfInfo->ForegroundDc, + dx, dy, NULL, NULL, NULL, NULL); + x += dx; + y += dy; + if ((x >= PerfInfo->WndWidth -50) || x == 0) dx = -dx; + if ((y >= PerfInfo->WndHeight -10) || y == 0) dy = -dy; + } + +} + +/* EOF */ From 1bd3f2e4b84cf9b30a7d0082304c0da52b6bf2ae Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Mon, 7 Dec 2009 19:36:36 +0000 Subject: [PATCH 177/286] Add mysteriously missing files Fix some builds svn path=/branches/ros-amd64-bringup/; revision=44458 --- .../devutils/vgafontedit/lang/no-NO.rc | 94 +++++++++++++++++++ .../screensavers/blankscr/lang/no-NO.rc | 7 ++ .../screensavers/butterflies/butterflies.c | 2 +- .../screensavers/butterflies/lang/no-NO.rc | 34 +++++++ .../screensavers/circles/lang/fr-FR.rc | 7 ++ .../screensavers/circles/lang/no-NO.rc | 7 ++ .../screensavers/circles/lang/uk-UA.rc | 15 +++ .../screensavers/cylfrac/lang/no-NO.rc | 8 ++ .../screensavers/matrix/lang/no-NO.rc | 53 +++++++++++ .../screensavers/mazescr/lang/fr-FR.rc | 8 ++ .../screensavers/mazescr/lang/no-NO.rc | 8 ++ .../screensavers/starfield/lang/no-NO.rc | 8 ++ .../applications/sysutils/ctm/lang/no-NO.rc | 32 +++++++ .../sysutils/systeminfo/lang/no-NO.rc | 64 +++++++++++++ .../sysutils/systeminfo/lang/sk-SK.rc | 68 ++++++++++++++ .../sysutils/utils/binpatch/patch.c | 11 ++- 16 files changed, 420 insertions(+), 6 deletions(-) create mode 100644 rosapps/applications/devutils/vgafontedit/lang/no-NO.rc create mode 100644 rosapps/applications/screensavers/blankscr/lang/no-NO.rc create mode 100644 rosapps/applications/screensavers/butterflies/lang/no-NO.rc create mode 100644 rosapps/applications/screensavers/circles/lang/fr-FR.rc create mode 100644 rosapps/applications/screensavers/circles/lang/no-NO.rc create mode 100644 rosapps/applications/screensavers/circles/lang/uk-UA.rc create mode 100644 rosapps/applications/screensavers/cylfrac/lang/no-NO.rc create mode 100644 rosapps/applications/screensavers/matrix/lang/no-NO.rc create mode 100644 rosapps/applications/screensavers/mazescr/lang/fr-FR.rc create mode 100644 rosapps/applications/screensavers/mazescr/lang/no-NO.rc create mode 100644 rosapps/applications/screensavers/starfield/lang/no-NO.rc create mode 100644 rosapps/applications/sysutils/ctm/lang/no-NO.rc create mode 100644 rosapps/applications/sysutils/systeminfo/lang/no-NO.rc create mode 100644 rosapps/applications/sysutils/systeminfo/lang/sk-SK.rc diff --git a/rosapps/applications/devutils/vgafontedit/lang/no-NO.rc b/rosapps/applications/devutils/vgafontedit/lang/no-NO.rc new file mode 100644 index 00000000000..9fa1798c930 --- /dev/null +++ b/rosapps/applications/devutils/vgafontedit/lang/no-NO.rc @@ -0,0 +1,94 @@ +/* + * PROJECT: ReactOS VGA Font Editor + * LICENSE: GNU General Public License Version 2.0 or any later version + * FILE: devutils/vgafontedit/lang/en-US.rc + * PURPOSE: English resource file + * COPYRIGHT: Copyright 2008 Colin Finck + * TRANSLATOR: Colin Finck + */ + +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +IDD_ABOUT DIALOGEX 10, 10, 130, 62 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "Om" +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDI_MAIN, IDC_STATIC, 10, 10, 20, 20 + LTEXT "ReactOS VGA skriftredigering", IDC_STATIC, 37, 10, 93, 10 + LTEXT "Enerett 2008 Colin Finck", IDC_STATIC, 37, 20, 93, 10 + DEFPUSHBUTTON "OK", IDCANCEL, 40, 44, 55, 15 +END + +IDD_EDITGLYPH DIALOGEX 32768, 32768, 246, 197 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Rediger Glyph" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "", IDC_EDIT_GLYPH_TOOLBOX, TOOLBARCLASSNAMEA, CCS_NODIVIDER | CCS_NORESIZE, 5, 5, 24, 82 + CONTROL "", IDC_EDIT_GLYPH_EDIT, EDIT_GLYPH_EDIT_CLASSW, 0, 39, 5, 160, 160 + CONTROL "", IDC_EDIT_GLYPH_PREVIEW, EDIT_GLYPH_PREVIEW_CLASSW, 0, 209, 5, 32, 32 + + DEFPUSHBUTTON "OK", IDOK, 48, 177, 70, 14 + PUSHBUTTON "Avbryt", IDCANCEL, 125, 177, 70, 14 +END + +IDM_MAINMENU MENU +BEGIN + POPUP "&Fil" + BEGIN + MENUITEM "&Ny\tCtrl+N", ID_FILE_NEW + MENUITEM "&Åpne...\tCtrl+O", ID_FILE_OPEN + MENUITEM "Lukk", ID_FILE_CLOSE + MENUITEM SEPARATOR + MENUITEM "Lagre\tCtrl+S", ID_FILE_SAVE + MENUITEM "Lagre som...", ID_FILE_SAVE_AS + MENUITEM SEPARATOR + MENUITEM "Avslutt\tAlt+F4", ID_FILE_EXIT + END + + POPUP "&Rediger" + BEGIN + MENUITEM "Kopier\tCtrl+C", ID_EDIT_COPY + MENUITEM "Lim inn\tCtrl+V", ID_EDIT_PASTE + MENUITEM SEPARATOR + MENUITEM "Rediger Glyph...", ID_EDIT_GLYPH + END + + POPUP "&Vindu" + BEGIN + MENUITEM "&Overlappet", ID_WINDOW_CASCADE + MENUITEM "Hele &Horisontalt", ID_WINDOW_TILE_HORZ + MENUITEM "Hele &Vertikalt", ID_WINDOW_TILE_VERT + MENUITEM "&Ordne ikoner", ID_WINDOW_ARRANGE + MENUITEM SEPARATOR + MENUITEM "Nes&te\tCtrl+F6", ID_WINDOW_NEXT + END + + POPUP "&Hjelp" + BEGIN + MENUITEM "&Om...", ID_HELP_ABOUT + END +END + +STRINGTABLE +BEGIN + IDS_OPENFILTER, "Alle støttet formater (*.bin,*.psf)|*.bin;*.psf|Binære skrifttype filer (*.bin)|*.bin|PC skjerm skrifttype versjon 1 (*.psf)|*.psf|" + IDS_SAVEFILTER, "Binære skrifttype filer (*.bin)|*.bin|" + IDS_OPENERROR, "Feil med å åpne filen! (Feil nummer %1!u!)" + IDS_READERROR, "Feil med å lese filen! (Feil nummer %1!u!)" + IDS_WRITEERROR, "Feil med å lagre filen! (Feil nummer %1!u!)" + IDS_UNSUPPORTEDFORMAT, "Filformatet er ikke støttet!" + IDS_UNSUPPORTEDPSF, "Ikke støttet PSF filformat/skriftformat! Programmet støtter bare 8x8 skrift med ingen spesielle modus." + IDS_DOCNAME, "Skrifttype %1!u!" + IDS_SAVEPROMPT, "Filen ""%1"" har blitt endret, men har ikke blitt lagret.\n\nVil du lagre denne?" + IDS_APPTITLE, "ReactOS VGA Skriftredigering" + IDS_CLOSEEDIT, "Vennligst lukk alle åpne vinduer først!" + + IDS_TOOLTIP_NEW, "Ny" + IDS_TOOLTIP_OPEN, "Åpne" + IDS_TOOLTIP_SAVE, "Lagre" + IDS_TOOLTIP_EDIT_GLYPH, "Rediger Glyph" + IDS_TOOLTIP_COPY, "Kopier" + IDS_TOOLTIP_PASTE, "Lim inn" +END diff --git a/rosapps/applications/screensavers/blankscr/lang/no-NO.rc b/rosapps/applications/screensavers/blankscr/lang/no-NO.rc new file mode 100644 index 00000000000..f83f915f5ef --- /dev/null +++ b/rosapps/applications/screensavers/blankscr/lang/no-NO.rc @@ -0,0 +1,7 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +STRINGTABLE DISCARDABLE +BEGIN + IDS_DESCRIPTION "Tom skjerm" + IDS_TEXT "Ingen valg trenger å settes." +END diff --git a/rosapps/applications/screensavers/butterflies/butterflies.c b/rosapps/applications/screensavers/butterflies/butterflies.c index b11a45dd134..38d5d355433 100644 --- a/rosapps/applications/screensavers/butterflies/butterflies.c +++ b/rosapps/applications/screensavers/butterflies/butterflies.c @@ -238,7 +238,7 @@ BOOL AboutProc(HWND hdlg, UINT msg, WPARAM wpm, LPARAM lpm){ { SetTextColor((HDC)wpm, RGB(0,0,255)); SetBkColor((HDC)wpm, (COLORREF)GetSysColor(COLOR_3DFACE)); - return((int)GetSysColorBrush(COLOR_3DFACE)); + return(HandleToLong(GetSysColorBrush(COLOR_3DFACE))); } break; case WM_COMMAND: diff --git a/rosapps/applications/screensavers/butterflies/lang/no-NO.rc b/rosapps/applications/screensavers/butterflies/lang/no-NO.rc new file mode 100644 index 00000000000..a129375254a --- /dev/null +++ b/rosapps/applications/screensavers/butterflies/lang/no-NO.rc @@ -0,0 +1,34 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +IDD_DLG_SCREEN DIALOGEX DISCARDABLE 0, 0, 172, 57 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Sommerfugl skjermsparer innstilling" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "OK",IDOK,7,35,50,14 + PUSHBUTTON "Avbryt",IDCANCEL,61,35,50,14 + CONTROL "Roter sommerfugler",ROTATE,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,56,15,70,8 + PUSHBUTTON "Om",IDABOUT,115,35,50,14 +END + +IDD_DLG_ABOUT DIALOGEX DISCARDABLE 0, 0, 149, 79 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Om" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "OK",IDOK,48,58,56,14 + CTEXT "Sommerfugl skjermsparer",IDC_STATIC,7,7,135,9 + CTEXT "Demostrasjon av: NeHe ",IDC_STATIC,7,20,135,8 + CTEXT "http://nehe.gamedev.net",WEBPAGE1,7,29,135,8,SS_NOTIFY | + NOT WS_GROUP + CTEXT "Skjermsparer av: tHaPuTeR",IDC_STATIC,7,38,135,8,NOT + WS_GROUP + CTEXT "http://www.thaputer.com",WEBPAGE2,7,47,135,8,SS_NOTIFY | + NOT WS_GROUP +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_DESCRIPTION "Sommerfugl skjermsparer" +END diff --git a/rosapps/applications/screensavers/circles/lang/fr-FR.rc b/rosapps/applications/screensavers/circles/lang/fr-FR.rc new file mode 100644 index 00000000000..c38d79ad22b --- /dev/null +++ b/rosapps/applications/screensavers/circles/lang/fr-FR.rc @@ -0,0 +1,7 @@ +LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL + +STRINGTABLE DISCARDABLE +BEGIN + IDS_DESCRIPTION "Cercles" + IDS_TEXT "Il n'y a aucune option à définir." +END diff --git a/rosapps/applications/screensavers/circles/lang/no-NO.rc b/rosapps/applications/screensavers/circles/lang/no-NO.rc new file mode 100644 index 00000000000..bc3bec9f61c --- /dev/null +++ b/rosapps/applications/screensavers/circles/lang/no-NO.rc @@ -0,0 +1,7 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +STRINGTABLE DISCARDABLE +BEGIN + IDS_DESCRIPTION "Sirkeler" + IDS_TEXT "Ingen valg trenges å settes." +END diff --git a/rosapps/applications/screensavers/circles/lang/uk-UA.rc b/rosapps/applications/screensavers/circles/lang/uk-UA.rc new file mode 100644 index 00000000000..599d859c37e --- /dev/null +++ b/rosapps/applications/screensavers/circles/lang/uk-UA.rc @@ -0,0 +1,15 @@ +/* + * PROJECT: Circles ScreenSaver + * LICENSE: GPL - See COPYING in the top level directory + * FILE: applications/screensavers/circles/lang/uk-UA.rc + * PURPOSE: Ukraianian Language File for Circles ScreenSaver + * TRANSLATOR: Artem Reznikov + */ + +LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT + +STRINGTABLE DISCARDABLE +BEGIN + IDS_DESCRIPTION "Çàñòàâêà ""Êîëà""" + IDS_TEXT "Öÿ çàñòàâêà íå ìຠíàëàøòîâóâàíèõ ïàðàìåòð³â." +END diff --git a/rosapps/applications/screensavers/cylfrac/lang/no-NO.rc b/rosapps/applications/screensavers/cylfrac/lang/no-NO.rc new file mode 100644 index 00000000000..9f75d33207f --- /dev/null +++ b/rosapps/applications/screensavers/cylfrac/lang/no-NO.rc @@ -0,0 +1,8 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +STRINGTABLE DISCARDABLE +BEGIN + IDS_DESCRIPTION "Sylindere fraktal" + IDS_TITLE "Om" + IDS_TEXT "Sylindere fraktal av unC0Rr.\nSpesielt for ReactOS." +END diff --git a/rosapps/applications/screensavers/matrix/lang/no-NO.rc b/rosapps/applications/screensavers/matrix/lang/no-NO.rc new file mode 100644 index 00000000000..11ef165740d --- /dev/null +++ b/rosapps/applications/screensavers/matrix/lang/no-NO.rc @@ -0,0 +1,53 @@ +#include "resource.h" + +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +IDD_CONFIG DIALOGEX DISCARDABLE 0, 0, 340, 183 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Matrix Skjermsparer konfigurasjon" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Dekode &hastighet",IDC_STATIC,7,7,128,36 + LTEXT "Tregere",IDC_STATIC,13,24,22,8 + CONTROL "Slider1",IDC_SLIDER1,"msctls_trackbar32",TBS_AUTOTICKS | + TBS_BOTH | WS_TABSTOP,38,17,62,22 + LTEXT "Raskere",IDC_STATIC,104,24,20,8 + GROUPBOX "Siffer &tetthet",IDC_STATIC,7,50,128,36 + LTEXT "Mindre",IDC_STATIC,13,67,19,8 + CONTROL "Slider1",IDC_SLIDER2,"msctls_trackbar32",TBS_AUTOTICKS | + TBS_BOTH | WS_TABSTOP,38,60,62,22 + LTEXT "Mere",IDC_STATIC,104,67,23,8 + GROUPBOX "&Melding skjermhastighet",IDC_MSGSPEEDGRP,7,93,127,36 + LTEXT "Tregere",IDC_STATIC,13,110,22,8 + CONTROL "Slider3",IDC_SLIDER3,"msctls_trackbar32",TBS_AUTOTICKS | + TBS_BOTH | WS_TABSTOP,38,103,62,22 + LTEXT "Raskere",IDC_STATIC,104,110,22,8 + GROUPBOX "&Skriftstørrelse",IDC_STATIC,7,137,127,36 + LTEXT "Mindre",IDC_STATIC,13,153,24,8 + CONTROL "Slider3",IDC_SLIDER4,"msctls_trackbar32",TBS_AUTOTICKS | + TBS_BOTH | WS_TABSTOP,38,146,62,22 + LTEXT "Større",IDC_STATIC,104,153,25,8 + GROUPBOX "&Kodet meldinger",IDC_STATIC,145,7,188,142 + COMBOBOX IDC_COMBO1,153,22,172,62,CBS_DROPDOWN | WS_VSCROLL | + WS_TABSTOP + CONTROL "",IDC_PREVIEW,"Static",SS_LEFTNOWORDWRAP | + SS_CENTERIMAGE | WS_GROUP,154,39,116,72 + PUSHBUTTON "&Legg til",IDC_ADD,280,41,44,18 + PUSHBUTTON "&Fjern",IDC_REMOVE,280,66,44,18 + CONTROL "Tilfeldig melding",IDC_RANDOM,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,151,134,85,10 + DEFPUSHBUTTON "OK",IDOK,222,162,50,14 + PUSHBUTTON "Avbryt",IDCANCEL,283,162,50,14 + LTEXT "&Skrifttype:",IDC_STATIC,151,118,38,8 + COMBOBOX IDC_COMBO2,195,116,130,71,CBS_DROPDOWNLIST | CBS_SORT | + WS_VSCROLL | WS_TABSTOP + CONTROL "&Fet skrift",IDC_BOLD,"Button",BS_AUTOCHECKBOX | + BS_MULTILINE | WS_TABSTOP,247,134,46,10 + CTEXT "Matrix Skjermsparer www.catch22.org.uk",IDC_ABOUT,140, + 158,75,18 +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_DESCRIPTION "Matrix Skjermsparer" +END diff --git a/rosapps/applications/screensavers/mazescr/lang/fr-FR.rc b/rosapps/applications/screensavers/mazescr/lang/fr-FR.rc new file mode 100644 index 00000000000..4af4e52d760 --- /dev/null +++ b/rosapps/applications/screensavers/mazescr/lang/fr-FR.rc @@ -0,0 +1,8 @@ +LANGUAGE LANG_FRENCH, SUBLANG_NEUTRAL + +STRINGTABLE DISCARDABLE +BEGIN + IDS_DESCRIPTION "Écran de veille labyrinthe" + IDS_TITLE "À propos de" + IDS_TEXT "Il n'y a aucune option à définir." +END diff --git a/rosapps/applications/screensavers/mazescr/lang/no-NO.rc b/rosapps/applications/screensavers/mazescr/lang/no-NO.rc new file mode 100644 index 00000000000..0c64f243658 --- /dev/null +++ b/rosapps/applications/screensavers/mazescr/lang/no-NO.rc @@ -0,0 +1,8 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +STRINGTABLE DISCARDABLE +BEGIN + IDS_DESCRIPTION "Maze Skjermsparer" + IDS_TITLE "Om" + IDS_TEXT "Ingen valg trengs å settes." +END diff --git a/rosapps/applications/screensavers/starfield/lang/no-NO.rc b/rosapps/applications/screensavers/starfield/lang/no-NO.rc new file mode 100644 index 00000000000..416890253c6 --- /dev/null +++ b/rosapps/applications/screensavers/starfield/lang/no-NO.rc @@ -0,0 +1,8 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +STRINGTABLE DISCARDABLE +BEGIN + IDS_DESCRIPTION "Starfield Skjermsparer" + IDS_TITLE "Om" + IDS_TEXT "Ingen valg trenger å settes." +END diff --git a/rosapps/applications/sysutils/ctm/lang/no-NO.rc b/rosapps/applications/sysutils/ctm/lang/no-NO.rc new file mode 100644 index 00000000000..70df79b2340 --- /dev/null +++ b/rosapps/applications/sysutils/ctm/lang/no-NO.rc @@ -0,0 +1,32 @@ +// Norwegian (N.O.) resources + +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +STRINGTABLE DISCARDABLE +BEGIN + IDS_APP_TITLE "Konsoll oppgavebehandler v0.1 av Aleksey Bragin " + + IDS_COLUMN_NUMBER "# " + IDS_COLUMN_IMAGENAME "Bilde navn " + IDS_COLUMN_PID "PID " + IDS_COLUMN_CPU "Prosesor" + IDS_COLUMN_MEM "Minnebruk" + IDS_COLUMN_MEM_UNIT "KB" + IDS_COLUMN_PF "Page Faults" + + IDS_IDLE_PROCESS "System Idle Process" + IDS_YES "J" + IDS_NO "N" + + IDS_MENU "Trykk: S - slutt, A - avslutt prosess" + IDS_MENU_QUIT "S" + IDS_MENU_KILL_PROCESS "A" + + IDS_KILL_PROCESS "Er du sikker på at du vil avslutte denne prosessen? (J/n)" + IDS_KILL_PROCESS_ERR1 "Ikke mulig og avslutte denne prosessen..." + IDS_KILL_PROCESS_ERR2 "Ikke mulig og avslutte prosess %d (Ikke mulig og ÅpneProsess)" + + IDS_CTM_GENERAL_ERR1 "ctm: kan ikke bruke konsoll." + IDS_CTM_GENERAL_ERR2 "ctm: Kan ikke GetConsoleMode() for input konsoll." + IDS_CTM_GENERAL_ERR3 "ctm: kan ikke GetConsoleMode() for output konsoll." +END diff --git a/rosapps/applications/sysutils/systeminfo/lang/no-NO.rc b/rosapps/applications/sysutils/systeminfo/lang/no-NO.rc new file mode 100644 index 00000000000..2f862a3a18f --- /dev/null +++ b/rosapps/applications/sysutils/systeminfo/lang/no-NO.rc @@ -0,0 +1,64 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +STRINGTABLE DISCARDABLE +BEGIN + +IDS_USAGE, "SYSTEMINFO [/S system [/U brukernavn [/P [passord]]]] [/FO format] [/NH]\n\n\ +Beskrivelse:\n\ + Denne komando linje verktøyet gjør det mulig for en administrator å spørre om basis\n\ + system konfigurasjon informasjon.\n\n\ +Parameter liste:\n\ + /S system Spesifisere eksternt system for å kunne kobles til.\n\n\ + /U [domene\\]bruker Spesifisere brukeren sammenheng under hvilken\n\ + av kommando som skal kjøres.\n\n\ + /P [passord] Spesifisere passord for gitt\n\ + bruker sammenheng. Prompts for input if omitted.\n\n\ + /FO format Spesifisere formatet som i utgående\n\ + som skal vises.\n\ + Gyldige verdier: ""TABLE"", ""LIST"", ""CSV"".\n\n\ + /NH Spesifisere at ""Column Header"" skal\n\ + ikke vises i utgående.\n\ + Gyldig for bare ""TABLE"" og ""CSV"" formater.\n\n\ + /? Vis denne hjelp/bruk meldingen.\n\n\ +Eksempler:\n\ + SYSTEMINFO\n\ + SYSTEMINFO /?\n\ + SYSTEMINFO /S system\n\ + SYSTEMINFO /S system /U bruker\n\ + SYSTEMINFO /S system /U domene\\bruker /P passord /FO TABLE\n\ + SYSTEMINFO /S system /FO LIST\n\ + SYSTEMINFO /S system /FO CSV /NH\n" + +IDS_OS_NAME, "OS navn: %s\n" +IDS_OS_VERSION, "OS versjon: %d.%d.%d %s" +IDS_OS_BUILD, " Bygget %s\n" +IDS_OS_BUILD_TYPE, "OS bygg type: %s\n" +IDS_REG_OWNER, "Registert eier: %s\n" +IDS_REG_ORG, "Registerert organisasjon: %s\n" +IDS_PRODUCT_ID, "Produkt ID: %s\n" +IDS_INST_DATE, "Installert dato: %s, " +IDS_INST_TIME, "%s\n" +IDS_SYS_TYPE_UNKNOWN, "Systemtype: Ukjent\n" +IDS_SYS_TYPE_X86, "Systemtype: X86-basert PC\n" +IDS_SYS_TYPE_IA64, "Systemtype: IA64-basert PC\n" +IDS_SYS_TYPE_AMD64, "Systemtype: AMD64-basert PC\n" +IDS_PROCESSORS, "Prosessor(er): %u Prosessor(er) installert.\n" +IDS_ROS_DIR, "ReactOS mappe: %s\n" +IDS_SYS_DIR, "System mappe: %s\n" +IDS_BOOT_DEV, "Oppstartsenhet: %s\n" +IDS_SYS_LOCALE, "System lokal: %s\n" +IDS_INPUT_LOCALE, "Input lokal: %s\n" +IDS_TOTAL_PHYS_MEM, "Total fysisk minne: %ld MB (%ld KB)\n" +IDS_AVAIL_PHISICAL_MEM, "Tilgjengelig fysisk minne: %ld MB (%ld KB)\n" +IDS_VIRT_MEM_MAX, "Virtuelt minne: Maks Størrelse: %ld MB (%ld KB)\n" +IDS_VIRT_MEM_AVAIL, "Virtuelt minne: Tilgjengelig: %ld MB (%ld KB)\n" +IDS_VIRT_MEM_INUSE, "Virtuelt minne: i bruk: %ld MB (%ld KB)\n" +IDS_HOST_NAME, "Datamaskin navn: %s\n" +IDS_PAGEFILE_LOC, "Sidevekslingsfil lokalsjon(er) %s\n" +IDS_TIME_ZONE, "Tidssone: %s\n" +IDS_DOMINE, "Domene: %s\n" +IDS_BIOS_DATE, "BIOS dato: %s\n" +IDS_BIOS_VERSION, "BIOS Versjon: %s\n" +IDS_NETWORK_CARDS, "Nettverkskort(er) %u installert.\n" + +END diff --git a/rosapps/applications/sysutils/systeminfo/lang/sk-SK.rc b/rosapps/applications/sysutils/systeminfo/lang/sk-SK.rc new file mode 100644 index 00000000000..abdb09d00c2 --- /dev/null +++ b/rosapps/applications/sysutils/systeminfo/lang/sk-SK.rc @@ -0,0 +1,68 @@ +/* TRANSLATOR : M rio KaŸm r /Mario Kacmar/ aka Kario (kario@szm.sk) + * DATE OF TR.: 07-09-2008 + */ + +LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT + +STRINGTABLE DISCARDABLE +BEGIN + +IDS_USAGE, "SYSTEMINFO [/S syst‚m [/U pou§._meno [/P [heslo]]]] [/FO form t] [/NH]\n\n\ +Description:\n\ + This command line tool enables an administrator to query for basic\n\ + system configuration information.\n\n\ +Parameter List:\n\ + /S syst‚m Specifies the remote system to connect to.\n\n\ + /U [dom‚na\\]pou§¡vate– Specifies the user context under which\n\ + the command should execute.\n\n\ + /P [heslo] Specifies the password for the given\n\ + user context. Prompts for input if omitted.\n\n\ + /FO form t Specifies the format in which the output\n\ + is to be displayed.\n\ + Valid values: ""TABLE"", ""LIST"", ""CSV"".\n\n\ + /NH Specifies that the ""Column Header"" should\n\ + not be displayed in the output.\n\ + Valid only for ""TABLE"" and ""CSV"" formats.\n\n\ + /? Displays this help/usage.\n\n\ +Examples:\n\ + SYSTEMINFO\n\ + SYSTEMINFO /?\n\ + SYSTEMINFO /S system\n\ + SYSTEMINFO /S system /U user\n\ + SYSTEMINFO /S system /U domain\\user /P password /FO TABLE\n\ + SYSTEMINFO /S system /FO LIST\n\ + SYSTEMINFO /S system /FO CSV /NH\n" + +IDS_OS_NAME, "N zov OS: %s\n" +IDS_OS_VERSION, "Verzia OS: %d.%d.%d %s" +IDS_OS_BUILD, " Build %s\n" +IDS_OS_BUILD_TYPE, "OS Build typ: %s\n" +IDS_REG_OWNER, "Registovanì vlastn¡k: %s\n" +IDS_REG_ORG, "Registrovan  organiz cia: %s\n" +IDS_PRODUCT_ID, "ID produktu: %s\n" +IDS_INST_DATE, "D tum inçtal cie: %s, " +IDS_INST_TIME, "%s\n" +IDS_SYS_TYPE_UNKNOWN, "Typ syst‚mu: Nezn my\n" +IDS_SYS_TYPE_X86, "Typ syst‚mu: PC zalo§en‚ na X86\n" +IDS_SYS_TYPE_IA64, "Typ syst‚mu: PC zalo§en‚ na IA64\n" +IDS_SYS_TYPE_AMD64, "Typ syst‚mu: PC zalo§en‚ na AMD64\n" +IDS_PROCESSORS, "Procesor(y): %u Procesor(y) nainçtalovanì.\n" +IDS_ROS_DIR, "Adres r ReactOS: %s\n" +IDS_SYS_DIR, "Adres r System: %s\n" +IDS_BOOT_DEV, "Zav dzacie zariadenie: %s\n" +IDS_SYS_LOCALE, "System Locale: %s\n" +IDS_INPUT_LOCALE, "Input Locale: %s\n" +IDS_TOTAL_PHYS_MEM, "Celkov  fyzick  pam„œ: %ld MB (%ld KB)\n" +IDS_AVAIL_PHISICAL_MEM, "Dostupn  fyzick  pam„œ: %ld MB (%ld KB)\n" +IDS_VIRT_MEM_MAX, "Virtu lna pam„œ: Max Size: %ld MB (%ld KB)\n" +IDS_VIRT_MEM_AVAIL, "Virtu lna pam„œ: Available: %ld MB (%ld KB)\n" +IDS_VIRT_MEM_INUSE, "Virtu lna pam„œ: In Use: %ld MB (%ld KB)\n" +IDS_HOST_NAME, "Host Name: %s\n" +IDS_PAGEFILE_LOC, "Umiestnenie(a) str nkovacieho s£boru: %s\n" +IDS_TIME_ZONE, "¬asov‚ p smo: %s\n" +IDS_DOMINE, "Dom‚na: %s\n" +IDS_BIOS_DATE, "D tum BIOSu: %s\n" +IDS_BIOS_VERSION, "Verzia BIOSu: %s\n" +IDS_NETWORK_CARDS, "Sieœov  karta(y) %u nainçtalovan .\n" + +END diff --git a/rosapps/applications/sysutils/utils/binpatch/patch.c b/rosapps/applications/sysutils/utils/binpatch/patch.c index e2a13c3a625..d59423e0b44 100644 --- a/rosapps/applications/sysutils/utils/binpatch/patch.c +++ b/rosapps/applications/sysutils/utils/binpatch/patch.c @@ -213,7 +213,8 @@ static int outputPatch(const char *outputFileName) { char *patchExe, *patchBuffer = NULL; - int i, size, patchExeSize, patchSize, stringSize, stringOffset, patchOffset; + int i, size, patchExeSize, patchSize, stringSize; + size_t stringOffset, patchOffset; Patch *patch; PatchedFile *files; @@ -316,14 +317,14 @@ loadPatch() return -1; } - m_patch.name = p + (int)patch->name; + m_patch.name = p + (ULONG_PTR)patch->name; m_patch.fileCount = patch->fileCount; - m_patch.files = (PatchedFile *)(p + (int)patch->files); + m_patch.files = (PatchedFile *)(p + (ULONG_PTR)patch->files); for (i = 0; i < m_patch.fileCount; i++) { - m_patch.files[i].name = p + (int)m_patch.files[i].name; - m_patch.files[i].patches = (PatchedByte *)(p + (int)m_patch.files[i].patches); + m_patch.files[i].name = p + (ULONG_PTR)m_patch.files[i].name; + m_patch.files[i].patches = (PatchedByte *)(p + (ULONG_PTR)m_patch.files[i].patches); } printf("Patch %s loaded...\n", m_patch.name); From 57f3a21c8610f641b3a238aa26e182c19b90f6b4 Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Mon, 7 Dec 2009 20:01:50 +0000 Subject: [PATCH 178/286] Fix some modules svn path=/branches/ros-amd64-bringup/; revision=44459 --- rostests/apitests/gdi32api/gdi32api.rbuild | 2 +- rostests/dxtest/ddraw/helper.cpp | 2 +- rostests/tests/bench/bench-thread.c | 6 +-- rostests/tests/button2/buttontst2.c | 52 +++++++++++----------- rostests/tests/capclock/capclock.c | 6 +-- rostests/tests/combotst/combotst.c | 4 +- rostests/tests/edit/edittest.c | 4 +- 7 files changed, 38 insertions(+), 38 deletions(-) diff --git a/rostests/apitests/gdi32api/gdi32api.rbuild b/rostests/apitests/gdi32api/gdi32api.rbuild index 562db78c830..84c8525e9d6 100644 --- a/rostests/apitests/gdi32api/gdi32api.rbuild +++ b/rostests/apitests/gdi32api/gdi32api.rbuild @@ -1,4 +1,4 @@ - + . apitest user32 diff --git a/rostests/dxtest/ddraw/helper.cpp b/rostests/dxtest/ddraw/helper.cpp index 92bf3aa64d7..3d6e1fd105c 100644 --- a/rostests/dxtest/ddraw/helper.cpp +++ b/rostests/dxtest/ddraw/helper.cpp @@ -1,6 +1,6 @@ #include "ddrawtest.h" -LONG WINAPI BasicWindowProc (HWND hwnd, UINT message, UINT wParam, LONG lParam) +LRESULT WINAPI BasicWindowProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { diff --git a/rostests/tests/bench/bench-thread.c b/rostests/tests/bench/bench-thread.c index 6a8e4b95956..d0616130542 100644 --- a/rostests/tests/bench/bench-thread.c +++ b/rostests/tests/bench/bench-thread.c @@ -7,7 +7,7 @@ DWORD WINAPI thread_main1(LPVOID param) { - printf("Thread 1 running (Counter %lu)\n", (DWORD)param); + printf("Thread 1 running (Counter %lu)\n", param); SleepEx(INFINITE, TRUE); return 0; } @@ -16,7 +16,7 @@ thread_main1(LPVOID param) DWORD WINAPI thread_main2(LPVOID param) { - printf("Thread 2 running (Counter %lu)\n", (DWORD)param); + printf("Thread 2 running (Counter %lu)\n", param); Sleep(INFINITE); return 0; } @@ -34,7 +34,7 @@ int main (void) CreateThread(NULL, 0, thread_main1, - (LPVOID)i, + (LPVOID)(ULONG_PTR)i, 0, &id); diff --git a/rostests/tests/button2/buttontst2.c b/rostests/tests/button2/buttontst2.c index 0fa4ed74208..0564f7ec7b4 100644 --- a/rostests/tests/button2/buttontst2.c +++ b/rostests/tests/button2/buttontst2.c @@ -58,109 +58,109 @@ WinMain(HINSTANCE hInstance, hbtn[0] = CreateWindow( "BUTTON","BS_DEFPUSHBUTTON",WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON, - 10, 10, 200, 40, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); + 10, 10, 200, 40, hWnd, NULL, (HINSTANCE) GetWindowLongPtr(hWnd, GWL_HINSTANCE),NULL); hbtn[1] = CreateWindow( "BUTTON","BS_3STATE",WS_VISIBLE | WS_CHILD | BS_3STATE, - 10, 60, 200, 20, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); + 10, 60, 200, 20, hWnd, NULL, (HINSTANCE) GetWindowLongPtr(hWnd, GWL_HINSTANCE),NULL); hbtn[2] = CreateWindow( "BUTTON","BS_AUTO3STATE",WS_VISIBLE | WS_CHILD | BS_AUTO3STATE, - 10, 90, 200, 20, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); + 10, 90, 200, 20, hWnd, NULL, (HINSTANCE) GetWindowLongPtr(hWnd, GWL_HINSTANCE),NULL); hbtn[3] = CreateWindow( "BUTTON","BS_AUTOCHECKBOX",WS_VISIBLE | WS_CHILD | BS_AUTOCHECKBOX, - 10, 120, 200, 20, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); + 10, 120, 200, 20, hWnd, NULL, (HINSTANCE) GetWindowLongPtr(hWnd, GWL_HINSTANCE),NULL); hbtn[4] = CreateWindow( "BUTTON","BS_AUTORADIOBUTTON",WS_VISIBLE | WS_CHILD | BS_AUTORADIOBUTTON, - 10, 150, 200, 20, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); + 10, 150, 200, 20, hWnd, NULL, (HINSTANCE) GetWindowLongPtr(hWnd, GWL_HINSTANCE),NULL); hbtn[5] = CreateWindow( "BUTTON","BS_CHECKBOX",WS_VISIBLE | WS_CHILD | BS_CHECKBOX, - 10, 180, 200, 20, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); + 10, 180, 200, 20, hWnd, NULL, (HINSTANCE) GetWindowLongPtr(hWnd, GWL_HINSTANCE),NULL); hbtn[6] = CreateWindow( "BUTTON","BS_GROUPBOX",WS_VISIBLE | WS_CHILD | BS_GROUPBOX, - 10, 210, 200, 80, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); + 10, 210, 200, 80, hWnd, NULL, (HINSTANCE) GetWindowLongPtr(hWnd, GWL_HINSTANCE),NULL); hbtn[7] = CreateWindow( "BUTTON","BS_PUSHBUTTON",WS_VISIBLE | WS_CHILD | BS_PUSHBUTTON, - 20, 230, 180, 30, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); + 20, 230, 180, 30, hWnd, NULL, (HINSTANCE) GetWindowLongPtr(hWnd, GWL_HINSTANCE),NULL); hbtn[8] = CreateWindow( "BUTTON","BS_RADIOBUTTON",WS_VISIBLE | WS_CHILD | BS_RADIOBUTTON, - 10, 300, 200, 20, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); + 10, 300, 200, 20, hWnd, NULL, (HINSTANCE) GetWindowLongPtr(hWnd, GWL_HINSTANCE),NULL); hbtn[9] = CreateWindow( "BUTTON","BS_AUTORADIOBUTTON",WS_VISIBLE | WS_CHILD | BS_AUTORADIOBUTTON, - 220, 160, 200, 20, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); + 220, 160, 200, 20, hWnd, NULL, (HINSTANCE) GetWindowLongPtr(hWnd, GWL_HINSTANCE),NULL); hbtn[10] = CreateWindow( "BUTTON","BS_DEFPUSHBUTTON|BS_BOTTOM",WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON | BS_BOTTOM, - 220, 10, 250, 40, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); + 220, 10, 250, 40, hWnd, NULL, (HINSTANCE) GetWindowLongPtr(hWnd, GWL_HINSTANCE),NULL); hbtn[11] = CreateWindow( "BUTTON","BS_DEFPUSHBUTTON|BS_LEFT",WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON | BS_LEFT, - 480, 10, 250, 40, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); + 480, 10, 250, 40, hWnd, NULL, (HINSTANCE) GetWindowLongPtr(hWnd, GWL_HINSTANCE),NULL); hbtn[12] = CreateWindow( "BUTTON","BS_DEFPUSHBUTTON|BS_RIGHT|BS_MULTILINE",WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON | BS_RIGHT |BS_MULTILINE, - 740, 10, 150, 60, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); + 740, 10, 150, 60, hWnd, NULL, (HINSTANCE) GetWindowLongPtr(hWnd, GWL_HINSTANCE),NULL); hbtn[13] = CreateWindow( "BUTTON","BS_AUTORADIOBUTTON|BS_TOP",WS_VISIBLE | WS_CHILD | BS_AUTORADIOBUTTON | BS_TOP, - 220, 60, 200, 60, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); + 220, 60, 200, 60, hWnd, NULL, (HINSTANCE) GetWindowLongPtr(hWnd, GWL_HINSTANCE),NULL); // Other Combinations hbtn[14] = CreateWindow( "BUTTON","BS_AUTORADIOBUTTON|BS_BOTTOM|BS_MULTILINE",WS_VISIBLE | WS_CHILD | BS_AUTORADIOBUTTON | BS_BOTTOM | BS_MULTILINE, - 480, 60, 200, 60, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); + 480, 60, 200, 60, hWnd, NULL, (HINSTANCE) GetWindowLongPtr(hWnd, GWL_HINSTANCE),NULL); hbtn[15] = CreateWindow( "BUTTON","BS_AUTORADIOBUTTON|BS_LEFT",WS_VISIBLE | WS_CHILD | BS_AUTORADIOBUTTON | BS_LEFT, - 740, 80, 200, 20, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); + 740, 80, 200, 20, hWnd, NULL, (HINSTANCE) GetWindowLongPtr(hWnd, GWL_HINSTANCE),NULL); hbtn[16] = CreateWindow( "BUTTON","BS_AUTORADIOBUTTON|BS_RIGHT|BS_TOP",WS_VISIBLE | WS_CHILD | BS_AUTORADIOBUTTON | BS_RIGHT | BS_TOP, - 220, 130, 200, 20, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); + 220, 130, 200, 20, hWnd, NULL, (HINSTANCE) GetWindowLongPtr(hWnd, GWL_HINSTANCE),NULL); hbtn[17] = CreateWindow( "BUTTON","BS_AUTORADIOBUTTON|BS_TOP|BS_MULTILINE",WS_VISIBLE | WS_CHILD | BS_AUTORADIOBUTTON | BS_TOP| BS_MULTILINE, - 480, 130, 200, 60, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); + 480, 130, 200, 60, hWnd, NULL, (HINSTANCE) GetWindowLongPtr(hWnd, GWL_HINSTANCE),NULL); hbtn[18] = CreateWindow( "BUTTON","BS_AUTOCHECKBOX|BS_BOTTOM|BS_MULTILINE",WS_VISIBLE | WS_CHILD | BS_AUTOCHECKBOX | BS_BOTTOM | BS_MULTILINE, - 740, 130, 200, 60, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); + 740, 130, 200, 60, hWnd, NULL, (HINSTANCE) GetWindowLongPtr(hWnd, GWL_HINSTANCE),NULL); hbtn[19] = CreateWindow( "BUTTON","BS_AUTOCHECKBOX|BS_TOP|BS_MULTILINE",WS_VISIBLE | WS_CHILD | BS_AUTOCHECKBOX | BS_TOP | BS_MULTILINE, - 480, 190, 200, 60, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); + 480, 190, 200, 60, hWnd, NULL, (HINSTANCE) GetWindowLongPtr(hWnd, GWL_HINSTANCE),NULL); hbtn[20] = CreateWindow( "BUTTON","BS_AUTOCHECKBOX|BS_LEFT|BS_MULTILINE",WS_VISIBLE | WS_CHILD | BS_AUTOCHECKBOX | BS_LEFT | BS_MULTILINE, - 220, 230, 200, 60, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); + 220, 230, 200, 60, hWnd, NULL, (HINSTANCE) GetWindowLongPtr(hWnd, GWL_HINSTANCE),NULL); hbtn[21] = CreateWindow( "BUTTON","BS_AUTOCHECKBOX|BS_RIGHT|BS_MULTILINE",WS_VISIBLE | WS_CHILD | BS_AUTOCHECKBOX | BS_RIGHT | BS_MULTILINE, - 480, 240, 200, 60, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); + 480, 240, 200, 60, hWnd, NULL, (HINSTANCE) GetWindowLongPtr(hWnd, GWL_HINSTANCE),NULL); hbtn[22] = CreateWindow( "BUTTON","BS_GROUPBOX|BS_TOP",WS_VISIBLE | WS_CHILD | BS_GROUPBOX | BS_TOP, - 10, 340, 200, 60, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); + 10, 340, 200, 60, hWnd, NULL, (HINSTANCE) GetWindowLongPtr(hWnd, GWL_HINSTANCE),NULL); hbtn[23] = CreateWindow( "BUTTON","BS_GROUPBOX|BS_BOTTOM",WS_VISIBLE | WS_CHILD | BS_GROUPBOX | BS_BOTTOM, - 10, 410, 200, 60, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); + 10, 410, 200, 60, hWnd, NULL, (HINSTANCE) GetWindowLongPtr(hWnd, GWL_HINSTANCE),NULL); hbtn[24] = CreateWindow( "BUTTON","BS_GROUPBOXBOX|BS_LEFT",WS_VISIBLE | WS_CHILD | BS_GROUPBOX | BS_LEFT, - 520, 340, 200, 60, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); + 520, 340, 200, 60, hWnd, NULL, (HINSTANCE) GetWindowLongPtr(hWnd, GWL_HINSTANCE),NULL); hbtn[25] = CreateWindow( "BUTTON","BS_GROUPBOX|BS_RIGHT|BS_BOTTOM",WS_VISIBLE | WS_CHILD | BS_GROUPBOX | BS_BOTTOM | BS_RIGHT, - 300, 340, 200, 60, hWnd, NULL, (HINSTANCE) GetWindowLong(hWnd, GWL_HINSTANCE),NULL); + 300, 340, 200, 60, hWnd, NULL, (HINSTANCE) GetWindowLongPtr(hWnd, GWL_HINSTANCE),NULL); while(GetMessage(&msg, NULL, 0, 0)) { diff --git a/rostests/tests/capclock/capclock.c b/rostests/tests/capclock/capclock.c index 4d69e3ec611..5ea9d33cf45 100644 --- a/rostests/tests/capclock/capclock.c +++ b/rostests/tests/capclock/capclock.c @@ -11,8 +11,8 @@ UINT Timer = 1; -static BOOL CALLBACK DialogFunc(HWND,UINT,WPARAM,LPARAM); -static VOID CALLBACK TimerProc(HWND,UINT,UINT,DWORD); +static INT_PTR CALLBACK DialogFunc(HWND,UINT,WPARAM,LPARAM); +static VOID CALLBACK TimerProc(HWND,UINT,UINT_PTR,DWORD); INT WINAPI WinMain (HINSTANCE hinst, HINSTANCE hinstPrev, LPSTR lpCmdLine, INT nCmdShow) @@ -50,7 +50,7 @@ static INT_PTR CALLBACK DialogFunc (HWND hwndDlg, UINT msg, WPARAM wParam, LPARA } return FALSE; } -static VOID CALLBACK TimerProc (HWND hwnd, UINT uMsg, UINT idEvent, DWORD dwTime) +static VOID CALLBACK TimerProc (HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime) { CHAR text [20]; SYSTEMTIME lt; diff --git a/rostests/tests/combotst/combotst.c b/rostests/tests/combotst/combotst.c index 561218d7176..d9d718da521 100644 --- a/rostests/tests/combotst/combotst.c +++ b/rostests/tests/combotst/combotst.c @@ -282,7 +282,7 @@ CreateCheckButton(const char* lpWindowName, DWORD xSize, DWORD id) xSize, /* nWidth */ 20, /* nHeight */ g_hwnd, - (HMENU) id, + LongToHandle(id), g_hInst, NULL ); @@ -302,7 +302,7 @@ CreatePushButton(const char* lpWindowName, DWORD xSize, DWORD id,DWORD Style) xSize, /* nWidth */ 20, /* nHeight */ g_hwnd, - (HMENU) id, + LongToHandle(id), g_hInst, NULL ); diff --git a/rostests/tests/edit/edittest.c b/rostests/tests/edit/edittest.c index 35ab9b5b4e4..22d23dbc570 100644 --- a/rostests/tests/edit/edittest.c +++ b/rostests/tests/edit/edittest.c @@ -277,7 +277,7 @@ CreateCheckButton(const char* lpWindowName, DWORD xSize, DWORD id) xSize, /* nWidth */ 20, /* nHeight */ g_hwnd, - (HMENU) id, + (HMENU)(ULONG_PTR)id, g_hInst, NULL ); @@ -297,7 +297,7 @@ CreatePushButton(const char* lpWindowName, DWORD xSize, DWORD id,DWORD Style) xSize, // nWidth 20, // nHeight g_hwnd, - (HMENU) id, + (HMENU)(ULONG_PTR) id, g_hInst, NULL ); From 4cf93165be54e29fe5c297fb83d7a678c008867c Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Mon, 7 Dec 2009 22:29:45 +0000 Subject: [PATCH 179/286] Define PHDEVNOTIFY, PDLGITEMTEMPLATEA/W, LPDLGITEMTEMPLATEA/W, PPAINTSTRUCT, PMENUITEMTEMPLATE, PUSEROBJECTFLAGS, PMINIMIZEDMETRICS, PNONCLIENTMETRICSA/W, LPMOUSEINPUT, LPKEYBDINPUT, LPHARDWAREINPUT. Add HARDWAREHOOKSTRUCT structure. svn path=/branches/ros-amd64-bringup/; revision=44460 --- reactos/include/psdk/winuser.h | 36 +++++++++++++++++++++++----------- 1 file changed, 25 insertions(+), 11 deletions(-) diff --git a/reactos/include/psdk/winuser.h b/reactos/include/psdk/winuser.h index 5eff69b9385..757d6e6fd41 100644 --- a/reactos/include/psdk/winuser.h +++ b/reactos/include/psdk/winuser.h @@ -2782,6 +2782,7 @@ typedef void(CALLBACK *SENDASYNCPROC)(HWND,UINT,DWORD,LRESULT); DECLARE_HANDLE(HHOOK); DECLARE_HANDLE(HDWP); DECLARE_HANDLE(HDEVNOTIFY); +typedef HDEVNOTIFY *PHDEVNOTIFY; typedef struct tagACCEL { BYTE fVirt; @@ -2859,7 +2860,7 @@ typedef struct tagCOMPAREITEMSTRUCT { UINT itemID2; ULONG_PTR itemData2; DWORD dwLocaleId; -} COMPAREITEMSTRUCT,*LPCOMPAREITEMSTRUCT; +} COMPAREITEMSTRUCT, *PCOMPAREITEMSTRUCT,*LPCOMPAREITEMSTRUCT; typedef struct tagCOPYDATASTRUCT { ULONG_PTR dwData; @@ -2931,6 +2932,12 @@ typedef struct { typedef const DLGTEMPLATE *LPCDLGTEMPLATEA; typedef const DLGTEMPLATE *LPCDLGTEMPLATEW; +typedef DLGITEMTEMPLATE *PDLGITEMTEMPLATEA; +typedef DLGITEMTEMPLATE *PDLGITEMTEMPLATEW; +DECL_WINELIB_TYPE_AW(PDLGITEMTEMPLATE) +typedef DLGITEMTEMPLATE *LPDLGITEMTEMPLATEA; +typedef DLGITEMTEMPLATE *LPDLGITEMTEMPLATEW; + #ifdef UNICODE typedef LPCDLGTEMPLATEW LPCDLGTEMPLATE; @@ -2966,7 +2973,7 @@ typedef struct tagPAINTSTRUCT { BOOL fRestore; BOOL fIncUpdate; BYTE rgbReserved[32]; -} PAINTSTRUCT,*LPPAINTSTRUCT; +} PAINTSTRUCT, *PPAINTSTRUCT,*LPPAINTSTRUCT; typedef struct tagMSG { HWND hwnd; @@ -3107,13 +3114,13 @@ typedef struct _WINDOWPLACEMENT { typedef struct { WORD versionNumber; WORD offset; -} MENUITEMTEMPLATEHEADER; +} MENUITEMTEMPLATEHEADER, *PMENUITEMTEMPLATEHEADER; typedef struct { WORD mtOption; WORD mtID; WCHAR mtString[1]; -} MENUITEMTEMPLATE; +} MENUITEMTEMPLATE, *PMENUITEMTEMPLATE; typedef void MENUTEMPLATE,MENUTEMPLATEA,MENUTEMPLATEW,*LPMENUTEMPLATEA,*LPMENUTEMPLATEW,*LPMENUTEMPLATE; @@ -3158,7 +3165,7 @@ typedef struct tagUSEROBJECTFLAGS { BOOL fInherit; BOOL fReserved; DWORD dwFlags; -} USEROBJECTFLAGS; +} USEROBJECTFLAGS, *PUSEROBJECTFLAGS; typedef struct tagFILTERKEYS { UINT cbSize; @@ -3211,7 +3218,7 @@ typedef struct tagMINIMIZEDMETRICS { int iHorzGap; int iVertGap; int iArrange; -} MINIMIZEDMETRICS,*LPMINIMIZEDMETRICS; +} MINIMIZEDMETRICS, *PMINIMIZEDMETRICS,*LPMINIMIZEDMETRICS; typedef struct tagMOUSEKEYS{ UINT cbSize; @@ -3240,7 +3247,7 @@ typedef struct tagNONCLIENTMETRICSA { LOGFONTA lfMenuFont; LOGFONTA lfStatusFont; LOGFONTA lfMessageFont; -} NONCLIENTMETRICSA,*LPNONCLIENTMETRICSA; +} NONCLIENTMETRICSA, *PNONCLIENTMETRICSA,*LPNONCLIENTMETRICSA; typedef struct tagNONCLIENTMETRICSW { UINT cbSize; @@ -3258,7 +3265,7 @@ typedef struct tagNONCLIENTMETRICSW { LOGFONTW lfMenuFont; LOGFONTW lfStatusFont; LOGFONTW lfMessageFont; -} NONCLIENTMETRICSW,*LPNONCLIENTMETRICSW; +} NONCLIENTMETRICSW, *PNONCLIENTMETRICSW,*LPNONCLIENTMETRICSW; #ifdef UNICODE typedef NONCLIENTMETRICSW NONCLIENTMETRICS,*LPNONCLIENTMETRICS; @@ -3334,6 +3341,13 @@ typedef struct tagMOUSEHOOKSTRUCT { ULONG_PTR dwExtraInfo; } MOUSEHOOKSTRUCT,*LPMOUSEHOOKSTRUCT,*PMOUSEHOOKSTRUCT; +typedef struct tagHARDWAREHOOKSTRUCT { + HWND hwnd; + UINT message; + WPARAM wParam; + LPARAM lParam; +} HARDWAREHOOKSTRUCT, *PHARDWAREHOOKSTRUCT, *LPHARDWAREHOOKSTRUCT; + #if ( _WIN32_WINNT >= 0x0500 ) #ifdef __cplusplus typedef struct tagMOUSEHOOKSTRUCTEX : public tagMOUSEHOOKSTRUCT @@ -3633,7 +3647,7 @@ typedef struct tagMOUSEINPUT { DWORD dwFlags; DWORD time; ULONG_PTR dwExtraInfo; -} MOUSEINPUT,*PMOUSEINPUT; +} MOUSEINPUT,*PMOUSEINPUT, *LPMOUSEINPUT; typedef struct tagKEYBDINPUT { WORD wVk; @@ -3641,13 +3655,13 @@ typedef struct tagKEYBDINPUT { DWORD dwFlags; DWORD time; ULONG_PTR dwExtraInfo; -} KEYBDINPUT,*PKEYBDINPUT; +} KEYBDINPUT, *PKEYBDINPUT, *LPKEYBDINPUT; typedef struct tagHARDWAREINPUT { DWORD uMsg; WORD wParamL; WORD wParamH; -} HARDWAREINPUT,*PHARDWAREINPUT; +} HARDWAREINPUT, *PHARDWAREINPUT, *LPHARDWAREINPUT; typedef struct tagINPUT { DWORD type; From 5fc07e5280837691eb2e844b9543dfc3b678deb3 Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Mon, 7 Dec 2009 22:30:42 +0000 Subject: [PATCH 180/286] enable user32 generated winetest. svn path=/branches/ros-amd64-bringup/; revision=44461 --- rostests/winetests/user32/testlist.c | 2 +- rostests/winetests/user32/user32.rbuild | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/rostests/winetests/user32/testlist.c b/rostests/winetests/user32/testlist.c index 5438664e35f..a079aef633a 100644 --- a/rostests/winetests/user32/testlist.c +++ b/rostests/winetests/user32/testlist.c @@ -41,7 +41,7 @@ const struct test winetest_testlist[] = { "dde", func_dde }, { "dialog", func_dialog }, { "edit", func_edit }, -// { "generated", func_generated }, + { "generated", func_generated }, { "input", func_input }, { "listbox", func_listbox }, { "menu", func_menu }, diff --git a/rostests/winetests/user32/user32.rbuild b/rostests/winetests/user32/user32.rbuild index 57c850cd9f3..f568a06192c 100644 --- a/rostests/winetests/user32/user32.rbuild +++ b/rostests/winetests/user32/user32.rbuild @@ -17,7 +17,7 @@ dde.c dialog.c edit.c - + generated.c input.c listbox.c menu.c From 0d2d36c7de304d66a418e7bea582a051741e3293 Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Mon, 7 Dec 2009 23:09:35 +0000 Subject: [PATCH 181/286] Fix building some modules. special thanks to Basil Gello. svn path=/branches/ros-amd64-bringup/; revision=44462 --- rostests/drivers/kmtest/ntos_io.c | 8 ++--- rostests/drivers/kmtest/ntos_ob.c | 2 +- rostests/drivers/kmtest/reghelper.c | 2 +- rostests/tests/global_mem/global_mem.c | 36 +++++++++---------- rostests/tests/isotest/isotest.c | 4 +-- .../tests/map_dup_inherit/map_dup_inherit.c | 2 +- rostests/tests/mdi/mdi.c | 2 +- rostests/tests/miditest/miditest.c | 2 +- rostests/tests/multithrdwin/multithrdwin.c | 2 +- rostests/tests/p_dup_handle/p_dup_handle.c | 4 +-- rostests/win32/user32/kbdlayout/kbdlayout.c | 6 ++-- rostests/winetests/msvcrt/printf.c | 4 ++- 12 files changed, 38 insertions(+), 36 deletions(-) diff --git a/rostests/drivers/kmtest/ntos_io.c b/rostests/drivers/kmtest/ntos_io.c index 986098edc7d..aad2404ca73 100644 --- a/rostests/drivers/kmtest/ntos_io.c +++ b/rostests/drivers/kmtest/ntos_io.c @@ -48,7 +48,7 @@ VOID NtoskrnlIoMdlTest() ok(Mdl == NULL, "IoAllocateMdl should fail allocation of 2Gb or more, but got Mdl=0x%X", - (UINT32)Mdl); + (UINT_PTR)Mdl); if (Mdl) IoFreeMdl(Mdl); @@ -59,10 +59,10 @@ VOID NtoskrnlIoMdlTest() ok(Mdl != NULL, "Mdl allocation failed"); // Check fields of the allocated struct ok(Mdl->Next == NULL, "Mdl->Next should be NULL, but is 0x%X", - (UINT32)Mdl->Next); + (UINT_PTR)Mdl->Next); ok(Mdl->ByteCount == MdlSize, "Mdl->ByteCount should be equal to MdlSize, but is 0x%X", - (UINT32)Mdl->ByteCount); + (UINT_PTR)Mdl->ByteCount); // TODO: Check other fields of MDL struct IoFreeMdl(Mdl); @@ -72,7 +72,7 @@ VOID NtoskrnlIoMdlTest() Mdl = IoAllocateMdl(VirtualAddress, MdlSize, FALSE, FALSE, Irp); ok(Mdl != NULL, "Mdl allocation failed"); ok(Irp->MdlAddress == Mdl, "Irp->MdlAddress should be 0x%X, but is 0x%X", - (UINT32)Mdl, (UINT32)Irp->MdlAddress); + (UINT_PTR)Mdl, (UINT_PTR)Irp->MdlAddress); IoFreeMdl(Mdl); diff --git a/rostests/drivers/kmtest/ntos_ob.c b/rostests/drivers/kmtest/ntos_ob.c index a7c62fa5641..0de360383d3 100644 --- a/rostests/drivers/kmtest/ntos_ob.c +++ b/rostests/drivers/kmtest/ntos_ob.c @@ -324,7 +324,7 @@ ObtCreateObjects() "Object insertion should have failed, but got 0x%lX", Status); ok(ObBody[0] == ObBody1[1], "Object bodies doesn't match, 0x%p != 0x%p", ObBody[0], ObBody1[1]); - ok(ObHandle2[0] != NULL, "Bad handle returned 0x%lX", (ULONG)ObHandle2[0]); + ok(ObHandle2[0] != NULL, "Bad handle returned 0x%lX", (ULONG_PTR)ObHandle2[0]); DPRINT1("%d %d %d %d %d %d %d\n", DumpCount, OpenCount, // deletecount+1 CloseCount, DeleteCount, ParseCount, OkayToCloseCount, QueryNameCount); diff --git a/rostests/drivers/kmtest/reghelper.c b/rostests/drivers/kmtest/reghelper.c index c3a54d67ef3..a33e84a452c 100644 --- a/rostests/drivers/kmtest/reghelper.c +++ b/rostests/drivers/kmtest/reghelper.c @@ -75,7 +75,7 @@ PWCHAR CreateLowerDeviceRegistryKey(PUNICODE_STRING RegistryPath, PWCHAR NewDriv /* Remove the current driver name from the string */ /* FIXME: Dont use hard coded driver name, determine it from the string returned from the above Query */ Length = (wcslen((PWCHAR)ValuePartialInfo->Data) * 2) - (wcslen(L"kmtest.sys") * 2); - RtlZeroMemory((PVOID)((ULONG)ValuePartialInfo->Data + Length), + RtlZeroMemory((PVOID)((ULONG_PTR)ValuePartialInfo->Data + Length), wcslen(L"drvtests.sys") * 2); ZwClose(ServiceKey); diff --git a/rostests/tests/global_mem/global_mem.c b/rostests/tests/global_mem/global_mem.c index c7804dda5ff..14801bbae86 100644 --- a/rostests/tests/global_mem/global_mem.c +++ b/rostests/tests/global_mem/global_mem.c @@ -139,7 +139,7 @@ void OUTPUT_Result(TEST_STATUS status) /*--------------------------------------------------------------------------- ** */ -void OUTPUT_HexDword(DWORD dw) +void OUTPUT_HexDword(ULONG_PTR dw) { char buffer[32]; sprintf(buffer, "0x%lX",dw); @@ -412,9 +412,9 @@ TEST_STATUS TestGlobalReAllocFixed() else { OUTPUT_Line("Alloced Handle: "); - OUTPUT_HexDword((DWORD)hMem); + OUTPUT_HexDword((ULONG_PTR)hMem); OUTPUT_Line("ReAlloced Handle: "); - OUTPUT_HexDword((DWORD)hReAlloced); + OUTPUT_HexDword((ULONG_PTR)hReAlloced); if (hMem == hReAlloced) { OUTPUT_Line("GlobalReAlloc returned the same pointer. The documentation states that this is wrong, but Windows NT works this way."); @@ -455,9 +455,9 @@ TEST_STATUS TestGlobalReAllocFixed() else { OUTPUT_Line("Alloced Handle: "); - OUTPUT_HexDword((DWORD)hMem); + OUTPUT_HexDword((ULONG_PTR)hMem); OUTPUT_Line("ReAlloced Handle: "); - OUTPUT_HexDword((DWORD)hReAlloced); + OUTPUT_HexDword((ULONG_PTR)hReAlloced); if (hMem != hReAlloced) { OUTPUT_Line("GlobalReAlloc returned a different."); @@ -516,9 +516,9 @@ TEST_STATUS TestGlobalReAllocMovable() else { OUTPUT_Line("Alloced Handle: "); - OUTPUT_HexDword((DWORD)hMem); + OUTPUT_HexDword((ULONG_PTR)hMem); OUTPUT_Line("ReAlloced Handle: "); - OUTPUT_HexDword((DWORD)hReAlloced); + OUTPUT_HexDword((ULONG_PTR)hReAlloced); pMem = GlobalLock(hReAlloced); hMem = hReAlloced; @@ -559,9 +559,9 @@ TEST_STATUS TestGlobalReAllocMovable() else { OUTPUT_Line("Alloced Handle: "); - OUTPUT_HexDword((DWORD)hMem); + OUTPUT_HexDword((ULONG_PTR)hMem); OUTPUT_Line("ReAlloced Handle: "); - OUTPUT_HexDword((DWORD)hReAlloced); + OUTPUT_HexDword((ULONG_PTR)hReAlloced); if (hMem != hReAlloced) { OUTPUT_Line("GlobalReAlloc returned a different block."); @@ -638,7 +638,7 @@ TEST_STATUS TestGlobalFlagsMoveable() OUTPUT_Result(result); OUTPUT_Line("Pointer from handle: "); - OUTPUT_HexDword((DWORD)GlobalLock(hMem)); + OUTPUT_HexDword((ULONG_PTR)GlobalLock(hMem)); OUTPUT_Line("Testing after a lock"); OUTPUT_Line("Testing for a lock of 1"); @@ -679,7 +679,7 @@ TEST_STATUS TestGlobalFlagsMoveable() if (0 != hMem) { OUTPUT_Line("Allocation handle: "); - OUTPUT_HexDword((DWORD)hMem); + OUTPUT_HexDword((ULONG_PTR)hMem); OUTPUT_Line("Testing for a discarded flag"); uFlags = GlobalFlags(hMem); if (0 != (uFlags & GMEM_DISCARDED)) /*discarded*/ @@ -720,7 +720,7 @@ TEST_STATUS TestGlobalFlagsFixed() { OUTPUT_Line("Allocation handle: "); - OUTPUT_HexDword((DWORD)hMem); + OUTPUT_HexDword((ULONG_PTR)hMem); OUTPUT_Line("Testing initial allocation"); OUTPUT_Line("Testing for non-discarded and lock of 0"); @@ -737,7 +737,7 @@ TEST_STATUS TestGlobalFlagsFixed() OUTPUT_Result(result); OUTPUT_Line("Pointer from handle: "); - OUTPUT_HexDword((DWORD)GlobalLock(hMem)); + OUTPUT_HexDword((ULONG_PTR)GlobalLock(hMem)); OUTPUT_Line("Testing after a lock"); OUTPUT_Line("Testing for non-discarded and lock of 0"); uFlags = GlobalFlags(hMem); @@ -796,7 +796,7 @@ TEST_STATUS TestGlobalHandle() { OUTPUT_Line("Allocation handle: "); - OUTPUT_HexDword((DWORD)hMem); + OUTPUT_HexDword((ULONG_PTR)hMem); hTest = GlobalHandle(hMem); if (hMem == hTest) @@ -806,7 +806,7 @@ TEST_STATUS TestGlobalHandle() else { OUTPUT_Line("GlobalHandle returned:"); - OUTPUT_HexDword((DWORD)hTest); + OUTPUT_HexDword((ULONG_PTR)hTest); subtest = TEST_CombineStatus(subtest, FAILED); } @@ -830,7 +830,7 @@ TEST_STATUS TestGlobalHandle() { OUTPUT_Line("Allocation handle: "); - OUTPUT_HexDword((DWORD)hMem); + OUTPUT_HexDword((ULONG_PTR)hMem); pMem = GlobalLock(hMem); hTest = GlobalHandle(pMem); if (hMem == hTest) @@ -840,7 +840,7 @@ TEST_STATUS TestGlobalHandle() else { OUTPUT_Line("GlobalHandle returned:"); - OUTPUT_HexDword((DWORD)hTest); + OUTPUT_HexDword((ULONG_PTR)hTest); subtest = TEST_CombineStatus(subtest, FAILED); } @@ -979,7 +979,7 @@ TEST_STATUS TestGlobalDiscard() if (0 != hMem) { OUTPUT_Line("Allocation handle: "); - OUTPUT_HexDword((DWORD)hMem); + OUTPUT_HexDword((ULONG_PTR)hMem); hTest = GlobalDiscard(hMem); if (0 == hTest) diff --git a/rostests/tests/isotest/isotest.c b/rostests/tests/isotest/isotest.c index a0c4921e5e3..d2f78513edf 100644 --- a/rostests/tests/isotest/isotest.c +++ b/rostests/tests/isotest/isotest.c @@ -21,7 +21,7 @@ void HexDump(char *buffer, ULONG size) while (offset < (size & ~15)) { - ptr = (unsigned char*)((ULONG)buffer + offset); + ptr = (unsigned char*)((ULONG_PTR)buffer + offset); printf("%08lx %02hx %02hx %02hx %02hx %02hx %02hx %02hx %02hx-%02hx %02hx %02hx %02hx %02hx %02hx %02hx %02hx", offset, ptr[0], @@ -62,7 +62,7 @@ void HexDump(char *buffer, ULONG size) offset += 16; } - ptr = (unsigned char*)((ULONG)buffer + offset); + ptr = (unsigned char*)((ULONG_PTR)buffer + offset); if (offset < size) { printf("%08lx ", offset); diff --git a/rostests/tests/map_dup_inherit/map_dup_inherit.c b/rostests/tests/map_dup_inherit/map_dup_inherit.c index 59077fd19fc..3e78ad204f2 100644 --- a/rostests/tests/map_dup_inherit/map_dup_inherit.c +++ b/rostests/tests/map_dup_inherit/map_dup_inherit.c @@ -17,7 +17,7 @@ int main( int argc, char **argv ) { if( argc == 2 ) { #ifdef WIN64 - file_map = (void *)atoi64(argv[1]); + file_map = (void *)_atoi64(argv[1]); #else file_map = (void *)UlongToPtr(atoi(argv[1])); #endif diff --git a/rostests/tests/mdi/mdi.c b/rostests/tests/mdi/mdi.c index d3f2aaf7bea..67cf1a9e51b 100644 --- a/rostests/tests/mdi/mdi.c +++ b/rostests/tests/mdi/mdi.c @@ -160,7 +160,7 @@ HWND CreateNewMDIChild(HWND hMDIClient) mcs.y = mcs.cy = CW_USEDEFAULT; mcs.style = MDIS_ALLCHILDSTYLES; - hChild = (HWND)SendMessage(hMDIClient, WM_MDICREATE, 0, (LONG)&mcs); + hChild = (HWND)SendMessage(hMDIClient, WM_MDICREATE, 0, (LPARAM)&mcs); if(!hChild) { MessageBox(hMDIClient, "MDI Child creation failed.", "Oh Oh...", diff --git a/rostests/tests/miditest/miditest.c b/rostests/tests/miditest/miditest.c index e58b4acdc09..54a9edc641d 100644 --- a/rostests/tests/miditest/miditest.c +++ b/rostests/tests/miditest/miditest.c @@ -36,7 +36,7 @@ int main() printf("Opening MIDI output #0\n"); Result = midiOutOpen(&Handle, 0, 0, 0, CALLBACK_NULL); - printf("Result == %d Handle == %d\n", Result, (int)Handle); + printf("Result == %d Handle == %x\n", Result, Handle); // play something: midiOutShortMsg(Handle, 0x007f3090); diff --git a/rostests/tests/multithrdwin/multithrdwin.c b/rostests/tests/multithrdwin/multithrdwin.c index e0f885355c5..0d4fc5e98f1 100644 --- a/rostests/tests/multithrdwin/multithrdwin.c +++ b/rostests/tests/multithrdwin/multithrdwin.c @@ -157,7 +157,7 @@ LRESULT CALLBACK MultiWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) HDC hDC; RECT Client; HBRUSH Brush; - DWORD Ret; + DWORD_PTR Ret; static COLORREF Colors[] = { diff --git a/rostests/tests/p_dup_handle/p_dup_handle.c b/rostests/tests/p_dup_handle/p_dup_handle.c index 6aa5f7d1c05..38cc094a68f 100644 --- a/rostests/tests/p_dup_handle/p_dup_handle.c +++ b/rostests/tests/p_dup_handle/p_dup_handle.c @@ -15,7 +15,7 @@ int main( int argc, char **argv ) { fprintf( stderr, "%lu: Starting\n", GetCurrentProcessId() ); if( argc == 2 ) { - h_process = (HANDLE)atoi(argv[1]); + h_process = (HANDLE)(ULONG_PTR)atoi(argv[1]); } else { if( !DuplicateHandle( GetCurrentProcess(), GetCurrentProcess(), @@ -38,7 +38,7 @@ int main( int argc, char **argv ) { memset( &si, 0, sizeof( si ) ); memset( &pi, 0, sizeof( pi ) ); - sprintf( cmdline, "%s %lu", argv[0], (DWORD)h_process ); + sprintf( cmdline, "%s %x", argv[0], h_process ); if( !CreateProcess(NULL, cmdline, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi ) ) { fprintf( stderr, "%lu: Could not create child process.\n", diff --git a/rostests/win32/user32/kbdlayout/kbdlayout.c b/rostests/win32/user32/kbdlayout/kbdlayout.c index 28dc32fe791..a4bf4f0ed3a 100644 --- a/rostests/win32/user32/kbdlayout/kbdlayout.c +++ b/rostests/win32/user32/kbdlayout/kbdlayout.c @@ -122,7 +122,7 @@ void FormatBox(HWND hWnd, DWORD Flags, WCHAR *Caption, WCHAR *Format, ...) LRESULT CALLBACK WndSubclassProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { - WND_DATA *data = (WND_DATA*)GetWindowLong(hwnd, GWL_USERDATA); + WND_DATA *data = (WND_DATA*)GetWindowLongPtr(hwnd, GWL_USERDATA); if(uMsg == WM_INPUTLANGCHANGE) { @@ -143,9 +143,9 @@ LRESULT CALLBACK WndSubclassProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lP void SubclassWnd(HWND hWnd, WCHAR* Name) { WND_DATA *data = HeapAlloc(GetProcessHeap(), 0, sizeof(WND_DATA)); - data->OrigProc = (WNDPROC)SetWindowLong( hWnd, GWL_WNDPROC, (LONG)WndSubclassProc); + data->OrigProc = (WNDPROC)SetWindowLongPtr( hWnd, GWL_WNDPROC, (LONG_PTR)WndSubclassProc); wcsncpy(data->WndName, Name, 25); - SetWindowLong(hWnd, GWL_USERDATA, (LONG)data); + SetWindowLong(hWnd, GWL_USERDATA, (LONG_PTR)data); return; } diff --git a/rostests/winetests/msvcrt/printf.c b/rostests/winetests/msvcrt/printf.c index a4d5b0b5f0d..7c648ecf823 100644 --- a/rostests/winetests/msvcrt/printf.c +++ b/rostests/winetests/msvcrt/printf.c @@ -23,8 +23,10 @@ /* With Visual Studio >= 2005, swprintf() takes an extra parameter unless * the following macro is defined. */ +#ifdef _MSC_VER #define _CRT_NON_CONFORMING_SWPRINTFS - +#endif + #include #include "windef.h" From 20a05a760bf8880bd03ccca16252bc6f426ca843 Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Mon, 7 Dec 2009 23:11:49 +0000 Subject: [PATCH 182/286] Fix building some modules. svn path=/branches/ros-amd64-bringup/; revision=44463 --- rosapps/applications/devutils/gdihv/handlelist.c | 10 +++++----- rosapps/applications/screensavers/cylfrac/cylfrac.c | 6 +++--- rosapps/applications/screensavers/mazescr/scrnsave.c | 2 +- rosapps/applications/sysutils/ctm/ctm.c | 4 ++-- rosapps/applications/sysutils/pedump/pedump.c | 2 +- 5 files changed, 12 insertions(+), 12 deletions(-) diff --git a/rosapps/applications/devutils/gdihv/handlelist.c b/rosapps/applications/devutils/gdihv/handlelist.c index a1a3a8f03ac..28eea951506 100644 --- a/rosapps/applications/devutils/gdihv/handlelist.c +++ b/rosapps/applications/devutils/gdihv/handlelist.c @@ -87,9 +87,9 @@ HandleList_Update(HWND hHandleListCtrl, HANDLE ProcessId) (ProcessId == (HANDLE)2) ) { if (ProcessId == (HANDLE)1 || ProcessId == (HANDLE)2 || - ((LONG)ProcessId & 0xfffc) == ((ULONG)pEntry->ProcessId & 0xfffc)) + ((LONG_PTR)ProcessId & 0xfffc) == ((ULONG_PTR)pEntry->ProcessId & 0xfffc)) { - handle = GDI_HANDLE_CREATE(i, pEntry->Type); + handle = GDI_HANDLE_CREATE(i, (ULONG_PTR)pEntry->Type); index = ListView_GetItemCount(hHandleListCtrl); item.iItem = index; item.iSubItem = 0; @@ -107,13 +107,13 @@ HandleList_Update(HWND hHandleListCtrl, HANDLE ProcessId) str2 = GetTypeName(handle); ListView_SetItemText(hHandleListCtrl, index, 3, str2); - wsprintf(strText, L"%#08x", (UINT)pEntry->ProcessId); + wsprintf(strText, L"%#08x", (UINT_PTR)pEntry->ProcessId); ListView_SetItemText(hHandleListCtrl, index, 4, strText); - wsprintf(strText, L"%#08x", (UINT)pEntry->KernelData); + wsprintf(strText, L"%#08x", (UINT_PTR)pEntry->KernelData); ListView_SetItemText(hHandleListCtrl, index, 5, strText); - wsprintf(strText, L"%#08x", (UINT)pEntry->UserData); + wsprintf(strText, L"%#08x", (UINT_PTR)pEntry->UserData); ListView_SetItemText(hHandleListCtrl, index, 6, strText); wsprintf(strText, L"%#08x", (UINT)pEntry->Type); diff --git a/rosapps/applications/screensavers/cylfrac/cylfrac.c b/rosapps/applications/screensavers/cylfrac/cylfrac.c index 03ed11485ea..3d732f5bc60 100644 --- a/rosapps/applications/screensavers/cylfrac/cylfrac.c +++ b/rosapps/applications/screensavers/cylfrac/cylfrac.c @@ -111,7 +111,7 @@ void DrawScene(HWND hwnd, HDC dc, int ticks) EndPaint(hwnd, &ps); } -void CALLBACK TimeProc(UINT uID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2) +void CALLBACK TimeProc(UINT uID, UINT uMsg, DWORD_PTR dwUser, DWORD_PTR dw1, DWORD_PTR dw2) { InvalidateRect((HWND)dwUser, NULL, 0); } @@ -155,7 +155,7 @@ LRESULT WINAPI WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) GetCursorPos(&initpoint); InitGL(hwnd); oldticks = GetTickCount(); - TimerID = timeSetEvent (timerdelay, 0, TimeProc, (DWORD)hwnd, TIME_PERIODIC); + TimerID = timeSetEvent (timerdelay, 0, TimeProc, (DWORD_PTR)hwnd, TIME_PERIODIC); break; case WM_PAINT: { @@ -268,7 +268,7 @@ VOID ParseCommandLine(LPWSTR szCmdLine, UCHAR *chOption, HWND *hwndParent) if(isdigit(ch)) { unsigned int i = _wtoi(szCmdLine - 1); - *hwndParent = (HWND)i; + *hwndParent = (HWND)(ULONG_PTR)i; } else *hwndParent = NULL; diff --git a/rosapps/applications/screensavers/mazescr/scrnsave.c b/rosapps/applications/screensavers/mazescr/scrnsave.c index 304f7411537..e76d0298ba9 100644 --- a/rosapps/applications/screensavers/mazescr/scrnsave.c +++ b/rosapps/applications/screensavers/mazescr/scrnsave.c @@ -167,7 +167,7 @@ void ParseCommandLine(PSTR szCmdLine, int *chOption, HWND *hwndParent) if(isdigit(ch)) { unsigned int i = atoi(szCmdLine - 1); - *hwndParent = (HWND)i; + *hwndParent = (HWND)(ULONG_PTR)i; } else *hwndParent = 0; diff --git a/rosapps/applications/sysutils/ctm/ctm.c b/rosapps/applications/sysutils/ctm/ctm.c index 948caf126d0..a0a7c260ad5 100644 --- a/rosapps/applications/sysutils/ctm/ctm.c +++ b/rosapps/applications/sysutils/ctm/ctm.c @@ -493,7 +493,7 @@ void PerfDataRefresh() // so that we can establish delta values pPDOld = NULL; for (Idx2=0; Idx2UniqueProcessId) && + if (pPerfDataOld[Idx2].ProcessId == (ULONG_PTR)(pSPI->UniqueProcessId) && /* check also for the creation time, a new process may have an id of an old one */ pPerfDataOld[Idx2].CreateTime.QuadPart == pSPI->CreateTime.QuadPart) { pPDOld = &pPerfDataOld[Idx2]; @@ -517,7 +517,7 @@ void PerfDataRefresh() #endif } - pPerfData[Idx].ProcessId = (ULONG)(pSPI->UniqueProcessId); + pPerfData[Idx].ProcessId = (ULONG_PTR)(pSPI->UniqueProcessId); pPerfData[Idx].CreateTime = pSPI->CreateTime; if (pPDOld) { diff --git a/rosapps/applications/sysutils/pedump/pedump.c b/rosapps/applications/sysutils/pedump/pedump.c index 15003f777f2..27555cb987f 100644 --- a/rosapps/applications/sysutils/pedump/pedump.c +++ b/rosapps/applications/sysutils/pedump/pedump.c @@ -1011,7 +1011,7 @@ GetModuleEntryPoint ( PIMAGE_OPTIONAL_HEADER poh = (PIMAGE_OPTIONAL_HEADER) OPTHDROFFSET (lpFile); if (poh != NULL) - return (LPVOID) (poh->AddressOfEntryPoint); + return (LPVOID)(ULONG_PTR)(poh->AddressOfEntryPoint); else return NULL; } From d070fd9f2f13032391dd555df37eb0fc0d1b94d6 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Tue, 8 Dec 2009 14:00:42 +0000 Subject: [PATCH 183/286] Try to fix encoded's broken apps. svn path=/branches/ros-amd64-bringup/; revision=44467 --- reactos/lib/3rdparty/mingw/moldname-msvcrt.def | 2 ++ 1 file changed, 2 insertions(+) diff --git a/reactos/lib/3rdparty/mingw/moldname-msvcrt.def b/reactos/lib/3rdparty/mingw/moldname-msvcrt.def index afd7694d40a..98330457f27 100644 --- a/reactos/lib/3rdparty/mingw/moldname-msvcrt.def +++ b/reactos/lib/3rdparty/mingw/moldname-msvcrt.def @@ -1,3 +1,5 @@ +LIBRARY msvcrt.dll + EXPORTS access chdir From c2d98129d6dbd42f1951e27ad9519a229720198b Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Tue, 8 Dec 2009 14:32:39 +0000 Subject: [PATCH 184/286] Fix 2nd try. svn path=/branches/ros-amd64-bringup/; revision=44468 --- reactos/lib/3rdparty/mingw/moldname-msvcrt.def | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/lib/3rdparty/mingw/moldname-msvcrt.def b/reactos/lib/3rdparty/mingw/moldname-msvcrt.def index 98330457f27..083b27a6e9d 100644 --- a/reactos/lib/3rdparty/mingw/moldname-msvcrt.def +++ b/reactos/lib/3rdparty/mingw/moldname-msvcrt.def @@ -1,4 +1,4 @@ -LIBRARY msvcrt.dll +LIBRARY crtdll.dll EXPORTS access From be39596e77d484316d3200498548500dcc7461e7 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Tue, 8 Dec 2009 16:41:01 +0000 Subject: [PATCH 185/286] Thanks to ktietz for his awesome dlltool patch! Will require dlltool 2.20.51.20091118 svn path=/branches/ros-amd64-bringup/; revision=44470 --- reactos/lib/3rdparty/mingw/moldname-msvcrt.def | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/reactos/lib/3rdparty/mingw/moldname-msvcrt.def b/reactos/lib/3rdparty/mingw/moldname-msvcrt.def index 083b27a6e9d..d5bd27d2bd3 100644 --- a/reactos/lib/3rdparty/mingw/moldname-msvcrt.def +++ b/reactos/lib/3rdparty/mingw/moldname-msvcrt.def @@ -1,4 +1,4 @@ -LIBRARY crtdll.dll +LIBRARY msvcrt.dll EXPORTS access @@ -22,11 +22,11 @@ execve execvp execvpe fcvt -fdopen +fdopen==_fdopen fgetchar fgetwchar filelength -fileno +fileno==_fileno ; fpreset fputchar fputwchar @@ -56,7 +56,7 @@ popen putch putenv putw -read +read==_read rmdir rmtmp searchenv @@ -101,7 +101,7 @@ wcsrev wcsset wcsupr wpopen -write +write==_write ; non-ANSI functions declared in math.h j0 j1 From ca0ebabfdd96b0bf6c88a1a81ce6ad22d8735d01 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Tue, 8 Dec 2009 17:14:33 +0000 Subject: [PATCH 186/286] Update moldname-msvcrt.def svn path=/branches/ros-amd64-bringup/; revision=44471 --- .../lib/3rdparty/mingw/moldname-msvcrt.def | 222 +++++++++--------- 1 file changed, 111 insertions(+), 111 deletions(-) diff --git a/reactos/lib/3rdparty/mingw/moldname-msvcrt.def b/reactos/lib/3rdparty/mingw/moldname-msvcrt.def index d5bd27d2bd3..70b92ed77a2 100644 --- a/reactos/lib/3rdparty/mingw/moldname-msvcrt.def +++ b/reactos/lib/3rdparty/mingw/moldname-msvcrt.def @@ -1,120 +1,120 @@ LIBRARY msvcrt.dll EXPORTS -access -chdir -chmod -chsize -close -creat -cwait -daylight DATA -dup -dup2 -ecvt -eof -execl -execle -execlp -execlpe -execv -execve -execvp -execvpe -fcvt +access==_access +chdir==_chdir +chmod==_chmod +chsize==_chsize +close==_close +creat==_creat +cwait==_cwait +daylight==_daylight +dup==_dup +dup2==_dup2 +ecvt==_ecvt +eof==_eof +execl==_execl +execle==_execle +execlp==_execlp +execlpe==_execlpe +execv==_execv +execve==_execve +execvp==_execvp +execvpe==_execvpe +fcvt==_fcvt fdopen==_fdopen -fgetchar -fgetwchar -filelength +fgetchar==_fgetchar +fgetwchar==_fgetwchar +filelength==_filelength fileno==_fileno -; fpreset -fputchar -fputwchar -;fstat -ftime -gcvt -getch -getche -getcwd -getpid -getw -heapwalk -isatty -itoa -kbhit -lfind -lsearch -lseek -ltoa -memccpy -memicmp -mkdir -mktemp -open -pclose -popen -putch -putenv -putw +fpreset==_fpreset +fputchar==_fputchar +fputwchar==_fputwchar +fstat==_fstat +ftime==_ftime +gcvt==_gcvt +getch==_getch +getche==_getche +getcwd==_getcwd +getpid==_getpid +getw==_getw +heapwalk==_heapwalk +isatty==_isatty +itoa==_itoa +kbhit==_kbhit +lfind==_lfind +lsearch==_lsearch +lseek==_lseek +ltoa==_ltoa +memccpy==_memccpy +memicmp==_memicmp +mkdir==_mkdir +mktemp==_mktemp +open==_open +pclose==_pclose +popen==_popen +putch==_putch +putenv==_putenv +putw==_putw read==_read -rmdir -rmtmp -searchenv -setmode -sopen -spawnl -spawnle -spawnlp -spawnlpe -spawnv -spawnve -spawnvp -spawnvpe -;stat -strcmpi -strdup -stricmp -stricoll -strlwr -strnicmp -strnset -strrev -strset -strupr -swab -tell -tempnam -timezone DATA -tzname DATA -tzset -umask -ungetch -unlink -utime -wcsdup -wcsicmp -wcsicoll -wcslwr -wcsnicmp -wcsnset -wcsrev -wcsset -wcsupr -wpopen +rmdir==_rmdir +rmtmp==_rmtmp +searchenv==_searchenv +setmode==_setmode +sopen==_sopen +spawnl==_spawnl +spawnle==_spawnle +spawnlp==_spawnlp +spawnlpe==_spawnlpe +spawnv==_spawnv +spawnve==_spawnve +spawnvp==_spawnvp +spawnvpe==_spawnvpe +stat==_stat +strcmpi==_strcmpi +strdup==_strdup +stricmp==_stricmp +stricoll==_stricoll +strlwr==_strlwr +strnicmp==_strnicmp +strnset==_strnset +strrev==_strrev +strset==_strset +strupr==_strupr +swab==_swab +tell==_tell +tempnam==_tempnam +timezone==_timezone +tzname==_tzname +tzset==_tzset +umask==_umask +ungetch==_ungetch +unlink==_unlink +utime==_utime +wcsdup==_wcsdup +wcsicmp==_wcsicmp +wcsicoll==_wcsicoll +wcslwr==_wcslwr +wcsnicmp==_wcsnicmp +wcsnset==_wcsnset +wcsrev==_wcsrev +wcsset==_wcsset +wcsupr==_wcsupr +wpopen==_wpopen write==_write ; non-ANSI functions declared in math.h -j0 -j1 -jn -y0 -y1 -yn -chgsign -;scalb -finite -fpclass +j0==_j0 +j1==_j1 +jn==_jn +y0==_y0 +y1==_y1 +yn==_yn +chgsign==_chgsign +scalb==_scalb +finite==_finite +fpclass==_fpclass ; C99 functions -cabs -hypot -logb -nextafter +cabs==_cabs +hypot==_hypot +logb==_logb +nextafter==_nextafter From ad9860b254b51b8180ad5f81eb15eaa6d1b1a5a5 Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Wed, 9 Dec 2009 01:14:28 +0000 Subject: [PATCH 187/286] - Create some stubs for some w32kdll api tests. Someone please verify and complete the job. - Fix building all rostests for amd64. No guarantee anything works now, or ever did... svn path=/branches/ros-amd64-bringup/; revision=44475 --- .../w32kdll_2k3sp2/w32kdll_2k3sp2-amd64.S | 4854 +++++++++++++++++ .../w32kdll_2k3sp2/w32kdll_2k3sp2-amd64.def | 679 +++ ...w32kdll_2k3sp2.S => w32kdll_2k3sp2-i386.S} | 0 .../w32kdll_2k3sp2/w32kdll_2k3sp2-i386.def | 674 +++ .../w32kdll_2k3sp2/w32kdll_2k3sp2.rbuild | 9 +- .../w32kdll/w32kdll_ros/w32kdll_ros-amd64.def | 679 +++ .../{w32kdll_ros.def => w32kdll_ros-i386.def} | 0 .../w32kdll/w32kdll_ros/w32kdll_ros.rbuild | 2 +- .../w32kdll_vista/w32kdll_vista-amd64.S | 4854 +++++++++++++++++ .../w32kdll_vista/w32kdll_vista-amd64.def | 781 +++ .../{w32kdll_vista.S => w32kdll_vista-i386.S} | 0 .../w32kdll_vista/w32kdll_vista-i386.def | 781 +++ .../w32kdll_vista/w32kdll_vista.rbuild | 9 +- rostests/apitests/w32knapi/w32knapi.c | 4 +- rostests/apitests/w32knapi/w32knapi.rbuild | 2 +- rostests/dxtest/win32kdxtest/dump.c | 82 +- rostests/dxtest/win32kdxtest/test.h | 4 +- rostests/tests/primitives/primitives.cpp | 8 +- rostests/tests/subclass/subclass.c | 16 +- rostests/tests/suspend/suspend.c | 4 + rostests/tests/thread/thread.c | 6 +- rostests/tests/tmrqueue/tmrqueue.c | 12 +- 22 files changed, 13389 insertions(+), 71 deletions(-) create mode 100644 rostests/apitests/w32kdll/w32kdll_2k3sp2/w32kdll_2k3sp2-amd64.S create mode 100644 rostests/apitests/w32kdll/w32kdll_2k3sp2/w32kdll_2k3sp2-amd64.def rename rostests/apitests/w32kdll/w32kdll_2k3sp2/{w32kdll_2k3sp2.S => w32kdll_2k3sp2-i386.S} (100%) create mode 100644 rostests/apitests/w32kdll/w32kdll_2k3sp2/w32kdll_2k3sp2-i386.def create mode 100644 rostests/apitests/w32kdll/w32kdll_ros/w32kdll_ros-amd64.def rename rostests/apitests/w32kdll/w32kdll_ros/{w32kdll_ros.def => w32kdll_ros-i386.def} (100%) create mode 100644 rostests/apitests/w32kdll/w32kdll_vista/w32kdll_vista-amd64.S create mode 100644 rostests/apitests/w32kdll/w32kdll_vista/w32kdll_vista-amd64.def rename rostests/apitests/w32kdll/w32kdll_vista/{w32kdll_vista.S => w32kdll_vista-i386.S} (100%) create mode 100644 rostests/apitests/w32kdll/w32kdll_vista/w32kdll_vista-i386.def diff --git a/rostests/apitests/w32kdll/w32kdll_2k3sp2/w32kdll_2k3sp2-amd64.S b/rostests/apitests/w32kdll/w32kdll_2k3sp2/w32kdll_2k3sp2-amd64.S new file mode 100644 index 00000000000..7a84b72d4d9 --- /dev/null +++ b/rostests/apitests/w32kdll/w32kdll_2k3sp2/w32kdll_2k3sp2-amd64.S @@ -0,0 +1,4854 @@ +/* FILE: System Call Stubs for Native API + * COPYRIGHT: See COPYING in the top level directory + * PURPOSE: obj-amd64\lib\win32ksys\win32k.S + * PROGRAMMER: Computer Generated File. See tools/nci/ncitool.c + * REMARK: DO NOT EDIT OR COMMIT MODIFICATIONS TO THIS FILE + */ + + +#include + +.global _NtGdiAbortDoc +_NtGdiAbortDoc: + movl $0x1000, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiAbortPath +_NtGdiAbortPath: + movl $0x1001, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiAddFontResourceW +_NtGdiAddFontResourceW: + movl $0x1002, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtGdiAddRemoteFontToDC +_NtGdiAddRemoteFontToDC: + movl $0x1003, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiAddFontMemResourceEx +_NtGdiAddFontMemResourceEx: + movl $0x1004, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtGdiRemoveMergeFont +_NtGdiRemoveMergeFont: + movl $0x1005, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiAddRemoteMMInstanceToDC +_NtGdiAddRemoteMMInstanceToDC: + movl $0x1006, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiAlphaBlend +_NtGdiAlphaBlend: + movl $0x1007, %eax + movq %rcx, %r10 + syscall + ret $0x30 + +.global _NtGdiAngleArc +_NtGdiAngleArc: + movl $0x1008, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtGdiAnyLinkedFonts +_NtGdiAnyLinkedFonts: + movl $0x1009, %eax + movq %rcx, %r10 + syscall + ret $0x0 + +.global _NtGdiFontIsLinked +_NtGdiFontIsLinked: + movl $0x100a, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiArcInternal +_NtGdiArcInternal: + movl $0x100b, %eax + movq %rcx, %r10 + syscall + ret $0x28 + +.global _NtGdiBeginPath +_NtGdiBeginPath: + movl $0x100c, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiBitBlt +_NtGdiBitBlt: + movl $0x100d, %eax + movq %rcx, %r10 + syscall + ret $0x2c + +.global _NtGdiCancelDC +_NtGdiCancelDC: + movl $0x100e, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiCheckBitmapBits +_NtGdiCheckBitmapBits: + movl $0x100f, %eax + movq %rcx, %r10 + syscall + ret $0x20 + +.global _NtGdiCloseFigure +_NtGdiCloseFigure: + movl $0x1010, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiClearBitmapAttributes +_NtGdiClearBitmapAttributes: + movl $0x1011, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiClearBrushAttributes +_NtGdiClearBrushAttributes: + movl $0x1012, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiColorCorrectPalette +_NtGdiColorCorrectPalette: + movl $0x1013, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtGdiCombineRgn +_NtGdiCombineRgn: + movl $0x1014, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiCombineTransform +_NtGdiCombineTransform: + movl $0x1015, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiComputeXformCoefficients +_NtGdiComputeXformCoefficients: + movl $0x1016, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiConsoleTextOut +_NtGdiConsoleTextOut: + movl $0x1017, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiConvertMetafileRect +_NtGdiConvertMetafileRect: + movl $0x1018, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiCreateBitmap +_NtGdiCreateBitmap: + movl $0x1019, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtGdiCreateClientObj +_NtGdiCreateClientObj: + movl $0x101a, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiCreateColorSpace +_NtGdiCreateColorSpace: + movl $0x101b, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiCreateColorTransform +_NtGdiCreateColorTransform: + movl $0x101c, %eax + movq %rcx, %r10 + syscall + ret $0x20 + +.global _NtGdiCreateCompatibleBitmap +_NtGdiCreateCompatibleBitmap: + movl $0x101d, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiCreateCompatibleDC +_NtGdiCreateCompatibleDC: + movl $0x101e, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiCreateDIBBrush +_NtGdiCreateDIBBrush: + movl $0x101f, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtGdiCreateDIBitmapInternal +_NtGdiCreateDIBitmapInternal: + movl $0x1020, %eax + movq %rcx, %r10 + syscall + ret $0x2c + +.global _NtGdiCreateDIBSection +_NtGdiCreateDIBSection: + movl $0x1021, %eax + movq %rcx, %r10 + syscall + ret $0x24 + +.global _NtGdiCreateEllipticRgn +_NtGdiCreateEllipticRgn: + movl $0x1022, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiCreateHalftonePalette +_NtGdiCreateHalftonePalette: + movl $0x1023, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiCreateHatchBrushInternal +_NtGdiCreateHatchBrushInternal: + movl $0x1024, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiCreateMetafileDC +_NtGdiCreateMetafileDC: + movl $0x1025, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiCreatePaletteInternal +_NtGdiCreatePaletteInternal: + movl $0x1026, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiCreatePatternBrushInternal +_NtGdiCreatePatternBrushInternal: + movl $0x1027, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiCreatePen +_NtGdiCreatePen: + movl $0x1028, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiCreateRectRgn +_NtGdiCreateRectRgn: + movl $0x1029, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiCreateRoundRectRgn +_NtGdiCreateRoundRectRgn: + movl $0x102a, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtGdiCreateServerMetaFile +_NtGdiCreateServerMetaFile: + movl $0x102b, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtGdiCreateSolidBrush +_NtGdiCreateSolidBrush: + movl $0x102c, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiD3dContextCreate +_NtGdiD3dContextCreate: + movl $0x102d, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiD3dContextDestroy +_NtGdiD3dContextDestroy: + movl $0x102e, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiD3dContextDestroyAll +_NtGdiD3dContextDestroyAll: + movl $0x102f, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiD3dValidateTextureStageState +_NtGdiD3dValidateTextureStageState: + movl $0x1030, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiD3dDrawPrimitives2 +_NtGdiD3dDrawPrimitives2: + movl $0x1031, %eax + movq %rcx, %r10 + syscall + ret $0x1c + +.global _NtGdiDdGetDriverState +_NtGdiDdGetDriverState: + movl $0x1032, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiDdAddAttachedSurface +_NtGdiDdAddAttachedSurface: + movl $0x1033, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiDdAlphaBlt +_NtGdiDdAlphaBlt: + movl $0x1034, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiDdAttachSurface +_NtGdiDdAttachSurface: + movl $0x1035, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDdBeginMoCompFrame +_NtGdiDdBeginMoCompFrame: + movl $0x1036, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDdBlt +_NtGdiDdBlt: + movl $0x1037, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiDdCanCreateSurface +_NtGdiDdCanCreateSurface: + movl $0x1038, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDdCanCreateD3DBuffer +_NtGdiDdCanCreateD3DBuffer: + movl $0x1039, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDdColorControl +_NtGdiDdColorControl: + movl $0x103a, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDdCreateDirectDrawObject +_NtGdiDdCreateDirectDrawObject: + movl $0x103b, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiDdCreateSurface +_NtGdiDdCreateSurface: + movl $0x103c, %eax + movq %rcx, %r10 + syscall + ret $0x20 + +.global _NtGdiDdCreateD3DBuffer +_NtGdiDdCreateD3DBuffer: + movl $0x103d, %eax + movq %rcx, %r10 + syscall + ret $0x20 + +.global _NtGdiDdCreateMoComp +_NtGdiDdCreateMoComp: + movl $0x103e, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDdCreateSurfaceObject +_NtGdiDdCreateSurfaceObject: + movl $0x103f, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtGdiDdDeleteDirectDrawObject +_NtGdiDdDeleteDirectDrawObject: + movl $0x1040, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiDdDeleteSurfaceObject +_NtGdiDdDeleteSurfaceObject: + movl $0x1041, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiDdDestroyMoComp +_NtGdiDdDestroyMoComp: + movl $0x1042, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDdDestroySurface +_NtGdiDdDestroySurface: + movl $0x1043, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDdDestroyD3DBuffer +_NtGdiDdDestroyD3DBuffer: + movl $0x1044, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiDdEndMoCompFrame +_NtGdiDdEndMoCompFrame: + movl $0x1045, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDdFlip +_NtGdiDdFlip: + movl $0x1046, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtGdiDdFlipToGDISurface +_NtGdiDdFlipToGDISurface: + movl $0x1047, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDdGetAvailDriverMemory +_NtGdiDdGetAvailDriverMemory: + movl $0x1048, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDdGetBltStatus +_NtGdiDdGetBltStatus: + movl $0x1049, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDdGetDC +_NtGdiDdGetDC: + movl $0x104a, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDdGetDriverInfo +_NtGdiDdGetDriverInfo: + movl $0x104b, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDdGetDxHandle +_NtGdiDdGetDxHandle: + movl $0x104c, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiDdGetFlipStatus +_NtGdiDdGetFlipStatus: + movl $0x104d, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDdGetInternalMoCompInfo +_NtGdiDdGetInternalMoCompInfo: + movl $0x104e, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDdGetMoCompBuffInfo +_NtGdiDdGetMoCompBuffInfo: + movl $0x104f, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDdGetMoCompGuids +_NtGdiDdGetMoCompGuids: + movl $0x1050, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDdGetMoCompFormats +_NtGdiDdGetMoCompFormats: + movl $0x1051, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDdGetScanLine +_NtGdiDdGetScanLine: + movl $0x1052, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDdLock +_NtGdiDdLock: + movl $0x1053, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiDdLockD3D +_NtGdiDdLockD3D: + movl $0x1054, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDdQueryDirectDrawObject +_NtGdiDdQueryDirectDrawObject: + movl $0x1055, %eax + movq %rcx, %r10 + syscall + ret $0x2c + +.global _NtGdiDdQueryMoCompStatus +_NtGdiDdQueryMoCompStatus: + movl $0x1056, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDdReenableDirectDrawObject +_NtGdiDdReenableDirectDrawObject: + movl $0x1057, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDdReleaseDC +_NtGdiDdReleaseDC: + movl $0x1058, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiDdRenderMoComp +_NtGdiDdRenderMoComp: + movl $0x1059, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDdResetVisrgn +_NtGdiDdResetVisrgn: + movl $0x105a, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDdSetColorKey +_NtGdiDdSetColorKey: + movl $0x105b, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDdSetExclusiveMode +_NtGdiDdSetExclusiveMode: + movl $0x105c, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDdSetGammaRamp +_NtGdiDdSetGammaRamp: + movl $0x105d, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiDdCreateSurfaceEx +_NtGdiDdCreateSurfaceEx: + movl $0x105e, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiDdSetOverlayPosition +_NtGdiDdSetOverlayPosition: + movl $0x105f, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiDdUnattachSurface +_NtGdiDdUnattachSurface: + movl $0x1060, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDdUnlock +_NtGdiDdUnlock: + movl $0x1061, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDdUnlockD3D +_NtGdiDdUnlockD3D: + movl $0x1062, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDdUpdateOverlay +_NtGdiDdUpdateOverlay: + movl $0x1063, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiDdWaitForVerticalBlank +_NtGdiDdWaitForVerticalBlank: + movl $0x1064, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDvpCanCreateVideoPort +_NtGdiDvpCanCreateVideoPort: + movl $0x1065, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDvpColorControl +_NtGdiDvpColorControl: + movl $0x1066, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDvpCreateVideoPort +_NtGdiDvpCreateVideoPort: + movl $0x1067, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDvpDestroyVideoPort +_NtGdiDvpDestroyVideoPort: + movl $0x1068, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDvpFlipVideoPort +_NtGdiDvpFlipVideoPort: + movl $0x1069, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiDvpGetVideoPortBandwidth +_NtGdiDvpGetVideoPortBandwidth: + movl $0x106a, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDvpGetVideoPortField +_NtGdiDvpGetVideoPortField: + movl $0x106b, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDvpGetVideoPortFlipStatus +_NtGdiDvpGetVideoPortFlipStatus: + movl $0x106c, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDvpGetVideoPortInputFormats +_NtGdiDvpGetVideoPortInputFormats: + movl $0x106d, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDvpGetVideoPortLine +_NtGdiDvpGetVideoPortLine: + movl $0x106e, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDvpGetVideoPortOutputFormats +_NtGdiDvpGetVideoPortOutputFormats: + movl $0x106f, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDvpGetVideoPortConnectInfo +_NtGdiDvpGetVideoPortConnectInfo: + movl $0x1070, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDvpGetVideoSignalStatus +_NtGdiDvpGetVideoSignalStatus: + movl $0x1071, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDvpUpdateVideoPort +_NtGdiDvpUpdateVideoPort: + movl $0x1072, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiDvpWaitForVideoPortSync +_NtGdiDvpWaitForVideoPortSync: + movl $0x1073, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDvpAcquireNotification +_NtGdiDvpAcquireNotification: + movl $0x1074, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiDvpReleaseNotification +_NtGdiDvpReleaseNotification: + movl $0x1075, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDxgGenericThunk +_NtGdiDxgGenericThunk: + movl $0x1076, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtGdiDeleteClientObj +_NtGdiDeleteClientObj: + movl $0x1077, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiDeleteColorSpace +_NtGdiDeleteColorSpace: + movl $0x1078, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiDeleteColorTransform +_NtGdiDeleteColorTransform: + movl $0x1079, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDeleteObjectApp +_NtGdiDeleteObjectApp: + movl $0x107a, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiDescribePixelFormat +_NtGdiDescribePixelFormat: + movl $0x107b, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiGetPerBandInfo +_NtGdiGetPerBandInfo: + movl $0x107c, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDoBanding +_NtGdiDoBanding: + movl $0x107d, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiDoPalette +_NtGdiDoPalette: + movl $0x107e, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtGdiDrawEscape +_NtGdiDrawEscape: + movl $0x107f, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiEllipse +_NtGdiEllipse: + movl $0x1080, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtGdiEnableEudc +_NtGdiEnableEudc: + movl $0x1081, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiEndDoc +_NtGdiEndDoc: + movl $0x1082, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiEndPage +_NtGdiEndPage: + movl $0x1083, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiEndPath +_NtGdiEndPath: + movl $0x1084, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiEnumFontChunk +_NtGdiEnumFontChunk: + movl $0x1085, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtGdiEnumFontClose +_NtGdiEnumFontClose: + movl $0x1086, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiEnumFontOpen +_NtGdiEnumFontOpen: + movl $0x1087, %eax + movq %rcx, %r10 + syscall + ret $0x1c + +.global _NtGdiEnumObjects +_NtGdiEnumObjects: + movl $0x1088, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiEqualRgn +_NtGdiEqualRgn: + movl $0x1089, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiEudcLoadUnloadLink +_NtGdiEudcLoadUnloadLink: + movl $0x108a, %eax + movq %rcx, %r10 + syscall + ret $0x1c + +.global _NtGdiExcludeClipRect +_NtGdiExcludeClipRect: + movl $0x108b, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtGdiExtCreatePen +_NtGdiExtCreatePen: + movl $0x108c, %eax + movq %rcx, %r10 + syscall + ret $0x2c + +.global _NtGdiExtCreateRegion +_NtGdiExtCreateRegion: + movl $0x108d, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiExtEscape +_NtGdiExtEscape: + movl $0x108e, %eax + movq %rcx, %r10 + syscall + ret $0x20 + +.global _NtGdiExtFloodFill +_NtGdiExtFloodFill: + movl $0x108f, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtGdiExtGetObjectW +_NtGdiExtGetObjectW: + movl $0x1090, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiExtSelectClipRgn +_NtGdiExtSelectClipRgn: + movl $0x1091, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiExtTextOutW +_NtGdiExtTextOutW: + movl $0x1092, %eax + movq %rcx, %r10 + syscall + ret $0x24 + +.global _NtGdiFillPath +_NtGdiFillPath: + movl $0x1093, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiFillRgn +_NtGdiFillRgn: + movl $0x1094, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiFlattenPath +_NtGdiFlattenPath: + movl $0x1095, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiFlushUserBatch +_NtGdiFlushUserBatch: + movl $0x1096, %eax + movq %rcx, %r10 + syscall + ret $0x0 + +.global _NtGdiFlush +_NtGdiFlush: + movl $0x1097, %eax + movq %rcx, %r10 + syscall + ret $0x0 + +.global _NtGdiForceUFIMapping +_NtGdiForceUFIMapping: + movl $0x1098, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiFrameRgn +_NtGdiFrameRgn: + movl $0x1099, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtGdiFullscreenControl +_NtGdiFullscreenControl: + movl $0x109a, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtGdiGetAndSetDCDword +_NtGdiGetAndSetDCDword: + movl $0x109b, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiGetAppClipBox +_NtGdiGetAppClipBox: + movl $0x109c, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiGetBitmapBits +_NtGdiGetBitmapBits: + movl $0x109d, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiGetBitmapDimension +_NtGdiGetBitmapDimension: + movl $0x109e, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiGetBoundsRect +_NtGdiGetBoundsRect: + movl $0x109f, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiGetCharABCWidthsW +_NtGdiGetCharABCWidthsW: + movl $0x10a0, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtGdiGetCharacterPlacementW +_NtGdiGetCharacterPlacementW: + movl $0x10a1, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtGdiGetCharSet +_NtGdiGetCharSet: + movl $0x10a2, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiGetCharWidthW +_NtGdiGetCharWidthW: + movl $0x10a3, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtGdiGetCharWidthInfo +_NtGdiGetCharWidthInfo: + movl $0x10a4, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiGetColorAdjustment +_NtGdiGetColorAdjustment: + movl $0x10a5, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiGetColorSpaceforBitmap +_NtGdiGetColorSpaceforBitmap: + movl $0x10a6, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiGetDCDword +_NtGdiGetDCDword: + movl $0x10a7, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiGetDCforBitmap +_NtGdiGetDCforBitmap: + movl $0x10a8, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiGetDCObject +_NtGdiGetDCObject: + movl $0x10a9, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiGetDCPoint +_NtGdiGetDCPoint: + movl $0x10aa, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiGetDeviceCaps +_NtGdiGetDeviceCaps: + movl $0x10ab, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiGetDeviceGammaRamp +_NtGdiGetDeviceGammaRamp: + movl $0x10ac, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiGetDeviceCapsAll +_NtGdiGetDeviceCapsAll: + movl $0x10ad, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiGetDIBitsInternal +_NtGdiGetDIBitsInternal: + movl $0x10ae, %eax + movq %rcx, %r10 + syscall + ret $0x24 + +.global _NtGdiGetETM +_NtGdiGetETM: + movl $0x10af, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiGetEudcTimeStampEx +_NtGdiGetEudcTimeStampEx: + movl $0x10b0, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiGetFontData +_NtGdiGetFontData: + movl $0x10b1, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtGdiGetFontResourceInfoInternalW +_NtGdiGetFontResourceInfoInternalW: + movl $0x10b2, %eax + movq %rcx, %r10 + syscall + ret $0x1c + +.global _NtGdiGetGlyphIndicesW +_NtGdiGetGlyphIndicesW: + movl $0x10b3, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtGdiGetGlyphIndicesWInternal +_NtGdiGetGlyphIndicesWInternal: + movl $0x10b4, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtGdiGetGlyphOutline +_NtGdiGetGlyphOutline: + movl $0x10b5, %eax + movq %rcx, %r10 + syscall + ret $0x20 + +.global _NtGdiGetKerningPairs +_NtGdiGetKerningPairs: + movl $0x10b6, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiGetLinkedUFIs +_NtGdiGetLinkedUFIs: + movl $0x10b7, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiGetMiterLimit +_NtGdiGetMiterLimit: + movl $0x10b8, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiGetMonitorID +_NtGdiGetMonitorID: + movl $0x10b9, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiGetNearestColor +_NtGdiGetNearestColor: + movl $0x10ba, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiGetNearestPaletteIndex +_NtGdiGetNearestPaletteIndex: + movl $0x10bb, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiGetObjectBitmapHandle +_NtGdiGetObjectBitmapHandle: + movl $0x10bc, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiGetOutlineTextMetricsInternalW +_NtGdiGetOutlineTextMetricsInternalW: + movl $0x10bd, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiGetPath +_NtGdiGetPath: + movl $0x10be, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiGetPixel +_NtGdiGetPixel: + movl $0x10bf, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiGetRandomRgn +_NtGdiGetRandomRgn: + movl $0x10c0, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiGetRasterizerCaps +_NtGdiGetRasterizerCaps: + movl $0x10c1, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiGetRealizationInfo +_NtGdiGetRealizationInfo: + movl $0x10c2, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiGetRegionData +_NtGdiGetRegionData: + movl $0x10c3, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiGetRgnBox +_NtGdiGetRgnBox: + movl $0x10c4, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiGetServerMetaFileBits +_NtGdiGetServerMetaFileBits: + movl $0x10c5, %eax + movq %rcx, %r10 + syscall + ret $0x1c + +.global _NtGdiGetSpoolMessage +_NtGdiGetSpoolMessage: + movl $0x10c6, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiGetStats +_NtGdiGetStats: + movl $0x10c7, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtGdiGetStockObject +_NtGdiGetStockObject: + movl $0x10c8, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiGetStringBitmapW +_NtGdiGetStringBitmapW: + movl $0x10c9, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtGdiGetSystemPaletteUse +_NtGdiGetSystemPaletteUse: + movl $0x10ca, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiGetTextCharsetInfo +_NtGdiGetTextCharsetInfo: + movl $0x10cb, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiGetTextExtent +_NtGdiGetTextExtent: + movl $0x10cc, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtGdiGetTextExtentExW +_NtGdiGetTextExtentExW: + movl $0x10cd, %eax + movq %rcx, %r10 + syscall + ret $0x20 + +.global _NtGdiGetTextFaceW +_NtGdiGetTextFaceW: + movl $0x10ce, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiGetTextMetricsW +_NtGdiGetTextMetricsW: + movl $0x10cf, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiGetTransform +_NtGdiGetTransform: + movl $0x10d0, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiGetUFI +_NtGdiGetUFI: + movl $0x10d1, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtGdiGetEmbUFI +_NtGdiGetEmbUFI: + movl $0x10d2, %eax + movq %rcx, %r10 + syscall + ret $0x1c + +.global _NtGdiGetUFIPathname +_NtGdiGetUFIPathname: + movl $0x10d3, %eax + movq %rcx, %r10 + syscall + ret $0x28 + +.global _NtGdiGetEmbedFonts +_NtGdiGetEmbedFonts: + movl $0x10d4, %eax + movq %rcx, %r10 + syscall + ret $0x0 + +.global _NtGdiChangeGhostFont +_NtGdiChangeGhostFont: + movl $0x10d5, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiAddEmbFontToDC +_NtGdiAddEmbFontToDC: + movl $0x10d6, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiGetFontUnicodeRanges +_NtGdiGetFontUnicodeRanges: + movl $0x10d7, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiGetWidthTable +_NtGdiGetWidthTable: + movl $0x10d8, %eax + movq %rcx, %r10 + syscall + ret $0x1c + +.global _NtGdiGradientFill +_NtGdiGradientFill: + movl $0x10d9, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtGdiHfontCreate +_NtGdiHfontCreate: + movl $0x10da, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtGdiIcmBrushInfo +_NtGdiIcmBrushInfo: + movl $0x10db, %eax + movq %rcx, %r10 + syscall + ret $0x20 + +.global _NtGdiInit +_NtGdiInit: + movl $0x10dc, %eax + movq %rcx, %r10 + syscall + ret $0x0 + +.global _NtGdiInitSpool +_NtGdiInitSpool: + movl $0x10dd, %eax + movq %rcx, %r10 + syscall + ret $0x0 + +.global _NtGdiIntersectClipRect +_NtGdiIntersectClipRect: + movl $0x10de, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtGdiInvertRgn +_NtGdiInvertRgn: + movl $0x10df, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiLineTo +_NtGdiLineTo: + movl $0x10e0, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiMakeFontDir +_NtGdiMakeFontDir: + movl $0x10e1, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtGdiMakeInfoDC +_NtGdiMakeInfoDC: + movl $0x10e2, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiMaskBlt +_NtGdiMaskBlt: + movl $0x10e3, %eax + movq %rcx, %r10 + syscall + ret $0x34 + +.global _NtGdiModifyWorldTransform +_NtGdiModifyWorldTransform: + movl $0x10e4, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiMonoBitmap +_NtGdiMonoBitmap: + movl $0x10e5, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiMoveTo +_NtGdiMoveTo: + movl $0x10e6, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiOffsetClipRgn +_NtGdiOffsetClipRgn: + movl $0x10e7, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiOffsetRgn +_NtGdiOffsetRgn: + movl $0x10e8, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiOpenDCW +_NtGdiOpenDCW: + movl $0x10e9, %eax + movq %rcx, %r10 + syscall + ret $0x20 + +.global _NtGdiPatBlt +_NtGdiPatBlt: + movl $0x10ea, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtGdiPolyPatBlt +_NtGdiPolyPatBlt: + movl $0x10eb, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtGdiPathToRegion +_NtGdiPathToRegion: + movl $0x10ec, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiPlgBlt +_NtGdiPlgBlt: + movl $0x10ed, %eax + movq %rcx, %r10 + syscall + ret $0x2c + +.global _NtGdiPolyDraw +_NtGdiPolyDraw: + movl $0x10ee, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiPolyPolyDraw +_NtGdiPolyPolyDraw: + movl $0x10ef, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtGdiPolyTextOutW +_NtGdiPolyTextOutW: + movl $0x10f0, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiPtInRegion +_NtGdiPtInRegion: + movl $0x10f1, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiPtVisible +_NtGdiPtVisible: + movl $0x10f2, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiQueryFonts +_NtGdiQueryFonts: + movl $0x10f3, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiQueryFontAssocInfo +_NtGdiQueryFontAssocInfo: + movl $0x10f4, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiRectangle +_NtGdiRectangle: + movl $0x10f5, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtGdiRectInRegion +_NtGdiRectInRegion: + movl $0x10f6, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiRectVisible +_NtGdiRectVisible: + movl $0x10f7, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiRemoveFontResourceW +_NtGdiRemoveFontResourceW: + movl $0x10f8, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtGdiRemoveFontMemResourceEx +_NtGdiRemoveFontMemResourceEx: + movl $0x10f9, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiResetDC +_NtGdiResetDC: + movl $0x10fa, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtGdiResizePalette +_NtGdiResizePalette: + movl $0x10fb, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiRestoreDC +_NtGdiRestoreDC: + movl $0x10fc, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiRoundRect +_NtGdiRoundRect: + movl $0x10fd, %eax + movq %rcx, %r10 + syscall + ret $0x1c + +.global _NtGdiSaveDC +_NtGdiSaveDC: + movl $0x10fe, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiScaleViewportExtEx +_NtGdiScaleViewportExtEx: + movl $0x10ff, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtGdiScaleWindowExtEx +_NtGdiScaleWindowExtEx: + movl $0x1100, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtGdiSelectBitmap +_NtGdiSelectBitmap: + movl $0x1101, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiSelectBrush +_NtGdiSelectBrush: + movl $0x1102, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiSelectClipPath +_NtGdiSelectClipPath: + movl $0x1103, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiSelectFont +_NtGdiSelectFont: + movl $0x1104, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiSelectPen +_NtGdiSelectPen: + movl $0x1105, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiSetBitmapAttributes +_NtGdiSetBitmapAttributes: + movl $0x1106, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiSetBitmapBits +_NtGdiSetBitmapBits: + movl $0x1107, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiSetBitmapDimension +_NtGdiSetBitmapDimension: + movl $0x1108, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiSetBoundsRect +_NtGdiSetBoundsRect: + movl $0x1109, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiSetBrushAttributes +_NtGdiSetBrushAttributes: + movl $0x110a, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiSetBrushOrg +_NtGdiSetBrushOrg: + movl $0x110b, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiSetColorAdjustment +_NtGdiSetColorAdjustment: + movl $0x110c, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiSetColorSpace +_NtGdiSetColorSpace: + movl $0x110d, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiSetDeviceGammaRamp +_NtGdiSetDeviceGammaRamp: + movl $0x110e, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiSetDIBitsToDeviceInternal +_NtGdiSetDIBitsToDeviceInternal: + movl $0x110f, %eax + movq %rcx, %r10 + syscall + ret $0x40 + +.global _NtGdiSetFontEnumeration +_NtGdiSetFontEnumeration: + movl $0x1110, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiSetFontXform +_NtGdiSetFontXform: + movl $0x1111, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiSetIcmMode +_NtGdiSetIcmMode: + movl $0x1112, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiSetLinkedUFIs +_NtGdiSetLinkedUFIs: + movl $0x1113, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiSetMagicColors +_NtGdiSetMagicColors: + movl $0x1114, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiSetMetaRgn +_NtGdiSetMetaRgn: + movl $0x1115, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiSetMiterLimit +_NtGdiSetMiterLimit: + movl $0x1116, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiGetDeviceWidth +_NtGdiGetDeviceWidth: + movl $0x1117, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiMirrorWindowOrg +_NtGdiMirrorWindowOrg: + movl $0x1118, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiSetLayout +_NtGdiSetLayout: + movl $0x1119, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiSetPixel +_NtGdiSetPixel: + movl $0x111a, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiSetPixelFormat +_NtGdiSetPixelFormat: + movl $0x111b, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiSetRectRgn +_NtGdiSetRectRgn: + movl $0x111c, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtGdiSetSystemPaletteUse +_NtGdiSetSystemPaletteUse: + movl $0x111d, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiSetTextJustification +_NtGdiSetTextJustification: + movl $0x111e, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiSetupPublicCFONT +_NtGdiSetupPublicCFONT: + movl $0x111f, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiSetVirtualResolution +_NtGdiSetVirtualResolution: + movl $0x1120, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtGdiSetSizeDevice +_NtGdiSetSizeDevice: + movl $0x1121, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiStartDoc +_NtGdiStartDoc: + movl $0x1122, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiStartPage +_NtGdiStartPage: + movl $0x1123, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiStretchBlt +_NtGdiStretchBlt: + movl $0x1124, %eax + movq %rcx, %r10 + syscall + ret $0x30 + +.global _NtGdiStretchDIBitsInternal +_NtGdiStretchDIBitsInternal: + movl $0x1125, %eax + movq %rcx, %r10 + syscall + ret $0x40 + +.global _NtGdiStrokeAndFillPath +_NtGdiStrokeAndFillPath: + movl $0x1126, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiStrokePath +_NtGdiStrokePath: + movl $0x1127, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiSwapBuffers +_NtGdiSwapBuffers: + movl $0x1128, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiTransformPoints +_NtGdiTransformPoints: + movl $0x1129, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtGdiTransparentBlt +_NtGdiTransparentBlt: + movl $0x112a, %eax + movq %rcx, %r10 + syscall + ret $0x2c + +.global _NtGdiUnloadPrinterDriver +_NtGdiUnloadPrinterDriver: + movl $0x112b, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiUnmapMemFont +_NtGdiUnmapMemFont: + movl $0x112c, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiUnrealizeObject +_NtGdiUnrealizeObject: + movl $0x112d, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiUpdateColors +_NtGdiUpdateColors: + movl $0x112e, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiWidenPath +_NtGdiWidenPath: + movl $0x112f, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserActivateKeyboardLayout +_NtUserActivateKeyboardLayout: + movl $0x1130, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserAlterWindowStyle +_NtUserAlterWindowStyle: + movl $0x1131, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserAssociateInputContext +_NtUserAssociateInputContext: + movl $0x1132, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserAttachThreadInput +_NtUserAttachThreadInput: + movl $0x1133, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserBeginPaint +_NtUserBeginPaint: + movl $0x1134, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserBitBltSysBmp +_NtUserBitBltSysBmp: + movl $0x1135, %eax + movq %rcx, %r10 + syscall + ret $0x20 + +.global _NtUserBlockInput +_NtUserBlockInput: + movl $0x1136, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserBuildHimcList +_NtUserBuildHimcList: + movl $0x1137, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserBuildHwndList +_NtUserBuildHwndList: + movl $0x1138, %eax + movq %rcx, %r10 + syscall + ret $0x1c + +.global _NtUserBuildNameList +_NtUserBuildNameList: + movl $0x1139, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserBuildPropList +_NtUserBuildPropList: + movl $0x113a, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserCallHwnd +_NtUserCallHwnd: + movl $0x113b, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserCallHwndLock +_NtUserCallHwndLock: + movl $0x113c, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserCallHwndOpt +_NtUserCallHwndOpt: + movl $0x113d, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserCallHwndParam +_NtUserCallHwndParam: + movl $0x113e, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserCallHwndParamLock +_NtUserCallHwndParamLock: + movl $0x113f, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserCallMsgFilter +_NtUserCallMsgFilter: + movl $0x1140, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserCallNextHookEx +_NtUserCallNextHookEx: + movl $0x1141, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserCallNoParam +_NtUserCallNoParam: + movl $0x1142, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserCallOneParam +_NtUserCallOneParam: + movl $0x1143, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserCallTwoParam +_NtUserCallTwoParam: + movl $0x1144, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserChangeClipboardChain +_NtUserChangeClipboardChain: + movl $0x1145, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserChangeDisplaySettings +_NtUserChangeDisplaySettings: + movl $0x1146, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtUserCheckImeHotKey +_NtUserCheckImeHotKey: + movl $0x1147, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserCheckMenuItem +_NtUserCheckMenuItem: + movl $0x1148, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserChildWindowFromPointEx +_NtUserChildWindowFromPointEx: + movl $0x1149, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserClipCursor +_NtUserClipCursor: + movl $0x114a, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserCloseClipboard +_NtUserCloseClipboard: + movl $0x114b, %eax + movq %rcx, %r10 + syscall + ret $0x0 + +.global _NtUserCloseDesktop +_NtUserCloseDesktop: + movl $0x114c, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserCloseWindowStation +_NtUserCloseWindowStation: + movl $0x114d, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserConsoleControl +_NtUserConsoleControl: + movl $0x114e, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserConvertMemHandle +_NtUserConvertMemHandle: + movl $0x114f, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserCopyAcceleratorTable +_NtUserCopyAcceleratorTable: + movl $0x1150, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserCountClipboardFormats +_NtUserCountClipboardFormats: + movl $0x1151, %eax + movq %rcx, %r10 + syscall + ret $0x0 + +.global _NtUserCreateAcceleratorTable +_NtUserCreateAcceleratorTable: + movl $0x1152, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserCreateCaret +_NtUserCreateCaret: + movl $0x1153, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserCreateDesktop +_NtUserCreateDesktop: + movl $0x1154, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtUserCreateInputContext +_NtUserCreateInputContext: + movl $0x1155, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserCreateLocalMemHandle +_NtUserCreateLocalMemHandle: + movl $0x1156, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserCreateWindowEx +_NtUserCreateWindowEx: + movl $0x1157, %eax + movq %rcx, %r10 + syscall + ret $0x3c + +.global _NtUserCreateWindowStation +_NtUserCreateWindowStation: + movl $0x1158, %eax + movq %rcx, %r10 + syscall + ret $0x1c + +.global _NtUserDdeGetQualityOfService +_NtUserDdeGetQualityOfService: + movl $0x1159, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserDdeInitialize +_NtUserDdeInitialize: + movl $0x115a, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtUserDdeSetQualityOfService +_NtUserDdeSetQualityOfService: + movl $0x115b, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserDeferWindowPos +_NtUserDeferWindowPos: + movl $0x115c, %eax + movq %rcx, %r10 + syscall + ret $0x20 + +.global _NtUserDefSetText +_NtUserDefSetText: + movl $0x115d, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserDeleteMenu +_NtUserDeleteMenu: + movl $0x115e, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserDestroyAcceleratorTable +_NtUserDestroyAcceleratorTable: + movl $0x115f, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserDestroyCursor +_NtUserDestroyCursor: + movl $0x1160, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserDestroyInputContext +_NtUserDestroyInputContext: + movl $0x1161, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserDestroyMenu +_NtUserDestroyMenu: + movl $0x1162, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserDestroyWindow +_NtUserDestroyWindow: + movl $0x1163, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserDisableThreadIme +_NtUserDisableThreadIme: + movl $0x1164, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserDispatchMessage +_NtUserDispatchMessage: + movl $0x1165, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserDragDetect +_NtUserDragDetect: + movl $0x1166, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserDragObject +_NtUserDragObject: + movl $0x1167, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtUserDrawAnimatedRects +_NtUserDrawAnimatedRects: + movl $0x1168, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserDrawCaption +_NtUserDrawCaption: + movl $0x1169, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserDrawCaptionTemp +_NtUserDrawCaptionTemp: + movl $0x116a, %eax + movq %rcx, %r10 + syscall + ret $0x1c + +.global _NtUserDrawIconEx +_NtUserDrawIconEx: + movl $0x116b, %eax + movq %rcx, %r10 + syscall + ret $0x2c + +.global _NtUserDrawMenuBarTemp +_NtUserDrawMenuBarTemp: + movl $0x116c, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtUserEmptyClipboard +_NtUserEmptyClipboard: + movl $0x116d, %eax + movq %rcx, %r10 + syscall + ret $0x0 + +.global _NtUserEnableMenuItem +_NtUserEnableMenuItem: + movl $0x116e, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserEnableScrollBar +_NtUserEnableScrollBar: + movl $0x116f, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserEndDeferWindowPosEx +_NtUserEndDeferWindowPosEx: + movl $0x1170, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserEndMenu +_NtUserEndMenu: + movl $0x1171, %eax + movq %rcx, %r10 + syscall + ret $0x0 + +.global _NtUserEndPaint +_NtUserEndPaint: + movl $0x1172, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserEnumDisplayDevices +_NtUserEnumDisplayDevices: + movl $0x1173, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserEnumDisplayMonitors +_NtUserEnumDisplayMonitors: + movl $0x1174, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtUserEnumDisplaySettings +_NtUserEnumDisplaySettings: + movl $0x1175, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserEvent +_NtUserEvent: + movl $0x1176, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserExcludeUpdateRgn +_NtUserExcludeUpdateRgn: + movl $0x1177, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserFillWindow +_NtUserFillWindow: + movl $0x1178, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserFindExistingCursorIcon +_NtUserFindExistingCursorIcon: + movl $0x1179, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserFindWindowEx +_NtUserFindWindowEx: + movl $0x117a, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtUserFlashWindowEx +_NtUserFlashWindowEx: + movl $0x117b, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserGetAltTabInfo +_NtUserGetAltTabInfo: + movl $0x117c, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtUserGetAncestor +_NtUserGetAncestor: + movl $0x117d, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserGetAppImeLevel +_NtUserGetAppImeLevel: + movl $0x117e, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserGetAsyncKeyState +_NtUserGetAsyncKeyState: + movl $0x117f, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserGetAtomName +_NtUserGetAtomName: + movl $0x1180, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserGetCaretBlinkTime +_NtUserGetCaretBlinkTime: + movl $0x1181, %eax + movq %rcx, %r10 + syscall + ret $0x0 + +.global _NtUserGetCaretPos +_NtUserGetCaretPos: + movl $0x1182, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserGetClassInfo +_NtUserGetClassInfo: + movl $0x1183, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtUserGetClassName +_NtUserGetClassName: + movl $0x1184, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserGetClipboardData +_NtUserGetClipboardData: + movl $0x1185, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserGetClipboardFormatName +_NtUserGetClipboardFormatName: + movl $0x1186, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserGetClipboardOwner +_NtUserGetClipboardOwner: + movl $0x1187, %eax + movq %rcx, %r10 + syscall + ret $0x0 + +.global _NtUserGetClipboardSequenceNumber +_NtUserGetClipboardSequenceNumber: + movl $0x1188, %eax + movq %rcx, %r10 + syscall + ret $0x0 + +.global _NtUserGetClipboardViewer +_NtUserGetClipboardViewer: + movl $0x1189, %eax + movq %rcx, %r10 + syscall + ret $0x0 + +.global _NtUserGetClipCursor +_NtUserGetClipCursor: + movl $0x118a, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserGetComboBoxInfo +_NtUserGetComboBoxInfo: + movl $0x118b, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserGetControlBrush +_NtUserGetControlBrush: + movl $0x118c, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserGetControlColor +_NtUserGetControlColor: + movl $0x118d, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserGetCPD +_NtUserGetCPD: + movl $0x118e, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserGetCursorFrameInfo +_NtUserGetCursorFrameInfo: + movl $0x118f, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserGetCursorInfo +_NtUserGetCursorInfo: + movl $0x1190, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserGetDC +_NtUserGetDC: + movl $0x1191, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserGetDCEx +_NtUserGetDCEx: + movl $0x1192, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserGetDoubleClickTime +_NtUserGetDoubleClickTime: + movl $0x1193, %eax + movq %rcx, %r10 + syscall + ret $0x0 + +.global _NtUserGetForegroundWindow +_NtUserGetForegroundWindow: + movl $0x1194, %eax + movq %rcx, %r10 + syscall + ret $0x0 + +.global _NtUserGetGuiResources +_NtUserGetGuiResources: + movl $0x1195, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserGetGUIThreadInfo +_NtUserGetGUIThreadInfo: + movl $0x1196, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserGetIconInfo +_NtUserGetIconInfo: + movl $0x1197, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtUserGetIconSize +_NtUserGetIconSize: + movl $0x1198, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserGetImeHotKey +_NtUserGetImeHotKey: + movl $0x1199, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserGetImeInfoEx +_NtUserGetImeInfoEx: + movl $0x119a, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserGetInternalWindowPos +_NtUserGetInternalWindowPos: + movl $0x119b, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserGetKeyboardLayoutList +_NtUserGetKeyboardLayoutList: + movl $0x119c, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserGetKeyboardLayoutName +_NtUserGetKeyboardLayoutName: + movl $0x119d, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserGetKeyboardState +_NtUserGetKeyboardState: + movl $0x119e, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserGetKeyNameText +_NtUserGetKeyNameText: + movl $0x119f, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserGetKeyState +_NtUserGetKeyState: + movl $0x11a0, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserGetListBoxInfo +_NtUserGetListBoxInfo: + movl $0x11a1, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserGetMenuBarInfo +_NtUserGetMenuBarInfo: + movl $0x11a2, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserGetMenuIndex +_NtUserGetMenuIndex: + movl $0x11a3, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserGetMenuItemRect +_NtUserGetMenuItemRect: + movl $0x11a4, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserGetMessage +_NtUserGetMessage: + movl $0x11a5, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserGetMouseMovePointsEx +_NtUserGetMouseMovePointsEx: + movl $0x11a6, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtUserGetObjectInformation +_NtUserGetObjectInformation: + movl $0x11a7, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtUserGetOpenClipboardWindow +_NtUserGetOpenClipboardWindow: + movl $0x11a8, %eax + movq %rcx, %r10 + syscall + ret $0x0 + +.global _NtUserGetPriorityClipboardFormat +_NtUserGetPriorityClipboardFormat: + movl $0x11a9, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserGetProcessWindowStation +_NtUserGetProcessWindowStation: + movl $0x11aa, %eax + movq %rcx, %r10 + syscall + ret $0x0 + +.global _NtUserGetRawInputBuffer +_NtUserGetRawInputBuffer: + movl $0x11ab, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserGetRawInputData +_NtUserGetRawInputData: + movl $0x11ac, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtUserGetRawInputDeviceInfo +_NtUserGetRawInputDeviceInfo: + movl $0x11ad, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserGetRawInputDeviceList +_NtUserGetRawInputDeviceList: + movl $0x11ae, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserGetRegisteredRawInputDevices +_NtUserGetRegisteredRawInputDevices: + movl $0x11af, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserGetScrollBarInfo +_NtUserGetScrollBarInfo: + movl $0x11b0, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserGetSystemMenu +_NtUserGetSystemMenu: + movl $0x11b1, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserGetThreadDesktop +_NtUserGetThreadDesktop: + movl $0x11b2, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserGetThreadState +_NtUserGetThreadState: + movl $0x11b3, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserGetTitleBarInfo +_NtUserGetTitleBarInfo: + movl $0x11b4, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserGetUpdateRect +_NtUserGetUpdateRect: + movl $0x11b5, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserGetUpdateRgn +_NtUserGetUpdateRgn: + movl $0x11b6, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserGetWindowDC +_NtUserGetWindowDC: + movl $0x11b7, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserGetWindowPlacement +_NtUserGetWindowPlacement: + movl $0x11b8, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserGetWOWClass +_NtUserGetWOWClass: + movl $0x11b9, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserHardErrorControl +_NtUserHardErrorControl: + movl $0x11ba, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserHideCaret +_NtUserHideCaret: + movl $0x11bb, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserHiliteMenuItem +_NtUserHiliteMenuItem: + movl $0x11bc, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserImpersonateDdeClientWindow +_NtUserImpersonateDdeClientWindow: + movl $0x11bd, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserInitialize +_NtUserInitialize: + movl $0x11be, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserInitializeClientPfnArrays +_NtUserInitializeClientPfnArrays: + movl $0x11bf, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserInitTask +_NtUserInitTask: + movl $0x11c0, %eax + movq %rcx, %r10 + syscall + ret $0x30 + +.global _NtUserInternalGetWindowText +_NtUserInternalGetWindowText: + movl $0x11c1, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserInvalidateRect +_NtUserInvalidateRect: + movl $0x11c2, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserInvalidateRgn +_NtUserInvalidateRgn: + movl $0x11c3, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserIsClipboardFormatAvailable +_NtUserIsClipboardFormatAvailable: + movl $0x11c4, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserKillTimer +_NtUserKillTimer: + movl $0x11c5, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserLoadKeyboardLayoutEx +_NtUserLoadKeyboardLayoutEx: + movl $0x11c6, %eax + movq %rcx, %r10 + syscall + ret $0x1c + +.global _NtUserLockWindowStation +_NtUserLockWindowStation: + movl $0x11c7, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserLockWindowUpdate +_NtUserLockWindowUpdate: + movl $0x11c8, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserLockWorkStation +_NtUserLockWorkStation: + movl $0x11c9, %eax + movq %rcx, %r10 + syscall + ret $0x0 + +.global _NtUserMapVirtualKeyEx +_NtUserMapVirtualKeyEx: + movl $0x11ca, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserMenuItemFromPoint +_NtUserMenuItemFromPoint: + movl $0x11cb, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserMessageCall +_NtUserMessageCall: + movl $0x11cc, %eax + movq %rcx, %r10 + syscall + ret $0x1c + +.global _NtUserMinMaximize +_NtUserMinMaximize: + movl $0x11cd, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserMNDragLeave +_NtUserMNDragLeave: + movl $0x11ce, %eax + movq %rcx, %r10 + syscall + ret $0x0 + +.global _NtUserMNDragOver +_NtUserMNDragOver: + movl $0x11cf, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserModifyUserStartupInfoFlags +_NtUserModifyUserStartupInfoFlags: + movl $0x11d0, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserMoveWindow +_NtUserMoveWindow: + movl $0x11d1, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtUserNotifyIMEStatus +_NtUserNotifyIMEStatus: + movl $0x11d2, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserNotifyProcessCreate +_NtUserNotifyProcessCreate: + movl $0x11d3, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserNotifyWinEvent +_NtUserNotifyWinEvent: + movl $0x11d4, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserOpenClipboard +_NtUserOpenClipboard: + movl $0x11d5, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserOpenDesktop +_NtUserOpenDesktop: + movl $0x11d6, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserOpenInputDesktop +_NtUserOpenInputDesktop: + movl $0x11d7, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserOpenWindowStation +_NtUserOpenWindowStation: + movl $0x11d8, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserPaintDesktop +_NtUserPaintDesktop: + movl $0x11d9, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserPeekMessage +_NtUserPeekMessage: + movl $0x11da, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtUserPostMessage +_NtUserPostMessage: + movl $0x11db, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserPostThreadMessage +_NtUserPostThreadMessage: + movl $0x11dc, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserPrintWindow +_NtUserPrintWindow: + movl $0x11dd, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserProcessConnect +_NtUserProcessConnect: + movl $0x11de, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserQueryInformationThread +_NtUserQueryInformationThread: + movl $0x11df, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtUserQueryInputContext +_NtUserQueryInputContext: + movl $0x11e0, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserQuerySendMessage +_NtUserQuerySendMessage: + movl $0x11e1, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserQueryUserCounters +_NtUserQueryUserCounters: + movl $0x11e2, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtUserQueryWindow +_NtUserQueryWindow: + movl $0x11e3, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserRealChildWindowFromPoint +_NtUserRealChildWindowFromPoint: + movl $0x11e4, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserRealInternalGetMessage +_NtUserRealInternalGetMessage: + movl $0x11e5, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtUserRealWaitMessageEx +_NtUserRealWaitMessageEx: + movl $0x11e6, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserRedrawWindow +_NtUserRedrawWindow: + movl $0x11e7, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserRegisterClassExWOW +_NtUserRegisterClassExWOW: + movl $0x11e8, %eax + movq %rcx, %r10 + syscall + ret $0x1c + +.global _NtUserRegisterUserApiHook +_NtUserRegisterUserApiHook: + movl $0x11e9, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserRegisterHotKey +_NtUserRegisterHotKey: + movl $0x11ea, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserRegisterRawInputDevices +_NtUserRegisterRawInputDevices: + movl $0x11eb, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserRegisterTasklist +_NtUserRegisterTasklist: + movl $0x11ec, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserRegisterWindowMessage +_NtUserRegisterWindowMessage: + movl $0x11ed, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserRemoveMenu +_NtUserRemoveMenu: + movl $0x11ee, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserRemoveProp +_NtUserRemoveProp: + movl $0x11ef, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserResolveDesktop +_NtUserResolveDesktop: + movl $0x11f0, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserResolveDesktopForWOW +_NtUserResolveDesktopForWOW: + movl $0x11f1, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserSBGetParms +_NtUserSBGetParms: + movl $0x11f2, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserScrollDC +_NtUserScrollDC: + movl $0x11f3, %eax + movq %rcx, %r10 + syscall + ret $0x1c + +.global _NtUserScrollWindowEx +_NtUserScrollWindowEx: + movl $0x11f4, %eax + movq %rcx, %r10 + syscall + ret $0x20 + +.global _NtUserSelectPalette +_NtUserSelectPalette: + movl $0x11f5, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserSendInput +_NtUserSendInput: + movl $0x11f6, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserSetActiveWindow +_NtUserSetActiveWindow: + movl $0x11f7, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserSetAppImeLevel +_NtUserSetAppImeLevel: + movl $0x11f8, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserSetCapture +_NtUserSetCapture: + movl $0x11f9, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserSetClassLong +_NtUserSetClassLong: + movl $0x11fa, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserSetClassWord +_NtUserSetClassWord: + movl $0x11fb, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserSetClipboardData +_NtUserSetClipboardData: + movl $0x11fc, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserSetClipboardViewer +_NtUserSetClipboardViewer: + movl $0x11fd, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserSetConsoleReserveKeys +_NtUserSetConsoleReserveKeys: + movl $0x11fe, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserSetCursor +_NtUserSetCursor: + movl $0x11ff, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserSetCursorContents +_NtUserSetCursorContents: + movl $0x1200, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserSetCursorIconData +_NtUserSetCursorIconData: + movl $0x1201, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtUserSetDbgTag +_NtUserSetDbgTag: + movl $0x1202, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserSetFocus +_NtUserSetFocus: + movl $0x1203, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserSetImeHotKey +_NtUserSetImeHotKey: + movl $0x1204, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtUserSetImeInfoEx +_NtUserSetImeInfoEx: + movl $0x1205, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserSetImeOwnerWindow +_NtUserSetImeOwnerWindow: + movl $0x1206, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserSetInformationProcess +_NtUserSetInformationProcess: + movl $0x1207, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserSetInformationThread +_NtUserSetInformationThread: + movl $0x1208, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserSetInternalWindowPos +_NtUserSetInternalWindowPos: + movl $0x1209, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserSetKeyboardState +_NtUserSetKeyboardState: + movl $0x120a, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserSetLogonNotifyWindow +_NtUserSetLogonNotifyWindow: + movl $0x120b, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserSetMenu +_NtUserSetMenu: + movl $0x120c, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserSetMenuContextHelpId +_NtUserSetMenuContextHelpId: + movl $0x120d, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserSetMenuDefaultItem +_NtUserSetMenuDefaultItem: + movl $0x120e, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserSetMenuFlagRtoL +_NtUserSetMenuFlagRtoL: + movl $0x120f, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserSetObjectInformation +_NtUserSetObjectInformation: + movl $0x1210, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserSetParent +_NtUserSetParent: + movl $0x1211, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserSetProcessWindowStation +_NtUserSetProcessWindowStation: + movl $0x1212, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserSetProp +_NtUserSetProp: + movl $0x1213, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserSetRipFlags +_NtUserSetRipFlags: + movl $0x1214, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserSetScrollInfo +_NtUserSetScrollInfo: + movl $0x1215, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserSetShellWindowEx +_NtUserSetShellWindowEx: + movl $0x1216, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserSetSysColors +_NtUserSetSysColors: + movl $0x1217, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserSetSystemCursor +_NtUserSetSystemCursor: + movl $0x1218, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserSetSystemMenu +_NtUserSetSystemMenu: + movl $0x1219, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserSetSystemTimer +_NtUserSetSystemTimer: + movl $0x121a, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserSetThreadDesktop +_NtUserSetThreadDesktop: + movl $0x121b, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserSetThreadLayoutHandles +_NtUserSetThreadLayoutHandles: + movl $0x121c, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserSetThreadState +_NtUserSetThreadState: + movl $0x121d, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserSetTimer +_NtUserSetTimer: + movl $0x121e, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserSetWindowFNID +_NtUserSetWindowFNID: + movl $0x121f, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserSetWindowLong +_NtUserSetWindowLong: + movl $0x1220, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserSetWindowPlacement +_NtUserSetWindowPlacement: + movl $0x1221, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserSetWindowPos +_NtUserSetWindowPos: + movl $0x1222, %eax + movq %rcx, %r10 + syscall + ret $0x1c + +.global _NtUserSetWindowRgn +_NtUserSetWindowRgn: + movl $0x1223, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserSetWindowsHookAW +_NtUserSetWindowsHookAW: + movl $0x1224, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserSetWindowsHookEx +_NtUserSetWindowsHookEx: + movl $0x1225, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtUserSetWindowStationUser +_NtUserSetWindowStationUser: + movl $0x1226, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserSetWindowWord +_NtUserSetWindowWord: + movl $0x1227, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserSetWinEventHook +_NtUserSetWinEventHook: + movl $0x1228, %eax + movq %rcx, %r10 + syscall + ret $0x20 + +.global _NtUserShowCaret +_NtUserShowCaret: + movl $0x1229, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserShowScrollBar +_NtUserShowScrollBar: + movl $0x122a, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserShowWindow +_NtUserShowWindow: + movl $0x122b, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserShowWindowAsync +_NtUserShowWindowAsync: + movl $0x122c, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserSoundSentry +_NtUserSoundSentry: + movl $0x122d, %eax + movq %rcx, %r10 + syscall + ret $0x0 + +.global _NtUserSwitchDesktop +_NtUserSwitchDesktop: + movl $0x122e, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserSystemParametersInfo +_NtUserSystemParametersInfo: + movl $0x122f, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserTestForInteractiveUser +_NtUserTestForInteractiveUser: + movl $0x1230, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserThunkedMenuInfo +_NtUserThunkedMenuInfo: + movl $0x1231, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserThunkedMenuItemInfo +_NtUserThunkedMenuItemInfo: + movl $0x1232, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtUserToUnicodeEx +_NtUserToUnicodeEx: + movl $0x1233, %eax + movq %rcx, %r10 + syscall + ret $0x1c + +.global _NtUserTrackMouseEvent +_NtUserTrackMouseEvent: + movl $0x1234, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserTrackPopupMenuEx +_NtUserTrackPopupMenuEx: + movl $0x1235, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtUserCalcMenuBar +_NtUserCalcMenuBar: + movl $0x1236, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtUserPaintMenuBar +_NtUserPaintMenuBar: + movl $0x1237, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtUserTranslateAccelerator +_NtUserTranslateAccelerator: + movl $0x1238, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserTranslateMessage +_NtUserTranslateMessage: + movl $0x1239, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserUnhookWindowsHookEx +_NtUserUnhookWindowsHookEx: + movl $0x123a, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserUnhookWinEvent +_NtUserUnhookWinEvent: + movl $0x123b, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserUnloadKeyboardLayout +_NtUserUnloadKeyboardLayout: + movl $0x123c, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserUnlockWindowStation +_NtUserUnlockWindowStation: + movl $0x123d, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserUnregisterClass +_NtUserUnregisterClass: + movl $0x123e, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserUnregisterUserApiHook +_NtUserUnregisterUserApiHook: + movl $0x123f, %eax + movq %rcx, %r10 + syscall + ret $0x0 + +.global _NtUserUnregisterHotKey +_NtUserUnregisterHotKey: + movl $0x1240, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserUpdateInputContext +_NtUserUpdateInputContext: + movl $0x1241, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserUpdateInstance +_NtUserUpdateInstance: + movl $0x1242, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserUpdateLayeredWindow +_NtUserUpdateLayeredWindow: + movl $0x1243, %eax + movq %rcx, %r10 + syscall + ret $0x28 + +.global _NtUserGetLayeredWindowAttributes +_NtUserGetLayeredWindowAttributes: + movl $0x1244, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserSetLayeredWindowAttributes +_NtUserSetLayeredWindowAttributes: + movl $0x1245, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserUpdatePerUserSystemParameters +_NtUserUpdatePerUserSystemParameters: + movl $0x1246, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserUserHandleGrantAccess +_NtUserUserHandleGrantAccess: + movl $0x1247, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserValidateHandleSecure +_NtUserValidateHandleSecure: + movl $0x1248, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserValidateRect +_NtUserValidateRect: + movl $0x1249, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserValidateTimerCallback +_NtUserValidateTimerCallback: + movl $0x124a, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserVkKeyScanEx +_NtUserVkKeyScanEx: + movl $0x124b, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserWaitForInputIdle +_NtUserWaitForInputIdle: + movl $0x124c, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserWaitForMsgAndEvent +_NtUserWaitForMsgAndEvent: + movl $0x124d, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserWaitMessage +_NtUserWaitMessage: + movl $0x124e, %eax + movq %rcx, %r10 + syscall + ret $0x0 + +.global _NtUserWin32PoolAllocationStats +_NtUserWin32PoolAllocationStats: + movl $0x124f, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtUserWindowFromPhysicalPoint +_NtUserWindowFromPhysicalPoint: + movl $0x1250, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserWindowFromPoint +_NtUserWindowFromPoint: + movl $0x1251, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserYieldTask +_NtUserYieldTask: + movl $0x1252, %eax + movq %rcx, %r10 + syscall + ret $0x0 + +.global _NtUserRemoteConnect +_NtUserRemoteConnect: + movl $0x1253, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserRemoteRedrawRectangle +_NtUserRemoteRedrawRectangle: + movl $0x1254, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserRemoteRedrawScreen +_NtUserRemoteRedrawScreen: + movl $0x1255, %eax + movq %rcx, %r10 + syscall + ret $0x0 + +.global _NtUserRemoteStopScreenUpdates +_NtUserRemoteStopScreenUpdates: + movl $0x1256, %eax + movq %rcx, %r10 + syscall + ret $0x0 + +.global _NtUserCtxDisplayIOCtl +_NtUserCtxDisplayIOCtl: + movl $0x1257, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiEngAssociateSurface +_NtGdiEngAssociateSurface: + movl $0x1258, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiEngCreateBitmap +_NtGdiEngCreateBitmap: + movl $0x1259, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtGdiEngCreateDeviceSurface +_NtGdiEngCreateDeviceSurface: + movl $0x125a, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiEngCreateDeviceBitmap +_NtGdiEngCreateDeviceBitmap: + movl $0x125b, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiEngCreatePalette +_NtGdiEngCreatePalette: + movl $0x125c, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtGdiEngComputeGlyphSet +_NtGdiEngComputeGlyphSet: + movl $0x125d, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiEngCopyBits +_NtGdiEngCopyBits: + movl $0x125e, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtGdiEngDeletePalette +_NtGdiEngDeletePalette: + movl $0x125f, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiEngDeleteSurface +_NtGdiEngDeleteSurface: + movl $0x1260, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiEngEraseSurface +_NtGdiEngEraseSurface: + movl $0x1261, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiEngUnlockSurface +_NtGdiEngUnlockSurface: + movl $0x1262, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiEngLockSurface +_NtGdiEngLockSurface: + movl $0x1263, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiEngBitBlt +_NtGdiEngBitBlt: + movl $0x1264, %eax + movq %rcx, %r10 + syscall + ret $0x2c + +.global _NtGdiEngStretchBlt +_NtGdiEngStretchBlt: + movl $0x1265, %eax + movq %rcx, %r10 + syscall + ret $0x2c + +.global _NtGdiEngPlgBlt +_NtGdiEngPlgBlt: + movl $0x1266, %eax + movq %rcx, %r10 + syscall + ret $0x2c + +.global _NtGdiEngMarkBandingSurface +_NtGdiEngMarkBandingSurface: + movl $0x1267, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiEngStrokePath +_NtGdiEngStrokePath: + movl $0x1268, %eax + movq %rcx, %r10 + syscall + ret $0x20 + +.global _NtGdiEngFillPath +_NtGdiEngFillPath: + movl $0x1269, %eax + movq %rcx, %r10 + syscall + ret $0x1c + +.global _NtGdiEngStrokeAndFillPath +_NtGdiEngStrokeAndFillPath: + movl $0x126a, %eax + movq %rcx, %r10 + syscall + ret $0x28 + +.global _NtGdiEngPaint +_NtGdiEngPaint: + movl $0x126b, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtGdiEngLineTo +_NtGdiEngLineTo: + movl $0x126c, %eax + movq %rcx, %r10 + syscall + ret $0x24 + +.global _NtGdiEngAlphaBlend +_NtGdiEngAlphaBlend: + movl $0x126d, %eax + movq %rcx, %r10 + syscall + ret $0x1c + +.global _NtGdiEngGradientFill +_NtGdiEngGradientFill: + movl $0x126e, %eax + movq %rcx, %r10 + syscall + ret $0x28 + +.global _NtGdiEngTransparentBlt +_NtGdiEngTransparentBlt: + movl $0x126f, %eax + movq %rcx, %r10 + syscall + ret $0x20 + +.global _NtGdiEngTextOut +_NtGdiEngTextOut: + movl $0x1270, %eax + movq %rcx, %r10 + syscall + ret $0x28 + +.global _NtGdiEngStretchBltROP +_NtGdiEngStretchBltROP: + movl $0x1271, %eax + movq %rcx, %r10 + syscall + ret $0x34 + +.global _NtGdiXLATEOBJ_cGetPalette +_NtGdiXLATEOBJ_cGetPalette: + movl $0x1272, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiXLATEOBJ_iXlate +_NtGdiXLATEOBJ_iXlate: + movl $0x1273, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiXLATEOBJ_hGetColorTransform +_NtGdiXLATEOBJ_hGetColorTransform: + movl $0x1274, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiCLIPOBJ_bEnum +_NtGdiCLIPOBJ_bEnum: + movl $0x1275, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiCLIPOBJ_cEnumStart +_NtGdiCLIPOBJ_cEnumStart: + movl $0x1276, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtGdiCLIPOBJ_ppoGetPath +_NtGdiCLIPOBJ_ppoGetPath: + movl $0x1277, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiEngDeletePath +_NtGdiEngDeletePath: + movl $0x1278, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiEngCreateClip +_NtGdiEngCreateClip: + movl $0x1279, %eax + movq %rcx, %r10 + syscall + ret $0x0 + +.global _NtGdiEngDeleteClip +_NtGdiEngDeleteClip: + movl $0x127a, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiBRUSHOBJ_ulGetBrushColor +_NtGdiBRUSHOBJ_ulGetBrushColor: + movl $0x127b, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiBRUSHOBJ_pvAllocRbrush +_NtGdiBRUSHOBJ_pvAllocRbrush: + movl $0x127c, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiBRUSHOBJ_pvGetRbrush +_NtGdiBRUSHOBJ_pvGetRbrush: + movl $0x127d, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiBRUSHOBJ_hGetColorTransform +_NtGdiBRUSHOBJ_hGetColorTransform: + movl $0x127e, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiXFORMOBJ_bApplyXform +_NtGdiXFORMOBJ_bApplyXform: + movl $0x127f, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtGdiXFORMOBJ_iGetXform +_NtGdiXFORMOBJ_iGetXform: + movl $0x1280, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiFONTOBJ_vGetInfo +_NtGdiFONTOBJ_vGetInfo: + movl $0x1281, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiFONTOBJ_pxoGetXform +_NtGdiFONTOBJ_pxoGetXform: + movl $0x1282, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiFONTOBJ_cGetGlyphs +_NtGdiFONTOBJ_cGetGlyphs: + movl $0x1283, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtGdiFONTOBJ_pifi +_NtGdiFONTOBJ_pifi: + movl $0x1284, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiFONTOBJ_pfdg +_NtGdiFONTOBJ_pfdg: + movl $0x1285, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiFONTOBJ_pQueryGlyphAttrs +_NtGdiFONTOBJ_pQueryGlyphAttrs: + movl $0x1286, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiFONTOBJ_pvTrueTypeFontFile +_NtGdiFONTOBJ_pvTrueTypeFontFile: + movl $0x1287, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiFONTOBJ_cGetAllGlyphHandles +_NtGdiFONTOBJ_cGetAllGlyphHandles: + movl $0x1288, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiSTROBJ_bEnum +_NtGdiSTROBJ_bEnum: + movl $0x1289, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiSTROBJ_bEnumPositionsOnly +_NtGdiSTROBJ_bEnumPositionsOnly: + movl $0x128a, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiSTROBJ_bGetAdvanceWidths +_NtGdiSTROBJ_bGetAdvanceWidths: + movl $0x128b, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiSTROBJ_vEnumStart +_NtGdiSTROBJ_vEnumStart: + movl $0x128c, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiSTROBJ_dwGetCodePage +_NtGdiSTROBJ_dwGetCodePage: + movl $0x128d, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiPATHOBJ_vGetBounds +_NtGdiPATHOBJ_vGetBounds: + movl $0x128e, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiPATHOBJ_bEnum +_NtGdiPATHOBJ_bEnum: + movl $0x128f, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiPATHOBJ_vEnumStart +_NtGdiPATHOBJ_vEnumStart: + movl $0x1290, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiPATHOBJ_vEnumStartClipLines +_NtGdiPATHOBJ_vEnumStartClipLines: + movl $0x1291, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiPATHOBJ_bEnumClipLines +_NtGdiPATHOBJ_bEnumClipLines: + movl $0x1292, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiGetDhpdev +_NtGdiGetDhpdev: + movl $0x1293, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiEngCheckAbort +_NtGdiEngCheckAbort: + movl $0x1294, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiHT_Get8BPPFormatPalette +_NtGdiHT_Get8BPPFormatPalette: + movl $0x1295, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiHT_Get8BPPMaskPalette +_NtGdiHT_Get8BPPMaskPalette: + movl $0x1296, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtGdiUpdateTransform +_NtGdiUpdateTransform: + movl $0x1297, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiSetPUMPDOBJ +_NtGdiSetPUMPDOBJ: + movl $0x1298, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiBRUSHOBJ_DeleteRbrush +_NtGdiBRUSHOBJ_DeleteRbrush: + movl $0x1299, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiUMPDEngFreeUserMem +_NtGdiUMPDEngFreeUserMem: + movl $0x129a, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiDrawStream +_NtGdiDrawStream: + movl $0x129b, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiSetDIBits +_NtGdiSetDIBits: + movl $0x129c, %eax + movq %rcx, %r10 + syscall + ret $0x1c + +.global _NtGdiSetViewportOrgEx +_NtGdiSetViewportOrgEx: + movl $0x129d, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiSetWindowOrgEx +_NtGdiSetWindowOrgEx: + movl $0x129e, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiGetFontFamilyInfo +_NtGdiGetFontFamilyInfo: + movl $0x129f, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiOffsetViewportOrgEx +_NtGdiOffsetViewportOrgEx: + movl $0x12a0, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiOffsetWindowOrgEx +_NtGdiOffsetWindowOrgEx: + movl $0x12a1, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserBuildMenuItemList +_NtUserBuildMenuItemList: + movl $0x12a2, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserCreateCursorIconHandle +_NtUserCreateCursorIconHandle: + movl $0x12a3, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserGetClassLong +_NtUserGetClassLong: + movl $0x12a4, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserGetMenuDefaultItem +_NtUserGetMenuDefaultItem: + movl $0x12a5, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserGetLastInputInfo +_NtUserGetLastInputInfo: + movl $0x12a6, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserGetMinMaxInfo +_NtUserGetMinMaxInfo: + movl $0x12a7, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserGetMonitorInfo +_NtUserGetMonitorInfo: + movl $0x12a8, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserGetScrollInfo +_NtUserGetScrollInfo: + movl $0x12a9, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserGetWindow +_NtUserGetWindow: + movl $0x12aa, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserGetWindowLong +_NtUserGetWindowLong: + movl $0x12ab, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserMenuInfo +_NtUserMenuInfo: + movl $0x12ac, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserMenuItemInfo +_NtUserMenuItemInfo: + movl $0x12ad, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtUserMonitorFromPoint +_NtUserMonitorFromPoint: + movl $0x12ae, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserMonitorFromRect +_NtUserMonitorFromRect: + movl $0x12af, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserMonitorFromWindow +_NtUserMonitorFromWindow: + movl $0x12b0, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserSendMessage +_NtUserSendMessage: + movl $0x12b1, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtUserSendMessageTimeout +_NtUserSendMessageTimeout: + movl $0x12b2, %eax + movq %rcx, %r10 + syscall + ret $0x20 + +.global _NtUserSetScrollBarInfo +_NtUserSetScrollBarInfo: + movl $0x12b3, %eax + movq %rcx, %r10 + syscall + ret $0xc + diff --git a/rostests/apitests/w32kdll/w32kdll_2k3sp2/w32kdll_2k3sp2-amd64.def b/rostests/apitests/w32kdll/w32kdll_2k3sp2/w32kdll_2k3sp2-amd64.def new file mode 100644 index 00000000000..43c37d0f117 --- /dev/null +++ b/rostests/apitests/w32kdll/w32kdll_2k3sp2/w32kdll_2k3sp2-amd64.def @@ -0,0 +1,679 @@ +; $Id: w32kdll.def 27344 2007-08-01 14:12:10Z tkreuzer $ +; +; ReactOS Operating System +; +; This file contains all win32k native api functions from win xp +; unsupported functions are commented out. +; +LIBRARY w32kdll.dll + +EXPORTS +NtGdiAbortDoc +NtGdiAbortPath +NtGdiAddFontResourceW +NtGdiAddRemoteFontToDC +NtGdiAddFontMemResourceEx +NtGdiRemoveMergeFont +NtGdiAddRemoteMMInstanceToDC +NtGdiAlphaBlend +NtGdiAngleArc +NtGdiAnyLinkedFonts +NtGdiFontIsLinked +NtGdiArcInternal +NtGdiBeginPath +NtGdiBitBlt +NtGdiCancelDC +NtGdiCheckBitmapBits +NtGdiCloseFigure +NtGdiClearBitmapAttributes +NtGdiClearBrushAttributes +NtGdiColorCorrectPalette +NtGdiCombineRgn +NtGdiCombineTransform +NtGdiComputeXformCoefficients +NtGdiConsoleTextOut +NtGdiConvertMetafileRect +NtGdiCreateBitmap +NtGdiCreateClientObj +NtGdiCreateColorSpace +NtGdiCreateColorTransform +NtGdiCreateCompatibleBitmap +NtGdiCreateCompatibleDC +NtGdiCreateDIBBrush +NtGdiCreateDIBitmapInternal +NtGdiCreateDIBSection +NtGdiCreateEllipticRgn +NtGdiCreateHalftonePalette +NtGdiCreateHatchBrushInternal +NtGdiCreateMetafileDC +NtGdiCreatePaletteInternal +NtGdiCreatePatternBrushInternal +NtGdiCreatePen +NtGdiCreateRectRgn +NtGdiCreateRoundRectRgn +NtGdiCreateServerMetaFile +NtGdiCreateSolidBrush +NtGdiD3dContextCreate +NtGdiD3dContextDestroy +NtGdiD3dContextDestroyAll +NtGdiD3dValidateTextureStageState +NtGdiD3dDrawPrimitives2 +NtGdiDdGetDriverState +NtGdiDdAddAttachedSurface +NtGdiDdAlphaBlt +NtGdiDdAttachSurface +NtGdiDdBeginMoCompFrame +NtGdiDdBlt +NtGdiDdCanCreateSurface +NtGdiDdCanCreateD3DBuffer +NtGdiDdColorControl +NtGdiDdCreateDirectDrawObject +NtGdiDdCreateSurface +NtGdiDdCreateD3DBuffer +NtGdiDdCreateMoComp +NtGdiDdCreateSurfaceObject +NtGdiDdDeleteDirectDrawObject +NtGdiDdDeleteSurfaceObject +NtGdiDdDestroyMoComp +NtGdiDdDestroySurface +NtGdiDdDestroyD3DBuffer +NtGdiDdEndMoCompFrame +NtGdiDdFlip +NtGdiDdFlipToGDISurface +NtGdiDdGetAvailDriverMemory +NtGdiDdGetBltStatus +NtGdiDdGetDC +NtGdiDdGetDriverInfo +NtGdiDdGetDxHandle +NtGdiDdGetFlipStatus +NtGdiDdGetInternalMoCompInfo +NtGdiDdGetMoCompBuffInfo +NtGdiDdGetMoCompGuids +NtGdiDdGetMoCompFormats +NtGdiDdGetScanLine +NtGdiDdLock +NtGdiDdLockD3D +NtGdiDdQueryDirectDrawObject +NtGdiDdQueryMoCompStatus +NtGdiDdReenableDirectDrawObject +NtGdiDdReleaseDC +NtGdiDdRenderMoComp +NtGdiDdResetVisrgn +NtGdiDdSetColorKey +NtGdiDdSetExclusiveMode +NtGdiDdSetGammaRamp +NtGdiDdCreateSurfaceEx +NtGdiDdSetOverlayPosition +NtGdiDdUnattachSurface +NtGdiDdUnlock +NtGdiDdUnlockD3D +NtGdiDdUpdateOverlay +NtGdiDdWaitForVerticalBlank +NtGdiDvpCanCreateVideoPort +NtGdiDvpColorControl +NtGdiDvpCreateVideoPort +NtGdiDvpDestroyVideoPort +NtGdiDvpFlipVideoPort +NtGdiDvpGetVideoPortBandwidth +NtGdiDvpGetVideoPortField +NtGdiDvpGetVideoPortFlipStatus +NtGdiDvpGetVideoPortInputFormats +NtGdiDvpGetVideoPortLine +NtGdiDvpGetVideoPortOutputFormats +NtGdiDvpGetVideoPortConnectInfo +NtGdiDvpGetVideoSignalStatus +NtGdiDvpUpdateVideoPort +NtGdiDvpWaitForVideoPortSync +NtGdiDvpAcquireNotification +NtGdiDvpReleaseNotification +NtGdiDxgGenericThunk +NtGdiDeleteClientObj +NtGdiDeleteColorSpace +NtGdiDeleteColorTransform +NtGdiDeleteObjectApp +NtGdiDescribePixelFormat +NtGdiGetPerBandInfo +NtGdiDoBanding +NtGdiDoPalette +NtGdiDrawEscape +NtGdiEllipse +NtGdiEnableEudc +NtGdiEndDoc +NtGdiEndPage +NtGdiEndPath +NtGdiEnumFontChunk +NtGdiEnumFontClose +NtGdiEnumFontOpen +NtGdiEnumObjects +NtGdiEqualRgn +NtGdiEudcLoadUnloadLink +NtGdiExcludeClipRect +NtGdiExtCreatePen +NtGdiExtCreateRegion +NtGdiExtEscape +NtGdiExtFloodFill +NtGdiExtGetObjectW +NtGdiExtSelectClipRgn +NtGdiExtTextOutW +NtGdiFillPath +NtGdiFillRgn +NtGdiFlattenPath +NtGdiFlushUserBatch +NtGdiFlush +NtGdiForceUFIMapping +NtGdiFrameRgn +NtGdiFullscreenControl +NtGdiGetAndSetDCDword +NtGdiGetAppClipBox +NtGdiGetBitmapBits +NtGdiGetBitmapDimension +NtGdiGetBoundsRect +NtGdiGetCharABCWidthsW +NtGdiGetCharacterPlacementW +NtGdiGetCharSet +NtGdiGetCharWidthW +NtGdiGetCharWidthInfo +NtGdiGetColorAdjustment +NtGdiGetColorSpaceforBitmap +NtGdiGetDCDword +NtGdiGetDCforBitmap +NtGdiGetDCObject +NtGdiGetDCPoint +NtGdiGetDeviceCaps +NtGdiGetDeviceGammaRamp +NtGdiGetDeviceCapsAll +NtGdiGetDIBitsInternal +NtGdiGetETM +NtGdiGetEudcTimeStampEx +NtGdiGetFontData +NtGdiGetFontResourceInfoInternalW +NtGdiGetGlyphIndicesW +NtGdiGetGlyphIndicesWInternal +NtGdiGetGlyphOutline +NtGdiGetKerningPairs +NtGdiGetLinkedUFIs +NtGdiGetMiterLimit +NtGdiGetMonitorID +NtGdiGetNearestColor +NtGdiGetNearestPaletteIndex +NtGdiGetObjectBitmapHandle +NtGdiGetOutlineTextMetricsInternalW +NtGdiGetPath +NtGdiGetPixel +NtGdiGetRandomRgn +NtGdiGetRasterizerCaps +NtGdiGetRealizationInfo +NtGdiGetRegionData +NtGdiGetRgnBox +NtGdiGetServerMetaFileBits +NtGdiGetSpoolMessage +NtGdiGetStats +NtGdiGetStockObject +NtGdiGetStringBitmapW +NtGdiGetSystemPaletteUse +NtGdiGetTextCharsetInfo +NtGdiGetTextExtent +NtGdiGetTextExtentExW +NtGdiGetTextFaceW +NtGdiGetTextMetricsW +NtGdiGetTransform +NtGdiGetUFI +NtGdiGetEmbUFI +NtGdiGetUFIPathname +NtGdiGetEmbedFonts +NtGdiChangeGhostFont +NtGdiAddEmbFontToDC +NtGdiGetFontUnicodeRanges +NtGdiGetWidthTable +NtGdiGradientFill +NtGdiHfontCreate +NtGdiIcmBrushInfo +NtGdiInit +NtGdiInitSpool +NtGdiIntersectClipRect +NtGdiInvertRgn +NtGdiLineTo +NtGdiMakeFontDir +NtGdiMakeInfoDC +NtGdiMaskBlt +NtGdiModifyWorldTransform +NtGdiMonoBitmap +NtGdiMoveTo +NtGdiOffsetClipRgn +NtGdiOffsetRgn +NtGdiOpenDCW +NtGdiPatBlt +NtGdiPolyPatBlt +NtGdiPathToRegion +NtGdiPlgBlt +NtGdiPolyDraw +NtGdiPolyPolyDraw +NtGdiPolyTextOutW +NtGdiPtInRegion +NtGdiPtVisible +NtGdiQueryFonts +NtGdiQueryFontAssocInfo +NtGdiRectangle +NtGdiRectInRegion +NtGdiRectVisible +NtGdiRemoveFontResourceW +NtGdiRemoveFontMemResourceEx +NtGdiResetDC +NtGdiResizePalette +NtGdiRestoreDC +NtGdiRoundRect +NtGdiSaveDC +NtGdiScaleViewportExtEx +NtGdiScaleWindowExtEx +NtGdiSelectBitmap +NtGdiSelectBrush +NtGdiSelectClipPath +NtGdiSelectFont +NtGdiSelectPen +NtGdiSetBitmapAttributes +NtGdiSetBitmapBits +NtGdiSetBitmapDimension +NtGdiSetBoundsRect +NtGdiSetBrushAttributes +NtGdiSetBrushOrg +NtGdiSetColorAdjustment +NtGdiSetColorSpace +NtGdiSetDeviceGammaRamp +NtGdiSetDIBitsToDeviceInternal +NtGdiSetFontEnumeration +NtGdiSetFontXform +NtGdiSetIcmMode +NtGdiSetLinkedUFIs +NtGdiSetMagicColors +NtGdiSetMetaRgn +NtGdiSetMiterLimit +NtGdiGetDeviceWidth +NtGdiMirrorWindowOrg +NtGdiSetLayout +NtGdiSetPixel +NtGdiSetPixelFormat +NtGdiSetRectRgn +NtGdiSetSystemPaletteUse +NtGdiSetTextJustification +NtGdiSetupPublicCFONT +NtGdiSetVirtualResolution +NtGdiSetSizeDevice +NtGdiStartDoc +NtGdiStartPage +NtGdiStretchBlt +NtGdiStretchDIBitsInternal +NtGdiStrokeAndFillPath +NtGdiStrokePath +NtGdiSwapBuffers +NtGdiTransformPoints +NtGdiTransparentBlt +NtGdiUnloadPrinterDriver +NtGdiUnmapMemFont +NtGdiUnrealizeObject +NtGdiUpdateColors +NtGdiWidenPath +NtUserActivateKeyboardLayout +NtUserAlterWindowStyle +NtUserAssociateInputContext +NtUserAttachThreadInput +NtUserBeginPaint +NtUserBitBltSysBmp +NtUserBlockInput +NtUserBuildHimcList +NtUserBuildHwndList +NtUserBuildNameList +NtUserBuildPropList +NtUserCallHwnd +NtUserCallHwndLock +NtUserCallHwndOpt +NtUserCallHwndParam +NtUserCallHwndParamLock +NtUserCallMsgFilter +NtUserCallNextHookEx +NtUserCallNoParam +NtUserCallOneParam +NtUserCallTwoParam +NtUserChangeClipboardChain +NtUserChangeDisplaySettings +NtUserCheckImeHotKey +NtUserCheckMenuItem +NtUserChildWindowFromPointEx +NtUserClipCursor +NtUserCloseClipboard +NtUserCloseDesktop +NtUserCloseWindowStation +NtUserConsoleControl +NtUserConvertMemHandle +NtUserCopyAcceleratorTable +NtUserCountClipboardFormats +NtUserCreateAcceleratorTable +NtUserCreateCaret +NtUserCreateDesktop +NtUserCreateInputContext +NtUserCreateLocalMemHandle +NtUserCreateWindowEx +NtUserCreateWindowStation +NtUserDdeGetQualityOfService +NtUserDdeInitialize +NtUserDdeSetQualityOfService +NtUserDeferWindowPos +NtUserDefSetText +NtUserDeleteMenu +NtUserDestroyAcceleratorTable +NtUserDestroyCursor +NtUserDestroyInputContext +NtUserDestroyMenu +NtUserDestroyWindow +NtUserDisableThreadIme +NtUserDispatchMessage +NtUserDragDetect +NtUserDragObject +NtUserDrawAnimatedRects +NtUserDrawCaption +NtUserDrawCaptionTemp +NtUserDrawIconEx +NtUserDrawMenuBarTemp +NtUserEmptyClipboard +NtUserEnableMenuItem +NtUserEnableScrollBar +NtUserEndDeferWindowPosEx +NtUserEndMenu +NtUserEndPaint +NtUserEnumDisplayDevices +;NtUserEnumDisplayMonitors +NtUserEnumDisplaySettings +NtUserEvent +NtUserExcludeUpdateRgn +NtUserFillWindow +;NtUserFindExistingCursorIcon +NtUserFindWindowEx +NtUserFlashWindowEx +NtUserGetAltTabInfo +NtUserGetAncestor +;NtUserGetAppImeLevel +NtUserGetAsyncKeyState +NtUserGetAtomName +NtUserGetCaretBlinkTime +NtUserGetCaretPos +;NtUserGetClassInfo +NtUserGetClassName +NtUserGetClipboardData +NtUserGetClipboardFormatName +NtUserGetClipboardOwner +NtUserGetClipboardSequenceNumber +NtUserGetClipboardViewer +NtUserGetClipCursor +NtUserGetComboBoxInfo +NtUserGetControlBrush +NtUserGetControlColor +NtUserGetCPD +NtUserGetCursorFrameInfo +NtUserGetCursorInfo +NtUserGetDC +NtUserGetDCEx +NtUserGetDoubleClickTime +NtUserGetForegroundWindow +NtUserGetGuiResources +NtUserGetGUIThreadInfo +NtUserGetIconInfo +NtUserGetIconSize +NtUserGetImeHotKey +NtUserGetImeInfoEx +NtUserGetInternalWindowPos +NtUserGetKeyboardLayoutList +NtUserGetKeyboardLayoutName +NtUserGetKeyboardState +NtUserGetKeyNameText +NtUserGetKeyState +NtUserGetListBoxInfo +NtUserGetMenuBarInfo +NtUserGetMenuIndex +NtUserGetMenuItemRect +NtUserGetMessage +NtUserGetMouseMovePointsEx +NtUserGetObjectInformation +NtUserGetOpenClipboardWindow +NtUserGetPriorityClipboardFormat +NtUserGetProcessWindowStation +NtUserGetRawInputBuffer +NtUserGetRawInputData +NtUserGetRawInputDeviceInfo +NtUserGetRawInputDeviceList +NtUserGetRegisteredRawInputDevices +NtUserGetScrollBarInfo +NtUserGetSystemMenu +NtUserGetThreadDesktop +NtUserGetThreadState +NtUserGetTitleBarInfo +NtUserGetUpdateRect +NtUserGetUpdateRgn +NtUserGetWindowDC +NtUserGetWindowPlacement +NtUserGetWOWClass +NtUserHardErrorControl +NtUserHideCaret +NtUserHiliteMenuItem +NtUserImpersonateDdeClientWindow +NtUserInitialize +NtUserInitializeClientPfnArrays +;NtUserInitTask8 +NtUserInternalGetWindowText +NtUserInvalidateRect +NtUserInvalidateRgn +NtUserIsClipboardFormatAvailable +NtUserKillTimer +NtUserLoadKeyboardLayoutEx +NtUserLockWindowStation +NtUserLockWindowUpdate +NtUserLockWorkStation +NtUserMapVirtualKeyEx +NtUserMenuItemFromPoint +NtUserMessageCall +NtUserMinMaximize +NtUserMNDragLeave +NtUserMNDragOver +NtUserModifyUserStartupInfoFlags +NtUserMoveWindow +NtUserNotifyIMEStatus +NtUserNotifyProcessCreate +NtUserNotifyWinEvent +NtUserOpenClipboard +NtUserOpenDesktop +NtUserOpenInputDesktop +NtUserOpenWindowStation +NtUserPaintDesktop +NtUserPeekMessage +NtUserPostMessage +NtUserPostThreadMessage +NtUserPrintWindow +NtUserProcessConnect +NtUserQueryInformationThread +NtUserQueryInputContext +NtUserQuerySendMessage +NtUserQueryUserCounters +NtUserQueryWindow +NtUserRealChildWindowFromPoint +NtUserRealInternalGetMessage +NtUserRealWaitMessageEx +NtUserRedrawWindow +NtUserRegisterClassExWOW +NtUserRegisterUserApiHook +NtUserRegisterHotKey +NtUserRegisterRawInputDevices +NtUserRegisterTasklist +NtUserRegisterWindowMessage +NtUserRemoveMenu +NtUserRemoveProp +NtUserResolveDesktop +NtUserResolveDesktopForWOW +NtUserSBGetParms +NtUserScrollDC +NtUserScrollWindowEx +NtUserSelectPalette +NtUserSendInput +NtUserSetActiveWindow +NtUserSetAppImeLevel +NtUserSetCapture +NtUserSetClassLong +NtUserSetClassWord +NtUserSetClipboardData +NtUserSetClipboardViewer +NtUserSetConsoleReserveKeys +NtUserSetCursor +NtUserSetCursorContents +;NtUserSetCursorIconData +NtUserSetDbgTag +NtUserSetFocus +NtUserSetImeHotKey +NtUserSetImeInfoEx +NtUserSetImeOwnerWindow +NtUserSetInformationProcess +NtUserSetInformationThread +NtUserSetInternalWindowPos +NtUserSetKeyboardState +NtUserSetLogonNotifyWindow +NtUserSetMenu +NtUserSetMenuContextHelpId +NtUserSetMenuDefaultItem +NtUserSetMenuFlagRtoL +NtUserSetObjectInformation +NtUserSetParent +NtUserSetProcessWindowStation +NtUserSetProp +NtUserSetRipFlags +NtUserSetScrollInfo +NtUserSetShellWindowEx +NtUserSetSysColors +NtUserSetSystemCursor +NtUserSetSystemMenu +NtUserSetSystemTimer +NtUserSetThreadDesktop +NtUserSetThreadLayoutHandles +NtUserSetThreadState +NtUserSetTimer +NtUserSetWindowFNID +NtUserSetWindowLong +NtUserSetWindowPlacement +NtUserSetWindowPos +NtUserSetWindowRgn +NtUserSetWindowsHookAW +NtUserSetWindowsHookEx +NtUserSetWindowStationUser +NtUserSetWindowWord +NtUserSetWinEventHook +NtUserShowCaret +NtUserShowScrollBar +NtUserShowWindow +NtUserShowWindowAsync +NtUserSoundSentry +NtUserSwitchDesktop +NtUserSystemParametersInfo +NtUserTestForInteractiveUser +NtUserThunkedMenuInfo +NtUserThunkedMenuItemInfo +NtUserToUnicodeEx +NtUserTrackMouseEvent +NtUserTrackPopupMenuEx +NtUserCalcMenuBar +NtUserPaintMenuBar +NtUserTranslateAccelerator +NtUserTranslateMessage +NtUserUnhookWindowsHookEx +NtUserUnhookWinEvent +NtUserUnloadKeyboardLayout +NtUserUnlockWindowStation +;NtUserUnregisterClass +NtUserUnregisterUserApiHook +NtUserUnregisterHotKey +NtUserUpdateInputContext +NtUserUpdateInstance +NtUserUpdateLayeredWindow +NtUserGetLayeredWindowAttributes +NtUserSetLayeredWindowAttributes +NtUserUpdatePerUserSystemParameters +NtUserUserHandleGrantAccess +NtUserValidateHandleSecure +NtUserValidateRect +NtUserValidateTimerCallback +NtUserVkKeyScanEx +NtUserWaitForInputIdle +NtUserWaitForMsgAndEvent +NtUserWaitMessage +NtUserWin32PoolAllocationStats +NtUserWindowFromPoint +NtUserYieldTask +NtUserRemoteConnect +NtUserRemoteRedrawRectangle +NtUserRemoteRedrawScreen +NtUserRemoteStopScreenUpdates +NtUserCtxDisplayIOCtl +NtGdiEngAssociateSurface +NtGdiEngCreateBitmap +NtGdiEngCreateDeviceSurface +NtGdiEngCreateDeviceBitmap +NtGdiEngCreatePalette +NtGdiEngComputeGlyphSet +NtGdiEngCopyBits +NtGdiEngDeletePalette +NtGdiEngDeleteSurface +NtGdiEngEraseSurface +NtGdiEngUnlockSurface +NtGdiEngLockSurface +NtGdiEngBitBlt +NtGdiEngStretchBlt +NtGdiEngPlgBlt +NtGdiEngMarkBandingSurface +NtGdiEngStrokePath +NtGdiEngFillPath +NtGdiEngStrokeAndFillPath +NtGdiEngPaint +NtGdiEngLineTo +NtGdiEngAlphaBlend +NtGdiEngGradientFill +NtGdiEngTransparentBlt +NtGdiEngTextOut +NtGdiEngStretchBltROP +NtGdiXLATEOBJ_cGetPalette +NtGdiXLATEOBJ_iXlate +NtGdiXLATEOBJ_hGetColorTransform +NtGdiCLIPOBJ_bEnum +NtGdiCLIPOBJ_cEnumStart +NtGdiCLIPOBJ_ppoGetPath +NtGdiEngDeletePath +NtGdiEngCreateClip +NtGdiEngDeleteClip +NtGdiBRUSHOBJ_ulGetBrushColor +NtGdiBRUSHOBJ_pvAllocRbrush +NtGdiBRUSHOBJ_pvGetRbrush +NtGdiBRUSHOBJ_hGetColorTransform +NtGdiXFORMOBJ_bApplyXform +NtGdiXFORMOBJ_iGetXform +NtGdiFONTOBJ_vGetInfo +NtGdiFONTOBJ_pxoGetXform +NtGdiFONTOBJ_cGetGlyphs +NtGdiFONTOBJ_pifi +NtGdiFONTOBJ_pfdg +NtGdiFONTOBJ_pQueryGlyphAttrs +NtGdiFONTOBJ_pvTrueTypeFontFile +NtGdiFONTOBJ_cGetAllGlyphHandles +NtGdiSTROBJ_bEnum +NtGdiSTROBJ_bEnumPositionsOnly +NtGdiSTROBJ_bGetAdvanceWidths +NtGdiSTROBJ_vEnumStart +NtGdiSTROBJ_dwGetCodePage +NtGdiPATHOBJ_vGetBounds +NtGdiPATHOBJ_bEnum +NtGdiPATHOBJ_vEnumStart +NtGdiPATHOBJ_vEnumStartClipLines +NtGdiPATHOBJ_bEnumClipLines +NtGdiGetDhpdev +NtGdiEngCheckAbort +NtGdiHT_Get8BPPFormatPalette +NtGdiHT_Get8BPPMaskPalette +NtGdiUpdateTransform +NtGdiSetPUMPDOBJ +NtGdiBRUSHOBJ_DeleteRbrush +NtGdiUMPDEngFreeUserMem +NtGdiUnmapMemFont +NtGdiDrawStream + diff --git a/rostests/apitests/w32kdll/w32kdll_2k3sp2/w32kdll_2k3sp2.S b/rostests/apitests/w32kdll/w32kdll_2k3sp2/w32kdll_2k3sp2-i386.S similarity index 100% rename from rostests/apitests/w32kdll/w32kdll_2k3sp2/w32kdll_2k3sp2.S rename to rostests/apitests/w32kdll/w32kdll_2k3sp2/w32kdll_2k3sp2-i386.S diff --git a/rostests/apitests/w32kdll/w32kdll_2k3sp2/w32kdll_2k3sp2-i386.def b/rostests/apitests/w32kdll/w32kdll_2k3sp2/w32kdll_2k3sp2-i386.def new file mode 100644 index 00000000000..b590c508295 --- /dev/null +++ b/rostests/apitests/w32kdll/w32kdll_2k3sp2/w32kdll_2k3sp2-i386.def @@ -0,0 +1,674 @@ +; $Id: w32kdll.def 27344 2007-08-01 14:12:10Z tkreuzer $ +; +; ReactOS Operating System +; +; This file contains all win32k native api functions from win 2k3 sp 2 +; +LIBRARY w32kdll.dll + +EXPORTS +NtGdiAbortDoc@4 +NtGdiAbortPath@4 +NtGdiAddFontResourceW@24 +NtGdiAddRemoteFontToDC@16 +NtGdiAddFontMemResourceEx@20 +NtGdiRemoveMergeFont@8 +NtGdiAddRemoteMMInstanceToDC@12 +NtGdiAlphaBlend@48 +NtGdiAngleArc@24 +NtGdiAnyLinkedFonts@0 +NtGdiFontIsLinked@4 +NtGdiArcInternal@40 +NtGdiBeginPath@4 +NtGdiBitBlt@44 +NtGdiCancelDC@4 +NtGdiCheckBitmapBits@32 +NtGdiCloseFigure@4 +NtGdiClearBitmapAttributes@8 +NtGdiClearBrushAttributes@8 +NtGdiColorCorrectPalette@24 +NtGdiCombineRgn@16 +NtGdiCombineTransform@12 +NtGdiComputeXformCoefficients@4 +NtGdiConsoleTextOut@16 +NtGdiConvertMetafileRect@8 +NtGdiCreateBitmap@20 +NtGdiCreateClientObj@4 +NtGdiCreateColorSpace@4 +NtGdiCreateColorTransform@32 +NtGdiCreateCompatibleBitmap@12 +NtGdiCreateCompatibleDC@4 +NtGdiCreateDIBBrush@24 +NtGdiCreateDIBitmapInternal@44 +NtGdiCreateDIBSection@36 +NtGdiCreateEllipticRgn@16 +NtGdiCreateHalftonePalette@4 +NtGdiCreateHatchBrushInternal@12 +NtGdiCreateMetafileDC@4 +NtGdiCreatePaletteInternal@8 +NtGdiCreatePatternBrushInternal@12 +NtGdiCreatePen@16 +NtGdiCreateRectRgn@16 +NtGdiCreateRoundRectRgn@24 +NtGdiCreateServerMetaFile@24 +NtGdiCreateSolidBrush@8 +NtGdiD3dContextCreate@16 +NtGdiD3dContextDestroy@4 +NtGdiD3dContextDestroyAll@4 +NtGdiD3dValidateTextureStageState@4 +NtGdiD3dDrawPrimitives2@28 +NtGdiDdGetDriverState@4 +NtGdiDdAddAttachedSurface@12 +NtGdiDdAlphaBlt@12 +NtGdiDdAttachSurface@8 +NtGdiDdBeginMoCompFrame@8 +NtGdiDdBlt@12 +NtGdiDdCanCreateSurface@8 +NtGdiDdCanCreateD3DBuffer@8 +NtGdiDdColorControl@8 +NtGdiDdCreateDirectDrawObject@4 +NtGdiDdCreateSurface@32 +NtGdiDdCreateD3DBuffer@32 +NtGdiDdCreateMoComp@8 +NtGdiDdCreateSurfaceObject@24 +NtGdiDdDeleteDirectDrawObject@4 +NtGdiDdDeleteSurfaceObject@4 +NtGdiDdDestroyMoComp@8 +NtGdiDdDestroySurface@8 +NtGdiDdDestroyD3DBuffer@4 +NtGdiDdEndMoCompFrame@8 +NtGdiDdFlip@20 +NtGdiDdFlipToGDISurface@8 +NtGdiDdGetAvailDriverMemory@8 +NtGdiDdGetBltStatus@8 +NtGdiDdGetDC@8 +NtGdiDdGetDriverInfo@8 +NtGdiDdGetDxHandle@12 +NtGdiDdGetFlipStatus@8 +NtGdiDdGetInternalMoCompInfo@8 +NtGdiDdGetMoCompBuffInfo@8 +NtGdiDdGetMoCompGuids@8 +NtGdiDdGetMoCompFormats@8 +NtGdiDdGetScanLine@8 +NtGdiDdLock@12 +NtGdiDdLockD3D@8 +NtGdiDdQueryDirectDrawObject@44 +NtGdiDdQueryMoCompStatus@8 +NtGdiDdReenableDirectDrawObject@8 +NtGdiDdReleaseDC@4 +NtGdiDdRenderMoComp@8 +NtGdiDdResetVisrgn@8 +NtGdiDdSetColorKey@8 +NtGdiDdSetExclusiveMode@8 +NtGdiDdSetGammaRamp@12 +NtGdiDdCreateSurfaceEx@12 +NtGdiDdSetOverlayPosition@12 +NtGdiDdUnattachSurface@8 +NtGdiDdUnlock@8 +NtGdiDdUnlockD3D@8 +NtGdiDdUpdateOverlay@12 +NtGdiDdWaitForVerticalBlank@8 +NtGdiDvpCanCreateVideoPort@8 +NtGdiDvpColorControl@8 +NtGdiDvpCreateVideoPort@8 +NtGdiDvpDestroyVideoPort@8 +NtGdiDvpFlipVideoPort@16 +NtGdiDvpGetVideoPortBandwidth@8 +NtGdiDvpGetVideoPortField@8 +NtGdiDvpGetVideoPortFlipStatus@8 +NtGdiDvpGetVideoPortInputFormats@8 +NtGdiDvpGetVideoPortLine@8 +NtGdiDvpGetVideoPortOutputFormats@8 +NtGdiDvpGetVideoPortConnectInfo@8 +NtGdiDvpGetVideoSignalStatus@8 +NtGdiDvpUpdateVideoPort@16 +NtGdiDvpWaitForVideoPortSync@8 +NtGdiDvpAcquireNotification@12 +NtGdiDvpReleaseNotification@8 +NtGdiDxgGenericThunk@24 +NtGdiDeleteClientObj@4 +NtGdiDeleteColorSpace@4 +NtGdiDeleteColorTransform@8 +NtGdiDeleteObjectApp@4 +NtGdiDescribePixelFormat@16 +NtGdiGetPerBandInfo@8 +NtGdiDoBanding@16 +NtGdiDoPalette@24 +NtGdiDrawEscape@16 +NtGdiEllipse@20 +NtGdiEnableEudc@4 +NtGdiEndDoc@4 +NtGdiEndPage@4 +NtGdiEndPath@4 +NtGdiEnumFontChunk@20 +NtGdiEnumFontClose@4 +NtGdiEnumFontOpen@28 +NtGdiEnumObjects@16 +NtGdiEqualRgn@8 +NtGdiEudcLoadUnloadLink@28 +NtGdiExcludeClipRect@20 +NtGdiExtCreatePen@44 +NtGdiExtCreateRegion@12 +NtGdiExtEscape@32 +NtGdiExtFloodFill@20 +NtGdiExtGetObjectW@12 +NtGdiExtSelectClipRgn@12 +NtGdiExtTextOutW@36 +NtGdiFillPath@4 +NtGdiFillRgn@12 +NtGdiFlattenPath@4 +NtGdiFlush@0 +NtGdiForceUFIMapping@8 +NtGdiFrameRgn@20 +NtGdiFullscreenControl@20 +NtGdiGetAndSetDCDword@16 +NtGdiGetAppClipBox@8 +NtGdiGetBitmapBits@12 +NtGdiGetBitmapDimension@8 +NtGdiGetBoundsRect@12 +NtGdiGetCharABCWidthsW@24 +NtGdiGetCharacterPlacementW@24 +NtGdiGetCharSet@4 +NtGdiGetCharWidthW@24 +NtGdiGetCharWidthInfo@8 +NtGdiGetColorAdjustment@8 +NtGdiGetColorSpaceforBitmap@4 +NtGdiGetDCDword@12 +NtGdiGetDCforBitmap@4 +NtGdiGetDCObject@8 +NtGdiGetDCPoint@12 +NtGdiGetDeviceCaps@8 +NtGdiGetDeviceGammaRamp@8 +NtGdiGetDeviceCapsAll@8 +NtGdiGetDIBitsInternal@36 +NtGdiGetETM@8 +NtGdiGetEudcTimeStampEx@12 +NtGdiGetFontData@20 +NtGdiGetFontResourceInfoInternalW@28 +NtGdiGetGlyphIndicesW@20 +NtGdiGetGlyphIndicesWInternal@24 +NtGdiGetGlyphOutline@32 +NtGdiGetKerningPairs@12 +NtGdiGetLinkedUFIs@12 +NtGdiGetMiterLimit@8 +NtGdiGetMonitorID@12 +NtGdiGetNearestColor@8 +NtGdiGetNearestPaletteIndex@8 +NtGdiGetObjectBitmapHandle@8 +NtGdiGetOutlineTextMetricsInternalW@16 +NtGdiGetPath@16 +NtGdiGetPixel@12 +NtGdiGetRandomRgn@12 +NtGdiGetRasterizerCaps@8 +NtGdiGetRealizationInfo@12 +NtGdiGetRegionData@12 +NtGdiGetRgnBox@8 +NtGdiGetServerMetaFileBits@28 +NtGdiGetSpoolMessage@16 +NtGdiGetStats@20 +NtGdiGetStockObject@4 +NtGdiGetStringBitmapW@20 +NtGdiGetSystemPaletteUse@4 +NtGdiGetTextCharsetInfo@12 +NtGdiGetTextExtent@20 +NtGdiGetTextExtentExW@32 +NtGdiGetTextFaceW@16 +NtGdiGetTextMetricsW@12 +NtGdiGetTransform@12 +NtGdiGetUFI@24 +NtGdiGetEmbUFI@28 +NtGdiGetUFIPathname@40 +NtGdiGetEmbedFonts@0 +NtGdiChangeGhostFont@8 +NtGdiAddEmbFontToDC@8 +NtGdiGetFontUnicodeRanges@8 +NtGdiGetWidthTable@28 +NtGdiGradientFill@24 +NtGdiHfontCreate@20 +NtGdiIcmBrushInfo@32 +NtGdiInit@0 +NtGdiInitSpool@0 +NtGdiIntersectClipRect@20 +NtGdiInvertRgn@8 +NtGdiLineTo@12 +NtGdiMakeFontDir@20 +NtGdiMakeInfoDC@8 +NtGdiMaskBlt@52 +NtGdiModifyWorldTransform@12 +NtGdiMonoBitmap@4 +NtGdiMoveTo@16 +NtGdiOffsetClipRgn@12 +NtGdiOffsetRgn@12 +NtGdiOpenDCW@28 +NtGdiPatBlt@24 +NtGdiPolyPatBlt@20 +NtGdiPathToRegion@4 +NtGdiPlgBlt@44 +NtGdiPolyDraw@16 +NtGdiPolyPolyDraw@20 +NtGdiPolyTextOutW@16 +NtGdiPtInRegion@12 +NtGdiPtVisible@12 +NtGdiQueryFonts@12 +NtGdiQueryFontAssocInfo@4 +NtGdiRectangle@20 +NtGdiRectInRegion@8 +NtGdiRectVisible@8 +NtGdiRemoveFontResourceW@24 +NtGdiRemoveFontMemResourceEx@4 +NtGdiResetDC@20 +NtGdiResizePalette@8 +NtGdiRestoreDC@8 +NtGdiRoundRect@28 +NtGdiSaveDC@4 +NtGdiScaleViewportExtEx@24 +NtGdiScaleWindowExtEx@24 +NtGdiSelectBitmap@8 +NtGdiSelectBrush@8 +NtGdiSelectClipPath@8 +NtGdiSelectFont@8 +NtGdiSelectPen@8 +NtGdiSetBitmapAttributes@8 +NtGdiSetBitmapBits@12 +NtGdiSetBitmapDimension@16 +NtGdiSetBoundsRect@12 +NtGdiSetBrushAttributes@8 +NtGdiSetBrushOrg@16 +NtGdiSetColorAdjustment@8 +NtGdiSetColorSpace@8 +NtGdiSetDeviceGammaRamp@8 +NtGdiSetDIBitsToDeviceInternal@64 +NtGdiSetFontEnumeration@4 +NtGdiSetFontXform@12 +NtGdiSetIcmMode@12 +NtGdiSetLinkedUFIs@12 +NtGdiSetMagicColors@12 +NtGdiSetMetaRgn@4 +NtGdiSetMiterLimit@12 +NtGdiGetDeviceWidth@4 +NtGdiMirrorWindowOrg@4 +NtGdiSetLayout@12 +NtGdiSetPixel@16 +NtGdiSetPixelFormat@8 +NtGdiSetRectRgn@20 +NtGdiSetSystemPaletteUse@8 +NtGdiSetTextJustification@12 +NtGdiSetupPublicCFONT@12 +NtGdiSetVirtualResolution@20 +NtGdiSetSizeDevice@12 +NtGdiStartDoc@16 +NtGdiStartPage@4 +NtGdiStretchBlt@48 +NtGdiStretchDIBitsInternal@64 +NtGdiStrokeAndFillPath@4 +NtGdiStrokePath@4 +NtGdiSwapBuffers@4 +NtGdiTransformPoints@20 +NtGdiTransparentBlt@44 +NtGdiUnloadPrinterDriver@8 +NtGdiUnmapMemFont@4 +NtGdiUnrealizeObject@4 +NtGdiUpdateColors@4 +NtGdiWidenPath@4 +NtUserActivateKeyboardLayout@8 +NtUserAlterWindowStyle@12 +NtUserAssociateInputContext@12 +NtUserAttachThreadInput@12 +NtUserBeginPaint@8 +NtUserBitBltSysBmp@32 +NtUserBlockInput@4 +NtUserBuildHimcList@16 +NtUserBuildHwndList@28 +NtUserBuildNameList@16 +NtUserBuildPropList@16 +NtUserCallHwnd@8 +NtUserCallHwndLock@8 +NtUserCallHwndOpt@8 +NtUserCallHwndParam@12 +NtUserCallHwndParamLock@12 +NtUserCallMsgFilter@8 +NtUserCallNextHookEx@16 +NtUserCallNoParam@4 +NtUserCallOneParam@8 +NtUserCallTwoParam@12 +NtUserChangeClipboardChain@8 +NtUserChangeDisplaySettings@16 +NtUserCheckImeHotKey@8 +NtUserCheckMenuItem@12 +NtUserChildWindowFromPointEx@16 +NtUserClipCursor@4 +NtUserCloseClipboard@0 +NtUserCloseDesktop@4 +NtUserCloseWindowStation@4 +NtUserConsoleControl@12 +NtUserConvertMemHandle@8 +NtUserCopyAcceleratorTable@12 +NtUserCountClipboardFormats@0 +NtUserCreateAcceleratorTable@8 +NtUserCreateCaret@16 +NtUserCreateDesktop@20 +NtUserCreateInputContext@4 +NtUserCreateLocalMemHandle@16 +NtUserCreateWindowEx@60 +NtUserCreateWindowStation@28 +NtUserDdeGetQualityOfService@12 +NtUserDdeInitialize@20 +NtUserDdeSetQualityOfService@12 +NtUserDeferWindowPos@32 +NtUserDefSetText@8 +NtUserDeleteMenu@12 +NtUserDestroyAcceleratorTable@4 +NtUserDestroyCursor@8 +NtUserDestroyInputContext@4 +NtUserDestroyMenu@4 +NtUserDestroyWindow@4 +NtUserDisableThreadIme@4 +NtUserDispatchMessage@4 +NtUserDragDetect@12 +NtUserDragObject@20 +NtUserDrawAnimatedRects@16 +NtUserDrawCaption@16 +NtUserDrawCaptionTemp@28 +NtUserDrawIconEx@44 +NtUserDrawMenuBarTemp@20 +NtUserEmptyClipboard@0 +NtUserEnableMenuItem@12 +NtUserEnableScrollBar@12 +NtUserEndDeferWindowPosEx@8 +NtUserEndMenu@0 +NtUserEndPaint@8 +NtUserEnumDisplayDevices@16 +NtUserEnumDisplayMonitors@16 +NtUserEnumDisplaySettings@16 +NtUserEvent@4 +NtUserExcludeUpdateRgn@8 +NtUserFillWindow@16 +NtUserFindExistingCursorIcon@12 +NtUserFindWindowEx@20 +NtUserFlashWindowEx@4 +NtUserGetAltTabInfo@24 +NtUserGetAncestor@8 +NtUserGetAppImeLevel@4 +NtUserGetAsyncKeyState@4 +NtUserGetAtomName@8 +NtUserGetCaretBlinkTime@0 +NtUserGetCaretPos@4 +NtUserGetClassInfoEx@20 +NtUserGetClassName@12 +NtUserGetClipboardData@8 +NtUserGetClipboardFormatName@12 +NtUserGetClipboardOwner@0 +NtUserGetClipboardSequenceNumber@0 +NtUserGetClipboardViewer@0 +NtUserGetClipCursor@4 +NtUserGetComboBoxInfo@8 +NtUserGetControlBrush@12 +NtUserGetControlColor@16 +NtUserGetCPD@12 +NtUserGetCursorFrameInfo@16 +NtUserGetCursorInfo@4 +NtUserGetDC@4 +NtUserGetDCEx@12 +NtUserGetDoubleClickTime@0 +NtUserGetForegroundWindow@0 +NtUserGetGuiResources@8 +NtUserGetGUIThreadInfo@8 +NtUserGetIconInfo@24 +NtUserGetIconSize@16 +NtUserGetImeHotKey@16 +NtUserGetImeInfoEx@8 +NtUserGetInternalWindowPos@12 +NtUserGetKeyboardLayoutList@8 +NtUserGetKeyboardLayoutName@4 +NtUserGetKeyboardState@4 +NtUserGetKeyNameText@12 +NtUserGetKeyState@4 +NtUserGetListBoxInfo@4 +NtUserGetMenuBarInfo@16 +NtUserGetMenuIndex@8 +NtUserGetMenuItemRect@16 +NtUserGetMessage@16 +NtUserGetMouseMovePointsEx@20 +NtUserGetObjectInformation@20 +NtUserGetOpenClipboardWindow@0 +NtUserGetPriorityClipboardFormat@8 +NtUserGetProcessWindowStation@0 +NtUserGetRawInputBuffer@12 +NtUserGetRawInputData@20 +NtUserGetRawInputDeviceInfo@16 +NtUserGetRawInputDeviceList@12 +NtUserGetRegisteredRawInputDevices@12 +NtUserGetScrollBarInfo@12 +NtUserGetSystemMenu@8 +NtUserGetThreadDesktop@8 +NtUserGetThreadState@4 +NtUserGetTitleBarInfo@8 +NtUserGetUpdateRect@12 +NtUserGetUpdateRgn@12 +NtUserGetWindowDC@4 +NtUserGetWindowPlacement@8 +NtUserGetWOWClass@8 +NtUserHardErrorControl@12 +NtUserHideCaret@4 +NtUserHiliteMenuItem@16 +NtUserImpersonateDdeClientWindow@8 +NtUserInitialize@12 +NtUserInitializeClientPfnArrays@16 +NtUserInitTask@48 +NtUserInternalGetWindowText@12 +NtUserInvalidateRect@12 +NtUserInvalidateRgn@12 +NtUserIsClipboardFormatAvailable@4 +NtUserKillTimer@8 +NtUserLoadKeyboardLayoutEx@28 +NtUserLockWindowStation@4 +NtUserLockWindowUpdate@4 +NtUserLockWorkStation@0 +NtUserMapVirtualKeyEx@16 +NtUserMenuItemFromPoint@16 +NtUserMessageCall@28 +NtUserMinMaximize@12 +NtUserMNDragLeave@0 +NtUserMNDragOver@8 +NtUserModifyUserStartupInfoFlags@8 +NtUserMoveWindow@24 +NtUserNotifyIMEStatus@12 +NtUserNotifyProcessCreate@16 +NtUserNotifyWinEvent@16 +NtUserOpenClipboard@8 +NtUserOpenDesktop@12 +NtUserOpenInputDesktop@12 +NtUserOpenWindowStation@8 +NtUserPaintDesktop@4 +NtUserPeekMessage@20 +NtUserPostMessage@16 +NtUserPostThreadMessage@16 +NtUserPrintWindow@12 +NtUserProcessConnect@12 +NtUserQueryInformationThread@16 +NtUserQueryInputContext@8 +NtUserQuerySendMessage@4 +NtUserQueryWindow@8 +NtUserRealChildWindowFromPoint@12 +NtUserRealInternalGetMessage@24 +NtUserRealWaitMessageEx@8 +NtUserRedrawWindow@16 +NtUserRegisterClassExWOW@28 +NtUserRegisterUserApiHook@16 +NtUserRegisterHotKey@16 +NtUserRegisterRawInputDevices@12 +NtUserRegisterTasklist@4 +NtUserRegisterWindowMessage@4 +NtUserRemoveMenu@12 +NtUserRemoveProp@8 +NtUserResolveDesktop@16 +NtUserResolveDesktopForWOW@4 +NtUserSBGetParms@16 +NtUserScrollDC@28 +NtUserScrollWindowEx@32 +NtUserSelectPalette@12 +NtUserSendInput@12 +NtUserSetActiveWindow@4 +NtUserSetAppImeLevel@8 +NtUserSetCapture@4 +NtUserSetClassLong@16 +NtUserSetClassWord@12 +NtUserSetClipboardData@12 +NtUserSetClipboardViewer@4 +NtUserSetConsoleReserveKeys@8 +NtUserSetCursor@4 +NtUserSetCursorContents@8 +NtUserSetCursorIconData@16 +NtUserSetFocus@4 +NtUserSetImeHotKey@20 +NtUserSetImeInfoEx@4 +NtUserSetImeOwnerWindow@8 +NtUserSetInformationProcess@16 +NtUserSetInformationThread@16 +NtUserSetInternalWindowPos@16 +NtUserSetKeyboardState@4 +NtUserSetLogonNotifyWindow@4 +NtUserSetMenu@12 +NtUserSetMenuContextHelpId@8 +NtUserSetMenuDefaultItem@12 +NtUserSetMenuFlagRtoL@4 +NtUserSetObjectInformation@16 +NtUserSetParent@8 +NtUserSetProcessWindowStation@4 +NtUserSetProp@12 +NtUserSetScrollInfo@16 +NtUserSetShellWindowEx@8 +NtUserSetSysColors@16 +NtUserSetSystemCursor@8 +NtUserSetSystemMenu@8 +NtUserSetSystemTimer@16 +NtUserSetThreadDesktop@4 +NtUserSetThreadLayoutHandles@8 +NtUserSetThreadState@8 +NtUserSetTimer@16 +NtUserSetWindowFNID@8 +NtUserSetWindowLong@16 +NtUserSetWindowPlacement@8 +NtUserSetWindowPos@28 +NtUserSetWindowRgn@12 +NtUserSetWindowsHookAW@12 +NtUserSetWindowsHookEx@24 +NtUserSetWindowStationUser@16 +NtUserSetWindowWord@12 +NtUserSetWinEventHook@32 +NtUserShowCaret@4 +NtUserShowScrollBar@12 +NtUserShowWindow@8 +NtUserShowWindowAsync@8 +NtUserSoundSentry@0 +NtUserSwitchDesktop@4 +NtUserSystemParametersInfo@16 +NtUserTestForInteractiveUser@4 +NtUserThunkedMenuInfo@8 +NtUserThunkedMenuItemInfo@24 +NtUserToUnicodeEx@28 +NtUserTrackMouseEvent@4 +NtUserTrackPopupMenuEx@24 +NtUserCalcMenuBar@20 +NtUserPaintMenuBar@24 +NtUserTranslateAccelerator@12 +NtUserTranslateMessage@8 +NtUserUnhookWindowsHookEx@4 +NtUserUnhookWinEvent@4 +NtUserUnloadKeyboardLayout@4 +NtUserUnlockWindowStation@4 +NtUserUnregisterClass@12 +NtUserUnregisterUserApiHook@0 +NtUserUnregisterHotKey@8 +NtUserUpdateInputContext@12 +NtUserUpdateInstance@12 +NtUserUpdateLayeredWindow@40 +NtUserGetLayeredWindowAttributes@16 +NtUserSetLayeredWindowAttributes@16 +NtUserUpdatePerUserSystemParameters@8 +NtUserUserHandleGrantAccess@12 +NtUserValidateHandleSecure@4 +NtUserValidateRect@8 +NtUserValidateTimerCallback@4 +NtUserVkKeyScanEx@12 +NtUserWaitForInputIdle@12 +NtUserWaitForMsgAndEvent@4 +NtUserWaitMessage@0 +NtUserWin32PoolAllocationStats@24 +NtUserWindowFromPoint@8 +NtUserYieldTask@0 +NtUserRemoteConnect@12 +NtUserRemoteRedrawRectangle@16 +NtUserRemoteRedrawScreen@0 +NtUserRemoteStopScreenUpdates@0 +NtUserCtxDisplayIOCtl@12 +NtGdiEngAssociateSurface@12 +NtGdiEngCreateBitmap@24 +NtGdiEngCreateDeviceSurface@16 +NtGdiEngCreateDeviceBitmap@16 +NtGdiEngCreatePalette@24 +NtGdiEngComputeGlyphSet@12 +NtGdiEngCopyBits@24 +NtGdiEngDeletePalette@4 +NtGdiEngDeleteSurface@4 +NtGdiEngEraseSurface@12 +NtGdiEngUnlockSurface@4 +NtGdiEngLockSurface@4 +NtGdiEngBitBlt@44 +NtGdiEngStretchBlt@44 +NtGdiEngPlgBlt@44 +NtGdiEngMarkBandingSurface@4 +NtGdiEngStrokePath@32 +NtGdiEngFillPath@28 +NtGdiEngStrokeAndFillPath@40 +NtGdiEngPaint@20 +NtGdiEngLineTo@36 +NtGdiEngAlphaBlend@28 +NtGdiEngGradientFill@40 +NtGdiEngTransparentBlt@32 +NtGdiEngTextOut@40 +NtGdiEngStretchBltROP@52 +NtGdiXLATEOBJ_cGetPalette@16 +NtGdiXLATEOBJ_iXlate@8 +NtGdiXLATEOBJ_hGetColorTransform@4 +NtGdiCLIPOBJ_bEnum@12 +NtGdiCLIPOBJ_cEnumStart@20 +NtGdiCLIPOBJ_ppoGetPath@4 +NtGdiEngDeletePath@4 +NtGdiEngCreateClip@0 +NtGdiEngDeleteClip@4 +NtGdiBRUSHOBJ_ulGetBrushColor@4 +NtGdiBRUSHOBJ_pvAllocRbrush@8 +NtGdiBRUSHOBJ_pvGetRbrush@4 +NtGdiBRUSHOBJ_hGetColorTransform@4 +NtGdiXFORMOBJ_bApplyXform@20 +NtGdiXFORMOBJ_iGetXform@8 +NtGdiFONTOBJ_vGetInfo@12 +NtGdiFONTOBJ_pxoGetXform@4 +NtGdiFONTOBJ_cGetGlyphs@20 +NtGdiFONTOBJ_pifi@4 +NtGdiFONTOBJ_pfdg@4 +NtGdiFONTOBJ_pQueryGlyphAttrs@8 +NtGdiFONTOBJ_pvTrueTypeFontFile@8 +NtGdiFONTOBJ_cGetAllGlyphHandles@8 +NtGdiSTROBJ_bEnum@12 +NtGdiSTROBJ_bEnumPositionsOnly@12 +NtGdiSTROBJ_bGetAdvanceWidths@16 +NtGdiSTROBJ_vEnumStart@4 +NtGdiSTROBJ_dwGetCodePage@4 +NtGdiPATHOBJ_vGetBounds@8 +NtGdiPATHOBJ_bEnum@8 +NtGdiPATHOBJ_vEnumStart@4 +NtGdiPATHOBJ_vEnumStartClipLines@16 +NtGdiPATHOBJ_bEnumClipLines@12 +NtGdiGetDhpdev@4 +NtGdiEngCheckAbort@4 +NtGdiHT_Get8BPPFormatPalette@16 +NtGdiHT_Get8BPPMaskPalette@24 +NtGdiUpdateTransform@4 +NtGdiSetPUMPDOBJ@16 +NtGdiBRUSHOBJ_DeleteRbrush@8 +NtGdiUMPDEngFreeUserMem@4 +NtGdiDrawStream@12 +NtGdiMakeObjectXferable@8 +NtGdiMakeObjectUnXferable@4 diff --git a/rostests/apitests/w32kdll/w32kdll_2k3sp2/w32kdll_2k3sp2.rbuild b/rostests/apitests/w32kdll/w32kdll_2k3sp2/w32kdll_2k3sp2.rbuild index 5876d07b0e4..6ac4dcf8202 100644 --- a/rostests/apitests/w32kdll/w32kdll_2k3sp2/w32kdll_2k3sp2.rbuild +++ b/rostests/apitests/w32kdll/w32kdll_2k3sp2/w32kdll_2k3sp2.rbuild @@ -1,5 +1,10 @@ - - w32kdll_2k3sp2.S + + + w32kdll_2k3sp2-i386.S + + + w32kdll_2k3sp2-amd64.S + main.c diff --git a/rostests/apitests/w32kdll/w32kdll_ros/w32kdll_ros-amd64.def b/rostests/apitests/w32kdll/w32kdll_ros/w32kdll_ros-amd64.def new file mode 100644 index 00000000000..43c37d0f117 --- /dev/null +++ b/rostests/apitests/w32kdll/w32kdll_ros/w32kdll_ros-amd64.def @@ -0,0 +1,679 @@ +; $Id: w32kdll.def 27344 2007-08-01 14:12:10Z tkreuzer $ +; +; ReactOS Operating System +; +; This file contains all win32k native api functions from win xp +; unsupported functions are commented out. +; +LIBRARY w32kdll.dll + +EXPORTS +NtGdiAbortDoc +NtGdiAbortPath +NtGdiAddFontResourceW +NtGdiAddRemoteFontToDC +NtGdiAddFontMemResourceEx +NtGdiRemoveMergeFont +NtGdiAddRemoteMMInstanceToDC +NtGdiAlphaBlend +NtGdiAngleArc +NtGdiAnyLinkedFonts +NtGdiFontIsLinked +NtGdiArcInternal +NtGdiBeginPath +NtGdiBitBlt +NtGdiCancelDC +NtGdiCheckBitmapBits +NtGdiCloseFigure +NtGdiClearBitmapAttributes +NtGdiClearBrushAttributes +NtGdiColorCorrectPalette +NtGdiCombineRgn +NtGdiCombineTransform +NtGdiComputeXformCoefficients +NtGdiConsoleTextOut +NtGdiConvertMetafileRect +NtGdiCreateBitmap +NtGdiCreateClientObj +NtGdiCreateColorSpace +NtGdiCreateColorTransform +NtGdiCreateCompatibleBitmap +NtGdiCreateCompatibleDC +NtGdiCreateDIBBrush +NtGdiCreateDIBitmapInternal +NtGdiCreateDIBSection +NtGdiCreateEllipticRgn +NtGdiCreateHalftonePalette +NtGdiCreateHatchBrushInternal +NtGdiCreateMetafileDC +NtGdiCreatePaletteInternal +NtGdiCreatePatternBrushInternal +NtGdiCreatePen +NtGdiCreateRectRgn +NtGdiCreateRoundRectRgn +NtGdiCreateServerMetaFile +NtGdiCreateSolidBrush +NtGdiD3dContextCreate +NtGdiD3dContextDestroy +NtGdiD3dContextDestroyAll +NtGdiD3dValidateTextureStageState +NtGdiD3dDrawPrimitives2 +NtGdiDdGetDriverState +NtGdiDdAddAttachedSurface +NtGdiDdAlphaBlt +NtGdiDdAttachSurface +NtGdiDdBeginMoCompFrame +NtGdiDdBlt +NtGdiDdCanCreateSurface +NtGdiDdCanCreateD3DBuffer +NtGdiDdColorControl +NtGdiDdCreateDirectDrawObject +NtGdiDdCreateSurface +NtGdiDdCreateD3DBuffer +NtGdiDdCreateMoComp +NtGdiDdCreateSurfaceObject +NtGdiDdDeleteDirectDrawObject +NtGdiDdDeleteSurfaceObject +NtGdiDdDestroyMoComp +NtGdiDdDestroySurface +NtGdiDdDestroyD3DBuffer +NtGdiDdEndMoCompFrame +NtGdiDdFlip +NtGdiDdFlipToGDISurface +NtGdiDdGetAvailDriverMemory +NtGdiDdGetBltStatus +NtGdiDdGetDC +NtGdiDdGetDriverInfo +NtGdiDdGetDxHandle +NtGdiDdGetFlipStatus +NtGdiDdGetInternalMoCompInfo +NtGdiDdGetMoCompBuffInfo +NtGdiDdGetMoCompGuids +NtGdiDdGetMoCompFormats +NtGdiDdGetScanLine +NtGdiDdLock +NtGdiDdLockD3D +NtGdiDdQueryDirectDrawObject +NtGdiDdQueryMoCompStatus +NtGdiDdReenableDirectDrawObject +NtGdiDdReleaseDC +NtGdiDdRenderMoComp +NtGdiDdResetVisrgn +NtGdiDdSetColorKey +NtGdiDdSetExclusiveMode +NtGdiDdSetGammaRamp +NtGdiDdCreateSurfaceEx +NtGdiDdSetOverlayPosition +NtGdiDdUnattachSurface +NtGdiDdUnlock +NtGdiDdUnlockD3D +NtGdiDdUpdateOverlay +NtGdiDdWaitForVerticalBlank +NtGdiDvpCanCreateVideoPort +NtGdiDvpColorControl +NtGdiDvpCreateVideoPort +NtGdiDvpDestroyVideoPort +NtGdiDvpFlipVideoPort +NtGdiDvpGetVideoPortBandwidth +NtGdiDvpGetVideoPortField +NtGdiDvpGetVideoPortFlipStatus +NtGdiDvpGetVideoPortInputFormats +NtGdiDvpGetVideoPortLine +NtGdiDvpGetVideoPortOutputFormats +NtGdiDvpGetVideoPortConnectInfo +NtGdiDvpGetVideoSignalStatus +NtGdiDvpUpdateVideoPort +NtGdiDvpWaitForVideoPortSync +NtGdiDvpAcquireNotification +NtGdiDvpReleaseNotification +NtGdiDxgGenericThunk +NtGdiDeleteClientObj +NtGdiDeleteColorSpace +NtGdiDeleteColorTransform +NtGdiDeleteObjectApp +NtGdiDescribePixelFormat +NtGdiGetPerBandInfo +NtGdiDoBanding +NtGdiDoPalette +NtGdiDrawEscape +NtGdiEllipse +NtGdiEnableEudc +NtGdiEndDoc +NtGdiEndPage +NtGdiEndPath +NtGdiEnumFontChunk +NtGdiEnumFontClose +NtGdiEnumFontOpen +NtGdiEnumObjects +NtGdiEqualRgn +NtGdiEudcLoadUnloadLink +NtGdiExcludeClipRect +NtGdiExtCreatePen +NtGdiExtCreateRegion +NtGdiExtEscape +NtGdiExtFloodFill +NtGdiExtGetObjectW +NtGdiExtSelectClipRgn +NtGdiExtTextOutW +NtGdiFillPath +NtGdiFillRgn +NtGdiFlattenPath +NtGdiFlushUserBatch +NtGdiFlush +NtGdiForceUFIMapping +NtGdiFrameRgn +NtGdiFullscreenControl +NtGdiGetAndSetDCDword +NtGdiGetAppClipBox +NtGdiGetBitmapBits +NtGdiGetBitmapDimension +NtGdiGetBoundsRect +NtGdiGetCharABCWidthsW +NtGdiGetCharacterPlacementW +NtGdiGetCharSet +NtGdiGetCharWidthW +NtGdiGetCharWidthInfo +NtGdiGetColorAdjustment +NtGdiGetColorSpaceforBitmap +NtGdiGetDCDword +NtGdiGetDCforBitmap +NtGdiGetDCObject +NtGdiGetDCPoint +NtGdiGetDeviceCaps +NtGdiGetDeviceGammaRamp +NtGdiGetDeviceCapsAll +NtGdiGetDIBitsInternal +NtGdiGetETM +NtGdiGetEudcTimeStampEx +NtGdiGetFontData +NtGdiGetFontResourceInfoInternalW +NtGdiGetGlyphIndicesW +NtGdiGetGlyphIndicesWInternal +NtGdiGetGlyphOutline +NtGdiGetKerningPairs +NtGdiGetLinkedUFIs +NtGdiGetMiterLimit +NtGdiGetMonitorID +NtGdiGetNearestColor +NtGdiGetNearestPaletteIndex +NtGdiGetObjectBitmapHandle +NtGdiGetOutlineTextMetricsInternalW +NtGdiGetPath +NtGdiGetPixel +NtGdiGetRandomRgn +NtGdiGetRasterizerCaps +NtGdiGetRealizationInfo +NtGdiGetRegionData +NtGdiGetRgnBox +NtGdiGetServerMetaFileBits +NtGdiGetSpoolMessage +NtGdiGetStats +NtGdiGetStockObject +NtGdiGetStringBitmapW +NtGdiGetSystemPaletteUse +NtGdiGetTextCharsetInfo +NtGdiGetTextExtent +NtGdiGetTextExtentExW +NtGdiGetTextFaceW +NtGdiGetTextMetricsW +NtGdiGetTransform +NtGdiGetUFI +NtGdiGetEmbUFI +NtGdiGetUFIPathname +NtGdiGetEmbedFonts +NtGdiChangeGhostFont +NtGdiAddEmbFontToDC +NtGdiGetFontUnicodeRanges +NtGdiGetWidthTable +NtGdiGradientFill +NtGdiHfontCreate +NtGdiIcmBrushInfo +NtGdiInit +NtGdiInitSpool +NtGdiIntersectClipRect +NtGdiInvertRgn +NtGdiLineTo +NtGdiMakeFontDir +NtGdiMakeInfoDC +NtGdiMaskBlt +NtGdiModifyWorldTransform +NtGdiMonoBitmap +NtGdiMoveTo +NtGdiOffsetClipRgn +NtGdiOffsetRgn +NtGdiOpenDCW +NtGdiPatBlt +NtGdiPolyPatBlt +NtGdiPathToRegion +NtGdiPlgBlt +NtGdiPolyDraw +NtGdiPolyPolyDraw +NtGdiPolyTextOutW +NtGdiPtInRegion +NtGdiPtVisible +NtGdiQueryFonts +NtGdiQueryFontAssocInfo +NtGdiRectangle +NtGdiRectInRegion +NtGdiRectVisible +NtGdiRemoveFontResourceW +NtGdiRemoveFontMemResourceEx +NtGdiResetDC +NtGdiResizePalette +NtGdiRestoreDC +NtGdiRoundRect +NtGdiSaveDC +NtGdiScaleViewportExtEx +NtGdiScaleWindowExtEx +NtGdiSelectBitmap +NtGdiSelectBrush +NtGdiSelectClipPath +NtGdiSelectFont +NtGdiSelectPen +NtGdiSetBitmapAttributes +NtGdiSetBitmapBits +NtGdiSetBitmapDimension +NtGdiSetBoundsRect +NtGdiSetBrushAttributes +NtGdiSetBrushOrg +NtGdiSetColorAdjustment +NtGdiSetColorSpace +NtGdiSetDeviceGammaRamp +NtGdiSetDIBitsToDeviceInternal +NtGdiSetFontEnumeration +NtGdiSetFontXform +NtGdiSetIcmMode +NtGdiSetLinkedUFIs +NtGdiSetMagicColors +NtGdiSetMetaRgn +NtGdiSetMiterLimit +NtGdiGetDeviceWidth +NtGdiMirrorWindowOrg +NtGdiSetLayout +NtGdiSetPixel +NtGdiSetPixelFormat +NtGdiSetRectRgn +NtGdiSetSystemPaletteUse +NtGdiSetTextJustification +NtGdiSetupPublicCFONT +NtGdiSetVirtualResolution +NtGdiSetSizeDevice +NtGdiStartDoc +NtGdiStartPage +NtGdiStretchBlt +NtGdiStretchDIBitsInternal +NtGdiStrokeAndFillPath +NtGdiStrokePath +NtGdiSwapBuffers +NtGdiTransformPoints +NtGdiTransparentBlt +NtGdiUnloadPrinterDriver +NtGdiUnmapMemFont +NtGdiUnrealizeObject +NtGdiUpdateColors +NtGdiWidenPath +NtUserActivateKeyboardLayout +NtUserAlterWindowStyle +NtUserAssociateInputContext +NtUserAttachThreadInput +NtUserBeginPaint +NtUserBitBltSysBmp +NtUserBlockInput +NtUserBuildHimcList +NtUserBuildHwndList +NtUserBuildNameList +NtUserBuildPropList +NtUserCallHwnd +NtUserCallHwndLock +NtUserCallHwndOpt +NtUserCallHwndParam +NtUserCallHwndParamLock +NtUserCallMsgFilter +NtUserCallNextHookEx +NtUserCallNoParam +NtUserCallOneParam +NtUserCallTwoParam +NtUserChangeClipboardChain +NtUserChangeDisplaySettings +NtUserCheckImeHotKey +NtUserCheckMenuItem +NtUserChildWindowFromPointEx +NtUserClipCursor +NtUserCloseClipboard +NtUserCloseDesktop +NtUserCloseWindowStation +NtUserConsoleControl +NtUserConvertMemHandle +NtUserCopyAcceleratorTable +NtUserCountClipboardFormats +NtUserCreateAcceleratorTable +NtUserCreateCaret +NtUserCreateDesktop +NtUserCreateInputContext +NtUserCreateLocalMemHandle +NtUserCreateWindowEx +NtUserCreateWindowStation +NtUserDdeGetQualityOfService +NtUserDdeInitialize +NtUserDdeSetQualityOfService +NtUserDeferWindowPos +NtUserDefSetText +NtUserDeleteMenu +NtUserDestroyAcceleratorTable +NtUserDestroyCursor +NtUserDestroyInputContext +NtUserDestroyMenu +NtUserDestroyWindow +NtUserDisableThreadIme +NtUserDispatchMessage +NtUserDragDetect +NtUserDragObject +NtUserDrawAnimatedRects +NtUserDrawCaption +NtUserDrawCaptionTemp +NtUserDrawIconEx +NtUserDrawMenuBarTemp +NtUserEmptyClipboard +NtUserEnableMenuItem +NtUserEnableScrollBar +NtUserEndDeferWindowPosEx +NtUserEndMenu +NtUserEndPaint +NtUserEnumDisplayDevices +;NtUserEnumDisplayMonitors +NtUserEnumDisplaySettings +NtUserEvent +NtUserExcludeUpdateRgn +NtUserFillWindow +;NtUserFindExistingCursorIcon +NtUserFindWindowEx +NtUserFlashWindowEx +NtUserGetAltTabInfo +NtUserGetAncestor +;NtUserGetAppImeLevel +NtUserGetAsyncKeyState +NtUserGetAtomName +NtUserGetCaretBlinkTime +NtUserGetCaretPos +;NtUserGetClassInfo +NtUserGetClassName +NtUserGetClipboardData +NtUserGetClipboardFormatName +NtUserGetClipboardOwner +NtUserGetClipboardSequenceNumber +NtUserGetClipboardViewer +NtUserGetClipCursor +NtUserGetComboBoxInfo +NtUserGetControlBrush +NtUserGetControlColor +NtUserGetCPD +NtUserGetCursorFrameInfo +NtUserGetCursorInfo +NtUserGetDC +NtUserGetDCEx +NtUserGetDoubleClickTime +NtUserGetForegroundWindow +NtUserGetGuiResources +NtUserGetGUIThreadInfo +NtUserGetIconInfo +NtUserGetIconSize +NtUserGetImeHotKey +NtUserGetImeInfoEx +NtUserGetInternalWindowPos +NtUserGetKeyboardLayoutList +NtUserGetKeyboardLayoutName +NtUserGetKeyboardState +NtUserGetKeyNameText +NtUserGetKeyState +NtUserGetListBoxInfo +NtUserGetMenuBarInfo +NtUserGetMenuIndex +NtUserGetMenuItemRect +NtUserGetMessage +NtUserGetMouseMovePointsEx +NtUserGetObjectInformation +NtUserGetOpenClipboardWindow +NtUserGetPriorityClipboardFormat +NtUserGetProcessWindowStation +NtUserGetRawInputBuffer +NtUserGetRawInputData +NtUserGetRawInputDeviceInfo +NtUserGetRawInputDeviceList +NtUserGetRegisteredRawInputDevices +NtUserGetScrollBarInfo +NtUserGetSystemMenu +NtUserGetThreadDesktop +NtUserGetThreadState +NtUserGetTitleBarInfo +NtUserGetUpdateRect +NtUserGetUpdateRgn +NtUserGetWindowDC +NtUserGetWindowPlacement +NtUserGetWOWClass +NtUserHardErrorControl +NtUserHideCaret +NtUserHiliteMenuItem +NtUserImpersonateDdeClientWindow +NtUserInitialize +NtUserInitializeClientPfnArrays +;NtUserInitTask8 +NtUserInternalGetWindowText +NtUserInvalidateRect +NtUserInvalidateRgn +NtUserIsClipboardFormatAvailable +NtUserKillTimer +NtUserLoadKeyboardLayoutEx +NtUserLockWindowStation +NtUserLockWindowUpdate +NtUserLockWorkStation +NtUserMapVirtualKeyEx +NtUserMenuItemFromPoint +NtUserMessageCall +NtUserMinMaximize +NtUserMNDragLeave +NtUserMNDragOver +NtUserModifyUserStartupInfoFlags +NtUserMoveWindow +NtUserNotifyIMEStatus +NtUserNotifyProcessCreate +NtUserNotifyWinEvent +NtUserOpenClipboard +NtUserOpenDesktop +NtUserOpenInputDesktop +NtUserOpenWindowStation +NtUserPaintDesktop +NtUserPeekMessage +NtUserPostMessage +NtUserPostThreadMessage +NtUserPrintWindow +NtUserProcessConnect +NtUserQueryInformationThread +NtUserQueryInputContext +NtUserQuerySendMessage +NtUserQueryUserCounters +NtUserQueryWindow +NtUserRealChildWindowFromPoint +NtUserRealInternalGetMessage +NtUserRealWaitMessageEx +NtUserRedrawWindow +NtUserRegisterClassExWOW +NtUserRegisterUserApiHook +NtUserRegisterHotKey +NtUserRegisterRawInputDevices +NtUserRegisterTasklist +NtUserRegisterWindowMessage +NtUserRemoveMenu +NtUserRemoveProp +NtUserResolveDesktop +NtUserResolveDesktopForWOW +NtUserSBGetParms +NtUserScrollDC +NtUserScrollWindowEx +NtUserSelectPalette +NtUserSendInput +NtUserSetActiveWindow +NtUserSetAppImeLevel +NtUserSetCapture +NtUserSetClassLong +NtUserSetClassWord +NtUserSetClipboardData +NtUserSetClipboardViewer +NtUserSetConsoleReserveKeys +NtUserSetCursor +NtUserSetCursorContents +;NtUserSetCursorIconData +NtUserSetDbgTag +NtUserSetFocus +NtUserSetImeHotKey +NtUserSetImeInfoEx +NtUserSetImeOwnerWindow +NtUserSetInformationProcess +NtUserSetInformationThread +NtUserSetInternalWindowPos +NtUserSetKeyboardState +NtUserSetLogonNotifyWindow +NtUserSetMenu +NtUserSetMenuContextHelpId +NtUserSetMenuDefaultItem +NtUserSetMenuFlagRtoL +NtUserSetObjectInformation +NtUserSetParent +NtUserSetProcessWindowStation +NtUserSetProp +NtUserSetRipFlags +NtUserSetScrollInfo +NtUserSetShellWindowEx +NtUserSetSysColors +NtUserSetSystemCursor +NtUserSetSystemMenu +NtUserSetSystemTimer +NtUserSetThreadDesktop +NtUserSetThreadLayoutHandles +NtUserSetThreadState +NtUserSetTimer +NtUserSetWindowFNID +NtUserSetWindowLong +NtUserSetWindowPlacement +NtUserSetWindowPos +NtUserSetWindowRgn +NtUserSetWindowsHookAW +NtUserSetWindowsHookEx +NtUserSetWindowStationUser +NtUserSetWindowWord +NtUserSetWinEventHook +NtUserShowCaret +NtUserShowScrollBar +NtUserShowWindow +NtUserShowWindowAsync +NtUserSoundSentry +NtUserSwitchDesktop +NtUserSystemParametersInfo +NtUserTestForInteractiveUser +NtUserThunkedMenuInfo +NtUserThunkedMenuItemInfo +NtUserToUnicodeEx +NtUserTrackMouseEvent +NtUserTrackPopupMenuEx +NtUserCalcMenuBar +NtUserPaintMenuBar +NtUserTranslateAccelerator +NtUserTranslateMessage +NtUserUnhookWindowsHookEx +NtUserUnhookWinEvent +NtUserUnloadKeyboardLayout +NtUserUnlockWindowStation +;NtUserUnregisterClass +NtUserUnregisterUserApiHook +NtUserUnregisterHotKey +NtUserUpdateInputContext +NtUserUpdateInstance +NtUserUpdateLayeredWindow +NtUserGetLayeredWindowAttributes +NtUserSetLayeredWindowAttributes +NtUserUpdatePerUserSystemParameters +NtUserUserHandleGrantAccess +NtUserValidateHandleSecure +NtUserValidateRect +NtUserValidateTimerCallback +NtUserVkKeyScanEx +NtUserWaitForInputIdle +NtUserWaitForMsgAndEvent +NtUserWaitMessage +NtUserWin32PoolAllocationStats +NtUserWindowFromPoint +NtUserYieldTask +NtUserRemoteConnect +NtUserRemoteRedrawRectangle +NtUserRemoteRedrawScreen +NtUserRemoteStopScreenUpdates +NtUserCtxDisplayIOCtl +NtGdiEngAssociateSurface +NtGdiEngCreateBitmap +NtGdiEngCreateDeviceSurface +NtGdiEngCreateDeviceBitmap +NtGdiEngCreatePalette +NtGdiEngComputeGlyphSet +NtGdiEngCopyBits +NtGdiEngDeletePalette +NtGdiEngDeleteSurface +NtGdiEngEraseSurface +NtGdiEngUnlockSurface +NtGdiEngLockSurface +NtGdiEngBitBlt +NtGdiEngStretchBlt +NtGdiEngPlgBlt +NtGdiEngMarkBandingSurface +NtGdiEngStrokePath +NtGdiEngFillPath +NtGdiEngStrokeAndFillPath +NtGdiEngPaint +NtGdiEngLineTo +NtGdiEngAlphaBlend +NtGdiEngGradientFill +NtGdiEngTransparentBlt +NtGdiEngTextOut +NtGdiEngStretchBltROP +NtGdiXLATEOBJ_cGetPalette +NtGdiXLATEOBJ_iXlate +NtGdiXLATEOBJ_hGetColorTransform +NtGdiCLIPOBJ_bEnum +NtGdiCLIPOBJ_cEnumStart +NtGdiCLIPOBJ_ppoGetPath +NtGdiEngDeletePath +NtGdiEngCreateClip +NtGdiEngDeleteClip +NtGdiBRUSHOBJ_ulGetBrushColor +NtGdiBRUSHOBJ_pvAllocRbrush +NtGdiBRUSHOBJ_pvGetRbrush +NtGdiBRUSHOBJ_hGetColorTransform +NtGdiXFORMOBJ_bApplyXform +NtGdiXFORMOBJ_iGetXform +NtGdiFONTOBJ_vGetInfo +NtGdiFONTOBJ_pxoGetXform +NtGdiFONTOBJ_cGetGlyphs +NtGdiFONTOBJ_pifi +NtGdiFONTOBJ_pfdg +NtGdiFONTOBJ_pQueryGlyphAttrs +NtGdiFONTOBJ_pvTrueTypeFontFile +NtGdiFONTOBJ_cGetAllGlyphHandles +NtGdiSTROBJ_bEnum +NtGdiSTROBJ_bEnumPositionsOnly +NtGdiSTROBJ_bGetAdvanceWidths +NtGdiSTROBJ_vEnumStart +NtGdiSTROBJ_dwGetCodePage +NtGdiPATHOBJ_vGetBounds +NtGdiPATHOBJ_bEnum +NtGdiPATHOBJ_vEnumStart +NtGdiPATHOBJ_vEnumStartClipLines +NtGdiPATHOBJ_bEnumClipLines +NtGdiGetDhpdev +NtGdiEngCheckAbort +NtGdiHT_Get8BPPFormatPalette +NtGdiHT_Get8BPPMaskPalette +NtGdiUpdateTransform +NtGdiSetPUMPDOBJ +NtGdiBRUSHOBJ_DeleteRbrush +NtGdiUMPDEngFreeUserMem +NtGdiUnmapMemFont +NtGdiDrawStream + diff --git a/rostests/apitests/w32kdll/w32kdll_ros/w32kdll_ros.def b/rostests/apitests/w32kdll/w32kdll_ros/w32kdll_ros-i386.def similarity index 100% rename from rostests/apitests/w32kdll/w32kdll_ros/w32kdll_ros.def rename to rostests/apitests/w32kdll/w32kdll_ros/w32kdll_ros-i386.def diff --git a/rostests/apitests/w32kdll/w32kdll_ros/w32kdll_ros.rbuild b/rostests/apitests/w32kdll/w32kdll_ros/w32kdll_ros.rbuild index b81ecad236c..60a30773a72 100644 --- a/rostests/apitests/w32kdll/w32kdll_ros/w32kdll_ros.rbuild +++ b/rostests/apitests/w32kdll/w32kdll_ros/w32kdll_ros.rbuild @@ -1,5 +1,5 @@ - + win32ksys main.c diff --git a/rostests/apitests/w32kdll/w32kdll_vista/w32kdll_vista-amd64.S b/rostests/apitests/w32kdll/w32kdll_vista/w32kdll_vista-amd64.S new file mode 100644 index 00000000000..7a84b72d4d9 --- /dev/null +++ b/rostests/apitests/w32kdll/w32kdll_vista/w32kdll_vista-amd64.S @@ -0,0 +1,4854 @@ +/* FILE: System Call Stubs for Native API + * COPYRIGHT: See COPYING in the top level directory + * PURPOSE: obj-amd64\lib\win32ksys\win32k.S + * PROGRAMMER: Computer Generated File. See tools/nci/ncitool.c + * REMARK: DO NOT EDIT OR COMMIT MODIFICATIONS TO THIS FILE + */ + + +#include + +.global _NtGdiAbortDoc +_NtGdiAbortDoc: + movl $0x1000, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiAbortPath +_NtGdiAbortPath: + movl $0x1001, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiAddFontResourceW +_NtGdiAddFontResourceW: + movl $0x1002, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtGdiAddRemoteFontToDC +_NtGdiAddRemoteFontToDC: + movl $0x1003, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiAddFontMemResourceEx +_NtGdiAddFontMemResourceEx: + movl $0x1004, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtGdiRemoveMergeFont +_NtGdiRemoveMergeFont: + movl $0x1005, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiAddRemoteMMInstanceToDC +_NtGdiAddRemoteMMInstanceToDC: + movl $0x1006, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiAlphaBlend +_NtGdiAlphaBlend: + movl $0x1007, %eax + movq %rcx, %r10 + syscall + ret $0x30 + +.global _NtGdiAngleArc +_NtGdiAngleArc: + movl $0x1008, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtGdiAnyLinkedFonts +_NtGdiAnyLinkedFonts: + movl $0x1009, %eax + movq %rcx, %r10 + syscall + ret $0x0 + +.global _NtGdiFontIsLinked +_NtGdiFontIsLinked: + movl $0x100a, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiArcInternal +_NtGdiArcInternal: + movl $0x100b, %eax + movq %rcx, %r10 + syscall + ret $0x28 + +.global _NtGdiBeginPath +_NtGdiBeginPath: + movl $0x100c, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiBitBlt +_NtGdiBitBlt: + movl $0x100d, %eax + movq %rcx, %r10 + syscall + ret $0x2c + +.global _NtGdiCancelDC +_NtGdiCancelDC: + movl $0x100e, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiCheckBitmapBits +_NtGdiCheckBitmapBits: + movl $0x100f, %eax + movq %rcx, %r10 + syscall + ret $0x20 + +.global _NtGdiCloseFigure +_NtGdiCloseFigure: + movl $0x1010, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiClearBitmapAttributes +_NtGdiClearBitmapAttributes: + movl $0x1011, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiClearBrushAttributes +_NtGdiClearBrushAttributes: + movl $0x1012, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiColorCorrectPalette +_NtGdiColorCorrectPalette: + movl $0x1013, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtGdiCombineRgn +_NtGdiCombineRgn: + movl $0x1014, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiCombineTransform +_NtGdiCombineTransform: + movl $0x1015, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiComputeXformCoefficients +_NtGdiComputeXformCoefficients: + movl $0x1016, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiConsoleTextOut +_NtGdiConsoleTextOut: + movl $0x1017, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiConvertMetafileRect +_NtGdiConvertMetafileRect: + movl $0x1018, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiCreateBitmap +_NtGdiCreateBitmap: + movl $0x1019, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtGdiCreateClientObj +_NtGdiCreateClientObj: + movl $0x101a, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiCreateColorSpace +_NtGdiCreateColorSpace: + movl $0x101b, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiCreateColorTransform +_NtGdiCreateColorTransform: + movl $0x101c, %eax + movq %rcx, %r10 + syscall + ret $0x20 + +.global _NtGdiCreateCompatibleBitmap +_NtGdiCreateCompatibleBitmap: + movl $0x101d, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiCreateCompatibleDC +_NtGdiCreateCompatibleDC: + movl $0x101e, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiCreateDIBBrush +_NtGdiCreateDIBBrush: + movl $0x101f, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtGdiCreateDIBitmapInternal +_NtGdiCreateDIBitmapInternal: + movl $0x1020, %eax + movq %rcx, %r10 + syscall + ret $0x2c + +.global _NtGdiCreateDIBSection +_NtGdiCreateDIBSection: + movl $0x1021, %eax + movq %rcx, %r10 + syscall + ret $0x24 + +.global _NtGdiCreateEllipticRgn +_NtGdiCreateEllipticRgn: + movl $0x1022, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiCreateHalftonePalette +_NtGdiCreateHalftonePalette: + movl $0x1023, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiCreateHatchBrushInternal +_NtGdiCreateHatchBrushInternal: + movl $0x1024, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiCreateMetafileDC +_NtGdiCreateMetafileDC: + movl $0x1025, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiCreatePaletteInternal +_NtGdiCreatePaletteInternal: + movl $0x1026, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiCreatePatternBrushInternal +_NtGdiCreatePatternBrushInternal: + movl $0x1027, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiCreatePen +_NtGdiCreatePen: + movl $0x1028, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiCreateRectRgn +_NtGdiCreateRectRgn: + movl $0x1029, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiCreateRoundRectRgn +_NtGdiCreateRoundRectRgn: + movl $0x102a, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtGdiCreateServerMetaFile +_NtGdiCreateServerMetaFile: + movl $0x102b, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtGdiCreateSolidBrush +_NtGdiCreateSolidBrush: + movl $0x102c, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiD3dContextCreate +_NtGdiD3dContextCreate: + movl $0x102d, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiD3dContextDestroy +_NtGdiD3dContextDestroy: + movl $0x102e, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiD3dContextDestroyAll +_NtGdiD3dContextDestroyAll: + movl $0x102f, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiD3dValidateTextureStageState +_NtGdiD3dValidateTextureStageState: + movl $0x1030, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiD3dDrawPrimitives2 +_NtGdiD3dDrawPrimitives2: + movl $0x1031, %eax + movq %rcx, %r10 + syscall + ret $0x1c + +.global _NtGdiDdGetDriverState +_NtGdiDdGetDriverState: + movl $0x1032, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiDdAddAttachedSurface +_NtGdiDdAddAttachedSurface: + movl $0x1033, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiDdAlphaBlt +_NtGdiDdAlphaBlt: + movl $0x1034, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiDdAttachSurface +_NtGdiDdAttachSurface: + movl $0x1035, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDdBeginMoCompFrame +_NtGdiDdBeginMoCompFrame: + movl $0x1036, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDdBlt +_NtGdiDdBlt: + movl $0x1037, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiDdCanCreateSurface +_NtGdiDdCanCreateSurface: + movl $0x1038, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDdCanCreateD3DBuffer +_NtGdiDdCanCreateD3DBuffer: + movl $0x1039, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDdColorControl +_NtGdiDdColorControl: + movl $0x103a, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDdCreateDirectDrawObject +_NtGdiDdCreateDirectDrawObject: + movl $0x103b, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiDdCreateSurface +_NtGdiDdCreateSurface: + movl $0x103c, %eax + movq %rcx, %r10 + syscall + ret $0x20 + +.global _NtGdiDdCreateD3DBuffer +_NtGdiDdCreateD3DBuffer: + movl $0x103d, %eax + movq %rcx, %r10 + syscall + ret $0x20 + +.global _NtGdiDdCreateMoComp +_NtGdiDdCreateMoComp: + movl $0x103e, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDdCreateSurfaceObject +_NtGdiDdCreateSurfaceObject: + movl $0x103f, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtGdiDdDeleteDirectDrawObject +_NtGdiDdDeleteDirectDrawObject: + movl $0x1040, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiDdDeleteSurfaceObject +_NtGdiDdDeleteSurfaceObject: + movl $0x1041, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiDdDestroyMoComp +_NtGdiDdDestroyMoComp: + movl $0x1042, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDdDestroySurface +_NtGdiDdDestroySurface: + movl $0x1043, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDdDestroyD3DBuffer +_NtGdiDdDestroyD3DBuffer: + movl $0x1044, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiDdEndMoCompFrame +_NtGdiDdEndMoCompFrame: + movl $0x1045, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDdFlip +_NtGdiDdFlip: + movl $0x1046, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtGdiDdFlipToGDISurface +_NtGdiDdFlipToGDISurface: + movl $0x1047, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDdGetAvailDriverMemory +_NtGdiDdGetAvailDriverMemory: + movl $0x1048, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDdGetBltStatus +_NtGdiDdGetBltStatus: + movl $0x1049, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDdGetDC +_NtGdiDdGetDC: + movl $0x104a, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDdGetDriverInfo +_NtGdiDdGetDriverInfo: + movl $0x104b, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDdGetDxHandle +_NtGdiDdGetDxHandle: + movl $0x104c, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiDdGetFlipStatus +_NtGdiDdGetFlipStatus: + movl $0x104d, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDdGetInternalMoCompInfo +_NtGdiDdGetInternalMoCompInfo: + movl $0x104e, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDdGetMoCompBuffInfo +_NtGdiDdGetMoCompBuffInfo: + movl $0x104f, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDdGetMoCompGuids +_NtGdiDdGetMoCompGuids: + movl $0x1050, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDdGetMoCompFormats +_NtGdiDdGetMoCompFormats: + movl $0x1051, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDdGetScanLine +_NtGdiDdGetScanLine: + movl $0x1052, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDdLock +_NtGdiDdLock: + movl $0x1053, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiDdLockD3D +_NtGdiDdLockD3D: + movl $0x1054, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDdQueryDirectDrawObject +_NtGdiDdQueryDirectDrawObject: + movl $0x1055, %eax + movq %rcx, %r10 + syscall + ret $0x2c + +.global _NtGdiDdQueryMoCompStatus +_NtGdiDdQueryMoCompStatus: + movl $0x1056, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDdReenableDirectDrawObject +_NtGdiDdReenableDirectDrawObject: + movl $0x1057, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDdReleaseDC +_NtGdiDdReleaseDC: + movl $0x1058, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiDdRenderMoComp +_NtGdiDdRenderMoComp: + movl $0x1059, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDdResetVisrgn +_NtGdiDdResetVisrgn: + movl $0x105a, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDdSetColorKey +_NtGdiDdSetColorKey: + movl $0x105b, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDdSetExclusiveMode +_NtGdiDdSetExclusiveMode: + movl $0x105c, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDdSetGammaRamp +_NtGdiDdSetGammaRamp: + movl $0x105d, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiDdCreateSurfaceEx +_NtGdiDdCreateSurfaceEx: + movl $0x105e, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiDdSetOverlayPosition +_NtGdiDdSetOverlayPosition: + movl $0x105f, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiDdUnattachSurface +_NtGdiDdUnattachSurface: + movl $0x1060, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDdUnlock +_NtGdiDdUnlock: + movl $0x1061, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDdUnlockD3D +_NtGdiDdUnlockD3D: + movl $0x1062, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDdUpdateOverlay +_NtGdiDdUpdateOverlay: + movl $0x1063, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiDdWaitForVerticalBlank +_NtGdiDdWaitForVerticalBlank: + movl $0x1064, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDvpCanCreateVideoPort +_NtGdiDvpCanCreateVideoPort: + movl $0x1065, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDvpColorControl +_NtGdiDvpColorControl: + movl $0x1066, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDvpCreateVideoPort +_NtGdiDvpCreateVideoPort: + movl $0x1067, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDvpDestroyVideoPort +_NtGdiDvpDestroyVideoPort: + movl $0x1068, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDvpFlipVideoPort +_NtGdiDvpFlipVideoPort: + movl $0x1069, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiDvpGetVideoPortBandwidth +_NtGdiDvpGetVideoPortBandwidth: + movl $0x106a, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDvpGetVideoPortField +_NtGdiDvpGetVideoPortField: + movl $0x106b, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDvpGetVideoPortFlipStatus +_NtGdiDvpGetVideoPortFlipStatus: + movl $0x106c, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDvpGetVideoPortInputFormats +_NtGdiDvpGetVideoPortInputFormats: + movl $0x106d, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDvpGetVideoPortLine +_NtGdiDvpGetVideoPortLine: + movl $0x106e, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDvpGetVideoPortOutputFormats +_NtGdiDvpGetVideoPortOutputFormats: + movl $0x106f, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDvpGetVideoPortConnectInfo +_NtGdiDvpGetVideoPortConnectInfo: + movl $0x1070, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDvpGetVideoSignalStatus +_NtGdiDvpGetVideoSignalStatus: + movl $0x1071, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDvpUpdateVideoPort +_NtGdiDvpUpdateVideoPort: + movl $0x1072, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiDvpWaitForVideoPortSync +_NtGdiDvpWaitForVideoPortSync: + movl $0x1073, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDvpAcquireNotification +_NtGdiDvpAcquireNotification: + movl $0x1074, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiDvpReleaseNotification +_NtGdiDvpReleaseNotification: + movl $0x1075, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDxgGenericThunk +_NtGdiDxgGenericThunk: + movl $0x1076, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtGdiDeleteClientObj +_NtGdiDeleteClientObj: + movl $0x1077, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiDeleteColorSpace +_NtGdiDeleteColorSpace: + movl $0x1078, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiDeleteColorTransform +_NtGdiDeleteColorTransform: + movl $0x1079, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDeleteObjectApp +_NtGdiDeleteObjectApp: + movl $0x107a, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiDescribePixelFormat +_NtGdiDescribePixelFormat: + movl $0x107b, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiGetPerBandInfo +_NtGdiGetPerBandInfo: + movl $0x107c, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiDoBanding +_NtGdiDoBanding: + movl $0x107d, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiDoPalette +_NtGdiDoPalette: + movl $0x107e, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtGdiDrawEscape +_NtGdiDrawEscape: + movl $0x107f, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiEllipse +_NtGdiEllipse: + movl $0x1080, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtGdiEnableEudc +_NtGdiEnableEudc: + movl $0x1081, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiEndDoc +_NtGdiEndDoc: + movl $0x1082, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiEndPage +_NtGdiEndPage: + movl $0x1083, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiEndPath +_NtGdiEndPath: + movl $0x1084, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiEnumFontChunk +_NtGdiEnumFontChunk: + movl $0x1085, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtGdiEnumFontClose +_NtGdiEnumFontClose: + movl $0x1086, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiEnumFontOpen +_NtGdiEnumFontOpen: + movl $0x1087, %eax + movq %rcx, %r10 + syscall + ret $0x1c + +.global _NtGdiEnumObjects +_NtGdiEnumObjects: + movl $0x1088, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiEqualRgn +_NtGdiEqualRgn: + movl $0x1089, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiEudcLoadUnloadLink +_NtGdiEudcLoadUnloadLink: + movl $0x108a, %eax + movq %rcx, %r10 + syscall + ret $0x1c + +.global _NtGdiExcludeClipRect +_NtGdiExcludeClipRect: + movl $0x108b, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtGdiExtCreatePen +_NtGdiExtCreatePen: + movl $0x108c, %eax + movq %rcx, %r10 + syscall + ret $0x2c + +.global _NtGdiExtCreateRegion +_NtGdiExtCreateRegion: + movl $0x108d, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiExtEscape +_NtGdiExtEscape: + movl $0x108e, %eax + movq %rcx, %r10 + syscall + ret $0x20 + +.global _NtGdiExtFloodFill +_NtGdiExtFloodFill: + movl $0x108f, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtGdiExtGetObjectW +_NtGdiExtGetObjectW: + movl $0x1090, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiExtSelectClipRgn +_NtGdiExtSelectClipRgn: + movl $0x1091, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiExtTextOutW +_NtGdiExtTextOutW: + movl $0x1092, %eax + movq %rcx, %r10 + syscall + ret $0x24 + +.global _NtGdiFillPath +_NtGdiFillPath: + movl $0x1093, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiFillRgn +_NtGdiFillRgn: + movl $0x1094, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiFlattenPath +_NtGdiFlattenPath: + movl $0x1095, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiFlushUserBatch +_NtGdiFlushUserBatch: + movl $0x1096, %eax + movq %rcx, %r10 + syscall + ret $0x0 + +.global _NtGdiFlush +_NtGdiFlush: + movl $0x1097, %eax + movq %rcx, %r10 + syscall + ret $0x0 + +.global _NtGdiForceUFIMapping +_NtGdiForceUFIMapping: + movl $0x1098, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiFrameRgn +_NtGdiFrameRgn: + movl $0x1099, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtGdiFullscreenControl +_NtGdiFullscreenControl: + movl $0x109a, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtGdiGetAndSetDCDword +_NtGdiGetAndSetDCDword: + movl $0x109b, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiGetAppClipBox +_NtGdiGetAppClipBox: + movl $0x109c, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiGetBitmapBits +_NtGdiGetBitmapBits: + movl $0x109d, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiGetBitmapDimension +_NtGdiGetBitmapDimension: + movl $0x109e, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiGetBoundsRect +_NtGdiGetBoundsRect: + movl $0x109f, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiGetCharABCWidthsW +_NtGdiGetCharABCWidthsW: + movl $0x10a0, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtGdiGetCharacterPlacementW +_NtGdiGetCharacterPlacementW: + movl $0x10a1, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtGdiGetCharSet +_NtGdiGetCharSet: + movl $0x10a2, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiGetCharWidthW +_NtGdiGetCharWidthW: + movl $0x10a3, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtGdiGetCharWidthInfo +_NtGdiGetCharWidthInfo: + movl $0x10a4, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiGetColorAdjustment +_NtGdiGetColorAdjustment: + movl $0x10a5, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiGetColorSpaceforBitmap +_NtGdiGetColorSpaceforBitmap: + movl $0x10a6, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiGetDCDword +_NtGdiGetDCDword: + movl $0x10a7, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiGetDCforBitmap +_NtGdiGetDCforBitmap: + movl $0x10a8, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiGetDCObject +_NtGdiGetDCObject: + movl $0x10a9, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiGetDCPoint +_NtGdiGetDCPoint: + movl $0x10aa, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiGetDeviceCaps +_NtGdiGetDeviceCaps: + movl $0x10ab, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiGetDeviceGammaRamp +_NtGdiGetDeviceGammaRamp: + movl $0x10ac, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiGetDeviceCapsAll +_NtGdiGetDeviceCapsAll: + movl $0x10ad, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiGetDIBitsInternal +_NtGdiGetDIBitsInternal: + movl $0x10ae, %eax + movq %rcx, %r10 + syscall + ret $0x24 + +.global _NtGdiGetETM +_NtGdiGetETM: + movl $0x10af, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiGetEudcTimeStampEx +_NtGdiGetEudcTimeStampEx: + movl $0x10b0, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiGetFontData +_NtGdiGetFontData: + movl $0x10b1, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtGdiGetFontResourceInfoInternalW +_NtGdiGetFontResourceInfoInternalW: + movl $0x10b2, %eax + movq %rcx, %r10 + syscall + ret $0x1c + +.global _NtGdiGetGlyphIndicesW +_NtGdiGetGlyphIndicesW: + movl $0x10b3, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtGdiGetGlyphIndicesWInternal +_NtGdiGetGlyphIndicesWInternal: + movl $0x10b4, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtGdiGetGlyphOutline +_NtGdiGetGlyphOutline: + movl $0x10b5, %eax + movq %rcx, %r10 + syscall + ret $0x20 + +.global _NtGdiGetKerningPairs +_NtGdiGetKerningPairs: + movl $0x10b6, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiGetLinkedUFIs +_NtGdiGetLinkedUFIs: + movl $0x10b7, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiGetMiterLimit +_NtGdiGetMiterLimit: + movl $0x10b8, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiGetMonitorID +_NtGdiGetMonitorID: + movl $0x10b9, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiGetNearestColor +_NtGdiGetNearestColor: + movl $0x10ba, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiGetNearestPaletteIndex +_NtGdiGetNearestPaletteIndex: + movl $0x10bb, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiGetObjectBitmapHandle +_NtGdiGetObjectBitmapHandle: + movl $0x10bc, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiGetOutlineTextMetricsInternalW +_NtGdiGetOutlineTextMetricsInternalW: + movl $0x10bd, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiGetPath +_NtGdiGetPath: + movl $0x10be, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiGetPixel +_NtGdiGetPixel: + movl $0x10bf, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiGetRandomRgn +_NtGdiGetRandomRgn: + movl $0x10c0, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiGetRasterizerCaps +_NtGdiGetRasterizerCaps: + movl $0x10c1, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiGetRealizationInfo +_NtGdiGetRealizationInfo: + movl $0x10c2, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiGetRegionData +_NtGdiGetRegionData: + movl $0x10c3, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiGetRgnBox +_NtGdiGetRgnBox: + movl $0x10c4, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiGetServerMetaFileBits +_NtGdiGetServerMetaFileBits: + movl $0x10c5, %eax + movq %rcx, %r10 + syscall + ret $0x1c + +.global _NtGdiGetSpoolMessage +_NtGdiGetSpoolMessage: + movl $0x10c6, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiGetStats +_NtGdiGetStats: + movl $0x10c7, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtGdiGetStockObject +_NtGdiGetStockObject: + movl $0x10c8, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiGetStringBitmapW +_NtGdiGetStringBitmapW: + movl $0x10c9, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtGdiGetSystemPaletteUse +_NtGdiGetSystemPaletteUse: + movl $0x10ca, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiGetTextCharsetInfo +_NtGdiGetTextCharsetInfo: + movl $0x10cb, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiGetTextExtent +_NtGdiGetTextExtent: + movl $0x10cc, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtGdiGetTextExtentExW +_NtGdiGetTextExtentExW: + movl $0x10cd, %eax + movq %rcx, %r10 + syscall + ret $0x20 + +.global _NtGdiGetTextFaceW +_NtGdiGetTextFaceW: + movl $0x10ce, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiGetTextMetricsW +_NtGdiGetTextMetricsW: + movl $0x10cf, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiGetTransform +_NtGdiGetTransform: + movl $0x10d0, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiGetUFI +_NtGdiGetUFI: + movl $0x10d1, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtGdiGetEmbUFI +_NtGdiGetEmbUFI: + movl $0x10d2, %eax + movq %rcx, %r10 + syscall + ret $0x1c + +.global _NtGdiGetUFIPathname +_NtGdiGetUFIPathname: + movl $0x10d3, %eax + movq %rcx, %r10 + syscall + ret $0x28 + +.global _NtGdiGetEmbedFonts +_NtGdiGetEmbedFonts: + movl $0x10d4, %eax + movq %rcx, %r10 + syscall + ret $0x0 + +.global _NtGdiChangeGhostFont +_NtGdiChangeGhostFont: + movl $0x10d5, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiAddEmbFontToDC +_NtGdiAddEmbFontToDC: + movl $0x10d6, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiGetFontUnicodeRanges +_NtGdiGetFontUnicodeRanges: + movl $0x10d7, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiGetWidthTable +_NtGdiGetWidthTable: + movl $0x10d8, %eax + movq %rcx, %r10 + syscall + ret $0x1c + +.global _NtGdiGradientFill +_NtGdiGradientFill: + movl $0x10d9, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtGdiHfontCreate +_NtGdiHfontCreate: + movl $0x10da, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtGdiIcmBrushInfo +_NtGdiIcmBrushInfo: + movl $0x10db, %eax + movq %rcx, %r10 + syscall + ret $0x20 + +.global _NtGdiInit +_NtGdiInit: + movl $0x10dc, %eax + movq %rcx, %r10 + syscall + ret $0x0 + +.global _NtGdiInitSpool +_NtGdiInitSpool: + movl $0x10dd, %eax + movq %rcx, %r10 + syscall + ret $0x0 + +.global _NtGdiIntersectClipRect +_NtGdiIntersectClipRect: + movl $0x10de, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtGdiInvertRgn +_NtGdiInvertRgn: + movl $0x10df, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiLineTo +_NtGdiLineTo: + movl $0x10e0, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiMakeFontDir +_NtGdiMakeFontDir: + movl $0x10e1, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtGdiMakeInfoDC +_NtGdiMakeInfoDC: + movl $0x10e2, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiMaskBlt +_NtGdiMaskBlt: + movl $0x10e3, %eax + movq %rcx, %r10 + syscall + ret $0x34 + +.global _NtGdiModifyWorldTransform +_NtGdiModifyWorldTransform: + movl $0x10e4, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiMonoBitmap +_NtGdiMonoBitmap: + movl $0x10e5, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiMoveTo +_NtGdiMoveTo: + movl $0x10e6, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiOffsetClipRgn +_NtGdiOffsetClipRgn: + movl $0x10e7, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiOffsetRgn +_NtGdiOffsetRgn: + movl $0x10e8, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiOpenDCW +_NtGdiOpenDCW: + movl $0x10e9, %eax + movq %rcx, %r10 + syscall + ret $0x20 + +.global _NtGdiPatBlt +_NtGdiPatBlt: + movl $0x10ea, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtGdiPolyPatBlt +_NtGdiPolyPatBlt: + movl $0x10eb, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtGdiPathToRegion +_NtGdiPathToRegion: + movl $0x10ec, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiPlgBlt +_NtGdiPlgBlt: + movl $0x10ed, %eax + movq %rcx, %r10 + syscall + ret $0x2c + +.global _NtGdiPolyDraw +_NtGdiPolyDraw: + movl $0x10ee, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiPolyPolyDraw +_NtGdiPolyPolyDraw: + movl $0x10ef, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtGdiPolyTextOutW +_NtGdiPolyTextOutW: + movl $0x10f0, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiPtInRegion +_NtGdiPtInRegion: + movl $0x10f1, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiPtVisible +_NtGdiPtVisible: + movl $0x10f2, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiQueryFonts +_NtGdiQueryFonts: + movl $0x10f3, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiQueryFontAssocInfo +_NtGdiQueryFontAssocInfo: + movl $0x10f4, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiRectangle +_NtGdiRectangle: + movl $0x10f5, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtGdiRectInRegion +_NtGdiRectInRegion: + movl $0x10f6, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiRectVisible +_NtGdiRectVisible: + movl $0x10f7, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiRemoveFontResourceW +_NtGdiRemoveFontResourceW: + movl $0x10f8, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtGdiRemoveFontMemResourceEx +_NtGdiRemoveFontMemResourceEx: + movl $0x10f9, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiResetDC +_NtGdiResetDC: + movl $0x10fa, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtGdiResizePalette +_NtGdiResizePalette: + movl $0x10fb, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiRestoreDC +_NtGdiRestoreDC: + movl $0x10fc, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiRoundRect +_NtGdiRoundRect: + movl $0x10fd, %eax + movq %rcx, %r10 + syscall + ret $0x1c + +.global _NtGdiSaveDC +_NtGdiSaveDC: + movl $0x10fe, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiScaleViewportExtEx +_NtGdiScaleViewportExtEx: + movl $0x10ff, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtGdiScaleWindowExtEx +_NtGdiScaleWindowExtEx: + movl $0x1100, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtGdiSelectBitmap +_NtGdiSelectBitmap: + movl $0x1101, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiSelectBrush +_NtGdiSelectBrush: + movl $0x1102, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiSelectClipPath +_NtGdiSelectClipPath: + movl $0x1103, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiSelectFont +_NtGdiSelectFont: + movl $0x1104, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiSelectPen +_NtGdiSelectPen: + movl $0x1105, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiSetBitmapAttributes +_NtGdiSetBitmapAttributes: + movl $0x1106, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiSetBitmapBits +_NtGdiSetBitmapBits: + movl $0x1107, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiSetBitmapDimension +_NtGdiSetBitmapDimension: + movl $0x1108, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiSetBoundsRect +_NtGdiSetBoundsRect: + movl $0x1109, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiSetBrushAttributes +_NtGdiSetBrushAttributes: + movl $0x110a, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiSetBrushOrg +_NtGdiSetBrushOrg: + movl $0x110b, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiSetColorAdjustment +_NtGdiSetColorAdjustment: + movl $0x110c, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiSetColorSpace +_NtGdiSetColorSpace: + movl $0x110d, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiSetDeviceGammaRamp +_NtGdiSetDeviceGammaRamp: + movl $0x110e, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiSetDIBitsToDeviceInternal +_NtGdiSetDIBitsToDeviceInternal: + movl $0x110f, %eax + movq %rcx, %r10 + syscall + ret $0x40 + +.global _NtGdiSetFontEnumeration +_NtGdiSetFontEnumeration: + movl $0x1110, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiSetFontXform +_NtGdiSetFontXform: + movl $0x1111, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiSetIcmMode +_NtGdiSetIcmMode: + movl $0x1112, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiSetLinkedUFIs +_NtGdiSetLinkedUFIs: + movl $0x1113, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiSetMagicColors +_NtGdiSetMagicColors: + movl $0x1114, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiSetMetaRgn +_NtGdiSetMetaRgn: + movl $0x1115, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiSetMiterLimit +_NtGdiSetMiterLimit: + movl $0x1116, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiGetDeviceWidth +_NtGdiGetDeviceWidth: + movl $0x1117, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiMirrorWindowOrg +_NtGdiMirrorWindowOrg: + movl $0x1118, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiSetLayout +_NtGdiSetLayout: + movl $0x1119, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiSetPixel +_NtGdiSetPixel: + movl $0x111a, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiSetPixelFormat +_NtGdiSetPixelFormat: + movl $0x111b, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiSetRectRgn +_NtGdiSetRectRgn: + movl $0x111c, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtGdiSetSystemPaletteUse +_NtGdiSetSystemPaletteUse: + movl $0x111d, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiSetTextJustification +_NtGdiSetTextJustification: + movl $0x111e, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiSetupPublicCFONT +_NtGdiSetupPublicCFONT: + movl $0x111f, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiSetVirtualResolution +_NtGdiSetVirtualResolution: + movl $0x1120, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtGdiSetSizeDevice +_NtGdiSetSizeDevice: + movl $0x1121, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiStartDoc +_NtGdiStartDoc: + movl $0x1122, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiStartPage +_NtGdiStartPage: + movl $0x1123, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiStretchBlt +_NtGdiStretchBlt: + movl $0x1124, %eax + movq %rcx, %r10 + syscall + ret $0x30 + +.global _NtGdiStretchDIBitsInternal +_NtGdiStretchDIBitsInternal: + movl $0x1125, %eax + movq %rcx, %r10 + syscall + ret $0x40 + +.global _NtGdiStrokeAndFillPath +_NtGdiStrokeAndFillPath: + movl $0x1126, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiStrokePath +_NtGdiStrokePath: + movl $0x1127, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiSwapBuffers +_NtGdiSwapBuffers: + movl $0x1128, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiTransformPoints +_NtGdiTransformPoints: + movl $0x1129, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtGdiTransparentBlt +_NtGdiTransparentBlt: + movl $0x112a, %eax + movq %rcx, %r10 + syscall + ret $0x2c + +.global _NtGdiUnloadPrinterDriver +_NtGdiUnloadPrinterDriver: + movl $0x112b, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiUnmapMemFont +_NtGdiUnmapMemFont: + movl $0x112c, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiUnrealizeObject +_NtGdiUnrealizeObject: + movl $0x112d, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiUpdateColors +_NtGdiUpdateColors: + movl $0x112e, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiWidenPath +_NtGdiWidenPath: + movl $0x112f, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserActivateKeyboardLayout +_NtUserActivateKeyboardLayout: + movl $0x1130, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserAlterWindowStyle +_NtUserAlterWindowStyle: + movl $0x1131, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserAssociateInputContext +_NtUserAssociateInputContext: + movl $0x1132, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserAttachThreadInput +_NtUserAttachThreadInput: + movl $0x1133, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserBeginPaint +_NtUserBeginPaint: + movl $0x1134, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserBitBltSysBmp +_NtUserBitBltSysBmp: + movl $0x1135, %eax + movq %rcx, %r10 + syscall + ret $0x20 + +.global _NtUserBlockInput +_NtUserBlockInput: + movl $0x1136, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserBuildHimcList +_NtUserBuildHimcList: + movl $0x1137, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserBuildHwndList +_NtUserBuildHwndList: + movl $0x1138, %eax + movq %rcx, %r10 + syscall + ret $0x1c + +.global _NtUserBuildNameList +_NtUserBuildNameList: + movl $0x1139, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserBuildPropList +_NtUserBuildPropList: + movl $0x113a, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserCallHwnd +_NtUserCallHwnd: + movl $0x113b, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserCallHwndLock +_NtUserCallHwndLock: + movl $0x113c, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserCallHwndOpt +_NtUserCallHwndOpt: + movl $0x113d, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserCallHwndParam +_NtUserCallHwndParam: + movl $0x113e, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserCallHwndParamLock +_NtUserCallHwndParamLock: + movl $0x113f, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserCallMsgFilter +_NtUserCallMsgFilter: + movl $0x1140, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserCallNextHookEx +_NtUserCallNextHookEx: + movl $0x1141, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserCallNoParam +_NtUserCallNoParam: + movl $0x1142, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserCallOneParam +_NtUserCallOneParam: + movl $0x1143, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserCallTwoParam +_NtUserCallTwoParam: + movl $0x1144, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserChangeClipboardChain +_NtUserChangeClipboardChain: + movl $0x1145, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserChangeDisplaySettings +_NtUserChangeDisplaySettings: + movl $0x1146, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtUserCheckImeHotKey +_NtUserCheckImeHotKey: + movl $0x1147, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserCheckMenuItem +_NtUserCheckMenuItem: + movl $0x1148, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserChildWindowFromPointEx +_NtUserChildWindowFromPointEx: + movl $0x1149, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserClipCursor +_NtUserClipCursor: + movl $0x114a, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserCloseClipboard +_NtUserCloseClipboard: + movl $0x114b, %eax + movq %rcx, %r10 + syscall + ret $0x0 + +.global _NtUserCloseDesktop +_NtUserCloseDesktop: + movl $0x114c, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserCloseWindowStation +_NtUserCloseWindowStation: + movl $0x114d, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserConsoleControl +_NtUserConsoleControl: + movl $0x114e, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserConvertMemHandle +_NtUserConvertMemHandle: + movl $0x114f, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserCopyAcceleratorTable +_NtUserCopyAcceleratorTable: + movl $0x1150, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserCountClipboardFormats +_NtUserCountClipboardFormats: + movl $0x1151, %eax + movq %rcx, %r10 + syscall + ret $0x0 + +.global _NtUserCreateAcceleratorTable +_NtUserCreateAcceleratorTable: + movl $0x1152, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserCreateCaret +_NtUserCreateCaret: + movl $0x1153, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserCreateDesktop +_NtUserCreateDesktop: + movl $0x1154, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtUserCreateInputContext +_NtUserCreateInputContext: + movl $0x1155, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserCreateLocalMemHandle +_NtUserCreateLocalMemHandle: + movl $0x1156, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserCreateWindowEx +_NtUserCreateWindowEx: + movl $0x1157, %eax + movq %rcx, %r10 + syscall + ret $0x3c + +.global _NtUserCreateWindowStation +_NtUserCreateWindowStation: + movl $0x1158, %eax + movq %rcx, %r10 + syscall + ret $0x1c + +.global _NtUserDdeGetQualityOfService +_NtUserDdeGetQualityOfService: + movl $0x1159, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserDdeInitialize +_NtUserDdeInitialize: + movl $0x115a, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtUserDdeSetQualityOfService +_NtUserDdeSetQualityOfService: + movl $0x115b, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserDeferWindowPos +_NtUserDeferWindowPos: + movl $0x115c, %eax + movq %rcx, %r10 + syscall + ret $0x20 + +.global _NtUserDefSetText +_NtUserDefSetText: + movl $0x115d, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserDeleteMenu +_NtUserDeleteMenu: + movl $0x115e, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserDestroyAcceleratorTable +_NtUserDestroyAcceleratorTable: + movl $0x115f, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserDestroyCursor +_NtUserDestroyCursor: + movl $0x1160, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserDestroyInputContext +_NtUserDestroyInputContext: + movl $0x1161, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserDestroyMenu +_NtUserDestroyMenu: + movl $0x1162, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserDestroyWindow +_NtUserDestroyWindow: + movl $0x1163, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserDisableThreadIme +_NtUserDisableThreadIme: + movl $0x1164, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserDispatchMessage +_NtUserDispatchMessage: + movl $0x1165, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserDragDetect +_NtUserDragDetect: + movl $0x1166, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserDragObject +_NtUserDragObject: + movl $0x1167, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtUserDrawAnimatedRects +_NtUserDrawAnimatedRects: + movl $0x1168, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserDrawCaption +_NtUserDrawCaption: + movl $0x1169, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserDrawCaptionTemp +_NtUserDrawCaptionTemp: + movl $0x116a, %eax + movq %rcx, %r10 + syscall + ret $0x1c + +.global _NtUserDrawIconEx +_NtUserDrawIconEx: + movl $0x116b, %eax + movq %rcx, %r10 + syscall + ret $0x2c + +.global _NtUserDrawMenuBarTemp +_NtUserDrawMenuBarTemp: + movl $0x116c, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtUserEmptyClipboard +_NtUserEmptyClipboard: + movl $0x116d, %eax + movq %rcx, %r10 + syscall + ret $0x0 + +.global _NtUserEnableMenuItem +_NtUserEnableMenuItem: + movl $0x116e, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserEnableScrollBar +_NtUserEnableScrollBar: + movl $0x116f, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserEndDeferWindowPosEx +_NtUserEndDeferWindowPosEx: + movl $0x1170, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserEndMenu +_NtUserEndMenu: + movl $0x1171, %eax + movq %rcx, %r10 + syscall + ret $0x0 + +.global _NtUserEndPaint +_NtUserEndPaint: + movl $0x1172, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserEnumDisplayDevices +_NtUserEnumDisplayDevices: + movl $0x1173, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserEnumDisplayMonitors +_NtUserEnumDisplayMonitors: + movl $0x1174, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtUserEnumDisplaySettings +_NtUserEnumDisplaySettings: + movl $0x1175, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserEvent +_NtUserEvent: + movl $0x1176, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserExcludeUpdateRgn +_NtUserExcludeUpdateRgn: + movl $0x1177, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserFillWindow +_NtUserFillWindow: + movl $0x1178, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserFindExistingCursorIcon +_NtUserFindExistingCursorIcon: + movl $0x1179, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserFindWindowEx +_NtUserFindWindowEx: + movl $0x117a, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtUserFlashWindowEx +_NtUserFlashWindowEx: + movl $0x117b, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserGetAltTabInfo +_NtUserGetAltTabInfo: + movl $0x117c, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtUserGetAncestor +_NtUserGetAncestor: + movl $0x117d, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserGetAppImeLevel +_NtUserGetAppImeLevel: + movl $0x117e, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserGetAsyncKeyState +_NtUserGetAsyncKeyState: + movl $0x117f, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserGetAtomName +_NtUserGetAtomName: + movl $0x1180, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserGetCaretBlinkTime +_NtUserGetCaretBlinkTime: + movl $0x1181, %eax + movq %rcx, %r10 + syscall + ret $0x0 + +.global _NtUserGetCaretPos +_NtUserGetCaretPos: + movl $0x1182, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserGetClassInfo +_NtUserGetClassInfo: + movl $0x1183, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtUserGetClassName +_NtUserGetClassName: + movl $0x1184, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserGetClipboardData +_NtUserGetClipboardData: + movl $0x1185, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserGetClipboardFormatName +_NtUserGetClipboardFormatName: + movl $0x1186, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserGetClipboardOwner +_NtUserGetClipboardOwner: + movl $0x1187, %eax + movq %rcx, %r10 + syscall + ret $0x0 + +.global _NtUserGetClipboardSequenceNumber +_NtUserGetClipboardSequenceNumber: + movl $0x1188, %eax + movq %rcx, %r10 + syscall + ret $0x0 + +.global _NtUserGetClipboardViewer +_NtUserGetClipboardViewer: + movl $0x1189, %eax + movq %rcx, %r10 + syscall + ret $0x0 + +.global _NtUserGetClipCursor +_NtUserGetClipCursor: + movl $0x118a, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserGetComboBoxInfo +_NtUserGetComboBoxInfo: + movl $0x118b, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserGetControlBrush +_NtUserGetControlBrush: + movl $0x118c, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserGetControlColor +_NtUserGetControlColor: + movl $0x118d, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserGetCPD +_NtUserGetCPD: + movl $0x118e, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserGetCursorFrameInfo +_NtUserGetCursorFrameInfo: + movl $0x118f, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserGetCursorInfo +_NtUserGetCursorInfo: + movl $0x1190, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserGetDC +_NtUserGetDC: + movl $0x1191, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserGetDCEx +_NtUserGetDCEx: + movl $0x1192, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserGetDoubleClickTime +_NtUserGetDoubleClickTime: + movl $0x1193, %eax + movq %rcx, %r10 + syscall + ret $0x0 + +.global _NtUserGetForegroundWindow +_NtUserGetForegroundWindow: + movl $0x1194, %eax + movq %rcx, %r10 + syscall + ret $0x0 + +.global _NtUserGetGuiResources +_NtUserGetGuiResources: + movl $0x1195, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserGetGUIThreadInfo +_NtUserGetGUIThreadInfo: + movl $0x1196, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserGetIconInfo +_NtUserGetIconInfo: + movl $0x1197, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtUserGetIconSize +_NtUserGetIconSize: + movl $0x1198, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserGetImeHotKey +_NtUserGetImeHotKey: + movl $0x1199, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserGetImeInfoEx +_NtUserGetImeInfoEx: + movl $0x119a, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserGetInternalWindowPos +_NtUserGetInternalWindowPos: + movl $0x119b, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserGetKeyboardLayoutList +_NtUserGetKeyboardLayoutList: + movl $0x119c, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserGetKeyboardLayoutName +_NtUserGetKeyboardLayoutName: + movl $0x119d, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserGetKeyboardState +_NtUserGetKeyboardState: + movl $0x119e, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserGetKeyNameText +_NtUserGetKeyNameText: + movl $0x119f, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserGetKeyState +_NtUserGetKeyState: + movl $0x11a0, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserGetListBoxInfo +_NtUserGetListBoxInfo: + movl $0x11a1, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserGetMenuBarInfo +_NtUserGetMenuBarInfo: + movl $0x11a2, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserGetMenuIndex +_NtUserGetMenuIndex: + movl $0x11a3, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserGetMenuItemRect +_NtUserGetMenuItemRect: + movl $0x11a4, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserGetMessage +_NtUserGetMessage: + movl $0x11a5, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserGetMouseMovePointsEx +_NtUserGetMouseMovePointsEx: + movl $0x11a6, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtUserGetObjectInformation +_NtUserGetObjectInformation: + movl $0x11a7, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtUserGetOpenClipboardWindow +_NtUserGetOpenClipboardWindow: + movl $0x11a8, %eax + movq %rcx, %r10 + syscall + ret $0x0 + +.global _NtUserGetPriorityClipboardFormat +_NtUserGetPriorityClipboardFormat: + movl $0x11a9, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserGetProcessWindowStation +_NtUserGetProcessWindowStation: + movl $0x11aa, %eax + movq %rcx, %r10 + syscall + ret $0x0 + +.global _NtUserGetRawInputBuffer +_NtUserGetRawInputBuffer: + movl $0x11ab, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserGetRawInputData +_NtUserGetRawInputData: + movl $0x11ac, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtUserGetRawInputDeviceInfo +_NtUserGetRawInputDeviceInfo: + movl $0x11ad, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserGetRawInputDeviceList +_NtUserGetRawInputDeviceList: + movl $0x11ae, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserGetRegisteredRawInputDevices +_NtUserGetRegisteredRawInputDevices: + movl $0x11af, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserGetScrollBarInfo +_NtUserGetScrollBarInfo: + movl $0x11b0, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserGetSystemMenu +_NtUserGetSystemMenu: + movl $0x11b1, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserGetThreadDesktop +_NtUserGetThreadDesktop: + movl $0x11b2, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserGetThreadState +_NtUserGetThreadState: + movl $0x11b3, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserGetTitleBarInfo +_NtUserGetTitleBarInfo: + movl $0x11b4, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserGetUpdateRect +_NtUserGetUpdateRect: + movl $0x11b5, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserGetUpdateRgn +_NtUserGetUpdateRgn: + movl $0x11b6, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserGetWindowDC +_NtUserGetWindowDC: + movl $0x11b7, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserGetWindowPlacement +_NtUserGetWindowPlacement: + movl $0x11b8, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserGetWOWClass +_NtUserGetWOWClass: + movl $0x11b9, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserHardErrorControl +_NtUserHardErrorControl: + movl $0x11ba, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserHideCaret +_NtUserHideCaret: + movl $0x11bb, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserHiliteMenuItem +_NtUserHiliteMenuItem: + movl $0x11bc, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserImpersonateDdeClientWindow +_NtUserImpersonateDdeClientWindow: + movl $0x11bd, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserInitialize +_NtUserInitialize: + movl $0x11be, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserInitializeClientPfnArrays +_NtUserInitializeClientPfnArrays: + movl $0x11bf, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserInitTask +_NtUserInitTask: + movl $0x11c0, %eax + movq %rcx, %r10 + syscall + ret $0x30 + +.global _NtUserInternalGetWindowText +_NtUserInternalGetWindowText: + movl $0x11c1, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserInvalidateRect +_NtUserInvalidateRect: + movl $0x11c2, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserInvalidateRgn +_NtUserInvalidateRgn: + movl $0x11c3, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserIsClipboardFormatAvailable +_NtUserIsClipboardFormatAvailable: + movl $0x11c4, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserKillTimer +_NtUserKillTimer: + movl $0x11c5, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserLoadKeyboardLayoutEx +_NtUserLoadKeyboardLayoutEx: + movl $0x11c6, %eax + movq %rcx, %r10 + syscall + ret $0x1c + +.global _NtUserLockWindowStation +_NtUserLockWindowStation: + movl $0x11c7, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserLockWindowUpdate +_NtUserLockWindowUpdate: + movl $0x11c8, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserLockWorkStation +_NtUserLockWorkStation: + movl $0x11c9, %eax + movq %rcx, %r10 + syscall + ret $0x0 + +.global _NtUserMapVirtualKeyEx +_NtUserMapVirtualKeyEx: + movl $0x11ca, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserMenuItemFromPoint +_NtUserMenuItemFromPoint: + movl $0x11cb, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserMessageCall +_NtUserMessageCall: + movl $0x11cc, %eax + movq %rcx, %r10 + syscall + ret $0x1c + +.global _NtUserMinMaximize +_NtUserMinMaximize: + movl $0x11cd, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserMNDragLeave +_NtUserMNDragLeave: + movl $0x11ce, %eax + movq %rcx, %r10 + syscall + ret $0x0 + +.global _NtUserMNDragOver +_NtUserMNDragOver: + movl $0x11cf, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserModifyUserStartupInfoFlags +_NtUserModifyUserStartupInfoFlags: + movl $0x11d0, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserMoveWindow +_NtUserMoveWindow: + movl $0x11d1, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtUserNotifyIMEStatus +_NtUserNotifyIMEStatus: + movl $0x11d2, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserNotifyProcessCreate +_NtUserNotifyProcessCreate: + movl $0x11d3, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserNotifyWinEvent +_NtUserNotifyWinEvent: + movl $0x11d4, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserOpenClipboard +_NtUserOpenClipboard: + movl $0x11d5, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserOpenDesktop +_NtUserOpenDesktop: + movl $0x11d6, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserOpenInputDesktop +_NtUserOpenInputDesktop: + movl $0x11d7, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserOpenWindowStation +_NtUserOpenWindowStation: + movl $0x11d8, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserPaintDesktop +_NtUserPaintDesktop: + movl $0x11d9, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserPeekMessage +_NtUserPeekMessage: + movl $0x11da, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtUserPostMessage +_NtUserPostMessage: + movl $0x11db, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserPostThreadMessage +_NtUserPostThreadMessage: + movl $0x11dc, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserPrintWindow +_NtUserPrintWindow: + movl $0x11dd, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserProcessConnect +_NtUserProcessConnect: + movl $0x11de, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserQueryInformationThread +_NtUserQueryInformationThread: + movl $0x11df, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtUserQueryInputContext +_NtUserQueryInputContext: + movl $0x11e0, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserQuerySendMessage +_NtUserQuerySendMessage: + movl $0x11e1, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserQueryUserCounters +_NtUserQueryUserCounters: + movl $0x11e2, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtUserQueryWindow +_NtUserQueryWindow: + movl $0x11e3, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserRealChildWindowFromPoint +_NtUserRealChildWindowFromPoint: + movl $0x11e4, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserRealInternalGetMessage +_NtUserRealInternalGetMessage: + movl $0x11e5, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtUserRealWaitMessageEx +_NtUserRealWaitMessageEx: + movl $0x11e6, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserRedrawWindow +_NtUserRedrawWindow: + movl $0x11e7, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserRegisterClassExWOW +_NtUserRegisterClassExWOW: + movl $0x11e8, %eax + movq %rcx, %r10 + syscall + ret $0x1c + +.global _NtUserRegisterUserApiHook +_NtUserRegisterUserApiHook: + movl $0x11e9, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserRegisterHotKey +_NtUserRegisterHotKey: + movl $0x11ea, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserRegisterRawInputDevices +_NtUserRegisterRawInputDevices: + movl $0x11eb, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserRegisterTasklist +_NtUserRegisterTasklist: + movl $0x11ec, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserRegisterWindowMessage +_NtUserRegisterWindowMessage: + movl $0x11ed, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserRemoveMenu +_NtUserRemoveMenu: + movl $0x11ee, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserRemoveProp +_NtUserRemoveProp: + movl $0x11ef, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserResolveDesktop +_NtUserResolveDesktop: + movl $0x11f0, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserResolveDesktopForWOW +_NtUserResolveDesktopForWOW: + movl $0x11f1, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserSBGetParms +_NtUserSBGetParms: + movl $0x11f2, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserScrollDC +_NtUserScrollDC: + movl $0x11f3, %eax + movq %rcx, %r10 + syscall + ret $0x1c + +.global _NtUserScrollWindowEx +_NtUserScrollWindowEx: + movl $0x11f4, %eax + movq %rcx, %r10 + syscall + ret $0x20 + +.global _NtUserSelectPalette +_NtUserSelectPalette: + movl $0x11f5, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserSendInput +_NtUserSendInput: + movl $0x11f6, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserSetActiveWindow +_NtUserSetActiveWindow: + movl $0x11f7, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserSetAppImeLevel +_NtUserSetAppImeLevel: + movl $0x11f8, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserSetCapture +_NtUserSetCapture: + movl $0x11f9, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserSetClassLong +_NtUserSetClassLong: + movl $0x11fa, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserSetClassWord +_NtUserSetClassWord: + movl $0x11fb, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserSetClipboardData +_NtUserSetClipboardData: + movl $0x11fc, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserSetClipboardViewer +_NtUserSetClipboardViewer: + movl $0x11fd, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserSetConsoleReserveKeys +_NtUserSetConsoleReserveKeys: + movl $0x11fe, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserSetCursor +_NtUserSetCursor: + movl $0x11ff, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserSetCursorContents +_NtUserSetCursorContents: + movl $0x1200, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserSetCursorIconData +_NtUserSetCursorIconData: + movl $0x1201, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtUserSetDbgTag +_NtUserSetDbgTag: + movl $0x1202, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserSetFocus +_NtUserSetFocus: + movl $0x1203, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserSetImeHotKey +_NtUserSetImeHotKey: + movl $0x1204, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtUserSetImeInfoEx +_NtUserSetImeInfoEx: + movl $0x1205, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserSetImeOwnerWindow +_NtUserSetImeOwnerWindow: + movl $0x1206, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserSetInformationProcess +_NtUserSetInformationProcess: + movl $0x1207, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserSetInformationThread +_NtUserSetInformationThread: + movl $0x1208, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserSetInternalWindowPos +_NtUserSetInternalWindowPos: + movl $0x1209, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserSetKeyboardState +_NtUserSetKeyboardState: + movl $0x120a, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserSetLogonNotifyWindow +_NtUserSetLogonNotifyWindow: + movl $0x120b, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserSetMenu +_NtUserSetMenu: + movl $0x120c, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserSetMenuContextHelpId +_NtUserSetMenuContextHelpId: + movl $0x120d, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserSetMenuDefaultItem +_NtUserSetMenuDefaultItem: + movl $0x120e, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserSetMenuFlagRtoL +_NtUserSetMenuFlagRtoL: + movl $0x120f, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserSetObjectInformation +_NtUserSetObjectInformation: + movl $0x1210, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserSetParent +_NtUserSetParent: + movl $0x1211, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserSetProcessWindowStation +_NtUserSetProcessWindowStation: + movl $0x1212, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserSetProp +_NtUserSetProp: + movl $0x1213, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserSetRipFlags +_NtUserSetRipFlags: + movl $0x1214, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserSetScrollInfo +_NtUserSetScrollInfo: + movl $0x1215, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserSetShellWindowEx +_NtUserSetShellWindowEx: + movl $0x1216, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserSetSysColors +_NtUserSetSysColors: + movl $0x1217, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserSetSystemCursor +_NtUserSetSystemCursor: + movl $0x1218, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserSetSystemMenu +_NtUserSetSystemMenu: + movl $0x1219, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserSetSystemTimer +_NtUserSetSystemTimer: + movl $0x121a, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserSetThreadDesktop +_NtUserSetThreadDesktop: + movl $0x121b, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserSetThreadLayoutHandles +_NtUserSetThreadLayoutHandles: + movl $0x121c, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserSetThreadState +_NtUserSetThreadState: + movl $0x121d, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserSetTimer +_NtUserSetTimer: + movl $0x121e, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserSetWindowFNID +_NtUserSetWindowFNID: + movl $0x121f, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserSetWindowLong +_NtUserSetWindowLong: + movl $0x1220, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserSetWindowPlacement +_NtUserSetWindowPlacement: + movl $0x1221, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserSetWindowPos +_NtUserSetWindowPos: + movl $0x1222, %eax + movq %rcx, %r10 + syscall + ret $0x1c + +.global _NtUserSetWindowRgn +_NtUserSetWindowRgn: + movl $0x1223, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserSetWindowsHookAW +_NtUserSetWindowsHookAW: + movl $0x1224, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserSetWindowsHookEx +_NtUserSetWindowsHookEx: + movl $0x1225, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtUserSetWindowStationUser +_NtUserSetWindowStationUser: + movl $0x1226, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserSetWindowWord +_NtUserSetWindowWord: + movl $0x1227, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserSetWinEventHook +_NtUserSetWinEventHook: + movl $0x1228, %eax + movq %rcx, %r10 + syscall + ret $0x20 + +.global _NtUserShowCaret +_NtUserShowCaret: + movl $0x1229, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserShowScrollBar +_NtUserShowScrollBar: + movl $0x122a, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserShowWindow +_NtUserShowWindow: + movl $0x122b, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserShowWindowAsync +_NtUserShowWindowAsync: + movl $0x122c, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserSoundSentry +_NtUserSoundSentry: + movl $0x122d, %eax + movq %rcx, %r10 + syscall + ret $0x0 + +.global _NtUserSwitchDesktop +_NtUserSwitchDesktop: + movl $0x122e, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserSystemParametersInfo +_NtUserSystemParametersInfo: + movl $0x122f, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserTestForInteractiveUser +_NtUserTestForInteractiveUser: + movl $0x1230, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserThunkedMenuInfo +_NtUserThunkedMenuInfo: + movl $0x1231, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserThunkedMenuItemInfo +_NtUserThunkedMenuItemInfo: + movl $0x1232, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtUserToUnicodeEx +_NtUserToUnicodeEx: + movl $0x1233, %eax + movq %rcx, %r10 + syscall + ret $0x1c + +.global _NtUserTrackMouseEvent +_NtUserTrackMouseEvent: + movl $0x1234, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserTrackPopupMenuEx +_NtUserTrackPopupMenuEx: + movl $0x1235, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtUserCalcMenuBar +_NtUserCalcMenuBar: + movl $0x1236, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtUserPaintMenuBar +_NtUserPaintMenuBar: + movl $0x1237, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtUserTranslateAccelerator +_NtUserTranslateAccelerator: + movl $0x1238, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserTranslateMessage +_NtUserTranslateMessage: + movl $0x1239, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserUnhookWindowsHookEx +_NtUserUnhookWindowsHookEx: + movl $0x123a, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserUnhookWinEvent +_NtUserUnhookWinEvent: + movl $0x123b, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserUnloadKeyboardLayout +_NtUserUnloadKeyboardLayout: + movl $0x123c, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserUnlockWindowStation +_NtUserUnlockWindowStation: + movl $0x123d, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserUnregisterClass +_NtUserUnregisterClass: + movl $0x123e, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserUnregisterUserApiHook +_NtUserUnregisterUserApiHook: + movl $0x123f, %eax + movq %rcx, %r10 + syscall + ret $0x0 + +.global _NtUserUnregisterHotKey +_NtUserUnregisterHotKey: + movl $0x1240, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserUpdateInputContext +_NtUserUpdateInputContext: + movl $0x1241, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserUpdateInstance +_NtUserUpdateInstance: + movl $0x1242, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserUpdateLayeredWindow +_NtUserUpdateLayeredWindow: + movl $0x1243, %eax + movq %rcx, %r10 + syscall + ret $0x28 + +.global _NtUserGetLayeredWindowAttributes +_NtUserGetLayeredWindowAttributes: + movl $0x1244, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserSetLayeredWindowAttributes +_NtUserSetLayeredWindowAttributes: + movl $0x1245, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserUpdatePerUserSystemParameters +_NtUserUpdatePerUserSystemParameters: + movl $0x1246, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserUserHandleGrantAccess +_NtUserUserHandleGrantAccess: + movl $0x1247, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserValidateHandleSecure +_NtUserValidateHandleSecure: + movl $0x1248, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserValidateRect +_NtUserValidateRect: + movl $0x1249, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserValidateTimerCallback +_NtUserValidateTimerCallback: + movl $0x124a, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserVkKeyScanEx +_NtUserVkKeyScanEx: + movl $0x124b, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserWaitForInputIdle +_NtUserWaitForInputIdle: + movl $0x124c, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserWaitForMsgAndEvent +_NtUserWaitForMsgAndEvent: + movl $0x124d, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserWaitMessage +_NtUserWaitMessage: + movl $0x124e, %eax + movq %rcx, %r10 + syscall + ret $0x0 + +.global _NtUserWin32PoolAllocationStats +_NtUserWin32PoolAllocationStats: + movl $0x124f, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtUserWindowFromPhysicalPoint +_NtUserWindowFromPhysicalPoint: + movl $0x1250, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserWindowFromPoint +_NtUserWindowFromPoint: + movl $0x1251, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserYieldTask +_NtUserYieldTask: + movl $0x1252, %eax + movq %rcx, %r10 + syscall + ret $0x0 + +.global _NtUserRemoteConnect +_NtUserRemoteConnect: + movl $0x1253, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserRemoteRedrawRectangle +_NtUserRemoteRedrawRectangle: + movl $0x1254, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserRemoteRedrawScreen +_NtUserRemoteRedrawScreen: + movl $0x1255, %eax + movq %rcx, %r10 + syscall + ret $0x0 + +.global _NtUserRemoteStopScreenUpdates +_NtUserRemoteStopScreenUpdates: + movl $0x1256, %eax + movq %rcx, %r10 + syscall + ret $0x0 + +.global _NtUserCtxDisplayIOCtl +_NtUserCtxDisplayIOCtl: + movl $0x1257, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiEngAssociateSurface +_NtGdiEngAssociateSurface: + movl $0x1258, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiEngCreateBitmap +_NtGdiEngCreateBitmap: + movl $0x1259, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtGdiEngCreateDeviceSurface +_NtGdiEngCreateDeviceSurface: + movl $0x125a, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiEngCreateDeviceBitmap +_NtGdiEngCreateDeviceBitmap: + movl $0x125b, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiEngCreatePalette +_NtGdiEngCreatePalette: + movl $0x125c, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtGdiEngComputeGlyphSet +_NtGdiEngComputeGlyphSet: + movl $0x125d, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiEngCopyBits +_NtGdiEngCopyBits: + movl $0x125e, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtGdiEngDeletePalette +_NtGdiEngDeletePalette: + movl $0x125f, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiEngDeleteSurface +_NtGdiEngDeleteSurface: + movl $0x1260, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiEngEraseSurface +_NtGdiEngEraseSurface: + movl $0x1261, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiEngUnlockSurface +_NtGdiEngUnlockSurface: + movl $0x1262, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiEngLockSurface +_NtGdiEngLockSurface: + movl $0x1263, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiEngBitBlt +_NtGdiEngBitBlt: + movl $0x1264, %eax + movq %rcx, %r10 + syscall + ret $0x2c + +.global _NtGdiEngStretchBlt +_NtGdiEngStretchBlt: + movl $0x1265, %eax + movq %rcx, %r10 + syscall + ret $0x2c + +.global _NtGdiEngPlgBlt +_NtGdiEngPlgBlt: + movl $0x1266, %eax + movq %rcx, %r10 + syscall + ret $0x2c + +.global _NtGdiEngMarkBandingSurface +_NtGdiEngMarkBandingSurface: + movl $0x1267, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiEngStrokePath +_NtGdiEngStrokePath: + movl $0x1268, %eax + movq %rcx, %r10 + syscall + ret $0x20 + +.global _NtGdiEngFillPath +_NtGdiEngFillPath: + movl $0x1269, %eax + movq %rcx, %r10 + syscall + ret $0x1c + +.global _NtGdiEngStrokeAndFillPath +_NtGdiEngStrokeAndFillPath: + movl $0x126a, %eax + movq %rcx, %r10 + syscall + ret $0x28 + +.global _NtGdiEngPaint +_NtGdiEngPaint: + movl $0x126b, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtGdiEngLineTo +_NtGdiEngLineTo: + movl $0x126c, %eax + movq %rcx, %r10 + syscall + ret $0x24 + +.global _NtGdiEngAlphaBlend +_NtGdiEngAlphaBlend: + movl $0x126d, %eax + movq %rcx, %r10 + syscall + ret $0x1c + +.global _NtGdiEngGradientFill +_NtGdiEngGradientFill: + movl $0x126e, %eax + movq %rcx, %r10 + syscall + ret $0x28 + +.global _NtGdiEngTransparentBlt +_NtGdiEngTransparentBlt: + movl $0x126f, %eax + movq %rcx, %r10 + syscall + ret $0x20 + +.global _NtGdiEngTextOut +_NtGdiEngTextOut: + movl $0x1270, %eax + movq %rcx, %r10 + syscall + ret $0x28 + +.global _NtGdiEngStretchBltROP +_NtGdiEngStretchBltROP: + movl $0x1271, %eax + movq %rcx, %r10 + syscall + ret $0x34 + +.global _NtGdiXLATEOBJ_cGetPalette +_NtGdiXLATEOBJ_cGetPalette: + movl $0x1272, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiXLATEOBJ_iXlate +_NtGdiXLATEOBJ_iXlate: + movl $0x1273, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiXLATEOBJ_hGetColorTransform +_NtGdiXLATEOBJ_hGetColorTransform: + movl $0x1274, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiCLIPOBJ_bEnum +_NtGdiCLIPOBJ_bEnum: + movl $0x1275, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiCLIPOBJ_cEnumStart +_NtGdiCLIPOBJ_cEnumStart: + movl $0x1276, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtGdiCLIPOBJ_ppoGetPath +_NtGdiCLIPOBJ_ppoGetPath: + movl $0x1277, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiEngDeletePath +_NtGdiEngDeletePath: + movl $0x1278, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiEngCreateClip +_NtGdiEngCreateClip: + movl $0x1279, %eax + movq %rcx, %r10 + syscall + ret $0x0 + +.global _NtGdiEngDeleteClip +_NtGdiEngDeleteClip: + movl $0x127a, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiBRUSHOBJ_ulGetBrushColor +_NtGdiBRUSHOBJ_ulGetBrushColor: + movl $0x127b, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiBRUSHOBJ_pvAllocRbrush +_NtGdiBRUSHOBJ_pvAllocRbrush: + movl $0x127c, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiBRUSHOBJ_pvGetRbrush +_NtGdiBRUSHOBJ_pvGetRbrush: + movl $0x127d, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiBRUSHOBJ_hGetColorTransform +_NtGdiBRUSHOBJ_hGetColorTransform: + movl $0x127e, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiXFORMOBJ_bApplyXform +_NtGdiXFORMOBJ_bApplyXform: + movl $0x127f, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtGdiXFORMOBJ_iGetXform +_NtGdiXFORMOBJ_iGetXform: + movl $0x1280, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiFONTOBJ_vGetInfo +_NtGdiFONTOBJ_vGetInfo: + movl $0x1281, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiFONTOBJ_pxoGetXform +_NtGdiFONTOBJ_pxoGetXform: + movl $0x1282, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiFONTOBJ_cGetGlyphs +_NtGdiFONTOBJ_cGetGlyphs: + movl $0x1283, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtGdiFONTOBJ_pifi +_NtGdiFONTOBJ_pifi: + movl $0x1284, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiFONTOBJ_pfdg +_NtGdiFONTOBJ_pfdg: + movl $0x1285, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiFONTOBJ_pQueryGlyphAttrs +_NtGdiFONTOBJ_pQueryGlyphAttrs: + movl $0x1286, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiFONTOBJ_pvTrueTypeFontFile +_NtGdiFONTOBJ_pvTrueTypeFontFile: + movl $0x1287, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiFONTOBJ_cGetAllGlyphHandles +_NtGdiFONTOBJ_cGetAllGlyphHandles: + movl $0x1288, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiSTROBJ_bEnum +_NtGdiSTROBJ_bEnum: + movl $0x1289, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiSTROBJ_bEnumPositionsOnly +_NtGdiSTROBJ_bEnumPositionsOnly: + movl $0x128a, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiSTROBJ_bGetAdvanceWidths +_NtGdiSTROBJ_bGetAdvanceWidths: + movl $0x128b, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiSTROBJ_vEnumStart +_NtGdiSTROBJ_vEnumStart: + movl $0x128c, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiSTROBJ_dwGetCodePage +_NtGdiSTROBJ_dwGetCodePage: + movl $0x128d, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiPATHOBJ_vGetBounds +_NtGdiPATHOBJ_vGetBounds: + movl $0x128e, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiPATHOBJ_bEnum +_NtGdiPATHOBJ_bEnum: + movl $0x128f, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiPATHOBJ_vEnumStart +_NtGdiPATHOBJ_vEnumStart: + movl $0x1290, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiPATHOBJ_vEnumStartClipLines +_NtGdiPATHOBJ_vEnumStartClipLines: + movl $0x1291, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiPATHOBJ_bEnumClipLines +_NtGdiPATHOBJ_bEnumClipLines: + movl $0x1292, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiGetDhpdev +_NtGdiGetDhpdev: + movl $0x1293, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiEngCheckAbort +_NtGdiEngCheckAbort: + movl $0x1294, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiHT_Get8BPPFormatPalette +_NtGdiHT_Get8BPPFormatPalette: + movl $0x1295, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiHT_Get8BPPMaskPalette +_NtGdiHT_Get8BPPMaskPalette: + movl $0x1296, %eax + movq %rcx, %r10 + syscall + ret $0x18 + +.global _NtGdiUpdateTransform +_NtGdiUpdateTransform: + movl $0x1297, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiSetPUMPDOBJ +_NtGdiSetPUMPDOBJ: + movl $0x1298, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiBRUSHOBJ_DeleteRbrush +_NtGdiBRUSHOBJ_DeleteRbrush: + movl $0x1299, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtGdiUMPDEngFreeUserMem +_NtGdiUMPDEngFreeUserMem: + movl $0x129a, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtGdiDrawStream +_NtGdiDrawStream: + movl $0x129b, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtGdiSetDIBits +_NtGdiSetDIBits: + movl $0x129c, %eax + movq %rcx, %r10 + syscall + ret $0x1c + +.global _NtGdiSetViewportOrgEx +_NtGdiSetViewportOrgEx: + movl $0x129d, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiSetWindowOrgEx +_NtGdiSetWindowOrgEx: + movl $0x129e, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiGetFontFamilyInfo +_NtGdiGetFontFamilyInfo: + movl $0x129f, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiOffsetViewportOrgEx +_NtGdiOffsetViewportOrgEx: + movl $0x12a0, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtGdiOffsetWindowOrgEx +_NtGdiOffsetWindowOrgEx: + movl $0x12a1, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserBuildMenuItemList +_NtUserBuildMenuItemList: + movl $0x12a2, %eax + movq %rcx, %r10 + syscall + ret $0x10 + +.global _NtUserCreateCursorIconHandle +_NtUserCreateCursorIconHandle: + movl $0x12a3, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserGetClassLong +_NtUserGetClassLong: + movl $0x12a4, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserGetMenuDefaultItem +_NtUserGetMenuDefaultItem: + movl $0x12a5, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserGetLastInputInfo +_NtUserGetLastInputInfo: + movl $0x12a6, %eax + movq %rcx, %r10 + syscall + ret $0x4 + +.global _NtUserGetMinMaxInfo +_NtUserGetMinMaxInfo: + movl $0x12a7, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserGetMonitorInfo +_NtUserGetMonitorInfo: + movl $0x12a8, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserGetScrollInfo +_NtUserGetScrollInfo: + movl $0x12a9, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserGetWindow +_NtUserGetWindow: + movl $0x12aa, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserGetWindowLong +_NtUserGetWindowLong: + movl $0x12ab, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserMenuInfo +_NtUserMenuInfo: + movl $0x12ac, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserMenuItemInfo +_NtUserMenuItemInfo: + movl $0x12ad, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtUserMonitorFromPoint +_NtUserMonitorFromPoint: + movl $0x12ae, %eax + movq %rcx, %r10 + syscall + ret $0xc + +.global _NtUserMonitorFromRect +_NtUserMonitorFromRect: + movl $0x12af, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserMonitorFromWindow +_NtUserMonitorFromWindow: + movl $0x12b0, %eax + movq %rcx, %r10 + syscall + ret $0x8 + +.global _NtUserSendMessage +_NtUserSendMessage: + movl $0x12b1, %eax + movq %rcx, %r10 + syscall + ret $0x14 + +.global _NtUserSendMessageTimeout +_NtUserSendMessageTimeout: + movl $0x12b2, %eax + movq %rcx, %r10 + syscall + ret $0x20 + +.global _NtUserSetScrollBarInfo +_NtUserSetScrollBarInfo: + movl $0x12b3, %eax + movq %rcx, %r10 + syscall + ret $0xc + diff --git a/rostests/apitests/w32kdll/w32kdll_vista/w32kdll_vista-amd64.def b/rostests/apitests/w32kdll/w32kdll_vista/w32kdll_vista-amd64.def new file mode 100644 index 00000000000..fe4f876cd28 --- /dev/null +++ b/rostests/apitests/w32kdll/w32kdll_vista/w32kdll_vista-amd64.def @@ -0,0 +1,781 @@ +; $Id: w32kdll.def 27344 2007-08-01 14:12:10Z tkreuzer $ +; +; ReactOS Operating System +; +; This file contains all win32k native api functions from win 2k3 sp 2 +; +LIBRARY w32kdll.dll + +EXPORTS +NtGdiAbortDoc +NtGdiAbortPath +NtGdiAddFontResourceW +NtGdiAddRemoteFontToDC +NtGdiAddFontMemResourceEx +NtGdiRemoveMergeFont +NtGdiAddRemoteMMInstanceToDC +NtGdiAlphaBlend +NtGdiAngleArc +NtGdiAnyLinkedFonts +NtGdiFontIsLinked +NtGdiArcInternal +NtGdiBeginPath +NtGdiBitBlt +NtGdiCancelDC +NtGdiCheckBitmapBits +NtGdiCloseFigure +NtGdiClearBitmapAttributes +NtGdiClearBrushAttributes +NtGdiColorCorrectPalette +NtGdiCombineRgn +NtGdiCombineTransform +NtGdiComputeXformCoefficients +;NtGdiConfigureOPMProtectedOutput +NtGdiConsoleTextOut +NtGdiConvertMetafileRect +NtGdiCreateBitmap +NtGdiCreateClientObj +NtGdiCreateColorSpace +NtGdiCreateColorTransform +NtGdiCreateCompatibleBitmap +NtGdiCreateCompatibleDC +NtGdiCreateDIBBrush +NtGdiCreateDIBitmapInternal +NtGdiCreateDIBSection +NtGdiCreateEllipticRgn +NtGdiCreateHalftonePalette +NtGdiCreateHatchBrushInternal +NtGdiCreateMetafileDC +;NtGdiCreateOPMProtectedOutputs +NtGdiCreatePaletteInternal +NtGdiCreatePatternBrushInternal +NtGdiCreatePen +NtGdiCreateRectRgn +NtGdiCreateRoundRectRgn +NtGdiCreateServerMetaFile +NtGdiCreateSolidBrush +NtGdiD3dContextCreate +NtGdiD3dContextDestroy +NtGdiD3dContextDestroyAll +NtGdiD3dValidateTextureStageState +NtGdiD3dDrawPrimitives2 +NtGdiDdGetDriverState +NtGdiDdAddAttachedSurface +NtGdiDdAlphaBlt +NtGdiDdAttachSurface +NtGdiDdBeginMoCompFrame +NtGdiDdBlt +NtGdiDdCanCreateSurface +NtGdiDdCanCreateD3DBuffer +NtGdiDdColorControl +NtGdiDdCreateDirectDrawObject +NtGdiDdCreateSurface +NtGdiDdCreateD3DBuffer +NtGdiDdCreateMoComp +NtGdiDdCreateSurfaceObject +NtGdiDdDeleteDirectDrawObject +NtGdiDdDeleteSurfaceObject +NtGdiDdDestroyMoComp +NtGdiDdDestroySurface +NtGdiDdDestroyD3DBuffer +NtGdiDdEndMoCompFrame +NtGdiDdFlip +NtGdiDdFlipToGDISurface +NtGdiDdGetAvailDriverMemory +NtGdiDdGetBltStatus +NtGdiDdGetDC +NtGdiDdGetDriverInfo +NtGdiDdGetDxHandle +NtGdiDdGetFlipStatus +NtGdiDdGetInternalMoCompInfo +NtGdiDdGetMoCompBuffInfo +NtGdiDdGetMoCompGuids +NtGdiDdGetMoCompFormats +NtGdiDdGetScanLine +NtGdiDdLock +NtGdiDdLockD3D +NtGdiDdQueryDirectDrawObject +NtGdiDdQueryMoCompStatus +NtGdiDdReenableDirectDrawObject +NtGdiDdReleaseDC +NtGdiDdRenderMoComp +NtGdiDdResetVisrgn +NtGdiDdSetColorKey +NtGdiDdSetExclusiveMode +NtGdiDdSetGammaRamp +NtGdiDdCreateSurfaceEx +NtGdiDdSetOverlayPosition +NtGdiDdUnattachSurface +NtGdiDdUnlock +NtGdiDdUnlockD3D +NtGdiDdUpdateOverlay +NtGdiDdWaitForVerticalBlank +NtGdiDvpCanCreateVideoPort +NtGdiDvpColorControl +NtGdiDvpCreateVideoPort +NtGdiDvpDestroyVideoPort +NtGdiDvpFlipVideoPort +NtGdiDvpGetVideoPortBandwidth +NtGdiDvpGetVideoPortField +NtGdiDvpGetVideoPortFlipStatus +NtGdiDvpGetVideoPortInputFormats +NtGdiDvpGetVideoPortLine +NtGdiDvpGetVideoPortOutputFormats +NtGdiDvpGetVideoPortConnectInfo +NtGdiDvpGetVideoSignalStatus +NtGdiDvpUpdateVideoPort +NtGdiDvpWaitForVideoPortSync +NtGdiDvpAcquireNotification +NtGdiDvpReleaseNotification +NtGdiDxgGenericThunk +NtGdiDeleteClientObj +NtGdiDeleteColorSpace +NtGdiDeleteColorTransform +NtGdiDeleteObjectApp +NtGdiDescribePixelFormat +;NtGdiDestroyOPMProtectedOutput +NtGdiGetPerBandInfo +NtGdiDoBanding +NtGdiDoPalette +NtGdiDrawEscape +NtGdiEllipse +NtGdiEnableEudc +NtGdiEndDoc +NtGdiEndPage +NtGdiEndPath +NtGdiEnumFontChunk +NtGdiEnumFontClose +NtGdiEnumFontOpen +NtGdiEnumObjects +NtGdiEqualRgn +NtGdiEudcLoadUnloadLink +NtGdiExcludeClipRect +NtGdiExtCreatePen +NtGdiExtCreateRegion +NtGdiExtEscape +NtGdiExtFloodFill +NtGdiExtGetObjectW +NtGdiExtSelectClipRgn +NtGdiExtTextOutW +NtGdiFillPath +NtGdiFillRgn +NtGdiFlattenPath +NtGdiFlush +NtGdiForceUFIMapping +NtGdiFrameRgn +NtGdiFullscreenControl +NtGdiGetAndSetDCDword +NtGdiGetAppClipBox +NtGdiGetBitmapBits +NtGdiGetBitmapDimension +NtGdiGetBoundsRect +;NtGdiGetCertificate +;NtGdiGetCertificateSize +NtGdiGetCharABCWidthsW +NtGdiGetCharacterPlacementW +NtGdiGetCharSet +NtGdiGetCharWidthW +NtGdiGetCharWidthInfo +NtGdiGetColorAdjustment +NtGdiGetColorSpaceforBitmap +;NtGdiGetCOPPCompatibleOPMInformation +NtGdiGetDCDword +NtGdiGetDCforBitmap +NtGdiGetDCObject +NtGdiGetDCPoint +NtGdiGetDeviceCaps +NtGdiGetDeviceGammaRamp +NtGdiGetDeviceCapsAll +NtGdiGetDIBitsInternal +NtGdiGetETM +NtGdiGetEudcTimeStampEx +NtGdiGetFontData +NtGdiGetFontResourceInfoInternalW +NtGdiGetGlyphIndicesW +NtGdiGetGlyphIndicesWInternal +NtGdiGetGlyphOutline +;NtGdiGetOPMInformation +NtGdiGetKerningPairs +NtGdiGetLinkedUFIs +NtGdiGetMiterLimit +NtGdiGetMonitorID +NtGdiGetNearestColor +NtGdiGetNearestPaletteIndex +NtGdiGetObjectBitmapHandle +;NtGdiGetOPMRandomNumber +NtGdiGetOutlineTextMetricsInternalW +NtGdiGetPath +NtGdiGetPixel +NtGdiGetRandomRgn +NtGdiGetRasterizerCaps +NtGdiGetRealizationInfo +NtGdiGetRegionData +NtGdiGetRgnBox +NtGdiGetServerMetaFileBits +NtGdiGetSpoolMessage +NtGdiGetStats +NtGdiGetStockObject +NtGdiGetStringBitmapW +;NtGdiGetSuggestedOPMProtectedOutputArraySize +NtGdiGetSystemPaletteUse +NtGdiGetTextCharsetInfo +NtGdiGetTextExtent +NtGdiGetTextExtentExW +NtGdiGetTextFaceW +NtGdiGetTextMetricsW +NtGdiGetTransform +NtGdiGetUFI +NtGdiGetEmbUFI +NtGdiGetUFIPathname +NtGdiGetEmbedFonts +NtGdiChangeGhostFont +NtGdiAddEmbFontToDC +NtGdiGetFontUnicodeRanges +NtGdiGetWidthTable +NtGdiGradientFill +NtGdiHfontCreate +NtGdiIcmBrushInfo +NtGdiInit +NtGdiInitSpool +NtGdiIntersectClipRect +NtGdiInvertRgn +NtGdiLineTo +NtGdiMakeFontDir +NtGdiMakeInfoDC +NtGdiMaskBlt +NtGdiModifyWorldTransform +NtGdiMonoBitmap +NtGdiMoveTo +NtGdiOffsetClipRgn +NtGdiOffsetRgn +NtGdiOpenDCW +NtGdiPatBlt +NtGdiPolyPatBlt +NtGdiPathToRegion +NtGdiPlgBlt +NtGdiPolyDraw +NtGdiPolyPolyDraw +NtGdiPolyTextOutW +NtGdiPtInRegion +NtGdiPtVisible +NtGdiQueryFonts +NtGdiQueryFontAssocInfo +NtGdiRectangle +NtGdiRectInRegion +NtGdiRectVisible +NtGdiRemoveFontResourceW +NtGdiRemoveFontMemResourceEx +NtGdiResetDC +NtGdiResizePalette +NtGdiRestoreDC +NtGdiRoundRect +NtGdiSaveDC +NtGdiScaleViewportExtEx +NtGdiScaleWindowExtEx +NtGdiSelectBitmap +NtGdiSelectBrush +NtGdiSelectClipPath +NtGdiSelectFont +NtGdiSelectPen +NtGdiSetBitmapAttributes +NtGdiSetBitmapBits +NtGdiSetBitmapDimension +NtGdiSetBoundsRect +NtGdiSetBrushAttributes +NtGdiSetBrushOrg +NtGdiSetColorAdjustment +NtGdiSetColorSpace +NtGdiSetDeviceGammaRamp +NtGdiSetDIBitsToDeviceInternal +NtGdiSetFontEnumeration +NtGdiSetFontXform +NtGdiSetIcmMode +NtGdiSetLinkedUFIs +NtGdiSetMagicColors +NtGdiSetMetaRgn +NtGdiSetMiterLimit +NtGdiGetDeviceWidth +NtGdiMirrorWindowOrg +NtGdiSetLayout +;NtGdiSetOPMSigningKeyAndSequenceNumbers +NtGdiSetPixel +NtGdiSetPixelFormat +NtGdiSetRectRgn +NtGdiSetSystemPaletteUse +NtGdiSetTextJustification +NtGdiSetupPublicCFONT +NtGdiSetVirtualResolution +NtGdiSetSizeDevice +NtGdiStartDoc +NtGdiStartPage +NtGdiStretchBlt +NtGdiStretchDIBitsInternal +NtGdiStrokeAndFillPath +NtGdiStrokePath +NtGdiSwapBuffers +NtGdiTransformPoints +NtGdiTransparentBlt +NtGdiUnloadPrinterDriver +NtGdiUnmapMemFont +NtGdiUnrealizeObject +NtGdiUpdateColors +NtGdiWidenPath +NtUserActivateKeyboardLayout +;NtUserAddClipboardFormatListener +NtUserAlterWindowStyle +NtUserAssociateInputContext +NtUserAttachThreadInput +NtUserBeginPaint +NtUserBitBltSysBmp +NtUserBlockInput +NtUserBuildHimcList +NtUserBuildHwndList +NtUserBuildNameList +NtUserBuildPropList +NtUserCallHwnd +NtUserCallHwndLock +NtUserCallHwndOpt +NtUserCallHwndParam +NtUserCallHwndParamLock +NtUserCallMsgFilter +NtUserCallNextHookEx +NtUserCallNoParam +NtUserCallOneParam +NtUserCallTwoParam +NtUserChangeClipboardChain +NtUserChangeDisplaySettings +;NtUserCheckAccessForIntegrityLevel +;NtUserCheckDesktopByThreadId +;NtUserCheckWindowThreadDesktop +NtUserCheckImeHotKey +NtUserCheckMenuItem +NtUserChildWindowFromPointEx +NtUserClipCursor +NtUserCloseClipboard +NtUserCloseDesktop +NtUserCloseWindowStation +NtUserConsoleControl +NtUserConvertMemHandle +NtUserCopyAcceleratorTable +NtUserCountClipboardFormats +NtUserCreateAcceleratorTable +NtUserCreateCaret +;NtUserCreateDesktopEx +NtUserCreateInputContext +NtUserCreateLocalMemHandle +NtUserCreateWindowEx +NtUserCreateWindowStation +NtUserDdeInitialize +NtUserDeferWindowPos +NtUserDefSetText +NtUserDeleteMenu +NtUserDestroyAcceleratorTable +NtUserDestroyCursor +NtUserDestroyInputContext +NtUserDestroyMenu +NtUserDestroyWindow +NtUserDisableThreadIme +NtUserDispatchMessage +;NtUserDoSoundConnect +;NtUserDoSoundDisconnect +NtUserDragDetect +NtUserDragObject +NtUserDrawAnimatedRects +NtUserDrawCaption +NtUserDrawCaptionTemp +NtUserDrawIconEx +NtUserDrawMenuBarTemp +NtUserEmptyClipboard +NtUserEnableMenuItem +NtUserEnableScrollBar +NtUserEndDeferWindowPosEx +NtUserEndMenu +NtUserEndPaint +NtUserEnumDisplayDevices +NtUserEnumDisplayMonitors +NtUserEnumDisplaySettings +NtUserEvent +NtUserExcludeUpdateRgn +NtUserFillWindow +NtUserFindExistingCursorIcon +NtUserFindWindowEx +NtUserFlashWindowEx +;NtUserFrostCrashedWindow +NtUserGetAltTabInfo +NtUserGetAncestor +NtUserGetAppImeLevel +NtUserGetAsyncKeyState +NtUserGetAtomName +NtUserGetCaretBlinkTime +NtUserGetCaretPos +;NtUserGetClassInfoEx +NtUserGetClassName +NtUserGetClipboardData +NtUserGetClipboardFormatName +NtUserGetClipboardOwner +NtUserGetClipboardSequenceNumber +NtUserGetClipboardViewer +NtUserGetClipCursor +NtUserGetComboBoxInfo +NtUserGetControlBrush +NtUserGetControlColor +NtUserGetCPD +NtUserGetCursorFrameInfo +NtUserGetCursorInfo +NtUserGetDC +NtUserGetDCEx +NtUserGetDoubleClickTime +NtUserGetForegroundWindow +NtUserGetGuiResources +NtUserGetGUIThreadInfo +NtUserGetIconInfo +NtUserGetIconSize +NtUserGetImeHotKey +NtUserGetImeInfoEx +NtUserGetInternalWindowPos +NtUserGetKeyboardLayoutList +NtUserGetKeyboardLayoutName +NtUserGetKeyboardState +NtUserGetKeyNameText +NtUserGetKeyState +NtUserGetListBoxInfo +NtUserGetMenuBarInfo +NtUserGetMenuIndex +NtUserGetMenuItemRect +NtUserGetMessage +NtUserGetMouseMovePointsEx +NtUserGetObjectInformation +NtUserGetOpenClipboardWindow +NtUserGetPriorityClipboardFormat +NtUserGetProcessWindowStation +NtUserGetRawInputBuffer +NtUserGetRawInputData +NtUserGetRawInputDeviceInfo +NtUserGetRawInputDeviceList +NtUserGetRegisteredRawInputDevices +NtUserGetScrollBarInfo +NtUserGetSystemMenu +NtUserGetThreadDesktop +NtUserGetThreadState +NtUserGetTitleBarInfo +;NtUserGetUpdatedClipboardFormats +NtUserGetUpdateRect +NtUserGetUpdateRgn +NtUserGetWindowDC +NtUserGetWindowPlacement +NtUserGetWOWClass +;NtUserGhostWindowFromHungWindow +NtUserHardErrorControl +NtUserHideCaret +NtUserHiliteMenuItem +;NtUserHungWindowFromGhostWindow +NtUserImpersonateDdeClientWindow +NtUserInitialize +NtUserInitializeClientPfnArrays +NtUserInitTask +NtUserInternalGetWindowText +;NtUserInternalGetWindowIcon +NtUserInvalidateRect +NtUserInvalidateRgn +NtUserIsClipboardFormatAvailable +NtUserKillTimer +NtUserLoadKeyboardLayoutEx +NtUserLockWindowStation +NtUserLockWindowUpdate +NtUserLockWorkStation +;NtUserLogicalToPhysicalPoint +NtUserMapVirtualKeyEx +NtUserMenuItemFromPoint +NtUserMessageCall +NtUserMinMaximize +NtUserMNDragLeave +NtUserMNDragOver +NtUserModifyUserStartupInfoFlags +NtUserMoveWindow +NtUserNotifyIMEStatus +NtUserNotifyProcessCreate +NtUserNotifyWinEvent +NtUserOpenClipboard +NtUserOpenDesktop +NtUserOpenInputDesktop +;NtUserOpenThreadDesktop +NtUserOpenWindowStation +NtUserPaintDesktop +;NtUserPaintMonitor +NtUserPeekMessage +;NtUserPhysicalToLogicalPoint +NtUserPostMessage +NtUserPostThreadMessage +NtUserPrintWindow +NtUserProcessConnect +NtUserQueryInformationThread +NtUserQueryInputContext +NtUserQuerySendMessage +NtUserQueryWindow +NtUserRealChildWindowFromPoint +NtUserRealInternalGetMessage +NtUserRealWaitMessageEx +NtUserRedrawWindow +NtUserRegisterClassExWOW +;NtUserRegisterErrorReportingDialog +NtUserRegisterUserApiHook +NtUserRegisterHotKey +NtUserRegisterRawInputDevices +NtUserRegisterTasklist +NtUserRegisterWindowMessage +;NtUserRemoveClipboardFormatListener +NtUserRemoveMenu +NtUserRemoveProp +NtUserResolveDesktop +NtUserResolveDesktopForWOW +NtUserSBGetParms +NtUserScrollDC +NtUserScrollWindowEx +NtUserSelectPalette +NtUserSendInput +NtUserSetActiveWindow +NtUserSetAppImeLevel +NtUserSetCapture +NtUserSetClassLong +NtUserSetClassWord +NtUserSetClipboardData +NtUserSetClipboardViewer +NtUserSetConsoleReserveKeys +NtUserSetCursor +NtUserSetCursorContents +NtUserSetCursorIconData +NtUserSetFocus +NtUserSetImeHotKey +NtUserSetImeInfoEx +NtUserSetImeOwnerWindow +NtUserSetInformationProcess +NtUserSetInformationThread +NtUserSetInternalWindowPos +NtUserSetKeyboardState +NtUserSetMenu +NtUserSetMenuContextHelpId +NtUserSetMenuDefaultItem +NtUserSetMenuFlagRtoL +NtUserSetObjectInformation +NtUserSetParent +NtUserSetProcessWindowStation +;NtUserGetProp +;NtUserSetProp +NtUserSetScrollInfo +NtUserSetShellWindowEx +NtUserSetSysColors +NtUserSetSystemCursor +NtUserSetSystemMenu +NtUserSetSystemTimer +NtUserSetThreadDesktop +NtUserSetThreadLayoutHandles +NtUserSetThreadState +NtUserSetTimer +;NtUserSetProcessDPIAware +NtUserSetWindowFNID +NtUserSetWindowLong +NtUserSetWindowPlacement +NtUserSetWindowPos +NtUserSetWindowRgn +;NtUserGetWindowRgnEx +;NtUserSetWindowRgnEx +NtUserSetWindowsHookAW +NtUserSetWindowsHookEx +NtUserSetWindowStationUser +NtUserSetWindowWord +NtUserSetWinEventHook +NtUserShowCaret +NtUserShowScrollBar +NtUserShowWindow +NtUserShowWindowAsync +NtUserSoundSentry +NtUserSwitchDesktop +NtUserSystemParametersInfo +NtUserTestForInteractiveUser +NtUserThunkedMenuInfo +NtUserThunkedMenuItemInfo +NtUserToUnicodeEx +NtUserTrackMouseEvent +NtUserTrackPopupMenuEx +NtUserCalcMenuBar +NtUserPaintMenuBar +NtUserTranslateAccelerator +NtUserTranslateMessage +NtUserUnhookWindowsHookEx +NtUserUnhookWinEvent +NtUserUnloadKeyboardLayout +NtUserUnlockWindowStation +NtUserUnregisterClass +NtUserUnregisterUserApiHook +NtUserUnregisterHotKey +NtUserUpdateInputContext +NtUserUpdateInstance +NtUserUpdateLayeredWindow +NtUserGetLayeredWindowAttributes +NtUserSetLayeredWindowAttributes +NtUserUpdatePerUserSystemParameters +NtUserUserHandleGrantAccess +NtUserValidateHandleSecure +NtUserValidateRect +NtUserValidateTimerCallback +NtUserVkKeyScanEx +NtUserWaitForInputIdle +NtUserWaitForMsgAndEvent +NtUserWaitMessage +NtUserWin32PoolAllocationStats +NtUserWindowFromPhysicalPoint +NtUserWindowFromPoint +NtUserYieldTask +NtUserRemoteConnect +NtUserRemoteRedrawRectangle +NtUserRemoteRedrawScreen +NtUserRemoteStopScreenUpdates +NtUserCtxDisplayIOCtl +;NtUserRegisterSessionPort +;NtUserUnregisterSessionPort +;NtUserUpdateWindowTransform +;NtUserDwmStartRedirection +;NtUserDwmStopRedirection +;NtUserDwmHintDxUpdate +;NtUserDwmGetDxRgn +;NtUserGetWindowMinimizeRect +NtGdiEngAssociateSurface +NtGdiEngCreateBitmap +NtGdiEngCreateDeviceSurface +NtGdiEngCreateDeviceBitmap +NtGdiEngCreatePalette +NtGdiEngComputeGlyphSet +NtGdiEngCopyBits +NtGdiEngDeletePalette +NtGdiEngDeleteSurface +NtGdiEngEraseSurface +NtGdiEngUnlockSurface +NtGdiEngLockSurface +NtGdiEngBitBlt +NtGdiEngStretchBlt +NtGdiEngPlgBlt +NtGdiEngMarkBandingSurface +NtGdiEngStrokePath +NtGdiEngFillPath +NtGdiEngStrokeAndFillPath +NtGdiEngPaint +NtGdiEngLineTo +NtGdiEngAlphaBlend +NtGdiEngGradientFill +NtGdiEngTransparentBlt +NtGdiEngTextOut +NtGdiEngStretchBltROP +NtGdiXLATEOBJ_cGetPalette +NtGdiXLATEOBJ_iXlate +NtGdiXLATEOBJ_hGetColorTransform +NtGdiCLIPOBJ_bEnum +NtGdiCLIPOBJ_cEnumStart +NtGdiCLIPOBJ_ppoGetPath +NtGdiEngDeletePath +NtGdiEngCreateClip +NtGdiEngDeleteClip +NtGdiBRUSHOBJ_ulGetBrushColor +NtGdiBRUSHOBJ_pvAllocRbrush +NtGdiBRUSHOBJ_pvGetRbrush +NtGdiBRUSHOBJ_hGetColorTransform +NtGdiXFORMOBJ_bApplyXform +NtGdiXFORMOBJ_iGetXform +NtGdiFONTOBJ_vGetInfo +NtGdiFONTOBJ_pxoGetXform +NtGdiFONTOBJ_cGetGlyphs +NtGdiFONTOBJ_pifi +NtGdiFONTOBJ_pfdg +NtGdiFONTOBJ_pQueryGlyphAttrs +NtGdiFONTOBJ_pvTrueTypeFontFile +NtGdiFONTOBJ_cGetAllGlyphHandles +NtGdiSTROBJ_bEnum +NtGdiSTROBJ_bEnumPositionsOnly +NtGdiSTROBJ_bGetAdvanceWidths +NtGdiSTROBJ_vEnumStart +NtGdiSTROBJ_dwGetCodePage +NtGdiPATHOBJ_vGetBounds +NtGdiPATHOBJ_bEnum +NtGdiPATHOBJ_vEnumStart +NtGdiPATHOBJ_vEnumStartClipLines +NtGdiPATHOBJ_bEnumClipLines +NtGdiGetDhpdev +NtGdiEngCheckAbort +NtGdiHT_Get8BPPFormatPalette +NtGdiHT_Get8BPPMaskPalette +NtGdiUpdateTransform +NtGdiSetPUMPDOBJ +NtGdiBRUSHOBJ_DeleteRbrush +NtGdiUMPDEngFreeUserMem +NtGdiDrawStream +;NtGdiDwmGetDirtyRgn +;NtGdiDwmGetSurfaceData +;NtGdiDdDDICreateAllocation +;NtGdiDdDDIQueryResourceInfo +;NtGdiDdDDIOpenResource +;NtGdiDdDDIDestroyAllocation +;NtGdiDdDDISetAllocationPriority +;NtGdiDdDDIQueryAllocationResidency +;NtGdiDdDDICreateDevice +;NtGdiDdDDIDestroyDevice +;NtGdiDdDDICreateContext +;NtGdiDdDDIDestroyContext +;NtGdiDdDDICreateSynchronizationObject +;NtGdiDdDDIDestroySynchronizationObject +;NtGdiDdDDIWaitForSynchronizationObject +;NtGdiDdDDISignalSynchronizationObject +;NtGdiDdDDIGetRuntimeData +;NtGdiDdDDIQueryAdapterInfo +;NtGdiDdDDILock +;NtGdiDdDDIUnlock +;NtGdiDdDDIGetDisplayModeList +;NtGdiDdDDISetDisplayMode +;NtGdiDdDDIGetMultisampleMethodList +;NtGdiDdDDIPresent +;NtGdiDdDDIRender +;NtGdiDdDDIOpenAdapterFromDeviceName +;NtGdiDdDDIOpenAdapterFromHdc +;NtGdiDdDDICloseAdapter +;NtGdiDdDDIGetSharedPrimaryHandle +;NtGdiDdDDIEscape +;NtGdiDdDDIQueryStatistics +;NtGdiDdDDISetVidPnSourceOwner +;NtGdiDdDDIGetPresentHistory +;NtGdiDdDDICreateOverlay +;NtGdiDdDDIUpdateOverlay +;NtGdiDdDDIFlipOverlay +;NtGdiDdDDIDestroyOverlay +;NtGdiDdDDIWaitForVerticalBlankEvent +;NtGdiDdDDISetGammaRamp +;NtGdiDdDDIGetDeviceState +;NtGdiDdDDICreateDCFromMemory +;NtGdiDdDDIDestroyDCFromMemory +;NtGdiDdDDISetContextSchedulingPriority +;NtGdiDdDDIGetContextSchedulingPriority +;NtGdiDdDDISetProcessSchedulingPriorityClass +;NtGdiDdDDIGetProcessSchedulingPriorityClass +;NtGdiDdDDIReleaseProcessVidPnSourceOwners +;NtGdiDdDDIGetScanLine +;NtGdiDdDDISetQueuedLimit +;NtGdiDdDDIPollDisplayChildren +;NtGdiDdDDIInvalidateActiveVidPn +;NtGdiDdDDICheckOcclusion +;NtGdiDdDDIWaitForIdle +;NtGdiDdDDICheckMonitorPowerState +;NtGdiDdDDICheckExclusiveOwnership +;NtGdiDdDDISetDisplayPrivateDriverFormat +;NtGdiDdDDISharedPrimaryLockNotification +;NtGdiDdDDISharedPrimaryUnLockNotification +;NtGdiMakeObjectXferable +;NtGdiMakeObjectUnXferable +;NtGdiGetNumberOfPhysicalMonitors +;NtGdiGetPhysicalMonitors +;NtGdiGetPhysicalMonitorDescription +;NtGdiDestroyPhysicalMonitor +;NtGdiDDCCIGetVCPFeature +;NtGdiDDCCISetVCPFeature +;NtGdiDDCCISaveCurrentSettings +;NtGdiDDCCIGetCapabilitiesStringLength +;NtGdiDDCCIGetCapabilitiesString +;NtGdiDDCCIGetTimingReport +;NtUserSetMirrorRendering +;NtUserShowSystemCursor diff --git a/rostests/apitests/w32kdll/w32kdll_vista/w32kdll_vista.S b/rostests/apitests/w32kdll/w32kdll_vista/w32kdll_vista-i386.S similarity index 100% rename from rostests/apitests/w32kdll/w32kdll_vista/w32kdll_vista.S rename to rostests/apitests/w32kdll/w32kdll_vista/w32kdll_vista-i386.S diff --git a/rostests/apitests/w32kdll/w32kdll_vista/w32kdll_vista-i386.def b/rostests/apitests/w32kdll/w32kdll_vista/w32kdll_vista-i386.def new file mode 100644 index 00000000000..ccf98a7ed26 --- /dev/null +++ b/rostests/apitests/w32kdll/w32kdll_vista/w32kdll_vista-i386.def @@ -0,0 +1,781 @@ +; $Id: w32kdll.def 27344 2007-08-01 14:12:10Z tkreuzer $ +; +; ReactOS Operating System +; +; This file contains all win32k native api functions from win 2k3 sp 2 +; +LIBRARY w32kdll.dll + +EXPORTS +NtGdiAbortDoc@4 +NtGdiAbortPath@4 +NtGdiAddFontResourceW@24 +NtGdiAddRemoteFontToDC@16 +NtGdiAddFontMemResourceEx@20 +NtGdiRemoveMergeFont@8 +NtGdiAddRemoteMMInstanceToDC@12 +NtGdiAlphaBlend@48 +NtGdiAngleArc@24 +NtGdiAnyLinkedFonts@0 +NtGdiFontIsLinked@4 +NtGdiArcInternal@40 +NtGdiBeginPath@4 +NtGdiBitBlt@44 +NtGdiCancelDC@4 +NtGdiCheckBitmapBits@32 +NtGdiCloseFigure@4 +NtGdiClearBitmapAttributes@8 +NtGdiClearBrushAttributes@8 +NtGdiColorCorrectPalette@24 +NtGdiCombineRgn@16 +NtGdiCombineTransform@12 +NtGdiComputeXformCoefficients@4 +NtGdiConfigureOPMProtectedOutput@16 +NtGdiConsoleTextOut@16 +NtGdiConvertMetafileRect@8 +NtGdiCreateBitmap@20 +NtGdiCreateClientObj@4 +NtGdiCreateColorSpace@4 +NtGdiCreateColorTransform@32 +NtGdiCreateCompatibleBitmap@12 +NtGdiCreateCompatibleDC@4 +NtGdiCreateDIBBrush@24 +NtGdiCreateDIBitmapInternal@44 +NtGdiCreateDIBSection@36 +NtGdiCreateEllipticRgn@16 +NtGdiCreateHalftonePalette@4 +NtGdiCreateHatchBrushInternal@12 +NtGdiCreateMetafileDC@4 +NtGdiCreateOPMProtectedOutputs@20 +NtGdiCreatePaletteInternal@8 +NtGdiCreatePatternBrushInternal@12 +NtGdiCreatePen@16 +NtGdiCreateRectRgn@16 +NtGdiCreateRoundRectRgn@24 +NtGdiCreateServerMetaFile@24 +NtGdiCreateSolidBrush@8 +NtGdiD3dContextCreate@16 +NtGdiD3dContextDestroy@4 +NtGdiD3dContextDestroyAll@4 +NtGdiD3dValidateTextureStageState@4 +NtGdiD3dDrawPrimitives2@28 +NtGdiDdGetDriverState@4 +NtGdiDdAddAttachedSurface@12 +NtGdiDdAlphaBlt@12 +NtGdiDdAttachSurface@8 +NtGdiDdBeginMoCompFrame@8 +NtGdiDdBlt@12 +NtGdiDdCanCreateSurface@8 +NtGdiDdCanCreateD3DBuffer@8 +NtGdiDdColorControl@8 +NtGdiDdCreateDirectDrawObject@4 +NtGdiDdCreateSurface@32 +NtGdiDdCreateD3DBuffer@32 +NtGdiDdCreateMoComp@8 +NtGdiDdCreateSurfaceObject@24 +NtGdiDdDeleteDirectDrawObject@4 +NtGdiDdDeleteSurfaceObject@4 +NtGdiDdDestroyMoComp@8 +NtGdiDdDestroySurface@8 +NtGdiDdDestroyD3DBuffer@4 +NtGdiDdEndMoCompFrame@8 +NtGdiDdFlip@20 +NtGdiDdFlipToGDISurface@8 +NtGdiDdGetAvailDriverMemory@8 +NtGdiDdGetBltStatus@8 +NtGdiDdGetDC@8 +NtGdiDdGetDriverInfo@8 +NtGdiDdGetDxHandle@12 +NtGdiDdGetFlipStatus@8 +NtGdiDdGetInternalMoCompInfo@8 +NtGdiDdGetMoCompBuffInfo@8 +NtGdiDdGetMoCompGuids@8 +NtGdiDdGetMoCompFormats@8 +NtGdiDdGetScanLine@8 +NtGdiDdLock@12 +NtGdiDdLockD3D@8 +NtGdiDdQueryDirectDrawObject@44 +NtGdiDdQueryMoCompStatus@8 +NtGdiDdReenableDirectDrawObject@8 +NtGdiDdReleaseDC@4 +NtGdiDdRenderMoComp@8 +NtGdiDdResetVisrgn@8 +NtGdiDdSetColorKey@8 +NtGdiDdSetExclusiveMode@8 +NtGdiDdSetGammaRamp@12 +NtGdiDdCreateSurfaceEx@12 +NtGdiDdSetOverlayPosition@12 +NtGdiDdUnattachSurface@8 +NtGdiDdUnlock@8 +NtGdiDdUnlockD3D@8 +NtGdiDdUpdateOverlay@12 +NtGdiDdWaitForVerticalBlank@8 +NtGdiDvpCanCreateVideoPort@8 +NtGdiDvpColorControl@8 +NtGdiDvpCreateVideoPort@8 +NtGdiDvpDestroyVideoPort@8 +NtGdiDvpFlipVideoPort@16 +NtGdiDvpGetVideoPortBandwidth@8 +NtGdiDvpGetVideoPortField@8 +NtGdiDvpGetVideoPortFlipStatus@8 +NtGdiDvpGetVideoPortInputFormats@8 +NtGdiDvpGetVideoPortLine@8 +NtGdiDvpGetVideoPortOutputFormats@8 +NtGdiDvpGetVideoPortConnectInfo@8 +NtGdiDvpGetVideoSignalStatus@8 +NtGdiDvpUpdateVideoPort@16 +NtGdiDvpWaitForVideoPortSync@8 +NtGdiDvpAcquireNotification@12 +NtGdiDvpReleaseNotification@8 +NtGdiDxgGenericThunk@24 +NtGdiDeleteClientObj@4 +NtGdiDeleteColorSpace@4 +NtGdiDeleteColorTransform@8 +NtGdiDeleteObjectApp@4 +NtGdiDescribePixelFormat@16 +NtGdiDestroyOPMProtectedOutput@4 +NtGdiGetPerBandInfo@8 +NtGdiDoBanding@16 +NtGdiDoPalette@24 +NtGdiDrawEscape@16 +NtGdiEllipse@20 +NtGdiEnableEudc@4 +NtGdiEndDoc@4 +NtGdiEndPage@4 +NtGdiEndPath@4 +NtGdiEnumFontChunk@20 +NtGdiEnumFontClose@4 +NtGdiEnumFontOpen@28 +NtGdiEnumObjects@16 +NtGdiEqualRgn@8 +NtGdiEudcLoadUnloadLink@28 +NtGdiExcludeClipRect@20 +NtGdiExtCreatePen@44 +NtGdiExtCreateRegion@12 +NtGdiExtEscape@32 +NtGdiExtFloodFill@20 +NtGdiExtGetObjectW@12 +NtGdiExtSelectClipRgn@12 +NtGdiExtTextOutW@36 +NtGdiFillPath@4 +NtGdiFillRgn@12 +NtGdiFlattenPath@4 +NtGdiFlush@0 +NtGdiForceUFIMapping@8 +NtGdiFrameRgn@20 +NtGdiFullscreenControl@20 +NtGdiGetAndSetDCDword@16 +NtGdiGetAppClipBox@8 +NtGdiGetBitmapBits@12 +NtGdiGetBitmapDimension@8 +NtGdiGetBoundsRect@12 +NtGdiGetCertificate@16 +NtGdiGetCertificateSize@12 +NtGdiGetCharABCWidthsW@24 +NtGdiGetCharacterPlacementW@24 +NtGdiGetCharSet@4 +NtGdiGetCharWidthW@24 +NtGdiGetCharWidthInfo@8 +NtGdiGetColorAdjustment@8 +NtGdiGetColorSpaceforBitmap@4 +NtGdiGetCOPPCompatibleOPMInformation@12 +NtGdiGetDCDword@12 +NtGdiGetDCforBitmap@4 +NtGdiGetDCObject@8 +NtGdiGetDCPoint@12 +NtGdiGetDeviceCaps@8 +NtGdiGetDeviceGammaRamp@8 +NtGdiGetDeviceCapsAll@8 +NtGdiGetDIBitsInternal@36 +NtGdiGetETM@8 +NtGdiGetEudcTimeStampEx@12 +NtGdiGetFontData@20 +NtGdiGetFontResourceInfoInternalW@28 +NtGdiGetGlyphIndicesW@20 +NtGdiGetGlyphIndicesWInternal@24 +NtGdiGetGlyphOutline@32 +NtGdiGetOPMInformation@12 +NtGdiGetKerningPairs@12 +NtGdiGetLinkedUFIs@12 +NtGdiGetMiterLimit@8 +NtGdiGetMonitorID@12 +NtGdiGetNearestColor@8 +NtGdiGetNearestPaletteIndex@8 +NtGdiGetObjectBitmapHandle@8 +NtGdiGetOPMRandomNumber@8 +NtGdiGetOutlineTextMetricsInternalW@16 +NtGdiGetPath@16 +NtGdiGetPixel@12 +NtGdiGetRandomRgn@12 +NtGdiGetRasterizerCaps@8 +NtGdiGetRealizationInfo@12 +NtGdiGetRegionData@12 +NtGdiGetRgnBox@8 +NtGdiGetServerMetaFileBits@28 +NtGdiGetSpoolMessage@16 +NtGdiGetStats@20 +NtGdiGetStockObject@4 +NtGdiGetStringBitmapW@20 +NtGdiGetSuggestedOPMProtectedOutputArraySize@8 +NtGdiGetSystemPaletteUse@4 +NtGdiGetTextCharsetInfo@12 +NtGdiGetTextExtent@20 +NtGdiGetTextExtentExW@32 +NtGdiGetTextFaceW@16 +NtGdiGetTextMetricsW@12 +NtGdiGetTransform@12 +NtGdiGetUFI@24 +NtGdiGetEmbUFI@28 +NtGdiGetUFIPathname@40 +NtGdiGetEmbedFonts@0 +NtGdiChangeGhostFont@8 +NtGdiAddEmbFontToDC@8 +NtGdiGetFontUnicodeRanges@8 +NtGdiGetWidthTable@28 +NtGdiGradientFill@24 +NtGdiHfontCreate@20 +NtGdiIcmBrushInfo@32 +NtGdiInit@0 +NtGdiInitSpool@0 +NtGdiIntersectClipRect@20 +NtGdiInvertRgn@8 +NtGdiLineTo@12 +NtGdiMakeFontDir@20 +NtGdiMakeInfoDC@8 +NtGdiMaskBlt@52 +NtGdiModifyWorldTransform@12 +NtGdiMonoBitmap@4 +NtGdiMoveTo@16 +NtGdiOffsetClipRgn@12 +NtGdiOffsetRgn@12 +NtGdiOpenDCW@32 +NtGdiPatBlt@24 +NtGdiPolyPatBlt@20 +NtGdiPathToRegion@4 +NtGdiPlgBlt@44 +NtGdiPolyDraw@16 +NtGdiPolyPolyDraw@20 +NtGdiPolyTextOutW@16 +NtGdiPtInRegion@12 +NtGdiPtVisible@12 +NtGdiQueryFonts@12 +NtGdiQueryFontAssocInfo@4 +NtGdiRectangle@20 +NtGdiRectInRegion@8 +NtGdiRectVisible@8 +NtGdiRemoveFontResourceW@24 +NtGdiRemoveFontMemResourceEx@4 +NtGdiResetDC@20 +NtGdiResizePalette@8 +NtGdiRestoreDC@8 +NtGdiRoundRect@28 +NtGdiSaveDC@4 +NtGdiScaleViewportExtEx@24 +NtGdiScaleWindowExtEx@24 +NtGdiSelectBitmap@8 +NtGdiSelectBrush@8 +NtGdiSelectClipPath@8 +NtGdiSelectFont@8 +NtGdiSelectPen@8 +NtGdiSetBitmapAttributes@8 +NtGdiSetBitmapBits@12 +NtGdiSetBitmapDimension@16 +NtGdiSetBoundsRect@12 +NtGdiSetBrushAttributes@8 +NtGdiSetBrushOrg@16 +NtGdiSetColorAdjustment@8 +NtGdiSetColorSpace@8 +NtGdiSetDeviceGammaRamp@8 +NtGdiSetDIBitsToDeviceInternal@64 +NtGdiSetFontEnumeration@4 +NtGdiSetFontXform@12 +NtGdiSetIcmMode@12 +NtGdiSetLinkedUFIs@12 +NtGdiSetMagicColors@12 +NtGdiSetMetaRgn@4 +NtGdiSetMiterLimit@12 +NtGdiGetDeviceWidth@4 +NtGdiMirrorWindowOrg@4 +NtGdiSetLayout@12 +NtGdiSetOPMSigningKeyAndSequenceNumbers@8 +NtGdiSetPixel@16 +NtGdiSetPixelFormat@8 +NtGdiSetRectRgn@20 +NtGdiSetSystemPaletteUse@8 +NtGdiSetTextJustification@12 +NtGdiSetupPublicCFONT@12 +NtGdiSetVirtualResolution@20 +NtGdiSetSizeDevice@12 +NtGdiStartDoc@16 +NtGdiStartPage@4 +NtGdiStretchBlt@48 +NtGdiStretchDIBitsInternal@64 +NtGdiStrokeAndFillPath@4 +NtGdiStrokePath@4 +NtGdiSwapBuffers@4 +NtGdiTransformPoints@20 +NtGdiTransparentBlt@44 +NtGdiUnloadPrinterDriver@8 +NtGdiUnmapMemFont@4 +NtGdiUnrealizeObject@4 +NtGdiUpdateColors@4 +NtGdiWidenPath@4 +NtUserActivateKeyboardLayout@8 +NtUserAddClipboardFormatListener@4 +NtUserAlterWindowStyle@12 +NtUserAssociateInputContext@12 +NtUserAttachThreadInput@12 +NtUserBeginPaint@8 +NtUserBitBltSysBmp@32 +NtUserBlockInput@4 +NtUserBuildHimcList@16 +NtUserBuildHwndList@28 +NtUserBuildNameList@16 +NtUserBuildPropList@16 +NtUserCallHwnd@8 +NtUserCallHwndLock@8 +NtUserCallHwndOpt@8 +NtUserCallHwndParam@12 +NtUserCallHwndParamLock@12 +NtUserCallMsgFilter@8 +NtUserCallNextHookEx@16 +NtUserCallNoParam@4 +NtUserCallOneParam@8 +NtUserCallTwoParam@12 +NtUserChangeClipboardChain@8 +NtUserChangeDisplaySettings@16 +NtUserCheckAccessForIntegrityLevel@12 +NtUserCheckDesktopByThreadId@4 +NtUserCheckWindowThreadDesktop@12 +NtUserCheckImeHotKey@8 +NtUserCheckMenuItem@12 +NtUserChildWindowFromPointEx@16 +NtUserClipCursor@4 +NtUserCloseClipboard@0 +NtUserCloseDesktop@4 +NtUserCloseWindowStation@4 +NtUserConsoleControl@12 +NtUserConvertMemHandle@8 +NtUserCopyAcceleratorTable@12 +NtUserCountClipboardFormats@0 +NtUserCreateAcceleratorTable@8 +NtUserCreateCaret@16 +NtUserCreateDesktopEx@24 +NtUserCreateInputContext@4 +NtUserCreateLocalMemHandle@16 +NtUserCreateWindowEx@60 +NtUserCreateWindowStation@28 +NtUserDdeInitialize@20 +NtUserDeferWindowPos@32 +NtUserDefSetText@8 +NtUserDeleteMenu@12 +NtUserDestroyAcceleratorTable@4 +NtUserDestroyCursor@8 +NtUserDestroyInputContext@4 +NtUserDestroyMenu@4 +NtUserDestroyWindow@4 +NtUserDisableThreadIme@4 +NtUserDispatchMessage@4 +NtUserDoSoundConnect@0 +NtUserDoSoundDisconnect@0 +NtUserDragDetect@12 +NtUserDragObject@20 +NtUserDrawAnimatedRects@16 +NtUserDrawCaption@16 +NtUserDrawCaptionTemp@28 +NtUserDrawIconEx@44 +NtUserDrawMenuBarTemp@20 +NtUserEmptyClipboard@0 +NtUserEnableMenuItem@12 +NtUserEnableScrollBar@12 +NtUserEndDeferWindowPosEx@8 +NtUserEndMenu@0 +NtUserEndPaint@8 +NtUserEnumDisplayDevices@16 +NtUserEnumDisplayMonitors@16 +NtUserEnumDisplaySettings@16 +NtUserEvent@4 +NtUserExcludeUpdateRgn@8 +NtUserFillWindow@16 +NtUserFindExistingCursorIcon@12 +NtUserFindWindowEx@20 +NtUserFlashWindowEx@4 +NtUserFrostCrashedWindow@8 +NtUserGetAltTabInfo@24 +NtUserGetAncestor@8 +NtUserGetAppImeLevel@4 +NtUserGetAsyncKeyState@4 +NtUserGetAtomName@8 +NtUserGetCaretBlinkTime@0 +NtUserGetCaretPos@4 +NtUserGetClassInfoEx@20 +NtUserGetClassName@12 +NtUserGetClipboardData@8 +NtUserGetClipboardFormatName@12 +NtUserGetClipboardOwner@0 +NtUserGetClipboardSequenceNumber@0 +NtUserGetClipboardViewer@0 +NtUserGetClipCursor@4 +NtUserGetComboBoxInfo@8 +NtUserGetControlBrush@12 +NtUserGetControlColor@16 +NtUserGetCPD@12 +NtUserGetCursorFrameInfo@16 +NtUserGetCursorInfo@4 +NtUserGetDC@4 +NtUserGetDCEx@12 +NtUserGetDoubleClickTime@0 +NtUserGetForegroundWindow@0 +NtUserGetGuiResources@8 +NtUserGetGUIThreadInfo@8 +NtUserGetIconInfo@24 +NtUserGetIconSize@16 +NtUserGetImeHotKey@16 +NtUserGetImeInfoEx@8 +NtUserGetInternalWindowPos@12 +NtUserGetKeyboardLayoutList@8 +NtUserGetKeyboardLayoutName@4 +NtUserGetKeyboardState@4 +NtUserGetKeyNameText@12 +NtUserGetKeyState@4 +NtUserGetListBoxInfo@4 +NtUserGetMenuBarInfo@16 +NtUserGetMenuIndex@8 +NtUserGetMenuItemRect@16 +NtUserGetMessage@16 +NtUserGetMouseMovePointsEx@20 +NtUserGetObjectInformation@20 +NtUserGetOpenClipboardWindow@0 +NtUserGetPriorityClipboardFormat@8 +NtUserGetProcessWindowStation@0 +NtUserGetRawInputBuffer@12 +NtUserGetRawInputData@20 +NtUserGetRawInputDeviceInfo@16 +NtUserGetRawInputDeviceList@12 +NtUserGetRegisteredRawInputDevices@12 +NtUserGetScrollBarInfo@12 +NtUserGetSystemMenu@8 +NtUserGetThreadDesktop@8 +NtUserGetThreadState@4 +NtUserGetTitleBarInfo@8 +NtUserGetUpdatedClipboardFormats@12 +NtUserGetUpdateRect@12 +NtUserGetUpdateRgn@12 +NtUserGetWindowDC@4 +NtUserGetWindowPlacement@8 +NtUserGetWOWClass@8 +NtUserGhostWindowFromHungWindow@4 +NtUserHardErrorControl@12 +NtUserHideCaret@4 +NtUserHiliteMenuItem@16 +NtUserHungWindowFromGhostWindow@4 +NtUserImpersonateDdeClientWindow@8 +NtUserInitialize@8 +NtUserInitializeClientPfnArrays@16 +NtUserInitTask@48 +NtUserInternalGetWindowText@12 +NtUserInternalGetWindowIcon@8 +NtUserInvalidateRect@12 +NtUserInvalidateRgn@12 +NtUserIsClipboardFormatAvailable@4 +NtUserKillTimer@8 +NtUserLoadKeyboardLayoutEx@28 +NtUserLockWindowStation@4 +NtUserLockWindowUpdate@4 +NtUserLockWorkStation@0 +NtUserLogicalToPhysicalPoint@8 +NtUserMapVirtualKeyEx@16 +NtUserMenuItemFromPoint@16 +NtUserMessageCall@28 +NtUserMinMaximize@12 +NtUserMNDragLeave@0 +NtUserMNDragOver@8 +NtUserModifyUserStartupInfoFlags@8 +NtUserMoveWindow@24 +NtUserNotifyIMEStatus@12 +NtUserNotifyProcessCreate@16 +NtUserNotifyWinEvent@16 +NtUserOpenClipboard@8 +NtUserOpenDesktop@12 +NtUserOpenInputDesktop@12 +NtUserOpenThreadDesktop@20 +NtUserOpenWindowStation@8 +NtUserPaintDesktop@4 +NtUserPaintMonitor@12 +NtUserPeekMessage@20 +NtUserPhysicalToLogicalPoint@8 +NtUserPostMessage@16 +NtUserPostThreadMessage@16 +NtUserPrintWindow@12 +NtUserProcessConnect@8 +NtUserQueryInformationThread@16 +NtUserQueryInputContext@8 +NtUserQuerySendMessage@4 +NtUserQueryWindow@8 +NtUserRealChildWindowFromPoint@12 +NtUserRealInternalGetMessage@24 +NtUserRealWaitMessageEx@8 +NtUserRedrawWindow@16 +NtUserRegisterClassExWOW@28 +NtUserRegisterErrorReportingDialog@8 +NtUserRegisterUserApiHook@16 +NtUserRegisterHotKey@16 +NtUserRegisterRawInputDevices@12 +NtUserRegisterTasklist@4 +NtUserRegisterWindowMessage@4 +NtUserRemoveClipboardFormatListener@4 +NtUserRemoveMenu@12 +NtUserRemoveProp@8 +NtUserResolveDesktop@16 +NtUserResolveDesktopForWOW@4 +NtUserSBGetParms@16 +NtUserScrollDC@28 +NtUserScrollWindowEx@32 +NtUserSelectPalette@12 +NtUserSendInput@12 +NtUserSetActiveWindow@4 +NtUserSetAppImeLevel@8 +NtUserSetCapture@4 +NtUserSetClassLong@16 +NtUserSetClassWord@12 +NtUserSetClipboardData@12 +NtUserSetClipboardViewer@4 +NtUserSetConsoleReserveKeys@8 +NtUserSetCursor@4 +NtUserSetCursorContents@8 +NtUserSetCursorIconData@16 +NtUserSetFocus@4 +NtUserSetImeHotKey@20 +NtUserSetImeInfoEx@4 +NtUserSetImeOwnerWindow@8 +NtUserSetInformationProcess@16 +NtUserSetInformationThread@16 +NtUserSetInternalWindowPos@16 +NtUserSetKeyboardState@4 +NtUserSetMenu@12 +NtUserSetMenuContextHelpId@8 +NtUserSetMenuDefaultItem@12 +NtUserSetMenuFlagRtoL@4 +NtUserSetObjectInformation@16 +NtUserSetParent@8 +NtUserSetProcessWindowStation@4 +NtUserGetProp@8 +NtUserSetProp@12 +NtUserSetScrollInfo@16 +NtUserSetShellWindowEx@8 +NtUserSetSysColors@16 +NtUserSetSystemCursor@8 +NtUserSetSystemMenu@8 +NtUserSetSystemTimer@12 +NtUserSetThreadDesktop@4 +NtUserSetThreadLayoutHandles@8 +NtUserSetThreadState@8 +NtUserSetTimer@16 +NtUserSetProcessDPIAware@0 +NtUserSetWindowFNID@8 +NtUserSetWindowLong@16 +NtUserSetWindowPlacement@8 +NtUserSetWindowPos@28 +NtUserSetWindowRgn@12 +NtUserGetWindowRgnEx@12 +NtUserSetWindowRgnEx@12 +NtUserSetWindowsHookAW@12 +NtUserSetWindowsHookEx@24 +NtUserSetWindowStationUser@16 +NtUserSetWindowWord@12 +NtUserSetWinEventHook@32 +NtUserShowCaret@4 +NtUserShowScrollBar@12 +NtUserShowWindow@8 +NtUserShowWindowAsync@8 +NtUserSoundSentry@0 +NtUserSwitchDesktop@8 +NtUserSystemParametersInfo@16 +NtUserTestForInteractiveUser@4 +NtUserThunkedMenuInfo@8 +NtUserThunkedMenuItemInfo@24 +NtUserToUnicodeEx@28 +NtUserTrackMouseEvent@4 +NtUserTrackPopupMenuEx@24 +NtUserCalcMenuBar@20 +NtUserPaintMenuBar@24 +NtUserTranslateAccelerator@12 +NtUserTranslateMessage@8 +NtUserUnhookWindowsHookEx@4 +NtUserUnhookWinEvent@4 +NtUserUnloadKeyboardLayout@4 +NtUserUnlockWindowStation@4 +NtUserUnregisterClass@12 +NtUserUnregisterUserApiHook@0 +NtUserUnregisterHotKey@8 +NtUserUpdateInputContext@12 +NtUserUpdateInstance@12 +NtUserUpdateLayeredWindow@40 +NtUserGetLayeredWindowAttributes@16 +NtUserSetLayeredWindowAttributes@16 +NtUserUpdatePerUserSystemParameters@4 +NtUserUserHandleGrantAccess@12 +NtUserValidateHandleSecure@4 +NtUserValidateRect@8 +NtUserValidateTimerCallback@4 +NtUserVkKeyScanEx@12 +NtUserWaitForInputIdle@12 +NtUserWaitForMsgAndEvent@4 +NtUserWaitMessage@0 +NtUserWin32PoolAllocationStats@24 +NtUserWindowFromPhysicalPoint@8 +NtUserWindowFromPoint@8 +NtUserYieldTask@0 +NtUserRemoteConnect@12 +NtUserRemoteRedrawRectangle@16 +NtUserRemoteRedrawScreen@0 +NtUserRemoteStopScreenUpdates@0 +NtUserCtxDisplayIOCtl@12 +NtUserRegisterSessionPort@4 +NtUserUnregisterSessionPort@0 +NtUserUpdateWindowTransform@12 +NtUserDwmStartRedirection@4 +NtUserDwmStopRedirection@0 +NtUserDwmHintDxUpdate@8 +NtUserDwmGetDxRgn@12 +NtUserGetWindowMinimizeRect@8 +NtGdiEngAssociateSurface@12 +NtGdiEngCreateBitmap@24 +NtGdiEngCreateDeviceSurface@16 +NtGdiEngCreateDeviceBitmap@16 +NtGdiEngCreatePalette@24 +NtGdiEngComputeGlyphSet@12 +NtGdiEngCopyBits@24 +NtGdiEngDeletePalette@4 +NtGdiEngDeleteSurface@4 +NtGdiEngEraseSurface@12 +NtGdiEngUnlockSurface@4 +NtGdiEngLockSurface@4 +NtGdiEngBitBlt@44 +NtGdiEngStretchBlt@44 +NtGdiEngPlgBlt@44 +NtGdiEngMarkBandingSurface@4 +NtGdiEngStrokePath@32 +NtGdiEngFillPath@28 +NtGdiEngStrokeAndFillPath@40 +NtGdiEngPaint@20 +NtGdiEngLineTo@36 +NtGdiEngAlphaBlend@28 +NtGdiEngGradientFill@40 +NtGdiEngTransparentBlt@32 +NtGdiEngTextOut@40 +NtGdiEngStretchBltROP@52 +NtGdiXLATEOBJ_cGetPalette@16 +NtGdiXLATEOBJ_iXlate@8 +NtGdiXLATEOBJ_hGetColorTransform@4 +NtGdiCLIPOBJ_bEnum@12 +NtGdiCLIPOBJ_cEnumStart@20 +NtGdiCLIPOBJ_ppoGetPath@4 +NtGdiEngDeletePath@4 +NtGdiEngCreateClip@0 +NtGdiEngDeleteClip@4 +NtGdiBRUSHOBJ_ulGetBrushColor@4 +NtGdiBRUSHOBJ_pvAllocRbrush@8 +NtGdiBRUSHOBJ_pvGetRbrush@4 +NtGdiBRUSHOBJ_hGetColorTransform@4 +NtGdiXFORMOBJ_bApplyXform@20 +NtGdiXFORMOBJ_iGetXform@8 +NtGdiFONTOBJ_vGetInfo@12 +NtGdiFONTOBJ_pxoGetXform@4 +NtGdiFONTOBJ_cGetGlyphs@20 +NtGdiFONTOBJ_pifi@4 +NtGdiFONTOBJ_pfdg@4 +NtGdiFONTOBJ_pQueryGlyphAttrs@8 +NtGdiFONTOBJ_pvTrueTypeFontFile@8 +NtGdiFONTOBJ_cGetAllGlyphHandles@8 +NtGdiSTROBJ_bEnum@12 +NtGdiSTROBJ_bEnumPositionsOnly@12 +NtGdiSTROBJ_bGetAdvanceWidths@16 +NtGdiSTROBJ_vEnumStart@4 +NtGdiSTROBJ_dwGetCodePage@4 +NtGdiPATHOBJ_vGetBounds@8 +NtGdiPATHOBJ_bEnum@8 +NtGdiPATHOBJ_vEnumStart@4 +NtGdiPATHOBJ_vEnumStartClipLines@16 +NtGdiPATHOBJ_bEnumClipLines@12 +NtGdiGetDhpdev@4 +NtGdiEngCheckAbort@4 +NtGdiHT_Get8BPPFormatPalette@16 +NtGdiHT_Get8BPPMaskPalette@24 +NtGdiUpdateTransform@4 +NtGdiSetPUMPDOBJ@16 +NtGdiBRUSHOBJ_DeleteRbrush@8 +NtGdiUMPDEngFreeUserMem@4 +NtGdiDrawStream@12 +NtGdiDwmGetDirtyRgn@20 +NtGdiDwmGetSurfaceData@8 +NtGdiDdDDICreateAllocation@4 +NtGdiDdDDIQueryResourceInfo@4 +NtGdiDdDDIOpenResource@4 +NtGdiDdDDIDestroyAllocation@4 +NtGdiDdDDISetAllocationPriority@4 +NtGdiDdDDIQueryAllocationResidency@4 +NtGdiDdDDICreateDevice@4 +NtGdiDdDDIDestroyDevice@4 +NtGdiDdDDICreateContext@4 +NtGdiDdDDIDestroyContext@4 +NtGdiDdDDICreateSynchronizationObject@4 +NtGdiDdDDIDestroySynchronizationObject@4 +NtGdiDdDDIWaitForSynchronizationObject@4 +NtGdiDdDDISignalSynchronizationObject@4 +NtGdiDdDDIGetRuntimeData@4 +NtGdiDdDDIQueryAdapterInfo@4 +NtGdiDdDDILock@4 +NtGdiDdDDIUnlock@4 +NtGdiDdDDIGetDisplayModeList@4 +NtGdiDdDDISetDisplayMode@4 +NtGdiDdDDIGetMultisampleMethodList@4 +NtGdiDdDDIPresent@4 +NtGdiDdDDIRender@4 +NtGdiDdDDIOpenAdapterFromDeviceName@4 +NtGdiDdDDIOpenAdapterFromHdc@4 +NtGdiDdDDICloseAdapter@4 +NtGdiDdDDIGetSharedPrimaryHandle@4 +NtGdiDdDDIEscape@4 +NtGdiDdDDIQueryStatistics@4 +NtGdiDdDDISetVidPnSourceOwner@4 +NtGdiDdDDIGetPresentHistory@4 +NtGdiDdDDICreateOverlay@4 +NtGdiDdDDIUpdateOverlay@4 +NtGdiDdDDIFlipOverlay@4 +NtGdiDdDDIDestroyOverlay@4 +NtGdiDdDDIWaitForVerticalBlankEvent@4 +NtGdiDdDDISetGammaRamp@4 +NtGdiDdDDIGetDeviceState@4 +NtGdiDdDDICreateDCFromMemory@4 +NtGdiDdDDIDestroyDCFromMemory@4 +NtGdiDdDDISetContextSchedulingPriority@4 +NtGdiDdDDIGetContextSchedulingPriority@4 +NtGdiDdDDISetProcessSchedulingPriorityClass@8 +NtGdiDdDDIGetProcessSchedulingPriorityClass@8 +NtGdiDdDDIReleaseProcessVidPnSourceOwners@4 +NtGdiDdDDIGetScanLine@4 +NtGdiDdDDISetQueuedLimit@4 +NtGdiDdDDIPollDisplayChildren@4 +NtGdiDdDDIInvalidateActiveVidPn@4 +NtGdiDdDDICheckOcclusion@4 +NtGdiDdDDIWaitForIdle@4 +NtGdiDdDDICheckMonitorPowerState@4 +NtGdiDdDDICheckExclusiveOwnership@0 +NtGdiDdDDISetDisplayPrivateDriverFormat@4 +NtGdiDdDDISharedPrimaryLockNotification@4 +NtGdiDdDDISharedPrimaryUnLockNotification@4 +NtGdiMakeObjectXferable@8 +NtGdiMakeObjectUnXferable@4 +NtGdiGetNumberOfPhysicalMonitors@8 +NtGdiGetPhysicalMonitors@16 +NtGdiGetPhysicalMonitorDescription@12 +NtGdiDestroyPhysicalMonitor@4 +NtGdiDDCCIGetVCPFeature@20 +NtGdiDDCCISetVCPFeature@12 +NtGdiDDCCISaveCurrentSettings@4 +NtGdiDDCCIGetCapabilitiesStringLength@8 +NtGdiDDCCIGetCapabilitiesString@12 +NtGdiDDCCIGetTimingReport@8 +NtUserSetMirrorRendering@8 +NtUserShowSystemCursor@4 diff --git a/rostests/apitests/w32kdll/w32kdll_vista/w32kdll_vista.rbuild b/rostests/apitests/w32kdll/w32kdll_vista/w32kdll_vista.rbuild index 68c9b18d23b..30c5441cbea 100644 --- a/rostests/apitests/w32kdll/w32kdll_vista/w32kdll_vista.rbuild +++ b/rostests/apitests/w32kdll/w32kdll_vista/w32kdll_vista.rbuild @@ -1,5 +1,10 @@ - - w32kdll_vista.S + + + w32kdll_vista.S + + + w32kdll_vista-amd64.S + main.c diff --git a/rostests/apitests/w32knapi/w32knapi.c b/rostests/apitests/w32knapi/w32knapi.c index 28240e210bb..96ae78ca2a4 100644 --- a/rostests/apitests/w32knapi/w32knapi.c +++ b/rostests/apitests/w32knapi/w32knapi.c @@ -49,8 +49,9 @@ GetHandleUserData(HGDIOBJ hobj) static DWORD WINAPI IntSyscall(FARPROC proc, UINT cParams, PVOID pFirstParam) { - DWORD retval; + DWORD retval = 0; +#ifdef _M_I386 #ifdef __GNUC__ asm volatile ( @@ -81,6 +82,7 @@ IntSyscall(FARPROC proc, UINT cParams, PVOID pFirstParam) mov retval, eax popf }; +#endif #endif return retval; diff --git a/rostests/apitests/w32knapi/w32knapi.rbuild b/rostests/apitests/w32knapi/w32knapi.rbuild index 4574c831e22..a1acecf9574 100644 --- a/rostests/apitests/w32knapi/w32knapi.rbuild +++ b/rostests/apitests/w32knapi/w32knapi.rbuild @@ -1,4 +1,4 @@ - + . apitest ntdll diff --git a/rostests/dxtest/win32kdxtest/dump.c b/rostests/dxtest/win32kdxtest/dump.c index 9598030d2a8..b0ce35b5d43 100644 --- a/rostests/dxtest/win32kdxtest/dump.c +++ b/rostests/dxtest/win32kdxtest/dump.c @@ -120,7 +120,7 @@ dump_halinfo(DD_HALINFO *pHalInfo, char *text) printf(" pHalInfo4->vmiData->dwTextureAlign : 0x%08lx\n",(long)pHalInfo4->vmiData.dwTextureAlign); printf(" pHalInfo4->vmiData->dwZBufferAlign : 0x%08lx\n",(long)pHalInfo4->vmiData.dwZBufferAlign); printf(" pHalInfo4->vmiData->dwAlphaAlign : 0x%08lx\n",(long)pHalInfo4->vmiData.dwAlphaAlign); - printf(" pHalInfo4->vmiData->pvPrimary : 0x%08lx\n",(long)pHalInfo4->vmiData.pvPrimary); + printf(" pHalInfo4->vmiData->pvPrimary : 0x%08lx\n",(LONG_PTR)pHalInfo4->vmiData.pvPrimary); printf(" pHalInfo4->ddCaps.dwSize : 0x%08lx\n",pHalInfo4->ddCaps.dwSize); printf(" pHalInfo4->ddCaps.dwCaps : 0x%08lx\n",pHalInfo4->ddCaps.dwCaps); @@ -188,7 +188,7 @@ dump_halinfo(DD_HALINFO *pHalInfo, char *text) printf(" pHalInfo4->ddCaps.dwSVBCaps2 : 0x%08lx\n",pHalInfo4->ddCaps.dwSVBCaps2); - printf(" pHalInfo4->GetDriverInfo : 0x%08lx\n",(long)pHalInfo4->GetDriverInfo); + printf(" pHalInfo4->GetDriverInfo : 0x%08lx\n",(LONG_PTR)pHalInfo4->GetDriverInfo); printf(" pHalInfo4->dwFlags : 0x%08lx\n",(long)pHalInfo4->dwFlags); } @@ -222,7 +222,7 @@ dump_halinfo(DD_HALINFO *pHalInfo, char *text) printf(" pHalInfo->vmiData->dwTextureAlign : 0x%08lx\n",(long)pHalInfo->vmiData.dwTextureAlign); printf(" pHalInfo->vmiData->dwZBufferAlign : 0x%08lx\n",(long)pHalInfo->vmiData.dwZBufferAlign); printf(" pHalInfo->vmiData->dwAlphaAlign : 0x%08lx\n",(long)pHalInfo->vmiData.dwAlphaAlign); - printf(" pHalInfo->vmiData->pvPrimary : 0x%08lx\n",(long)pHalInfo->vmiData.pvPrimary); + printf(" pHalInfo->vmiData->pvPrimary : 0x%08lx\n",(LONG_PTR)pHalInfo->vmiData.pvPrimary); printf(" pHalInfo->ddCaps.dwSize : 0x%08lx\n",pHalInfo->ddCaps.dwSize); printf(" pHalInfo->ddCaps.dwCaps : "); @@ -519,7 +519,7 @@ dump_halinfo(DD_HALINFO *pHalInfo, char *text) printf(" pHalInfo->ddCaps.dwSSBRops[0x%04x] : 0x%08lx\n",t,pHalInfo->ddCaps.dwSSBRops[t]); } - printf(" pHalInfo->GetDriverInfo : 0x%08lx\n",(long)pHalInfo->GetDriverInfo); + printf(" pHalInfo->GetDriverInfo : 0x%08lx\n",(LONG_PTR)pHalInfo->GetDriverInfo); printf(" pHalInfo->dwFlags : "); flag = pHalInfo->dwFlags; @@ -530,9 +530,9 @@ dump_halinfo(DD_HALINFO *pHalInfo, char *text) checkflag(flag,DDHALINFO_GETDRIVERINFO2,"DDHALINFO_GETDRIVERINFO2"); endcheckflag(flag,"pHalInfo->dwFlags"); - printf(" pHalInfo->lpD3DGlobalDriverData : 0x%08lx\n",(long)pHalInfo->lpD3DGlobalDriverData); - printf(" pHalInfo->lpD3DHALCallbacks : 0x%08lx\n",(long)pHalInfo->lpD3DHALCallbacks); - printf(" pHalInfo->lpD3DBufCallbacks : 0x%08lx\n",(long)pHalInfo->lpD3DBufCallbacks); + printf(" pHalInfo->lpD3DGlobalDriverData : 0x%08lx\n",(LONG_PTR)pHalInfo->lpD3DGlobalDriverData); + printf(" pHalInfo->lpD3DHALCallbacks : 0x%08lx\n",(LONG_PTR)pHalInfo->lpD3DHALCallbacks); + printf(" pHalInfo->lpD3DBufCallbacks : 0x%08lx\n",(LONG_PTR)pHalInfo->lpD3DBufCallbacks); } else { @@ -554,31 +554,31 @@ dump_D3dCallbacks(D3DNTHAL_CALLBACKS *puD3dCallbacks, char *text) printf("dumping the D3DNTHAL_CALLBACKS from %s\n",text); if (puD3dCallbacks->dwSize == sizeof(D3DNTHAL_CALLBACKS)) { - printf(" puD3dCallbacks->dwSize : 0x%08lx\n",(long)puD3dCallbacks->dwSize); - printf(" puD3dCallbacks->ContextCreate : 0x%08lx\n",(long)puD3dCallbacks->ContextCreate); - printf(" puD3dCallbacks->ContextDestroy : 0x%08lx\n",(long)puD3dCallbacks->ContextDestroy); - printf(" puD3dCallbacks->ContextDestroyAll : 0x%08lx\n",(long)puD3dCallbacks->ContextDestroyAll); - printf(" puD3dCallbacks->SceneCapture : 0x%08lx\n",(long)puD3dCallbacks->SceneCapture); - printf(" puD3dCallbacks->dwReserved10 : 0x%08lx\n",(long)puD3dCallbacks->dwReserved10); - printf(" puD3dCallbacks->dwReserved11 : 0x%08lx\n",(long)puD3dCallbacks->dwReserved11); - printf(" puD3dCallbacks->dwReserved22 : 0x%08lx\n",(long)puD3dCallbacks->dwReserved22); - printf(" puD3dCallbacks->dwReserved23 : 0x%08lx\n",(long)puD3dCallbacks->dwReserved23); - printf(" puD3dCallbacks->dwReserved : 0x%08lx\n",(long)puD3dCallbacks->dwReserved); - printf(" puD3dCallbacks->TextureCreate : 0x%08lx\n",(long)puD3dCallbacks->TextureCreate); - printf(" puD3dCallbacks->TextureDestroy : 0x%08lx\n",(long)puD3dCallbacks->TextureDestroy); - printf(" puD3dCallbacks->TextureSwap : 0x%08lx\n",(long)puD3dCallbacks->TextureSwap); - printf(" puD3dCallbacks->TextureGetSurf : 0x%08lx\n",(long)puD3dCallbacks->TextureGetSurf); - printf(" puD3dCallbacks->dwReserved12 : 0x%08lx\n",(long)puD3dCallbacks->dwReserved12); - printf(" puD3dCallbacks->dwReserved13 : 0x%08lx\n",(long)puD3dCallbacks->dwReserved13); - printf(" puD3dCallbacks->dwReserved14 : 0x%08lx\n",(long)puD3dCallbacks->dwReserved14); - printf(" puD3dCallbacks->dwReserved15 : 0x%08lx\n",(long)puD3dCallbacks->dwReserved15); - printf(" puD3dCallbacks->dwReserved16 : 0x%08lx\n",(long)puD3dCallbacks->dwReserved16); - printf(" puD3dCallbacks->dwReserved17 : 0x%08lx\n",(long)puD3dCallbacks->dwReserved17); - printf(" puD3dCallbacks->dwReserved18 : 0x%08lx\n",(long)puD3dCallbacks->dwReserved18); - printf(" puD3dCallbacks->dwReserved19 : 0x%08lx\n",(long)puD3dCallbacks->dwReserved19); - printf(" puD3dCallbacks->dwReserved20 : 0x%08lx\n",(long)puD3dCallbacks->dwReserved20); - printf(" puD3dCallbacks->dwReserved21 : 0x%08lx\n",(long)puD3dCallbacks->dwReserved21); - printf(" puD3dCallbacks->dwReserved24 : 0x%08lx\n",(long)puD3dCallbacks->dwReserved24); + printf(" puD3dCallbacks->dwSize : 0x%08lx\n",puD3dCallbacks->dwSize); + printf(" puD3dCallbacks->ContextCreate : 0x%08lx\n",puD3dCallbacks->ContextCreate); + printf(" puD3dCallbacks->ContextDestroy : 0x%08lx\n",puD3dCallbacks->ContextDestroy); + printf(" puD3dCallbacks->ContextDestroyAll : 0x%08lx\n",puD3dCallbacks->ContextDestroyAll); + printf(" puD3dCallbacks->SceneCapture : 0x%08lx\n",puD3dCallbacks->SceneCapture); + printf(" puD3dCallbacks->dwReserved10 : 0x%08lx\n",puD3dCallbacks->dwReserved10); + printf(" puD3dCallbacks->dwReserved11 : 0x%08lx\n",puD3dCallbacks->dwReserved11); + printf(" puD3dCallbacks->dwReserved22 : 0x%08lx\n",puD3dCallbacks->dwReserved22); + printf(" puD3dCallbacks->dwReserved23 : 0x%08lx\n",puD3dCallbacks->dwReserved23); + printf(" puD3dCallbacks->dwReserved : 0x%08lx\n",puD3dCallbacks->dwReserved); + printf(" puD3dCallbacks->TextureCreate : 0x%08lx\n",puD3dCallbacks->TextureCreate); + printf(" puD3dCallbacks->TextureDestroy : 0x%08lx\n",puD3dCallbacks->TextureDestroy); + printf(" puD3dCallbacks->TextureSwap : 0x%08lx\n",puD3dCallbacks->TextureSwap); + printf(" puD3dCallbacks->TextureGetSurf : 0x%08lx\n",puD3dCallbacks->TextureGetSurf); + printf(" puD3dCallbacks->dwReserved12 : 0x%08lx\n",puD3dCallbacks->dwReserved12); + printf(" puD3dCallbacks->dwReserved13 : 0x%08lx\n",puD3dCallbacks->dwReserved13); + printf(" puD3dCallbacks->dwReserved14 : 0x%08lx\n",puD3dCallbacks->dwReserved14); + printf(" puD3dCallbacks->dwReserved15 : 0x%08lx\n",puD3dCallbacks->dwReserved15); + printf(" puD3dCallbacks->dwReserved16 : 0x%08lx\n",puD3dCallbacks->dwReserved16); + printf(" puD3dCallbacks->dwReserved17 : 0x%08lx\n",puD3dCallbacks->dwReserved17); + printf(" puD3dCallbacks->dwReserved18 : 0x%08lx\n",puD3dCallbacks->dwReserved18); + printf(" puD3dCallbacks->dwReserved19 : 0x%08lx\n",puD3dCallbacks->dwReserved19); + printf(" puD3dCallbacks->dwReserved20 : 0x%08lx\n",puD3dCallbacks->dwReserved20); + printf(" puD3dCallbacks->dwReserved21 : 0x%08lx\n",puD3dCallbacks->dwReserved21); + printf(" puD3dCallbacks->dwReserved24 : 0x%08lx\n",puD3dCallbacks->dwReserved24); printf(" puD3dCallbacks->dwReserved0 : 0x%08lx\n",(long)puD3dCallbacks->dwReserved0); printf(" puD3dCallbacks->dwReserved1 : 0x%08lx\n",(long)puD3dCallbacks->dwReserved1); printf(" puD3dCallbacks->dwReserved2 : 0x%08lx\n",(long)puD3dCallbacks->dwReserved2); @@ -1112,8 +1112,8 @@ dump_D3dDriverData(D3DNTHAL_GLOBALDRIVERDATA *puD3dDriverData, char *text) printf(" puD3dDriverData->dwNumVertices : 0x%08lx\n",(long)puD3dDriverData->dwNumVertices); printf(" puD3dDriverData->dwNumClipVertices : 0x%08lx\n",(long)puD3dDriverData->dwNumClipVertices); printf(" puD3dDriverData->dwNumTextureFormats : 0x%08lx\n",(long)puD3dDriverData->dwNumTextureFormats); - printf(" puD3dDriverData->lpTextureFormats : 0x%08lx\n",(long)puD3dDriverData->lpTextureFormats); - printf(" puD3dDriverData->lpTextureFormats : 0x%08lx\n",(long)puD3dDriverData->lpTextureFormats); + printf(" puD3dDriverData->lpTextureFormats : 0x%08lx\n",puD3dDriverData->lpTextureFormats); + printf(" puD3dDriverData->lpTextureFormats : 0x%08lx\n",puD3dDriverData->lpTextureFormats); } else { @@ -1147,11 +1147,11 @@ dump_D3dBufferCallbacks(DD_D3DBUFCALLBACKS *puD3dBufferCallbacks, char *text) checkflag(flag,DDHAL_D3DBUFCB32_UNLOCKD3DBUF,"DDHAL_D3DBUFCB32_UNLOCKD3DBUF"); endcheckflag(flag,"puD3dBufferCallbacks->dwFlags"); - printf(" puD3dBufferCallbacks->CanCreateD3DBuffer : 0x%08lx\n",(long)puD3dBufferCallbacks->CanCreateD3DBuffer); - printf(" puD3dBufferCallbacks->CreateD3DBuffer : 0x%08lx\n",(long)puD3dBufferCallbacks->CreateD3DBuffer); - printf(" puD3dBufferCallbacks->DestroyD3DBuffer : 0x%08lx\n",(long)puD3dBufferCallbacks->DestroyD3DBuffer); - printf(" puD3dBufferCallbacks->LockD3DBuffer : 0x%08lx\n",(long)puD3dBufferCallbacks->LockD3DBuffer); - printf(" puD3dBufferCallbacks->UnlockD3DBuffer : 0x%08lx\n",(long)puD3dBufferCallbacks->UnlockD3DBuffer); + printf(" puD3dBufferCallbacks->CanCreateD3DBuffer : 0x%08lx\n",puD3dBufferCallbacks->CanCreateD3DBuffer); + printf(" puD3dBufferCallbacks->CreateD3DBuffer : 0x%08lx\n",puD3dBufferCallbacks->CreateD3DBuffer); + printf(" puD3dBufferCallbacks->DestroyD3DBuffer : 0x%08lx\n",puD3dBufferCallbacks->DestroyD3DBuffer); + printf(" puD3dBufferCallbacks->LockD3DBuffer : 0x%08lx\n",puD3dBufferCallbacks->LockD3DBuffer); + printf(" puD3dBufferCallbacks->UnlockD3DBuffer : 0x%08lx\n",puD3dBufferCallbacks->UnlockD3DBuffer); } else { @@ -1205,7 +1205,7 @@ dump_D3dTextureFormats(DDSURFACEDESC *puD3dTextureFormats, int dwNum, char *text printf(" puD3dTextureFormats->dwZBufferBitDepth : 0x%08lx\n",(long)myTextureFormats->dwZBufferBitDepth); printf(" puD3dTextureFormats->dwAlphaBitDepth : 0x%08lx\n",(long)myTextureFormats->dwAlphaBitDepth); printf(" puD3dTextureFormats->dwReserved : 0x%08lx\n",(long)myTextureFormats->dwReserved); - printf(" puD3dTextureFormats->lpSurface : 0x%08lx\n",(long)myTextureFormats->lpSurface); + printf(" puD3dTextureFormats->lpSurface : 0x%08lx\n",myTextureFormats->lpSurface); printf(" puD3dTextureFormats->ddckCKDestOverlay.dwColorSpaceLowValue : 0x%08lx\n",(long)myTextureFormats->ddckCKDestOverlay.dwColorSpaceLowValue); printf(" puD3dTextureFormats->ddckCKDestOverlay.dwColorSpaceHighValue : 0x%08lx\n",(long)myTextureFormats->ddckCKDestOverlay.dwColorSpaceHighValue); printf(" puD3dTextureFormats->ddckCKDestBlt.dwColorSpaceLowValue : 0x%08lx\n",(long)myTextureFormats->ddckCKDestBlt.dwColorSpaceLowValue); @@ -1414,7 +1414,7 @@ dump_D3dTextureFormats(DDSURFACEDESC *puD3dTextureFormats, int dwNum, char *text endcheckflag(flag,"puD3dTextureFormats->ddsCaps.dwCaps"); - myTextureFormats = (DDSURFACEDESC *) (((DWORD) myTextureFormats) + sizeof(DDSURFACEDESC)); + myTextureFormats = (DDSURFACEDESC *) (((DWORD_PTR) myTextureFormats) + sizeof(DDSURFACEDESC)); } else { diff --git a/rostests/dxtest/win32kdxtest/test.h b/rostests/dxtest/win32kdxtest/test.h index 7180ad6c689..9544ba484b3 100644 --- a/rostests/dxtest/win32kdxtest/test.h +++ b/rostests/dxtest/win32kdxtest/test.h @@ -25,7 +25,7 @@ void dump_D3dTextureFormats(DDSURFACEDESC *puD3dTextureFormats, int dwNum, char if (input == value) \ { \ counter++; \ - printf("FAIL ret=%s, %d != %d )\n",text,(int)input,(int)value); \ + printf("FAIL ret=%s, %x != %x )\n",text,input,value); \ } @@ -33,7 +33,7 @@ void dump_D3dTextureFormats(DDSURFACEDESC *puD3dTextureFormats, int dwNum, char if (input != value) \ { \ counter++; \ - printf("FAIL ret=%s, %d == %d )\n",text,(int)input,(int)value); \ + printf("FAIL ret=%s, %x == %x )\n",text,input,value); \ } diff --git a/rostests/tests/primitives/primitives.cpp b/rostests/tests/primitives/primitives.cpp index df617568aa9..622c86dd9be 100644 --- a/rostests/tests/primitives/primitives.cpp +++ b/rostests/tests/primitives/primitives.cpp @@ -186,8 +186,8 @@ LRESULT CALLBACK MainWndProc(HWND hWnd, UINT msg, WPARAM wParam, ); assert(hListBox != NULL); - SetWindowLong( - hListBox, GWL_ID, reinterpret_cast(hListBox) + SetWindowLongPtr( + hListBox, GWL_ID, reinterpret_cast(hListBox) ); SNDMSG(hListBox, LB_ADDSTRING, 0, @@ -238,7 +238,7 @@ LRESULT CALLBACK MainWndProc(HWND hWnd, UINT msg, WPARAM wParam, reinterpret_cast(lParam); assert(lpmis != NULL); - if (lpmis->CtlID == reinterpret_cast(hListBox)) + if (lpmis->CtlID == reinterpret_cast(hListBox)) { lpmis->itemHeight = 150; return TRUE; @@ -251,7 +251,7 @@ LRESULT CALLBACK MainWndProc(HWND hWnd, UINT msg, WPARAM wParam, reinterpret_cast(lParam); assert(lpdis != NULL); - if (lpdis->CtlID == reinterpret_cast(hListBox)) + if (lpdis->CtlID == reinterpret_cast(hListBox)) { SaveDC(lpdis->hDC); #if 0 diff --git a/rostests/tests/subclass/subclass.c b/rostests/tests/subclass/subclass.c index 63c4f0e568c..63a54f9933b 100644 --- a/rostests/tests/subclass/subclass.c +++ b/rostests/tests/subclass/subclass.c @@ -74,17 +74,17 @@ WinMain(HINSTANCE hInstance, printf("GetWindowTextA returned Ansi string \"%s\"\n", WindowTextA); printf("\n"); - SavedWndProcW = (WNDPROC) GetWindowLongW(hWnd, GWL_WNDPROC); + SavedWndProcW = (WNDPROC) GetWindowLongPtrW(hWnd, GWL_WNDPROC); printf("GetWindowLongW returned 0x%p\n", SavedWndProcW); - SavedWndProcA = (WNDPROC) GetWindowLongA(hWnd, GWL_WNDPROC); + SavedWndProcA = (WNDPROC) GetWindowLongPtrA(hWnd, GWL_WNDPROC); printf("GetWindowLongA returned 0x%p\n", SavedWndProcA); printf("\n"); printf("Subclassing window using SetWindowLongW, new WndProc 0x%p\n", UnicodeSubclassProc); - SetWindowLongW(hWnd, GWL_WNDPROC, (LONG) UnicodeSubclassProc); + SetWindowLongPtrW(hWnd, GWL_WNDPROC, (LPARAM) UnicodeSubclassProc); printf("After subclass, IsWindowUnicode %s, WndProcA 0x%lx, WndProcW 0x%lx\n", - IsWindowUnicode(hWnd) ? "TRUE" : "FALSE", GetWindowLongA(hWnd, GWL_WNDPROC), - GetWindowLongW(hWnd, GWL_WNDPROC)); + IsWindowUnicode(hWnd) ? "TRUE" : "FALSE", GetWindowLongPtrA(hWnd, GWL_WNDPROC), + GetWindowLongPtrW(hWnd, GWL_WNDPROC)); printf("Calling GetWindowTextW\n"); if (! GetWindowTextW(hWnd, WindowTextW, sizeof(WindowTextW) / sizeof(WindowTextW[0]))) @@ -96,10 +96,10 @@ WinMain(HINSTANCE hInstance, printf("\n"); printf("Subclassing window using SetWindowLongA, new WndProc 0x%p\n", AnsiSubclassProc); - SetWindowLongA(hWnd, GWL_WNDPROC, (LONG) AnsiSubclassProc); + SetWindowLongPtrA(hWnd, GWL_WNDPROC, (LPARAM) AnsiSubclassProc); printf("After subclass, IsWindowUnicode %s, WndProcA 0x%lx, WndProcW 0x%lx\n", - IsWindowUnicode(hWnd) ? "TRUE" : "FALSE", GetWindowLongA(hWnd, GWL_WNDPROC), - GetWindowLongW(hWnd, GWL_WNDPROC)); + IsWindowUnicode(hWnd) ? "TRUE" : "FALSE", GetWindowLongPtrA(hWnd, GWL_WNDPROC), + GetWindowLongPtrW(hWnd, GWL_WNDPROC)); printf("Calling GetWindowTextW\n"); if (! GetWindowTextW(hWnd, WindowTextW, sizeof(WindowTextW) / sizeof(WindowTextW[0]))) diff --git a/rostests/tests/suspend/suspend.c b/rostests/tests/suspend/suspend.c index 93b9a833dca..bda4db763ad 100644 --- a/rostests/tests/suspend/suspend.c +++ b/rostests/tests/suspend/suspend.c @@ -62,7 +62,11 @@ main(int argc, char *argv[]) Sleep(100);x++; if(x>100 && GetThreadContext(thread, &context)) { +#ifdef _M_AMD64 + printf("EIP: %lx\n", context.Rip); +#else printf("EIP: %lx\n", context.Eip); +#endif printf("Calling resumethread ... \n"); ResumeThread(thread); } diff --git a/rostests/tests/thread/thread.c b/rostests/tests/thread/thread.c index d9062645be7..27c3015f2b4 100644 --- a/rostests/tests/thread/thread.c +++ b/rostests/tests/thread/thread.c @@ -17,12 +17,12 @@ DWORD WINAPI thread_main1(LPVOID param) { ULONG s; - printf("Thread %ld running\n", (DWORD)param); + printf("Thread %x running\n", param); s = nr = ((nr * 1103515245) + 12345) & 0x7fffffff; s = s % 10; printf("s %ld\n", s); Sleep(s); - printf("Thread %ld finished\n", (DWORD)param); + printf("Thread %x finished\n", param); return 0; } @@ -62,7 +62,7 @@ int main (int argc, char* argv[]) ThreadHandle[i] = CreateThread(NULL, 0, thread_main1, - (LPVOID)i, + (LPVOID)(ULONG_PTR)i, CREATE_SUSPENDED, &id); diff --git a/rostests/tests/tmrqueue/tmrqueue.c b/rostests/tests/tmrqueue/tmrqueue.c index 0e58393bc03..4b96bc49f8c 100644 --- a/rostests/tests/tmrqueue/tmrqueue.c +++ b/rostests/tests/tmrqueue/tmrqueue.c @@ -120,7 +120,7 @@ VOID CALLBACK TimerCallback1(PVOID Param, BOOLEAN Fired) { PTESTINFO Info = (PTESTINFO)Param; - _tprintf(_T("[%d]TimerCallback(0x%x, %d) called (%d)\n"), (int)Info->Test->id, (int)Info->hTimer, (int)Fired, --Info->secsleft); + _tprintf(_T("[%d]TimerCallback(0x%x, %d) called (%d)\n"), (int)Info->Test->id, Info->hTimer, (int)Fired, --Info->secsleft); if(Info->secsleft == 0) { @@ -168,7 +168,7 @@ VOID Test1(PTEST Test, HANDLE hEvent) return; } - _tprintf(_T("[%d]CreateTimerQueueTimer() created timer 0x%x, countdown (%d sec)...\n"), (int)Info.Test->id, (int)Info.hTimer, (int)Info.secsleft); + _tprintf(_T("[%d]CreateTimerQueueTimer() created timer 0x%x, countdown (%d sec)...\n"), (int)Info.Test->id, Info.hTimer, (int)Info.secsleft); } /*******************************************************************************/ @@ -177,7 +177,7 @@ VOID CALLBACK TimerCallback2(PVOID Param, BOOLEAN Fired) { PTESTINFO Info = (PTESTINFO)Param; - _tprintf(_T("[%d]TimerCallback(0x%x, %d) called (%d)\n"), (int)Info->Test->id, (int)Info->hTimer, (int)Fired, --Info->secsleft); + _tprintf(_T("[%d]TimerCallback(0x%x, %d) called (%d)\n"), (int)Info->Test->id, Info->hTimer, (int)Fired, --Info->secsleft); if(Info->secsleft == 0) { @@ -215,7 +215,7 @@ VOID Test2(PTEST Test, HANDLE hEvent) return; } - _tprintf(_T("[%d]CreateTimerQueueTimer() created timer 0x%x, countdown (%d sec)...\n"), (int)Test->id, (int)Info.hTimer, (int)Info.secsleft); + _tprintf(_T("[%d]CreateTimerQueueTimer() created timer 0x%x, countdown (%d sec)...\n"), (int)Test->id, Info.hTimer, (int)Info.secsleft); WaitForSingleObject(Info.Test2.hWaitEvent, INFINITE); @@ -251,7 +251,7 @@ VOID CALLBACK TimerCallback3(PVOID Param, BOOLEAN Fired) { PTESTINFO Info = (PTESTINFO)Param; - _tprintf(_T("[%d]TimerCallback(0x%x, %d) called (%d)\n"), (int)Info->Test->id, (int)Info->hTimer, (int)Fired, --Info->secsleft); + _tprintf(_T("[%d]TimerCallback(0x%x, %d) called (%d)\n"), (int)Info->Test->id, Info->hTimer, (int)Fired, --Info->secsleft); if(Info->secsleft == 0) { @@ -297,7 +297,7 @@ VOID Test3(PTEST Test, HANDLE hEvent) return; } - _tprintf(_T("[%d]CreateTimerQueueTimer() created timer 0x%x, countdown (%d sec)...\n"), (int)Test->id, (int)Info.hTimer, (int)Info.secsleft); + _tprintf(_T("[%d]CreateTimerQueueTimer() created timer 0x%x, countdown (%d sec)...\n"), (int)Test->id, Info.hTimer, (int)Info.secsleft); WaitForSingleObject(Info.Test3.hWaitEvent, INFINITE); From fee45191b7484cdd778c042de9b8de086c44299e Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Wed, 9 Dec 2009 01:15:20 +0000 Subject: [PATCH 188/286] Fix building all rosapps modules svn path=/branches/ros-amd64-bringup/; revision=44476 --- .../devutils/syscalldump/syscalldump.c | 16 ++++++++-------- .../devutils/vgafontedit/editglyphdlg.c | 12 ++++++------ .../devutils/vgafontedit/fontboxeswnd.c | 4 ++-- .../applications/devutils/vgafontedit/fontwnd.c | 4 ++-- .../applications/devutils/vgafontedit/mainwnd.c | 4 ++-- .../applications/net/roshttpd/common/list.cpp | 2 +- rosapps/applications/net/roshttpd/include/list.h | 2 +- .../applications/net/tditest/tditest/tditest.c | 8 ++++---- .../screensavers/starfield/screensaver.c | 2 +- rosapps/applications/sysutils/pedump/pedump.c | 2 +- .../applications/sysutils/pedump/pedump.rbuild | 2 +- rosapps/applications/sysutils/tlist/tlist.c | 12 ++++++------ rosapps/applications/sysutils/tlist/tlist.rbuild | 2 +- .../applications/sysutils/utils/stats/stats.c | 4 ++-- 14 files changed, 38 insertions(+), 38 deletions(-) diff --git a/rosapps/applications/devutils/syscalldump/syscalldump.c b/rosapps/applications/devutils/syscalldump/syscalldump.c index 0407e685cbe..2a6e89902f1 100644 --- a/rosapps/applications/devutils/syscalldump/syscalldump.c +++ b/rosapps/applications/devutils/syscalldump/syscalldump.c @@ -54,7 +54,7 @@ BOOL CALLBACK EnumSymbolsProc( ULONG SymbolSize, PVOID UserContext) { - if ((UINT)UserContext == -1) + if ((UINT_PTR)UserContext == -1) { printf("%s ", pSymInfo->Name); } @@ -62,11 +62,11 @@ BOOL CALLBACK EnumSymbolsProc( { if (!bX64) { - printf("%s@%d ", pSymInfo->Name, (UINT)UserContext); + printf("%s@%p ", pSymInfo->Name, UserContext); } else { - printf("%s <+ %d> ", pSymInfo->Name, (UINT)UserContext); + printf("%s <+ %p> ", pSymInfo->Name, UserContext); } } return TRUE; @@ -153,9 +153,9 @@ cont: pW32pServiceTable = ImageSymToVa(hProcess, &Sym.Symbol, pModule, "W32pServiceTable"); pW32pServiceLimit = ImageSymToVa(hProcess, &Sym.Symbol, pModule, "W32pServiceLimit"); pW32pArgumentTable = ImageSymToVa(hProcess, &Sym.Symbol, pModule, "W32pArgumentTable"); -// printf("pW32pServiceTable = %p\n", pW32pServiceTable); -// printf("pW32pServiceLimit = %p\n", pW32pServiceLimit); -// printf("pW32pArgumentTable = %p\n", pW32pArgumentTable); + printf("pW32pServiceTable = %p\n", pW32pServiceTable); + printf("pW32pServiceLimit = %p\n", pW32pServiceLimit); + printf("pW32pArgumentTable = %p\n", pW32pArgumentTable); if (!pW32pServiceTable || !pW32pServiceLimit || !pW32pArgumentTable) { @@ -172,7 +172,7 @@ cont: for (i = 0; i < dwServiceLimit; i++) { printf("0x%x:", i+0x1000); - SymEnumSymbolsForAddr(hProcess, (DWORD64)pdwEntries32[i], EnumSymbolsProc, (PVOID)(DWORD)pW32pArgumentTable[i]); + SymEnumSymbolsForAddr(hProcess, (DWORD64)pdwEntries32[i], EnumSymbolsProc, (PVOID)(DWORD_PTR)pW32pArgumentTable[i]); printf("\n"); } } @@ -183,7 +183,7 @@ cont: for (i = 0; i < dwServiceLimit; i++) { printf("0x%x:", i+0x1000); - SymEnumSymbolsForAddr(hProcess, (DWORD64)pdwEntries64[i], EnumSymbolsProc, (PVOID)(DWORD)pW32pArgumentTable[i]); + SymEnumSymbolsForAddr(hProcess, (DWORD64)pdwEntries64[i], EnumSymbolsProc, (PVOID)(DWORD_PTR)pW32pArgumentTable[i]); printf("\n"); } } diff --git a/rosapps/applications/devutils/vgafontedit/editglyphdlg.c b/rosapps/applications/devutils/vgafontedit/editglyphdlg.c index 634554efcbd..c51bc10d929 100644 --- a/rosapps/applications/devutils/vgafontedit/editglyphdlg.c +++ b/rosapps/applications/devutils/vgafontedit/editglyphdlg.c @@ -121,7 +121,7 @@ EditGlyphDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { PEDIT_GLYPH_INFO Info; - Info = (PEDIT_GLYPH_INFO) GetWindowLongW(hwnd, GWLP_USERDATA); + Info = (PEDIT_GLYPH_INFO) GetWindowLongPtrW(hwnd, GWLP_USERDATA); if(Info || uMsg == WM_INITDIALOG) { @@ -136,9 +136,9 @@ EditGlyphDlgProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) Info->hEdit = GetDlgItem(hwnd, IDC_EDIT_GLYPH_EDIT); Info->hPreview = GetDlgItem(hwnd, IDC_EDIT_GLYPH_PREVIEW); - SetWindowLongW(hwnd, GWLP_USERDATA, (LONG)Info); - SetWindowLongW(Info->hEdit, GWLP_USERDATA, (LONG)Info); - SetWindowLongW(Info->hPreview, GWLP_USERDATA, (LONG)Info); + SetWindowLongPtrW(hwnd, GWLP_USERDATA, (LONG_PTR)Info); + SetWindowLongPtrW(Info->hEdit, GWLP_USERDATA, (LONG_PTR)Info); + SetWindowLongPtrW(Info->hPreview, GWLP_USERDATA, (LONG_PTR)Info); InitToolbox(Info); @@ -154,7 +154,7 @@ EditGlyphEditWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { PEDIT_GLYPH_INFO Info; - Info = (PEDIT_GLYPH_INFO) GetWindowLongW(hwnd, GWLP_USERDATA); + Info = (PEDIT_GLYPH_INFO) GetWindowLongPtrW(hwnd, GWLP_USERDATA); if(Info) { @@ -232,7 +232,7 @@ EditGlyphPreviewWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { PEDIT_GLYPH_INFO Info; - Info = (PEDIT_GLYPH_INFO) GetWindowLongW(hwnd, GWLP_USERDATA); + Info = (PEDIT_GLYPH_INFO) GetWindowLongPtrW(hwnd, GWLP_USERDATA); if(Info) { diff --git a/rosapps/applications/devutils/vgafontedit/fontboxeswnd.c b/rosapps/applications/devutils/vgafontedit/fontboxeswnd.c index 1dcfeee68f4..9032758b3a1 100644 --- a/rosapps/applications/devutils/vgafontedit/fontboxeswnd.c +++ b/rosapps/applications/devutils/vgafontedit/fontboxeswnd.c @@ -250,7 +250,7 @@ FontBoxesWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { PFONT_WND_INFO Info; - Info = (PFONT_WND_INFO) GetWindowLongW(hwnd, GWLP_USERDATA); + Info = (PFONT_WND_INFO) GetWindowLongPtrW(hwnd, GWLP_USERDATA); if(Info || uMsg == WM_CREATE) { @@ -258,7 +258,7 @@ FontBoxesWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { case WM_CREATE: Info = (PFONT_WND_INFO)( ( (LPCREATESTRUCT)lParam )->lpCreateParams ); - SetWindowLongW(hwnd, GWLP_USERDATA, (LONG)Info); + SetWindowLongPtrW(hwnd, GWLP_USERDATA, (LONG_PTR)Info); // Set a fixed window size SetWindowPos(hwnd, NULL, 0, 0, FONT_BOXES_WND_WIDTH, FONT_BOXES_WND_HEIGHT, SWP_NOZORDER | SWP_NOMOVE); diff --git a/rosapps/applications/devutils/vgafontedit/fontwnd.c b/rosapps/applications/devutils/vgafontedit/fontwnd.c index edd6dd53dfe..d87aa2ffef5 100644 --- a/rosapps/applications/devutils/vgafontedit/fontwnd.c +++ b/rosapps/applications/devutils/vgafontedit/fontwnd.c @@ -99,7 +99,7 @@ FontWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { PFONT_WND_INFO Info; - Info = (PFONT_WND_INFO) GetWindowLongW(hwnd, GWLP_USERDATA); + Info = (PFONT_WND_INFO) GetWindowLongPtrW(hwnd, GWLP_USERDATA); if(Info || uMsg == WM_CREATE) { @@ -115,7 +115,7 @@ FontWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) Info = (PFONT_WND_INFO)( ( (LPMDICREATESTRUCT) ( (LPCREATESTRUCT)lParam )->lpCreateParams )->lParam ); Info->hSelf = hwnd; - SetWindowLongW(hwnd, GWLP_USERDATA, (LONG)Info); + SetWindowLongPtrW(hwnd, GWLP_USERDATA, (LONG_PTR)Info); CreateFontBoxesWindow(Info); diff --git a/rosapps/applications/devutils/vgafontedit/mainwnd.c b/rosapps/applications/devutils/vgafontedit/mainwnd.c index 38a2bcc4f2b..5c79617ced4 100644 --- a/rosapps/applications/devutils/vgafontedit/mainwnd.c +++ b/rosapps/applications/devutils/vgafontedit/mainwnd.c @@ -443,7 +443,7 @@ MainWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) PMAIN_WND_INFO Info; - Info = (PMAIN_WND_INFO) GetWindowLongW(hwnd, GWLP_USERDATA); + Info = (PMAIN_WND_INFO) GetWindowLongPtrW(hwnd, GWLP_USERDATA); if(Info || uMsg == WM_CREATE) { @@ -490,7 +490,7 @@ MainWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) Info = (PMAIN_WND_INFO)( ( (LPCREATESTRUCT)lParam )->lpCreateParams ); Info->hMainWnd = hwnd; Info->hMenu = GetMenu(hwnd); - SetWindowLongW(hwnd, GWLP_USERDATA, (LONG)Info); + SetWindowLongPtrW(hwnd, GWLP_USERDATA, (LONG_PTR)Info); hNextClipboardViewer = SetClipboardViewer(hwnd); diff --git a/rosapps/applications/net/roshttpd/common/list.cpp b/rosapps/applications/net/roshttpd/common/list.cpp index 29c6912cf55..d0eae4ad814 100644 --- a/rosapps/applications/net/roshttpd/common/list.cpp +++ b/rosapps/applications/net/roshttpd/common/list.cpp @@ -34,7 +34,7 @@ CListNode::CListNode(PVOID element, CListNode *next, CListNode *prev) Prev = prev; } -void* CListNode::operator new(/*size_t*/ UINT size) +void* CListNode::operator new(size_t size) { PVOID p; if (hHeap == NULL) { diff --git a/rosapps/applications/net/roshttpd/include/list.h b/rosapps/applications/net/roshttpd/include/list.h index 914d06ea2cc..cf52f31b27f 100644 --- a/rosapps/applications/net/roshttpd/include/list.h +++ b/rosapps/applications/net/roshttpd/include/list.h @@ -14,7 +14,7 @@ public: CListNode(); CListNode(VOID *element, CListNode *next, CListNode *prev); ~CListNode() {}; - void* operator new(/*size_t s*/ UINT s); + void* operator new(size_t s); VOID operator delete(void* p); VOID SetElement(PVOID element); diff --git a/rosapps/applications/net/tditest/tditest/tditest.c b/rosapps/applications/net/tditest/tditest/tditest.c index 8570f96960b..26eac61658c 100644 --- a/rosapps/applications/net/tditest/tditest/tditest.c +++ b/rosapps/applications/net/tditest/tditest/tditest.c @@ -442,7 +442,7 @@ NTSTATUS TdiQueryAddress( if (SnmpInfo.NumAddr != 1) { /* Skip loopback address */ - *Address = DN2H(((PIPADDR_ENTRY)((ULONG)IpAddress + sizeof(IPADDR_ENTRY)))->Addr); + *Address = DN2H(((PIPADDR_ENTRY)((ULONG_PTR)IpAddress + sizeof(IPADDR_ENTRY)))->Addr); } else { @@ -507,7 +507,7 @@ NTSTATUS TdiSendDatagram( RtlZeroMemory(ConnectInfo, sizeof(TDI_CONNECTION_INFORMATION) + sizeof(TA_IP_ADDRESS)); ConnectInfo->RemoteAddressLength = sizeof(TA_IP_ADDRESS); - ConnectInfo->RemoteAddress = (PUCHAR) ((ULONG)ConnectInfo + sizeof(TDI_CONNECTION_INFORMATION)); + ConnectInfo->RemoteAddress = (PUCHAR) ((ULONG_PTR)ConnectInfo + sizeof(TDI_CONNECTION_INFORMATION)); TA = (PTA_IP_ADDRESS)(ConnectInfo->RemoteAddress); TA->TAAddressCount = 1; @@ -630,9 +630,9 @@ NTSTATUS TdiReceiveDatagram( ReceiveInfo->RemoteAddressLength = 0; ReceiveInfo->RemoteAddress = NULL; - ReturnInfo = (PTDI_CONNECTION_INFORMATION) ((ULONG)ReceiveInfo + sizeof(TDI_CONNECTION_INFORMATION)); + ReturnInfo = (PTDI_CONNECTION_INFORMATION) ((ULONG_PTR)ReceiveInfo + sizeof(TDI_CONNECTION_INFORMATION)); ReturnInfo->RemoteAddressLength = sizeof(TA_IP_ADDRESS); - ReturnInfo->RemoteAddress = (PUCHAR) ((ULONG)ReturnInfo + sizeof(TDI_CONNECTION_INFORMATION)); + ReturnInfo->RemoteAddress = (PUCHAR) ((ULONG_PTR)ReturnInfo + sizeof(TDI_CONNECTION_INFORMATION)); ReturnAddress = (PTA_IP_ADDRESS)(ReturnInfo->RemoteAddress); ReturnAddress->TAAddressCount = 1; diff --git a/rosapps/applications/screensavers/starfield/screensaver.c b/rosapps/applications/screensavers/starfield/screensaver.c index ca53bf2107f..ce18c714489 100644 --- a/rosapps/applications/screensavers/starfield/screensaver.c +++ b/rosapps/applications/screensavers/starfield/screensaver.c @@ -317,7 +317,7 @@ VOID ParseCommandLine(LPWSTR szCmdLine, UCHAR *chOption, HWND *hwndParent) if(isdigit(ch)) { unsigned int i = _wtoi(szCmdLine - 1); - *hwndParent = (HWND)i; + *hwndParent = (HWND)(ULONG_PTR)i; } else *hwndParent = NULL; diff --git a/rosapps/applications/sysutils/pedump/pedump.c b/rosapps/applications/sysutils/pedump/pedump.c index 27555cb987f..327a8b6f247 100644 --- a/rosapps/applications/sysutils/pedump/pedump.c +++ b/rosapps/applications/sysutils/pedump/pedump.c @@ -1011,7 +1011,7 @@ GetModuleEntryPoint ( PIMAGE_OPTIONAL_HEADER poh = (PIMAGE_OPTIONAL_HEADER) OPTHDROFFSET (lpFile); if (poh != NULL) - return (LPVOID)(ULONG_PTR)(poh->AddressOfEntryPoint); + return (LPVOID)(poh->AddressOfEntryPoint); else return NULL; } diff --git a/rosapps/applications/sysutils/pedump/pedump.rbuild b/rosapps/applications/sysutils/pedump/pedump.rbuild index 814ed0f7293..c4129d85448 100644 --- a/rosapps/applications/sysutils/pedump/pedump.rbuild +++ b/rosapps/applications/sysutils/pedump/pedump.rbuild @@ -1,4 +1,4 @@ - + ntdll pedump.c pedump.rc diff --git a/rosapps/applications/sysutils/tlist/tlist.c b/rosapps/applications/sysutils/tlist/tlist.c index a4a87547167..49426453424 100644 --- a/rosapps/applications/sysutils/tlist/tlist.c +++ b/rosapps/applications/sysutils/tlist/tlist.c @@ -47,7 +47,7 @@ void *PsaiMalloc(SIZE_T size) NtCurrentProcess(), &pBuf, 0, - (PULONG)&size, + &size, MEM_COMMIT, PAGE_READWRITE ); @@ -58,7 +58,7 @@ void *PsaiMalloc(SIZE_T size) void PsaiFree(void *ptr) { - ULONG nSize = 0; + size_t nSize = 0; NtFreeVirtualMemory(NtCurrentProcess(), &ptr, &nSize, MEM_RELEASE); } @@ -117,7 +117,7 @@ ProcessHasDescendants ( if (NULL == pInfo) return 0; do { - if (ALREADY_PROCESSED != (DWORD)pInfo->InheritedFromUniqueProcessId) + if (ALREADY_PROCESSED != (DWORD_PTR)pInfo->InheritedFromUniqueProcessId) { if ((Pid != (HANDLE)pInfo->UniqueProcessId) && (Pid == (HANDLE)pInfo->InheritedFromUniqueProcessId)) { @@ -183,7 +183,7 @@ PrintProcessAndDescendants ( /* Scan and print possible children */ do { - if (ALREADY_PROCESSED != (DWORD)pInfo->InheritedFromUniqueProcessId) + if (ALREADY_PROCESSED != (DWORD_PTR)pInfo->InheritedFromUniqueProcessId) { if (Pid == pInfo->InheritedFromUniqueProcessId) { @@ -236,7 +236,7 @@ int WINAPI PrintProcessList (BOOL DisplayTree) } else { - if (ALREADY_PROCESSED != (DWORD)pInfo->InheritedFromUniqueProcessId) + if (ALREADY_PROCESSED != (DWORD_PTR)pInfo->InheritedFromUniqueProcessId) { PrintProcessAndDescendants (pInfo, pInfoBase, 0); } @@ -357,7 +357,7 @@ int WINAPI PrintProcess (char * PidStr) CLIENT_ID ClientId = {0, 0}; - ClientId.UniqueProcess = (PVOID) atol (PidStr); + ClientId.UniqueProcess = LongToPtr(atol (PidStr)); if (FALSE == AcquirePrivileges ()) { diff --git a/rosapps/applications/sysutils/tlist/tlist.rbuild b/rosapps/applications/sysutils/tlist/tlist.rbuild index 85797f35d60..e2c3a3d5ec7 100644 --- a/rosapps/applications/sysutils/tlist/tlist.rbuild +++ b/rosapps/applications/sysutils/tlist/tlist.rbuild @@ -1,6 +1,6 @@ epsapi - + user32 ntdll tlist.c diff --git a/rosapps/applications/sysutils/utils/stats/stats.c b/rosapps/applications/sysutils/utils/stats/stats.c index d69b81a1f3f..8940ddccb9a 100644 --- a/rosapps/applications/sysutils/utils/stats/stats.c +++ b/rosapps/applications/sysutils/utils/stats/stats.c @@ -75,14 +75,14 @@ AddExtension(LPTSTR ExtName, PEXTENSION_INFO ExtInfo; PEXTENSION_INFO Info; TCHAR *t; - DWORD ln; + size_t ln; ExtInfo = (PEXTENSION_INFO) HeapAlloc (GetProcessHeap(), 0, sizeof (EXTENSION_INFO)); if (!ExtInfo) return NULL; for(t = ExtName; *t != _T('\0'); t += _tcslen(t) + 1); - ln = (DWORD)t - (DWORD)ExtName; + ln = t - ExtName; ZeroMemory (ExtInfo, sizeof (EXTENSION_INFO)); memcpy (ExtInfo->ExtName, ExtName, ln); From 9ed44b0a95fd0eb68c736bc96fea44f3b07736b9 Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Wed, 9 Dec 2009 01:20:38 +0000 Subject: [PATCH 189/286] commit stragglers from main tree svn path=/branches/ros-amd64-bringup/; revision=44477 --- .../directx/wine/wined3d/wined3d_private.h | 2 +- reactos/include/reactos/libs/pseh/pseh2_64.h | 32 +++++++++++++++---- reactos/lib/3rdparty/mingw/mingw.rbuild | 2 +- 3 files changed, 28 insertions(+), 8 deletions(-) diff --git a/reactos/dll/directx/wine/wined3d/wined3d_private.h b/reactos/dll/directx/wine/wined3d/wined3d_private.h index 24066c9562e..9b1c4d40e57 100644 --- a/reactos/dll/directx/wine/wined3d/wined3d_private.h +++ b/reactos/dll/directx/wine/wined3d/wined3d_private.h @@ -2551,7 +2551,7 @@ BOOL is_invalid_op(IWineD3DDeviceImpl *This, int stage, WINED3DTEXTUREOP op, void set_tex_op_nvrc(IWineD3DDevice *iface, BOOL is_alpha, int stage, WINED3DTEXTUREOP op, DWORD arg1, DWORD arg2, DWORD arg3, INT texture_idx, DWORD dst) DECLSPEC_HIDDEN; void set_texture_matrix(const float *smat, DWORD flags, BOOL calculatedCoords, - BOOL transformed, DWORD coordtype, BOOL ffp_can_disable_proj) DECLSPEC_HIDDEN; + BOOL transformed, WINED3DFORMAT coordtype, BOOL ffp_can_disable_proj) DECLSPEC_HIDDEN; void texture_activate_dimensions(DWORD stage, IWineD3DStateBlockImpl *stateblock, struct wined3d_context *context) DECLSPEC_HIDDEN; void sampler_texdim(DWORD state, IWineD3DStateBlockImpl *stateblock, diff --git a/reactos/include/reactos/libs/pseh/pseh2_64.h b/reactos/include/reactos/libs/pseh/pseh2_64.h index 35661d5c7a5..fd582a1e1f3 100644 --- a/reactos/include/reactos/libs/pseh/pseh2_64.h +++ b/reactos/include/reactos/libs/pseh/pseh2_64.h @@ -2,14 +2,34 @@ #define KJK_PSEH2_H_ -#define _SEH2_TRY if(1) -#define _SEH2_EXCEPT(x) else -#define _SEH2_END -#define _SEH2_GetExceptionCode() (0) -#define _SEH2_YIELD(x) x +#define _SEH2_TRY if(1) { +#define _SEH2_EXCEPT(...) } if(0) { +#define _SEH2_END } +#define _SEH2_YIELD(STMT_) STMT_ #define _SEH2_LEAVE -#define _SEH2_FINALLY +#define _SEH2_FINALLY } if(1) { +#define _SEH2_GetExceptionInformation() (GetExceptionInformation()) +#define _SEH2_GetExceptionCode() (0) +#define _SEH2_AbnormalTermination() (0) +struct _EXCEPTION_RECORD; +struct _EXCEPTION_POINTERS; +struct _CONTEXT; + +typedef int (__cdecl * _SEH2FrameHandler_t) +( + struct _EXCEPTION_RECORD *, + void *, + struct _CONTEXT *, + void * +); + +typedef struct __SEH2Registration +{ + struct __SEH2Registration * SER_Prev; + _SEH2FrameHandler_t SER_Handler; +} +_SEH2Registration_t; #endif diff --git a/reactos/lib/3rdparty/mingw/mingw.rbuild b/reactos/lib/3rdparty/mingw/mingw.rbuild index d0fa578bb4f..1b544f59879 100644 --- a/reactos/lib/3rdparty/mingw/mingw.rbuild +++ b/reactos/lib/3rdparty/mingw/mingw.rbuild @@ -18,7 +18,7 @@ dllentry.c dummy_mingwthrd.c gccmain.c - + getopt.c gs_support.c merr.c From 5a6e9037ae3e2034b5be5055b5d357a9e9ffeb72 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Wed, 9 Dec 2009 17:48:56 +0000 Subject: [PATCH 190/286] - add LIST_ENTRY32/64, STRING32/64 - change C_ASSERT in winnt.h, too svn path=/branches/ros-amd64-bringup/; revision=44491 --- reactos/include/ddk/ntdef.h | 14 ++++++++++++++ reactos/include/ndk/umtypes.h | 16 ++++++++++++++++ reactos/include/psdk/winnt.h | 17 +++++++++++------ 3 files changed, 41 insertions(+), 6 deletions(-) diff --git a/reactos/include/ddk/ntdef.h b/reactos/include/ddk/ntdef.h index 547495b0445..47ba5991583 100644 --- a/reactos/include/ddk/ntdef.h +++ b/reactos/include/ddk/ntdef.h @@ -529,7 +529,21 @@ typedef CONST STRING* PCOEM_STRING; typedef STRING CANSI_STRING; typedef PSTRING PCANSI_STRING; +typedef struct _STRING32 { + USHORT Length; + USHORT MaximumLength; + ULONG Buffer; +} STRING32, *PSTRING32, + UNICODE_STRING32, *PUNICODE_STRING32, + ANSI_STRING32, *PANSI_STRING32; +typedef struct _STRING64 { + USHORT Length; + USHORT MaximumLength; + ULONGLONG Buffer; +} STRING64, *PSTRING64, + UNICODE_STRING64, *PUNICODE_STRING64, + ANSI_STRING64, *PANSI_STRING64; // // LangID and NLS diff --git a/reactos/include/ndk/umtypes.h b/reactos/include/ndk/umtypes.h index 75c79d0e149..7e02d7664b8 100644 --- a/reactos/include/ndk/umtypes.h +++ b/reactos/include/ndk/umtypes.h @@ -151,6 +151,22 @@ typedef struct _CSTRING CONST CHAR *Buffer; } CSTRING, *PCSTRING; +typedef struct _STRING32 { + USHORT Length; + USHORT MaximumLength; + ULONG Buffer; +} STRING32, *PSTRING32, + UNICODE_STRING32, *PUNICODE_STRING32, + ANSI_STRING32, *PANSI_STRING32; + +typedef struct _STRING64 { + USHORT Length; + USHORT MaximumLength; + ULONGLONG Buffer; +} STRING64, *PSTRING64, + UNICODE_STRING64, *PUNICODE_STRING64, + ANSI_STRING64, *PANSI_STRING64; + #endif typedef struct _OBJECT_ATTRIBUTES diff --git a/reactos/include/psdk/winnt.h b/reactos/include/psdk/winnt.h index ee3c1a2ab73..beaa23b73a2 100644 --- a/reactos/include/psdk/winnt.h +++ b/reactos/include/psdk/winnt.h @@ -229,12 +229,8 @@ typedef BYTE FCHAR; typedef WORD FSHORT; typedef DWORD FLONG; -#define __C_ASSERT_JOIN(X, Y) __C_ASSERT_DO_JOIN(X, Y) -#define __C_ASSERT_DO_JOIN(X, Y) __C_ASSERT_DO_JOIN2(X, Y) -#define __C_ASSERT_DO_JOIN2(X, Y) X##Y - -#define C_ASSERT(e) typedef char __C_ASSERT_JOIN(__C_ASSERT__, __LINE__)[(e) ? 1 : -1] - +#define C_ASSERT(exp) \ + extern char __c_assert__[exp ? 1 : -1]; #include "intrin.h" @@ -3238,6 +3234,15 @@ typedef struct _LIST_ENTRY { struct _LIST_ENTRY *Flink; struct _LIST_ENTRY *Blink; } LIST_ENTRY,*PLIST_ENTRY; +typedef struct _LIST_ENTRY32 { + DWORD Flink; + DWORD Blink; +} LIST_ENTRY32,*PLIST_ENTRY32; +typedef struct _LIST_ENTRY64 { + ULONGLONG Flink; + ULONGLONG Blink; +} LIST_ENTRY64,*PLIST_ENTRY64; + typedef struct _SINGLE_LIST_ENTRY { struct _SINGLE_LIST_ENTRY *Next; } SINGLE_LIST_ENTRY,*PSINGLE_LIST_ENTRY; From f657f3328881a5681fbb9a4133f33cd4fa1849cc Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Wed, 9 Dec 2009 22:12:41 +0000 Subject: [PATCH 191/286] Eliminate warning. svn path=/branches/ros-amd64-bringup/; revision=44499 --- reactos/dll/win32/syssetup/install.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/dll/win32/syssetup/install.c b/reactos/dll/win32/syssetup/install.c index 46578f022a3..9fb0602f07d 100644 --- a/reactos/dll/win32/syssetup/install.c +++ b/reactos/dll/win32/syssetup/install.c @@ -507,7 +507,7 @@ cleanup: } -static BOOL CALLBACK +static INT_PTR CALLBACK StatusMessageWindowProc( IN HWND hwndDlg, IN UINT uMsg, From 8c8c4fcf16c9cd3e628b0ba3975cb717716a43b1 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Wed, 9 Dec 2009 23:58:31 +0000 Subject: [PATCH 192/286] Add NT_TIB32/64 svn path=/branches/ros-amd64-bringup/; revision=44500 --- reactos/include/ddk/winddk.h | 26 ++++++++++++++++++++++++++ reactos/include/psdk/winnt.h | 26 ++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/reactos/include/ddk/winddk.h b/reactos/include/ddk/winddk.h index d12c010493d..fd09dcb6b3b 100644 --- a/reactos/include/ddk/winddk.h +++ b/reactos/include/ddk/winddk.h @@ -4585,6 +4585,32 @@ typedef struct _NT_TIB { struct _NT_TIB *Self; } NT_TIB, *PNT_TIB; +typedef struct _NT_TIB32 { + ULONG ExceptionList; + ULONG StackBase; + ULONG StackLimit; + ULONG SubSystemTib; + union { + ULONG FiberData; + ULONG Version; + }; + ULONG ArbitraryUserPointer; + ULONG Self; +} NT_TIB32,*PNT_TIB32; + +typedef struct _NT_TIB64 { + ULONG64 ExceptionList; + ULONG64 StackBase; + ULONG64 StackLimit; + ULONG64 SubSystemTib; + union { + ULONG64 FiberData; + ULONG Version; + }; + ULONG64 ArbitraryUserPointer; + ULONG64 Self; +} NT_TIB64,*PNT_TIB64; + typedef enum _PROCESSINFOCLASS { ProcessBasicInformation, ProcessQuotaLimits, diff --git a/reactos/include/psdk/winnt.h b/reactos/include/psdk/winnt.h index beaa23b73a2..74a6549a418 100644 --- a/reactos/include/psdk/winnt.h +++ b/reactos/include/psdk/winnt.h @@ -4165,6 +4165,32 @@ typedef struct _NT_TIB { struct _NT_TIB *Self; } NT_TIB,*PNT_TIB; +typedef struct _NT_TIB32 { + DWORD ExceptionList; + DWORD StackBase; + DWORD StackLimit; + DWORD SubSystemTib; + union { + DWORD FiberData; + DWORD Version; + }; + DWORD ArbitraryUserPointer; + DWORD Self; +} NT_TIB32,*PNT_TIB32; + +typedef struct _NT_TIB64 { + DWORD64 ExceptionList; + DWORD64 StackBase; + DWORD64 StackLimit; + DWORD64 SubSystemTib; + union { + DWORD64 FiberData; + DWORD Version; + }; + DWORD64 ArbitraryUserPointer; + DWORD64 Self; +} NT_TIB64,*PNT_TIB64; + typedef struct _REPARSE_GUID_DATA_BUFFER { DWORD ReparseTag; WORD ReparseDataLength; From c5a2bbe7398a273e280e78c57a3a2b590ed35e08 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 10 Dec 2009 00:35:12 +0000 Subject: [PATCH 193/286] [NDK] - Add CLIENT_ID32/64 - Create explicit 32/64 bit versions of PEB, GDI_TEB_BATCH and TEB, using macros. Thanks to Alex for feedback and suggestions. - Fix some member names. - Note to self: fix rostests, too! svn path=/branches/ros-amd64-bringup/; revision=44501 --- reactos/dll/ntdll/dbg/dbgui.c | 2 +- reactos/dll/ntdll/ldr/utils.c | 6 +- reactos/dll/ntdll/rtl/libsupp.c | 8 +- reactos/dll/win32/kernel32/thread/fiber.c | 16 +- reactos/include/ndk/peb_teb.h | 387 ++++++++++++++++++++++ reactos/include/ndk/pstypes.h | 316 ++---------------- reactos/ntoskrnl/dbgk/dbgkutil.c | 4 +- reactos/ntoskrnl/mm/ARM3/procsup.c | 20 +- reactos/ntoskrnl/rtl/libsupp.c | 4 +- 9 files changed, 445 insertions(+), 318 deletions(-) create mode 100644 reactos/include/ndk/peb_teb.h diff --git a/reactos/dll/ntdll/dbg/dbgui.c b/reactos/dll/ntdll/dbg/dbgui.c index 6bfeaceb818..6cbcd733ffd 100644 --- a/reactos/dll/ntdll/dbg/dbgui.c +++ b/reactos/dll/ntdll/dbg/dbgui.c @@ -259,7 +259,7 @@ DbgUiConvertStateChangeStructure(IN PDBGUI_WAIT_STATE_CHANGE WaitStateChange, /* Save the image name from the TIB */ DebugEvent->u.LoadDll.lpImageName = ((PTEB)ThreadBasicInfo.TebBaseAddress)-> - Tib.ArbitraryUserPointer; + NtTib.ArbitraryUserPointer; } else { diff --git a/reactos/dll/ntdll/ldr/utils.c b/reactos/dll/ntdll/ldr/utils.c index 2f22ba5436c..a3a416bebab 100644 --- a/reactos/dll/ntdll/ldr/utils.c +++ b/reactos/dll/ntdll/ldr/utils.c @@ -2210,8 +2210,8 @@ LdrpLoadModule(IN PWSTR SearchPath OPTIONAL, /* Map the dll into the process */ ViewSize = 0; ImageBase = 0; - ArbitraryUserPointer = NtCurrentTeb()->Tib.ArbitraryUserPointer; - NtCurrentTeb()->Tib.ArbitraryUserPointer = FullDosName.Buffer; + ArbitraryUserPointer = NtCurrentTeb()->NtTib.ArbitraryUserPointer; + NtCurrentTeb()->NtTib.ArbitraryUserPointer = FullDosName.Buffer; Status = NtMapViewOfSection(SectionHandle, NtCurrentProcess(), &ImageBase, @@ -2222,7 +2222,7 @@ LdrpLoadModule(IN PWSTR SearchPath OPTIONAL, ViewShare, 0, PAGE_READONLY); - NtCurrentTeb()->Tib.ArbitraryUserPointer = ArbitraryUserPointer; + NtCurrentTeb()->NtTib.ArbitraryUserPointer = ArbitraryUserPointer; if (!NT_SUCCESS(Status)) { DPRINT1("map view of section failed (Status 0x%08lx)\n", Status); diff --git a/reactos/dll/ntdll/rtl/libsupp.c b/reactos/dll/ntdll/rtl/libsupp.c index e9990ff9426..5fdcb68788e 100644 --- a/reactos/dll/ntdll/rtl/libsupp.c +++ b/reactos/dll/ntdll/rtl/libsupp.c @@ -206,8 +206,8 @@ RtlpCaptureStackLimits(IN ULONG_PTR Ebp, IN ULONG_PTR *StackEnd) { /* FIXME: Verify */ - *StackBegin = (ULONG_PTR)NtCurrentTeb()->Tib.StackLimit; - *StackEnd = (ULONG_PTR)NtCurrentTeb()->Tib.StackBase; + *StackBegin = (ULONG_PTR)NtCurrentTeb()->NtTib.StackLimit; + *StackEnd = (ULONG_PTR)NtCurrentTeb()->NtTib.StackBase; return TRUE; } @@ -218,8 +218,8 @@ RtlpGetStackLimits( OUT PULONG_PTR LowLimit, OUT PULONG_PTR HighLimit) { - *LowLimit = (ULONG_PTR)NtCurrentTeb()->Tib.StackLimit; - *HighLimit = (ULONG_PTR)NtCurrentTeb()->Tib.StackBase; + *LowLimit = (ULONG_PTR)NtCurrentTeb()->NtTib.StackLimit; + *HighLimit = (ULONG_PTR)NtCurrentTeb()->NtTib.StackBase; return; } #endif diff --git a/reactos/dll/win32/kernel32/thread/fiber.c b/reactos/dll/win32/kernel32/thread/fiber.c index 3010c8ea07b..1f62d99b22f 100644 --- a/reactos/dll/win32/kernel32/thread/fiber.c +++ b/reactos/dll/win32/kernel32/thread/fiber.c @@ -47,9 +47,9 @@ ConvertFiberToThread(VOID) pTeb->HasFiberData = FALSE; /* free the fiber */ - if(pTeb->Tib.FiberData != NULL) + if(pTeb->NtTib.FiberData != NULL) { - RtlFreeHeap(GetProcessHeap(), 0, pTeb->Tib.FiberData); + RtlFreeHeap(GetProcessHeap(), 0, pTeb->NtTib.FiberData); } /* success */ @@ -69,7 +69,7 @@ ConvertThreadToFiberEx(LPVOID lpParameter, DPRINT1("Converting Thread to Fiber\n"); /* the current thread is already a fiber */ - if(pTeb->HasFiberData && pTeb->Tib.FiberData) return pTeb->Tib.FiberData; + if(pTeb->HasFiberData && pTeb->NtTib.FiberData) return pTeb->NtTib.FiberData; /* allocate the fiber */ pfCurFiber = (PFIBER)RtlAllocateHeap(GetProcessHeap(), @@ -85,9 +85,9 @@ ConvertThreadToFiberEx(LPVOID lpParameter, /* copy some contextual data from the thread to the fiber */ pfCurFiber->Parameter = lpParameter; - pfCurFiber->ExceptionList = pTeb->Tib.ExceptionList; - pfCurFiber->StackBase = pTeb->Tib.StackBase; - pfCurFiber->StackLimit = pTeb->Tib.StackLimit; + pfCurFiber->ExceptionList = pTeb->NtTib.ExceptionList; + pfCurFiber->StackBase = pTeb->NtTib.StackBase; + pfCurFiber->StackLimit = pTeb->NtTib.StackLimit; pfCurFiber->DeallocationStack = pTeb->DeallocationStack; pfCurFiber->FlsData = pTeb->FlsData; pfCurFiber->GuaranteedStackBytes = pTeb->GuaranteedStackBytes; @@ -101,7 +101,7 @@ ConvertThreadToFiberEx(LPVOID lpParameter, } /* associate the fiber to the current thread */ - pTeb->Tib.FiberData = pfCurFiber; + pTeb->NtTib.FiberData = pfCurFiber; pTeb->HasFiberData = TRUE; /* success */ @@ -227,7 +227,7 @@ DeleteFiber(LPVOID lpFiber) RtlFreeHeap(GetProcessHeap(), 0, lpFiber); /* the fiber is deleting itself: let the system deallocate the stack */ - if(NtCurrentTeb()->Tib.FiberData == lpFiber) ExitThread(1); + if(NtCurrentTeb()->NtTib.FiberData == lpFiber) ExitThread(1); /* deallocate the stack */ NtFreeVirtualMemory(NtCurrentProcess(), diff --git a/reactos/include/ndk/peb_teb.h b/reactos/include/ndk/peb_teb.h new file mode 100644 index 00000000000..d6e9d71056e --- /dev/null +++ b/reactos/include/ndk/peb_teb.h @@ -0,0 +1,387 @@ + +#define PASTE2(x,y) x##y +#define PASTE(x,y) PASTE2(x,y) + +#ifdef EXPLICIT_32BIT + #define STRUCT(x) PASTE(x,32) + #define PTR(x) ULONG +#elif defined(EXPLICIT_64BIT) + #define STRUCT(x) PASTE(x,64) + #define PTR(x) ULONG64 +#else + #define STRUCT(x) x + #define PTR(x) x +#endif + +#if defined(_WIN64) && !defined(EXPLICIT_32BIT) + #define GDI_HANDLE_BUFFER_SIZE 60 +#else + #define GDI_HANDLE_BUFFER_SIZE 34 +#endif + +typedef struct STRUCT(_PEB) +{ + BOOLEAN InheritedAddressSpace; + BOOLEAN ReadImageFileExecOptions; + BOOLEAN BeingDebugged; +#if (NTDDI_VERSION >= NTDDI_WS03) + union + { + BOOLEAN BitField; + struct + { + BOOLEAN ImageUsesLargePages:1; +#if (NTDDI_VERSION >= NTDDI_LONGHORN) + BOOLEAN IsProtectedProcess:1; + BOOLEAN IsLegacyProcess:1; + BOOLEAN IsImageDynamicallyRelocated:1; + BOOLEAN SkipPatchingUser32Forwarders:1; + BOOLEAN SpareBits:3; +#else + BOOLEAN SpareBits:7; +#endif + }; + }; +#else + BOOLEAN SpareBool; +#endif + PTR(HANDLE) Mutant; + PTR(PVOID) ImageBaseAddress; + PTR(PPEB_LDR_DATA) Ldr; + PTR(struct _RTL_USER_PROCESS_PARAMETERS*) ProcessParameters; + PTR(PVOID) SubSystemData; + PTR(PVOID) ProcessHeap; + PTR(struct _RTL_CRITICAL_SECTION*) FastPebLock; +#if (NTDDI_VERSION >= NTDDI_LONGHORN) + PTR(PVOID) AltThunkSListPtr; + PTR(PVOID) IFEOKey; + union + { + ULONG CrossProcessFlags; + struct + { + ULONG ProcessInJob:1; + ULONG ProcessInitializing:1; + ULONG ProcessUsingVEH:1; + ULONG ProcessUsingVCH:1; + ULONG ReservedBits0:28; + }; + }; + union + { + PTR(PVOID) KernelCallbackTable; + PTR(PVOID) UserSharedInfoPtr; + }; +#elif (NTDDI_VERSION >= NTDDI_WS03) + PTR(PVOID) AltThunkSListPtr; + PTR(PVOID) SparePtr2; + ULONG EnvironmentUpdateCount; + PTR(PVOID) KernelCallbackTable; +#else + PTR(PPEBLOCKROUTINE) FastPebLockRoutine; + PTR(PPEBLOCKROUTINE) FastPebUnlockRoutine; + ULONG EnvironmentUpdateCount; + PTR(PVOID) KernelCallbackTable; +#endif + ULONG SystemReserved[1]; + ULONG SpareUlong; // AtlThunkSListPtr32 + PTR(PPEB_FREE_BLOCK) FreeList; + ULONG TlsExpansionCounter; + PTR(PVOID) TlsBitmap; + ULONG TlsBitmapBits[2]; + PTR(PVOID) ReadOnlySharedMemoryBase; +#if (NTDDI_VERSION >= NTDDI_LONGHORN) + PTR(PVOID) HotpatchInformation; +#else + PTR(PVOID) ReadOnlySharedMemoryHeap; +#endif + PTR(PVOID*) ReadOnlyStaticServerData; + PTR(PVOID) AnsiCodePageData; + PTR(PVOID) OemCodePageData; + PTR(PVOID) UnicodeCaseTableData; + ULONG NumberOfProcessors; + ULONG NtGlobalFlag; + LARGE_INTEGER CriticalSectionTimeout; + PTR(ULONG_PTR) HeapSegmentReserve; + PTR(ULONG_PTR) HeapSegmentCommit; + PTR(ULONG_PTR) HeapDeCommitTotalFreeThreshold; + PTR(ULONG_PTR) HeapDeCommitFreeBlockThreshold; + ULONG NumberOfHeaps; + ULONG MaximumNumberOfHeaps; + PTR(PVOID*) ProcessHeaps; + PTR(PVOID) GdiSharedHandleTable; + PTR(PVOID) ProcessStarterHelper; + ULONG GdiDCAttributeList; + PTR(struct _RTL_CRITICAL_SECTION*) LoaderLock; + ULONG OSMajorVersion; + ULONG OSMinorVersion; + USHORT OSBuildNumber; + USHORT OSCSDVersion; + ULONG OSPlatformId; + ULONG ImageSubsystem; + ULONG ImageSubsystemMajorVersion; + ULONG ImageSubsystemMinorVersion; + PTR(ULONG_PTR) ImageProcessAffinityMask; + ULONG GdiHandleBuffer[GDI_HANDLE_BUFFER_SIZE]; + PTR(PPOST_PROCESS_INIT_ROUTINE) PostProcessInitRoutine; + PTR(PVOID) TlsExpansionBitmap; + ULONG TlsExpansionBitmapBits[32]; + ULONG SessionId; +#if (NTDDI_VERSION >= NTDDI_WINXP) + ULARGE_INTEGER AppCompatFlags; + ULARGE_INTEGER AppCompatFlagsUser; + PTR(PVOID) pShimData; + PTR(PVOID) AppCompatInfo; + STRUCT(UNICODE_STRING) CSDVersion; + PTR(struct _ACTIVATION_CONTEXT_DATA*) ActivationContextData; + PTR(struct _ASSEMBLY_STORAGE_MAP*) ProcessAssemblyStorageMap; + PTR(struct _ACTIVATION_CONTEXT_DATA*) SystemDefaultActivationContextData; + PTR(struct _ASSEMBLY_STORAGE_MAP*) SystemAssemblyStorageMap; + PTR(ULONG_PTR) MinimumStackCommit; +#endif +#if (NTDDI_VERSION >= NTDDI_WS03) + PTR(PVOID*) FlsCallback; + STRUCT(LIST_ENTRY) FlsListHead; + PTR(PVOID) FlsBitmap; + ULONG FlsBitmapBits[4]; + ULONG FlsHighIndex; +#endif +#if (NTDDI_VERSION >= NTDDI_LONGHORN) + PTR(PVOID) WerRegistrationData; + PTR(PVOID) WerShipAssertPtr; +#endif +} STRUCT(PEB), *STRUCT(PPEB); + + +#if defined(_WIN64) && !defined(EXPLICIT_32BIT) +C_ASSERT(FIELD_OFFSET(STRUCT(PEB), Mutant) == 0x08); +C_ASSERT(FIELD_OFFSET(STRUCT(PEB), Ldr) == 0x18); +C_ASSERT(FIELD_OFFSET(STRUCT(PEB), FastPebLock) == 0x038); +C_ASSERT(FIELD_OFFSET(STRUCT(PEB), TlsExpansionCounter) == 0x070); +C_ASSERT(FIELD_OFFSET(STRUCT(PEB), NtGlobalFlag) == 0x0BC); +C_ASSERT(FIELD_OFFSET(STRUCT(PEB), GdiSharedHandleTable) == 0x0F8); +C_ASSERT(FIELD_OFFSET(STRUCT(PEB), LoaderLock) == 0x110); +C_ASSERT(FIELD_OFFSET(STRUCT(PEB), ImageSubsystem) == 0x128); +C_ASSERT(FIELD_OFFSET(STRUCT(PEB), ImageProcessAffinityMask) == 0x138); +C_ASSERT(FIELD_OFFSET(STRUCT(PEB), PostProcessInitRoutine) == 0x230); +C_ASSERT(FIELD_OFFSET(STRUCT(PEB), SessionId) == 0x2C0); +C_ASSERT(FIELD_OFFSET(STRUCT(PEB), FlsHighIndex) == 0x350); +#else +C_ASSERT(FIELD_OFFSET(STRUCT(PEB), Mutant) == 0x04); +C_ASSERT(FIELD_OFFSET(STRUCT(PEB), Ldr) == 0x0C); +C_ASSERT(FIELD_OFFSET(STRUCT(PEB), FastPebLock) == 0x01C); +C_ASSERT(FIELD_OFFSET(STRUCT(PEB), TlsExpansionCounter) == 0x03C); +C_ASSERT(FIELD_OFFSET(STRUCT(PEB), NtGlobalFlag) == 0x068); +C_ASSERT(FIELD_OFFSET(STRUCT(PEB), GdiSharedHandleTable) == 0x094); +C_ASSERT(FIELD_OFFSET(STRUCT(PEB), LoaderLock) == 0x0A0); +C_ASSERT(FIELD_OFFSET(STRUCT(PEB), ImageSubsystem) == 0x0B4); +C_ASSERT(FIELD_OFFSET(STRUCT(PEB), ImageProcessAffinityMask) == 0x0C0); +C_ASSERT(FIELD_OFFSET(STRUCT(PEB), PostProcessInitRoutine) == 0x14C); +C_ASSERT(FIELD_OFFSET(STRUCT(PEB), SessionId) == 0x1D4); +C_ASSERT(FIELD_OFFSET(STRUCT(PEB), FlsHighIndex) == 0x22C); +#endif + +// +// GDI Batch Descriptor +// +typedef struct STRUCT(_GDI_TEB_BATCH) +{ + ULONG Offset; + PTR(HANDLE) HDC; + ULONG Buffer[0x136]; +} STRUCT(GDI_TEB_BATCH), *STRUCT(PGDI_TEB_BATCH); + +// +// Thread Environment Block (TEB) +// +typedef struct STRUCT(_TEB) +{ + STRUCT(NT_TIB) NtTib; + PTR(PVOID) EnvironmentPointer; + STRUCT(CLIENT_ID) ClientId; + PTR(PVOID) ActiveRpcHandle; + PTR(PVOID) ThreadLocalStoragePointer; + PTR(STRUCT(PPEB)) ProcessEnvironmentBlock; + ULONG LastErrorValue; + ULONG CountOfOwnedCriticalSections; + PTR(PVOID) CsrClientThread; + PTR(PVOID) Win32ThreadInfo; + ULONG User32Reserved[26]; + ULONG UserReserved[5]; + PTR(PVOID) WOW32Reserved; + LCID CurrentLocale; + ULONG FpSoftwareStatusRegister; + PTR(PVOID) SystemReserved1[54]; + LONG ExceptionCode; +#if (NTDDI_VERSION >= NTDDI_LONGHORN) + PTR(struct _ACTIVATION_CONTEXT_STACK*) ActivationContextStackPointer; + UCHAR SpareBytes1[0x30 - 3 * sizeof(PTR(PVOID)]; + ULONG TxFsContext; +#elif (NTDDI_VERSION >= NTDDI_WS03) + PTR(struct _ACTIVATION_CONTEXT_STACK*) ActivationContextStackPointer; + UCHAR SpareBytes1[0x34 - 3 * sizeof(PTR(PVOID))]; +#else + ACTIVATION_CONTEXT_STACK ActivationContextStack; + UCHAR SpareBytes1[24]; +#endif + STRUCT(GDI_TEB_BATCH) GdiTebBatch; + STRUCT(CLIENT_ID) RealClientId; + PTR(PVOID) GdiCachedProcessHandle; + ULONG GdiClientPID; + ULONG GdiClientTID; + PTR(PVOID) GdiThreadLocalInfo; + PTR(SIZE_T) Win32ClientInfo[62]; + PTR(PVOID) glDispatchTable[233]; + PTR(SIZE_T) glReserved1[29]; + PTR(PVOID) glReserved2; + PTR(PVOID) glSectionInfo; + PTR(PVOID) glSection; + PTR(PVOID) glTable; + PTR(PVOID) glCurrentRC; + PTR(PVOID) glContext; + NTSTATUS LastStatusValue; + STRUCT(UNICODE_STRING) StaticUnicodeString; + WCHAR StaticUnicodeBuffer[261]; + PTR(PVOID) DeallocationStack; + PTR(PVOID) TlsSlots[64]; + STRUCT(LIST_ENTRY) TlsLinks; + PTR(PVOID) Vdm; + PTR(PVOID) ReservedForNtRpc; + PTR(PVOID) DbgSsReserved[2]; +#if (NTDDI_VERSION >= NTDDI_WS03) + ULONG HardErrorMode; +#else + ULONG HardErrorsAreDisabled; +#endif +#if (NTDDI_VERSION >= NTDDI_LONGHORN) + PTR(PVOID) Instrumentation[9]; + GUID ActivityId; + PTR(PVOID) SubProcessTag; + PTR(PVOID) EtwLocalData; +#elif (NTDDI_VERSION >= NTDDI_WS03) + PTR(PVOID) Instrumentation[14]; + PTR(PVOID) SubProcessTag; + PTR(PVOID) EtwLocalData; +#else + PTR(PVOID) Instrumentation[16]; +#endif + PTR(PVOID) WinSockData; + ULONG GdiBatchCount; +#if (NTDDI_VERSION >= NTDDI_LONGHORN) + BOOLEAN SpareBool0; + BOOLEAN SpareBool1; + BOOLEAN SpareBool2; +#else + BOOLEAN InDbgPrint; + BOOLEAN FreeStackOnTermination; + BOOLEAN HasFiberData; +#endif + UCHAR IdealProcessor; +#if (NTDDI_VERSION >= NTDDI_WS03) + ULONG GuaranteedStackBytes; +#else + ULONG Spare3; +#endif + PTR(PVOID) ReservedForPerf; + PTR(PVOID) ReservedForOle; + ULONG WaitingOnLoaderLock; +#if (NTDDI_VERSION >= NTDDI_LONGHORN) + PTR(PVOID) SavedPriorityState; + PTR(ULONG_PTR) SoftPatchPtr1; + PTR(ULONG_PTR) ThreadPoolData; +#elif (NTDDI_VERSION >= NTDDI_WS03) + PTR(ULONG_PTR) SparePointer1; + PTR(ULONG_PTR) SoftPatchPtr1; + PTR(ULONG_PTR) SoftPatchPtr2; +#else + Wx86ThreadState Wx86Thread; +#endif + PTR(PVOID*) TlsExpansionSlots; +#if defined(_WIN64) && !defined(EXPLICIT_32BIT) + PTR(PVOID) DeallocationBStore; + PTR(PVOID) BStoreLimit; +#endif + ULONG ImpersonationLocale; + ULONG IsImpersonating; + PTR(PVOID) NlsCache; + PTR(PVOID) pShimData; + ULONG HeapVirtualAffinity; + PTR(HANDLE) CurrentTransactionHandle; + PTR(PTEB_ACTIVE_FRAME) ActiveFrame; +#if (NTDDI_VERSION >= NTDDI_WS03) + PVOID FlsData; +#endif +#if (NTDDI_VERSION >= NTDDI_LONGHORN) + PVOID PreferredLangauges; + PVOID UserPrefLanguages; + PVOID MergedPrefLanguages; + ULONG MuiImpersonation; + union + { + struct + { + USHORT SpareCrossTebFlags:16; + }; + USHORT CrossTebFlags; + }; + union + { + struct + { + USHORT DbgSafeThunkCall:1; + USHORT DbgInDebugPrint:1; + USHORT DbgHasFiberData:1; + USHORT DbgSkipThreadAttach:1; + USHORT DbgWerInShipAssertCode:1; + USHORT DbgIssuedInitialBp:1; + USHORT DbgClonedThread:1; + USHORT SpareSameTebBits:9; + }; + USHORT SameTebFlags; + }; + PTR(PVOID) TxnScopeEntercallback; + PTR(PVOID) TxnScopeExitCAllback; + PTR(PVOID) TxnScopeContext; + ULONG LockCount; + ULONG ProcessRundown; + ULONG64 LastSwitchTime; + ULONG64 TotalSwitchOutTime; + LARGE_INTEGER WaitReasonBitMap; +#else + BOOLEAN SafeThunkCall; + BOOLEAN BooleanSpare[3]; +#endif +} STRUCT(TEB), *STRUCT(PTEB); + +#if defined(_WIN64) && !defined(EXPLICIT_32BIT) +C_ASSERT(FIELD_OFFSET(STRUCT(TEB), EnvironmentPointer) == 0x038); +C_ASSERT(FIELD_OFFSET(STRUCT(TEB), ExceptionCode) == 0x2C0); +C_ASSERT(FIELD_OFFSET(STRUCT(TEB), GdiTebBatch) == 0x2F0); +C_ASSERT(FIELD_OFFSET(STRUCT(TEB), LastStatusValue) == 0x1250); +C_ASSERT(FIELD_OFFSET(STRUCT(TEB), Vdm) == 0x1690); +C_ASSERT(FIELD_OFFSET(STRUCT(TEB), HardErrorMode) == 0x16B0); +C_ASSERT(FIELD_OFFSET(STRUCT(TEB), SubProcessTag) == 0x1728); +C_ASSERT(FIELD_OFFSET(STRUCT(TEB), GdiBatchCount) == 0x1740); +C_ASSERT(FIELD_OFFSET(STRUCT(TEB), IdealProcessor) == 0x1747); +C_ASSERT(FIELD_OFFSET(STRUCT(TEB), WaitingOnLoaderLock) == 0x1760); +C_ASSERT(FIELD_OFFSET(STRUCT(TEB), TlsExpansionSlots) == 0x1780); +C_ASSERT(FIELD_OFFSET(STRUCT(TEB), WaitingOnLoaderLock) == 0x1760); +C_ASSERT(FIELD_OFFSET(STRUCT(TEB), ActiveFrame) == 0x17C0); +#else +C_ASSERT(FIELD_OFFSET(STRUCT(TEB), EnvironmentPointer) == 0x01C); +C_ASSERT(FIELD_OFFSET(STRUCT(TEB), ExceptionCode) == 0x1A4); +C_ASSERT(FIELD_OFFSET(STRUCT(TEB), GdiTebBatch) == 0x1D4); +C_ASSERT(FIELD_OFFSET(STRUCT(TEB), LastStatusValue) == 0xBF4); +C_ASSERT(FIELD_OFFSET(STRUCT(TEB), Vdm) == 0xF18); +C_ASSERT(FIELD_OFFSET(STRUCT(TEB), HardErrorMode) == 0xF28); +C_ASSERT(FIELD_OFFSET(STRUCT(TEB), SubProcessTag) == 0xF64); +C_ASSERT(FIELD_OFFSET(STRUCT(TEB), GdiBatchCount) == 0xF70); +C_ASSERT(FIELD_OFFSET(STRUCT(TEB), TlsExpansionSlots) == 0xF94); +C_ASSERT(FIELD_OFFSET(STRUCT(TEB), ActiveFrame) == 0xFB0); +#endif + +#undef PTR +#undef STRUCT +#undef PASTE +#undef PASTE2 +#undef GDI_HANDLE_BUFFER_SIZE diff --git a/reactos/include/ndk/pstypes.h b/reactos/include/ndk/pstypes.h index 7f29d12a228..ca5477ca371 100644 --- a/reactos/include/ndk/pstypes.h +++ b/reactos/include/ndk/pstypes.h @@ -616,159 +616,6 @@ typedef struct _INITIAL_PEB HANDLE Mutant; } INITIAL_PEB, *PINITIAL_PEB; -// -// Process Environment Block (PEB) -// -typedef struct _PEB -{ - BOOLEAN InheritedAddressSpace; - BOOLEAN ReadImageFileExecOptions; - BOOLEAN BeingDebugged; -#if (NTDDI_VERSION >= NTDDI_WS03) - union - { - BOOLEAN BitField; - struct - { - UCHAR ImageUsesLargePages:1; -#if (NTDDI_VERSION >= NTDDI_LONGHORN) - BOOLEAN IsProtectedProcess:1; - BOOLEAN IsLegacyProcess:1; - BOOLEAN IsImageDynamicallyRelocated:1; - BOOLEAN SkipPatchingUser32Forwarders:1; - BOOLEAN SpareBits:3; -#else - BOOLEAN SpareBits:7; -#endif - }; - }; -#else - BOOLEAN SpareBool; -#endif - HANDLE Mutant; - PVOID ImageBaseAddress; - PPEB_LDR_DATA Ldr; - struct _RTL_USER_PROCESS_PARAMETERS *ProcessParameters; - PVOID SubSystemData; - PVOID ProcessHeap; -#if (NTDDI_VERSION >= NTDDI_LONGHORN) - struct _RTL_CRITICAL_SECTION *FastPebLock; - PVOID AltThunkSListPtr; - PVOID IFEOKey; - union - { - ULONG CrossProcessFlags; - struct - { - ULONG ProcessInJob:1; - ULONG ProcessInitializing:1; - ULONG ProcessUsingVEH:1; - ULONG ProcessUsingVCH:1; - ULONG ReservedBits0:28; - }; - }; - union - { - PVOID* KernelCallbackTable; - PVOID UserSharedInfoPtr; - }; - ULONG SystemReserved[1]; - ULONG SpareUlong; - ULONG_PTR SparePebPtr0; -#else - PVOID FastPebLock; - PPEBLOCKROUTINE FastPebLockRoutine; - PPEBLOCKROUTINE FastPebUnlockRoutine; - ULONG EnvironmentUpdateCount; - PVOID* KernelCallbackTable; - PVOID EventLogSection; - PVOID EventLog; - PPEB_FREE_BLOCK FreeList; -#endif - ULONG TlsExpansionCounter; - PVOID TlsBitmap; - ULONG TlsBitmapBits[0x2]; - PVOID ReadOnlySharedMemoryBase; -#if (NTDDI_VERSION >= NTDDI_LONGHORN) - PVOID HotpatchInformation; -#else - PVOID ReadOnlySharedMemoryHeap; -#endif - PVOID* ReadOnlyStaticServerData; - PVOID AnsiCodePageData; - PVOID OemCodePageData; - PVOID UnicodeCaseTableData; - ULONG NumberOfProcessors; - ULONG NtGlobalFlag; - LARGE_INTEGER CriticalSectionTimeout; - ULONG_PTR HeapSegmentReserve; - ULONG_PTR HeapSegmentCommit; - ULONG_PTR HeapDeCommitTotalFreeThreshold; - ULONG_PTR HeapDeCommitFreeBlockThreshold; - ULONG NumberOfHeaps; - ULONG MaximumNumberOfHeaps; - PVOID* ProcessHeaps; - PVOID GdiSharedHandleTable; - PVOID ProcessStarterHelper; - ULONG GdiDCAttributeList; -#if (NTDDI_VERSION >= NTDDI_LONGHORN) - struct _RTL_CRITICAL_SECTION *LoaderLock; -#else - PVOID LoaderLock; -#endif - ULONG OSMajorVersion; - ULONG OSMinorVersion; - USHORT OSBuildNumber; - USHORT OSCSDVersion; - ULONG OSPlatformId; - ULONG ImageSubSystem; - ULONG ImageSubSystemMajorVersion; - ULONG ImageSubSystemMinorVersion; - ULONG ImageProcessAffinityMask; -#ifdef _WIN64 - ULONG GdiHandleBuffer[0x3c]; -#else - ULONG GdiHandleBuffer[0x22]; -#endif - PPOST_PROCESS_INIT_ROUTINE PostProcessInitRoutine; - struct _RTL_BITMAP *TlsExpansionBitmap; - ULONG TlsExpansionBitmapBits[0x20]; - ULONG SessionId; -#if (NTDDI_VERSION >= NTDDI_WINXP) - ULARGE_INTEGER AppCompatFlags; - ULARGE_INTEGER AppCompatFlagsUser; - PVOID pShimData; - PVOID AppCompatInfo; - UNICODE_STRING CSDVersion; - struct _ACTIVATION_CONTEXT_DATA *ActivationContextData; - struct _ASSEMBLY_STORAGE_MAP *ProcessAssemblyStorageMap; - struct _ACTIVATION_CONTEXT_DATA *SystemDefaultActivationContextData; - struct _ASSEMBLY_STORAGE_MAP *SystemAssemblyStorageMap; - ULONG_PTR MinimumStackCommit; -#endif -#if (NTDDI_VERSION >= NTDDI_WS03) - PVOID *FlsCallback; - LIST_ENTRY FlsListHead; - struct _RTL_BITMAP *FlsBitmap; - ULONG FlsBitmapBits[4]; - ULONG FlsHighIndex; -#endif -#if (NTDDI_VERSION >= NTDDI_LONGHORN) - PVOID WerRegistrationData; - PVOID WerShipAssertPtr; -#endif -} PEB, *PPEB; - -// -// GDI Batch Descriptor -// -typedef struct _GDI_TEB_BATCH -{ - ULONG Offset; - HANDLE HDC; - ULONG Buffer[0x136]; -} GDI_TEB_BATCH, *PGDI_TEB_BATCH; - // // Initial TEB // @@ -797,146 +644,39 @@ typedef struct _TEB_ACTIVE_FRAME PTEB_ACTIVE_FRAME_CONTEXT Context; } TEB_ACTIVE_FRAME, *PTEB_ACTIVE_FRAME; +typedef struct _CLIENT_ID32 +{ + ULONG UniqueProcess; + ULONG UniqueThread; +} CLIENT_ID32, *PCLIENT_ID32; + +typedef struct _CLIENT_ID64 +{ + ULONG64 UniqueProcess; + ULONG64 UniqueThread; +} CLIENT_ID64, *PCLIENT_ID64; + // +// Process Environment Block (PEB) // Thread Environment Block (TEB) // -typedef struct _TEB -{ - NT_TIB Tib; - PVOID EnvironmentPointer; - CLIENT_ID ClientId; - PVOID ActiveRpcHandle; - PVOID ThreadLocalStoragePointer; - struct _PEB *ProcessEnvironmentBlock; - ULONG LastErrorValue; - ULONG CountOfOwnedCriticalSections; - PVOID CsrClientThread; - struct _W32THREAD* Win32ThreadInfo; - ULONG User32Reserved[0x1A]; - ULONG UserReserved[5]; - PVOID WOW32Reserved; - LCID CurrentLocale; - ULONG FpSoftwareStatusRegister; - PVOID SystemReserved1[0x36]; - LONG ExceptionCode; - struct _ACTIVATION_CONTEXT_STACK *ActivationContextStackPointer; +#include "peb_teb.h" + #ifdef _WIN64 - UCHAR SpareBytes1[24]; -#else - UCHAR SpareBytes1[0x24]; +// +// Explicit 32 bit PEB/TEB +// +#define EXPLICIT_32BIT +#include "peb_teb.h" +#undef EXPLICIT_32BIT + +// +// Explicit 64 bit PEB/TEB +// +#define EXPLICIT_64BIT +#include "peb_teb.h" +#undef EXPLICIT_64BIT #endif - ULONG TxFsContext; - GDI_TEB_BATCH GdiTebBatch; - CLIENT_ID RealClientId; - PVOID GdiCachedProcessHandle; - ULONG GdiClientPID; - ULONG GdiClientTID; - PVOID GdiThreadLocalInfo; - SIZE_T Win32ClientInfo[62]; - PVOID glDispatchTable[0xE9]; - SIZE_T glReserved1[0x1D]; - PVOID glReserved2; - PVOID glSectionInfo; - PVOID glSection; - PVOID glTable; - PVOID glCurrentRC; - PVOID glContext; - NTSTATUS LastStatusValue; - UNICODE_STRING StaticUnicodeString; - WCHAR StaticUnicodeBuffer[0x105]; - PVOID DeallocationStack; - PVOID TlsSlots[0x40]; - LIST_ENTRY TlsLinks; - PVOID Vdm; - PVOID ReservedForNtRpc; - PVOID DbgSsReserved[0x2]; - ULONG HardErrorDisabled; -#ifdef _WIN64 - PVOID Instrumentation[11]; -#else - PVOID Instrumentation[9]; -#endif - GUID ActivityId; - PVOID SubProcessTag; - PVOID EtwTraceData; -#if (NTDDI_VERSION >= NTDDI_LONGHORN) - PVOID EtwLocalData; -#endif - PVOID WinSockData; - ULONG GdiBatchCount; -#if (NTDDI_VERSION >= NTDDI_LONGHORN) - BOOLEAN SpareBool0; - BOOLEAN SpareBool1; - BOOLEAN SpareBool2; -#else - BOOLEAN InDbgPrint; - BOOLEAN FreeStackOnTermination; - BOOLEAN HasFiberData; -#endif - UCHAR IdealProcessor; - ULONG GuaranteedStackBytes; - PVOID ReservedForPerf; - PVOID ReservedForOle; - ULONG WaitingOnLoaderLock; -#if (NTDDI_VERSION >= NTDDI_LONGHORN) - PVOID SavedPriorityState; -#else - ULONG SparePointer1; -#endif - ULONG SoftPatchPtr1; - ULONG SoftPatchPtr2; - PVOID *TlsExpansionSlots; - ULONG ImpersonationLocale; - ULONG IsImpersonating; - PVOID NlsCache; - PVOID pShimData; - ULONG HeapVirualAffinity; - PVOID CurrentTransactionHandle; - PTEB_ACTIVE_FRAME ActiveFrame; -#if (NTDDI_VERSION >= NTDDI_WS03) - PVOID FlsData; -#endif -#if (NTDDI_VERSION >= NTDDI_LONGHORN) - PVOID PreferredLangauges; - PVOID UserPrefLanguages; - PVOID MergedPrefLanguages; - ULONG MuiImpersonation; - union - { - struct - { - USHORT SpareCrossTebFlags:16; - }; - USHORT CrossTebFlags; - }; - union - { - struct - { - USHORT DbgSafeThunkCall:1; - USHORT DbgInDebugPrint:1; - USHORT DbgHasFiberData:1; - USHORT DbgSkipThreadAttach:1; - USHORT DbgWerInShipAssertCode:1; - USHORT DbgIssuedInitialBp:1; - USHORT DbgClonedThread:1; - USHORT SpareSameTebBits:9; - }; - USHORT SameTebFlags; - }; - PVOID TxnScopeEntercallback; - PVOID TxnScopeExitCAllback; - PVOID TxnScopeContext; - ULONG LockCount; - ULONG ProcessRundown; - ULONGLONG LastSwitchTime; - ULONGLONG TotalSwitchOutTime; - LARGE_INTEGER WaitReasonBitMap; -#else - UCHAR SafeThunkCall; - UCHAR BooleanSpare[3]; -#endif -} TEB, *PTEB; #ifdef NTOS_MODE_USER diff --git a/reactos/ntoskrnl/dbgk/dbgkutil.c b/reactos/ntoskrnl/dbgk/dbgkutil.c index 2285c95a955..8e9cf123392 100644 --- a/reactos/ntoskrnl/dbgk/dbgkutil.c +++ b/reactos/ntoskrnl/dbgk/dbgkutil.c @@ -242,10 +242,10 @@ DbgkCreateThread(IN PETHREAD Thread, wcsncpy(Teb->StaticUnicodeBuffer, L"ntdll.dll", sizeof(Teb->StaticUnicodeBuffer) / sizeof(WCHAR)); - Teb->Tib.ArbitraryUserPointer = Teb->StaticUnicodeBuffer; + Teb->NtTib.ArbitraryUserPointer = Teb->StaticUnicodeBuffer; /* Return it in the debug event as well */ - LoadDll->NamePointer = &Teb->Tib.ArbitraryUserPointer; + LoadDll->NamePointer = &Teb->NtTib.ArbitraryUserPointer; } /* Get a handle */ diff --git a/reactos/ntoskrnl/mm/ARM3/procsup.c b/reactos/ntoskrnl/mm/ARM3/procsup.c index 6064686d2b4..9a5af8d0588 100644 --- a/reactos/ntoskrnl/mm/ARM3/procsup.c +++ b/reactos/ntoskrnl/mm/ARM3/procsup.c @@ -514,9 +514,9 @@ MmCreatePeb(IN PEPROCESS Process, // // Write subsystem data // - Peb->ImageSubSystem = NtHeaders->OptionalHeader.Subsystem; - Peb->ImageSubSystemMajorVersion = NtHeaders->OptionalHeader.MajorSubsystemVersion; - Peb->ImageSubSystemMinorVersion = NtHeaders->OptionalHeader.MinorSubsystemVersion; + Peb->ImageSubsystem = NtHeaders->OptionalHeader.Subsystem; + Peb->ImageSubsystemMajorVersion = NtHeaders->OptionalHeader.MajorSubsystemVersion; + Peb->ImageSubsystemMinorVersion = NtHeaders->OptionalHeader.MinorSubsystemVersion; // // Check for version data @@ -632,13 +632,13 @@ MmCreateTeb(IN PEPROCESS Process, // // Set TIB Data // - Teb->Tib.ExceptionList = EXCEPTION_CHAIN_END; - Teb->Tib.Self = (PNT_TIB)Teb; + Teb->NtTib.ExceptionList = EXCEPTION_CHAIN_END; + Teb->NtTib.Self = (PNT_TIB)Teb; // // Identify this as an OS/2 V3.0 ("Cruiser") TIB // - Teb->Tib.Version = 30 << 8; + Teb->NtTib.Version = 30 << 8; // // Set TEB Data @@ -657,8 +657,8 @@ MmCreateTeb(IN PEPROCESS Process, // // Use initial TEB values // - Teb->Tib.StackBase = InitialTeb->StackBase; - Teb->Tib.StackLimit = InitialTeb->StackLimit; + Teb->NtTib.StackBase = InitialTeb->StackBase; + Teb->NtTib.StackLimit = InitialTeb->StackLimit; Teb->DeallocationStack = InitialTeb->AllocatedStackBase; } else @@ -666,8 +666,8 @@ MmCreateTeb(IN PEPROCESS Process, // // Use grandparent TEB values // - Teb->Tib.StackBase = InitialTeb->PreviousStackBase; - Teb->Tib.StackLimit = InitialTeb->PreviousStackLimit; + Teb->NtTib.StackBase = InitialTeb->PreviousStackBase; + Teb->NtTib.StackLimit = InitialTeb->PreviousStackLimit; } // diff --git a/reactos/ntoskrnl/rtl/libsupp.c b/reactos/ntoskrnl/rtl/libsupp.c index 86c32c522fa..f7672f81f22 100644 --- a/reactos/ntoskrnl/rtl/libsupp.c +++ b/reactos/ntoskrnl/rtl/libsupp.c @@ -366,8 +366,8 @@ RtlWalkFrameChain(OUT PVOID *Callers, } /* Get the stack limits */ - StackBegin = (ULONG_PTR)Teb->Tib.StackLimit; - StackEnd = (ULONG_PTR)Teb->Tib.StackBase; + StackBegin = (ULONG_PTR)Teb->NtTib.StackLimit; + StackEnd = (ULONG_PTR)Teb->NtTib.StackBase; #ifdef _M_IX86 Stack = TrapFrame->Ebp; #elif defined(_M_PPC) From 2e2e7009ab2e6db23fc2a52f9b5fa2279803322d Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 10 Dec 2009 00:39:03 +0000 Subject: [PATCH 194/286] Add PDE_TOP for x86 svn path=/branches/ros-amd64-bringup/; revision=44502 --- reactos/ntoskrnl/include/internal/i386/mm.h | 1 + 1 file changed, 1 insertion(+) diff --git a/reactos/ntoskrnl/include/internal/i386/mm.h b/reactos/ntoskrnl/include/internal/i386/mm.h index a74a49f6bf3..6ece2a7ba87 100644 --- a/reactos/ntoskrnl/include/internal/i386/mm.h +++ b/reactos/ntoskrnl/include/internal/i386/mm.h @@ -18,6 +18,7 @@ PULONG MmGetPageDirectory(VOID); #define PTE_BASE 0xC0000000 #define PDE_BASE 0xC0300000 #define PTE_TOP 0xC03FFFFF +#define PDE_TOP 0xC0300FFF #define PTE_PER_PAGE 1024 #define HYPER_SPACE 0xC0400000 #define HYPER_SPACE_END 0xC07FFFFF From 9a8e8247d84238ee1c57e1be0fecbc137a6c0789 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 10 Dec 2009 00:51:14 +0000 Subject: [PATCH 195/286] Fix number 1 svn path=/branches/ros-amd64-bringup/; revision=44503 --- reactos/base/shell/cmd/cmd.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/base/shell/cmd/cmd.c b/reactos/base/shell/cmd/cmd.c index 233cffa8931..59f00eada0a 100644 --- a/reactos/base/shell/cmd/cmd.c +++ b/reactos/base/shell/cmd/cmd.c @@ -244,7 +244,7 @@ static BOOL IsConsoleProcess(HANDLE Process) return TRUE; } - return IMAGE_SUBSYSTEM_WINDOWS_CUI == ProcessPeb.ImageSubSystem; + return IMAGE_SUBSYSTEM_WINDOWS_CUI == ProcessPeb.ImageSubsystem; } From c7b2342d5c763c6c82f3e43f754f76fced04e244 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 10 Dec 2009 00:51:35 +0000 Subject: [PATCH 196/286] Fix number 2 svn path=/branches/ros-amd64-bringup/; revision=44504 --- reactos/ntoskrnl/ke/i386/usercall.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/reactos/ntoskrnl/ke/i386/usercall.c b/reactos/ntoskrnl/ke/i386/usercall.c index a07a0550e01..07ce4442df4 100644 --- a/reactos/ntoskrnl/ke/i386/usercall.c +++ b/reactos/ntoskrnl/ke/i386/usercall.c @@ -169,7 +169,7 @@ KeUserModeCallback(IN ULONG RoutineIndex, /* Save the exception list */ Teb = KeGetCurrentThread()->Teb; - ExceptionList = Teb->Tib.ExceptionList; + ExceptionList = Teb->NtTib.ExceptionList; /* Jump to user mode */ *UserEsp = NewStack; @@ -177,7 +177,7 @@ KeUserModeCallback(IN ULONG RoutineIndex, if (CallbackStatus != STATUS_CALLBACK_POP_STACK) { /* Only restore the exception list if we didn't crash in ring 3 */ - Teb->Tib.ExceptionList = ExceptionList; + Teb->NtTib.ExceptionList = ExceptionList; CallbackStatus = STATUS_SUCCESS; } else From 5fae13a4ff34bfa7cc1313e7b360f0301bdb31ed Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 10 Dec 2009 01:06:30 +0000 Subject: [PATCH 197/286] Add MmFreeSection prototype svn path=/branches/ros-amd64-bringup/; revision=44505 --- reactos/ntoskrnl/include/internal/mm.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/reactos/ntoskrnl/include/internal/mm.h b/reactos/ntoskrnl/include/internal/mm.h index fb03b7d0ead..55c90fd5f73 100644 --- a/reactos/ntoskrnl/include/internal/mm.h +++ b/reactos/ntoskrnl/include/internal/mm.h @@ -1583,6 +1583,12 @@ MmAllocateSection( PVOID BaseAddress ); +VOID +NTAPI +MmFreeSection( + PVOID BaseAddress +); + NTSTATUS NTAPI MmQuerySectionView( From bcd5ab11752c37263331e35c443da9c7b984e201 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 10 Dec 2009 01:09:51 +0000 Subject: [PATCH 198/286] fix a typo svn path=/branches/ros-amd64-bringup/; revision=44506 --- reactos/include/ndk/peb_teb.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/include/ndk/peb_teb.h b/reactos/include/ndk/peb_teb.h index d6e9d71056e..030508d2673 100644 --- a/reactos/include/ndk/peb_teb.h +++ b/reactos/include/ndk/peb_teb.h @@ -215,7 +215,7 @@ typedef struct STRUCT(_TEB) LONG ExceptionCode; #if (NTDDI_VERSION >= NTDDI_LONGHORN) PTR(struct _ACTIVATION_CONTEXT_STACK*) ActivationContextStackPointer; - UCHAR SpareBytes1[0x30 - 3 * sizeof(PTR(PVOID)]; + UCHAR SpareBytes1[0x30 - 3 * sizeof(PTR(PVOID))]; ULONG TxFsContext; #elif (NTDDI_VERSION >= NTDDI_WS03) PTR(struct _ACTIVATION_CONTEXT_STACK*) ActivationContextStackPointer; From ec3e6b93824da1a140e0e3a3362eeba0be72e5e9 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 10 Dec 2009 01:44:42 +0000 Subject: [PATCH 199/286] updates EFLAGS definitions svn path=/branches/ros-amd64-bringup/; revision=44508 --- reactos/include/ndk/amd64/ketypes.h | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/reactos/include/ndk/amd64/ketypes.h b/reactos/include/ndk/amd64/ketypes.h index 2af617fd230..fdd2d86b7b1 100644 --- a/reactos/include/ndk/amd64/ketypes.h +++ b/reactos/include/ndk/amd64/ketypes.h @@ -82,19 +82,24 @@ Author: // // EFlags // -#define EFLAGS_CF 0x01L -#define EFLAGS_ZF 0x40L -#define EFLAGS_TF 0x100L -#define EFLAGS_INTERRUPT_MASK 0x200L -#define EFLAGS_DF 0x400L -#define EFLAGS_NESTED_TASK 0x4000L -#define EFLAGS_V86_MASK 0x20000 +#define EFLAGS_CF 0x01 +#define EFLAGS_PF 0x04 +#define EFLAGS_AF 0x10 +#define EFLAGS_ZF 0x40 +#define EFLAGS_SF 0x80 +#define EFLAGS_TF 0x100 +#define EFLAGS_INTERRUPT_MASK 0x200 +#define EFLAGS_DF 0x400 +#define EFLAGS_OF 0x800 +#define EFLAGS_IOPL_MASK 0x3000 +#define EFLAGS_NESTED_TASK 0x4000 +#define EFLAGS_RF 0x10000 +#define EFLAGS_VM 0x20000 #define EFLAGS_ALIGN_CHECK 0x40000 #define EFLAGS_VIF 0x80000 #define EFLAGS_VIP 0x100000 +#define EFLAGS_ID 0x200000 #define EFLAGS_USER_SANITIZE 0x3F4DD7 -#define EFLAG_SIGN 0x8000 -#define EFLAG_ZERO 0x4000 // // IPI Types From 74ce61800e33b8c1965830543009ec28f235d37e Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 10 Dec 2009 01:48:07 +0000 Subject: [PATCH 200/286] Don't C_ASSERT inside a function body. The new definition causes a warning with this. svn path=/branches/ros-amd64-bringup/; revision=44509 --- reactos/ntoskrnl/ke/wait.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/reactos/ntoskrnl/ke/wait.c b/reactos/ntoskrnl/ke/wait.c index 74c960cf019..4e70fc3e427 100644 --- a/reactos/ntoskrnl/ke/wait.c +++ b/reactos/ntoskrnl/ke/wait.c @@ -117,6 +117,9 @@ KiAcquireFastMutex(IN PFAST_MUTEX FastMutex) NULL); } +/* We depend on these bits being just right */ +C_ASSERT((GM_LOCK_WAITER_WOKEN * 2) == GM_LOCK_WAITER_INC); + VOID FASTCALL KiAcquireGuardedMutex(IN OUT PKGUARDED_MUTEX GuardedMutex) @@ -124,9 +127,6 @@ KiAcquireGuardedMutex(IN OUT PKGUARDED_MUTEX GuardedMutex) ULONG BitsToRemove, BitsToAdd; LONG OldValue, NewValue; - /* We depend on these bits being just right */ - C_ASSERT((GM_LOCK_WAITER_WOKEN * 2) == GM_LOCK_WAITER_INC); - /* Increase the contention count */ GuardedMutex->Contention++; From 3f4e4492cd84b767cbe770e17184d01a0e84db9e Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 10 Dec 2009 02:17:54 +0000 Subject: [PATCH 201/286] [IPHLPAPI] Don't redefine _WIN32_WINNT to 0x500. When using the NDK we need at least 0x503 when compiling for 64 bit (XP64 is 502) svn path=/branches/ros-amd64-bringup/; revision=44510 --- reactos/dll/win32/iphlpapi/iphlpapi_private.h | 2 -- 1 file changed, 2 deletions(-) diff --git a/reactos/dll/win32/iphlpapi/iphlpapi_private.h b/reactos/dll/win32/iphlpapi/iphlpapi_private.h index 4210198a20c..3a01c5794cf 100644 --- a/reactos/dll/win32/iphlpapi/iphlpapi_private.h +++ b/reactos/dll/win32/iphlpapi/iphlpapi_private.h @@ -19,8 +19,6 @@ # include #endif -#undef _WIN32_WINNT -#define _WIN32_WINNT 0x500 #define WIN32_NO_STATUS #include #include From ee49fa9c0f8545268c9e6caf9a54b944c5553ccb Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 10 Dec 2009 02:30:09 +0000 Subject: [PATCH 202/286] [NDK] - Add Wx86ThreadState - Add WinXP version of ACTIVATION_CONTEXT_STACK - rtltypes doesn't depend on pstypes, but the opposite way around now svn path=/branches/ros-amd64-bringup/; revision=44511 --- reactos/include/ndk/peb_teb.h | 6 ++++-- reactos/include/ndk/pstypes.h | 12 ++++++++++++ reactos/include/ndk/rtltypes.h | 11 ++++++++++- 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/reactos/include/ndk/peb_teb.h b/reactos/include/ndk/peb_teb.h index 030508d2673..b41636a434c 100644 --- a/reactos/include/ndk/peb_teb.h +++ b/reactos/include/ndk/peb_teb.h @@ -165,7 +165,9 @@ C_ASSERT(FIELD_OFFSET(STRUCT(PEB), ImageSubsystem) == 0x128); C_ASSERT(FIELD_OFFSET(STRUCT(PEB), ImageProcessAffinityMask) == 0x138); C_ASSERT(FIELD_OFFSET(STRUCT(PEB), PostProcessInitRoutine) == 0x230); C_ASSERT(FIELD_OFFSET(STRUCT(PEB), SessionId) == 0x2C0); +#if (NTDDI_VERSION >= NTDDI_WS03) C_ASSERT(FIELD_OFFSET(STRUCT(PEB), FlsHighIndex) == 0x350); +#endif #else C_ASSERT(FIELD_OFFSET(STRUCT(PEB), Mutant) == 0x04); C_ASSERT(FIELD_OFFSET(STRUCT(PEB), Ldr) == 0x0C); @@ -178,8 +180,10 @@ C_ASSERT(FIELD_OFFSET(STRUCT(PEB), ImageSubsystem) == 0x0B4); C_ASSERT(FIELD_OFFSET(STRUCT(PEB), ImageProcessAffinityMask) == 0x0C0); C_ASSERT(FIELD_OFFSET(STRUCT(PEB), PostProcessInitRoutine) == 0x14C); C_ASSERT(FIELD_OFFSET(STRUCT(PEB), SessionId) == 0x1D4); +#if (NTDDI_VERSION >= NTDDI_WS03) C_ASSERT(FIELD_OFFSET(STRUCT(PEB), FlsHighIndex) == 0x22C); #endif +#endif // // GDI Batch Descriptor @@ -373,8 +377,6 @@ C_ASSERT(FIELD_OFFSET(STRUCT(TEB), ExceptionCode) == 0x1A4); C_ASSERT(FIELD_OFFSET(STRUCT(TEB), GdiTebBatch) == 0x1D4); C_ASSERT(FIELD_OFFSET(STRUCT(TEB), LastStatusValue) == 0xBF4); C_ASSERT(FIELD_OFFSET(STRUCT(TEB), Vdm) == 0xF18); -C_ASSERT(FIELD_OFFSET(STRUCT(TEB), HardErrorMode) == 0xF28); -C_ASSERT(FIELD_OFFSET(STRUCT(TEB), SubProcessTag) == 0xF64); C_ASSERT(FIELD_OFFSET(STRUCT(TEB), GdiBatchCount) == 0xF70); C_ASSERT(FIELD_OFFSET(STRUCT(TEB), TlsExpansionSlots) == 0xF94); C_ASSERT(FIELD_OFFSET(STRUCT(TEB), ActiveFrame) == 0xFB0); diff --git a/reactos/include/ndk/pstypes.h b/reactos/include/ndk/pstypes.h index ca5477ca371..305f20e53ed 100644 --- a/reactos/include/ndk/pstypes.h +++ b/reactos/include/ndk/pstypes.h @@ -26,6 +26,7 @@ Author: #include #include #include +#include #ifndef NTOS_MODE_USER #include #include @@ -656,6 +657,17 @@ typedef struct _CLIENT_ID64 ULONG64 UniqueThread; } CLIENT_ID64, *PCLIENT_ID64; +#if (NTDDI_VERSION < NTDDI_WS03) +typedef struct _Wx86ThreadState +{ + PULONG CallBx86Eip; + PVOID DeallocationCpu; + BOOLEAN UseKnownWx86Dll; + CHAR OleStubInvoked; +} Wx86ThreadState, *PWx86ThreadState; +#endif + + // // Process Environment Block (PEB) // Thread Environment Block (TEB) diff --git a/reactos/include/ndk/rtltypes.h b/reactos/include/ndk/rtltypes.h index 70aa3ed5bdc..02f5c59887b 100644 --- a/reactos/include/ndk/rtltypes.h +++ b/reactos/include/ndk/rtltypes.h @@ -23,7 +23,6 @@ Author: // Dependencies // #include -#include // // Maximum Atom Length @@ -760,6 +759,7 @@ typedef struct _RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED } RTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED, *PRTL_CALLER_ALLOCATED_ACTIVATION_CONTEXT_STACK_FRAME_EXTENDED; +#if (NTDDI_VERSION >= NTDDI_WS03) typedef struct _ACTIVATION_CONTEXT_STACK { PRTL_ACTIVATION_CONTEXT_STACK_FRAME ActiveFrame; @@ -769,6 +769,15 @@ typedef struct _ACTIVATION_CONTEXT_STACK ULONG StackId; } ACTIVATION_CONTEXT_STACK, *PACTIVATION_CONTEXT_STACK; +#else +typedef struct _ACTIVATION_CONTEXT_STACK +{ + ULONG Flags; + ULONG NextCookieSequenceNumber; + PVOID ActiveFrame; + LIST_ENTRY FrameListCache; +} ACTIVATION_CONTEXT_STACK, *PACTIVATION_CONTEXT_STACK; +#endif #endif From d7c4b1608dad343799d56bdf54b98932530a41c0 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 10 Dec 2009 03:07:30 +0000 Subject: [PATCH 203/286] [NDK] Fix some dependencies svn path=/branches/ros-amd64-bringup/; revision=44512 --- reactos/include/ndk/rtlfuncs.h | 1 + reactos/include/ndk/rtltypes.h | 2 ++ reactos/include/ndk/umtypes.h | 3 ++- 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/reactos/include/ndk/rtlfuncs.h b/reactos/include/ndk/rtlfuncs.h index 5db3fc34daf..960d8d2af34 100644 --- a/reactos/include/ndk/rtlfuncs.h +++ b/reactos/include/ndk/rtlfuncs.h @@ -25,6 +25,7 @@ Author: #include #include #include +#include #include #include "in6addr.h" #include "inaddr.h" diff --git a/reactos/include/ndk/rtltypes.h b/reactos/include/ndk/rtltypes.h index 02f5c59887b..aa6d8607fb6 100644 --- a/reactos/include/ndk/rtltypes.h +++ b/reactos/include/ndk/rtltypes.h @@ -23,6 +23,8 @@ Author: // Dependencies // #include +#include +#include // // Maximum Atom Length diff --git a/reactos/include/ndk/umtypes.h b/reactos/include/ndk/umtypes.h index 7e02d7664b8..95c1c8f2f53 100644 --- a/reactos/include/ndk/umtypes.h +++ b/reactos/include/ndk/umtypes.h @@ -151,6 +151,8 @@ typedef struct _CSTRING CONST CHAR *Buffer; } CSTRING, *PCSTRING; +#endif + typedef struct _STRING32 { USHORT Length; USHORT MaximumLength; @@ -167,7 +169,6 @@ typedef struct _STRING64 { UNICODE_STRING64, *PUNICODE_STRING64, ANSI_STRING64, *PANSI_STRING64; -#endif typedef struct _OBJECT_ATTRIBUTES { From cda052bdd5bfd1cfe53d2d5036d4e593fb7fd89b Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 10 Dec 2009 11:54:17 +0000 Subject: [PATCH 204/286] [NTDKK] - Don't use PEB::FastPeb(Un)LockRoutine, these members are deprecated since Windows 2003, use RtlEnter/LeaveCriticalSection instead. svn path=/branches/ros-amd64-bringup/; revision=44521 --- reactos/dll/ntdll/ldr/startup.c | 2 -- reactos/dll/ntdll/rtl/libsupp.c | 4 ++-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/reactos/dll/ntdll/ldr/startup.c b/reactos/dll/ntdll/ldr/startup.c index c52c4354baf..11101294c51 100644 --- a/reactos/dll/ntdll/ldr/startup.c +++ b/reactos/dll/ntdll/ldr/startup.c @@ -343,8 +343,6 @@ LdrpInit2(PCONTEXT Context, /* initalize peb lock support */ RtlInitializeCriticalSection(&PebLock); Peb->FastPebLock = &PebLock; - Peb->FastPebLockRoutine = (PPEBLOCKROUTINE)RtlEnterCriticalSection; - Peb->FastPebUnlockRoutine = (PPEBLOCKROUTINE)RtlLeaveCriticalSection; /* initialize tls bitmaps */ RtlInitializeBitMap(&TlsBitMap, Peb->TlsBitmapBits, TLS_MINIMUM_AVAILABLE); diff --git a/reactos/dll/ntdll/rtl/libsupp.c b/reactos/dll/ntdll/rtl/libsupp.c index 5fdcb68788e..b3e3a499497 100644 --- a/reactos/dll/ntdll/rtl/libsupp.c +++ b/reactos/dll/ntdll/rtl/libsupp.c @@ -88,7 +88,7 @@ VOID NTAPI RtlAcquirePebLock(VOID) { PPEB Peb = NtCurrentPeb (); - Peb->FastPebLockRoutine (Peb->FastPebLock); + RtlEnterCriticalSection(Peb->FastPebLock); } /* @@ -98,7 +98,7 @@ VOID NTAPI RtlReleasePebLock(VOID) { PPEB Peb = NtCurrentPeb (); - Peb->FastPebUnlockRoutine (Peb->FastPebLock); + RtlLeaveCriticalSection(Peb->FastPebLock); } /* From fbb3b9e1a87ba4419e5a0998f5ef2a83adff580d Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 10 Dec 2009 12:39:54 +0000 Subject: [PATCH 205/286] Fix usage of PEB::KernelCallbacktable. It's a PVOID. svn path=/branches/ros-amd64-bringup/; revision=44523 --- reactos/dll/ntdll/dispatch/dispatch.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/reactos/dll/ntdll/dispatch/dispatch.c b/reactos/dll/ntdll/dispatch/dispatch.c index 4fb3c43a9ca..50a9ee88f67 100644 --- a/reactos/dll/ntdll/dispatch/dispatch.c +++ b/reactos/dll/ntdll/dispatch/dispatch.c @@ -79,8 +79,8 @@ KiUserCallbackDispatcher(ULONG Index, ULONG ArgumentLength) { /* Return with the result of the callback function */ + USER_CALL *KernelCallbackTable = NtCurrentPeb()->KernelCallbackTable; ZwCallbackReturn(NULL, 0, - ((USER_CALL)(NtCurrentPeb()->KernelCallbackTable[Index])) - (Argument, ArgumentLength)); + KernelCallbackTable[Index](Argument, ArgumentLength)); } From 07d56c3f54d66cf94936ccef54677c98da33d0b7 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 10 Dec 2009 13:04:36 +0000 Subject: [PATCH 206/286] [NDK] - Add missing TEB member for Vista svn path=/branches/ros-amd64-bringup/; revision=44524 --- reactos/include/ndk/peb_teb.h | 1 + 1 file changed, 1 insertion(+) diff --git a/reactos/include/ndk/peb_teb.h b/reactos/include/ndk/peb_teb.h index b41636a434c..a1cc5910af7 100644 --- a/reactos/include/ndk/peb_teb.h +++ b/reactos/include/ndk/peb_teb.h @@ -262,6 +262,7 @@ typedef struct STRUCT(_TEB) GUID ActivityId; PTR(PVOID) SubProcessTag; PTR(PVOID) EtwLocalData; + PTR(PVOID) EtwTraceData; #elif (NTDDI_VERSION >= NTDDI_WS03) PTR(PVOID) Instrumentation[14]; PTR(PVOID) SubProcessTag; From 5c58ca4af875e04cb354b312fa561066ed8095a9 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 10 Dec 2009 13:33:57 +0000 Subject: [PATCH 207/286] [NDK] Fix a TEB array size. svn path=/branches/ros-amd64-bringup/; revision=44525 --- reactos/include/ndk/peb_teb.h | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/reactos/include/ndk/peb_teb.h b/reactos/include/ndk/peb_teb.h index a1cc5910af7..38791b31a21 100644 --- a/reactos/include/ndk/peb_teb.h +++ b/reactos/include/ndk/peb_teb.h @@ -258,7 +258,7 @@ typedef struct STRUCT(_TEB) ULONG HardErrorsAreDisabled; #endif #if (NTDDI_VERSION >= NTDDI_LONGHORN) - PTR(PVOID) Instrumentation[9]; + PTR(PVOID) Instrumentation[13 - sizeof(GUID)/sizeof(PTR(PVOID))]; GUID ActivityId; PTR(PVOID) SubProcessTag; PTR(PVOID) EtwLocalData; @@ -365,7 +365,6 @@ C_ASSERT(FIELD_OFFSET(STRUCT(TEB), GdiTebBatch) == 0x2F0); C_ASSERT(FIELD_OFFSET(STRUCT(TEB), LastStatusValue) == 0x1250); C_ASSERT(FIELD_OFFSET(STRUCT(TEB), Vdm) == 0x1690); C_ASSERT(FIELD_OFFSET(STRUCT(TEB), HardErrorMode) == 0x16B0); -C_ASSERT(FIELD_OFFSET(STRUCT(TEB), SubProcessTag) == 0x1728); C_ASSERT(FIELD_OFFSET(STRUCT(TEB), GdiBatchCount) == 0x1740); C_ASSERT(FIELD_OFFSET(STRUCT(TEB), IdealProcessor) == 0x1747); C_ASSERT(FIELD_OFFSET(STRUCT(TEB), WaitingOnLoaderLock) == 0x1760); From 19829753fda0564dd2766a954d1dc5a580c0ec72 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 10 Dec 2009 13:40:05 +0000 Subject: [PATCH 208/286] More fix of TEB::KernelCallbackTable usage svn path=/branches/ros-amd64-bringup/; revision=44526 --- reactos/dll/win32/user32/misc/dllmain.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/reactos/dll/win32/user32/misc/dllmain.c b/reactos/dll/win32/user32/misc/dllmain.c index 044f493fda4..7a1abc97d1e 100644 --- a/reactos/dll/win32/user32/misc/dllmain.c +++ b/reactos/dll/win32/user32/misc/dllmain.c @@ -217,23 +217,25 @@ BOOL Init(VOID) { USERCONNECT UserCon; + PVOID *KernelCallbackTable; /* Set up the kernel callbacks. */ - NtCurrentPeb()->KernelCallbackTable[USER32_CALLBACK_WINDOWPROC] = + KernelCallbackTable = NtCurrentPeb()->KernelCallbackTable; + KernelCallbackTable[USER32_CALLBACK_WINDOWPROC] = (PVOID)User32CallWindowProcFromKernel; - NtCurrentPeb()->KernelCallbackTable[USER32_CALLBACK_SENDASYNCPROC] = + KernelCallbackTable[USER32_CALLBACK_SENDASYNCPROC] = (PVOID)User32CallSendAsyncProcForKernel; - NtCurrentPeb()->KernelCallbackTable[USER32_CALLBACK_LOADSYSMENUTEMPLATE] = + KernelCallbackTable[USER32_CALLBACK_LOADSYSMENUTEMPLATE] = (PVOID)User32LoadSysMenuTemplateForKernel; - NtCurrentPeb()->KernelCallbackTable[USER32_CALLBACK_LOADDEFAULTCURSORS] = + KernelCallbackTable[USER32_CALLBACK_LOADDEFAULTCURSORS] = (PVOID)User32SetupDefaultCursors; - NtCurrentPeb()->KernelCallbackTable[USER32_CALLBACK_HOOKPROC] = + KernelCallbackTable[USER32_CALLBACK_HOOKPROC] = (PVOID)User32CallHookProcFromKernel; - NtCurrentPeb()->KernelCallbackTable[USER32_CALLBACK_EVENTPROC] = + KernelCallbackTable[USER32_CALLBACK_EVENTPROC] = (PVOID)User32CallEventProcFromKernel; - NtCurrentPeb()->KernelCallbackTable[USER32_CALLBACK_LOADMENU] = + KernelCallbackTable[USER32_CALLBACK_LOADMENU] = (PVOID)User32CallLoadMenuFromKernel; - NtCurrentPeb()->KernelCallbackTable[USER32_CALLBACK_CLIENTTHREADSTARTUP] = + KernelCallbackTable[USER32_CALLBACK_CLIENTTHREADSTARTUP] = (PVOID)User32CallClientThreadSetupFromKernel; NtUserProcessConnect( NtCurrentProcess(), From f2e27ac975e46c40d18b31db910afd87ab45965d Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 10 Dec 2009 21:04:15 +0000 Subject: [PATCH 209/286] Don't include i386/ke.h from ntoskrnl, it's not needed svn path=/branches/ros-amd64-bringup/; revision=44530 --- reactos/boot/freeldr/freeldr/include/freeldr.h | 1 - 1 file changed, 1 deletion(-) diff --git a/reactos/boot/freeldr/freeldr/include/freeldr.h b/reactos/boot/freeldr/freeldr/include/freeldr.h index 92734d102db..cc9325ad812 100644 --- a/reactos/boot/freeldr/freeldr/include/freeldr.h +++ b/reactos/boot/freeldr/freeldr/include/freeldr.h @@ -79,7 +79,6 @@ #include #include #include -#include #elif defined(_M_PPC) #include #elif defined(_M_ARM) From 6397d5d0a2a8e55c232923d081e58fffe2cfcaca Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Fri, 11 Dec 2009 12:15:23 +0000 Subject: [PATCH 210/286] Fix i386 build svn path=/branches/ros-amd64-bringup/; revision=44536 --- rostests/apitests/w32kdll/w32kdll_vista/w32kdll_vista.rbuild | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rostests/apitests/w32kdll/w32kdll_vista/w32kdll_vista.rbuild b/rostests/apitests/w32kdll/w32kdll_vista/w32kdll_vista.rbuild index 30c5441cbea..e47a3395033 100644 --- a/rostests/apitests/w32kdll/w32kdll_vista/w32kdll_vista.rbuild +++ b/rostests/apitests/w32kdll/w32kdll_vista/w32kdll_vista.rbuild @@ -1,7 +1,7 @@ - w32kdll_vista.S + w32kdll_vista-i386.S w32kdll_vista-amd64.S From 304829a94638f3a2d6a849b61cd650f441cd33da Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Fri, 11 Dec 2009 12:29:05 +0000 Subject: [PATCH 211/286] Fix i386 build svn path=/branches/ros-amd64-bringup/; revision=44537 --- rostests/tests/bench/bench-thread.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rostests/tests/bench/bench-thread.c b/rostests/tests/bench/bench-thread.c index d0616130542..a8689af68db 100644 --- a/rostests/tests/bench/bench-thread.c +++ b/rostests/tests/bench/bench-thread.c @@ -7,7 +7,7 @@ DWORD WINAPI thread_main1(LPVOID param) { - printf("Thread 1 running (Counter %lu)\n", param); + printf("Thread 1 running (Counter %lu)\n", PtrToLong(param)); SleepEx(INFINITE, TRUE); return 0; } @@ -16,7 +16,7 @@ thread_main1(LPVOID param) DWORD WINAPI thread_main2(LPVOID param) { - printf("Thread 2 running (Counter %lu)\n", param); + printf("Thread 2 running (Counter %lu)\n", PtrToLong(param)); Sleep(INFINITE); return 0; } From 17360de0ad9ca8c5ab52bff90d616b693f87ac81 Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Fri, 11 Dec 2009 19:01:45 +0000 Subject: [PATCH 212/286] -Detect if this is a amd64 CPU before attempting to boot. Patch by Basil Gello (gellmar at yahoo dot com). svn path=/branches/ros-amd64-bringup/; revision=44540 --- .../boot/freeldr/freeldr/arch/amd64/arch.S | 140 ++++++++++++++++-- 1 file changed, 129 insertions(+), 11 deletions(-) diff --git a/reactos/boot/freeldr/freeldr/arch/amd64/arch.S b/reactos/boot/freeldr/freeldr/arch/amd64/arch.S index 350f377b0a0..0f6c257e34a 100644 --- a/reactos/boot/freeldr/freeldr/arch/amd64/arch.S +++ b/reactos/boot/freeldr/freeldr/arch/amd64/arch.S @@ -20,6 +20,10 @@ RealEntryPoint: mov gs, ax mov ss, ax + /* checkPoint Charlie - where it all began... */ + mov si, offset _CheckPoint0 + call writestr + /* Setup a real mode stack */ mov sp, stack16 @@ -41,14 +45,74 @@ RealEntryPoint: call x86_16_EnableA20 + /* checkPoint Charlie - where it all began... */ + mov si, offset _CheckPoint1 + call writestr + call x86_16_BuildPageTables + + /* checkPoint Charlie - where it all began... */ + mov si, offset _CheckPoint2 + call writestr - /* Switch to long mode */ + /* Check if CPU supports CPUID */ + + pushfd + pop eax + mov ebx, eax + xor eax, 0x00200000 + push eax + popfd + pushfd + pop eax + cmp eax,ebx + jz NO_CPUID_SUPPORT_DETECTED + + /* CPUID support detected - getting the PAE/PGE */ + + mov eax,1 // Fn0000_0001 - PAE in EDX[6] + cpuid + xor eax,eax + and edx,0x00a0 + test edx,edx // are PAE and PGE bits set? + jz NO_X64_SUPPORT_DETECTED + + /* PAE and PGE are here */ + + xor edx, edx + mov eax, 0x80000001 + cpuid + and edx, 0x20000000 + test edx,edx + jz NO_X64_SUPPORT_DETECTED + + /* X64 Processor */ + + /* checkPoint Charlie - where it all began... */ + mov si, offset _CheckPoint3 + call writestr + + jmp _switch64 + +NO_X64_SUPPORT_DETECTED: + mov si, offset _NotAnX64Processor // Loading message + call writestr + jmp _fail + +NO_CPUID_SUPPORT_DETECTED: + mov si, offset _NoCPUIDSupport // Loading message + call writestr + +_fail: + jmp _fail + nop + nop + +_switch64: call x86_16_SwitchToLong .code64 - /* Checkpoint */ // mov ax, LMODE_DS // mov ds, ax // mov word ptr ds:[0xb8000], 0x0e00 + '1' @@ -60,17 +124,13 @@ RealEntryPoint: /* Checkpoint */ // mov ax, LMODE_DS // mov ds, ax -// mov word ptr ds:[0xb8002], 0x0e00 + '2' +// mov word ptr ds:[0xb8002], 0x0e02 + '2' + /* Return into real mode */ call x86_64_SwitchToReal .code16 - /* Checkpoint */ -// mov ax, 0xb800 -// mov fs, ax -// mov word ptr fs:[0xA0], 0x0e00 + '0' - // int 0x19 /* We should never get here */ @@ -105,7 +165,6 @@ x86_16_EnableA20: popa ret - /* * We define 512 2MB pages at the start of memory, so we can access the first * 1 GB as if paging was disabled @@ -158,9 +217,39 @@ Bpt2: popa ret +/* + * writechr,writestr + * + * + */ +writestr: + pushfd + pushad +.top: + lodsb + and al, al + jz .end + call writechr + jmp short .top +.end: + popad + popfd + ret + + +writechr: + pushf + pusha + mov ah, 0x0E + xor bx, bx + int 0x10 + popa + popf + ret //.global x86_16_SwitchToLong x86_16_SwitchToLong: + cli xor ax,ax @@ -205,8 +294,7 @@ LongCat: /* Now return in long mode! */ ret - -/** 64 But functions **********************************************************/ +/** 64 Bit functions **********************************************************/ .code64 .global x86_64_SwitchToReal @@ -325,6 +413,36 @@ _BootDrive: _BootPartition: .long 0 +.global _NotAnX64Processor +_NotAnX64Processor: + .ascii "FreeLoader: No x64-compatible CPU detected! Exiting..." + .byte 0x0d, 0x0a, 0 + +.global _NoCPUIDSupport +_NoCPUIDSupport: + .ascii "FreeLoader: No CPUID instruction support detected! Exiting..." + .byte 0x0d, 0x0a, 0 + +/////////////////////////// Checkpoint messages /////////////////////////////// +.global _CheckPoint0 +_CheckPoint0: + .ascii "Starting FreeLoader..." + .byte 0x0d, 0x0a, 0 + +.global _CheckPoint1 +_CheckPoint1: + .ascii "FreeLoader[16-bit]: building page tables..." + .byte 0x0d, 0x0a, 0 + +.global _CheckPoint2 +_CheckPoint2: + .ascii "FreeLoader[16-bit]: checking CPU for x64 long mode..." + .byte 0x0d, 0x0a, 0 + +.global _CheckPoint3 +_CheckPoint3: + .ascii "FreeLoader: Switching to x64 long mode..." + .byte 0x0d, 0x0a, 0 /////////////////////////////////////////////////////////////////////////////// From 42610c6d93d648b48dd9db607330bff1397b89f4 Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Sat, 12 Dec 2009 15:41:43 +0000 Subject: [PATCH 213/286] -Remove hacks for older gcc versions. -Black list gcc below 4.4.2 -Black list ld below 20091119. -99.99% Based on bug 4810 -Speeds up my build by 3 minutes svn path=/branches/ros-amd64-bringup/; revision=44550 --- reactos/ReactOS-generic.rbuild | 6 +- .../games/solitaire/solitaire.cpp | 2 - .../base/applications/games/spider/spider.cpp | 3 - reactos/dll/directx/ddraw/ddraw.rbuild | 2 - reactos/dll/directx/wine/ddraw/ddraw.rbuild | 3 - reactos/dll/win32/actxprxy/actxprxy.rbuild | 1 - reactos/dll/win32/advapi32/advapi32.rbuild | 1 - reactos/dll/win32/crypt32/crypt32.rbuild | 2 - reactos/dll/win32/gdi32/gdi32.rbuild | 4 -- reactos/dll/win32/kernel32/kernel32.rbuild | 4 -- reactos/dll/win32/ole32/ole32.rbuild | 2 - reactos/dll/win32/psapi/psapi.rbuild | 5 +- reactos/dll/win32/qmgrprxy/qmgrprxy.rbuild | 1 - reactos/dll/win32/rpcrt4/rpcrt4.rbuild | 2 - reactos/dll/win32/setupapi/setupapi.rbuild | 2 - reactos/dll/win32/syssetup/syssetup.rbuild | 2 - reactos/dll/win32/user32/user32.rbuild | 4 -- reactos/dll/win32/winmm/mci.c | 2 +- reactos/dll/win32/wintrust/wintrust.rbuild | 2 - reactos/dll/win32/wlanapi/wlanapi.rbuild | 2 - .../drivers/input/kbdclass/kbdclass.rbuild | 2 - .../drivers/input/mouclass/mouclass.rbuild | 2 - reactos/drivers/network/afd/afd.rbuild | 4 -- reactos/drivers/network/tcpip/tcpip.rbuild | 4 -- reactos/drivers/video/miniport/vbe/vbemp.c | 2 + reactos/hal/halx86/mp/apic.c | 2 + reactos/lib/nls/idna/idna.cpp | 5 +- reactos/lib/nls/idna/nameprep.cpp | 3 +- reactos/lib/rtl/rtl.rbuild | 4 -- reactos/ntoskrnl/mm/ARM3/contmem.c | 1 - reactos/ntoskrnl/ntoskrnl-generic.rbuild | 5 -- reactos/ntoskrnl/ps/job.c | 4 +- reactos/ntoskrnl/ps/process.c | 2 +- reactos/ntoskrnl/ps/query.c | 2 +- .../subsystems/win32/win32k/objects/gdiobj.c | 4 +- reactos/subsystems/win32/win32k/win32k.rbuild | 5 -- .../tools/rbuild/backend/mingw/linkers/ld.mak | 4 +- reactos/tools/rbuild/backend/mingw/mingw.cpp | 57 +++++++++---------- .../rbuild/backend/mingw/modulehandler.cpp | 6 ++ reactos/tools/rbuild/backend/mingw/rules.mak | 8 +-- reactos/tools/rbuild/project.cpp | 2 + 41 files changed, 61 insertions(+), 119 deletions(-) diff --git a/reactos/ReactOS-generic.rbuild b/reactos/ReactOS-generic.rbuild index e6668389440..c26a318771c 100644 --- a/reactos/ReactOS-generic.rbuild +++ b/reactos/ReactOS-generic.rbuild @@ -120,11 +120,7 @@ -Wno-strict-aliasing -Wpointer-arith -Wno-multichar - + diff --git a/reactos/base/applications/games/solitaire/solitaire.cpp b/reactos/base/applications/games/solitaire/solitaire.cpp index e53efda79ce..4046b92ff2a 100644 --- a/reactos/base/applications/games/solitaire/solitaire.cpp +++ b/reactos/base/applications/games/solitaire/solitaire.cpp @@ -196,8 +196,6 @@ int WINAPI _tWinMain(HINSTANCE hInst, HINSTANCE hPrev, LPTSTR szCmdLine, int iCm SaveSettings(); - try { throw 0; } catch (int i) { } /* HACK */ - return msg.wParam; } diff --git a/reactos/base/applications/games/spider/spider.cpp b/reactos/base/applications/games/spider/spider.cpp index 96188e0c518..49676433234 100644 --- a/reactos/base/applications/games/spider/spider.cpp +++ b/reactos/base/applications/games/spider/spider.cpp @@ -154,9 +154,6 @@ int WINAPI _tWinMain(HINSTANCE hInst, HINSTANCE hPrev, LPTSTR szCmdLine, int iCm DispatchMessage(&msg); } } - - try { throw 0; } catch (int i) { } /* HACK */ - return msg.wParam; } diff --git a/reactos/dll/directx/ddraw/ddraw.rbuild b/reactos/dll/directx/ddraw/ddraw.rbuild index 70f70d09219..a678e62164e 100644 --- a/reactos/dll/directx/ddraw/ddraw.rbuild +++ b/reactos/dll/directx/ddraw/ddraw.rbuild @@ -69,6 +69,4 @@ DirectD3D3_Vtable.c DirectD3D7_Vtable.c - - -fno-unit-at-a-time diff --git a/reactos/dll/directx/wine/ddraw/ddraw.rbuild b/reactos/dll/directx/wine/ddraw/ddraw.rbuild index 9a905af1940..f8d9c92c279 100644 --- a/reactos/dll/directx/wine/ddraw/ddraw.rbuild +++ b/reactos/dll/directx/wine/ddraw/ddraw.rbuild @@ -42,7 +42,4 @@ viewport.c wineheaders - - - -fno-unit-at-a-time diff --git a/reactos/dll/win32/actxprxy/actxprxy.rbuild b/reactos/dll/win32/actxprxy/actxprxy.rbuild index 04a760bd2db..87a50a17c83 100644 --- a/reactos/dll/win32/actxprxy/actxprxy.rbuild +++ b/reactos/dll/win32/actxprxy/actxprxy.rbuild @@ -15,7 +15,6 @@ rpcrt4 pseh usrmarshal.c - -fno-unit-at-a-time actxprxy_servprov.idl diff --git a/reactos/dll/win32/advapi32/advapi32.rbuild b/reactos/dll/win32/advapi32/advapi32.rbuild index 0396365b7b9..17e120ba9ce 100644 --- a/reactos/dll/win32/advapi32/advapi32.rbuild +++ b/reactos/dll/win32/advapi32/advapi32.rbuild @@ -59,5 +59,4 @@ token.c advapi32.rc - -fno-unit-at-a-time diff --git a/reactos/dll/win32/crypt32/crypt32.rbuild b/reactos/dll/win32/crypt32/crypt32.rbuild index e622fa27ed9..7884c27a317 100644 --- a/reactos/dll/win32/crypt32/crypt32.rbuild +++ b/reactos/dll/win32/crypt32/crypt32.rbuild @@ -42,6 +42,4 @@ message.c crypt32.rc version.rc - - -fno-unit-at-a-time diff --git a/reactos/dll/win32/gdi32/gdi32.rbuild b/reactos/dll/win32/gdi32/gdi32.rbuild index ee2ed7761f0..a6917608cca 100644 --- a/reactos/dll/win32/gdi32/gdi32.rbuild +++ b/reactos/dll/win32/gdi32/gdi32.rbuild @@ -8,11 +8,9 @@ pseh dxguid ntdll - dllmain.c @@ -49,6 +47,4 @@ path.c gdi32.rc - - -fno-unit-at-a-time diff --git a/reactos/dll/win32/kernel32/kernel32.rbuild b/reactos/dll/win32/kernel32/kernel32.rbuild index 028e2952ab6..88b7a3e7682 100644 --- a/reactos/dll/win32/kernel32/kernel32.rbuild +++ b/reactos/dll/win32/kernel32/kernel32.rbuild @@ -13,12 +13,8 @@ 0x0600 errcodes - - - -fno-unit-at-a-time -fno-exceptions -fno-rtti diff --git a/reactos/dll/win32/ole32/ole32.rbuild b/reactos/dll/win32/ole32/ole32.rbuild index 1c7969f8da7..24f60c87a32 100644 --- a/reactos/dll/win32/ole32/ole32.rbuild +++ b/reactos/dll/win32/ole32/ole32.rbuild @@ -63,8 +63,6 @@ dcom.idl irot.idl . - - -fno-unit-at-a-time irot.idl diff --git a/reactos/dll/win32/psapi/psapi.rbuild b/reactos/dll/win32/psapi/psapi.rbuild index 812265a2b27..f805e634054 100644 --- a/reactos/dll/win32/psapi/psapi.rbuild +++ b/reactos/dll/win32/psapi/psapi.rbuild @@ -5,12 +5,9 @@ epsapi pseh ntdll - + malloc.c psapi.c psapi.rc - - -fno-unit-at-a-time diff --git a/reactos/dll/win32/qmgrprxy/qmgrprxy.rbuild b/reactos/dll/win32/qmgrprxy/qmgrprxy.rbuild index 64dc200cd8c..cea10b90855 100644 --- a/reactos/dll/win32/qmgrprxy/qmgrprxy.rbuild +++ b/reactos/dll/win32/qmgrprxy/qmgrprxy.rbuild @@ -15,7 +15,6 @@ rpcrt4 pseh version.rc - -fno-unit-at-a-time qmgrprxy.idl diff --git a/reactos/dll/win32/rpcrt4/rpcrt4.rbuild b/reactos/dll/win32/rpcrt4/rpcrt4.rbuild index a0dd9e14e40..ad1008bed48 100644 --- a/reactos/dll/win32/rpcrt4/rpcrt4.rbuild +++ b/reactos/dll/win32/rpcrt4/rpcrt4.rbuild @@ -39,8 +39,6 @@ rpcrt4.rc epm.idl . - - -fno-unit-at-a-time epm.idl diff --git a/reactos/dll/win32/setupapi/setupapi.rbuild b/reactos/dll/win32/setupapi/setupapi.rbuild index 81c1dd70394..bb3e0e37c56 100644 --- a/reactos/dll/win32/setupapi/setupapi.rbuild +++ b/reactos/dll/win32/setupapi/setupapi.rbuild @@ -39,6 +39,4 @@ stubs.c rpc.c setupapi.rc - - -fno-unit-at-a-time diff --git a/reactos/dll/win32/syssetup/syssetup.rbuild b/reactos/dll/win32/syssetup/syssetup.rbuild index d2909ce527b..4fd7e6249da 100644 --- a/reactos/dll/win32/syssetup/syssetup.rbuild +++ b/reactos/dll/win32/syssetup/syssetup.rbuild @@ -20,6 +20,4 @@ logfile.c wizard.c syssetup.rc - - -fno-unit-at-a-time diff --git a/reactos/dll/win32/user32/user32.rbuild b/reactos/dll/win32/user32/user32.rbuild index 6fd34e68547..e905d747d31 100644 --- a/reactos/dll/win32/user32/user32.rbuild +++ b/reactos/dll/win32/user32/user32.rbuild @@ -11,11 +11,9 @@ pseh ntdll -fms-extensions - button.c combo.c @@ -76,6 +74,4 @@ winpos.c user32.rc - - -fno-unit-at-a-time diff --git a/reactos/dll/win32/winmm/mci.c b/reactos/dll/win32/winmm/mci.c index 8bb26488811..40ab39a0f22 100644 --- a/reactos/dll/win32/winmm/mci.c +++ b/reactos/dll/win32/winmm/mci.c @@ -1459,7 +1459,7 @@ DWORD WINAPI mciSendStringA(LPCSTR lpstrCommand, LPSTR lpstrRet, BOOL WINAPI mciExecute(LPCSTR lpstrCommand) { char strRet[256]; - DWORD ret; + int ret; TRACE("(%s)!\n", lpstrCommand); diff --git a/reactos/dll/win32/wintrust/wintrust.rbuild b/reactos/dll/win32/wintrust/wintrust.rbuild index 1c73efd7038..910d2278f8e 100644 --- a/reactos/dll/win32/wintrust/wintrust.rbuild +++ b/reactos/dll/win32/wintrust/wintrust.rbuild @@ -18,6 +18,4 @@ asn.c softpub.c version.rc - - -fno-unit-at-a-time diff --git a/reactos/dll/win32/wlanapi/wlanapi.rbuild b/reactos/dll/win32/wlanapi/wlanapi.rbuild index 781a8ae7a44..f17b4c263a4 100644 --- a/reactos/dll/win32/wlanapi/wlanapi.rbuild +++ b/reactos/dll/win32/wlanapi/wlanapi.rbuild @@ -8,6 +8,4 @@ pseh ntdll main.c - - -fno-unit-at-a-time diff --git a/reactos/drivers/input/kbdclass/kbdclass.rbuild b/reactos/drivers/input/kbdclass/kbdclass.rbuild index 37fda368f08..480896a80ed 100644 --- a/reactos/drivers/input/kbdclass/kbdclass.rbuild +++ b/reactos/drivers/input/kbdclass/kbdclass.rbuild @@ -9,6 +9,4 @@ misc.c setup.c kbdclass.rc - - -fno-unit-at-a-time diff --git a/reactos/drivers/input/mouclass/mouclass.rbuild b/reactos/drivers/input/mouclass/mouclass.rbuild index bcbcc4ce25d..1b75a0111cd 100644 --- a/reactos/drivers/input/mouclass/mouclass.rbuild +++ b/reactos/drivers/input/mouclass/mouclass.rbuild @@ -8,6 +8,4 @@ misc.c mouclass.c mouclass.rc - - -fno-unit-at-a-time diff --git a/reactos/drivers/network/afd/afd.rbuild b/reactos/drivers/network/afd/afd.rbuild index aef02b46a6b..6e56ce23b07 100644 --- a/reactos/drivers/network/afd/afd.rbuild +++ b/reactos/drivers/network/afd/afd.rbuild @@ -8,9 +8,7 @@ ntoskrnl hal - bind.c @@ -27,6 +25,4 @@ write.c afd.rc - - -fno-unit-at-a-time diff --git a/reactos/drivers/network/tcpip/tcpip.rbuild b/reactos/drivers/network/tcpip/tcpip.rbuild index 2a9f91cc52e..42e91d2b712 100644 --- a/reactos/drivers/network/tcpip/tcpip.rbuild +++ b/reactos/drivers/network/tcpip/tcpip.rbuild @@ -13,11 +13,9 @@ chew ntoskrnl hal - lan.c @@ -40,6 +38,4 @@ wait.c tcpip.rc - - -fno-unit-at-a-time diff --git a/reactos/drivers/video/miniport/vbe/vbemp.c b/reactos/drivers/video/miniport/vbe/vbemp.c index 55b2bcb980c..7e12d3d12a0 100644 --- a/reactos/drivers/video/miniport/vbe/vbemp.c +++ b/reactos/drivers/video/miniport/vbe/vbemp.c @@ -781,6 +781,8 @@ VBEMapVideoMemory( MapInformation->VideoRamBase = RequestedAddress->RequestedVirtualAddress; MapInformation->VideoRamLength = 0x10000; } +#else + FrameBuffer.QuadPart = 0; #endif VideoPortMapMemory(DeviceExtension, FrameBuffer, diff --git a/reactos/hal/halx86/mp/apic.c b/reactos/hal/halx86/mp/apic.c index a3811fcba98..cb6de82f0f8 100644 --- a/reactos/hal/halx86/mp/apic.c +++ b/reactos/hal/halx86/mp/apic.c @@ -798,6 +798,8 @@ APICCalibrateTimer(ULONG CPU) LONG tt1, tt2; BOOLEAN TSCPresent; + t1.QuadPart = 0; + DPRINT("Calibrating APIC timer for CPU %d\n", CPU); APICSetupLVTT(1000000000); diff --git a/reactos/lib/nls/idna/idna.cpp b/reactos/lib/nls/idna/idna.cpp index c7e5118c7e6..9640fc11778 100644 --- a/reactos/lib/nls/idna/idna.cpp +++ b/reactos/lib/nls/idna/idna.cpp @@ -38,6 +38,9 @@ #include +C_ASSERT(IDN_ALLOW_UNASSIGNED == UIDNA_ALLOW_UNASSIGNED); +C_ASSERT(IDN_USE_STD3_ASCII_RULES == UIDNA_USE_STD3_RULES); + static int32_t IDNA_FlagsToICU @@ -45,8 +48,6 @@ IDNA_FlagsToICU DWORD dwFlags ) { - C_ASSERT(IDN_ALLOW_UNASSIGNED == UIDNA_ALLOW_UNASSIGNED); - C_ASSERT(IDN_USE_STD3_ASCII_RULES == UIDNA_USE_STD3_RULES); return dwFlags; } diff --git a/reactos/lib/nls/idna/nameprep.cpp b/reactos/lib/nls/idna/nameprep.cpp index 8f1f419270c..13464e14831 100644 --- a/reactos/lib/nls/idna/nameprep.cpp +++ b/reactos/lib/nls/idna/nameprep.cpp @@ -38,6 +38,8 @@ #include +C_ASSERT(IDN_ALLOW_UNASSIGNED == USPREP_ALLOW_UNASSIGNED); + static int32_t NAMEPREP_FlagsToICU @@ -45,7 +47,6 @@ NAMEPREP_FlagsToICU DWORD dwFlags ) { - C_ASSERT(IDN_ALLOW_UNASSIGNED == USPREP_ALLOW_UNASSIGNED); return dwFlags; } diff --git a/reactos/lib/rtl/rtl.rbuild b/reactos/lib/rtl/rtl.rbuild index 59b7262964c..f0bc4b0228b 100644 --- a/reactos/lib/rtl/rtl.rbuild +++ b/reactos/lib/rtl/rtl.rbuild @@ -107,9 +107,5 @@ version.c wait.c workitem.c - - - -fno-unit-at-a-time diff --git a/reactos/ntoskrnl/mm/ARM3/contmem.c b/reactos/ntoskrnl/mm/ARM3/contmem.c index 601ae92b12c..6376332a9e3 100644 --- a/reactos/ntoskrnl/mm/ARM3/contmem.c +++ b/reactos/ntoskrnl/mm/ARM3/contmem.c @@ -246,7 +246,6 @@ VOID NTAPI MiFreeContiguousMemory(IN PVOID BaseAddress) { - KIRQL OldIrql; PFN_NUMBER PageFrameIndex, LastPage, PageCount; PMMPFN Pfn1, StartPfn; PAGED_CODE(); diff --git a/reactos/ntoskrnl/ntoskrnl-generic.rbuild b/reactos/ntoskrnl/ntoskrnl-generic.rbuild index 2d7e03227ca..497666eabed 100644 --- a/reactos/ntoskrnl/ntoskrnl-generic.rbuild +++ b/reactos/ntoskrnl/ntoskrnl-generic.rbuild @@ -30,11 +30,9 @@ bootvid wdmguid bugcodes - @@ -556,7 +554,4 @@ ntoskrnl.rc ntoskrnl_$(ARCH).lnk - - - -fno-unit-at-a-time diff --git a/reactos/ntoskrnl/ps/job.c b/reactos/ntoskrnl/ps/job.c index 52f4f2715be..bcc76013be9 100644 --- a/reactos/ntoskrnl/ps/job.c +++ b/reactos/ntoskrnl/ps/job.c @@ -164,7 +164,7 @@ NtAssignProcessToJobObject ( ExAcquireRundownProtection(&Process->RundownProtect); if(NT_SUCCESS(Status)) { - if(Process->Job == NULL && Process->Session == Job->SessionId) + if(Process->Job == NULL && (ULONG_PTR)Process->Session == Job->SessionId) { /* Just store the pointer to the job object in the process, we'll assign it later. The reason we can't do this here is that locking @@ -268,7 +268,7 @@ NtCreateJobObject ( /* setup the job object */ InitializeListHead(&Job->ProcessListHead); - Job->SessionId = CurrentProcess->Session; /* inherit the session id from the caller */ + Job->SessionId = (ULONG_PTR)CurrentProcess->Session; /* inherit the session id from the caller */ Status = ExInitializeResource(&Job->JobLock); if(!NT_SUCCESS(Status)) diff --git a/reactos/ntoskrnl/ps/process.c b/reactos/ntoskrnl/ps/process.c index 2cc0c4f6ae2..f6ad54ba5ac 100644 --- a/reactos/ntoskrnl/ps/process.c +++ b/reactos/ntoskrnl/ps/process.c @@ -1104,7 +1104,7 @@ ULONG NTAPI PsGetCurrentProcessSessionId(VOID) { - return PsGetCurrentProcess()->Session; + return (ULONG)(ULONG_PTR)PsGetCurrentProcess()->Session; } /* diff --git a/reactos/ntoskrnl/ps/query.c b/reactos/ntoskrnl/ps/query.c index 4d91a854bf2..8f18912f1f6 100644 --- a/reactos/ntoskrnl/ps/query.c +++ b/reactos/ntoskrnl/ps/query.c @@ -1001,7 +1001,7 @@ NtSetInformationProcess(IN HANDLE ProcessHandle, if (!NT_SUCCESS(Status)) break; /* Write the session ID in the EPROCESS */ - Process->Session = SessionInfo.SessionId; + Process->Session = (PVOID)(ULONG_PTR)SessionInfo.SessionId; /* Check if the process also has a PEB */ if (Process->Peb) diff --git a/reactos/subsystems/win32/win32k/objects/gdiobj.c b/reactos/subsystems/win32/win32k/objects/gdiobj.c index a99531c2844..9cde646e0d3 100644 --- a/reactos/subsystems/win32/win32k/objects/gdiobj.c +++ b/reactos/subsystems/win32/win32k/objects/gdiobj.c @@ -30,7 +30,7 @@ #include "gdidbg.c" -/* static */ /* FIXME: -fno-unit-at-a-time breaks this */ +static BOOL INTERNAL_CALL GDI_CleanupDummy(PVOID ObjectBody); /** GLOBALS *******************************************************************/ @@ -87,7 +87,7 @@ static LARGE_INTEGER ShortDelay; /* * Dummy GDI Cleanup Callback */ -/* static */ /* FIXME: -fno-unit-at-a-time breaks this */ +static BOOL INTERNAL_CALL GDI_CleanupDummy(PVOID ObjectBody) { diff --git a/reactos/subsystems/win32/win32k/win32k.rbuild b/reactos/subsystems/win32/win32k/win32k.rbuild index 8b5303cfab6..cf75e347749 100644 --- a/reactos/subsystems/win32/win32k/win32k.rbuild +++ b/reactos/subsystems/win32/win32k/win32k.rbuild @@ -20,9 +20,7 @@ /wd4276 - dib8gen.c @@ -205,8 +203,5 @@ stubs.c umpdstubs.c - - - -fno-unit-at-a-time diff --git a/reactos/tools/rbuild/backend/mingw/linkers/ld.mak b/reactos/tools/rbuild/backend/mingw/linkers/ld.mak index dbba33ea4f6..9c2a0bd1986 100644 --- a/reactos/tools/rbuild/backend/mingw/linkers/ld.mak +++ b/reactos/tools/rbuild/backend/mingw/linkers/ld.mak @@ -5,6 +5,8 @@ LDFLAG_CONSOLE:=--subsystem=console LDFLAG_WINDOWS:=--subsystem=windows LDFLAG_NATIVE:=--subsystem=native +LDFLAG_EXCLUDE_ALL_SYMBOLS=-exclude-all-symbols + #~ #(module, objs, deps, ldflags, output, def, libs, entry, base) #(module, objs, deps, ldflags, output, def, libs, entry, base, extralibs) define RBUILD_LINK @@ -40,7 +42,7 @@ $(1)_CLEANFILES+=${call RBUILD_intermediate_dir,$(5)}$$(SEP)$(1)_objs.rsp $(5): ${call RBUILD_intermediate_dir,$(5)}$$(SEP)$(1)_objs.rsp $(7) $(3) $$(RSYM_TARGET) $$(PEFIXUP_TARGET) | ${call RBUILD_dir,$(5)} $$(ECHO_LD) #~ $${ld} --entry=$(8) --image-base=$(9) @${call RBUILD_intermediate_dir,$(5)}$$(SEP)$(1)_objs.rsp $(7) ${call RBUILD_ldflags,$(1),$(4)} -o $$@ - $${ld} --entry=$(8) --image-base=$(9) @${call RBUILD_intermediate_dir,$(5)}$$(SEP)$(1)_objs.rsp $(10) $(7) $(10) ${call RBUILD_ldflags,$(1),$(4)} -o $$@ + $${ld} --entry=$(8) --image-base=$(9) @${call RBUILD_intermediate_dir,$(5)}$$(SEP)$(1)_objs.rsp --start-group $(10) $(7) --end-group ${call RBUILD_ldflags,$(1),$(4)} -o $$@ ifneq ($(or $(6),$$(MODULETYPE$$($(1)_TYPE)_KMODE)),) $$(ECHO_PEFIXUP) $$(Q)$$(PEFIXUP_TARGET) $$@ $(if $(6),-exports) $$(if $$(MODULETYPE$($(1)_TYPE)_KMODE),-sections) diff --git a/reactos/tools/rbuild/backend/mingw/mingw.cpp b/reactos/tools/rbuild/backend/mingw/mingw.cpp index 69a1983b8e4..00133392938 100644 --- a/reactos/tools/rbuild/backend/mingw/mingw.cpp +++ b/reactos/tools/rbuild/backend/mingw/mingw.cpp @@ -480,14 +480,8 @@ MingwBackend::GenerateGlobalVariables () const fputs ( "BUILTIN_CXXINCLUDES+= $(TARGET_CPPFLAGS)\n", fMakefile ); fprintf ( fMakefile, "PROJECT_CCLIBS := \"$(shell ${TARGET_CC} -print-libgcc-file-name)\"\n" ); - fprintf ( fMakefile, "PROJECT_CXXLIBS := \"$(shell ${TARGET_CPP} -print-file-name=libstdc++.a)\" \"$(shell ${TARGET_CPP} -print-file-name=libgcc.a)\" \"$(shell ${TARGET_CPP} -print-file-name=libmingw32.a)\" \"$(shell ${TARGET_CPP} -print-file-name=libmingwex.a)\" " ); + fprintf ( fMakefile, "PROJECT_CXXLIBS := \"$(shell ${TARGET_CPP} -print-file-name=libstdc++.a)\" \"$(shell ${TARGET_CPP} -print-libgcc-file-name)\" \"$(shell ${TARGET_CPP} -print-file-name=libmingw32.a)\" \"$(shell ${TARGET_CPP} -print-file-name=libmingwex.a)\" \"$(shell ${TARGET_CPP} -print-file-name=libgcc_eh.a)\"\n" ); - /* hack to get libgcc_eh.a, should check mingw version or something */ - if (Environment::GetArch() == "amd64") - { - fprintf ( fMakefile, " \"$(shell ${TARGET_CPP} -print-file-name=libgcc_eh.a)\"" ); - } - fprintf ( fMakefile,"\n"); } MingwModuleHandler::GenerateParameters ( "PROJECT", "+=", ProjectNode.non_if_data ); MingwModuleHandler::GenerateParameters ( "PROJECT_HOST", "+=", ProjectNode.host_non_if_data ); @@ -844,7 +838,7 @@ MingwBackend::GetVersionString ( const string& versionCommand ) buffer[i] = '\0'; pclose ( fp ); - char separators[] = " ()"; + char separators[] = " ()\n"; char *token; char *prevtoken = NULL; @@ -888,7 +882,7 @@ MingwBackend::GetNetwideAssemblerVersion ( const string& nasmCommand ) string MingwBackend::GetCompilerVersion ( const string& compilerCommand ) { - string versionCommand = ssprintf ( "%s --version gcc", + string versionCommand = ssprintf ( "%s --version", compilerCommand.c_str (), NUL, NUL ); @@ -908,7 +902,7 @@ MingwBackend::GetBinutilsVersion ( const string& binutilsCommand ) bool MingwBackend::IsSupportedCompilerVersion ( const string& compilerVersion ) { - if ( strcmp ( compilerVersion.c_str (), "3.4.2") < 0 ) + if ( strcmp ( compilerVersion.c_str (), "4.4.2") < 0 ) return false; else return true; @@ -970,27 +964,32 @@ MingwBackend::GetBinutilsVersionDate ( const string& binutilsCommand ) bool MingwBackend::IsSupportedBinutilsVersion ( const string& binutilsVersion ) { - if ( manualBinutilsSetting ) return true; - - /* linux */ - if ( binutilsVersion.find('.') != std::string::npos ) - { - /* TODO: blacklist versions on version number instead of date */ - return true; - } - - /* - * - Binutils older than 2003/10/01 have broken windres which can't handle - * icons with alpha channel. - * - Binutils between 2004/09/02 and 2004/10/08 have broken handling of - * forward exports in dlltool. - */ - if ( ( ( strcmp ( binutilsVersion.c_str (), "20040902") >= 0 ) && - ( strcmp ( binutilsVersion.c_str (), "20041008") <= 0 ) ) || - ( strcmp ( binutilsVersion.c_str (), "20031001") < 0 ) ) + int digit = binutilsVersion.find_last_of("."); + if(digit == -1) + { + printf("Unable to detect binutils version!\n"); return false; + } + + string date = string(binutilsVersion, digit + 1); + if(date.length() == 8) + { + /* This is a real date in the format YYYYMMDD. + Check whether we have at least Binutils 20091017 (older versions + don't support the -exclude-all-symbols option we use). */ + if(strcmp(date.c_str(), "20091119") < 0) + return false; + } else - return true; + { + /* This is no date, so binutilsVersion should just contain the version + number. + Binutils 2.20 will hopefully contain the required features. */ + if(strcmp(binutilsVersion.c_str(), "2.20") < 0) + return false; + } + + return true; } void diff --git a/reactos/tools/rbuild/backend/mingw/modulehandler.cpp b/reactos/tools/rbuild/backend/mingw/modulehandler.cpp index 174e6962b9d..6b0131c3c7c 100644 --- a/reactos/tools/rbuild/backend/mingw/modulehandler.cpp +++ b/reactos/tools/rbuild/backend/mingw/modulehandler.cpp @@ -1782,6 +1782,12 @@ MingwModuleHandler::GenerateOtherMacros () &module.linkerFlags, used_defs ); + /* LD automatically exports all symbols by default if -shared is specified. Prevent it from doing + this by adding the option -exclude-all-symbols (available since Binutils 20091017). */ + // FIXME: Should only be applied for -shared modules, when there's a smart way to check for them. + if ( ModuleHandlerInformations[module.type].DefaultHost == HostFalse && !module.importLibrary ) + fprintf ( fMakefile, "%s_LDFLAGS+=$(LDFLAG_EXCLUDE_ALL_SYMBOLS)\n", module.name.c_str() ); + fprintf ( fMakefile, "\n\n" ); } diff --git a/reactos/tools/rbuild/backend/mingw/rules.mak b/reactos/tools/rbuild/backend/mingw/rules.mak index 40e30f7bdcd..f76e9b087bd 100644 --- a/reactos/tools/rbuild/backend/mingw/rules.mak +++ b/reactos/tools/rbuild/backend/mingw/rules.mak @@ -259,7 +259,7 @@ ${call RBUILD_intermediate_path_noext,$(2)}_c.c ${call RBUILD_intermediate_path_ $$(ECHO_WIDL) $$(Q)$$(widl_TARGET) ${call RBUILD_midlflags,$(1),$(4),-I${call RBUILD_dir,$(2)}} -h -H ${call RBUILD_intermediate_path_noext,$(2)}_c.h -c -C ${call RBUILD_intermediate_path_noext,$(2)}_c.c $(2) -${call RBUILD_CC,$(1),${call RBUILD_intermediate_path_noext,$(2)}_c.c,,-fno-unit-at-a-time,${call RBUILD_intermediate_path_noext,$(2)}_c.o} +${call RBUILD_CC,$(1),${call RBUILD_intermediate_path_noext,$(2)}_c.c,,,${call RBUILD_intermediate_path_noext,$(2)}_c.o} endef @@ -272,7 +272,7 @@ ${call RBUILD_intermediate_path_noext,$(2)}_s.c ${call RBUILD_intermediate_path_ $$(ECHO_WIDL) $$(Q)$$(widl_TARGET) ${call RBUILD_midlflags,$(1),$(4),-I${call RBUILD_dir,$(2)}} -h -H ${call RBUILD_intermediate_path_noext,$(2)}_s.h -s -S ${call RBUILD_intermediate_path_noext,$(2)}_s.c $(2) -${call RBUILD_CC,$(1),${call RBUILD_intermediate_path_noext,$(2)}_s.c,,-fno-unit-at-a-time,${call RBUILD_intermediate_path_noext,$(2)}_s.o} +${call RBUILD_CC,$(1),${call RBUILD_intermediate_path_noext,$(2)}_s.c,,,${call RBUILD_intermediate_path_noext,$(2)}_s.o} endef @@ -285,7 +285,7 @@ ${call RBUILD_intermediate_path_noext,$(2)}_p.c ${call RBUILD_intermediate_path_ $$(ECHO_WIDL) $$(Q)$$(widl_TARGET) ${call RBUILD_midlflags,$(1),$(4),-I${call RBUILD_dir,$(2)}} -h -H ${call RBUILD_intermediate_path_noext,$(2)}_p.h -p -P ${call RBUILD_intermediate_path_noext,$(2)}_p.c $(2) -${call RBUILD_CC,$(1),${call RBUILD_intermediate_path_noext,$(2)}_p.c,,-fno-unit-at-a-time,${call RBUILD_intermediate_path_noext,$(2)}_p.o} +${call RBUILD_CC,$(1),${call RBUILD_intermediate_path_noext,$(2)}_p.c,,,${call RBUILD_intermediate_path_noext,$(2)}_p.o} endef @@ -298,7 +298,7 @@ ${call RBUILD_intermediate_path_noext,$(2)}_i.c: $(2) $(3) $$(widl_TARGET) | ${c $$(ECHO_WIDL) $$(Q)$$(widl_TARGET) ${call RBUILD_midlflags,$(1),$(4),-I${call RBUILD_dir,$(2)}} -u -U $$@ $$< -${call RBUILD_CC,$(1),${call RBUILD_intermediate_path_noext,$(2)}_i.c,,-fno-unit-at-a-time,${call RBUILD_intermediate_path_noext,$(2)}_i.o} +${call RBUILD_CC,$(1),${call RBUILD_intermediate_path_noext,$(2)}_i.c,,,${call RBUILD_intermediate_path_noext,$(2)}_i.o} endef diff --git a/reactos/tools/rbuild/project.cpp b/reactos/tools/rbuild/project.cpp index 9378e16b22e..16eea20a006 100644 --- a/reactos/tools/rbuild/project.cpp +++ b/reactos/tools/rbuild/project.cpp @@ -527,6 +527,7 @@ Project::GetCompilerSet () const case MicrosoftC: return "msc"; default: assert ( false ); } + return ""; } std::string @@ -538,4 +539,5 @@ Project::GetLinkerSet () const case MicrosoftLink: return "mslink"; default: assert ( false ); } + return ""; } From 1cc565029768921646eb463139881f2e3d92ad07 Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Mon, 14 Dec 2009 18:42:30 +0000 Subject: [PATCH 214/286] Try to fix build with rosbe 1.5 x86 svn path=/branches/ros-amd64-bringup/; revision=44578 --- reactos/ntoskrnl/io/iomgr/irp.c | 2 +- reactos/subsystems/win32/win32.rbuild | 8 +++----- reactos/tools/rbuild/backend/mingw/compilers/gcc.mak | 4 ++++ reactos/tools/rbuild/backend/mingw/mingw.cpp | 9 ++++++++- 4 files changed, 16 insertions(+), 7 deletions(-) diff --git a/reactos/ntoskrnl/io/iomgr/irp.c b/reactos/ntoskrnl/io/iomgr/irp.c index 9ef5f0cb74d..76e0be071f2 100644 --- a/reactos/ntoskrnl/io/iomgr/irp.c +++ b/reactos/ntoskrnl/io/iomgr/irp.c @@ -1622,7 +1622,7 @@ IoGetRequestorSessionId(IN PIRP Irp, OUT PULONG pSessionId) { /* Return the session */ - *pSessionId = IoGetRequestorProcess(Irp)->Session; + *pSessionId = (ULONG_PTR)IoGetRequestorProcess(Irp)->Session; return STATUS_SUCCESS; } diff --git a/reactos/subsystems/win32/win32.rbuild b/reactos/subsystems/win32/win32.rbuild index 50546eb032c..7dc498f28dd 100644 --- a/reactos/subsystems/win32/win32.rbuild +++ b/reactos/subsystems/win32/win32.rbuild @@ -1,11 +1,9 @@ - - - - - + + + diff --git a/reactos/tools/rbuild/backend/mingw/compilers/gcc.mak b/reactos/tools/rbuild/backend/mingw/compilers/gcc.mak index c8c09bd17ce..2df61406528 100644 --- a/reactos/tools/rbuild/backend/mingw/compilers/gcc.mak +++ b/reactos/tools/rbuild/backend/mingw/compilers/gcc.mak @@ -9,7 +9,11 @@ CPPFLAG_UNICODE:=-DUNICODE -D_UNICODE # FIXME: disabled until RosBE stops sucking # BUILTIN_CPPFLAGS+= -nostdinc +ifeq ($(ROS_ARCH),i386) +BUILTIN_CFLAGS+= -fno-optimize-sibling-calls -fno-set-stack-executable +else BUILTIN_CFLAGS+= -fno-optimize-sibling-calls +endif BUILTIN_CXXFLAGS+= -fno-optimize-sibling-calls #(module, source, dependencies, cflags, output) diff --git a/reactos/tools/rbuild/backend/mingw/mingw.cpp b/reactos/tools/rbuild/backend/mingw/mingw.cpp index 00133392938..9c9160142be 100644 --- a/reactos/tools/rbuild/backend/mingw/mingw.cpp +++ b/reactos/tools/rbuild/backend/mingw/mingw.cpp @@ -480,8 +480,15 @@ MingwBackend::GenerateGlobalVariables () const fputs ( "BUILTIN_CXXINCLUDES+= $(TARGET_CPPFLAGS)\n", fMakefile ); fprintf ( fMakefile, "PROJECT_CCLIBS := \"$(shell ${TARGET_CC} -print-libgcc-file-name)\"\n" ); - fprintf ( fMakefile, "PROJECT_CXXLIBS := \"$(shell ${TARGET_CPP} -print-file-name=libstdc++.a)\" \"$(shell ${TARGET_CPP} -print-libgcc-file-name)\" \"$(shell ${TARGET_CPP} -print-file-name=libmingw32.a)\" \"$(shell ${TARGET_CPP} -print-file-name=libmingwex.a)\" \"$(shell ${TARGET_CPP} -print-file-name=libgcc_eh.a)\"\n" ); + fprintf ( fMakefile, "PROJECT_CXXLIBS := \"$(shell ${TARGET_CPP} -print-file-name=libstdc++.a)\" \"$(shell ${TARGET_CPP} -print-libgcc-file-name)\" \"$(shell ${TARGET_CPP} -print-file-name=libmingw32.a)\" \"$(shell ${TARGET_CPP} -print-file-name=libmingwex.a)\" " ); + /* hack to get libgcc_eh.a, should check mingw version or something */ + if (Environment::GetArch() == "amd64") + fprintf ( fMakefile, " \"$(shell ${TARGET_CPP} -print-file-name=libgcc_eh.a)\"" ); + /* hack to get _get_output_format, needed by libmingwex */ + else if (Environment::GetArch() == "i386") + fprintf ( fMakefile, "\"$(shell ${TARGET_CPP} -print-file-name=ofmt_stub.a)\""); + fprintf ( fMakefile,"\n"); } MingwModuleHandler::GenerateParameters ( "PROJECT", "+=", ProjectNode.non_if_data ); MingwModuleHandler::GenerateParameters ( "PROJECT_HOST", "+=", ProjectNode.host_non_if_data ); From 7b5e8cc133e5a33538ce1b0679d5e85a648d6fce Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Mon, 14 Dec 2009 18:55:32 +0000 Subject: [PATCH 215/286] Try to fix IDL compilation race condition with patch from bug #4994 svn path=/branches/ros-amd64-bringup/; revision=44579 --- reactos/tools/rbuild/backend/mingw/rules.mak | 21 +++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/reactos/tools/rbuild/backend/mingw/rules.mak b/reactos/tools/rbuild/backend/mingw/rules.mak index f76e9b087bd..92b62e21191 100644 --- a/reactos/tools/rbuild/backend/mingw/rules.mak +++ b/reactos/tools/rbuild/backend/mingw/rules.mak @@ -20,6 +20,7 @@ RBUILD_output_dir=${call RBUILD_fullpath,$(value OUTPUT)$(SEP)$(dir ${call RBUIL #(source) RBUILD_name=$(basename $(notdir $(1))) +RBUILD_noext=$(dir $(1))$(basename $(notdir $(1))) #(source) RBUILD_dir=${call RBUILD_fullpath,$(dir ${call RBUILD_compress_prefixes,$(1)})} @@ -255,10 +256,12 @@ define RBUILD_WIDL_CLIENT_RULE $(2): $${$(1)_precondition} -${call RBUILD_intermediate_path_noext,$(2)}_c.c ${call RBUILD_intermediate_path_noext,$(2)}_c.h: $(2) $(3) $$(widl_TARGET) | ${call RBUILD_intermediate_dir,$(2)} - $$(ECHO_WIDL) - $$(Q)$$(widl_TARGET) ${call RBUILD_midlflags,$(1),$(4),-I${call RBUILD_dir,$(2)}} -h -H ${call RBUILD_intermediate_path_noext,$(2)}_c.h -c -C ${call RBUILD_intermediate_path_noext,$(2)}_c.c $(2) +${call RBUILD_intermediate_path_noext,$(2)}_c.c ${call RBUILD_intermediate_path_noext,$(2)}_c.h: ${call RBUILD_intermediate_path_noext,$(2)}_c +${call RBUILD_intermediate_path_noext,$(2)}_c: $(2) $(3) $$(widl_TARGET) | ${call RBUILD_intermediate_dir,$(2)} + $$(ECHO_WIDL) + $$(Q)$$(widl_TARGET) ${call RBUILD_midlflags,$(1),$(4),-I${call RBUILD_dir,$(2)}} -h -H ${call RBUILD_intermediate_path_noext,$(2)}_c.h -c -C ${call RBUILD_intermediate_path_noext,$(2)}_c.c $(2) + $${touch} $$@>$(NUL) ${call RBUILD_CC,$(1),${call RBUILD_intermediate_path_noext,$(2)}_c.c,,,${call RBUILD_intermediate_path_noext,$(2)}_c.o} endef @@ -268,10 +271,12 @@ define RBUILD_WIDL_SERVER_RULE $(2): $${$(1)_precondition} -${call RBUILD_intermediate_path_noext,$(2)}_s.c ${call RBUILD_intermediate_path_noext,$(2)}_s.h: $(2) $(3) $$(widl_TARGET) | ${call RBUILD_intermediate_dir,$(2)} +${call RBUILD_intermediate_path_noext,$(2)}_s.c ${call RBUILD_intermediate_path_noext,$(2)}_s.h: ${call RBUILD_intermediate_path_noext,$(2)}_s + +${call RBUILD_intermediate_path_noext,$(2)}_s: $(2) $(3) $$(widl_TARGET) | ${call RBUILD_intermediate_dir,$(2)} $$(ECHO_WIDL) $$(Q)$$(widl_TARGET) ${call RBUILD_midlflags,$(1),$(4),-I${call RBUILD_dir,$(2)}} -h -H ${call RBUILD_intermediate_path_noext,$(2)}_s.h -s -S ${call RBUILD_intermediate_path_noext,$(2)}_s.c $(2) - + $${touch} $$@>$(NUL) ${call RBUILD_CC,$(1),${call RBUILD_intermediate_path_noext,$(2)}_s.c,,,${call RBUILD_intermediate_path_noext,$(2)}_s.o} endef @@ -281,10 +286,12 @@ define RBUILD_WIDL_PROXY_RULE $(2): $${$(1)_precondition} -${call RBUILD_intermediate_path_noext,$(2)}_p.c ${call RBUILD_intermediate_path_noext,$(2)}_p.h: $(2) $(3) $$(widl_TARGET) | ${call RBUILD_intermediate_dir,$(2)} +${call RBUILD_intermediate_path_noext,$(2)}_p.c ${call RBUILD_intermediate_path_noext,$(2)}_p.h: ${call RBUILD_intermediate_path_noext,$(2)}_p + +${call RBUILD_intermediate_path_noext,$(2)}_p: $(2) $(3) $$(widl_TARGET) | ${call RBUILD_intermediate_dir,$(2)} $$(ECHO_WIDL) $$(Q)$$(widl_TARGET) ${call RBUILD_midlflags,$(1),$(4),-I${call RBUILD_dir,$(2)}} -h -H ${call RBUILD_intermediate_path_noext,$(2)}_p.h -p -P ${call RBUILD_intermediate_path_noext,$(2)}_p.c $(2) - + $${touch} $$@>$(NUL) ${call RBUILD_CC,$(1),${call RBUILD_intermediate_path_noext,$(2)}_p.c,,,${call RBUILD_intermediate_path_noext,$(2)}_p.o} endef From c4a74680e23cdeb3a04d9c02e7c992fc8a500d8a Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Mon, 14 Dec 2009 19:01:42 +0000 Subject: [PATCH 216/286] fix build. svn path=/branches/ros-amd64-bringup/; revision=44580 --- reactos/tools/rbuild/backend/mingw/rules.mak | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/tools/rbuild/backend/mingw/rules.mak b/reactos/tools/rbuild/backend/mingw/rules.mak index 92b62e21191..eba29882412 100644 --- a/reactos/tools/rbuild/backend/mingw/rules.mak +++ b/reactos/tools/rbuild/backend/mingw/rules.mak @@ -259,7 +259,7 @@ $(2): $${$(1)_precondition} ${call RBUILD_intermediate_path_noext,$(2)}_c.c ${call RBUILD_intermediate_path_noext,$(2)}_c.h: ${call RBUILD_intermediate_path_noext,$(2)}_c ${call RBUILD_intermediate_path_noext,$(2)}_c: $(2) $(3) $$(widl_TARGET) | ${call RBUILD_intermediate_dir,$(2)} - $$(ECHO_WIDL) + $$(ECHO_WIDL) $$(Q)$$(widl_TARGET) ${call RBUILD_midlflags,$(1),$(4),-I${call RBUILD_dir,$(2)}} -h -H ${call RBUILD_intermediate_path_noext,$(2)}_c.h -c -C ${call RBUILD_intermediate_path_noext,$(2)}_c.c $(2) $${touch} $$@>$(NUL) ${call RBUILD_CC,$(1),${call RBUILD_intermediate_path_noext,$(2)}_c.c,,,${call RBUILD_intermediate_path_noext,$(2)}_c.o} From be486cc570fc98f6d00a5fca4d57ff376a61d7d1 Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Mon, 14 Dec 2009 19:12:05 +0000 Subject: [PATCH 217/286] fix build 2. svn path=/branches/ros-amd64-bringup/; revision=44581 --- reactos/Makefile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/reactos/Makefile b/reactos/Makefile index cea61c9e676..3e9eb6cba6c 100644 --- a/reactos/Makefile +++ b/reactos/Makefile @@ -353,6 +353,7 @@ ifeq ($(HOST),mingw32-linux) endif export SEP = / mkdir = -$(Q)mkdir -p + touch = $(Q)touch rm = $(Q)rm -f cp = $(Q)cp NUL = /dev/null @@ -361,6 +362,7 @@ else # mingw32-windows ROS_EMPTY = export SEP = \$(ROS_EMPTY) mkdir = -$(Q)mkdir + touch = $(Q)copy /y NUL rm = $(Q)del /f /q cp = $(Q)copy /y NUL = NUL From ff716ba92c5f2f97b8696ef80b3339924b8c5849 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 14 Dec 2009 20:03:59 +0000 Subject: [PATCH 218/286] remove unneccessary change from wine code svn path=/branches/ros-amd64-bringup/; revision=44584 --- reactos/dll/directx/wine/wined3d/wined3d_private.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/dll/directx/wine/wined3d/wined3d_private.h b/reactos/dll/directx/wine/wined3d/wined3d_private.h index 9b1c4d40e57..24066c9562e 100644 --- a/reactos/dll/directx/wine/wined3d/wined3d_private.h +++ b/reactos/dll/directx/wine/wined3d/wined3d_private.h @@ -2551,7 +2551,7 @@ BOOL is_invalid_op(IWineD3DDeviceImpl *This, int stage, WINED3DTEXTUREOP op, void set_tex_op_nvrc(IWineD3DDevice *iface, BOOL is_alpha, int stage, WINED3DTEXTUREOP op, DWORD arg1, DWORD arg2, DWORD arg3, INT texture_idx, DWORD dst) DECLSPEC_HIDDEN; void set_texture_matrix(const float *smat, DWORD flags, BOOL calculatedCoords, - BOOL transformed, WINED3DFORMAT coordtype, BOOL ffp_can_disable_proj) DECLSPEC_HIDDEN; + BOOL transformed, DWORD coordtype, BOOL ffp_can_disable_proj) DECLSPEC_HIDDEN; void texture_activate_dimensions(DWORD stage, IWineD3DStateBlockImpl *stateblock, struct wined3d_context *context) DECLSPEC_HIDDEN; void sampler_texdim(DWORD state, IWineD3DStateBlockImpl *stateblock, From 4a5b4c2097177b7c0b0209d0806e5845da2eadea Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 14 Dec 2009 20:15:56 +0000 Subject: [PATCH 219/286] reduce differences to trunk svn path=/branches/ros-amd64-bringup/; revision=44585 --- reactos/base/applications/iexplore/iexplore.rbuild | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/base/applications/iexplore/iexplore.rbuild b/reactos/base/applications/iexplore/iexplore.rbuild index 8305d0a71c0..807526ae86c 100644 --- a/reactos/base/applications/iexplore/iexplore.rbuild +++ b/reactos/base/applications/iexplore/iexplore.rbuild @@ -4,7 +4,7 @@ . user32 gdi32 - shdocvw + shdocvw main.c version.rc From e1f86bf08f5181083c23c80e09bed9b8846de9c8 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 14 Dec 2009 20:31:24 +0000 Subject: [PATCH 220/286] Copy file from trunk. Only formatting fixes. svn path=/branches/ros-amd64-bringup/; revision=44586 --- reactos/base/setup/reactos/reactos.c | 34 ++++++++++++++-------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/reactos/base/setup/reactos/reactos.c b/reactos/base/setup/reactos/reactos.c index f295917d5e3..729592086b1 100644 --- a/reactos/base/setup/reactos/reactos.c +++ b/reactos/base/setup/reactos/reactos.c @@ -1021,7 +1021,7 @@ void LoadSetupData() &LineLength); ++Count; } - while (SetupFindNextLine(&InfContext, &InfContext) && Count < SetupData.LangCount); + while (SetupFindNextLine(&InfContext, &InfContext) && Count < SetupData.LangCount); } } } @@ -1094,52 +1094,52 @@ void LoadSetupData() // get install directory if (SetupFindFirstLine(hTxtsetupSif, _T("SetupData"), _T("DefaultPath"), &InfContext)) - { - SetupGetStringField(&InfContext, - 1, + { + SetupGetStringField(&InfContext, + 1, SetupData.InstallDir, sizeof(SetupData.InstallDir) / sizeof(TCHAR), - &LineLength); - } + &LineLength); + } SetupCloseInfFile(hTxtsetupSif); - } - } + } +} LONG LoadGenentry(HINF hinf,PCTSTR name,PGENENTRY gen,PINFCONTEXT context) - { +{ LONG TotalCount; TotalCount = SetupGetLineCount(hinf, name); if (TotalCount > 0) - { + { gen = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(GENENTRY) * TotalCount); if (gen != NULL) { if (SetupFindFirstLine(hinf, name, NULL, context)) { LONG Count = 0; - do - { + do + { SetupGetStringField(context, - 0, + 0, gen[Count].Id, sizeof(gen[Count].Id) / sizeof(TCHAR), NULL); SetupGetStringField(context, - 1, + 1, gen[Count].Value, sizeof(gen[Count].Value) / sizeof(TCHAR), NULL); Count++; - } - while (SetupFindNextLine(context, context) && Count < TotalCount); } + while (SetupFindNextLine(context, context) && Count < TotalCount); } } + } return TotalCount; - } +} BOOL isUnattendSetup() { From 60574f15b93b51c359920312b45faf220446d893 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 14 Dec 2009 22:44:39 +0000 Subject: [PATCH 221/286] copy from trunk svn path=/branches/ros-amd64-bringup/; revision=44588 --- reactos/dll/directx/dsound_new/enum.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/dll/directx/dsound_new/enum.c b/reactos/dll/directx/dsound_new/enum.c index d4c5bc0f21b..777168fb27a 100644 --- a/reactos/dll/directx/dsound_new/enum.c +++ b/reactos/dll/directx/dsound_new/enum.c @@ -93,7 +93,7 @@ DoDSoundCallback( DriverNameA[0] = 0; if (ProductName) { - WideCharToMultiByte(CP_ACP, 0, ProductName, -1, DriverNameA, sizeof(DriverNameA) / sizeof(char), NULL, NULL); + WideCharToMultiByte(CP_ACP, 0, ProductName, -1, DriverNameA, sizeof(DriverNameA) / sizeof(char), NULL, NULL); DriverNameA[(sizeof(DriverNameA) / sizeof(char))-1] = 0; } From 4cba4fc3cbb75e39636b19ddc12851123e467b4f Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 14 Dec 2009 22:59:38 +0000 Subject: [PATCH 222/286] use tabs in rbuild file (copied from trunk) svn path=/branches/ros-amd64-bringup/; revision=44593 --- reactos/dll/win32/nddeapi/nddeapi.rbuild | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/reactos/dll/win32/nddeapi/nddeapi.rbuild b/reactos/dll/win32/nddeapi/nddeapi.rbuild index 5ab7920d281..ffffa4844ee 100644 --- a/reactos/dll/win32/nddeapi/nddeapi.rbuild +++ b/reactos/dll/win32/nddeapi/nddeapi.rbuild @@ -1,9 +1,9 @@ - - . - include/reactos/wine - - wine - ntdll - nddeapi.c + + . + include/reactos/wine + + wine + ntdll + nddeapi.c From fa0c6f588d35561cae406bd80c3bfd2c832bbf18 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Tue, 15 Dec 2009 04:25:05 +0000 Subject: [PATCH 223/286] [MSACM32] Copy from trunk svn path=/branches/ros-amd64-bringup/; revision=44598 --- reactos/dll/win32/msacm32/msacm_Cs.rc | 2 ++ reactos/dll/win32/msacm32/msacm_Da.rc | 2 ++ reactos/dll/win32/msacm32/msacm_Ja.rc | 18 ++++++++---------- reactos/dll/win32/msacm32/msacm_Ko.rc | 2 ++ reactos/dll/win32/msacm32/msacm_Lt.rc | 4 ++-- reactos/dll/win32/msacm32/msacm_Pl.rc | 1 + reactos/dll/win32/msacm32/msacm_Ro.rc | 4 ++-- reactos/dll/win32/msacm32/msacm_Ru.rc | 16 ++++++++-------- reactos/dll/win32/msacm32/msacm_Si.rc | 4 ++-- reactos/dll/win32/msacm32/msacm_Tr.rc | 2 ++ reactos/dll/win32/msacm32/msacm_Zh.rc | 4 ++-- 11 files changed, 33 insertions(+), 26 deletions(-) diff --git a/reactos/dll/win32/msacm32/msacm_Cs.rc b/reactos/dll/win32/msacm32/msacm_Cs.rc index 169e760b89c..d7b278e4474 100644 --- a/reactos/dll/win32/msacm32/msacm_Cs.rc +++ b/reactos/dll/win32/msacm32/msacm_Cs.rc @@ -20,6 +20,8 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ +#include "wineacm.h" + LANGUAGE LANG_CZECH, SUBLANG_DEFAULT /* Czech strings in CP1250 */ diff --git a/reactos/dll/win32/msacm32/msacm_Da.rc b/reactos/dll/win32/msacm32/msacm_Da.rc index 25ca1dbc52b..67f31c8362f 100644 --- a/reactos/dll/win32/msacm32/msacm_Da.rc +++ b/reactos/dll/win32/msacm32/msacm_Da.rc @@ -18,6 +18,8 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ +#include "wineacm.h" + LANGUAGE LANG_DANISH, SUBLANG_DEFAULT DLG_ACMFORMATCHOOSE_ID DIALOG DISCARDABLE 10, 20, 225, 100 diff --git a/reactos/dll/win32/msacm32/msacm_Ja.rc b/reactos/dll/win32/msacm32/msacm_Ja.rc index 56066b0ba2d..5a27330a167 100644 --- a/reactos/dll/win32/msacm32/msacm_Ja.rc +++ b/reactos/dll/win32/msacm32/msacm_Ja.rc @@ -27,24 +27,24 @@ LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT DLG_ACMFORMATCHOOSE_ID DIALOG DISCARDABLE 10, 20, 225, 100 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "???????" +CAPTION "サウンドã®é¸æŠž" FONT 9, "MS Shell Dlg" BEGIN - LTEXT "??(&N):", -1, 5, 5, 115, 8, NOT WS_GROUP + LTEXT "åå‰(&N):", -1, 5, 5, 115, 8, NOT WS_GROUP COMBOBOX IDD_ACMFORMATCHOOSE_CMB_CUSTOM, 5, 15, 115, 60, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON "????????(&S)...", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 125, 14, 45, 14 - PUSHBUTTON "??(&R)", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 175, 14, 45, 14 + PUSHBUTTON "åå‰ã‚’付ã‘ã¦ä¿å­˜(&S)...", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 125, 14, 45, 14 + PUSHBUTTON "削除(&R)", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 175, 14, 45, 14 - LTEXT "??????(&F):", -1, 5, 41, 44, 8, NOT WS_GROUP + LTEXT "フォーマット(&F):", -1, 5, 41, 44, 8, NOT WS_GROUP COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, 50, 39, 170, 60, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP - LTEXT "??(&A):", -1, 5, 59, 44, 8, NOT WS_GROUP + LTEXT "属性(&A):", -1, 5, 59, 44, 8, NOT WS_GROUP #if 0 COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 57, 170, 60, @@ -55,9 +55,7 @@ BEGIN CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP #endif DEFPUSHBUTTON "OK", IDOK, 48, 80, 40, 14 - PUSHBUTTON "?????", IDCANCEL, 92, 80, 40, 14 - PUSHBUTTON "???(&H)", IDD_ACMFORMATCHOOSE_BTN_HELP, 136, 80, 40, 14 + PUSHBUTTON "キャンセル", IDCANCEL, 92, 80, 40, 14 + PUSHBUTTON "ヘルプ(&H)", IDD_ACMFORMATCHOOSE_BTN_HELP, 136, 80, 40, 14 END - -#pragma code_page(default) diff --git a/reactos/dll/win32/msacm32/msacm_Ko.rc b/reactos/dll/win32/msacm32/msacm_Ko.rc index 1123e1f7f80..fd017cc7ec3 100644 --- a/reactos/dll/win32/msacm32/msacm_Ko.rc +++ b/reactos/dll/win32/msacm32/msacm_Ko.rc @@ -18,6 +18,8 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ +#include "wineacm.h" + LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT DLG_ACMFORMATCHOOSE_ID DIALOG DISCARDABLE 10, 20, 225, 100 diff --git a/reactos/dll/win32/msacm32/msacm_Lt.rc b/reactos/dll/win32/msacm32/msacm_Lt.rc index 8decd59d02b..a94710cd9fb 100644 --- a/reactos/dll/win32/msacm32/msacm_Lt.rc +++ b/reactos/dll/win32/msacm32/msacm_Lt.rc @@ -18,6 +18,8 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ +#include "wineacm.h" + /* UTF-8 */ #pragma code_page(65001) @@ -57,5 +59,3 @@ BEGIN PUSHBUTTON "&Žinynas", IDD_ACMFORMATCHOOSE_BTN_HELP, 136, 80, 40, 14 END - -#pragma code_page(default) diff --git a/reactos/dll/win32/msacm32/msacm_Pl.rc b/reactos/dll/win32/msacm32/msacm_Pl.rc index 9a0c5075745..8b580783fe7 100644 --- a/reactos/dll/win32/msacm32/msacm_Pl.rc +++ b/reactos/dll/win32/msacm32/msacm_Pl.rc @@ -18,6 +18,7 @@ * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ + #include "wineacm.h" LANGUAGE LANG_POLISH, SUBLANG_DEFAULT diff --git a/reactos/dll/win32/msacm32/msacm_Ro.rc b/reactos/dll/win32/msacm32/msacm_Ro.rc index d1cc0bbb653..412d5049ea7 100644 --- a/reactos/dll/win32/msacm32/msacm_Ro.rc +++ b/reactos/dll/win32/msacm32/msacm_Ro.rc @@ -17,6 +17,8 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ +#include "wineacm.h" + LANGUAGE LANG_ROMANIAN, SUBLANG_NEUTRAL #pragma code_page(65001) @@ -50,5 +52,3 @@ BEGIN PUSHBUTTON "&Ajutor", IDD_ACMFORMATCHOOSE_BTN_HELP, 136, 80, 40, 14 END - -#pragma code_page(default) diff --git a/reactos/dll/win32/msacm32/msacm_Ru.rc b/reactos/dll/win32/msacm32/msacm_Ru.rc index f9b7f90634f..a777034e00d 100644 --- a/reactos/dll/win32/msacm32/msacm_Ru.rc +++ b/reactos/dll/win32/msacm32/msacm_Ru.rc @@ -27,24 +27,24 @@ LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT DLG_ACMFORMATCHOOSE_ID DIALOG DISCARDABLE 10, 20, 225, 100 STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "????? ?????" +CAPTION "Выбор звука" FONT 8, "MS Shell Dlg" BEGIN - LTEXT "&???:", -1, 5, 5, 115, 8, NOT WS_GROUP + LTEXT "&ИмÑ:", -1, 5, 5, 115, 8, NOT WS_GROUP COMBOBOX IDD_ACMFORMATCHOOSE_CMB_CUSTOM, 5, 15, 115, 60, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON "&????????? ???...", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 125, 14, 45, 14 - PUSHBUTTON "&???????", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 175, 14, 45, 14 + PUSHBUTTON "&Сохранить как...", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 125, 14, 45, 14 + PUSHBUTTON "&Удалить", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 175, 14, 45, 14 - LTEXT "&??????:", -1, 5, 41, 44, 8, NOT WS_GROUP + LTEXT "&Формат:", -1, 5, 41, 44, 8, NOT WS_GROUP COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, 50, 39, 170, 60, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP - LTEXT "&????????:", -1, 5, 59, 44, 8, NOT WS_GROUP + LTEXT "&СвойÑтва:", -1, 5, 59, 44, 8, NOT WS_GROUP #if 0 COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 57, 170, 60, @@ -55,7 +55,7 @@ BEGIN CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP #endif DEFPUSHBUTTON "OK", IDOK, 48, 80, 40, 14 - PUSHBUTTON "??????", IDCANCEL, 92, 80, 40, 14 - PUSHBUTTON "&??????", IDD_ACMFORMATCHOOSE_BTN_HELP, 136, 80, 40, 14 + PUSHBUTTON "Отмена", IDCANCEL, 92, 80, 40, 14 + PUSHBUTTON "&Помощь", IDD_ACMFORMATCHOOSE_BTN_HELP, 136, 80, 40, 14 END diff --git a/reactos/dll/win32/msacm32/msacm_Si.rc b/reactos/dll/win32/msacm32/msacm_Si.rc index 2513f763021..3834a3304f1 100644 --- a/reactos/dll/win32/msacm32/msacm_Si.rc +++ b/reactos/dll/win32/msacm32/msacm_Si.rc @@ -18,6 +18,8 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ +#include "wineacm.h" + #pragma code_page(65001) LANGUAGE LANG_SLOVENIAN, SUBLANG_DEFAULT @@ -56,5 +58,3 @@ BEGIN PUSHBUTTON "&PomoÄ", IDD_ACMFORMATCHOOSE_BTN_HELP, 136, 80, 40, 14 END - -#pragma code_page(default) diff --git a/reactos/dll/win32/msacm32/msacm_Tr.rc b/reactos/dll/win32/msacm32/msacm_Tr.rc index 0ececa4cca6..6c15ffb0e39 100644 --- a/reactos/dll/win32/msacm32/msacm_Tr.rc +++ b/reactos/dll/win32/msacm32/msacm_Tr.rc @@ -18,6 +18,8 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ +#include "wineacm.h" + LANGUAGE LANG_TURKISH, SUBLANG_DEFAULT DLG_ACMFORMATCHOOSE_ID DIALOG DISCARDABLE 10, 20, 225, 100 diff --git a/reactos/dll/win32/msacm32/msacm_Zh.rc b/reactos/dll/win32/msacm32/msacm_Zh.rc index 2bc138b5acd..1b8949e55f2 100644 --- a/reactos/dll/win32/msacm32/msacm_Zh.rc +++ b/reactos/dll/win32/msacm32/msacm_Zh.rc @@ -18,6 +18,8 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ +#include "wineacm.h" + /* Chinese text is encoded in UTF-8 */ #pragma code_page(65001) @@ -94,5 +96,3 @@ BEGIN PUSHBUTTON "幫助(&H)", IDD_ACMFORMATCHOOSE_BTN_HELP, 136, 80, 40, 14 END - -#pragma code_page(default) From 305d8331b26c124899d211be3abf2953621608b4 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Tue, 15 Dec 2009 13:01:55 +0000 Subject: [PATCH 224/286] [SHELL32] Fix a prototype. Convert RtlLargeInteger to native int64. Fixes 64bit built. svn path=/branches/ros-amd64-bringup/; revision=44601 --- reactos/dll/win32/shell32/drive.c | 48 +++++++++++--------------- reactos/dll/win32/shell32/she_ocmenu.c | 2 +- 2 files changed, 22 insertions(+), 28 deletions(-) diff --git a/reactos/dll/win32/shell32/drive.c b/reactos/dll/win32/shell32/drive.c index 13cb89c83b2..f31e2ea2ba9 100644 --- a/reactos/dll/win32/shell32/drive.c +++ b/reactos/dll/win32/shell32/drive.c @@ -18,11 +18,6 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -#define LARGEINT_PROTOS -#define LargeIntegerDivide RtlLargeIntegerDivide -#define ExtendedIntegerMultiply RtlExtendedIntegerMultiply -#define ConvertUlongToLargeInteger RtlConvertUlongToLargeInteger -#define LargeIntegerSubtract RtlLargeIntegerSubtract #define MAX_PROPERTY_SHEET_PAGE 32 #define WIN32_NO_STATUS @@ -291,26 +286,25 @@ ChkDskDlg( static -LARGE_INTEGER -GetFreeBytesShare(LARGE_INTEGER TotalNumberOfFreeBytes, LARGE_INTEGER TotalNumberOfBytes) +ULONGLONG +GetFreeBytesShare(ULONGLONG TotalNumberOfFreeBytes, ULONGLONG TotalNumberOfBytes) { - LARGE_INTEGER Temp, Result, Remainder; + ULONGLONG Temp; - if (TotalNumberOfFreeBytes.QuadPart == 0LL) + if (TotalNumberOfFreeBytes == 0LL) { - return ConvertUlongToLargeInteger(0); + return 0; } - Temp = LargeIntegerDivide(TotalNumberOfBytes, ConvertUlongToLargeInteger(100), &Remainder); - if (Temp.QuadPart >= TotalNumberOfFreeBytes.QuadPart) + Temp = TotalNumberOfBytes / 100; + if (Temp >= TotalNumberOfFreeBytes) { - Result = ConvertUlongToLargeInteger(1); - }else - { - Result = LargeIntegerDivide(TotalNumberOfFreeBytes, Temp, &Remainder); + return 1; + } + else + { + return TotalNumberOfFreeBytes / Temp; } - - return Result; } static @@ -343,20 +337,20 @@ PaintStaticControls(HWND hwndDlg, LPDRAWITEMSTRUCT drawItem) HBRUSH hMagBrush; RECT rect; LONG horzsize; - LARGE_INTEGER Result; + LONGLONG Result; WCHAR szBuffer[20]; hBlueBrush = CreateSolidBrush(RGB(0, 0, 255)); hMagBrush = CreateSolidBrush(RGB(255, 0, 255)); SendDlgItemMessageW(hwndDlg, 14006, WM_GETTEXT, 20, (LPARAM)szBuffer); - Result.QuadPart = _wtoi(szBuffer); + Result = _wtoi(szBuffer); CopyRect(&rect, &drawItem->rcItem); horzsize = rect.right - rect.left; - Result.QuadPart = (Result.QuadPart * horzsize) / 100; + Result = (Result * horzsize) / 100; - rect.right = drawItem->rcItem.right - Result.QuadPart; + rect.right = drawItem->rcItem.right - Result; FillRect(drawItem->hDC, &rect, hBlueBrush); rect.left = rect.right; rect.right = drawItem->rcItem.right; @@ -400,7 +394,7 @@ InitializeGeneralDriveDialog(HWND hwndDlg, WCHAR * szDrive) if(GetDiskFreeSpaceExW(szDrive, &FreeBytesAvailable, (PULARGE_INTEGER)&TotalNumberOfBytes, (PULARGE_INTEGER)&TotalNumberOfFreeBytes)) { WCHAR szResult[128]; - LARGE_INTEGER Result; + LONGLONG Result; #ifdef IOCTL_DISK_GET_LENGTH_INFO_IMPLEMENTED HANDLE hVolume; DWORD BytesReturned = 0; @@ -427,13 +421,13 @@ InitializeGeneralDriveDialog(HWND hwndDlg, WCHAR * szDrive) if (StrFormatByteSizeW(FreeBytesAvailable.QuadPart, szResult, sizeof(szResult) / sizeof(WCHAR))) SendDlgItemMessageW(hwndDlg, 14005, WM_SETTEXT, (WPARAM)NULL, (LPARAM)szResult); - Result = GetFreeBytesShare(TotalNumberOfFreeBytes, TotalNumberOfBytes); + Result = GetFreeBytesShare(TotalNumberOfFreeBytes.QuadPart, TotalNumberOfBytes.QuadPart); /* set free bytes percentage */ - swprintf(szResult, L"%02d%%", Result.QuadPart); + swprintf(szResult, L"%02d%%", Result); SendDlgItemMessageW(hwndDlg, 14006, WM_SETTEXT, (WPARAM)0, (LPARAM)szResult); /* store used share amount */ - Result = LargeIntegerSubtract(ConvertUlongToLargeInteger(100), Result); - swprintf(szResult, L"%02d%%", Result.QuadPart); + Result = 100 - Result; + swprintf(szResult, L"%02d%%", Result); SendDlgItemMessageW(hwndDlg, 14004, WM_SETTEXT, (WPARAM)0, (LPARAM)szResult); if (DriveType == DRIVE_FIXED) { diff --git a/reactos/dll/win32/shell32/she_ocmenu.c b/reactos/dll/win32/shell32/she_ocmenu.c index 0699d19ddc3..618d6ad8cf4 100644 --- a/reactos/dll/win32/shell32/she_ocmenu.c +++ b/reactos/dll/win32/shell32/she_ocmenu.c @@ -81,7 +81,7 @@ typedef struct { #define MRUF_STRING_LIST 0 -typedef int (WINAPI *CREATEMRULISTPROCW)( +typedef HANDLE (WINAPI *CREATEMRULISTPROCW)( LPMRUINFO lpmi ); From 1aa21a6a951dea3343a17831e106e5d3a3111516 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Tue, 15 Dec 2009 16:33:41 +0000 Subject: [PATCH 225/286] Fix a whole lot of merge artifacts or whatever that was that changed indentation here and there. svn path=/branches/ros-amd64-bringup/; revision=44604 --- reactos/dll/win32/mshtml/dispex.c | 2 +- reactos/dll/win32/mshtml/htmldoc.c | 6 +- reactos/dll/win32/mshtml/htmliframe.c | 2 +- reactos/dll/win32/mshtml/htmllocation.c | 18 +- reactos/dll/win32/mshtml/htmlnode.c | 8 +- reactos/dll/win32/mshtml/htmlwindow.c | 40 +-- reactos/dll/win32/mshtml/mutation.c | 6 +- reactos/dll/win32/mshtml/navigate.c | 2 +- reactos/dll/win32/mshtml/nsio.c | 12 +- reactos/dll/win32/mshtml/task.c | 2 +- reactos/dll/win32/msi/action.c | 28 +- reactos/dll/win32/msi/install.c | 4 +- reactos/dll/win32/msi/media.c | 2 +- reactos/dll/win32/msi/msi.c | 8 +- reactos/dll/win32/msi/msi_main.c | 12 +- reactos/dll/win32/msi/package.c | 4 +- reactos/dll/win32/ntdsapi/ntdsapi.rbuild | 16 +- reactos/dll/win32/olecli32/olecli32.rbuild | 18 +- reactos/dll/win32/pdh/pdh.rbuild | 16 +- reactos/dll/win32/printui/printui.rbuild | 18 +- reactos/dll/win32/shlwapi/ordinal.c | 16 +- reactos/dll/win32/shlwapi/url.c | 2 +- reactos/dll/win32/sxs/sxs.rbuild | 14 +- reactos/dll/win32/winfax/winfax.rbuild | 10 +- reactos/dll/win32/wininet/cookie.c | 8 +- reactos/dll/win32/wininet/dialogs.c | 16 +- reactos/dll/win32/wininet/ftp.c | 14 +- reactos/dll/win32/wininet/http.c | 372 ++++++++++----------- reactos/dll/win32/wininet/internet.c | 26 +- reactos/dll/win32/wininet/internet.h | 8 +- reactos/dll/win32/wininet/netconnection.c | 12 +- reactos/dll/win32/wininet/urlcache.c | 14 +- 32 files changed, 367 insertions(+), 369 deletions(-) diff --git a/reactos/dll/win32/mshtml/dispex.c b/reactos/dll/win32/mshtml/dispex.c index 6c06b9e914b..980b13b1654 100644 --- a/reactos/dll/win32/mshtml/dispex.c +++ b/reactos/dll/win32/mshtml/dispex.c @@ -813,7 +813,7 @@ static HRESULT WINAPI DispatchEx_InvokeEx(IDispatchEx *iface, DISPID id, LCID lc if(This->data->vtbl && This->data->vtbl->value) { return This->data->vtbl->value(This->outer, lcid, wFlags, pdp, pvarRes, pei, pspCaller); - } + } FIXME("DISPATCH_CONSTRUCT flag but missing value function\n"); return E_FAIL; } diff --git a/reactos/dll/win32/mshtml/htmldoc.c b/reactos/dll/win32/mshtml/htmldoc.c index 92c66384e06..836f1aee4b3 100644 --- a/reactos/dll/win32/mshtml/htmldoc.c +++ b/reactos/dll/win32/mshtml/htmldoc.c @@ -1992,9 +1992,9 @@ HRESULT HTMLDocument_Create(IUnknown *pUnkOuter, REFIID riid, void** ppvObject) return hres; - nsres = nsIWebBrowser_GetContentDOMWindow(doc->nscontainer->webbrowser, &nswindow); - if(NS_FAILED(nsres)) - ERR("GetContentDOMWindow failed: %08x\n", nsres); + nsres = nsIWebBrowser_GetContentDOMWindow(doc->nscontainer->webbrowser, &nswindow); + if(NS_FAILED(nsres)) + ERR("GetContentDOMWindow failed: %08x\n", nsres); hres = HTMLWindow_Create(doc, nswindow, NULL /* FIXME */, &doc->basedoc.window); if(nswindow) diff --git a/reactos/dll/win32/mshtml/htmliframe.c b/reactos/dll/win32/mshtml/htmliframe.c index a0f81143687..daef946c94d 100644 --- a/reactos/dll/win32/mshtml/htmliframe.c +++ b/reactos/dll/win32/mshtml/htmliframe.c @@ -109,7 +109,7 @@ static HRESULT WINAPI HTMLIFrameBase2_get_contentWindow(IHTMLFrameBase2 *iface, }else { WARN("NULL content window\n"); *p = NULL; - } + } return S_OK; } diff --git a/reactos/dll/win32/mshtml/htmllocation.c b/reactos/dll/win32/mshtml/htmllocation.c index 8175e993a9f..3b91429bdb9 100644 --- a/reactos/dll/win32/mshtml/htmllocation.c +++ b/reactos/dll/win32/mshtml/htmllocation.c @@ -157,7 +157,7 @@ static HRESULT WINAPI HTMLLocation_put_href(IHTMLLocation *iface, BSTR v) if(!This->window || !This->window->doc) { FIXME("No document available\n"); return E_FAIL; -} + } return navigate_url(This->window->doc, v); } @@ -195,7 +195,7 @@ static HRESULT WINAPI HTMLLocation_get_href(IHTMLLocation *iface, BSTR *p) memcpy(url_path + 1, url.lpszUrlPath, url.dwUrlPathLength * sizeof(WCHAR)); url.lpszUrlPath = url_path; url.dwUrlPathLength = url.dwUrlPathLength + 1; -} + } break; case INTERNET_SCHEME_HTTP: @@ -287,13 +287,13 @@ static HRESULT WINAPI HTMLLocation_get_protocol(IHTMLLocation *iface, BSTR *p) if(!url.dwSchemeLength) { FIXME("Unexpected blank protocol\n"); - return E_NOTIMPL; + return E_NOTIMPL; }else { WCHAR buf[url.dwSchemeLength + 1]; memcpy(buf, url.lpszScheme, url.dwSchemeLength * sizeof(WCHAR)); buf[url.dwSchemeLength] = ':'; *p = SysAllocStringLen(buf, url.dwSchemeLength + 1); -} + } if(!*p) return E_OUTOFMEMORY; return S_OK; @@ -325,7 +325,7 @@ static HRESULT WINAPI HTMLLocation_get_host(IHTMLLocation *iface, BSTR *p) if(!url.dwHostNameLength){ *p = NULL; return S_OK; -} + } if(url.nPort) { /* : */ @@ -371,7 +371,7 @@ static HRESULT WINAPI HTMLLocation_get_hostname(IHTMLLocation *iface, BSTR *p) if(!url.dwHostNameLength){ *p = NULL; return S_OK; -} + } *p = SysAllocStringLen(url.lpszHostName, url.dwHostNameLength); if(!*p) @@ -409,7 +409,7 @@ static HRESULT WINAPI HTMLLocation_get_port(IHTMLLocation *iface, BSTR *p) }else { const WCHAR empty[] = {0}; *p = SysAllocString(empty); -} + } if(!*p) return E_OUTOFMEMORY; @@ -477,7 +477,7 @@ static HRESULT WINAPI HTMLLocation_get_search(IHTMLLocation *iface, BSTR *p) if(!url.dwExtraInfoLength){ *p = NULL; return S_OK; -} + } url.dwExtraInfoLength = strcspnW(url.lpszExtraInfo, hash); @@ -516,7 +516,7 @@ static HRESULT WINAPI HTMLLocation_get_hash(IHTMLLocation *iface, BSTR *p) if(!url.dwExtraInfoLength){ *p = NULL; return S_OK; -} + } hash_pos = strcspnW(url.lpszExtraInfo, hash); url.dwExtraInfoLength -= hash_pos; diff --git a/reactos/dll/win32/mshtml/htmlnode.c b/reactos/dll/win32/mshtml/htmlnode.c index 9ca324ab024..b8cecf0629e 100644 --- a/reactos/dll/win32/mshtml/htmlnode.c +++ b/reactos/dll/win32/mshtml/htmlnode.c @@ -739,7 +739,7 @@ static HRESULT WINAPI HTMLDOMNode_get_nextSibling(IHTMLDOMNode *iface, IHTMLDOMN IHTMLDOMNode_AddRef(*p); }else { *p = NULL; -} + } return S_OK; } @@ -840,8 +840,8 @@ static HRESULT WINAPI HTMLDOMNode2_get_ownerDocument(IHTMLDOMNode2 *iface, IDisp if(This == &This->doc->node) { *p = NULL; }else { - *p = (IDispatch*)HTMLDOC(&This->doc->basedoc); - IDispatch_AddRef(*p); + *p = (IDispatch*)HTMLDOC(&This->doc->basedoc); + IDispatch_AddRef(*p); } return S_OK; } @@ -917,7 +917,7 @@ void HTMLDOMNode_Init(HTMLDocumentNode *doc, HTMLDOMNode *node, nsIDOMNode *nsno node->doc = doc; if(nsnode) - nsIDOMNode_AddRef(nsnode); + nsIDOMNode_AddRef(nsnode); node->nsnode = nsnode; node->next = doc->nodes; diff --git a/reactos/dll/win32/mshtml/htmlwindow.c b/reactos/dll/win32/mshtml/htmlwindow.c index 5204394b1b3..9f3b3e7f0c0 100644 --- a/reactos/dll/win32/mshtml/htmlwindow.c +++ b/reactos/dll/win32/mshtml/htmlwindow.c @@ -53,7 +53,7 @@ static void window_set_docnode(HTMLWindow *window, HTMLDocumentNode *doc_node) window->doc_obj->basedoc.doc_node = doc_node; if(doc_node) htmldoc_addref(&doc_node->basedoc); -} + } } nsIDOMWindow *get_nsdoc_window(nsIDOMDocument *nsdoc) @@ -252,7 +252,7 @@ static HRESULT WINAPI HTMLWindow2_get_length(IHTMLWindow2 *iface, LONG *p) if(NS_FAILED(nsres)) { ERR("GetFrames failed: %08x\n", nsres); return E_FAIL; -} + } nsres = nsIDOMWindowCollection_GetLength(nscollection, &length); nsIDOMWindowCollection_Release(nscollection); @@ -565,7 +565,7 @@ static HRESULT WINAPI HTMLWindow2_get_name(IHTMLWindow2 *iface, BSTR *p) }else { *p = NULL; hres = S_OK; -} + } }else { ERR("GetName failed: %08x\n", nsres); hres = E_FAIL; @@ -1021,21 +1021,21 @@ static HRESULT HTMLWindow_invoke(IUnknown *iface, DISPID id, LCID lcid, WORD fla IDispatch *disp; disp = get_script_disp(prop->script_host); - if(!disp) - return E_UNEXPECTED; + if(!disp) + return E_UNEXPECTED; - hres = IDispatch_QueryInterface(disp, &IID_IDispatchEx, (void**)&dispex); - if(SUCCEEDED(hres)) { + hres = IDispatch_QueryInterface(disp, &IID_IDispatchEx, (void**)&dispex); + if(SUCCEEDED(hres)) { TRACE("%s >>>\n", debugstr_w(prop->name)); hres = IDispatchEx_InvokeEx(dispex, prop->id, lcid, flags, params, res, ei, caller); - if(hres == S_OK) + if(hres == S_OK) TRACE("%s <<<\n", debugstr_w(prop->name)); - else + else WARN("%s <<< %08x\n", debugstr_w(prop->name), hres); - IDispatchEx_Release(dispex); - }else { - FIXME("No IDispatchEx\n"); - } + IDispatchEx_Release(dispex); + }else { + FIXME("No IDispatchEx\n"); + } IDispatch_Release(disp); break; } @@ -1044,7 +1044,7 @@ static HRESULT HTMLWindow_invoke(IUnknown *iface, DISPID id, LCID lcid, WORD fla hres = IHTMLDocument3_getElementById(HTMLDOC3(&This->doc->basedoc), prop->name, &elem); if(FAILED(hres)) - return hres; + return hres; if(!elem) return DISP_E_MEMBERNOTFOUND; @@ -1052,7 +1052,7 @@ static HRESULT HTMLWindow_invoke(IUnknown *iface, DISPID id, LCID lcid, WORD fla V_VT(res) = VT_DISPATCH; V_DISPATCH(res) = (IDispatch*)elem; break; -} + } default: ERR("invalid type %d\n", prop->type); hres = DISP_E_MEMBERNOTFOUND; @@ -1480,14 +1480,14 @@ static HRESULT WINAPI WindowDispEx_GetDispID(IDispatchEx *iface, BSTR bstrName, prop = alloc_global_prop(This, GLOBAL_SCRIPTVAR, bstrName); if(!prop) - return E_OUTOFMEMORY; + return E_OUTOFMEMORY; prop->script_host = script_host; prop->id = id; *pid = prop_to_dispid(This, prop); return S_OK; - } + } hres = IDispatchEx_GetDispID(DISPATCHEX(&This->dispex), bstrName, grfdex, pid); if(hres != DISP_E_UNKNOWNNAME) @@ -1503,11 +1503,11 @@ static HRESULT WINAPI WindowDispEx_GetDispID(IDispatchEx *iface, BSTR bstrName, prop = alloc_global_prop(This, GLOBAL_ELEMENTVAR, bstrName); if(!prop) - return E_OUTOFMEMORY; + return E_OUTOFMEMORY; *pid = prop_to_dispid(This, prop); - return S_OK; - } + return S_OK; + } } return DISP_E_UNKNOWNNAME; diff --git a/reactos/dll/win32/mshtml/mutation.c b/reactos/dll/win32/mshtml/mutation.c index e15a1cc5c51..84c92413346 100644 --- a/reactos/dll/win32/mshtml/mutation.c +++ b/reactos/dll/win32/mshtml/mutation.c @@ -267,7 +267,7 @@ static void pop_mutation_queue(HTMLDocumentNode *doc) doc->mutation_queue_tail = NULL; if(tmp->nsiface) - nsISupports_Release(tmp->nsiface); + nsISupports_Release(tmp->nsiface); heap_free(tmp); } @@ -691,7 +691,7 @@ static void NSAPI nsDocumentObserver_BindToDocument(nsIDocumentObserver *iface, push_mutation_queue(This, MUTATION_IFRAME, (nsISupports*)nsiframe); nsIDOMHTMLIFrameElement_Release(nsiframe); -} + } nsres = nsISupports_QueryInterface(aContent, &IID_nsIDOMHTMLFrameElement, (void**)&nsframe); if(NS_SUCCEEDED(nsres)) { @@ -762,7 +762,7 @@ void init_mutation(HTMLDocumentNode *doc) if(NS_FAILED(nsres)) { ERR("Could not get nsIDOMNSDocument: %08x\n", nsres); return; -} + } nsIDOMNSDocument_WineAddObserver(nsdoc, NSDOCOBS(doc)); nsIDOMNSDocument_Release(nsdoc); diff --git a/reactos/dll/win32/mshtml/navigate.c b/reactos/dll/win32/mshtml/navigate.c index c350efac4d1..727eaef15fe 100644 --- a/reactos/dll/win32/mshtml/navigate.c +++ b/reactos/dll/win32/mshtml/navigate.c @@ -955,7 +955,7 @@ static HRESULT read_stream_data(nsChannelBSC *This, IStream *stream) if(This->window) update_window_doc(This->window); - } + } This->bsc.readed += This->nsstream->buf_size; diff --git a/reactos/dll/win32/mshtml/nsio.c b/reactos/dll/win32/mshtml/nsio.c index fb8b1a2ff88..97927472546 100644 --- a/reactos/dll/win32/mshtml/nsio.c +++ b/reactos/dll/win32/mshtml/nsio.c @@ -156,7 +156,7 @@ static BOOL before_async_open(nsChannel *channel, NSContainer *container) hres = hlink_frame_navigate(&doc->basedoc, uri, channel->post_data_stream, hlnf); return hres != S_OK; - } +} #define NSCHANNEL_THIS(iface) DEFINE_THIS(nsChannel, HttpChannel, iface) @@ -705,14 +705,14 @@ static HTMLWindow *get_channel_window(nsChannel *This) if(NS_FAILED(nsres)) { ERR("Could not get nsIWebProgress iface: %08x\n", nsres); return NULL; - } + } nsres = nsIWebProgress_GetDOMWindow(web_progress, &nswindow); nsIWebProgress_Release(web_progress); if(NS_FAILED(nsres) || !nswindow) { ERR("GetDOMWindow failed: %08x\n", nsres); return NULL; - } + } window = nswindow_to_window(nswindow); nsIDOMWindow_Release(nswindow); @@ -722,7 +722,7 @@ static HTMLWindow *get_channel_window(nsChannel *This) else FIXME("NULL window for %p\n", nswindow); return window; - } +} typedef struct { task_t header; @@ -735,7 +735,7 @@ static void start_binding_proc(task_t *_task) start_binding_task_t *task = (start_binding_task_t*)_task; start_binding(NULL, task->doc, (BSCallback*)task->bscallback, NULL); - } +} typedef struct { task_t header; @@ -777,7 +777,7 @@ static nsresult async_open(nsChannel *This, HTMLWindow *window, BOOL is_doc_chan task = heap_alloc(sizeof(start_doc_binding_task_t)); task->window = window; - task->bscallback = bscallback; + task->bscallback = bscallback; push_task(&task->header, start_doc_binding_proc, window->task_magic); }else { start_binding_task_t *task = heap_alloc(sizeof(start_binding_task_t)); diff --git a/reactos/dll/win32/mshtml/task.c b/reactos/dll/win32/mshtml/task.c index c5182f70dbf..e6b94a2d228 100644 --- a/reactos/dll/win32/mshtml/task.c +++ b/reactos/dll/win32/mshtml/task.c @@ -203,7 +203,7 @@ void parse_complete(HTMLDocumentObj *doc) { TRACE("(%p)\n", doc); - } +} static void call_timer_disp(IDispatch *disp) { diff --git a/reactos/dll/win32/msi/action.c b/reactos/dll/win32/msi/action.c index 35a4d7fac93..3a11c616a82 100644 --- a/reactos/dll/win32/msi/action.c +++ b/reactos/dll/win32/msi/action.c @@ -4921,20 +4921,20 @@ static LONG env_set_flags( LPCWSTR *name, LPCWSTR *value, DWORD *flags ) if (*value) { LPCWSTR ptr = *value; - if (!strncmpW(ptr, prefix, prefix_len)) - { - *flags |= ENV_MOD_APPEND; - *value += lstrlenW(prefix); - } - else if (lstrlenW(*value) >= prefix_len) - { - ptr += lstrlenW(ptr) - prefix_len; - if (!lstrcmpW(ptr, prefix)) + if (!strncmpW(ptr, prefix, prefix_len)) { - *flags |= ENV_MOD_PREFIX; - /* the "[~]" will be removed by deformat_string */; + *flags |= ENV_MOD_APPEND; + *value += lstrlenW(prefix); + } + else if (lstrlenW(*value) >= prefix_len) + { + ptr += lstrlenW(ptr) - prefix_len; + if (!lstrcmpW(ptr, prefix)) + { + *flags |= ENV_MOD_PREFIX; + /* the "[~]" will be removed by deformat_string */; + } } - } } if (check_flag_combo(*flags, ENV_ACT_SETALWAYS | ENV_ACT_SETABSENT) || @@ -5083,8 +5083,8 @@ static UINT ITERATE_WriteEnvironmentString( MSIRECORD *rec, LPVOID param ) if (newval) { - TRACE("setting %s to %s\n", debugstr_w(name), debugstr_w(newval)); - res = RegSetValueExW(env, name, 0, type, (LPVOID)newval, size); + TRACE("setting %s to %s\n", debugstr_w(name), debugstr_w(newval)); + res = RegSetValueExW(env, name, 0, type, (LPVOID)newval, size); } else res = ERROR_SUCCESS; diff --git a/reactos/dll/win32/msi/install.c b/reactos/dll/win32/msi/install.c index f77da3f7fcc..1a535eb0273 100644 --- a/reactos/dll/win32/msi/install.c +++ b/reactos/dll/win32/msi/install.c @@ -1001,8 +1001,8 @@ UINT WINAPI MsiGetFeatureCostW(MSIHANDLE hInstall, LPCWSTR szFeature, return ERROR_FUNCTION_FAILED; } - return ERROR_SUCCESS; -} + return ERROR_SUCCESS; + } feature = get_loaded_feature(package, szFeature); diff --git a/reactos/dll/win32/msi/media.c b/reactos/dll/win32/msi/media.c index 82fb414667e..67cb7dc22eb 100644 --- a/reactos/dll/win32/msi/media.c +++ b/reactos/dll/win32/msi/media.c @@ -104,7 +104,7 @@ static UINT msi_change_media(MSIPACKAGE *package, MSIMEDIAINFO *mi) MsiRecordSetStringW(rec, 0, error); gUIHandlerRecord(gUIContext, MB_RETRYCANCEL | INSTALLMESSAGE_ERROR, rec); MsiCloseHandle(rec); - } + } } msi_free(error); diff --git a/reactos/dll/win32/msi/msi.c b/reactos/dll/win32/msi/msi.c index 63599121e37..2515714ce73 100644 --- a/reactos/dll/win32/msi/msi.c +++ b/reactos/dll/win32/msi/msi.c @@ -1906,8 +1906,8 @@ INSTALLUI_HANDLERA WINAPI MsiSetExternalUIA(INSTALLUI_HANDLERA puiHandler, gUIHandlerA = puiHandler; gUIHandlerW = NULL; - gUIFilter = dwMessageFilter; - gUIContext = pvContext; + gUIFilter = dwMessageFilter; + gUIContext = pvContext; return prev; } @@ -1921,8 +1921,8 @@ INSTALLUI_HANDLERW WINAPI MsiSetExternalUIW(INSTALLUI_HANDLERW puiHandler, gUIHandlerA = NULL; gUIHandlerW = puiHandler; - gUIFilter = dwMessageFilter; - gUIContext = pvContext; + gUIFilter = dwMessageFilter; + gUIContext = pvContext; return prev; } diff --git a/reactos/dll/win32/msi/msi_main.c b/reactos/dll/win32/msi/msi_main.c index 1d910dec269..df29184ab92 100644 --- a/reactos/dll/win32/msi/msi_main.c +++ b/reactos/dll/win32/msi/msi_main.c @@ -37,13 +37,13 @@ WINE_DEFAULT_DEBUG_CHANNEL(msi); static LONG dll_count; /* the UI level */ -INSTALLUILEVEL gUILevel = INSTALLUILEVEL_BASIC; -HWND gUIhwnd = 0; -INSTALLUI_HANDLERA gUIHandlerA = NULL; -INSTALLUI_HANDLERW gUIHandlerW = NULL; +INSTALLUILEVEL gUILevel = INSTALLUILEVEL_BASIC; +HWND gUIhwnd = 0; +INSTALLUI_HANDLERA gUIHandlerA = NULL; +INSTALLUI_HANDLERW gUIHandlerW = NULL; INSTALLUI_HANDLER_RECORD gUIHandlerRecord = NULL; -DWORD gUIFilter = 0; -LPVOID gUIContext = NULL; +DWORD gUIFilter = 0; +LPVOID gUIContext = NULL; WCHAR gszLogFile[MAX_PATH]; HINSTANCE msi_hInstance; diff --git a/reactos/dll/win32/msi/package.c b/reactos/dll/win32/msi/package.c index 92f92006acc..87f1092c9e9 100644 --- a/reactos/dll/win32/msi/package.c +++ b/reactos/dll/win32/msi/package.c @@ -1217,7 +1217,7 @@ INT MSI_ProcessMessage( MSIPACKAGE *package, INSTALLMESSAGE eMessageType, } else if (gUIHandlerA && (gUIFilter & log_type)) { - rc = gUIHandlerA(gUIContext,eMessageType,msg); + rc = gUIHandlerA( gUIContext, eMessageType, msg ); } else if (gUIHandlerRecord && (gUIFilter & log_type)) { @@ -1243,7 +1243,7 @@ INT MSI_ProcessMessage( MSIPACKAGE *package, INSTALLMESSAGE eMessageType, } } msi_free( msg ); - msi_free( message); + msi_free( message ); switch (eMessageType & 0xff000000) { diff --git a/reactos/dll/win32/ntdsapi/ntdsapi.rbuild b/reactos/dll/win32/ntdsapi/ntdsapi.rbuild index deb8174a5ba..9048109edf5 100644 --- a/reactos/dll/win32/ntdsapi/ntdsapi.rbuild +++ b/reactos/dll/win32/ntdsapi/ntdsapi.rbuild @@ -1,10 +1,10 @@ - - . - include/reactos/wine - - wine - user32 - ntdll - ntdsapi.c + + . + include/reactos/wine + + wine + user32 + ntdll + ntdsapi.c diff --git a/reactos/dll/win32/olecli32/olecli32.rbuild b/reactos/dll/win32/olecli32/olecli32.rbuild index b7323da1ac7..29e90e87fbb 100644 --- a/reactos/dll/win32/olecli32/olecli32.rbuild +++ b/reactos/dll/win32/olecli32/olecli32.rbuild @@ -1,13 +1,13 @@ - - . - include/reactos/wine - - olecli_main.c - wine - ole32 - gdi32 - ntdll + + . + include/reactos/wine + + olecli_main.c + wine + ole32 + gdi32 + ntdll diff --git a/reactos/dll/win32/pdh/pdh.rbuild b/reactos/dll/win32/pdh/pdh.rbuild index c994633e58a..db1ea7eab09 100644 --- a/reactos/dll/win32/pdh/pdh.rbuild +++ b/reactos/dll/win32/pdh/pdh.rbuild @@ -1,10 +1,10 @@ - - . - include/reactos/wine - - 0x600 - wine - ntdll - pdh_main.c + + . + include/reactos/wine + + 0x600 + wine + ntdll + pdh_main.c diff --git a/reactos/dll/win32/printui/printui.rbuild b/reactos/dll/win32/printui/printui.rbuild index 3620c699493..6596eb2a847 100644 --- a/reactos/dll/win32/printui/printui.rbuild +++ b/reactos/dll/win32/printui/printui.rbuild @@ -1,11 +1,11 @@ - - . - include/reactos/wine - - wine - shell32 - ntdll - printui.c - printui.rc + + . + include/reactos/wine + + wine + shell32 + ntdll + printui.c + printui.rc diff --git a/reactos/dll/win32/shlwapi/ordinal.c b/reactos/dll/win32/shlwapi/ordinal.c index 6d002ad0566..0ecbab81ed5 100644 --- a/reactos/dll/win32/shlwapi/ordinal.c +++ b/reactos/dll/win32/shlwapi/ordinal.c @@ -1250,12 +1250,10 @@ BOOL WINAPI SHIsSameObject(IUnknown* lpInt1, IUnknown* lpInt2) if (lpInt1 == lpInt2) return TRUE; - if (FAILED(IUnknown_QueryInterface(lpInt1, &IID_IUnknown, - (LPVOID *)&lpUnknown1))) + if (FAILED(IUnknown_QueryInterface(lpInt1, &IID_IUnknown, &lpUnknown1))) return FALSE; - if (FAILED(IUnknown_QueryInterface(lpInt2, &IID_IUnknown, - (LPVOID *)&lpUnknown2))) + if (FAILED(IUnknown_QueryInterface(lpInt2, &IID_IUnknown, &lpUnknown2))) return FALSE; if (lpUnknown1 == lpUnknown2) @@ -2273,7 +2271,7 @@ HRESULT WINAPI QISearch( if (IsEqualIID(riid, xmove->refid)) { a_vtbl = (IUnknown*)(xmove->indx + (LPBYTE)w); TRACE("matched, returning (%p)\n", a_vtbl); - *ppv = (LPVOID)a_vtbl; + *ppv = a_vtbl; IUnknown_AddRef(a_vtbl); return S_OK; } @@ -2283,7 +2281,7 @@ HRESULT WINAPI QISearch( if (IsEqualIID(riid, &IID_IUnknown)) { a_vtbl = (IUnknown*)(x->indx + (LPBYTE)w); TRACE("returning first for IUnknown (%p)\n", a_vtbl); - *ppv = (LPVOID)a_vtbl; + *ppv = a_vtbl; IUnknown_AddRef(a_vtbl); return S_OK; } @@ -2576,7 +2574,7 @@ DWORD WINAPI SHGetRestriction(LPCWSTR lpSubKey, LPCWSTR lpSubName, LPCWSTR lpVal if (retval != ERROR_SUCCESS) return 0; - SHGetValueW(hKey, lpSubName, lpValue, NULL, (LPBYTE)&retval, &datsize); + SHGetValueW(hKey, lpSubName, lpValue, NULL, &retval, &datsize); RegCloseKey(hKey); return retval; } @@ -2655,7 +2653,7 @@ HRESULT WINAPI SHWeakQueryInterface( *ppv = NULL; if(pUnk && pInner) { - hret = IUnknown_QueryInterface(pInner, riid, (LPVOID*)ppv); + hret = IUnknown_QueryInterface(pInner, riid, ppv); if (SUCCEEDED(hret)) IUnknown_Release(pUnk); } TRACE("-- 0x%08x\n", hret); @@ -4224,7 +4222,7 @@ BOOL WINAPI SHSkipJunction(IBindCtx *pbc, const CLSID *pclsid) { IUnknown* lpUnk; - if (SUCCEEDED(IBindCtx_GetObjectParam(pbc, (LPOLESTR)szSkipBinding, &lpUnk))) + if (SUCCEEDED(IBindCtx_GetObjectParam(pbc, szSkipBinding, &lpUnk))) { CLSID clsid; diff --git a/reactos/dll/win32/shlwapi/url.c b/reactos/dll/win32/shlwapi/url.c index a8fc3d09efb..2b7a8cd1686 100644 --- a/reactos/dll/win32/shlwapi/url.c +++ b/reactos/dll/win32/shlwapi/url.c @@ -167,7 +167,7 @@ HRESULT WINAPI ParseURLA(LPCSTR x, PARSEDURLA *y) y->cchSuffix = strlen(y->pszSuffix); len = MultiByteToWideChar(CP_ACP, 0, x, ptr-x, - scheme, sizeof(scheme)/sizeof(WCHAR)); + scheme, sizeof(scheme)/sizeof(WCHAR)); y->nScheme = get_scheme_code(scheme, len); return S_OK; diff --git a/reactos/dll/win32/sxs/sxs.rbuild b/reactos/dll/win32/sxs/sxs.rbuild index 61864ae7709..3e0c4b715ac 100644 --- a/reactos/dll/win32/sxs/sxs.rbuild +++ b/reactos/dll/win32/sxs/sxs.rbuild @@ -1,11 +1,11 @@ - - . - include/reactos/wine - - sxs.c - wine - ntdll + + . + include/reactos/wine + + sxs.c + wine + ntdll diff --git a/reactos/dll/win32/winfax/winfax.rbuild b/reactos/dll/win32/winfax/winfax.rbuild index aa7b87d2b25..1f99d1ee5e0 100644 --- a/reactos/dll/win32/winfax/winfax.rbuild +++ b/reactos/dll/win32/winfax/winfax.rbuild @@ -1,7 +1,7 @@ - - . - ntdll - winfax.c - winfax.rc + + . + ntdll + winfax.c + winfax.rc diff --git a/reactos/dll/win32/wininet/cookie.c b/reactos/dll/win32/wininet/cookie.c index b11706aa1fe..12d841bc7b9 100644 --- a/reactos/dll/win32/wininet/cookie.c +++ b/reactos/dll/win32/wininet/cookie.c @@ -192,7 +192,7 @@ static BOOL COOKIE_crackUrlSimple(LPCWSTR lpszUrl, LPWSTR hostName, int hostName UrlComponents.dwUrlPathLength = pathLen; return InternetCrackUrlW(lpszUrl, 0, 0, &UrlComponents); - } +} /* match a domain. domain must match if the domain is not NULL. path must match if the path is not NULL */ static BOOL COOKIE_matchDomain(LPCWSTR lpszCookieDomain, LPCWSTR lpszCookiePath, @@ -219,8 +219,8 @@ static BOOL COOKIE_matchDomain(LPCWSTR lpszCookieDomain, LPCWSTR lpszCookiePath, if (!searchDomain->lpCookiePath) return FALSE; if (strcmpW(lpszCookiePath, searchDomain->lpCookiePath)) - return FALSE; - } + return FALSE; + } return TRUE; } @@ -415,7 +415,7 @@ static BOOL set_cookie(LPCWSTR domain, LPCWSTR path, LPCWSTR cookie_name, LPCWST } if (!thisCookieDomain) - thisCookieDomain = COOKIE_addDomain(domain, path); + thisCookieDomain = COOKIE_addDomain(domain, path); if ((thisCookie = COOKIE_findCookie(thisCookieDomain, cookie_name))) COOKIE_deleteCookie(thisCookie, FALSE); diff --git a/reactos/dll/win32/wininet/dialogs.c b/reactos/dll/win32/wininet/dialogs.c index 613c46e16d8..dd5aa315a63 100644 --- a/reactos/dll/win32/wininet/dialogs.c +++ b/reactos/dll/win32/wininet/dialogs.c @@ -65,7 +65,7 @@ static BOOL WININET_GetProxyServer( HINTERNET hRequest, LPWSTR szBuf, DWORD sz ) lpwhr = (LPWININETHTTPREQW) WININET_GetObject( hRequest ); if (NULL == lpwhr) - return FALSE; + return FALSE; lpwhs = lpwhr->lpHttpSession; if (NULL == lpwhs) @@ -206,8 +206,8 @@ static BOOL WININET_SetProxyAuthorization( HINTERNET hRequest, lpwhr = (LPWININETHTTPREQW) WININET_GetObject( hRequest ); if( !lpwhr ) - return FALSE; - + return FALSE; + lpwhs = lpwhr->lpHttpSession; if (NULL == lpwhs || lpwhs->hdr.htype != WH_HHTTPSESSION) { @@ -220,14 +220,14 @@ static BOOL WININET_SetProxyAuthorization( HINTERNET hRequest, p = HeapAlloc( GetProcessHeap(), 0, (strlenW( username ) + 1)*sizeof(WCHAR) ); if( !p ) return FALSE; - + lstrcpyW( p, username ); - hIC->lpszProxyUsername = p; + hIC->lpszProxyUsername = p; p = HeapAlloc( GetProcessHeap(), 0, (strlenW( password ) + 1)*sizeof(WCHAR) ); if( !p ) return FALSE; - + lstrcpyW( p, password ); hIC->lpszProxyPassword = p; @@ -367,8 +367,8 @@ DWORD WINAPI InternetErrorDlg(HWND hWnd, HINTERNET hRequest, dwStatus = WININET_GetConnectionStatus( hRequest ); if( HTTP_STATUS_PROXY_AUTH_REQ != dwStatus ) return ERROR_SUCCESS; - return DialogBoxParamW( hwininet, MAKEINTRESOURCEW( IDD_PROXYDLG ), - hWnd, WININET_ProxyPasswordDialog, (LPARAM) ¶ms ); + return DialogBoxParamW( hwininet, MAKEINTRESOURCEW( IDD_PROXYDLG ), + hWnd, WININET_ProxyPasswordDialog, (LPARAM) ¶ms ); case ERROR_INTERNET_INCORRECT_PASSWORD: return DialogBoxParamW( hwininet, MAKEINTRESOURCEW( IDD_PROXYDLG ), diff --git a/reactos/dll/win32/wininet/ftp.c b/reactos/dll/win32/wininet/ftp.c index e7bc6e155da..770fef2886a 100644 --- a/reactos/dll/win32/wininet/ftp.c +++ b/reactos/dll/win32/wininet/ftp.c @@ -710,7 +710,7 @@ HINTERNET WINAPI FtpFindFirstFileA(HINTERNET hConnect, if (ret && lpFindFileData) WININET_find_data_WtoA(lpFindFileDataW, lpFindFileData); - + return ret; } @@ -1087,7 +1087,7 @@ HINTERNET WINAPI FtpOpenFileA(HINTERNET hFtpSession, { LPWSTR lpwzFileName; HINTERNET ret; - + lpwzFileName = lpszFileName?WININET_strdup_AtoW(lpszFileName):NULL; ret = FtpOpenFileW(hFtpSession, lpwzFileName, fdwAccess, dwFlags, dwContext); HeapFree(GetProcessHeap(), 0, lpwzFileName); @@ -1347,9 +1347,9 @@ HINTERNET FTP_FtpOpenFileW(LPWININETFTPSESSIONW lpwfs, iar.dwResult = (DWORD)bSuccess; iar.dwError = bSuccess ? ERROR_SUCCESS : INTERNET_GetLastError(); - SendAsyncCallback(&lpwfs->hdr, lpwfs->hdr.dwContext, INTERNET_STATUS_REQUEST_COMPLETE, - &iar, sizeof(INTERNET_ASYNC_RESULT)); - } + SendAsyncCallback(&lpwfs->hdr, lpwfs->hdr.dwContext, INTERNET_STATUS_REQUEST_COMPLETE, + &iar, sizeof(INTERNET_ASYNC_RESULT)); + } lend: if( lpwh ) @@ -3515,7 +3515,7 @@ static BOOL FTP_ParseNextFile(INT nSocket, LPCWSTR lpszSearchFile, LPFILEPROPERT /* Hacky and bad Y2K protection :-) */ if (lpfp->tmLastModified.tm_year < 70) lpfp->tmLastModified.tm_year += 100; - + pszToken = strtok(NULL, szSpace); if(!pszToken) continue; sscanf(pszToken, "%d:%d", @@ -3530,7 +3530,7 @@ static BOOL FTP_ParseNextFile(INT nSocket, LPCWSTR lpszSearchFile, LPFILEPROPERT lpfp->tmLastModified.tm_hour, lpfp->tmLastModified.tm_min, lpfp->tmLastModified.tm_sec, (lpfp->tmLastModified.tm_year >= 100) ? lpfp->tmLastModified.tm_year - 100 : lpfp->tmLastModified.tm_year, lpfp->tmLastModified.tm_mon, lpfp->tmLastModified.tm_mday); - + pszToken = strtok(NULL, szSpace); if(!pszToken) continue; if(!strcasecmp(pszToken, "")) { diff --git a/reactos/dll/win32/wininet/http.c b/reactos/dll/win32/wininet/http.c index 0ab508db78c..f0ad6beddc1 100644 --- a/reactos/dll/win32/wininet/http.c +++ b/reactos/dll/win32/wininet/http.c @@ -146,21 +146,21 @@ static LPWSTR * HTTP_Tokenize(LPCWSTR string, LPCWSTR token_string) int i; LPCWSTR next_token; - /* empty string has no tokens */ - if (*string) + /* empty string has no tokens */ + if (*string) + tokens++; + /* count tokens */ + for (i = 0; string[i]; i++) + if (!strncmpW(string+i, token_string, strlenW(token_string))) + { + DWORD j; tokens++; - /* count tokens */ - for (i = 0; string[i]; i++) - if (!strncmpW(string+i, token_string, strlenW(token_string))) - { - DWORD j; - tokens++; - /* we want to skip over separators, but not the null terminator */ - for (j = 0; j < strlenW(token_string) - 1; j++) - if (!string[i+j]) - break; - i += j; - } + /* we want to skip over separators, but not the null terminator */ + for (j = 0; j < strlenW(token_string) - 1; j++) + if (!string[i+j]) + break; + i += j; + } /* add 1 for terminating NULL */ token_array = HeapAlloc(GetProcessHeap(), 0, (tokens+1) * sizeof(*token_array)); @@ -318,10 +318,10 @@ static void HTTP_ProcessCookies( LPWININETHTTPREQW lpwhr ) HeaderIndex = HTTP_GetCustomHeaderIndex(lpwhr, szSet_Cookie, 0, FALSE); if (HeaderIndex == -1) return; - setCookieHeader = &lpwhr->pCustHeaders[HeaderIndex]; + setCookieHeader = &lpwhr->pCustHeaders[HeaderIndex]; - if (!(lpwhr->hdr.dwFlags & INTERNET_FLAG_NO_COOKIES) && setCookieHeader->lpszValue) - { + if (!(lpwhr->hdr.dwFlags & INTERNET_FLAG_NO_COOKIES) && setCookieHeader->lpszValue) + { int nPosStart = 0, nPosEnd = 0, len; static const WCHAR szFmt[] = { 'h','t','t','p',':','/','/','%','s','/',0}; @@ -335,11 +335,11 @@ static void HTTP_ProcessCookies( LPWININETHTTPREQW lpwhr ) int nEqualPos = 0; while (setCookieHeader->lpszValue[nPosEnd] != ';' && setCookieHeader->lpszValue[nPosEnd] != ',' && setCookieHeader->lpszValue[nPosEnd] != '\0') -{ + { nPosEnd++; - } + } if (setCookieHeader->lpszValue[nPosEnd] == ';') -{ + { /* fixme: not case sensitive, strcasestr is gnu only */ int nDomainPosEnd = 0; int nDomainPosStart = 0, nDomainLength = 0; @@ -349,28 +349,28 @@ static void HTTP_ProcessCookies( LPWININETHTTPREQW lpwhr ) { /* they have specified their own domain, lets use it */ while (lpszDomain[nDomainPosEnd] != ';' && lpszDomain[nDomainPosEnd] != ',' && lpszDomain[nDomainPosEnd] != '\0') - { + { nDomainPosEnd++; - } + } nDomainPosStart = strlenW(szDomain); nDomainLength = (nDomainPosEnd - nDomainPosStart) + 1; domain = HeapAlloc(GetProcessHeap(), 0, (nDomainLength + 1)*sizeof(WCHAR)); lstrcpynW(domain, &lpszDomain[nDomainPosStart], nDomainLength + 1); - } -} + } + } if (setCookieHeader->lpszValue[nPosEnd] == '\0') break; buf_cookie = HeapAlloc(GetProcessHeap(), 0, ((nPosEnd - nPosStart) + 1)*sizeof(WCHAR)); lstrcpynW(buf_cookie, &setCookieHeader->lpszValue[nPosStart], (nPosEnd - nPosStart) + 1); TRACE("%s\n", debugstr_w(buf_cookie)); while (buf_cookie[nEqualPos] != '=' && buf_cookie[nEqualPos] != '\0') -{ + { nEqualPos++; -} + } if (buf_cookie[nEqualPos] == '\0' || buf_cookie[nEqualPos + 1] == '\0') -{ + { HeapFree(GetProcessHeap(), 0, buf_cookie); - break; - } + break; + } cookie_name = HeapAlloc(GetProcessHeap(), 0, (nEqualPos + 1)*sizeof(WCHAR)); lstrcpynW(cookie_name, buf_cookie, nEqualPos + 1); @@ -393,11 +393,11 @@ static void HTTP_ProcessCookies( LPWININETHTTPREQW lpwhr ) } static inline BOOL is_basic_auth_value( LPCWSTR pszAuthValue ) - { +{ static const WCHAR szBasic[] = {'B','a','s','i','c'}; /* Note: not nul-terminated */ return !strncmpiW(pszAuthValue, szBasic, ARRAYSIZE(szBasic)) && ((pszAuthValue[ARRAYSIZE(szBasic)] == ' ') || !pszAuthValue[ARRAYSIZE(szBasic)]); - } +} static BOOL HTTP_DoAuthorization( LPWININETHTTPREQW lpwhr, LPCWSTR pszAuthValue, struct HttpAuthInfo **ppAuthInfo, @@ -525,17 +525,17 @@ static BOOL HTTP_DoAuthorization( LPWININETHTTPREQW lpwhr, LPCWSTR pszAuthValue, * retrieve them if the application didn't pass us any credentials */ if (!domain_and_username) return FALSE; - userlen = WideCharToMultiByte(CP_UTF8, 0, domain_and_username, lstrlenW(domain_and_username), NULL, 0, NULL, NULL); - passlen = WideCharToMultiByte(CP_UTF8, 0, password, lstrlenW(password), NULL, 0, NULL, NULL); + userlen = WideCharToMultiByte(CP_UTF8, 0, domain_and_username, lstrlenW(domain_and_username), NULL, 0, NULL, NULL); + passlen = WideCharToMultiByte(CP_UTF8, 0, password, lstrlenW(password), NULL, 0, NULL, NULL); - /* length includes a nul terminator, which will be re-used for the ':' */ - auth_data = HeapAlloc(GetProcessHeap(), 0, userlen + 1 + passlen); - if (!auth_data) - return FALSE; + /* length includes a nul terminator, which will be re-used for the ':' */ + auth_data = HeapAlloc(GetProcessHeap(), 0, userlen + 1 + passlen); + if (!auth_data) + return FALSE; - WideCharToMultiByte(CP_UTF8, 0, domain_and_username, -1, auth_data, userlen, NULL, NULL); - auth_data[userlen] = ':'; - WideCharToMultiByte(CP_UTF8, 0, password, -1, &auth_data[userlen+1], passlen, NULL, NULL); + WideCharToMultiByte(CP_UTF8, 0, domain_and_username, -1, auth_data, userlen, NULL, NULL); + auth_data[userlen] = ':'; + WideCharToMultiByte(CP_UTF8, 0, password, -1, &auth_data[userlen+1], passlen, NULL, NULL); pAuthInfo->auth_data = auth_data; pAuthInfo->auth_data_len = userlen + 1 + passlen; @@ -776,7 +776,7 @@ BOOL WINAPI HttpEndRequestA(HINTERNET hRequest, ptrW = lpBuffersOutW; while (ptr) -{ + { if (ptr->lpvBuffer && ptr->dwBufferLength) ptrW->lpvBuffer = HeapAlloc(GetProcessHeap(),0,ptr->dwBufferLength); ptrW->dwBufferLength = ptr->dwBufferLength; @@ -805,8 +805,8 @@ BOOL WINAPI HttpEndRequestA(HINTERNET hRequest, ptrW2 = ptrW->Next; HeapFree(GetProcessHeap(),0,ptrW); ptrW = ptrW2; - } - } + } + } return rc; } @@ -837,7 +837,7 @@ BOOL WINAPI HttpEndRequestW(HINTERNET hRequest, INTERNET_SetLastError(ERROR_INTERNET_INCORRECT_HANDLE_TYPE); if (lpwhr) WININET_Release( &lpwhr->hdr ); - return FALSE; + return FALSE; } lpwhr->hdr.dwFlags |= dwFlags; @@ -886,7 +886,7 @@ BOOL WINAPI HttpEndRequestW(HINTERNET hRequest, rc = HTTP_HandleRedirect(lpwhr, szNewLocation); if (rc) rc = HTTP_HttpSendRequestW(lpwhr, NULL, 0, NULL, 0, 0, TRUE); - } + } } } @@ -1017,12 +1017,12 @@ HINTERNET WINAPI HttpOpenRequestA(HINTERNET hHttpSession, types = lpszAcceptTypes; while (*types) { - /* find out how many there are */ + /* find out how many there are */ if (((ULONG_PTR)*types >> 16) && **types) - { - TRACE("accept type: %s\n", debugstr_a(*types)); - acceptTypesCount++; - } + { + TRACE("accept type: %s\n", debugstr_a(*types)); + acceptTypesCount++; + } types++; } szAcceptTypes = HeapAlloc(GetProcessHeap(), 0, sizeof(WCHAR *) * (acceptTypesCount+1)); @@ -1372,7 +1372,7 @@ static void HTTPREQ_Destroy(WININETHANDLEHEADER *hdr) if(lpwhr->lpszCacheFile) { DeleteFileW(lpwhr->lpszCacheFile); /* FIXME */ - HeapFree(GetProcessHeap(), 0, lpwhr->lpszCacheFile); + HeapFree(GetProcessHeap(), 0, lpwhr->lpszCacheFile); } WININET_Release(&lpwhr->lpHttpSession->hdr); @@ -1403,7 +1403,7 @@ static void HTTPREQ_CloseConnection(WININETHANDLEHEADER *hdr) return; if (lpwhr->pAuthInfo) -{ + { if (SecIsValidHandle(&lpwhr->pAuthInfo->ctx)) DeleteSecurityContext(&lpwhr->pAuthInfo->ctx); if (SecIsValidHandle(&lpwhr->pAuthInfo->cred)) @@ -1413,9 +1413,9 @@ static void HTTPREQ_CloseConnection(WININETHANDLEHEADER *hdr) HeapFree(GetProcessHeap(), 0, lpwhr->pAuthInfo->scheme); HeapFree(GetProcessHeap(), 0, lpwhr->pAuthInfo); lpwhr->pAuthInfo = NULL; -} + } if (lpwhr->pProxyAuthInfo) -{ + { if (SecIsValidHandle(&lpwhr->pProxyAuthInfo->ctx)) DeleteSecurityContext(&lpwhr->pProxyAuthInfo->ctx); if (SecIsValidHandle(&lpwhr->pProxyAuthInfo->cred)) @@ -1434,10 +1434,10 @@ static void HTTPREQ_CloseConnection(WININETHANDLEHEADER *hdr) INTERNET_SendCallback(&lpwhr->hdr, lpwhr->hdr.dwContext, INTERNET_STATUS_CONNECTION_CLOSED, 0, 0); - } +} static DWORD HTTPREQ_QueryOption(WININETHANDLEHEADER *hdr, DWORD option, void *buffer, DWORD *size, BOOL unicode) - { +{ WININETHTTPREQW *req = (WININETHTTPREQW*)hdr; switch(option) { @@ -1616,7 +1616,7 @@ static DWORD HTTP_Read(WININETHTTPREQW *req, void *buffer, DWORD size, DWORD *re *read = 0; HTTP_FinishedReading(req); return ERROR_SUCCESS; -} + } req->dwContentRead += bytes_read; *read = bytes_read; @@ -1628,26 +1628,26 @@ static DWORD HTTP_Read(WININETHTTPREQW *req, void *buffer, DWORD size, DWORD *re res = WriteFile(req->hCacheFile, buffer, bytes_read, &dwBytesWritten, NULL); if(!res) WARN("WriteFile failed: %u\n", GetLastError()); - } + } if(!bytes_read && (req->dwContentRead == req->dwContentLength)) HTTP_FinishedReading(req); return ERROR_SUCCESS; - } +} static DWORD get_chunk_size(const char *buffer) - { +{ const char *p; DWORD size = 0; for (p = buffer; *p; p++) -{ + { if (*p >= '0' && *p <= '9') size = size * 16 + *p - '0'; else if (*p >= 'a' && *p <= 'f') size = size * 16 + *p - 'a' + 10; else if (*p >= 'A' && *p <= 'F') size = size * 16 + *p - 'A' + 10; else if (*p == ';') break; - } + } return size; } @@ -1663,27 +1663,27 @@ static DWORD HTTP_ReadChunked(WININETHTTPREQW *req, void *buffer, DWORD size, DW if (*read == size) break; if (req->dwContentLength == ~0UL) /* new chunk */ -{ + { buflen = sizeof(reply); if (!NETCON_getNextLine(&req->netConnection, reply, &buflen)) break; if (!(req->dwContentLength = get_chunk_size(reply))) -{ + { /* zero sized chunk marks end of transfer; read any trailing headers and return */ HTTP_GetResponseHeaders(req, FALSE); break; - } -} + } + } to_read = min(to_write, req->dwContentLength - req->dwContentRead); if (!NETCON_recv(&req->netConnection, p, to_read, sync ? MSG_WAITALL : 0, &bytes_read)) -{ + { if (bytes_read != to_read) ERR("Not all data received %d/%d\n", bytes_read, to_read); /* always return success, even if the network layer returns an error */ *read = 0; - break; + break; } if (!bytes_read) break; @@ -1692,12 +1692,12 @@ static DWORD HTTP_ReadChunked(WININETHTTPREQW *req, void *buffer, DWORD size, DW *read += bytes_read; if (req->lpszCacheFile) -{ + { DWORD dwBytesWritten; if (!WriteFile(req->hCacheFile, p, bytes_read, &dwBytesWritten, NULL)) WARN("WriteFile failed: %u\n", GetLastError()); - } + } p += bytes_read; if (req->dwContentRead == req->dwContentLength) /* chunk complete */ @@ -1707,12 +1707,12 @@ static DWORD HTTP_ReadChunked(WININETHTTPREQW *req, void *buffer, DWORD size, DW buflen = sizeof(reply); if (!NETCON_getNextLine(&req->netConnection, reply, &buflen)) -{ + { ERR("Malformed chunk\n"); *read = 0; break; - } -} + } + } } if (!*read) HTTP_FinishedReading(req); return ERROR_SUCCESS; @@ -1731,7 +1731,7 @@ static DWORD HTTPREQ_Read(WININETHTTPREQW *req, void *buffer, DWORD size, DWORD } else return HTTP_Read(req, buffer, size, read, sync); - } +} static DWORD HTTPREQ_ReadFile(WININETHANDLEHEADER *hdr, void *buffer, DWORD size, DWORD *read) { @@ -1779,17 +1779,17 @@ static DWORD HTTPREQ_ReadFileExA(WININETHANDLEHEADER *hdr, INTERNET_BUFFERSA *bu NETCON_query_data_available(&req->netConnection, &available); if (!available) - { - WORKREQUEST workRequest; + { + WORKREQUEST workRequest; workRequest.asyncproc = HTTPREQ_AsyncReadFileExProc; - workRequest.hdr = WININET_AddRef(&req->hdr); - workRequest.u.InternetReadFileExA.lpBuffersOut = buffers; + workRequest.hdr = WININET_AddRef(&req->hdr); + workRequest.u.InternetReadFileExA.lpBuffersOut = buffers; - INTERNET_AsyncCall(&workRequest); + INTERNET_AsyncCall(&workRequest); - return ERROR_IO_PENDING; - } + return ERROR_IO_PENDING; + } } res = HTTPREQ_Read(req, buffers->lpvBuffer, buffers->dwBufferLength, &buffers->dwBufferLength, @@ -1825,7 +1825,7 @@ static void HTTPREQ_AsyncQueryDataAvailableProc(WORKREQUEST *workRequest) INTERNET_SendCallback(&req->hdr, req->hdr.dwContext, INTERNET_STATUS_REQUEST_COMPLETE, &iar, sizeof(INTERNET_ASYNC_RESULT)); - } +} static DWORD HTTPREQ_QueryDataAvailable(WININETHANDLEHEADER *hdr, DWORD *available, DWORD flags, DWORD_PTR ctx) { @@ -1846,7 +1846,7 @@ static DWORD HTTPREQ_QueryDataAvailable(WININETHANDLEHEADER *hdr, DWORD *availab if (NETCON_recv(&req->netConnection, buffer, min(async ? 1 : sizeof(buffer), req->dwContentLength - req->dwContentRead), MSG_PEEK, (int *)available) && async && *available) -{ + { WORKREQUEST workRequest; *available = 0; @@ -2233,13 +2233,13 @@ static BOOL WINAPI HTTP_HttpQueryInfoW( LPWININETHTTPREQW lpwhr, DWORD dwInfoLev return FALSE; } - for (i = 0; ppszRawHeaderLines[i]; i++) - { - DWORD len = strlenW(ppszRawHeaderLines[i]); - memcpy(pszString, ppszRawHeaderLines[i], (len+1)*sizeof(WCHAR)); - pszString += len+1; - } - *pszString = '\0'; + for (i = 0; ppszRawHeaderLines[i]; i++) + { + DWORD len = strlenW(ppszRawHeaderLines[i]); + memcpy(pszString, ppszRawHeaderLines[i], (len+1)*sizeof(WCHAR)); + pszString += len+1; + } + *pszString = '\0'; TRACE("returning data: %s\n", debugstr_wn((WCHAR*)lpBuffer, size)); @@ -2258,7 +2258,7 @@ static BOOL WINAPI HTTP_HttpQueryInfoW( LPWININETHTTPREQW lpwhr, DWORD dwInfoLev INTERNET_SetLastError(ERROR_INSUFFICIENT_BUFFER); return FALSE; } - memcpy(lpBuffer, lpwhr->lpszStatusText, (len + 1) * sizeof(WCHAR)); + memcpy(lpBuffer, lpwhr->lpszStatusText, (len+1)*sizeof(WCHAR)); *lpdwBufferLength = len * sizeof(WCHAR); TRACE("returning data: %s\n", debugstr_wn((WCHAR*)lpBuffer, len)); @@ -2276,7 +2276,7 @@ static BOOL WINAPI HTTP_HttpQueryInfoW( LPWININETHTTPREQW lpwhr, DWORD dwInfoLev INTERNET_SetLastError(ERROR_INSUFFICIENT_BUFFER); return FALSE; } - memcpy(lpBuffer, lpwhr->lpszVersion, (len + 1) * sizeof(WCHAR)); + memcpy(lpBuffer, lpwhr->lpszVersion, (len+1)*sizeof(WCHAR)); *lpdwBufferLength = len * sizeof(WCHAR); TRACE("returning data: %s\n", debugstr_wn((WCHAR*)lpBuffer, len)); @@ -2310,8 +2310,8 @@ static BOOL WINAPI HTTP_HttpQueryInfoW( LPWININETHTTPREQW lpwhr, DWORD dwInfoLev /* coalesce value to requested type */ if (dwInfoLevel & HTTP_QUERY_FLAG_NUMBER) { - *(int *)lpBuffer = atoiW(lphttpHdr->lpszValue); - bSuccess = TRUE; + *(int *)lpBuffer = atoiW(lphttpHdr->lpszValue); + bSuccess = TRUE; TRACE(" returning number : %d\n", *(int *)lpBuffer); } @@ -2324,24 +2324,24 @@ static BOOL WINAPI HTTP_HttpQueryInfoW( LPWININETHTTPREQW lpwhr, DWORD dwInfoLev tmpTime = ConvertTimeString(lphttpHdr->lpszValue); tmpTM = *gmtime(&tmpTime); - STHook = (SYSTEMTIME *)lpBuffer; + STHook = (SYSTEMTIME *) lpBuffer; if(STHook==NULL) return bSuccess; - STHook->wDay = tmpTM.tm_mday; - STHook->wHour = tmpTM.tm_hour; - STHook->wMilliseconds = 0; - STHook->wMinute = tmpTM.tm_min; - STHook->wDayOfWeek = tmpTM.tm_wday; - STHook->wMonth = tmpTM.tm_mon + 1; - STHook->wSecond = tmpTM.tm_sec; - STHook->wYear = tmpTM.tm_year; + STHook->wDay = tmpTM.tm_mday; + STHook->wHour = tmpTM.tm_hour; + STHook->wMilliseconds = 0; + STHook->wMinute = tmpTM.tm_min; + STHook->wDayOfWeek = tmpTM.tm_wday; + STHook->wMonth = tmpTM.tm_mon + 1; + STHook->wSecond = tmpTM.tm_sec; + STHook->wYear = tmpTM.tm_year; - bSuccess = TRUE; + bSuccess = TRUE; - TRACE(" returning time: %04d/%02d/%02d - %d - %02d:%02d:%02d.%02d\n", - STHook->wYear, STHook->wMonth, STHook->wDay, STHook->wDayOfWeek, - STHook->wHour, STHook->wMinute, STHook->wSecond, STHook->wMilliseconds); + TRACE(" returning time : %04d/%02d/%02d - %d - %02d:%02d:%02d.%02d\n", + STHook->wYear, STHook->wMonth, STHook->wDay, STHook->wDayOfWeek, + STHook->wHour, STHook->wMinute, STHook->wSecond, STHook->wMilliseconds); } else if (lphttpHdr->lpszValue) { @@ -2354,7 +2354,7 @@ static BOOL WINAPI HTTP_HttpQueryInfoW( LPWININETHTTPREQW lpwhr, DWORD dwInfoLev return bSuccess; } - memcpy(lpBuffer, lphttpHdr->lpszValue, len); + memcpy(lpBuffer, lphttpHdr->lpszValue, len); *lpdwBufferLength = len - sizeof(WCHAR); bSuccess = TRUE; @@ -2679,7 +2679,7 @@ BOOL WINAPI HttpSendRequestExW(HINTERNET hRequest, if (lpBuffersIn) { if (lpBuffersIn->lpcszHeader) - /* FIXME: this should use dwHeadersLength or may not be necessary at all */ + /* FIXME: this should use dwHeadersLength or may not be necessary at all */ req->lpszHeader = WININET_strdupW(lpBuffersIn->lpcszHeader); else req->lpszHeader = NULL; @@ -2871,57 +2871,57 @@ static BOOL HTTP_HandleRedirect(LPWININETHTTPREQW lpwhr, LPCWSTR lpszUrl) { URL_COMPONENTSW urlComponents; WCHAR protocol[32], hostName[MAXHOSTNAME], userName[1024]; - static WCHAR szHttp[] = {'h','t','t','p',0}; - static WCHAR szHttps[] = {'h','t','t','p','s',0}; - DWORD url_length = 0; - LPWSTR orig_url; - LPWSTR combined_url; + static WCHAR szHttp[] = {'h','t','t','p',0}; + static WCHAR szHttps[] = {'h','t','t','p','s',0}; + DWORD url_length = 0; + LPWSTR orig_url; + LPWSTR combined_url; - urlComponents.dwStructSize = sizeof(URL_COMPONENTSW); - urlComponents.lpszScheme = (lpwhr->hdr.dwFlags & INTERNET_FLAG_SECURE) ? szHttps : szHttp; - urlComponents.dwSchemeLength = 0; - urlComponents.lpszHostName = lpwhs->lpszHostName; - urlComponents.dwHostNameLength = 0; - urlComponents.nPort = lpwhs->nHostPort; - urlComponents.lpszUserName = lpwhs->lpszUserName; - urlComponents.dwUserNameLength = 0; - urlComponents.lpszPassword = NULL; - urlComponents.dwPasswordLength = 0; - urlComponents.lpszUrlPath = lpwhr->lpszPath; - urlComponents.dwUrlPathLength = 0; - urlComponents.lpszExtraInfo = NULL; - urlComponents.dwExtraInfoLength = 0; + urlComponents.dwStructSize = sizeof(URL_COMPONENTSW); + urlComponents.lpszScheme = (lpwhr->hdr.dwFlags & INTERNET_FLAG_SECURE) ? szHttps : szHttp; + urlComponents.dwSchemeLength = 0; + urlComponents.lpszHostName = lpwhs->lpszHostName; + urlComponents.dwHostNameLength = 0; + urlComponents.nPort = lpwhs->nHostPort; + urlComponents.lpszUserName = lpwhs->lpszUserName; + urlComponents.dwUserNameLength = 0; + urlComponents.lpszPassword = NULL; + urlComponents.dwPasswordLength = 0; + urlComponents.lpszUrlPath = lpwhr->lpszPath; + urlComponents.dwUrlPathLength = 0; + urlComponents.lpszExtraInfo = NULL; + urlComponents.dwExtraInfoLength = 0; - if (!InternetCreateUrlW(&urlComponents, 0, NULL, &url_length) && - (GetLastError() != ERROR_INSUFFICIENT_BUFFER)) + if (!InternetCreateUrlW(&urlComponents, 0, NULL, &url_length) && + (GetLastError() != ERROR_INSUFFICIENT_BUFFER)) return FALSE; - orig_url = HeapAlloc(GetProcessHeap(), 0, url_length); + orig_url = HeapAlloc(GetProcessHeap(), 0, url_length); - /* convert from bytes to characters */ - url_length = url_length / sizeof(WCHAR) - 1; - if (!InternetCreateUrlW(&urlComponents, 0, orig_url, &url_length)) - { + /* convert from bytes to characters */ + url_length = url_length / sizeof(WCHAR) - 1; + if (!InternetCreateUrlW(&urlComponents, 0, orig_url, &url_length)) + { + HeapFree(GetProcessHeap(), 0, orig_url); + return FALSE; + } + + url_length = 0; + if (!InternetCombineUrlW(orig_url, lpszUrl, NULL, &url_length, ICU_ENCODE_SPACES_ONLY) && + (GetLastError() != ERROR_INSUFFICIENT_BUFFER)) + { + HeapFree(GetProcessHeap(), 0, orig_url); + return FALSE; + } + combined_url = HeapAlloc(GetProcessHeap(), 0, url_length * sizeof(WCHAR)); + + if (!InternetCombineUrlW(orig_url, lpszUrl, combined_url, &url_length, ICU_ENCODE_SPACES_ONLY)) + { + HeapFree(GetProcessHeap(), 0, orig_url); + HeapFree(GetProcessHeap(), 0, combined_url); + return FALSE; + } HeapFree(GetProcessHeap(), 0, orig_url); - return FALSE; - } - - url_length = 0; - if (!InternetCombineUrlW(orig_url, lpszUrl, NULL, &url_length, ICU_ENCODE_SPACES_ONLY) && - (GetLastError() != ERROR_INSUFFICIENT_BUFFER)) - { - HeapFree(GetProcessHeap(), 0, orig_url); - return FALSE; - } - combined_url = HeapAlloc(GetProcessHeap(), 0, url_length * sizeof(WCHAR)); - - if (!InternetCombineUrlW(orig_url, lpszUrl, combined_url, &url_length, ICU_ENCODE_SPACES_ONLY)) - { - HeapFree(GetProcessHeap(), 0, orig_url); - HeapFree(GetProcessHeap(), 0, combined_url); - return FALSE; - } - HeapFree(GetProcessHeap(), 0, orig_url); userName[0] = 0; hostName[0] = 0; @@ -3349,13 +3349,13 @@ BOOL WINAPI HTTP_HttpSendRequestW(LPWININETHTTPREQW lpwhr, LPCWSTR lpszHeaders, INTERNET_STATUS_REDIRECT, szNewLocation, dwBufferSize); bSuccess = HTTP_HandleRedirect(lpwhr, szNewLocation); - if (bSuccess) - { - HeapFree(GetProcessHeap(), 0, requestString); - loop_next = TRUE; - } + if (bSuccess) + { + HeapFree(GetProcessHeap(), 0, requestString); + loop_next = TRUE; } } + } if (!(lpwhr->hdr.dwFlags & INTERNET_FLAG_NO_AUTH) && bSuccess) { WCHAR szAuthValue[2048]; @@ -3429,12 +3429,12 @@ lend: /* TODO: send notification for P3P header */ - iar.dwResult = (DWORD_PTR)lpwhr->hdr.hInternet; + iar.dwResult = (DWORD_PTR)lpwhr->hdr.hInternet; iar.dwError = bSuccess ? ERROR_SUCCESS : INTERNET_GetLastError(); - INTERNET_SendCallback(&lpwhr->hdr, lpwhr->hdr.dwContext, - INTERNET_STATUS_REQUEST_COMPLETE, &iar, - sizeof(INTERNET_ASYNC_RESULT)); + INTERNET_SendCallback(&lpwhr->hdr, lpwhr->hdr.dwContext, + INTERNET_STATUS_REQUEST_COMPLETE, &iar, + sizeof(INTERNET_ASYNC_RESULT)); TRACE("<--\n"); if (bSuccess) INTERNET_SetLastError(ERROR_SUCCESS); @@ -3745,20 +3745,20 @@ static INT HTTP_GetResponseHeaders(LPWININETHTTPREQW lpwhr, BOOL clear) goto lend; MultiByteToWideChar( CP_ACP, 0, bufferA, buflen, buffer, MAX_REPLY_LEN ); - /* split the version from the status code */ - status_code = strchrW( buffer, ' ' ); - if( !status_code ) - goto lend; - *status_code++=0; + /* split the version from the status code */ + status_code = strchrW( buffer, ' ' ); + if( !status_code ) + goto lend; + *status_code++=0; - /* split the status code from the status text */ - status_text = strchrW( status_code, ' ' ); - if( !status_text ) - goto lend; - *status_text++=0; + /* split the status code from the status text */ + status_text = strchrW( status_code, ' ' ); + if( !status_text ) + goto lend; + *status_text++=0; - TRACE("version [%s] status code [%s] status text [%s]\n", - debugstr_w(buffer), debugstr_w(status_code), debugstr_w(status_text) ); + TRACE("version [%s] status code [%s] status text [%s]\n", + debugstr_w(buffer), debugstr_w(status_code), debugstr_w(status_text) ); } while (!strcmpW(status_code, szHundred)); /* ignore "100 Continue" responses */ @@ -3799,26 +3799,26 @@ static INT HTTP_GetResponseHeaders(LPWININETHTTPREQW lpwhr, BOOL clear) TRACE("got line %s, now interpreting\n", debugstr_a(bufferA)); MultiByteToWideChar( CP_ACP, 0, bufferA, buflen, buffer, MAX_REPLY_LEN ); - while (cchRawHeaders + buflen + strlenW(szCrLf) > cchMaxRawHeaders) + while (cchRawHeaders + buflen + strlenW(szCrLf) > cchMaxRawHeaders) { - cchMaxRawHeaders *= 2; + cchMaxRawHeaders *= 2; lpszRawHeaders = HeapReAlloc(GetProcessHeap(), 0, lpszRawHeaders, (cchMaxRawHeaders+1)*sizeof(WCHAR)); } - memcpy(lpszRawHeaders+cchRawHeaders, buffer, (buflen-1)*sizeof(WCHAR)); - cchRawHeaders += (buflen-1); - memcpy(lpszRawHeaders+cchRawHeaders, szCrLf, sizeof(szCrLf)); - cchRawHeaders += sizeof(szCrLf)/sizeof(szCrLf[0])-1; - lpszRawHeaders[cchRawHeaders] = '\0'; + memcpy(lpszRawHeaders+cchRawHeaders, buffer, (buflen-1)*sizeof(WCHAR)); + cchRawHeaders += (buflen-1); + memcpy(lpszRawHeaders+cchRawHeaders, szCrLf, sizeof(szCrLf)); + cchRawHeaders += sizeof(szCrLf)/sizeof(szCrLf[0])-1; + lpszRawHeaders[cchRawHeaders] = '\0'; pFieldAndValue = HTTP_InterpretHttpHeader(buffer); if (!pFieldAndValue) break; - HTTP_ProcessHeader(lpwhr, pFieldAndValue[0], pFieldAndValue[1], - HTTP_ADDREQ_FLAG_ADD ); + HTTP_ProcessHeader(lpwhr, pFieldAndValue[0], pFieldAndValue[1], + HTTP_ADDREQ_FLAG_ADD ); - HTTP_FreeTokens(pFieldAndValue); - } + HTTP_FreeTokens(pFieldAndValue); + } else { cbreaks++; diff --git a/reactos/dll/win32/wininet/internet.c b/reactos/dll/win32/wininet/internet.c index 05def9bb9b0..bad795ddbd4 100644 --- a/reactos/dll/win32/wininet/internet.c +++ b/reactos/dll/win32/wininet/internet.c @@ -460,7 +460,7 @@ static void dump_INTERNET_FLAGS(DWORD dwFlags) }; #undef FE int i; - + for (i = 0; i < (sizeof(flag) / sizeof(flag[0])); i++) { if (flag[i].val & dwFlags) { TRACE(" %s", flag[i].name); @@ -520,13 +520,13 @@ static DWORD APPINFO_QueryOption(WININETHANDLEHEADER *hdr, DWORD option, void *b if(!buffer || bufsize < *size) return ERROR_INSUFFICIENT_BUFFER; - strcpyW(buffer, ai->lpszAgent); + strcpyW(buffer, ai->lpszAgent); }else { - *size = WideCharToMultiByte(CP_ACP, 0, ai->lpszAgent, -1, NULL, 0, NULL, NULL); + *size = WideCharToMultiByte(CP_ACP, 0, ai->lpszAgent, -1, NULL, 0, NULL, NULL); if(!buffer || bufsize < *size) return ERROR_INSUFFICIENT_BUFFER; - WideCharToMultiByte(CP_ACP, 0, ai->lpszAgent, -1, buffer, *size, NULL, NULL); + WideCharToMultiByte(CP_ACP, 0, ai->lpszAgent, -1, buffer, *size, NULL, NULL); } return ERROR_SUCCESS; @@ -543,7 +543,7 @@ static DWORD APPINFO_QueryOption(WININETHANDLEHEADER *hdr, DWORD option, void *b if (ai->lpszProxyBypass) proxyBypassBytesRequired = (lstrlenW(ai->lpszProxyBypass) + 1) * sizeof(WCHAR); if (*size < sizeof(INTERNET_PROXY_INFOW) + proxyBytesRequired + proxyBypassBytesRequired) - return ERROR_INSUFFICIENT_BUFFER; + return ERROR_INSUFFICIENT_BUFFER; proxy = (LPWSTR)((LPBYTE)buffer + sizeof(INTERNET_PROXY_INFOW)); proxy_bypass = (LPWSTR)((LPBYTE)buffer + sizeof(INTERNET_PROXY_INFOW) + proxyBytesRequired); @@ -1814,7 +1814,7 @@ INTERNET_STATUS_CALLBACK WINAPI InternetSetStatusCallbackA( LPWININETHANDLEHEADER lpwh; TRACE("0x%08x\n", (ULONG)hInternet); - + if (!(lpwh = WININET_GetObject(hInternet))) return INTERNET_INVALID_STATUS_CALLBACK; @@ -2016,8 +2016,8 @@ BOOL WINAPI InternetReadFileExW(HINTERNET hFile, LPINTERNET_BUFFERSW lpBuffer, ERR("(%p, %p, 0x%x, 0x%lx): not implemented in native\n", hFile, lpBuffer, dwFlags, dwContext); INTERNET_SetLastError(ERROR_CALL_NOT_IMPLEMENTED); - return FALSE; - } + return FALSE; +} DWORD INET_QueryOption(DWORD option, void *buffer, DWORD *size, BOOL unicode) { @@ -2047,7 +2047,7 @@ DWORD INET_QueryOption(DWORD option, void *buffer, DWORD *size, BOOL unicode) return ERROR_SUCCESS; case INTERNET_OPTION_CONNECTED_STATE: - FIXME("INTERNET_OPTION_CONNECTED_STATE: semi-stub\n"); + FIXME("INTERNET_OPTION_CONNECTED_STATE: semi-stub\n"); if (*size < sizeof(ULONG)) return ERROR_INSUFFICIENT_BUFFER; @@ -2259,7 +2259,7 @@ BOOL WINAPI InternetSetOptionW(HINTERNET hInternet, DWORD dwOption, INTERNET_STATUS_CALLBACK callback = *(INTERNET_STATUS_CALLBACK *)lpBuffer; ret = (set_status_callback(lpwhh, callback, TRUE) != INTERNET_INVALID_STATUS_CALLBACK); break; - } + } case INTERNET_OPTION_HTTP_VERSION: { HTTP_VERSION_INFO* pVersion=(HTTP_VERSION_INFO*)lpBuffer; @@ -2737,11 +2737,11 @@ BOOL WINAPI InternetCheckConnectionA(LPCSTR lpszUrl, DWORD dwFlags, DWORD dwRese len = MultiByteToWideChar(CP_ACP, 0, lpszUrl, -1, NULL, 0); if (!(szUrl = HeapAlloc(GetProcessHeap(), 0, len*sizeof(WCHAR)))) - return FALSE; + return FALSE; MultiByteToWideChar(CP_ACP, 0, lpszUrl, -1, szUrl, len); rc = InternetCheckConnectionW(szUrl, dwFlags, dwReserved); HeapFree(GetProcessHeap(), 0, szUrl); - + return rc; } @@ -2905,7 +2905,7 @@ HINTERNET WINAPI InternetOpenUrlW(HINTERNET hInternet, LPCWSTR lpszUrl, workRequest.asyncproc = AsyncInternetOpenUrlProc; workRequest.hdr = WININET_AddRef( &hIC->hdr ); - req = &workRequest.u.InternetOpenUrlW; + req = &workRequest.u.InternetOpenUrlW; req->lpszUrl = WININET_strdupW(lpszUrl); if (lpszHeaders) req->lpszHeaders = WININET_strdupW(lpszHeaders); diff --git a/reactos/dll/win32/wininet/internet.h b/reactos/dll/win32/wininet/internet.h index effe483178e..0dcf5a22ce6 100644 --- a/reactos/dll/win32/wininet/internet.h +++ b/reactos/dll/win32/wininet/internet.h @@ -78,8 +78,8 @@ static inline LPWSTR WININET_strdup_AtoW( LPCSTR str ) { int len = MultiByteToWideChar( CP_ACP, 0, str, -1, NULL, 0); LPWSTR ret = HeapAlloc( GetProcessHeap(), 0, len * sizeof(WCHAR) ); - if(ret) - MultiByteToWideChar(CP_ACP, 0, str, -1, ret, len); + if (ret) + MultiByteToWideChar( CP_ACP, 0, str, -1, ret, len); return ret; } @@ -87,7 +87,7 @@ static inline LPSTR WININET_strdup_WtoA( LPCWSTR str ) { int len = WideCharToMultiByte( CP_ACP, 0, str, -1, NULL, 0, NULL, NULL); LPSTR ret = HeapAlloc( GetProcessHeap(), 0, len ); - if(ret) + if (ret) WideCharToMultiByte( CP_ACP, 0, str, -1, ret, len, NULL, NULL); return ret; } @@ -339,7 +339,7 @@ typedef struct WORKREQ struct WORKREQ_FTPFINDNEXTW FtpFindNextW; struct WORKREQ_HTTPSENDREQUESTW HttpSendRequestW; struct WORKREQ_SENDCALLBACK SendCallback; - struct WORKREQ_INTERNETOPENURLW InternetOpenUrlW; + struct WORKREQ_INTERNETOPENURLW InternetOpenUrlW; struct WORKREQ_INTERNETREADFILEEXA InternetReadFileExA; } u; diff --git a/reactos/dll/win32/wininet/netconnection.c b/reactos/dll/win32/wininet/netconnection.c index 9d331fdfe2a..5d8b4d75534 100644 --- a/reactos/dll/win32/wininet/netconnection.c +++ b/reactos/dll/win32/wininet/netconnection.c @@ -621,7 +621,7 @@ BOOL NETCON_query_data_available(WININET_NETCONNECTION *connection, DWORD *avail } #endif return TRUE; - } +} /****************************************************************************** * NETCON_getNextLine @@ -663,8 +663,8 @@ BOOL NETCON_getNextLine(WININET_NETCONNECTION *connection, LPSTR lpszBuffer, LPD if (lpszBuffer[nRecv] != '\r') nRecv++; } - else - { + else + { INTERNET_SetLastError(ERROR_INTERNET_TIMEOUT); goto lend; } @@ -700,7 +700,7 @@ BOOL NETCON_getNextLine(WININET_NETCONNECTION *connection, LPSTR lpszBuffer, LPD { INTERNET_SetLastError(ERROR_CONNECTION_ABORTED); success = FALSE; - } + } if (lpszBuffer[nRecv] == '\n') { @@ -717,8 +717,8 @@ BOOL NETCON_getNextLine(WININET_NETCONNECTION *connection, LPSTR lpszBuffer, LPD lpszBuffer[nRecv++] = '\0'; *dwBuffer = nRecv; TRACE("_SSL:%u %s\n", nRecv, lpszBuffer); - return TRUE; -} + return TRUE; + } return FALSE; #else return FALSE; diff --git a/reactos/dll/win32/wininet/urlcache.c b/reactos/dll/win32/wininet/urlcache.c index d7bc27bc975..c839419f136 100644 --- a/reactos/dll/win32/wininet/urlcache.c +++ b/reactos/dll/win32/wininet/urlcache.c @@ -617,8 +617,8 @@ static DWORD URLCacheContainers_FindContainerA(LPCSTR lpszUrl, URLCACHECONTAINER MultiByteToWideChar(CP_ACP, 0, lpszUrl, -1, lpwszUrl, url_len); ret = URLCacheContainers_FindContainerW(lpwszUrl, ppContainer); HeapFree(GetProcessHeap(), 0, lpwszUrl); - return ret; -} + return ret; + } return GetLastError(); } @@ -2462,9 +2462,9 @@ static BOOL CommitUrlCacheEntryInternal( lpszFileExtensionA = HeapAlloc(GetProcessHeap(), 0, len * sizeof(char)); if (!lpszFileExtensionA) { - error = GetLastError(); - goto cleanup; - } + error = GetLastError(); + goto cleanup; + } WideCharToMultiByte(CP_ACP, 0, lpszFileExtension, -1, lpszFileExtensionA, len, NULL, NULL); } @@ -3626,8 +3626,8 @@ BOOL WINAPI IsUrlCacheEntryExpiredW( LPCWSTR url, DWORD dwFlags, FILETIME* pftLa BOOL WINAPI GetDiskInfoA(PCSTR p0, PDWORD p1, PDWORDLONG p2, PDWORDLONG p3) { FIXME("(%p, %p, %p, %p)\n", p0, p1, p2, p3); - return FALSE; - } + return FALSE; +} /*********************************************************************** * RegisterUrlCacheNotification (WININET.@) From 7861b97392161b1c8d6ab578da0d0d65980acd00 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Tue, 15 Dec 2009 17:17:03 +0000 Subject: [PATCH 226/286] Copy crypt32 from trunk, fixing more merge fail. svn path=/branches/ros-amd64-bringup/; revision=44605 --- reactos/dll/win32/crypt32/base64.c | 18 +- reactos/dll/win32/crypt32/cert.c | 94 ++- reactos/dll/win32/crypt32/chain.c | 789 +++++++++++++++++++------ reactos/dll/win32/crypt32/context.c | 18 +- reactos/dll/win32/crypt32/crl.c | 237 +++++++- reactos/dll/win32/crypt32/crypt32.spec | 2 +- reactos/dll/win32/crypt32/ctl.c | 2 +- reactos/dll/win32/crypt32/decode.c | 57 +- reactos/dll/win32/crypt32/encode.c | 43 +- reactos/dll/win32/crypt32/oid.c | 8 +- reactos/dll/win32/crypt32/rootstore.c | 32 + reactos/dll/win32/crypt32/serialize.c | 4 +- 12 files changed, 1009 insertions(+), 295 deletions(-) diff --git a/reactos/dll/win32/crypt32/base64.c b/reactos/dll/win32/crypt32/base64.c index 33111f27c4d..4a6504a488e 100644 --- a/reactos/dll/win32/crypt32/base64.c +++ b/reactos/dll/win32/crypt32/base64.c @@ -100,7 +100,7 @@ static LONG encodeBase64A(const BYTE *in_buf, int in_len, LPCSTR sep, TRACE("bytes is %d, pad bytes is %d\n", bytes, pad_bytes); needed = bytes + pad_bytes + 1; if (sep) - needed += (needed / 64 + 1) * strlen(sep); + needed += (needed / 64 + 1) * strlen(sep); if (needed > *out_len) { @@ -164,7 +164,7 @@ static LONG encodeBase64A(const BYTE *in_buf, int in_len, LPCSTR sep, break; } if (sep) - strcpy(ptr, sep); + strcpy(ptr, sep); return ERROR_SUCCESS; } @@ -205,7 +205,7 @@ static BOOL BinaryToBase64A(const BYTE *pbBinary, charsNeeded = 0; encodeBase64A(pbBinary, cbBinary, sep, NULL, &charsNeeded); if (sep) - charsNeeded += strlen(sep); + charsNeeded += strlen(sep); if (header) charsNeeded += strlen(header) + strlen(sep); if (trailer) @@ -221,9 +221,9 @@ static BOOL BinaryToBase64A(const BYTE *pbBinary, ptr += strlen(ptr); if (sep) { - strcpy(ptr, sep); - ptr += strlen(sep); - } + strcpy(ptr, sep); + ptr += strlen(sep); + } } encodeBase64A(pbBinary, cbBinary, sep, ptr, &size); ptr += size - 1; @@ -233,9 +233,9 @@ static BOOL BinaryToBase64A(const BYTE *pbBinary, ptr += strlen(ptr); if (sep) { - strcpy(ptr, sep); - ptr += strlen(sep); - } + strcpy(ptr, sep); + ptr += strlen(sep); + } } *pcchString = charsNeeded - 1; } diff --git a/reactos/dll/win32/crypt32/cert.c b/reactos/dll/win32/crypt32/cert.c index 327d420974c..a24757019cb 100644 --- a/reactos/dll/win32/crypt32/cert.c +++ b/reactos/dll/win32/crypt32/cert.c @@ -1499,7 +1499,7 @@ static BOOL compare_cert_by_name_str(PCCERT_CONTEXT pCertContext, if (strstrW(str, pvPara)) ret = TRUE; CryptMemFree(str); -} + } } return ret; } @@ -1591,8 +1591,8 @@ PCCERT_CONTEXT WINAPI CertFindCertificateInStore(HCERTSTORE hCertStore, compare, dwType, dwFlags, pvPara); else ret = NULL; - if (!ret) - SetLastError(CRYPT_E_NOT_FOUND); + if (!ret) + SetLastError(CRYPT_E_NOT_FOUND); TRACE("returning %p\n", ret); return ret; } @@ -1832,6 +1832,92 @@ PCERT_RDN_ATTR WINAPI CertFindRDNAttr(LPCSTR pszObjId, PCERT_NAME_INFO pName) return ret; } +static BOOL find_matching_rdn_attr(DWORD dwFlags, const CERT_NAME_INFO *name, + const CERT_RDN_ATTR *attr) +{ + DWORD i, j; + BOOL match = FALSE; + + for (i = 0; !match && i < name->cRDN; i++) + { + for (j = 0; j < name->rgRDN[i].cRDNAttr; j++) + { + if (!strcmp(name->rgRDN[i].rgRDNAttr[j].pszObjId, + attr->pszObjId) && + name->rgRDN[i].rgRDNAttr[j].dwValueType == + attr->dwValueType) + { + if (dwFlags & CERT_UNICODE_IS_RDN_ATTRS_FLAG) + { + LPCWSTR nameStr = + (LPCWSTR)name->rgRDN[i].rgRDNAttr[j].Value.pbData; + LPCWSTR attrStr = (LPCWSTR)attr->Value.pbData; + + if (attr->Value.cbData != + name->rgRDN[i].rgRDNAttr[j].Value.cbData) + match = FALSE; + else if (dwFlags & CERT_CASE_INSENSITIVE_IS_RDN_ATTRS_FLAG) + match = !strncmpiW(nameStr, attrStr, + attr->Value.cbData / sizeof(WCHAR)); + else + match = !strncmpW(nameStr, attrStr, + attr->Value.cbData / sizeof(WCHAR)); + TRACE("%s : %s => %d\n", + debugstr_wn(nameStr, attr->Value.cbData / sizeof(WCHAR)), + debugstr_wn(attrStr, attr->Value.cbData / sizeof(WCHAR)), + match); + } + else + { + LPCSTR nameStr = + (LPCSTR)name->rgRDN[i].rgRDNAttr[j].Value.pbData; + LPCSTR attrStr = (LPCSTR)attr->Value.pbData; + + if (attr->Value.cbData != + name->rgRDN[i].rgRDNAttr[j].Value.cbData) + match = FALSE; + else if (dwFlags & CERT_CASE_INSENSITIVE_IS_RDN_ATTRS_FLAG) + match = !strncasecmp(nameStr, attrStr, + attr->Value.cbData); + else + match = !strncmp(nameStr, attrStr, attr->Value.cbData); + TRACE("%s : %s => %d\n", + debugstr_an(nameStr, attr->Value.cbData), + debugstr_an(attrStr, attr->Value.cbData), match); + } + } + } + } + return match; +} + +BOOL WINAPI CertIsRDNAttrsInCertificateName(DWORD dwCertEncodingType, + DWORD dwFlags, PCERT_NAME_BLOB pCertName, PCERT_RDN pRDN) +{ + CERT_NAME_INFO *name; + LPCSTR type; + DWORD size; + BOOL ret; + + TRACE("(%08x, %08x, %p, %p)\n", dwCertEncodingType, dwFlags, pCertName, + pRDN); + + type = dwFlags & CERT_UNICODE_IS_RDN_ATTRS_FLAG ? X509_UNICODE_NAME : + X509_NAME; + if ((ret = CryptDecodeObjectEx(dwCertEncodingType, type, pCertName->pbData, + pCertName->cbData, CRYPT_DECODE_ALLOC_FLAG, NULL, &name, &size))) + { + DWORD i; + + for (i = 0; ret && i < pRDN->cRDNAttr; i++) + ret = find_matching_rdn_attr(dwFlags, name, &pRDN->rgRDNAttr[i]); + if (!ret) + SetLastError(CRYPT_E_NO_MATCH); + LocalFree(name); + } + return ret; +} + LONG WINAPI CertVerifyTimeValidity(LPFILETIME pTimeToVerify, PCERT_INFO pCertInfo) { @@ -2894,7 +2980,7 @@ static void CRYPT_MakeCertInfo(PCERT_INFO info, const CRYPT_DATA_BLOB *pSerialNu assert(pubKey); if (pExtensions && pExtensions->cExtension) - info->dwVersion = CERT_V3; + info->dwVersion = CERT_V3; else info->dwVersion = CERT_V1; info->SerialNumber.cbData = pSerialNumber->cbData; diff --git a/reactos/dll/win32/crypt32/chain.c b/reactos/dll/win32/crypt32/chain.c index 3d974c49093..5cc46b763bc 100644 --- a/reactos/dll/win32/crypt32/chain.c +++ b/reactos/dll/win32/crypt32/chain.c @@ -101,10 +101,10 @@ static BOOL CRYPT_CheckRestrictedRoot(HCERTSTORE store) if (cert) { if (!(check = CRYPT_FindCertInStore(rootStore, cert))) - ret = FALSE; - else - CertFreeCertificateContext(check); - } + ret = FALSE; + else + CertFreeCertificateContext(check); + } } while (ret && cert); if (cert) CertFreeCertificateContext(cert); @@ -506,6 +506,41 @@ static BOOL CRYPT_CheckBasicConstraintsForCA(PCertificateChainEngine engine, return validBasicConstraints; } +static BOOL domain_name_matches(LPCWSTR constraint, LPCWSTR name) +{ + BOOL match; + + /* RFC 5280, section 4.2.1.10: + * "For URIs, the constraint applies to the host part of the name... + * When the constraint begins with a period, it MAY be expanded with one + * or more labels. That is, the constraint ".example.com" is satisfied by + * both host.example.com and my.host.example.com. However, the constraint + * ".example.com" is not satisfied by "example.com". When the constraint + * does not begin with a period, it specifies a host." + * and for email addresses, + * "To indicate all Internet mail addresses on a particular host, the + * constraint is specified as the host name. For example, the constraint + * "example.com" is satisfied by any mail address at the host + * "example.com". To specify any address within a domain, the constraint + * is specified with a leading period (as with URIs)." + */ + if (constraint[0] == '.') + { + /* Must be strictly greater than, a name can't begin with '.' */ + if (lstrlenW(name) > lstrlenW(constraint)) + match = !lstrcmpiW(name + lstrlenW(name) - lstrlenW(constraint), + constraint); + else + { + /* name is too short, no match */ + match = FALSE; + } + } + else + match = !lstrcmpiW(name, constraint); + return match; +} + static BOOL url_matches(LPCWSTR constraint, LPCWSTR name, DWORD *trustErrorStatus) { @@ -517,14 +552,58 @@ static BOOL url_matches(LPCWSTR constraint, LPCWSTR name, *trustErrorStatus |= CERT_TRUST_INVALID_NAME_CONSTRAINTS; else if (!name) ; /* no match */ - else if (constraint[0] == '.') - { - if (lstrlenW(name) > lstrlenW(constraint)) - match = !lstrcmpiW(name + lstrlenW(name) - lstrlenW(constraint), - constraint); - } else - match = !lstrcmpiW(constraint, name); + { + LPCWSTR colon, authority_end, at, hostname = NULL; + /* The maximum length for a hostname is 254 in the DNS, see RFC 1034 */ + WCHAR hostname_buf[255]; + + /* RFC 5280: only the hostname portion of the URL is compared. From + * section 4.2.1.10: + * "For URIs, the constraint applies to the host part of the name. + * The constraint MUST be specified as a fully qualified domain name + * and MAY specify a host or a domain." + * The format for URIs is in RFC 2396. + * + * First, remove any scheme that's present. */ + colon = strchrW(name, ':'); + if (colon && *(colon + 1) == '/' && *(colon + 2) == '/') + name = colon + 3; + /* Next, find the end of the authority component. (The authority is + * generally just the hostname, but it may contain a username or a port. + * Those are removed next.) + */ + authority_end = strchrW(name, '/'); + if (!authority_end) + authority_end = strchrW(name, '?'); + if (!authority_end) + authority_end = name + strlenW(name); + /* Remove any port number from the authority */ + for (colon = authority_end; colon >= name && *colon != ':'; colon--) + ; + if (*colon == ':') + authority_end = colon; + /* Remove any username from the authority */ + if ((at = strchrW(name, '@'))) + name = at; + /* Ignore any path or query portion of the URL. */ + if (*authority_end) + { + if (authority_end - name < sizeof(hostname_buf) / + sizeof(hostname_buf[0])) + { + memcpy(hostname_buf, name, + (authority_end - name) * sizeof(WCHAR)); + hostname_buf[authority_end - name] = 0; + hostname = hostname_buf; + } + /* else: Hostname is too long, not a match */ + } + else + hostname = name; + if (hostname) + match = domain_name_matches(constraint, hostname); + } return match; } @@ -545,7 +624,7 @@ static BOOL rfc822_name_matches(LPCWSTR constraint, LPCWSTR name, else { if ((at = strchrW(name, '@'))) - match = url_matches(constraint, at + 1, trustErrorStatus); + match = domain_name_matches(constraint, at + 1); else match = !lstrcmpiW(constraint, name); } @@ -563,9 +642,35 @@ static BOOL dns_name_matches(LPCWSTR constraint, LPCWSTR name, *trustErrorStatus |= CERT_TRUST_INVALID_NAME_CONSTRAINTS; else if (!name) ; /* no match */ - else if (lstrlenW(name) >= lstrlenW(constraint)) + /* RFC 5280, section 4.2.1.10: + * "DNS name restrictions are expressed as host.example.com. Any DNS name + * that can be constructed by simply adding zero or more labels to the + * left-hand side of the name satisfies the name constraint. For example, + * www.host.example.com would satisfy the constraint but host1.example.com + * would not." + */ + else if (lstrlenW(name) == lstrlenW(constraint)) + match = !lstrcmpiW(name, constraint); + else if (lstrlenW(name) > lstrlenW(constraint)) + { match = !lstrcmpiW(name + lstrlenW(name) - lstrlenW(constraint), constraint); + if (match) + { + BOOL dot = FALSE; + LPCWSTR ptr; + + /* This only matches if name is a subdomain of constraint, i.e. + * there's a '.' between the beginning of the name and the + * matching portion of the name. + */ + for (ptr = name + lstrlenW(name) - lstrlenW(constraint); + !dot && ptr >= name; ptr--) + if (*ptr == '.') + dot = TRUE; + match = dot; + } + } /* else: name is too short, no match */ return match; @@ -615,46 +720,95 @@ static BOOL ip_address_matches(const CRYPT_DATA_BLOB *constraint, return match; } -static void CRYPT_FindMatchingNameEntry(const CERT_ALT_NAME_ENTRY *constraint, - const CERT_ALT_NAME_INFO *subjectName, DWORD *trustErrorStatus, - DWORD errorIfFound, DWORD errorIfNotFound) +static BOOL directory_name_matches(const CERT_NAME_BLOB *constraint, + const CERT_NAME_BLOB *name) +{ + CERT_NAME_INFO *constraintName; + DWORD size; + BOOL match = FALSE; + + if (CryptDecodeObjectEx(X509_ASN_ENCODING, X509_NAME, constraint->pbData, + constraint->cbData, CRYPT_DECODE_ALLOC_FLAG, NULL, &constraintName, &size)) + { + DWORD i; + + match = TRUE; + for (i = 0; match && i < constraintName->cRDN; i++) + match = CertIsRDNAttrsInCertificateName(X509_ASN_ENCODING, + CERT_CASE_INSENSITIVE_IS_RDN_ATTRS_FLAG, + (CERT_NAME_BLOB *)name, &constraintName->rgRDN[i]); + LocalFree(constraintName); + } + return match; +} + +static BOOL alt_name_matches(const CERT_ALT_NAME_ENTRY *name, + const CERT_ALT_NAME_ENTRY *constraint, DWORD *trustErrorStatus, BOOL *present) +{ + BOOL match = FALSE; + + if (name->dwAltNameChoice == constraint->dwAltNameChoice) + { + if (present) + *present = TRUE; + switch (constraint->dwAltNameChoice) + { + case CERT_ALT_NAME_RFC822_NAME: + match = rfc822_name_matches(constraint->u.pwszURL, + name->u.pwszURL, trustErrorStatus); + break; + case CERT_ALT_NAME_DNS_NAME: + match = dns_name_matches(constraint->u.pwszURL, + name->u.pwszURL, trustErrorStatus); + break; + case CERT_ALT_NAME_URL: + match = url_matches(constraint->u.pwszURL, + name->u.pwszURL, trustErrorStatus); + break; + case CERT_ALT_NAME_IP_ADDRESS: + match = ip_address_matches(&constraint->u.IPAddress, + &name->u.IPAddress, trustErrorStatus); + break; + case CERT_ALT_NAME_DIRECTORY_NAME: + match = directory_name_matches(&constraint->u.DirectoryName, + &name->u.DirectoryName); + break; + default: + ERR("name choice %d unsupported in this context\n", + constraint->dwAltNameChoice); + *trustErrorStatus |= + CERT_TRUST_HAS_NOT_SUPPORTED_NAME_CONSTRAINT; + } + } + else if (present) + *present = FALSE; + return match; +} + +static BOOL alt_name_matches_excluded_name(const CERT_ALT_NAME_ENTRY *name, + const CERT_NAME_CONSTRAINTS_INFO *nameConstraints, DWORD *trustErrorStatus) { DWORD i; BOOL match = FALSE; - for (i = 0; i < subjectName->cAltEntry; i++) - { - if (subjectName->rgAltEntry[i].dwAltNameChoice == - constraint->dwAltNameChoice) - { - switch (constraint->dwAltNameChoice) - { - case CERT_ALT_NAME_RFC822_NAME: - match = rfc822_name_matches(constraint->u.pwszURL, - subjectName->rgAltEntry[i].u.pwszURL, trustErrorStatus); - break; - case CERT_ALT_NAME_DNS_NAME: - match = dns_name_matches(constraint->u.pwszURL, - subjectName->rgAltEntry[i].u.pwszURL, trustErrorStatus); - break; - case CERT_ALT_NAME_URL: - match = url_matches(constraint->u.pwszURL, - subjectName->rgAltEntry[i].u.pwszURL, trustErrorStatus); - break; - case CERT_ALT_NAME_IP_ADDRESS: - match = ip_address_matches(&constraint->u.IPAddress, - &subjectName->rgAltEntry[i].u.IPAddress, trustErrorStatus); - break; - case CERT_ALT_NAME_DIRECTORY_NAME: - default: - ERR("name choice %d unsupported in this context\n", - constraint->dwAltNameChoice); - *trustErrorStatus |= - CERT_TRUST_HAS_NOT_SUPPORTED_NAME_CONSTRAINT; - } - } - } - *trustErrorStatus |= match ? errorIfFound : errorIfNotFound; + for (i = 0; !match && i < nameConstraints->cExcludedSubtree; i++) + match = alt_name_matches(name, + &nameConstraints->rgExcludedSubtree[i].Base, trustErrorStatus, NULL); + return match; +} + +static BOOL alt_name_matches_permitted_name(const CERT_ALT_NAME_ENTRY *name, + const CERT_NAME_CONSTRAINTS_INFO *nameConstraints, DWORD *trustErrorStatus, + BOOL *present) +{ + DWORD i; + BOOL match = FALSE; + + for (i = 0; !match && i < nameConstraints->cPermittedSubtree; i++) + match = alt_name_matches(name, + &nameConstraints->rgPermittedSubtree[i].Base, trustErrorStatus, + present); + return match; } static inline PCERT_EXTENSION get_subject_alt_name_ext(const CERT_INFO *cert) @@ -669,55 +823,251 @@ static inline PCERT_EXTENSION get_subject_alt_name_ext(const CERT_INFO *cert) return ext; } +static void compare_alt_name_with_constraints(const CERT_EXTENSION *altNameExt, + const CERT_NAME_CONSTRAINTS_INFO *nameConstraints, DWORD *trustErrorStatus) +{ + CERT_ALT_NAME_INFO *subjectAltName; + DWORD size; + + if (CryptDecodeObjectEx(X509_ASN_ENCODING, X509_ALTERNATE_NAME, + altNameExt->Value.pbData, altNameExt->Value.cbData, + CRYPT_DECODE_ALLOC_FLAG | CRYPT_DECODE_NOCOPY_FLAG, NULL, + &subjectAltName, &size)) + { + DWORD i; + + for (i = 0; i < subjectAltName->cAltEntry; i++) + { + BOOL nameFormPresent; + + /* A name constraint only applies if the name form is present. + * From RFC 5280, section 4.2.1.10: + * "Restrictions apply only when the specified name form is + * present. If no name of the type is in the certificate, + * the certificate is acceptable." + */ + if (alt_name_matches_excluded_name( + &subjectAltName->rgAltEntry[i], nameConstraints, + trustErrorStatus)) + { + TRACE_(chain)("subject alternate name form %d excluded\n", + subjectAltName->rgAltEntry[i].dwAltNameChoice); + *trustErrorStatus |= + CERT_TRUST_HAS_EXCLUDED_NAME_CONSTRAINT; + } + nameFormPresent = FALSE; + if (!alt_name_matches_permitted_name( + &subjectAltName->rgAltEntry[i], nameConstraints, + trustErrorStatus, &nameFormPresent) && nameFormPresent) + { + TRACE_(chain)("subject alternate name form %d not permitted\n", + subjectAltName->rgAltEntry[i].dwAltNameChoice); + *trustErrorStatus |= + CERT_TRUST_HAS_NOT_PERMITTED_NAME_CONSTRAINT; + } + } + LocalFree(subjectAltName); + } + else + *trustErrorStatus |= + CERT_TRUST_INVALID_EXTENSION | CERT_TRUST_INVALID_NAME_CONSTRAINTS; +} + +static BOOL rfc822_attr_matches_excluded_name(const CERT_RDN_ATTR *attr, + const CERT_NAME_CONSTRAINTS_INFO *nameConstraints, DWORD *trustErrorStatus) +{ + DWORD i; + BOOL match = FALSE; + + for (i = 0; !match && i < nameConstraints->cExcludedSubtree; i++) + { + const CERT_ALT_NAME_ENTRY *constraint = + &nameConstraints->rgExcludedSubtree[i].Base; + + if (constraint->dwAltNameChoice == CERT_ALT_NAME_RFC822_NAME) + match = rfc822_name_matches(constraint->u.pwszRfc822Name, + (LPCWSTR)attr->Value.pbData, trustErrorStatus); + } + return match; +} + +static BOOL rfc822_attr_matches_permitted_name(const CERT_RDN_ATTR *attr, + const CERT_NAME_CONSTRAINTS_INFO *nameConstraints, DWORD *trustErrorStatus, + BOOL *present) +{ + DWORD i; + BOOL match = FALSE; + + for (i = 0; !match && i < nameConstraints->cPermittedSubtree; i++) + { + const CERT_ALT_NAME_ENTRY *constraint = + &nameConstraints->rgPermittedSubtree[i].Base; + + if (constraint->dwAltNameChoice == CERT_ALT_NAME_RFC822_NAME) + { + *present = TRUE; + match = rfc822_name_matches(constraint->u.pwszRfc822Name, + (LPCWSTR)attr->Value.pbData, trustErrorStatus); + } + } + return match; +} + +static void compare_subject_with_email_constraints( + const CERT_NAME_BLOB *subjectName, + const CERT_NAME_CONSTRAINTS_INFO *nameConstraints, DWORD *trustErrorStatus) +{ + CERT_NAME_INFO *name; + DWORD size; + + if (CryptDecodeObjectEx(X509_ASN_ENCODING, X509_UNICODE_NAME, + subjectName->pbData, subjectName->cbData, + CRYPT_DECODE_ALLOC_FLAG | CRYPT_DECODE_NOCOPY_FLAG, NULL, &name, &size)) + { + DWORD i, j; + + for (i = 0; i < name->cRDN; i++) + for (j = 0; j < name->rgRDN[i].cRDNAttr; j++) + if (!strcmp(name->rgRDN[i].rgRDNAttr[j].pszObjId, + szOID_RSA_emailAddr)) + { + BOOL nameFormPresent; + + /* A name constraint only applies if the name form is + * present. From RFC 5280, section 4.2.1.10: + * "Restrictions apply only when the specified name form is + * present. If no name of the type is in the certificate, + * the certificate is acceptable." + */ + if (rfc822_attr_matches_excluded_name( + &name->rgRDN[i].rgRDNAttr[j], nameConstraints, + trustErrorStatus)) + { + TRACE_(chain)( + "email address in subject name is excluded\n"); + *trustErrorStatus |= + CERT_TRUST_HAS_EXCLUDED_NAME_CONSTRAINT; + } + nameFormPresent = FALSE; + if (!rfc822_attr_matches_permitted_name( + &name->rgRDN[i].rgRDNAttr[j], nameConstraints, + trustErrorStatus, &nameFormPresent) && nameFormPresent) + { + TRACE_(chain)( + "email address in subject name is not permitted\n"); + *trustErrorStatus |= + CERT_TRUST_HAS_NOT_PERMITTED_NAME_CONSTRAINT; + } + } + LocalFree(name); + } + else + *trustErrorStatus |= + CERT_TRUST_INVALID_EXTENSION | CERT_TRUST_INVALID_NAME_CONSTRAINTS; +} + +static BOOL CRYPT_IsEmptyName(const CERT_NAME_BLOB *name) +{ + BOOL empty; + + if (!name->cbData) + empty = TRUE; + else if (name->cbData == 2 && name->pbData[1] == 0) + { + /* An empty sequence is also empty */ + empty = TRUE; + } + else + empty = FALSE; + return empty; +} + +static void compare_subject_with_constraints(const CERT_NAME_BLOB *subjectName, + const CERT_NAME_CONSTRAINTS_INFO *nameConstraints, DWORD *trustErrorStatus) +{ + BOOL hasEmailConstraint = FALSE; + DWORD i; + + /* In general, a subject distinguished name only matches a directory name + * constraint. However, an exception exists for email addresses. + * From RFC 5280, section 4.2.1.6: + * "Legacy implementations exist where an electronic mail address is + * embedded in the subject distinguished name as an emailAddress + * attribute [RFC2985]." + * If an email address constraint exists, check that constraint separately. + */ + for (i = 0; !hasEmailConstraint && i < nameConstraints->cExcludedSubtree; + i++) + if (nameConstraints->rgExcludedSubtree[i].Base.dwAltNameChoice == + CERT_ALT_NAME_RFC822_NAME) + hasEmailConstraint = TRUE; + for (i = 0; !hasEmailConstraint && i < nameConstraints->cPermittedSubtree; + i++) + if (nameConstraints->rgPermittedSubtree[i].Base.dwAltNameChoice == + CERT_ALT_NAME_RFC822_NAME) + hasEmailConstraint = TRUE; + if (hasEmailConstraint) + compare_subject_with_email_constraints(subjectName, nameConstraints, + trustErrorStatus); + for (i = 0; i < nameConstraints->cExcludedSubtree; i++) + { + CERT_ALT_NAME_ENTRY *constraint = + &nameConstraints->rgExcludedSubtree[i].Base; + + if (constraint->dwAltNameChoice == CERT_ALT_NAME_DIRECTORY_NAME && + directory_name_matches(&constraint->u.DirectoryName, subjectName)) + { + TRACE_(chain)("subject name is excluded\n"); + *trustErrorStatus |= + CERT_TRUST_HAS_EXCLUDED_NAME_CONSTRAINT; + } + } + /* RFC 5280, section 4.2.1.10: + * "Restrictions apply only when the specified name form is present. + * If no name of the type is in the certificate, the certificate is + * acceptable." + * An empty name can't have the name form present, so don't check it. + */ + if (nameConstraints->cPermittedSubtree && !CRYPT_IsEmptyName(subjectName)) + { + BOOL match = FALSE, hasDirectoryConstraint = FALSE; + + for (i = 0; !match && i < nameConstraints->cPermittedSubtree; i++) + { + CERT_ALT_NAME_ENTRY *constraint = + &nameConstraints->rgPermittedSubtree[i].Base; + + if (constraint->dwAltNameChoice == CERT_ALT_NAME_DIRECTORY_NAME) + { + hasDirectoryConstraint = TRUE; + match = directory_name_matches(&constraint->u.DirectoryName, + subjectName); + } + } + if (hasDirectoryConstraint && !match) + { + TRACE_(chain)("subject name is not permitted\n"); + *trustErrorStatus |= CERT_TRUST_HAS_NOT_PERMITTED_NAME_CONSTRAINT; + } + } +} + static void CRYPT_CheckNameConstraints( const CERT_NAME_CONSTRAINTS_INFO *nameConstraints, const CERT_INFO *cert, DWORD *trustErrorStatus) { - /* If there aren't any existing constraints, don't bother checking */ - if (nameConstraints->cPermittedSubtree || nameConstraints->cExcludedSubtree) - { - CERT_EXTENSION *ext = get_subject_alt_name_ext(cert); + CERT_EXTENSION *ext = get_subject_alt_name_ext(cert); - if (ext) - { - CERT_ALT_NAME_INFO *subjectName; - DWORD size; - - if (CryptDecodeObjectEx(X509_ASN_ENCODING, X509_ALTERNATE_NAME, - ext->Value.pbData, ext->Value.cbData, - CRYPT_DECODE_ALLOC_FLAG | CRYPT_DECODE_NOCOPY_FLAG, NULL, - &subjectName, &size)) - { - DWORD i; - - for (i = 0; i < nameConstraints->cExcludedSubtree; i++) - CRYPT_FindMatchingNameEntry( - &nameConstraints->rgExcludedSubtree[i].Base, subjectName, - trustErrorStatus, - CERT_TRUST_HAS_EXCLUDED_NAME_CONSTRAINT, 0); - for (i = 0; i < nameConstraints->cPermittedSubtree; i++) - CRYPT_FindMatchingNameEntry( - &nameConstraints->rgPermittedSubtree[i].Base, subjectName, - trustErrorStatus, 0, - CERT_TRUST_HAS_NOT_PERMITTED_NAME_CONSTRAINT); - LocalFree(subjectName); - } - else - *trustErrorStatus |= - CERT_TRUST_INVALID_EXTENSION | - CERT_TRUST_INVALID_NAME_CONSTRAINTS; - } - else - { - if (nameConstraints->cPermittedSubtree) - *trustErrorStatus |= - CERT_TRUST_HAS_NOT_DEFINED_NAME_CONSTRAINT | - CERT_TRUST_HAS_NOT_PERMITTED_NAME_CONSTRAINT; - if (nameConstraints->cExcludedSubtree) - *trustErrorStatus |= - CERT_TRUST_HAS_EXCLUDED_NAME_CONSTRAINT; - } - } + if (ext) + compare_alt_name_with_constraints(ext, nameConstraints, + trustErrorStatus); + /* Name constraints apply to the subject alternative name as well as the + * subject name. From RFC 5280, section 4.2.1.10: + * "Restrictions apply to the subject distinguished name and apply to + * subject alternative names." + */ + compare_subject_with_constraints(&cert->Subject, nameConstraints, + trustErrorStatus); } /* Gets cert's name constraints, if any. Free with LocalFree. */ @@ -745,6 +1095,17 @@ static BOOL CRYPT_IsValidNameConstraint(const CERT_NAME_CONSTRAINTS_INFO *info) DWORD i; BOOL ret = TRUE; + /* Make sure at least one permitted or excluded subtree is present. From + * RFC 5280, section 4.2.1.10: + * "Conforming CAs MUST NOT issue certificates where name constraints is an + * empty sequence. That is, either the permittedSubtrees field or the + * excludedSubtrees MUST be present." + */ + if (!info->cPermittedSubtree && !info->cExcludedSubtree) + { + WARN_(chain)("constraints contain no permitted nor excluded subtree\n"); + ret = FALSE; + } /* Check that none of the constraints specifies a minimum or a maximum. * See RFC 5280, section 4.2.1.10: * "Within this profile, the minimum and maximum fields are not used with @@ -802,24 +1163,32 @@ static void CRYPT_CheckChainNameConstraints(PCERT_SIMPLE_CHAIN chain) CERT_TRUST_HAS_NOT_SUPPORTED_NAME_CONSTRAINT; else { - for (j = i - 1; j >= 0; j--) - { - DWORD errorStatus = 0; - - /* According to RFC 3280, self-signed certs don't have name - * constraints checked unless they're the end cert. - */ - if (j == 0 || !CRYPT_IsCertificateSelfSigned( - chain->rgpElement[j]->pCertContext)) + for (j = i - 1; j >= 0; j--) { - CRYPT_CheckNameConstraints(nameConstraints, + DWORD errorStatus = 0; + + /* According to RFC 3280, self-signed certs don't have name + * constraints checked unless they're the end cert. + */ + if (j == 0 || !CRYPT_IsCertificateSelfSigned( + chain->rgpElement[j]->pCertContext)) + { + CRYPT_CheckNameConstraints(nameConstraints, chain->rgpElement[j]->pCertContext->pCertInfo, - &errorStatus); - chain->rgpElement[i]->TrustStatus.dwErrorStatus |= - errorStatus; + &errorStatus); + if (errorStatus) + { + chain->rgpElement[i]->TrustStatus.dwErrorStatus |= + errorStatus; + CRYPT_CombineTrustStatus(&chain->TrustStatus, + &chain->rgpElement[i]->TrustStatus); + } + else + chain->rgpElement[i]->TrustStatus.dwInfoStatus |= + CERT_TRUST_HAS_VALID_NAME_CONSTRAINTS; + } } } - } LocalFree(nameConstraints); } } @@ -1235,58 +1604,6 @@ static BOOL CRYPT_KeyUsageValid(PCertificateChainEngine engine, return ret; } -static BOOL CRYPT_ExtendedKeyUsageValidForCA(PCCERT_CONTEXT cert) -{ - PCERT_EXTENSION ext; - BOOL ret; - - /* RFC 5280, section 4.2.1.12: "In general, this extension will only - * appear in end entity certificates." And, "If a certificate contains - * both a key usage extension and an extended key usage extension, then - * both extensions MUST be processed independently and the certificate MUST - * only be used for a purpose consistent with both extensions." This seems - * to imply that it should be checked if present, and ignored if not. - * Unfortunately some CAs, e.g. the Thawte SGC CA, don't include the code - * signing extended key usage, whereas they do include the keyCertSign - * key usage. Thus, when checking for a CA, we only require the - * code signing extended key usage if the extended key usage is critical. - */ - ext = CertFindExtension(szOID_ENHANCED_KEY_USAGE, - cert->pCertInfo->cExtension, cert->pCertInfo->rgExtension); - if (ext && ext->fCritical) - { - CERT_ENHKEY_USAGE *usage; - DWORD size; - - ret = CryptDecodeObjectEx(cert->dwCertEncodingType, - X509_ENHANCED_KEY_USAGE, ext->Value.pbData, ext->Value.cbData, - CRYPT_DECODE_ALLOC_FLAG, NULL, &usage, &size); - if (ret) - { - DWORD i; - - /* Explicitly require the code signing extended key usage for a CA - * with an extended key usage extension. That is, don't assume - * a cert is allowed to be a CA if it specifies the - * anyExtendedKeyUsage usage oid. See again RFC 5280, section - * 4.2.1.12: "Applications that require the presence of a - * particular purpose MAY reject certificates that include the - * anyExtendedKeyUsage OID but not the particular OID expected for - * the application." - */ - ret = FALSE; - for (i = 0; !ret && i < usage->cUsageIdentifier; i++) - if (!strcmp(usage->rgpszUsageIdentifier[i], - szOID_PKIX_KP_CODE_SIGNING)) - ret = TRUE; - LocalFree(usage); - } - } - else - ret = TRUE; - return ret; -} - static BOOL CRYPT_CriticalExtensionsSupported(PCCERT_CONTEXT cert) { BOOL ret = TRUE; @@ -1435,11 +1752,6 @@ static void CRYPT_CheckSimpleChain(PCertificateChainEngine engine, isRoot, constraints.fCA, i)) chain->rgpElement[i]->TrustStatus.dwErrorStatus |= CERT_TRUST_IS_NOT_VALID_FOR_USAGE; - if (i != 0) - if (!CRYPT_ExtendedKeyUsageValidForCA( - chain->rgpElement[i]->pCertContext)) - chain->rgpElement[i]->TrustStatus.dwErrorStatus |= - CERT_TRUST_IS_NOT_VALID_FOR_USAGE; if (CRYPT_IsSimpleChainCyclic(chain)) { /* If the chain is cyclic, then the path length constraints @@ -1501,7 +1813,10 @@ static PCCERT_CONTEXT CRYPT_GetIssuer(HCERTSTORE store, PCCERT_CONTEXT subject, subject->dwCertEncodingType, 0, CERT_FIND_CERT_ID, &id, prevIssuer); if (issuer) + { + TRACE_(chain)("issuer found by issuer/serial number\n"); *infoStatus = CERT_TRUST_HAS_EXACT_MATCH_ISSUER; + } } else if (info->KeyId.cbData) { @@ -1511,7 +1826,10 @@ static PCCERT_CONTEXT CRYPT_GetIssuer(HCERTSTORE store, PCCERT_CONTEXT subject, subject->dwCertEncodingType, 0, CERT_FIND_CERT_ID, &id, prevIssuer); if (issuer) + { + TRACE_(chain)("issuer found by key id\n"); *infoStatus = CERT_TRUST_HAS_KEY_MATCH_ISSUER; + } } LocalFree(info); } @@ -1554,7 +1872,10 @@ static PCCERT_CONTEXT CRYPT_GetIssuer(HCERTSTORE store, PCCERT_CONTEXT subject, subject->dwCertEncodingType, 0, CERT_FIND_CERT_ID, &id, prevIssuer); if (issuer) + { + TRACE_(chain)("issuer found by directory name\n"); *infoStatus = CERT_TRUST_HAS_EXACT_MATCH_ISSUER; + } } else FIXME("no supported name type in authority key id2\n"); @@ -1567,7 +1888,10 @@ static PCCERT_CONTEXT CRYPT_GetIssuer(HCERTSTORE store, PCCERT_CONTEXT subject, subject->dwCertEncodingType, 0, CERT_FIND_CERT_ID, &id, prevIssuer); if (issuer) + { + TRACE_(chain)("issuer found by key id\n"); *infoStatus = CERT_TRUST_HAS_KEY_MATCH_ISSUER; + } } LocalFree(info); } @@ -1577,6 +1901,7 @@ static PCCERT_CONTEXT CRYPT_GetIssuer(HCERTSTORE store, PCCERT_CONTEXT subject, issuer = CertFindCertificateInStore(store, subject->dwCertEncodingType, 0, CERT_FIND_SUBJECT_NAME, &subject->pCertInfo->Issuer, prevIssuer); + TRACE_(chain)("issuer found by name\n"); *infoStatus = CERT_TRUST_HAS_NAME_MATCH_ISSUER; } return issuer; @@ -1914,7 +2239,7 @@ static PCertificateChain CRYPT_BuildAlternateContextFromChain( #define CHAIN_QUALITY_TIME_VALID 8 #define CHAIN_QUALITY_COMPLETE_CHAIN 4 #define CHAIN_QUALITY_BASIC_CONSTRAINTS 2 -#define CHAIN_QUALITY_TRUSTED_ROOT 1 +#define CHAIN_QUALITY_TRUSTED_ROOT 1 #define CHAIN_QUALITY_HIGHEST \ CHAIN_QUALITY_SIGNATURE_VALID | CHAIN_QUALITY_TIME_VALID | \ @@ -2054,7 +2379,7 @@ static void CRYPT_VerifyChainRevocation(PCERT_CHAIN_CONTEXT chain, if (cContext) { PCCERT_CONTEXT *contexts = - CryptMemAlloc(cContext * sizeof(PCCERT_CONTEXT *)); + CryptMemAlloc(cContext * sizeof(PCCERT_CONTEXT)); if (contexts) { @@ -2101,7 +2426,11 @@ static void CRYPT_VerifyChainRevocation(PCERT_CHAIN_CONTEXT chain, case CRYPT_E_NO_REVOCATION_CHECK: case CRYPT_E_NO_REVOCATION_DLL: case CRYPT_E_NOT_IN_REVOCATION_DATABASE: - error = CERT_TRUST_REVOCATION_STATUS_UNKNOWN; + /* If the revocation status is unknown, it's assumed to be + * offline too. + */ + error = CERT_TRUST_REVOCATION_STATUS_UNKNOWN | + CERT_TRUST_IS_OFFLINE_REVOCATION; break; case CRYPT_E_REVOCATION_OFFLINE: error = CERT_TRUST_IS_OFFLINE_REVOCATION; @@ -2125,14 +2454,122 @@ static void CRYPT_VerifyChainRevocation(PCERT_CHAIN_CONTEXT chain, } } +static void CRYPT_CheckUsages(PCERT_CHAIN_CONTEXT chain, + const CERT_CHAIN_PARA *pChainPara) +{ + if (pChainPara->cbSize >= sizeof(CERT_CHAIN_PARA_NO_EXTRA_FIELDS) && + pChainPara->RequestedUsage.Usage.cUsageIdentifier) + { + PCCERT_CONTEXT endCert; + PCERT_EXTENSION ext; + BOOL validForUsage; + + /* A chain, if created, always includes the end certificate */ + endCert = chain->rgpChain[0]->rgpElement[0]->pCertContext; + /* The extended key usage extension specifies how a certificate's + * public key may be used. From RFC 5280, section 4.2.1.12: + * "This extension indicates one or more purposes for which the + * certified public key may be used, in addition to or in place of the + * basic purposes indicated in the key usage extension." + * If the extension is present, it only satisfies the requested usage + * if that usage is included in the extension: + * "If the extension is present, then the certificate MUST only be used + * for one of the purposes indicated." + * There is also the special anyExtendedKeyUsage OID, but it doesn't + * have to be respected: + * "Applications that require the presence of a particular purpose + * MAY reject certificates that include the anyExtendedKeyUsage OID + * but not the particular OID expected for the application." + * For now, I'm being more conservative and ignoring the presence of + * the anyExtendedKeyUsage OID. + */ + if ((ext = CertFindExtension(szOID_ENHANCED_KEY_USAGE, + endCert->pCertInfo->cExtension, endCert->pCertInfo->rgExtension))) + { + const CERT_ENHKEY_USAGE *requestedUsage = + &pChainPara->RequestedUsage.Usage; + CERT_ENHKEY_USAGE *usage; + DWORD size; + + if (CryptDecodeObjectEx(X509_ASN_ENCODING, + X509_ENHANCED_KEY_USAGE, ext->Value.pbData, ext->Value.cbData, + CRYPT_DECODE_ALLOC_FLAG, NULL, &usage, &size)) + { + if (pChainPara->RequestedUsage.dwType == USAGE_MATCH_TYPE_AND) + { + DWORD i, j; + + /* For AND matches, all usages must be present */ + validForUsage = TRUE; + for (i = 0; validForUsage && + i < requestedUsage->cUsageIdentifier; i++) + { + BOOL match = FALSE; + + for (j = 0; !match && j < usage->cUsageIdentifier; j++) + match = !strcmp(usage->rgpszUsageIdentifier[j], + requestedUsage->rgpszUsageIdentifier[i]); + if (!match) + validForUsage = FALSE; + } + } + else + { + DWORD i, j; + + /* For OR matches, any matching usage suffices */ + validForUsage = FALSE; + for (i = 0; !validForUsage && + i < requestedUsage->cUsageIdentifier; i++) + { + for (j = 0; !validForUsage && + j < usage->cUsageIdentifier; j++) + validForUsage = + !strcmp(usage->rgpszUsageIdentifier[j], + requestedUsage->rgpszUsageIdentifier[i]); + } + } + LocalFree(usage); + } + else + validForUsage = FALSE; + } + else + { + /* If the extension isn't present, any interpretation is valid: + * "Certificate using applications MAY require that the extended + * key usage extension be present and that a particular purpose + * be indicated in order for the certificate to be acceptable to + * that application." + * For now I'm being more conservative and disallowing it. + */ + WARN_(chain)("requested usage from a certificate with no usages\n"); + validForUsage = FALSE; + } + if (!validForUsage) + { + chain->TrustStatus.dwErrorStatus |= + CERT_TRUST_IS_NOT_VALID_FOR_USAGE; + chain->rgpChain[0]->rgpElement[0]->TrustStatus.dwErrorStatus |= + CERT_TRUST_IS_NOT_VALID_FOR_USAGE; + } + } + if (pChainPara->cbSize >= sizeof(CERT_CHAIN_PARA) && + pChainPara->RequestedIssuancePolicy.Usage.cUsageIdentifier) + FIXME("unimplemented for RequestedIssuancePolicy\n"); +} + static void dump_usage_match(LPCSTR name, const CERT_USAGE_MATCH *usageMatch) { - DWORD i; + if (usageMatch->Usage.cUsageIdentifier) + { + DWORD i; - TRACE_(chain)("%s: %s\n", name, - usageMatch->dwType == USAGE_MATCH_TYPE_AND ? "AND" : "OR"); - for (i = 0; i < usageMatch->Usage.cUsageIdentifier; i++) - TRACE_(chain)("%s\n", usageMatch->Usage.rgpszUsageIdentifier[i]); + TRACE_(chain)("%s: %s\n", name, + usageMatch->dwType == USAGE_MATCH_TYPE_AND ? "AND" : "OR"); + for (i = 0; i < usageMatch->Usage.cUsageIdentifier; i++) + TRACE_(chain)("%s\n", usageMatch->Usage.rgpszUsageIdentifier[i]); + } } static void dump_chain_para(const CERT_CHAIN_PARA *pChainPara) @@ -2201,7 +2638,9 @@ BOOL WINAPI CertGetCertificateChain(HCERTCHAINENGINE hChainEngine, if (!(dwFlags & CERT_CHAIN_RETURN_LOWER_QUALITY_CONTEXTS)) CRYPT_FreeLowerQualityChains(chain); pChain = (PCERT_CHAIN_CONTEXT)chain; - CRYPT_VerifyChainRevocation(pChain, pTime, pChainPara, dwFlags); + if (!pChain->TrustStatus.dwErrorStatus) + CRYPT_VerifyChainRevocation(pChain, pTime, pChainPara, dwFlags); + CRYPT_CheckUsages(pChain, pChainPara); if (ppChainContext) *ppChainContext = pChain; else @@ -2378,8 +2817,8 @@ static BOOL match_dns_to_subject_alt_name(PCERT_EXTENSION ext, * in section 4.2.1.6: * "Multiple name forms, and multiple instances of each name form, * MAY be included." - * It doesn't specify the behavior in such cases, but common usage is - * to accept a certificate if any name matches. + * It doesn't specify the behavior in such cases, but both RFC 2818 + * and RFC 2595 explicitly accept a certificate if any name matches. */ for (i = 0; !matches && i < subjectName->cAltEntry; i++) { diff --git a/reactos/dll/win32/crypt32/context.c b/reactos/dll/win32/crypt32/context.c index de0a8c91605..bf4ccf3cac1 100644 --- a/reactos/dll/win32/crypt32/context.c +++ b/reactos/dll/win32/crypt32/context.c @@ -125,7 +125,7 @@ void Context_AddRef(void *context, size_t contextSize) contextSize); else linkedBase = NULL; -} + } if (linkedContext) { /* It's not a link context, so it wasn't add-ref'ed in the while @@ -178,14 +178,14 @@ BOOL Context_Release(void *context, size_t contextSize, return FALSE; } if (base->type == ContextTypeLink) - { - /* The linked context is of the same type as this, so release - * it as well, using the same offset and data free function. - */ + { + /* The linked context is of the same type as this, so release + * it as well, using the same offset and data free function. + */ ret = Context_Release(CONTEXT_FROM_BASE_CONTEXT( - ((PLINK_CONTEXT)base)->linked, contextSize), contextSize, - dataContextFree); - } + ((PLINK_CONTEXT)base)->linked, contextSize), contextSize, + dataContextFree); + } if (InterlockedDecrement(&base->ref) == 0) { TRACE("freeing %p\n", context); @@ -321,7 +321,7 @@ BOOL ContextList_Remove(struct ContextList *list, void *context) EnterCriticalSection(&list->cs); if (!list_empty(entry)) { - list_remove(entry); + list_remove(entry); inList = TRUE; } LeaveCriticalSection(&list->cs); diff --git a/reactos/dll/win32/crypt32/crl.c b/reactos/dll/win32/crypt32/crl.c index e8426d7602f..a24e6adf887 100644 --- a/reactos/dll/win32/crypt32/crl.c +++ b/reactos/dll/win32/crypt32/crl.c @@ -19,10 +19,12 @@ #include #include +#define NONAMELESSUNION #include "windef.h" #include "winbase.h" #include "wincrypt.h" #include "wine/debug.h" +#include "wine/unicode.h" #include "crypt32_private.h" WINE_DEFAULT_DEBUG_CHANNEL(crypt); @@ -113,7 +115,82 @@ static BOOL compare_crl_issued_by(PCCRL_CONTEXT pCrlContext, DWORD dwType, PCCERT_CONTEXT issuer = pvPara; ret = CertCompareCertificateName(issuer->dwCertEncodingType, - &issuer->pCertInfo->Issuer, &pCrlContext->pCrlInfo->Issuer); + &issuer->pCertInfo->Subject, &pCrlContext->pCrlInfo->Issuer); + if (ret && (dwFlags & CRL_FIND_ISSUED_BY_SIGNATURE_FLAG)) + ret = CryptVerifyCertificateSignatureEx(0, + issuer->dwCertEncodingType, + CRYPT_VERIFY_CERT_SIGN_SUBJECT_CRL, (void *)pCrlContext, + CRYPT_VERIFY_CERT_SIGN_ISSUER_CERT, (void *)issuer, 0, NULL); + if (ret && (dwFlags & CRL_FIND_ISSUED_BY_AKI_FLAG)) + { + PCERT_EXTENSION ext = CertFindExtension( + szOID_AUTHORITY_KEY_IDENTIFIER2, pCrlContext->pCrlInfo->cExtension, + pCrlContext->pCrlInfo->rgExtension); + + if (ext) + { + CERT_AUTHORITY_KEY_ID2_INFO *info; + DWORD size; + + if ((ret = CryptDecodeObjectEx(X509_ASN_ENCODING, + X509_AUTHORITY_KEY_ID2, ext->Value.pbData, ext->Value.cbData, + CRYPT_DECODE_ALLOC_FLAG, NULL, &info, &size))) + { + if (info->AuthorityCertIssuer.cAltEntry && + info->AuthorityCertSerialNumber.cbData) + { + PCERT_ALT_NAME_ENTRY directoryName = NULL; + DWORD i; + + for (i = 0; !directoryName && + i < info->AuthorityCertIssuer.cAltEntry; i++) + if (info->AuthorityCertIssuer.rgAltEntry[i]. + dwAltNameChoice == CERT_ALT_NAME_DIRECTORY_NAME) + directoryName = + &info->AuthorityCertIssuer.rgAltEntry[i]; + if (directoryName) + { + ret = CertCompareCertificateName( + issuer->dwCertEncodingType, + &issuer->pCertInfo->Subject, + &directoryName->u.DirectoryName); + if (ret) + ret = CertCompareIntegerBlob( + &issuer->pCertInfo->SerialNumber, + &info->AuthorityCertSerialNumber); + } + else + { + FIXME("no supported name type in authority key id2\n"); + ret = FALSE; + } + } + else if (info->KeyId.cbData) + { + if ((ext = CertFindExtension( + szOID_SUBJECT_KEY_IDENTIFIER, + issuer->pCertInfo->cExtension, + issuer->pCertInfo->rgExtension))) + { + if (info->KeyId.cbData == ext->Value.cbData) + ret = !memcmp(info->KeyId.pbData, + ext->Value.pbData, info->KeyId.cbData); + else + ret = FALSE; + } + else + ret = FALSE; + } + else + { + FIXME("unsupported value for AKI extension\n"); + ret = FALSE; + } + LocalFree(info); + } + } + /* else: a CRL without an AKI matches any cert */ + } } else ret = TRUE; @@ -137,6 +214,17 @@ static BOOL compare_crl_existing(PCCRL_CONTEXT pCrlContext, DWORD dwType, return ret; } +static BOOL compare_crl_issued_for(PCCRL_CONTEXT pCrlContext, DWORD dwType, + DWORD dwFlags, const void *pvPara) +{ + const CRL_FIND_ISSUED_FOR_PARA *para = pvPara; + BOOL ret; + + ret = CertCompareCertificateName(para->pIssuerCert->dwCertEncodingType, + ¶->pIssuerCert->pCertInfo->Issuer, &pCrlContext->pCrlInfo->Issuer); + return ret; +} + PCCRL_CONTEXT WINAPI CertFindCRLInStore(HCERTSTORE hCertStore, DWORD dwCertEncodingType, DWORD dwFindFlags, DWORD dwFindType, const void *pvFindPara, PCCRL_CONTEXT pPrevCrlContext) @@ -158,6 +246,9 @@ PCCRL_CONTEXT WINAPI CertFindCRLInStore(HCERTSTORE hCertStore, case CRL_FIND_EXISTING: compare = compare_crl_existing; break; + case CRL_FIND_ISSUED_FOR: + compare = compare_crl_issued_for; + break; default: FIXME("find type %08x unimplemented\n", dwFindType); compare = NULL; @@ -229,7 +320,7 @@ PCCRL_CONTEXT WINAPI CertDuplicateCRLContext(PCCRL_CONTEXT pCrlContext) { TRACE("(%p)\n", pCrlContext); if (pCrlContext) - Context_AddRef((void *)pCrlContext, sizeof(CRL_CONTEXT)); + Context_AddRef((void *)pCrlContext, sizeof(CRL_CONTEXT)); return pCrlContext; } @@ -467,11 +558,151 @@ BOOL WINAPI CertSetCRLContextProperty(PCCRL_CONTEXT pCRLContext, return ret; } +static BOOL compare_dist_point_name(const CRL_DIST_POINT_NAME *name1, + const CRL_DIST_POINT_NAME *name2) +{ + BOOL match; + + if (name1->dwDistPointNameChoice == name2->dwDistPointNameChoice) + { + match = TRUE; + if (name1->dwDistPointNameChoice == CRL_DIST_POINT_FULL_NAME) + { + if (name1->u.FullName.cAltEntry == name2->u.FullName.cAltEntry) + { + DWORD i; + + for (i = 0; match && i < name1->u.FullName.cAltEntry; i++) + { + const CERT_ALT_NAME_ENTRY *entry1 = + &name1->u.FullName.rgAltEntry[i]; + const CERT_ALT_NAME_ENTRY *entry2 = + &name2->u.FullName.rgAltEntry[i]; + + if (entry1->dwAltNameChoice == entry2->dwAltNameChoice) + { + switch (entry1->dwAltNameChoice) + { + case CERT_ALT_NAME_URL: + match = !strcmpiW(entry1->u.pwszURL, + entry2->u.pwszURL); + break; + case CERT_ALT_NAME_DIRECTORY_NAME: + match = (entry1->u.DirectoryName.cbData == + entry2->u.DirectoryName.cbData) && + !memcmp(entry1->u.DirectoryName.pbData, + entry2->u.DirectoryName.pbData, + entry1->u.DirectoryName.cbData); + break; + default: + FIXME("unimplemented for type %d\n", + entry1->dwAltNameChoice); + match = FALSE; + } + } + else + match = FALSE; + } + } + else + match = FALSE; + } + } + else + match = FALSE; + return match; +} + +static BOOL match_dist_point_with_issuing_dist_point( + const CRL_DIST_POINT *distPoint, const CRL_ISSUING_DIST_POINT *idp) +{ + BOOL match; + + /* While RFC 5280, section 4.2.1.13 recommends against segmenting + * CRL distribution points by reasons, it doesn't preclude doing so. + * "This profile RECOMMENDS against segmenting CRLs by reason code." + * If the issuing distribution point for this CRL is only valid for + * some reasons, only match if the reasons covered also match the + * reasons in the CRL distribution point. + */ + if (idp->OnlySomeReasonFlags.cbData) + { + if (idp->OnlySomeReasonFlags.cbData == distPoint->ReasonFlags.cbData) + { + DWORD i; + + match = TRUE; + for (i = 0; match && i < distPoint->ReasonFlags.cbData; i++) + if (idp->OnlySomeReasonFlags.pbData[i] != + distPoint->ReasonFlags.pbData[i]) + match = FALSE; + } + else + match = FALSE; + } + else + match = TRUE; + if (match) + match = compare_dist_point_name(&idp->DistPointName, + &distPoint->DistPointName); + return match; +} + BOOL WINAPI CertIsValidCRLForCertificate(PCCERT_CONTEXT pCert, PCCRL_CONTEXT pCrl, DWORD dwFlags, void *pvReserved) { + PCERT_EXTENSION ext; + BOOL ret; + TRACE("(%p, %p, %08x, %p)\n", pCert, pCrl, dwFlags, pvReserved); - return TRUE; + + if (!pCert) + return TRUE; + + if ((ext = CertFindExtension(szOID_ISSUING_DIST_POINT, + pCrl->pCrlInfo->cExtension, pCrl->pCrlInfo->rgExtension))) + { + CRL_ISSUING_DIST_POINT *idp; + DWORD size; + + if ((ret = CryptDecodeObjectEx(pCrl->dwCertEncodingType, + X509_ISSUING_DIST_POINT, ext->Value.pbData, ext->Value.cbData, + CRYPT_DECODE_ALLOC_FLAG, NULL, &idp, &size))) + { + if ((ext = CertFindExtension(szOID_CRL_DIST_POINTS, + pCert->pCertInfo->cExtension, pCert->pCertInfo->rgExtension))) + { + CRL_DIST_POINTS_INFO *distPoints; + + if ((ret = CryptDecodeObjectEx(pCert->dwCertEncodingType, + X509_CRL_DIST_POINTS, ext->Value.pbData, ext->Value.cbData, + CRYPT_DECODE_ALLOC_FLAG, NULL, &distPoints, &size))) + { + DWORD i; + + ret = FALSE; + for (i = 0; !ret && i < distPoints->cDistPoint; i++) + ret = match_dist_point_with_issuing_dist_point( + &distPoints->rgDistPoint[i], idp); + if (!ret) + SetLastError(CRYPT_E_NO_MATCH); + LocalFree(distPoints); + } + } + else + { + /* no CRL dist points extension in cert, can't match the CRL + * (which has an issuing dist point extension) + */ + ret = FALSE; + SetLastError(CRYPT_E_NO_MATCH); + } + LocalFree(idp); + } + } + else + ret = TRUE; + return ret; } static PCRL_ENTRY CRYPT_FindCertificateInCRL(PCERT_INFO cert, const CRL_INFO *crl) diff --git a/reactos/dll/win32/crypt32/crypt32.spec b/reactos/dll/win32/crypt32/crypt32.spec index b096c090c11..61e4d3d5db7 100644 --- a/reactos/dll/win32/crypt32/crypt32.spec +++ b/reactos/dll/win32/crypt32/crypt32.spec @@ -66,7 +66,7 @@ @ stdcall CertGetStoreProperty(ptr long ptr ptr) @ stdcall CertGetSubjectCertificateFromStore(ptr long ptr) @ stdcall CertGetValidUsages(long ptr ptr ptr ptr) -@ stub CertIsRDNAttrsInCertificateName +@ stdcall CertIsRDNAttrsInCertificateName(long long ptr ptr) @ stdcall CertIsValidCRLForCertificate(ptr ptr long ptr) @ stdcall CertNameToStrA(long ptr long ptr long) @ stdcall CertNameToStrW(long ptr long ptr long) diff --git a/reactos/dll/win32/crypt32/ctl.c b/reactos/dll/win32/crypt32/ctl.c index 67162c8d408..44b517aeff3 100644 --- a/reactos/dll/win32/crypt32/ctl.c +++ b/reactos/dll/win32/crypt32/ctl.c @@ -454,7 +454,7 @@ PCCTL_CONTEXT WINAPI CertDuplicateCTLContext(PCCTL_CONTEXT pCtlContext) { TRACE("(%p)\n", pCtlContext); if (pCtlContext) - Context_AddRef((void *)pCtlContext, sizeof(CTL_CONTEXT)); + Context_AddRef((void *)pCtlContext, sizeof(CTL_CONTEXT)); return pCtlContext; } diff --git a/reactos/dll/win32/crypt32/decode.c b/reactos/dll/win32/crypt32/decode.c index 31a21fb23da..1fd23837395 100644 --- a/reactos/dll/win32/crypt32/decode.c +++ b/reactos/dll/win32/crypt32/decode.c @@ -361,8 +361,8 @@ static BOOL CRYPT_AsnDecodeSequenceItems(struct AsnDecodeSequenceItem items[], items[i].size = items[i].minSize; else if (items[i].size > items[i].minSize) { - /* Account for alignment padding */ - items[i].size = ALIGN_DWORD_PTR(items[i].size); + /* Account for alignment padding */ + items[i].size = ALIGN_DWORD_PTR(items[i].size); } TRACE("item %d size: %d\n", i, items[i].size); if (nextData && items[i].hasPointer && @@ -1464,7 +1464,7 @@ static BOOL WINAPI CRYPT_AsnDecodeExtensions(DWORD dwCertEncodingType, ret = CRYPT_AsnDecodeArray(&arrayDesc, pbEncoded, cbEncoded, dwFlags, pDecodePara, pvStructInfo, pcbStructInfo, NULL); - } + } __EXCEPT_PAGE_FAULT { SetLastError(STATUS_ACCESS_VIOLATION); @@ -1928,7 +1928,7 @@ static BOOL WINAPI CRYPT_AsnDecodeName(DWORD dwCertEncodingType, ret = CRYPT_AsnDecodeArray(&arrayDesc, pbEncoded, cbEncoded, dwFlags & ~CRYPT_DECODE_ALLOC_FLAG, NULL, pvStructInfo, &bytesNeeded, NULL); - } + } } } __EXCEPT_PAGE_FAULT @@ -2023,7 +2023,7 @@ static BOOL WINAPI CRYPT_AsnDecodeUnicodeName(DWORD dwCertEncodingType, ret = CRYPT_AsnDecodeArray(&arrayDesc, pbEncoded, cbEncoded, dwFlags & ~CRYPT_DECODE_ALLOC_FLAG, NULL, pvStructInfo, &bytesNeeded, NULL); - } + } } } __EXCEPT_PAGE_FAULT @@ -2347,7 +2347,7 @@ static BOOL WINAPI CRYPT_AsnDecodeSMIMECapabilities(DWORD dwCertEncodingType, ret = CRYPT_AsnDecodeArray(&arrayDesc, pbEncoded, cbEncoded, dwFlags, pDecodePara, pvStructInfo, pcbStructInfo, NULL); - } + } __EXCEPT_PAGE_FAULT { SetLastError(STATUS_ACCESS_VIOLATION); @@ -2819,7 +2819,7 @@ static BOOL WINAPI CRYPT_AsnDecodePKCSAttributes(DWORD dwCertEncodingType, ret = CRYPT_AsnDecodeArray(&arrayDesc, pbEncoded, cbEncoded, dwFlags, pDecodePara, pvStructInfo, pcbStructInfo, NULL); - } + } __EXCEPT_PAGE_FAULT { SetLastError(STATUS_ACCESS_VIOLATION); @@ -2996,7 +2996,7 @@ static BOOL CRYPT_AsnDecodeAltNameEntry(const BYTE *pbEncoded, DWORD cbEncoded, ret = FALSE; } else - bytesNeeded += (dataLen + 1) * sizeof(WCHAR); + bytesNeeded += (dataLen + 1) * sizeof(WCHAR); break; case 4: /* directoryName */ case 7: /* iPAddress */ @@ -3106,43 +3106,6 @@ static BOOL CRYPT_AsnDecodeAltNameInternal(const BYTE *pbEncoded, return ret; } -/* Like CRYPT_AsnDecodeIntegerInternal, but swaps the bytes */ -static BOOL CRYPT_AsnDecodeIntegerSwapBytes(const BYTE *pbEncoded, - DWORD cbEncoded, DWORD dwFlags, void *pvStructInfo, DWORD *pcbStructInfo, - DWORD *pcbDecoded) -{ - BOOL ret; - - TRACE("(%p, %d, 0x%08x, %p, %d, %p)\n", pbEncoded, cbEncoded, dwFlags, - pvStructInfo, *pcbStructInfo, pcbDecoded); - - /* Can't use the CRYPT_DECODE_NOCOPY_FLAG, because we modify the bytes in- - * place. - */ - ret = CRYPT_AsnDecodeIntegerInternal(pbEncoded, cbEncoded, - dwFlags & ~CRYPT_DECODE_NOCOPY_FLAG, pvStructInfo, pcbStructInfo, - pcbDecoded); - if (ret && pvStructInfo) - { - CRYPT_DATA_BLOB *blob = pvStructInfo; - - if (blob->cbData) - { - DWORD i; - BYTE temp; - - for (i = 0; i < blob->cbData / 2; i++) - { - temp = blob->pbData[i]; - blob->pbData[i] = blob->pbData[blob->cbData - i - 1]; - blob->pbData[blob->cbData - i - 1] = temp; - } - } - } - TRACE("returning %d (%08x)\n", ret, GetLastError()); - return ret; -} - static BOOL WINAPI CRYPT_AsnDecodeAuthorityKeyId(DWORD dwCertEncodingType, LPCSTR lpszStructType, const BYTE *pbEncoded, DWORD cbEncoded, DWORD dwFlags, PCRYPT_DECODE_PARA pDecodePara, void *pvStructInfo, DWORD *pcbStructInfo) @@ -3153,7 +3116,7 @@ static BOOL WINAPI CRYPT_AsnDecodeAuthorityKeyId(DWORD dwCertEncodingType, { struct AsnDecodeSequenceItem items[] = { { ASN_CONTEXT | 0, offsetof(CERT_AUTHORITY_KEY_ID_INFO, KeyId), - CRYPT_AsnDecodeIntegerSwapBytes, sizeof(CRYPT_DATA_BLOB), + CRYPT_AsnDecodeOctetsInternal, sizeof(CRYPT_DATA_BLOB), TRUE, TRUE, offsetof(CERT_AUTHORITY_KEY_ID_INFO, KeyId.pbData), 0 }, { ASN_CONTEXT | ASN_CONSTRUCTOR| 1, offsetof(CERT_AUTHORITY_KEY_ID_INFO, CertIssuer), @@ -3188,7 +3151,7 @@ static BOOL WINAPI CRYPT_AsnDecodeAuthorityKeyId2(DWORD dwCertEncodingType, { struct AsnDecodeSequenceItem items[] = { { ASN_CONTEXT | 0, offsetof(CERT_AUTHORITY_KEY_ID2_INFO, KeyId), - CRYPT_AsnDecodeIntegerSwapBytes, sizeof(CRYPT_DATA_BLOB), + CRYPT_AsnDecodeOctetsInternal, sizeof(CRYPT_DATA_BLOB), TRUE, TRUE, offsetof(CERT_AUTHORITY_KEY_ID2_INFO, KeyId.pbData), 0 }, { ASN_CONTEXT | ASN_CONSTRUCTOR| 1, offsetof(CERT_AUTHORITY_KEY_ID2_INFO, AuthorityCertIssuer), diff --git a/reactos/dll/win32/crypt32/encode.c b/reactos/dll/win32/crypt32/encode.c index 4d137cebc2f..b7bbc83600c 100644 --- a/reactos/dll/win32/crypt32/encode.c +++ b/reactos/dll/win32/crypt32/encode.c @@ -2438,45 +2438,6 @@ static BOOL WINAPI CRYPT_AsnEncodeAltNameEntry(DWORD dwCertEncodingType, return ret; } -static BOOL WINAPI CRYPT_AsnEncodeIntegerSwapBytes(DWORD dwCertEncodingType, - LPCSTR lpszStructType, const void *pvStructInfo, DWORD dwFlags, - PCRYPT_ENCODE_PARA pEncodePara, BYTE *pbEncoded, DWORD *pcbEncoded) -{ - BOOL ret; - - __TRY - { - const CRYPT_DATA_BLOB *blob = pvStructInfo; - CRYPT_DATA_BLOB newBlob = { blob->cbData, NULL }; - - ret = TRUE; - if (newBlob.cbData) - { - newBlob.pbData = CryptMemAlloc(newBlob.cbData); - if (newBlob.pbData) - { - DWORD i; - - for (i = 0; i < newBlob.cbData; i++) - newBlob.pbData[newBlob.cbData - i - 1] = blob->pbData[i]; - } - else - ret = FALSE; - } - if (ret) - ret = CRYPT_AsnEncodeInteger(dwCertEncodingType, lpszStructType, - &newBlob, dwFlags, pEncodePara, pbEncoded, pcbEncoded); - CryptMemFree(newBlob.pbData); - } - __EXCEPT_PAGE_FAULT - { - SetLastError(STATUS_ACCESS_VIOLATION); - ret = FALSE; - } - __ENDTRY - return ret; -} - static BOOL WINAPI CRYPT_AsnEncodeAuthorityKeyId(DWORD dwCertEncodingType, LPCSTR lpszStructType, const void *pvStructInfo, DWORD dwFlags, PCRYPT_ENCODE_PARA pEncodePara, BYTE *pbEncoded, DWORD *pcbEncoded) @@ -2495,7 +2456,7 @@ static BOOL WINAPI CRYPT_AsnEncodeAuthorityKeyId(DWORD dwCertEncodingType, { swapped[cSwapped].tag = ASN_CONTEXT | 0; swapped[cSwapped].pvStructInfo = &info->KeyId; - swapped[cSwapped].encodeFunc = CRYPT_AsnEncodeIntegerSwapBytes; + swapped[cSwapped].encodeFunc = CRYPT_AsnEncodeOctets; items[cItem].pvStructInfo = &swapped[cSwapped]; items[cItem].encodeFunc = CRYPT_AsnEncodeSwapTag; cSwapped++; @@ -2626,7 +2587,7 @@ static BOOL WINAPI CRYPT_AsnEncodeAuthorityKeyId2(DWORD dwCertEncodingType, { swapped[cSwapped].tag = ASN_CONTEXT | 0; swapped[cSwapped].pvStructInfo = &info->KeyId; - swapped[cSwapped].encodeFunc = CRYPT_AsnEncodeIntegerSwapBytes; + swapped[cSwapped].encodeFunc = CRYPT_AsnEncodeOctets; items[cItem].pvStructInfo = &swapped[cSwapped]; items[cItem].encodeFunc = CRYPT_AsnEncodeSwapTag; cSwapped++; diff --git a/reactos/dll/win32/crypt32/oid.c b/reactos/dll/win32/crypt32/oid.c index 3d9739e69e0..68a48520dac 100644 --- a/reactos/dll/win32/crypt32/oid.c +++ b/reactos/dll/win32/crypt32/oid.c @@ -881,9 +881,11 @@ static BOOL CRYPT_RemoveStringFromMultiString(LPWSTR multi, LPCWSTR toRemove) } else { - /* Copy remainder of string "left" */ - memmove(spotToRemove, spotToRemove + lstrlenW(toRemove) + 1, - (len - (spotToRemove - multi)) * sizeof(WCHAR)); + LPCWSTR nextStr = spotToRemove + lstrlenW(toRemove) + 1; + + /* Copy remainder of string "left" */ + memmove(spotToRemove, nextStr, + (len - (nextStr - multi)) * sizeof(WCHAR)); } ret = TRUE; } diff --git a/reactos/dll/win32/crypt32/rootstore.c b/reactos/dll/win32/crypt32/rootstore.c index a55b281601c..70b5ef80a3a 100644 --- a/reactos/dll/win32/crypt32/rootstore.c +++ b/reactos/dll/win32/crypt32/rootstore.c @@ -40,6 +40,9 @@ #include "winternl.h" #include "wine/debug.h" #include "crypt32_private.h" +#ifdef __APPLE__ +#include +#endif WINE_DEFAULT_DEBUG_CHANNEL(crypt); @@ -713,6 +716,35 @@ static void read_trusted_roots_from_known_locations(HCERTSTORE store) DWORD i; BOOL ret = FALSE; +#ifdef __APPLE__ + OSStatus status; + CFArrayRef rootCerts; + + status = SecTrustCopyAnchorCertificates(&rootCerts); + if (status == noErr) + { + int i; + for (i = 0; i < CFArrayGetCount(rootCerts); i++) + { + SecCertificateRef cert = (SecCertificateRef)CFArrayGetValueAtIndex(rootCerts, i); + CFDataRef certData; + if ((status = SecKeychainItemExport(cert, kSecFormatX509Cert, 0, NULL, &certData)) == noErr) + { + if (CertAddEncodedCertificateToStore(store, X509_ASN_ENCODING, + CFDataGetBytePtr(certData), CFDataGetLength(certData), + CERT_STORE_ADD_NEW, NULL)) + ret = TRUE; + else + WARN("adding root cert %d failed: %08x\n", i, GetLastError()); + CFRelease(certData); + } + else + WARN("could not export certificate %d to X509 format: 0x%08x\n", i, (unsigned int)status); + } + CFRelease(rootCerts); + } +#endif + for (i = 0; !ret && i < sizeof(CRYPT_knownLocations) / sizeof(CRYPT_knownLocations[0]); i++) diff --git a/reactos/dll/win32/crypt32/serialize.c b/reactos/dll/win32/crypt32/serialize.c index 05128953a19..0c366bf4125 100644 --- a/reactos/dll/win32/crypt32/serialize.c +++ b/reactos/dll/win32/crypt32/serialize.c @@ -505,12 +505,12 @@ static BOOL CRYPT_ReadSerializedStore(void *handle, WARN("prop id %d before a context id\n", propHdr.propID); ret = FALSE; - } + } else ret = CRYPT_ReadContextProp( contextInterface, context, &propHdr, buf, read); - } + } } } else From d894a2459ffd76f1eb908214e8132c04b31b8ace Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Tue, 15 Dec 2009 21:53:29 +0000 Subject: [PATCH 227/286] shuffle headers, add #undef, helps with wine macros. svn path=/branches/ros-amd64-bringup/; revision=44611 --- reactos/dll/win32/odbc32/proxyodbc.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/reactos/dll/win32/odbc32/proxyodbc.c b/reactos/dll/win32/odbc32/proxyodbc.c index b20157f4bbc..a5d5615b54a 100644 --- a/reactos/dll/win32/odbc32/proxyodbc.c +++ b/reactos/dll/win32/odbc32/proxyodbc.c @@ -37,14 +37,17 @@ #include "windef.h" #include "winbase.h" #include "winreg.h" -#include "wine/debug.h" -#include "wine/library.h" -#include "wine/unicode.h" #include "sql.h" #include "sqltypes.h" #include "sqlext.h" +#undef TRACE_ON + +#include "wine/debug.h" +#include "wine/library.h" +#include "wine/unicode.h" + #include "proxyodbc.h" static BOOL ODBC_LoadDriverManager(void); From 168700b492efd15032b94c1003265761cad68f85 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Tue, 15 Dec 2009 22:08:38 +0000 Subject: [PATCH 228/286] remove old hacks svn path=/branches/ros-amd64-bringup/; revision=44612 --- reactos/include/psdk/msacm.h | 3 --- reactos/include/psdk/sqlext.h | 2 -- 2 files changed, 5 deletions(-) diff --git a/reactos/include/psdk/msacm.h b/reactos/include/psdk/msacm.h index effbda02451..44d1d3aa4f4 100644 --- a/reactos/include/psdk/msacm.h +++ b/reactos/include/psdk/msacm.h @@ -21,9 +21,6 @@ #ifndef __WINE_MSACM_H #define __WINE_MSACM_H -/* HACK! This shouldn't be here, but wine code needs it. */ -#include - #ifdef __cplusplus extern "C" { #endif /* defined(__cplusplus) */ diff --git a/reactos/include/psdk/sqlext.h b/reactos/include/psdk/sqlext.h index fb67f6df4d9..3c97ac7d845 100644 --- a/reactos/include/psdk/sqlext.h +++ b/reactos/include/psdk/sqlext.h @@ -1142,9 +1142,7 @@ extern "C" { #endif #define TRACE_VERSION 1000 -#ifndef __WINE_DEBUG_H // HACK!!! #define TRACE_ON 1 -#endif #ifndef RC_INVOKED #define SQL_ODBC_KEYWORDS \ From e8ff2953e495685334a76edac05fe186b3814839 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Wed, 16 Dec 2009 01:06:10 +0000 Subject: [PATCH 229/286] Copy from trunk svn path=/branches/ros-amd64-bringup/; revision=44617 --- reactos/tools/rsym/log2lines.c | 184 ++++++++++++++++----------------- 1 file changed, 92 insertions(+), 92 deletions(-) diff --git a/reactos/tools/rsym/log2lines.c b/reactos/tools/rsym/log2lines.c index 39a3d364159..9da33528987 100644 --- a/reactos/tools/rsym/log2lines.c +++ b/reactos/tools/rsym/log2lines.c @@ -27,7 +27,7 @@ #define CP_CMD "copy /Y " #define DIR_FMT "dir /a:-d /s /b %s > %s" -#else /* not defined (__DJGPP__) || defined (__WIN32__) */ +#else /* not defined (__DJGPP__) || defined (__WIN32__) */ #include #include @@ -41,7 +41,7 @@ #define CP_CMD "cp -f " #define DIR_FMT "find %s -type f > %s" -#endif /* not defined (__DJGPP__) || defined (__WIN32__) */ +#endif /* not defined (__DJGPP__) || defined (__WIN32__) */ #define CP_FMT CP_CMD "%s %s > " DEV_NULL @@ -82,14 +82,14 @@ struct cache_struct struct summ_struct { - int translated; - int undo; - int redo; - int skipped; - int diff; + int translated; + int undo; + int redo; + int skipped; + int diff; int majordiff; - int offset_errors; - int total; + int offset_errors; + int total; }; struct lineinfo_struct @@ -104,11 +104,11 @@ struct lineinfo_struct }; typedef struct cache_struct CACHE; -typedef struct summ_struct SUMM; +typedef struct summ_struct SUMM; typedef struct lineinfo_struct LINEINFO; -static CACHE cache; -static SUMM summ; +static CACHE cache; +static SUMM summ; static LINEINFO lastLine; static char *optchars = "bcd:fFhl:mMrsS:tTuUvz:"; @@ -130,7 +130,7 @@ static int opt_redo = 0; // -U static char opt_dir[MAX_PATH]; // -d static char opt_logFile[MAX_PATH]; // -l static char opt_7z[MAX_PATH]; // -z -static char opt_scanned[LINESIZE]; // all scanned options +static char opt_scanned[LINESIZE]; // all scanned options static FILE *logFile = NULL; static char *cache_name; @@ -229,9 +229,9 @@ find_rossym_section(PIMAGE_FILE_HEADER PEFileHeader, PIMAGE_SECTION_HEADER PESec static PROSSYM_ENTRY find_offset(void *data, size_t offset) { - PSYMBOLFILE_HEADER RosSymHeader = (PSYMBOLFILE_HEADER) data; - PROSSYM_ENTRY Entries = (PROSSYM_ENTRY) ((char *)data + RosSymHeader->SymbolsOffset); - size_t symbols = RosSymHeader->SymbolsLength / sizeof (ROSSYM_ENTRY); + PSYMBOLFILE_HEADER RosSymHeader = (PSYMBOLFILE_HEADER)data; + PROSSYM_ENTRY Entries = (PROSSYM_ENTRY)((char *)data + RosSymHeader->SymbolsOffset); + size_t symbols = RosSymHeader->SymbolsLength / sizeof(ROSSYM_ENTRY); size_t i; for (i = 0; i < symbols; i++) @@ -252,7 +252,7 @@ find_offset(void *data, size_t offset) static int print_offset(void *data, size_t offset, char *toString) { - PSYMBOLFILE_HEADER RosSymHeader = (PSYMBOLFILE_HEADER) data; + PSYMBOLFILE_HEADER RosSymHeader = (PSYMBOLFILE_HEADER)data; PROSSYM_ENTRY e = NULL; PROSSYM_ENTRY e2 = NULL; int bFileOffsetChanged = 0; @@ -264,20 +264,20 @@ print_offset(void *data, size_t offset, char *toString) if (opt_twice) { e2 = find_offset(data, offset - 1); - - if ( e == e2 ) + + if (e == e2) e2 = NULL; else summ.diff++; - if ( opt_Twice && e2 ) + if (opt_Twice && e2) { e = e2; e2 = NULL; /* replaced (transparantly), but updated stats */ } } - if ( e || e2 ) + if (e || e2) { strcpy(lastLine.file1, &Strings[e->FileOffset]); strcpy(lastLine.func1, &Strings[e->FunctionOffset]); @@ -315,47 +315,47 @@ print_offset(void *data, size_t offset, char *toString) else strcat(fmt, "%.0s)"); - if (toString) - { // put in toString if provided + if (toString) + { // put in toString if provided snprintf(toString, LINESIZE, fmt, - &Strings[e->FileOffset], + &Strings[e->FileOffset], &Strings[e2->FileOffset], - (unsigned int)e->SourceLine, + (unsigned int)e->SourceLine, (unsigned int)e2->SourceLine, - &Strings[e->FunctionOffset], - &Strings[e2->FunctionOffset]); + &Strings[e->FunctionOffset], + &Strings[e2->FunctionOffset]); } else { strcat(fmt, "\n"); printf(fmt, - &Strings[e->FileOffset], + &Strings[e->FileOffset], &Strings[e2->FileOffset], - (unsigned int)e->SourceLine, + (unsigned int)e->SourceLine, (unsigned int)e2->SourceLine, &Strings[e->FunctionOffset], &Strings[e2->FunctionOffset]); } } else - { + { if (toString) { // put in toString if provided snprintf(toString, LINESIZE, "%s:%u (%s)", - &Strings[e->FileOffset], - (unsigned int)e->SourceLine, + &Strings[e->FileOffset], + (unsigned int)e->SourceLine, &Strings[e->FunctionOffset]); } else { printf("%s:%u (%s)\n", - &Strings[e->FileOffset], - (unsigned int)e->SourceLine, - &Strings[e->FunctionOffset]); + &Strings[e->FileOffset], + (unsigned int)e->SourceLine, + &Strings[e->FunctionOffset]); } } - return 0; - } + return 0; + } return 1; } @@ -371,24 +371,24 @@ process_data(const void *FileData, size_t offset, char *toString) int res; /* Check if MZ header exists */ - PEDosHeader = (PIMAGE_DOS_HEADER) FileData; + PEDosHeader = (PIMAGE_DOS_HEADER)FileData; if (PEDosHeader->e_magic != IMAGE_DOS_MAGIC || PEDosHeader->e_lfanew == 0L) { fprintf(stderr, "Input file is not a PE image.\n"); - summ.offset_errors ++; + summ.offset_errors++; return 1; } /* Locate PE file header */ /* sizeof(ULONG) = sizeof(MAGIC) */ - PEFileHeader = (PIMAGE_FILE_HEADER) ((char *)FileData + PEDosHeader->e_lfanew + sizeof (ULONG)); + PEFileHeader = (PIMAGE_FILE_HEADER)((char *)FileData + PEDosHeader->e_lfanew + sizeof(ULONG)); /* Locate optional header */ - PEOptHeader = (PIMAGE_OPTIONAL_HEADER) (PEFileHeader + 1); + PEOptHeader = (PIMAGE_OPTIONAL_HEADER)(PEFileHeader + 1); ImageBase = PEOptHeader->ImageBase; /* Locate PE section headers */ - PESectionHeaders = (PIMAGE_SECTION_HEADER) ((char *)PEOptHeader + PEFileHeader->SizeOfOptionalHeader); + PESectionHeaders = (PIMAGE_SECTION_HEADER)((char *)PEOptHeader + PEFileHeader->SizeOfOptionalHeader); /* make sure offset is what we want */ offset = fixup_offset(ImageBase, offset); @@ -398,7 +398,7 @@ process_data(const void *FileData, size_t offset, char *toString) if (!PERosSymSectionHeader) { fprintf(stderr, "Couldn't find rossym section in executable\n"); - summ.offset_errors ++; + summ.offset_errors++; return 1; } res = print_offset((char *)FileData + PERosSymSectionHeader->PointerToRawData, offset, toString); @@ -413,7 +413,7 @@ process_data(const void *FileData, size_t offset, char *toString) printf("??:0\n"); } fprintf(stderr, "Offset not found.\n"); - summ.offset_errors ++; + summ.offset_errors++; } return res; @@ -538,7 +538,7 @@ get_ImageBase(char *fname, size_t *ImageBase) return 1; } - readLen = fread(&PEDosHeader, sizeof (IMAGE_DOS_HEADER), 1, fr); + readLen = fread(&PEDosHeader, sizeof(IMAGE_DOS_HEADER), 1, fr); if (1 != readLen) { if (opt_verbose) @@ -557,8 +557,8 @@ get_ImageBase(char *fname, size_t *ImageBase) } /* Locate PE file header */ - res = fseek(fr, PEDosHeader.e_lfanew + sizeof (ULONG), SEEK_SET); - readLen = fread(&PEFileHeader, sizeof (IMAGE_FILE_HEADER), 1, fr); + res = fseek(fr, PEDosHeader.e_lfanew + sizeof(ULONG), SEEK_SET); + readLen = fread(&PEFileHeader, sizeof(IMAGE_FILE_HEADER), 1, fr); if (1 != readLen) { if (opt_verbose) @@ -568,7 +568,7 @@ get_ImageBase(char *fname, size_t *ImageBase) } /* Locate optional header */ - readLen = fread(&PEOptHeader, sizeof (IMAGE_OPTIONAL_HEADER), 1, fr); + readLen = fread(&PEOptHeader, sizeof(IMAGE_OPTIONAL_HEADER), 1, fr); if (1 != readLen) { if (opt_verbose) @@ -625,7 +625,7 @@ entry_create(char *Line) if (!Line) return NULL; - pentry = malloc(sizeof (CACHE_ENTRY)); + pentry = malloc(sizeof(CACHE_ENTRY)); if (!pentry) return NULL; @@ -682,7 +682,7 @@ entry_lookup(char *name) if (PATHCMP(name, pnext->name) == 0) { if (pprev) - { // move to head for faster lookup next time + { // move to head for faster lookup next time pprev->pnext = pnext->pnext; pnext->pnext = cache.phead; cache.phead = pnext; @@ -895,9 +895,9 @@ translate_char(int c, FILE *outFile) static char * remove_mark(char *Line) { - if( Line[1] == ' ' && Line[2] == '<' ) - if ( Line[0] == '*' || Line[0] == '?' ) - return Line+2; + if (Line[1] == ' ' && Line[2] == '<') + if (Line[0] == '*' || Line[0] == '?') + return Line + 2; return Line; } @@ -934,7 +934,7 @@ translate_line(FILE *outFile, char *Line, char *path, char *LineOut) if (cnt == 3 && ch == ' ') { tail = strchr(s, '>'); - tail = tail ? tail-1 : tail; + tail = tail ? tail - 1 : tail; if (tail && tail[0] == ')' && tail[1] == '>') { res = 0; @@ -943,20 +943,20 @@ translate_line(FILE *outFile, char *Line, char *path, char *LineOut) if (opt_redo && !(res = translate_file(path, offset, LineOut))) { log(outFile, "%s<%s:%x (%s)>%s", mark, path, offset, LineOut, tail); - summ.redo ++; + summ.redo++; } else { log(outFile, "%s<%s:%x>%s", mark, path, offset, tail); - summ.undo ++; + summ.undo++; } } else { mark = opt_Mark ? "? " : ""; - summ.skipped ++; + summ.skipped++; } - summ.total ++; + summ.total++; } } @@ -969,14 +969,14 @@ translate_line(FILE *outFile, char *Line, char *path, char *LineOut) { mark = opt_mark ? "* " : ""; log(outFile, "%s<%s:%x (%s)>%s", mark, path, offset, LineOut, tail); - summ.translated ++; + summ.translated++; } else { mark = opt_Mark ? "? " : ""; - summ.skipped ++; + summ.skipped++; } - summ.total ++; + summ.total++; } } } @@ -990,29 +990,29 @@ translate_line(FILE *outFile, char *Line, char *path, char *LineOut) } static void -print_summary(FILE * outFile) +print_summary(FILE *outFile) { if (outFile) { fprintf(outFile, "\n*** LOG2LINES SUMMARY ***\n"); - fprintf(outFile, "Translated: %d\n", summ.translated); - fprintf(outFile, "Reverted: %d\n", summ.undo); - fprintf(outFile, "Retranslated: %d\n", summ.redo); - fprintf(outFile, "Skipped: %d\n", summ.skipped); - fprintf(outFile, "Differ: %d\n", summ.diff); + fprintf(outFile, "Translated: %d\n", summ.translated); + fprintf(outFile, "Reverted: %d\n", summ.undo); + fprintf(outFile, "Retranslated: %d\n", summ.redo); + fprintf(outFile, "Skipped: %d\n", summ.skipped); + fprintf(outFile, "Differ: %d\n", summ.diff); fprintf(outFile, "Differ (function/source): %d\n", summ.majordiff); - fprintf(outFile, "Offset error: %d\n", summ.offset_errors); - fprintf(outFile, "Total: %d\n", summ.total); + fprintf(outFile, "Offset error: %d\n", summ.offset_errors); + fprintf(outFile, "Total: %d\n", summ.total); fprintf(outFile, "-------------------------------\n"); fprintf(outFile, "Log2lines version: " LOG2LINES_VERSION "\n"); - fprintf(outFile, "Directory: %s\n",opt_dir); - fprintf(outFile, "Passed options: %s\n",opt_scanned); + fprintf(outFile, "Directory: %s\n", opt_dir); + fprintf(outFile, "Passed options: %s\n", opt_scanned); fprintf(outFile, "-------------------------------\n"); } } static int -translate_files(FILE * inFile, FILE * outFile) +translate_files(FILE *inFile, FILE *outFile) { char *Line = malloc(LINESIZE + 1); char *path = malloc(LINESIZE + 1); @@ -1090,7 +1090,7 @@ translate_files(FILE * inFile, FILE * outFile) } } else - { // Line by line, slightly faster but less interactive + { // Line by line, slightly faster but less interactive while (fgets(Line, LINESIZE, inFile) != NULL) { if (!opt_raw) @@ -1125,7 +1125,7 @@ static char *verboseUsage = " - Also, can be repeated for each \n" " - NOTE: some of the options below will have no effect in this form.\n" " Otherwise it reads stdin and tries to translate lines of the form:\n" -" \n\n" +" \n\n" " The result is written to stdout.\n" " log2lines uses a cache in order to avoid a directory scan at each\n" " image lookup, greatly increasing performance. Only image path and its\n" @@ -1158,14 +1158,14 @@ static char *verboseUsage = " -r Raw output without translation.\n\n" " -s Statistics. A summary with the following info is printed after EOF:\n" " *** LOG2LINES SUMMARY ***\n" -" - Translated: Translated lines.\n" -" - Reverted: Lines translated back. See -u option\n" -" - Retranslated: Lines retranslated. See -U option\n" -" - Skipped: Lines not translated.\n" -" - Differ: Lines where (addr-1) info differs. See -tT options\n" +" - Translated: Translated lines.\n" +" - Reverted: Lines translated back. See -u option\n" +" - Retranslated: Lines retranslated. See -U option\n" +" - Skipped: Lines not translated.\n" +" - Differ: Lines where (addr-1) info differs. See -tT options\n" " - Differ(func/src):Lines where also function or source info differ.\n" -" - Offset error: Image exists, but error retrieving offset info.\n" -" - Total: Total number of lines attempted to translate.\n" +" - Offset error: Image exists, but error retrieving offset info.\n" +" - Total: Total number of lines attempted to translate.\n" " Also some version info is displayed.\n\n" " -S \n" " Source lines. Display up to lines until linenumber.\n" @@ -1195,7 +1195,7 @@ static char *verboseUsage = "Examples:\n" " Setup is a VMware machine with its serial port set to: '\\\\.\\pipe\\kdbg'.\n\n" " Just recreate cache after a svn update or a new module has been added:\n" -" log2lines -F\n\n" +" log2lines -F\n\n" " Use kdbg debugger via console (interactive):\n" " log2lines -c < \\\\.\\pipe\\kdbg\n\n" " Use kdbg debugger via console, and append copy to logFile:\n" @@ -1243,7 +1243,7 @@ unpack_iso(char *dir, char *iso) char Line[LINESIZE]; int res = 0; char iso_tmp[MAX_PATH]; - int iso_copied = 0; + int iso_copied = 0; FILE *fiso; strcpy(iso_tmp, iso); @@ -1252,8 +1252,8 @@ unpack_iso(char *dir, char *iso) if (opt_verbose) fprintf(stderr, "Open of %s failed (locked for writing?), trying to copy first\n", iso); - strcat(iso_tmp,"~"); - if (copy_file(iso,iso_tmp)) + strcat(iso_tmp, "~"); + if (copy_file(iso, iso_tmp)) return 3; iso_copied = 1; } @@ -1394,7 +1394,7 @@ main(int argc, const char **argv) } strcpy(opt_scanned, ""); - for (i=1; i expected\n"); res = 3; break; - } - } - else + } + } + else { // Must be exefile base = offset; @@ -1553,7 +1553,7 @@ main(int argc, const char **argv) } } else - { // translate logging from stdin + { // translate logging from stdin translate_files(stdin, stdout); } From e87ff42eeac51a27f5d6cc9a5f15984f8ad07e4f Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Wed, 16 Dec 2009 17:01:24 +0000 Subject: [PATCH 230/286] Revert unnecessary hack/fix. svn path=/branches/ros-amd64-bringup/; revision=44620 --- reactos/drivers/video/miniport/vbe/vbemp.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/reactos/drivers/video/miniport/vbe/vbemp.c b/reactos/drivers/video/miniport/vbe/vbemp.c index 7e12d3d12a0..55b2bcb980c 100644 --- a/reactos/drivers/video/miniport/vbe/vbemp.c +++ b/reactos/drivers/video/miniport/vbe/vbemp.c @@ -781,8 +781,6 @@ VBEMapVideoMemory( MapInformation->VideoRamBase = RequestedAddress->RequestedVirtualAddress; MapInformation->VideoRamLength = 0x10000; } -#else - FrameBuffer.QuadPart = 0; #endif VideoPortMapMemory(DeviceExtension, FrameBuffer, From f73d776d30f1d4c11f1845d5bfc2a7a7589217b7 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Wed, 16 Dec 2009 20:45:02 +0000 Subject: [PATCH 231/286] New definition of C_ASSERT and _STATIC_ASSERT using a function prototype. This way we avoid duplicate definition errors like with a typedef and unused function warning like with the extern. svn path=/branches/ros-amd64-bringup/; revision=44623 --- reactos/include/crt/crtdbg.h | 2 +- reactos/include/crt/malloc.h | 2 +- reactos/include/ddk/ntdef.h | 2 +- reactos/include/psdk/winnt.h | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/reactos/include/crt/crtdbg.h b/reactos/include/crt/crtdbg.h index 16cf030f5d4..8430446e198 100644 --- a/reactos/include/crt/crtdbg.h +++ b/reactos/include/crt/crtdbg.h @@ -90,7 +90,7 @@ extern "C" { } _CrtMemState; #ifndef _STATIC_ASSERT -#define _STATIC_ASSERT(expr) typedef char __static_assert_t[(expr)?1:-1] +#define _STATIC_ASSERT(expr) char __static_assert_p(char static_assert[(expr)?1:-1]) #endif #ifndef _ASSERT diff --git a/reactos/include/crt/malloc.h b/reactos/include/crt/malloc.h index 24d7c38b27c..9b503889bb5 100644 --- a/reactos/include/crt/malloc.h +++ b/reactos/include/crt/malloc.h @@ -25,7 +25,7 @@ extern "C" { #endif #ifndef _STATIC_ASSERT -#define _STATIC_ASSERT(expr) typedef char __static_assert_t[(expr)?1:-1] +#define _STATIC_ASSERT(expr) char __static_assert_p(char static_assert[(expr)?1:-1]) #endif /* Return codes for _heapwalk() */ diff --git a/reactos/include/ddk/ntdef.h b/reactos/include/ddk/ntdef.h index 47ba5991583..27ccba6f202 100644 --- a/reactos/include/ddk/ntdef.h +++ b/reactos/include/ddk/ntdef.h @@ -694,7 +694,7 @@ typedef struct _SINGLE_LIST_ENTRY { // C_ASSERT Definition // #define C_ASSERT(exp) \ - extern char __c_assert__[exp ? 1 : -1]; + char __c_assert_p(char c_assert[(exp)?1:-1]) diff --git a/reactos/include/psdk/winnt.h b/reactos/include/psdk/winnt.h index 74a6549a418..1c67263aeb0 100644 --- a/reactos/include/psdk/winnt.h +++ b/reactos/include/psdk/winnt.h @@ -230,7 +230,7 @@ typedef WORD FSHORT; typedef DWORD FLONG; #define C_ASSERT(exp) \ - extern char __c_assert__[exp ? 1 : -1]; + char __c_assert_p(char c_assert[(exp)?1:-1]) #include "intrin.h" From d2a094f50fc22c8df9543e545ac2a05387085366 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Wed, 16 Dec 2009 20:52:53 +0000 Subject: [PATCH 232/286] revert 44509. not needed anymore. svn path=/branches/ros-amd64-bringup/; revision=44624 --- reactos/ntoskrnl/ke/wait.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/reactos/ntoskrnl/ke/wait.c b/reactos/ntoskrnl/ke/wait.c index 4e70fc3e427..74c960cf019 100644 --- a/reactos/ntoskrnl/ke/wait.c +++ b/reactos/ntoskrnl/ke/wait.c @@ -117,9 +117,6 @@ KiAcquireFastMutex(IN PFAST_MUTEX FastMutex) NULL); } -/* We depend on these bits being just right */ -C_ASSERT((GM_LOCK_WAITER_WOKEN * 2) == GM_LOCK_WAITER_INC); - VOID FASTCALL KiAcquireGuardedMutex(IN OUT PKGUARDED_MUTEX GuardedMutex) @@ -127,6 +124,9 @@ KiAcquireGuardedMutex(IN OUT PKGUARDED_MUTEX GuardedMutex) ULONG BitsToRemove, BitsToAdd; LONG OldValue, NewValue; + /* We depend on these bits being just right */ + C_ASSERT((GM_LOCK_WAITER_WOKEN * 2) == GM_LOCK_WAITER_INC); + /* Increase the contention count */ GuardedMutex->Contention++; From 1c964da618494158ec6e77aefce44502204652a6 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Wed, 16 Dec 2009 23:37:18 +0000 Subject: [PATCH 233/286] Fix C_ASSERT yet another time. svn path=/branches/ros-amd64-bringup/; revision=44631 --- reactos/include/crt/crtdbg.h | 2 +- reactos/include/crt/malloc.h | 2 +- reactos/include/ddk/ntdef.h | 3 +-- reactos/include/psdk/winnt.h | 3 +-- 4 files changed, 4 insertions(+), 6 deletions(-) diff --git a/reactos/include/crt/crtdbg.h b/reactos/include/crt/crtdbg.h index 8430446e198..142de498270 100644 --- a/reactos/include/crt/crtdbg.h +++ b/reactos/include/crt/crtdbg.h @@ -90,7 +90,7 @@ extern "C" { } _CrtMemState; #ifndef _STATIC_ASSERT -#define _STATIC_ASSERT(expr) char __static_assert_p(char static_assert[(expr)?1:-1]) +#define _STATIC_ASSERT(expr) extern char (*static_assert(void)) [(expr) ? 1 : -1] #endif #ifndef _ASSERT diff --git a/reactos/include/crt/malloc.h b/reactos/include/crt/malloc.h index 9b503889bb5..b90bfc5e97c 100644 --- a/reactos/include/crt/malloc.h +++ b/reactos/include/crt/malloc.h @@ -25,7 +25,7 @@ extern "C" { #endif #ifndef _STATIC_ASSERT -#define _STATIC_ASSERT(expr) char __static_assert_p(char static_assert[(expr)?1:-1]) +#define _STATIC_ASSERT(expr) extern char (*static_assert(void)) [(expr) ? 1 : -1] #endif /* Return codes for _heapwalk() */ diff --git a/reactos/include/ddk/ntdef.h b/reactos/include/ddk/ntdef.h index 27ccba6f202..49772bfe001 100644 --- a/reactos/include/ddk/ntdef.h +++ b/reactos/include/ddk/ntdef.h @@ -693,8 +693,7 @@ typedef struct _SINGLE_LIST_ENTRY { // // C_ASSERT Definition // -#define C_ASSERT(exp) \ - char __c_assert_p(char c_assert[(exp)?1:-1]) +#define C_ASSERT(expr) extern char (*c_assert(void)) [(expr) ? 1 : -1] diff --git a/reactos/include/psdk/winnt.h b/reactos/include/psdk/winnt.h index 1c67263aeb0..b041d9f0637 100644 --- a/reactos/include/psdk/winnt.h +++ b/reactos/include/psdk/winnt.h @@ -229,8 +229,7 @@ typedef BYTE FCHAR; typedef WORD FSHORT; typedef DWORD FLONG; -#define C_ASSERT(exp) \ - char __c_assert_p(char c_assert[(exp)?1:-1]) +#define C_ASSERT(expr) extern char (*c_assert(void)) [(expr) ? 1 : -1] #include "intrin.h" From 9fb1e72a8786f8461de0dc4275efc99fe92324d2 Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Thu, 17 Dec 2009 02:52:24 +0000 Subject: [PATCH 234/286] Eliminate differences with trunk. svn path=/branches/ros-amd64-bringup/; revision=44633 --- reactos/boot/bootdata/hivecls_amd64.inf | 486 ++---- reactos/boot/bootdata/hivedef_amd64.inf | 1827 +++++++++++++++++++++-- reactos/boot/bootdata/hivedef_arm.inf | 3 + reactos/boot/bootdata/hivedef_i386.inf | 4 + reactos/boot/bootdata/hivesft_amd64.inf | 257 +++- reactos/boot/bootdata/hivesys_amd64.inf | 335 ++++- reactos/boot/bootdata/txtsetup.sif | 8 +- 7 files changed, 2312 insertions(+), 608 deletions(-) diff --git a/reactos/boot/bootdata/hivecls_amd64.inf b/reactos/boot/bootdata/hivecls_amd64.inf index b15f6def132..350fe18e010 100644 --- a/reactos/boot/bootdata/hivecls_amd64.inf +++ b/reactos/boot/bootdata/hivecls_amd64.inf @@ -41,7 +41,7 @@ HKCR,"rtffile\shell\open\command","",0x00020000,"%SystemRoot%\system32\wordpad.e HKCR,".386","",0x00000000,"vxdfile" HKCR,".vxd","",0x00000000,"vxdfile" HKCR,"vxdfile","",0x00000000,"Virtual Device Driver" -HKCR,"vxdfile","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\shell32.dll,-157" +HKCR,"vxdfile","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\shell32.dll,-156" ; Animated Cursors HKCR,".ani","",0x00000000,"anifile" @@ -94,6 +94,7 @@ HKCR,"dllfile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-154 HKCR,".drv","",0x00000000,"drvfile" HKCR,"drvfile","",0x00000000,"Device Driver" HKCR,"drvfile","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\shell32.dll,-164" +HKCR,"drvfile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-154" ; Applicatons HKCR,".exe","",0x00000000,"exefile" @@ -117,8 +118,15 @@ HKCR,"ttffile\shell\open\command","",0x00020000,"%SystemRoot%\system32\fontview. ; Help Files HKCR,".hlp","",0x00000000,"hlpfile" HKCR,"hlpfile","",0x00000000,"Help File" -HKCR,"fonfile","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\shell32.dll,-168" +HKCR,"hlpfile","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\shell32.dll,-168" HKCR,"hlpfile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-24" +HKCR,"hlpfile\shell\open\command","",0x00020000,"%SystemRoot%\system32\winhlp32.exe %1" + +HKCR,".chm","",0x00000000,"chm.file" +HKCR,"chm.file","",0x00000000,"Help File" +HKCR,"chm.file","FriendlyTypeName",0x00020000,"@%SystemRoot%\system32\shell32.dll,-168" +HKCR,"chm.file\DefaultIcon","",0x00020000,"%SystemRoot%\hh.exe,0" +HKCR,"chm.file\shell\open\command","",0x00020000,"%SystemRoot%\hh.exe %1" ; set MIME type for .html and .htm because Tiny webserver needs it HKCR,".htm","",0x00000000,"html" @@ -136,25 +144,25 @@ HKCR,"icofile\DefaultIcon","",0x00000000,"%1" HKCR,".jpg","",0x00000000,"jpegfile" HKCR,".jpeg","",0x00000000,"jpegfile" HKCR,"jpegfile","",0x00000000,"JPEG Image" -HKCR,"jpegfile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shimgvw.dll,-1" +HKCR,"jpegfile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shimgvw.dll,0" HKCR,"jpegfile\shell\open\command","",0x00020000,"rundll32.exe %SystemRoot%\system32\shimgvw.dll,ImageView_Fullscreen %1" ; Bitmap Images HKCR,".bmp","",0x00000000,"bmpfile" HKCR,"bmpfile","",0x00000000,"Bitmap Image" -HKCR,"bmpfile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shimgvw.dll,-1" +HKCR,"bmpfile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shimgvw.dll,0" HKCR,"bmpfile\shell\open\command","",0x00020000,"rundll32.exe %SystemRoot%\system32\shimgvw.dll,ImageView_Fullscreen %1" ; PNG Images HKCR,".png","",0x00000000,"pngfile" HKCR,"pngfile","",0x00000000,"PNG Image" -HKCR,"pngfile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shimgvw.dll,-1" +HKCR,"pngfile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shimgvw.dll,0" HKCR,"pngfile\shell\open\command","",0x00020000,"rundll32.exe %SystemRoot%\system32\shimgvw.dll,ImageView_Fullscreen %1" ; GIF Images HKCR,".gif","",0x00000000,"giffile" HKCR,"giffile","",0x00000000,"GIF Image" -HKCR,"giffile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shimgvw.dll,-1" +HKCR,"giffile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shimgvw.dll,0" HKCR,"giffile\shell\open\command","",0x00020000,"rundll32.exe %SystemRoot%\system32\shimgvw.dll,ImageView_Fullscreen %1" ; Configuration Files @@ -185,6 +193,7 @@ HKCR,"lnkfile","IsShortcut",0x00000000,"yes" HKCR,"lnkfile\CLSID","",0x00000000,"{00021401-0000-0000-C000-000000000046}" HKCR,"lnkfile\shellex\IconHandler","",0x00000000,"{00021401-0000-0000-C000-000000000046}" HKCR,"lnkfile\shellex\ContextMenuHandlers\{00021401-0000-0000-C000-000000000046}","",0x00000000,"" +HKCR,"lnkfile\shellex\PropertySheetHandlers\Shellink Property Page", "", 0x00000000, "{00021401-0000-0000-C000-000000000046}" ; Text Documents HKCR,".log","",0x00000000,"txtfile" @@ -210,9 +219,9 @@ HKCR,"xmlfile\shell\open\command","",0x00020000,"%SystemRoot%\system32\notepad.e ; MSI files HKCR,".msi","",0x00000000,"MSI.Package" HKCR,"Msi.Package\DefaultIcon","",0x00000000,"msiexec.exe" -HKCR,"Msi.Package\shell\Open\command","",0x00020000,"%SystemRoot%\system32\msiexec /i %1" -HKCR,"Msi.Package\shell\Repair\command","",0x00020000,"%SystemRoot%\system32\msiexec /f %1" -HKCR,"Msi.Package\shell\Uninstall\command","",0x00020000,"%SystemRoot%\system32\msiexec /x %1" +HKCR,"Msi.Package\shell\Open\command","",0x00020000,"%SystemRoot%\system32\msiexec.exe /i ""%1""" +HKCR,"Msi.Package\shell\Repair\command","",0x00020000,"%SystemRoot%\system32\msiexec.exe /f ""%1""" +HKCR,"Msi.Package\shell\Uninstall\command","",0x00020000,"%SystemRoot%\system32\msiexec.exe /x ""%1""" HKCR,".pif","",0x00000000,"piffile" @@ -252,15 +261,31 @@ HKCR,"sysfile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-154 ; URL shortcuts (e.g. used in favorites folder of IExplorer) HKCR,".url","",0x00000000,"InternetShortcut" -HKCR,"InternetShortcut","NeverShowExt",0x00000000,"" -HKCR,"InternetShortcut","IsShortcut",0x00000000,"yes" -HKCR,"InternetShortcut\shell\open\command","",0x00000000,"rundll32.exe shdocvw.dll,OpenURL %l" -HKCR,"InternetShortcut\DefaultIcon","",0x00020000,"%SystemRoot%\system32\url.dll,0" ; Wave Sounds HKCR,".wav","",0x00000000,"SoundRec" HKCR,"SoundRec","",0x00000000,"Wave Sound" HKCR,"SoundRec\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-225" +HKCR,"SoundRec\shell\open\command","",0x00020000,"%SystemRoot%\system32\mplay32.exe %1" + +; Midi Sounds +HKCR,".mid","",0x00000000,"MIDFile" +HKCR,".midi","",0x00000000,"MIDFile" +HKCR,"MIDFile","",0x00000000,"MIDI Sequence" +HKCR,"MIDFile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-225" +HKCR,"MIDFile\shell\open\command","",0x00020000,"%SystemRoot%\system32\mplay32.exe %1" + +; Audio CD +HKCR,".cda","",0x00000000,"CDAFile" +HKCR,"CDAFile","",0x00000000,"CD Audio Track" +HKCR,"CDAFile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-225" +HKCR,"CDAFile\shell\open\command","",0x00020000,"%SystemRoot%\system32\mplay32.exe %1" + +; Avi Files +HKCR,".avi","",0x00000000,"AVIFile" +HKCR,"AVIFile","",0x00000000,"Video Clip" +HKCR,"AVIFile\DefaultIcon","",0x00020000,"%SystemRoot%\system32\shell32.dll,-224" +HKCR,"AVIFile\shell\open\command","",0x00020000,"%SystemRoot%\system32\mplay32.exe %1" HKCR,"CLSID",,0x00000012 @@ -327,15 +352,6 @@ HKCR,"Applications","",0x00000000,"" ;HKCR,"CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\shellex\ContextMenuHandlers\{645FF040-5081-101B-9F08-00AA002F954E}","",0x00000000,"" ;HKCR,"CLSID\{645FF040-5081-101B-9F08-00AA002F954E}\shellex\PropertySheetHandlers\{645FF040-5081-101B-9F08-00AA002F954E}","",0x00000000,"" -HKCR,"CLSID\{00000320-0000-0000-C000-000000000046}","",0x00000000,"PSFactoryBuffer" -HKCR,"CLSID\{00000320-0000-0000-C000-000000000046}\InProcServer32","",0x00000000,"ole32.dll" -HKCR,"CLSID\{00000320-0000-0000-C000-000000000046}\InProcServer32","ThreadingModel",0x00000000,"Both" - -; StdGlobalInterfaceTable from winedefault.reg -;HKCR,"CLSID\{00000323-0000-0000-C000-000000000046}","",0x00000000,"StdGlobalInterfaceTable" -;HKCR,"CLSID\{00000323-0000-0000-C000-000000000046}\InProcServer32","",0x00000000,"ole32.dll" -;HKCR,"CLSID\{00000323-0000-0000-C000-000000000046}\InProcServer32","ThreadingModel",0x00000000,"Apartment" - ; deskadp.dll shell extension HKCR,"CLSID\{42071712-76d4-11d1-8b24-00a0c9068ff3}","",0x00000000,"Display Adapter CPL Extension" HKCR,"CLSID\{42071712-76d4-11d1-8b24-00a0c9068ff3}\InProcServer32","",0x00020000,"%SystemRoot%\system32\deskadp.dll" @@ -346,11 +362,6 @@ HKCR,"CLSID\{42071713-76d4-11d1-8b24-00a0c9068ff3}","",0x00000000,"Display Monit HKCR,"CLSID\{42071713-76d4-11d1-8b24-00a0c9068ff3}\InProcServer32","",0x00020000,"%SystemRoot%\system32\deskmon.dll" HKCR,"CLSID\{42071713-76d4-11d1-8b24-00a0c9068ff3}\InProcServer32","ThreadingModel",0x00000000,"Apartment" -; For comcat.dll -HKCR,"CLSID\{0002E005-0000-0000-C000-000000000046}","",0x00000000,"StdComponentCategoriesMgr" -HKCR,"CLSID\{0002E005-0000-0000-C000-000000000046}\InProcServer32","",0x00000000,"comcat.dll" -HKCR,"CLSID\{0002E005-0000-0000-C000-000000000046}\InProcServer32","ThreadingModel",0x00000000,"Both" - ; For TCPIP Protocol property page HKCR,"CLSID\{A907657F-6FDF-11D0-8EFB-00C04FD912B2}","",0x00000000,"TCP/IP Configuration Notify Object" HKCR,"CLSID\{A907657F-6FDF-11D0-8EFB-00C04FD912B2}\InProcServer32","",0x00000000,"netcfgx.dll" @@ -363,230 +374,6 @@ HKCR,"CLSID\{A65B8071-3BFE-4213-9A5B-491DA4461CA7}\InProcServer32","ThreadingMod HKCR,"CLSID\{A65B8071-3BFE-4213-9A5B-491DA4461CA7}\ProgID","",0x00000000,"DxDiag.DxDiagProvider.1" HKCR,"CLSID\{A65B8071-3BFE-4213-9A5B-491DA4461CA7}\VersionIndependentProgID","",0x00000000,"DxDiag.DxDiagProvider" -HKCR,"Interface",,0x00000012 - -; For Ole32.dll -HKCR,"Interface\{00000000-0000-0000-C000-000000000046}","",0x00000000,"IUnknown" -HKCR,"Interface\{00000000-0000-0000-C000-000000000046}\BaseInterface","",0x00000000,"" -HKCR,"Interface\{00000000-0000-0000-C000-000000000046}\NumMethods","",0x00000000,"3" -HKCR,"Interface\{00000000-0000-0000-C000-000000000046}\ProxyStubClsid32","",0x00000000,"{00000320-0000-0000-C000-000000000046}" - -HKCR,"Interface\{00000001-0000-0000-C000-000000000046}","",0x00000000,"IClassFactory" -HKCR,"Interface\{00000001-0000-0000-C000-000000000046}\NumMethods","",0x00000000,"5" -HKCR,"Interface\{00000001-0000-0000-C000-000000000046}\ProxyStubClsid32","",0x00000000,"{00000320-0000-0000-C000-000000000046}" - -HKCR,"Interface\{00000002-0000-0000-C000-000000000046}}","",0x00000000,"IMalloc" -HKCR,"Interface\{00000002-0000-0000-C000-000000000046}\NumMethods","",0x00000000,"9" - -HKCR,"Interface\{00000003-0000-0000-C000-000000000046}","",0x00000000,"IMarshal" -HKCR,"Interface\{00000003-0000-0000-C000-000000000046}\NumMethods","",0x00000000,"9" - -HKCR,"Interface\{00000004-0000-0000-C000-000000000046}","",0x00000000,"IRpcChannel" -HKCR,"Interface\{00000004-0000-0000-C000-000000000046}\NumMethods","",0x00000000,"7" - -HKCR,"Interface\{00000005-0000-0000-C000-000000000046}","",0x00000000,"IRpcStub" -HKCR,"Interface\{00000005-0000-0000-C000-000000000046}\NumMethods","",0x00000000,"8" - -HKCR,"Interface\{00000006-0000-0000-C000-000000000046}","",0x00000000,"IStubManager" - -HKCR,"Interface\{00000007-0000-0000-C000-000000000046}","",0x00000000,"IRpcProxy" -HKCR,"Interface\{00000007-0000-0000-C000-000000000046}\NumMethods","",0x00000000,"5" - -HKCR,"Interface\{00000008-0000-0000-C000-000000000046}","",0x00000000,"IProxyManager" - -HKCR,"Interface\{00000009-0000-0000-C000-000000000046}","",0x00000000,"IPSFactory" -HKCR,"Interface\{00000009-0000-0000-C000-000000000046}\NumMethods","",0x00000000,"5" - -HKCR,"Interface\{0000000A-0000-0000-C000-000000000046}","",0x00000000,"ILockBytes" -HKCR,"Interface\{0000000A-0000-0000-C000-000000000046}\NumMethods","",0x00000000,"10" -HKCR,"Interface\{0000000A-0000-0000-C000-000000000046}\ProxyStubClsid32","",0x00000000,"{00000320-0000-0000-C000-000000000046}" - -HKCR,"Interface\{0000000B-0000-0000-C000-000000000046}","",0x00000000,"IStorage" -HKCR,"Interface\{0000000B-0000-0000-C000-000000000046}\NumMethods","",0x00000000,"18" -HKCR,"Interface\{0000000B-0000-0000-C000-000000000046}\ProxyStubClsid32","",0x00000000,"{00000320-0000-0000-C000-000000000046}" - -HKCR,"Interface\{0000000C-0000-0000-C000-000000000046}","",0x00000000,"IStream" -HKCR,"Interface\{0000000C-0000-0000-C000-000000000046}\NumMethods","",0x00000000,"14" -HKCR,"Interface\{0000000C-0000-0000-C000-000000000046}\ProxyStubClsid32","",0x00000000,"{00000320-0000-0000-C000-000000000046}" - -HKCR,"Interface\{0000000D-0000-0000-C000-000000000046}","",0x00000000,"IEnumSTATSTG" -HKCR,"Interface\{0000000D-0000-0000-C000-000000000046}\NumMethods","",0x00000000,"7" -HKCR,"Interface\{0000000D-0000-0000-C000-000000000046}\ProxyStubClsid32","",0x00000000,"{00000320-0000-0000-C000-000000000046}" - -HKCR,"Interface\{0000000E-0000-0000-C000-000000000046}","",0x00000000,"IBindCtx" -HKCR,"Interface\{0000000E-0000-0000-C000-000000000046}\NumMethods","",0x00000000,"13" -HKCR,"Interface\{0000000E-0000-0000-C000-000000000046}\ProxyStubClsid32","",0x00000000,"{00000320-0000-0000-C000-000000000046}" - -HKCR,"Interface\{0000000F-0000-0000-C000-000000000046}","",0x00000000,"IMoniker" -HKCR,"Interface\{0000000F-0000-0000-C000-000000000046}\BaseInterface","",0x00000000,"{00000109-0000-0000-C000-000000000046}" -HKCR,"Interface\{0000000F-0000-0000-C000-000000000046}\NumMethods","",0x00000000,"23" -HKCR,"Interface\{0000000F-0000-0000-C000-000000000046}\ProxyStubClsid32","",0x00000000,"{00000320-0000-0000-C000-000000000046}" - -HKCR,"Interface\{00000010-0000-0000-C000-000000000046}","",0x00000000,"IRunningObjectTable" -HKCR,"Interface\{00000010-0000-0000-C000-000000000046}\NumMethods","",0x00000000,"10" -HKCR,"Interface\{00000010-0000-0000-C000-000000000046}\ProxyStubClsid32","",0x00000000,"{00000320-0000-0000-C000-000000000046}" - -HKCR,"Interface\{00000011-0000-0000-C000-000000000046}","",0x00000000,"IInternalMoniker" - -HKCR,"Interface\{00000012-0000-0000-C000-000000000046}","",0x00000000,"IRootStorage" -HKCR,"Interface\{00000012-0000-0000-C000-000000000046}\NumMethods","",0x00000000,"4" -HKCR,"Interface\{00000012-0000-0000-C000-000000000046}\ProxyStubClsid32","",0x00000000,"{00000320-0000-0000-C000-000000000046}" - -HKCR,"Interface\{00000013-0000-0000-C000-000000000046}","",0x00000000,"IDfReserved1" - -HKCR,"Interface\{00000014-0000-0000-C000-000000000046}","",0x00000000,"IDfReserved2" - -HKCR,"Interface\{00000015-0000-0000-C000-000000000046}","",0x00000000,"IDfReserved3" - -HKCR,"Interface\{00000016-0000-0000-C000-000000000046}","",0x00000000,"IMessageFilter" -HKCR,"Interface\{00000016-0000-0000-C000-000000000046}\NumMethods","",0x00000000,"6" - -HKCR,"Interface\{00000018-0000-0000-C000-000000000046}","",0x00000000,"IStdMarshalInfo" -HKCR,"Interface\{00000018-0000-0000-C000-000000000046}\NumMethods","",0x00000000,"4" - -HKCR,"Interface\{00000100-0000-0000-C000-000000000046}","",0x00000000,"IEnumUnknown" -HKCR,"Interface\{00000100-0000-0000-C000-000000000046}\NumMethods","",0x00000000,"7" -HKCR,"Interface\{00000100-0000-0000-C000-000000000046}\ProxyStubClsid32","",0x00000000,"{00000320-0000-0000-C000-000000000046}" - -HKCR,"Interface\{00000101-0000-0000-C000-000000000046}","",0x00000000,"IEnumString" -HKCR,"Interface\{00000101-0000-0000-C000-000000000046}\NumMethods","",0x00000000,"7" -HKCR,"Interface\{00000101-0000-0000-C000-000000000046}\ProxyStubClsid32","",0x00000000,"{00000320-0000-0000-C000-000000000046}" - -HKCR,"Interface\{00000102-0000-0000-C000-000000000046}","",0x00000000,"IEnumMoniker" -HKCR,"Interface\{00000102-0000-0000-C000-000000000046}\NumMethods","",0x00000000,"7" -HKCR,"Interface\{00000102-0000-0000-C000-000000000046}\ProxyStubClsid32","",0x00000000,"{00000320-0000-0000-C000-000000000046}" - -HKCR,"Interface\{00000103-0000-0000-C000-000000000046}","",0x00000000,"IEnumFORMATETC" -HKCR,"Interface\{00000103-0000-0000-C000-000000000046}\NumMethods","",0x00000000,"7" -HKCR,"Interface\{00000103-0000-0000-C000-000000000046}\ProxyStubClsid32","",0x00000000,"{00000320-0000-0000-C000-000000000046}" - -HKCR,"Interface\{00000104-0000-0000-C000-000000000046}","",0x00000000,"IEnumOLEVERB" -HKCR,"Interface\{00000104-0000-0000-C000-000000000046}\NumMethods","",0x00000000,"7" -HKCR,"Interface\{00000104-0000-0000-C000-000000000046}\ProxyStubClsid32","",0x00000000,"{00000320-0000-0000-C000-000000000046}" - -HKCR,"Interface\{00000105-0000-0000-C000-000000000046}","",0x00000000,"IEnumSTATDATA" -HKCR,"Interface\{00000105-0000-0000-C000-000000000046}\NumMethods","",0x00000000,"7" -HKCR,"Interface\{00000105-0000-0000-C000-000000000046}\ProxyStubClsid32","",0x00000000,"{00000320-0000-0000-C000-000000000046}" - -HKCR,"Interface\{00000106-0000-0000-C000-000000000046}","",0x00000000,"IEnumGeneric" - -HKCR,"Interface\{00000107-0000-0000-C000-000000000046}","",0x00000000,"IEnumHolder" - -HKCR,"Interface\{00000108-0000-0000-C000-000000000046}","",0x00000000,"IEnumCallback" - -HKCR,"Interface\{00000109-0000-0000-C000-000000000046}","",0x00000000,"IPersistStream" - -HKCR,"Interface\{00000109-0000-0000-C000-000000000046}\BaseInterface","",0x00000000,"{0000010C-0000-0000-C000-000000000046}" -HKCR,"Interface\{00000109-0000-0000-C000-000000000046}\NumMethods","",0x00000000,"8" - -HKCR,"Interface\{00000109-0000-0000-C000-000000000046}\OLEViewerIViewerCLSID","",0x00000000,"{7CE551EB-F85C-11CE-9059-080036F12502}" -HKCR,"Interface\{00000109-0000-0000-C000-000000000046}\ProxyStubClsid32","",0x00000000,"{00000320-0000-0000-C000-000000000046}" - -HKCR,"Interface\{0000010A-0000-0000-C000-000000000046}","",0x00000000,"IPersistStorage" -HKCR,"Interface\{0000010A-0000-0000-C000-000000000046}\BaseInterface","",0x00000000,"{0000010C-0000-0000-C000-000000000046}" -HKCR,"Interface\{0000010A-0000-0000-C000-000000000046}\NumMethods","",0x00000000,"10" -HKCR,"Interface\{0000010A-0000-0000-C000-000000000046}\ProxyStubClsid32","",0x00000000,"{00000320-0000-0000-C000-000000000046}" - -HKCR,"Interface\{0000010B-0000-0000-C000-000000000046}","",0x00000000,"IPersistFile" -HKCR,"Interface\{0000010B-0000-0000-C000-000000000046}\BaseInterface","",0x00000000,"{0000010C-0000-0000-C000-000000000046}" -HKCR,"Interface\{0000010B-0000-0000-C000-000000000046}\Distributor","",0x00000000,"{e436ebb7-524f-11ce-9f53-0020af0ba770}" -HKCR,"Interface\{0000010B-0000-0000-C000-000000000046}\NumMethods","",0x00000000,"9" -HKCR,"Interface\{0000010B-0000-0000-C000-000000000046}\ProxyStubClsid32","",0x00000000,"{00000320-0000-0000-C000-000000000046}" - -HKCR,"Interface\{0000010C-0000-0000-C000-000000000046}","",0x00000000,"IPersist" -HKCR,"Interface\{0000010C-0000-0000-C000-000000000046}\NumMethods","",0x00000000,"4" -HKCR,"Interface\{0000010C-0000-0000-C000-000000000046}\OLEViewerIViewerCLSID","",0x00000000,"{7CE551EB-F85C-11CE-9059-080036F12502}" -HKCR,"Interface\{0000010C-0000-0000-C000-000000000046}\ProxyStubClsid32","",0x00000000,"{00000320-0000-0000-C000-000000000046}" - -HKCR,"Interface\{0000010D-0000-0000-C000-000000000046}","",0x00000000,"IViewObject" -HKCR,"Interface\{0000010D-0000-0000-C000-000000000046}\NumMethods","",0x00000000,"9" -HKCR,"Interface\{0000010D-0000-0000-C000-000000000046}\ProxyStubClsid32","",0x00000000,"{00000320-0000-0000-C000-000000000046}" - -HKCR,"Interface\{0000010E-0000-0000-C000-000000000046}","",0x00000000,"IDataObject" -HKCR,"Interface\{0000010E-0000-0000-C000-000000000046}\NumMethods","",0x00000000,"12" -HKCR,"Interface\{0000010E-0000-0000-C000-000000000046}\OLEViewerIViewerCLSID","",0x00000000,"{28D8ABA0-4B78-11CE-B27D-00AA001F73C1}" -HKCR,"Interface\{0000010E-0000-0000-C000-000000000046}\ProxyStubClsid32","",0x00000000,"{00000320-0000-0000-C000-000000000046}" - -HKCR,"Interface\{0000010F-0000-0000-C000-000000000046}","",0x00000000,"IAdviseSink" -HKCR,"Interface\{0000010F-0000-0000-C000-000000000046}\AsynchronousInterface","",0x00000000,"{00000150-0000-0000-C000-000000000046}" -HKCR,"Interface\{0000010F-0000-0000-C000-000000000046}\NumMethods","",0x00000000,"8" -HKCR,"Interface\{0000010F-0000-0000-C000-000000000046}\ProxyStubClsid32","",0x00000000,"{00000320-0000-0000-C000-000000000046}" - -HKCR,"Interface\{00000110-0000-0000-C000-000000000046}","",0x00000000,"IDataAdviseHolder" -HKCR,"Interface\{00000110-0000-0000-C000-000000000046}\NumMethods","",0x00000000,"7" - -HKCR,"Interface\{00000111-0000-0000-C000-000000000046}","",0x00000000,"IOleAdviseHolder" -HKCR,"Interface\{00000111-0000-0000-C000-000000000046}\NumMethods","",0x00000000,"9" - -HKCR,"Interface\{00000112-0000-0000-C000-000000000046}","",0x00000000,"IOleObject" -HKCR,"Interface\{00000112-0000-0000-C000-000000000046}\NumMethods","",0x00000000,"24" -HKCR,"Interface\{00000112-0000-0000-C000-000000000046}\ProxyStubClsid32","",0x00000000,"{00000320-0000-0000-C000-000000000046}" - -HKCR,"Interface\{00000113-0000-0000-C000-000000000046}","",0x00000000,"IOleInPlaceObject" - -HKCR,"Interface\{00000113-0000-0000-C000-000000000046}\BaseInterface","",0x00000000,"{00000114-0000-0000-C000-000000000046}" -HKCR,"Interface\{00000113-0000-0000-C000-000000000046}\NumMethods","",0x00000000,"9" -HKCR,"Interface\{00000113-0000-0000-C000-000000000046}\ProxyStubClsid32","",0x00000000,"{00000320-0000-0000-C000-000000000046}" - -HKCR,"Interface\{00000114-0000-0000-C000-000000000046}","",0x00000000,"IOleWindow" -HKCR,"Interface\{00000114-0000-0000-C000-000000000046}\NumMethods","",0x00000000,"5" -HKCR,"Interface\{00000114-0000-0000-C000-000000000046}\ProxyStubClsid32","",0x00000000,"{00000320-0000-0000-C000-000000000046}" - -HKCR,"Interface\{00000115-0000-0000-C000-000000000046}","",0x00000000,"IOleInPlaceUIWindow" -HKCR,"Interface\{00000115-0000-0000-C000-000000000046}\BaseInterface","",0x00000000,"{00000114-0000-0000-C000-000000000046}" -HKCR,"Interface\{00000115-0000-0000-C000-000000000046}\NumMethods","",0x00000000,"9" -HKCR,"Interface\{00000115-0000-0000-C000-000000000046}\ProxyStubClsid32","",0x00000000,"{00000320-0000-0000-C000-000000000046}" - -HKCR,"Interface\{00000116-0000-0000-C000-000000000046}","",0x00000000,"IOleInPlaceFrame" -HKCR,"Interface\{00000116-0000-0000-C000-000000000046}\NumMethods","",0x00000000,"15" -HKCR,"Interface\{00000116-0000-0000-C000-000000000046}\ProxyStubClsid32","",0x00000000,"{00000320-0000-0000-C000-000000000046}" - -HKCR,"Interface\{00000117-0000-0000-C000-000000000046}","",0x00000000,"IOleInPlaceActiveObject" -HKCR,"Interface\{00000117-0000-0000-C000-000000000046}\BaseInterface","",0x00000000,"{00000114-0000-0000-C000-000000000046}" -HKCR,"Interface\{00000117-0000-0000-C000-000000000046}\NumMethods","",0x00000000,"10" -HKCR,"Interface\{00000117-0000-0000-C000-000000000046}\ProxyStubClsid32","",0x00000000,"{00000320-0000-0000-C000-000000000046}" - -HKCR,"Interface\{00000118-0000-0000-C000-000000000046}","",0x00000000,"IOleClientSite" -HKCR,"Interface\{00000118-0000-0000-C000-000000000046}\NumMethods","",0x00000000,"9" -HKCR,"Interface\{00000118-0000-0000-C000-000000000046}\ProxyStubClsid32","",0x00000000,"{00000320-0000-0000-C000-000000000046}" - -HKCR,"Interface\{00000119-0000-0000-C000-000000000046}","",0x00000000,"IOleInPlaceSite" -HKCR,"Interface\{00000119-0000-0000-C000-000000000046}\BaseInterface","",0x00000000,"{00000114-0000-0000-C000-000000000046}" -HKCR,"Interface\{00000119-0000-0000-C000-000000000046}\NumMethods","",0x00000000,"15" -HKCR,"Interface\{00000119-0000-0000-C000-000000000046}\ProxyStubClsid32","",0x00000000,"{00000320-0000-0000-C000-000000000046}" - -HKCR,"Interface\{0000011A-0000-0000-C000-000000000046}","",0x00000000,"IParseDisplayName" -HKCR,"Interface\{0000011A-0000-0000-C000-000000000046}\NumMethods","",0x00000000,"4" -HKCR,"Interface\{0000011A-0000-0000-C000-000000000046}\ProxyStubClsid32","",0x00000000,"{00000320-0000-0000-C000-000000000046}" - -HKCR,"Interface\{0000011B-0000-0000-C000-000000000046}","",0x00000000,"IOleContainer" -HKCR,"Interface\{0000011B-0000-0000-C000-000000000046}\BaseInterface","",0x00000000,"{0000011A-0000-0000-C000-000000000046}" -HKCR,"Interface\{0000011B-0000-0000-C000-000000000046}\NumMethods","",0x00000000,"6" -HKCR,"Interface\{0000011B-0000-0000-C000-000000000046}\ProxyStubClsid32","",0x00000000,"{00000320-0000-0000-C000-000000000046}" - -HKCR,"Interface\{0000011C-0000-0000-C000-000000000046}","",0x00000000,"IOleItemContainer" -HKCR,"Interface\{0000011C-0000-0000-C000-000000000046}\BaseInterface","",0x00000000,"{0000011B-0000-0000-C000-000000000046}" -HKCR,"Interface\{0000011C-0000-0000-C000-000000000046}\NumMethods","",0x00000000,"9" -HKCR,"Interface\{0000011C-0000-0000-C000-000000000046}\ProxyStubClsid32","",0x00000000,"{00000320-0000-0000-C000-000000000046}" - -HKCR,"Interface\{0000011D-0000-0000-C000-000000000046}","",0x00000000,"IOleLink" -HKCR,"Interface\{0000011D-0000-0000-C000-000000000046}\NumMethods","",0x00000000,"14" -HKCR,"Interface\{0000011D-0000-0000-C000-000000000046}\ProxyStubClsid32","",0x00000000,"{00000320-0000-0000-C000-000000000046}" - -HKCR,"Interface\{0000011E-0000-0000-C000-000000000046}","",0x00000000,"IOleCache" -HKCR,"Interface\{0000011E-0000-0000-C000-000000000046}\NumMethods","",0x00000000,"8" -HKCR,"Interface\{0000011E-0000-0000-C000-000000000046}\ProxyStubClsid32","",0x00000000,"{00000320-0000-0000-C000-000000000046}" - -HKCR,"Interface\{0000011F-0000-0000-C000-000000000046}","",0x00000000,"IOleManager" - -HKCR,"Interface\{00000120-0000-0000-C000-000000000046}","",0x00000000,"IOlePresObj" - -HKCR,"Interface\{00000121-0000-0000-C000-000000000046}","",0x00000000,"IDropSource" -HKCR,"Interface\{00000121-0000-0000-C000-000000000046}\NumMethods","",0x00000000,"5" - -HKCR,"Interface\{00000122-0000-0000-C000-000000000046}","",0x00000000,"IDropTarget" -HKCR,"Interface\{00000122-0000-0000-C000-000000000046}\NumMethods","",0x00000000,"7" -HKCR,"Interface\{00000122-0000-0000-C000-000000000046}\ProxyStubClsid32","",0x00000000,"{00000320-0000-0000-C000-000000000046}" HKCR,"NDS\Clsid","",0x00000002,"{323991f0-7bad-11cf-b03d-00aa006e0975}" @@ -601,62 +388,65 @@ HKCR,"MIME\Database\Rfc1766",,0x00000012 HKCR,"MIME\Database\Rfc1766","0436",0x00000000,"af;Afrikaans" HKCR,"MIME\Database\Rfc1766","041C",0x00000000,"sq;Albanian" HKCR,"MIME\Database\Rfc1766","0001",0x00000000,"ar;Arabic" -HKCR,"MIME\Database\Rfc1766","0401",0x00000000,"ar-sa;Arabic (Saudi Arabia)" -HKCR,"MIME\Database\Rfc1766","0801",0x00000000,"ar-iq;Arabic (Iraq)" -HKCR,"MIME\Database\Rfc1766","0C01",0x00000000,"ar-eg;Arabic (Egypt)" -HKCR,"MIME\Database\Rfc1766","1001",0x00000000,"ar-ly;Arabic (Libya)" HKCR,"MIME\Database\Rfc1766","1401",0x00000000,"ar-dz;Arabic (Algeria)" -HKCR,"MIME\Database\Rfc1766","1801",0x00000000,"ar-ma;Arabic (Morocco)" -HKCR,"MIME\Database\Rfc1766","1C01",0x00000000,"ar-tn;Arabic (Tunisia)" -HKCR,"MIME\Database\Rfc1766","2001",0x00000000,"ar-om;Arabic (Oman)" -HKCR,"MIME\Database\Rfc1766","2401",0x00000000,"ar-ye;Arabic (Yemen)" -HKCR,"MIME\Database\Rfc1766","2801",0x00000000,"ar-sy;Arabic (Syria)" -HKCR,"MIME\Database\Rfc1766","2C01",0x00000000,"ar-jo;Arabic (Jordan)" -HKCR,"MIME\Database\Rfc1766","3001",0x00000000,"ar-lb;Arabic (Lebanon)" -HKCR,"MIME\Database\Rfc1766","3401",0x00000000,"ar-kw;Arabic (Kuwait)" -HKCR,"MIME\Database\Rfc1766","3801",0x00000000,"ar-ae;Arabic (U.A.E.)" HKCR,"MIME\Database\Rfc1766","3C01",0x00000000,"ar-bh;Arabic (Bahrain)" +HKCR,"MIME\Database\Rfc1766","0C01",0x00000000,"ar-eg;Arabic (Egypt)" +HKCR,"MIME\Database\Rfc1766","0801",0x00000000,"ar-iq;Arabic (Iraq)" +HKCR,"MIME\Database\Rfc1766","2C01",0x00000000,"ar-jo;Arabic (Jordan)" +HKCR,"MIME\Database\Rfc1766","3401",0x00000000,"ar-kw;Arabic (Kuwait)" +HKCR,"MIME\Database\Rfc1766","3001",0x00000000,"ar-lb;Arabic (Lebanon)" +HKCR,"MIME\Database\Rfc1766","1001",0x00000000,"ar-ly;Arabic (Libya)" +HKCR,"MIME\Database\Rfc1766","1801",0x00000000,"ar-ma;Arabic (Morocco)" +HKCR,"MIME\Database\Rfc1766","2001",0x00000000,"ar-om;Arabic (Oman)" HKCR,"MIME\Database\Rfc1766","4001",0x00000000,"ar-qa;Arabic (Qatar)" +HKCR,"MIME\Database\Rfc1766","0401",0x00000000,"ar-sa;Arabic (Saudi Arabia)" +HKCR,"MIME\Database\Rfc1766","2801",0x00000000,"ar-sy;Arabic (Syria)" +HKCR,"MIME\Database\Rfc1766","1C01",0x00000000,"ar-tn;Arabic (Tunisia)" +HKCR,"MIME\Database\Rfc1766","3801",0x00000000,"ar-ae;Arabic (U.A.E.)" +HKCR,"MIME\Database\Rfc1766","2401",0x00000000,"ar-ye;Arabic (Yemen)" +HKCR,"MIME\Database\Rfc1766","042B",0x00000000,"hy;Armenian" HKCR,"MIME\Database\Rfc1766","042D",0x00000000,"eu;Basque" -HKCR,"MIME\Database\Rfc1766","0402",0x00000000,"bg;Bulgarian" HKCR,"MIME\Database\Rfc1766","0423",0x00000000,"be;Belarusian" +HKCR,"MIME\Database\Rfc1766","0445",0x00000000,"bn;Bengali" +HKCR,"MIME\Database\Rfc1766","0402",0x00000000,"bg;Bulgarian" HKCR,"MIME\Database\Rfc1766","0403",0x00000000,"ca;Catalan" HKCR,"MIME\Database\Rfc1766","0004",0x00000000,"zh;Chinese" -HKCR,"MIME\Database\Rfc1766","0404",0x00000000,"zh-tw;Chinese (Taiwan)" HKCR,"MIME\Database\Rfc1766","0804",0x00000000,"zh-cn;Chinese (China)" HKCR,"MIME\Database\Rfc1766","0C04",0x00000000,"zh-hk;Chinese (Hong Kong SAR)" HKCR,"MIME\Database\Rfc1766","1004",0x00000000,"zh-sg;Chinese (Singapore)" +HKCR,"MIME\Database\Rfc1766","0404",0x00000000,"zh-tw;Chinese (Taiwan)" HKCR,"MIME\Database\Rfc1766","041A",0x00000000,"hr;Croatian" HKCR,"MIME\Database\Rfc1766","0405",0x00000000,"cs;Czech" HKCR,"MIME\Database\Rfc1766","0406",0x00000000,"da;Danish" -HKCR,"MIME\Database\Rfc1766","0413",0x00000000,"nl;Dutch (Netherlands)" HKCR,"MIME\Database\Rfc1766","0813",0x00000000,"nl-be;Dutch (Belgium)" +HKCR,"MIME\Database\Rfc1766","0413",0x00000000,"nl;Dutch (Netherlands)" HKCR,"MIME\Database\Rfc1766","0009",0x00000000,"en;English" -HKCR,"MIME\Database\Rfc1766","0409",0x00000000,"en-us;English (United States)" -HKCR,"MIME\Database\Rfc1766","0809",0x00000000,"en-gb;English (United Kingdom)" HKCR,"MIME\Database\Rfc1766","0C09",0x00000000,"en-au;English (Australia)" -HKCR,"MIME\Database\Rfc1766","1009",0x00000000,"en-ca;English (Canada)" -HKCR,"MIME\Database\Rfc1766","1409",0x00000000,"en-nz;English (New Zealand)" -HKCR,"MIME\Database\Rfc1766","1809",0x00000000,"en-ie;English (Ireland)" -HKCR,"MIME\Database\Rfc1766","1C09",0x00000000,"en-za;English (South Africa)" -HKCR,"MIME\Database\Rfc1766","2009",0x00000000,"en-jm;English (Jamaica)" HKCR,"MIME\Database\Rfc1766","2809",0x00000000,"en-bz;English (Belize)" +HKCR,"MIME\Database\Rfc1766","1009",0x00000000,"en-ca;English (Canada)" +HKCR,"MIME\Database\Rfc1766","1809",0x00000000,"en-ie;English (Ireland)" +HKCR,"MIME\Database\Rfc1766","2009",0x00000000,"en-jm;English (Jamaica)" +HKCR,"MIME\Database\Rfc1766","1409",0x00000000,"en-nz;English (New Zealand)" +HKCR,"MIME\Database\Rfc1766","1C09",0x00000000,"en-za;English (South Africa)" HKCR,"MIME\Database\Rfc1766","2C09",0x00000000,"en-tt;English (Trinidad)" +HKCR,"MIME\Database\Rfc1766","0809",0x00000000,"en-gb;English (United Kingdom)" +HKCR,"MIME\Database\Rfc1766","0409",0x00000000,"en-us;English (United States)" +HKCR,"MIME\Database\Rfc1766","048F",0x00000000,"eo;Esperanto" HKCR,"MIME\Database\Rfc1766","0425",0x00000000,"et;Estonian" HKCR,"MIME\Database\Rfc1766","0438",0x00000000,"fo;Faeroese" HKCR,"MIME\Database\Rfc1766","0429",0x00000000,"fa;Farsi" HKCR,"MIME\Database\Rfc1766","040B",0x00000000,"fi;Finnish" -HKCR,"MIME\Database\Rfc1766","040C",0x00000000,"fr;French (France)" HKCR,"MIME\Database\Rfc1766","080C",0x00000000,"fr-be;French (Belgium)" HKCR,"MIME\Database\Rfc1766","0C0C",0x00000000,"fr-ca;French (Canada)" -HKCR,"MIME\Database\Rfc1766","100C",0x00000000,"fr-ch;French (Switzerland)" +HKCR,"MIME\Database\Rfc1766","040C",0x00000000,"fr;French (France)" HKCR,"MIME\Database\Rfc1766","140C",0x00000000,"fr-lu;French (Luxembourg)" +HKCR,"MIME\Database\Rfc1766","100C",0x00000000,"fr-ch;French (Switzerland)" HKCR,"MIME\Database\Rfc1766","043C",0x00000000,"gd;Gaelic" -HKCR,"MIME\Database\Rfc1766","0407",0x00000000,"de;German (Germany)" -HKCR,"MIME\Database\Rfc1766","0807",0x00000000,"de-ch;German (Switzerland)" HKCR,"MIME\Database\Rfc1766","0C07",0x00000000,"de-at;German (Austria)" -HKCR,"MIME\Database\Rfc1766","1007",0x00000000,"de-lu;German (Luxembourg)" +HKCR,"MIME\Database\Rfc1766","0407",0x00000000,"de;German (Germany)" HKCR,"MIME\Database\Rfc1766","1407",0x00000000,"de-li;German (Liechtenstein)" +HKCR,"MIME\Database\Rfc1766","1007",0x00000000,"de-lu;German (Luxembourg)" +HKCR,"MIME\Database\Rfc1766","0807",0x00000000,"de-ch;German (Switzerland)" HKCR,"MIME\Database\Rfc1766","0408",0x00000000,"el;Greek" HKCR,"MIME\Database\Rfc1766","040D",0x00000000,"he;Hebrew" HKCR,"MIME\Database\Rfc1766","0439",0x00000000,"hi;Hindi" @@ -687,26 +477,26 @@ HKCR,"MIME\Database\Rfc1766","081A",0x00000000,"sr;Serbian (Latin)" HKCR,"MIME\Database\Rfc1766","041B",0x00000000,"sk;Slovak" HKCR,"MIME\Database\Rfc1766","0424",0x00000000,"sl;Slovenian" HKCR,"MIME\Database\Rfc1766","042E",0x00000000,"sb;Sorbian" -HKCR,"MIME\Database\Rfc1766","040A",0x00000000,"es;Spanish (Traditional Sort)" -HKCR,"MIME\Database\Rfc1766","080A",0x00000000,"es-mx;Spanish (Mexico)" -HKCR,"MIME\Database\Rfc1766","0C0A",0x00000000,"es;Spanish (International Sort)" -HKCR,"MIME\Database\Rfc1766","100A",0x00000000,"es-gt;Spanish (Guatemala)" -HKCR,"MIME\Database\Rfc1766","140A",0x00000000,"es-cr;Spanish (Costa Rica)" -HKCR,"MIME\Database\Rfc1766","180A",0x00000000,"es-pa;Spanish (Panama)" -HKCR,"MIME\Database\Rfc1766","1C0A",0x00000000,"es-do;Spanish (Dominican Republic)" -HKCR,"MIME\Database\Rfc1766","200A",0x00000000,"es-ve;Spanish (Venezuela)" -HKCR,"MIME\Database\Rfc1766","240A",0x00000000,"es-co;Spanish (Colombia)" -HKCR,"MIME\Database\Rfc1766","280A",0x00000000,"es-pe;Spanish (Peru)" HKCR,"MIME\Database\Rfc1766","2C0A",0x00000000,"es-ar;Spanish (Argentina)" -HKCR,"MIME\Database\Rfc1766","300A",0x00000000,"es-ec;Spanish (Ecuador)" -HKCR,"MIME\Database\Rfc1766","340A",0x00000000,"es-cl;Spanish (Chile)" -HKCR,"MIME\Database\Rfc1766","380A",0x00000000,"es-uy;Spanish (Uruguay)" -HKCR,"MIME\Database\Rfc1766","3C0A",0x00000000,"es-py;Spanish (Paraguay)" HKCR,"MIME\Database\Rfc1766","400A",0x00000000,"es-bo;Spanish (Bolivia)" +HKCR,"MIME\Database\Rfc1766","340A",0x00000000,"es-cl;Spanish (Chile)" +HKCR,"MIME\Database\Rfc1766","240A",0x00000000,"es-co;Spanish (Colombia)" +HKCR,"MIME\Database\Rfc1766","140A",0x00000000,"es-cr;Spanish (Costa Rica)" +HKCR,"MIME\Database\Rfc1766","1C0A",0x00000000,"es-do;Spanish (Dominican Republic)" +HKCR,"MIME\Database\Rfc1766","300A",0x00000000,"es-ec;Spanish (Ecuador)" HKCR,"MIME\Database\Rfc1766","440A",0x00000000,"es-sv;Spanish (El Salvador)" +HKCR,"MIME\Database\Rfc1766","100A",0x00000000,"es-gt;Spanish (Guatemala)" HKCR,"MIME\Database\Rfc1766","480A",0x00000000,"es-hn;Spanish (Honduras)" +HKCR,"MIME\Database\Rfc1766","0C0A",0x00000000,"es;Spanish (International Sort)" +HKCR,"MIME\Database\Rfc1766","080A",0x00000000,"es-mx;Spanish (Mexico)" HKCR,"MIME\Database\Rfc1766","4C0A",0x00000000,"es-ni;Spanish (Nicaragua)" +HKCR,"MIME\Database\Rfc1766","180A",0x00000000,"es-pa;Spanish (Panama)" +HKCR,"MIME\Database\Rfc1766","3C0A",0x00000000,"es-py;Spanish (Paraguay)" +HKCR,"MIME\Database\Rfc1766","280A",0x00000000,"es-pe;Spanish (Peru)" HKCR,"MIME\Database\Rfc1766","500A",0x00000000,"es-pr;Spanish (Puerto Rico)" +HKCR,"MIME\Database\Rfc1766","040A",0x00000000,"es;Spanish (Traditional Sort)" +HKCR,"MIME\Database\Rfc1766","380A",0x00000000,"es-uy;Spanish (Uruguay)" +HKCR,"MIME\Database\Rfc1766","200A",0x00000000,"es-ve;Spanish (Venezuela)" HKCR,"MIME\Database\Rfc1766","0430",0x00000000,"sx;Sutu" HKCR,"MIME\Database\Rfc1766","041D",0x00000000,"sv;Swedish" HKCR,"MIME\Database\Rfc1766","081D",0x00000000,"sv-fi;Swedish (Finland)" @@ -717,111 +507,17 @@ HKCR,"MIME\Database\Rfc1766","041F",0x00000000,"tr;Turkish" HKCR,"MIME\Database\Rfc1766","0422",0x00000000,"uk;Ukrainian" HKCR,"MIME\Database\Rfc1766","0420",0x00000000,"ur;Urdu" HKCR,"MIME\Database\Rfc1766","042A",0x00000000,"vi;Vietnamese" +HKCR,"MIME\Database\Rfc1766","0490",0x00000000,"wa;Walloon" HKCR,"MIME\Database\Rfc1766","0434",0x00000000,"xh;Xhosa" HKCR,"MIME\Database\Rfc1766","043D",0x00000000,"ji;Yiddish" HKCR,"MIME\Database\Rfc1766","0435",0x00000000,"zu;Zulu" -HKCR,"CLSID\{FBF23B42-E3F0-101B-8488-00AA003E56F8}",,,"Internet Explorer(Ver 1.0)" -HKCR,"CLSID\{FBF23B42-E3F0-101B-8488-00AA003E56F8}\LocalServer32",,,"iexplore.exe" -HKCR,"CLSID\{FBF23B42-E3F0-101B-8488-00AA003E56F8}\ProgID",,,"InternetExplorer.Application.1" -HKCR,"CLSID\{FBF23B42-E3F0-101B-8488-00AA003E56F8}\VersionIndependentProgID",,,"InternetExplorer.Application" -HKCR,"InternetExplorer.Application",,,"Internet Explorer(Ver 1.0)" -HKCR,"InternetExplorer.Application\CLSID",,,"{FBF23B42-E3F0-101B-8488-00AA003E56F8}" -HKCR,"InternetExplorer.Application\CurVer",,,"InternetExplorer.Application.1" -HKCR,"InternetExplorer.Application.1",,,"Internet Explorer(Ver 1.0)" -HKCR,"InternetExplorer.Application.1\CLSID",,,"{FBF23B42-E3F0-101B-8488-00AA003E56F8}" - -;HKCR,"CLSID\%CLSID_SearchAssistantOC%",,,"SearchAssistantOC" -;HKCR,"CLSID\%CLSID_SearchAssistantOC%\InProcServer32",,,"shdocvw.dll" -;HKCR,"CLSID\%CLSID_SearchAssistantOC%\InProcServer32","ThreadingModel",,"Apartment" -;HKCR,"CLSID\%CLSID_SearchAssistantOC%\ProgID",,,"SearchAssistantOC.SearchAssistantOC.1" -;HKCR,"CLSID\%CLSID_SearchAssistantOC%\VersionIndependentProgID",,,"SearchAssistantOC.SearchAssistantOC" -;HKCR,"SearchAssistantOC.SearchAssistantOC",,,"" -;HKCR,"SearchAssistantOC.SearchAssistantOC\CLSID",,,"%CLSID_SearchAssistantOC%" -;HKCR,"SearchAssistantOC.SearchAssistantOC\CurVer",,,"SearchAssistantOC.SearchAssistantOC.1" -;HKCR,"SearchAssistantOC.SearchAssistantOC.1",,,"" -;HKCR,"SearchAssistantOC.SearchAssistantOC.1\CLSID",,,"%CLSID_SearchAssistantOC%" - -HKCR,"CLSID\{55136805-B2DE-11D1-B9F2-00A0C98BC547}",,,"Shell Name Space" -HKCR,"CLSID\{55136805-B2DE-11D1-B9F2-00A0C98BC547}\InProcServer32",,,"shdocvw.dll" -HKCR,"CLSID\{55136805-B2DE-11D1-B9F2-00A0C98BC547}\InProcServer32","ThreadingModel",,"Apartment" -HKCR,"CLSID\{55136805-B2DE-11D1-B9F2-00A0C98BC547}\ProgID",,,"ShellNameSpace.ShellNameSpace.1" -HKCR,"CLSID\{55136805-B2DE-11D1-B9F2-00A0C98BC547}\VersionIndependentProgID",,,"ShellNameSpace.ShellNameSpace" - -HKCR,"CLSID\{3C374A40-BAE4-11CF-BF7D-00AA006946EE}",,,"Microsoft Url History Service" -HKCR,"CLSID\{3C374A40-BAE4-11CF-BF7D-00AA006946EE}\InProcServer32",,,"shdocvw.dll" -HKCR,"CLSID\{3C374A40-BAE4-11CF-BF7D-00AA006946EE}\InProcServer32","ThreadingModel",,"Apartment" - -;HKCR,"CLSID\%CLSID_MruLongList%",,,"MruLongList" -;HKCR,"CLSID\%CLSID_MruLongList%\InProcServer32",,,"shdocvw.dll" -;HKCR,"CLSID\%CLSID_MruLongList%\InProcServer32","ThreadingModel",,"Apartment" - -;HKCR,"CLSID\%CLSID_ShellShellNameSpace%",,,"Shell Name Space" -;HKCR,"CLSID\%CLSID_ShellShellNameSpace%\InProcServer32",,,"shdocvw.dll" -;HKCR,"CLSID\%CLSID_ShellShellNameSpace%\InProcServer32","ThreadingModel",,"Apartment" -;HKCR,"CLSID\%CLSID_ShellShellNameSpace%\ProgID",,,"ShellNameSpace.ShellNameSpace.1" -;HKCR,"CLSID\%CLSID_ShellShellNameSpace%\VersionIndependentProgID",,,"ShellNameSpace.ShellNameSpace" - -HKCR,"CLSID\{729FE2F8-1EA8-11D1-8F85-00C04FC2FBE1}",,,"Microsoft Shell UI Helper" -HKCR,"CLSID\{729FE2F8-1EA8-11D1-8F85-00C04FC2FBE1}\InProcServer32",,,"shdocvw.dll" -HKCR,"CLSID\{729FE2F8-1EA8-11D1-8F85-00C04FC2FBE1}\InProcServer32","ThreadingModel",,"Apartment" -HKCR,"CLSID\{729FE2F8-1EA8-11D1-8F85-00C04FC2FBE1}\ProgID",,,"Shell.UIHelper.1" -HKCR,"Shell.UIHelper",,,"Microsoft Shell UI Helper" -HKCR,"Shell.UIHelper\CLSID",,,"{729FE2F8-1EA8-11D1-8F85-00C04FC2FBE1}" -HKCR,"Shell.UIHelper\CurVer",,,"Shell.UIHelper.2" -HKCR,"Shell.UIHelper.1",,,"" -HKCR,"Shell.UIHelper.1\CLSID",,,"{729FE2F8-1EA8-11D1-8F85-00C04FC2FBE1}" - -HKCR,"CLSID\{871C5380-42A0-1069-A2EA-08002B30309D}",,,"Internet Explorer" -HKCR,"CLSID\{871C5380-42A0-1069-A2EA-08002B30309D}\InProcServer32",,,"shdocvw.dll" -HKCR,"CLSID\{871C5380-42A0-1069-A2EA-08002B30309D}\InProcServer32","ThreadingModel",,"Apartment" -HKCR,"CLSID\{871C5380-42A0-1069-A2EA-08002B30309D}\ShellFolder",,2,"0x24" - -HKCR,"CLSID\{8856F961-340A-11D0-A96B-00C04FD705A2}",,,"Microsoft Web Browser" -HKCR,"CLSID\{8856F961-340A-11D0-A96B-00C04FD705A2}\InProcServer32",,,"shdocvw.dll" -HKCR,"CLSID\{8856F961-340A-11D0-A96B-00C04FD705A2}\InProcServer32","ThreadingModel",,"Apartment" -HKCR,"CLSID\{8856F961-340A-11D0-A96B-00C04FD705A2}\ProgID",,,"Shell.Explorer.2" -HKCR,"CLSID\{8856F961-340A-11D0-A96B-00C04FD705A2}\VersionIndependentProgID",,,"Shell.Explorer" -HKCR,"Shell.Explorer",,,"Microsoft Web Browser" -HKCR,"Shell.Explorer\CLSID",,,"{8856F961-340A-11D0-A96B-00C04FD705A2}" -HKCR,"Shell.Explorer\CurVer",,,"Shell.Explorer.2" -HKCR,"Shell.Explorer.2",,,"" -HKCR,"Shell.Explorer.2\CLSID",,,"{8856F961-340A-11D0-A96B-00C04FD705A2}" - -HKCR,"CLSID\{9BA05972-F6A8-11CF-A442-00A0C90A8F39}",,,"ShellWindows" -HKCR,"CLSID\{9BA05972-F6A8-11CF-A442-00A0C90A8F39}\InProcServer32",,,"shdocvw.dll" -HKCR,"CLSID\{9BA05972-F6A8-11CF-A442-00A0C90A8F39}\InProcServer32","ThreadingModel",,"Apartment" - -;HKCR,"CLSID\%CLSID_MicrosoftBrowserArchitecture%",,,"Microsoft Browser Architecture" -;HKCR,"CLSID\%CLSID_MicrosoftBrowserArchitecture%\InProcServer32",,,"shdocvw.dll" -;HKCR,"CLSID\%CLSID_MicrosoftBrowserArchitecture%\InProcServer32","ThreadingModel",,"Apartment" - -;HKCR,"CLSID\%CLSID_ShellSearchAssistantOC%",,,"SearchAssistantOC" -;HKCR,"CLSID\%CLSID_ShellSearchAssistantOC%\InProcServer32",,,"shdocvw.dll" -;HKCR,"CLSID\%CLSID_ShellSearchAssistantOC%\InProcServer32","ThreadingModel",,"Apartment" -;HKCR,"CLSID\%CLSID_ShellSearchAssistantOC%\ProgID",,,"SearchAssistantOC.SearchAssistantOC.1" -;HKCR,"CLSID\%CLSID_ShellSearchAssistantOC%\VersionIndependentProgID",,,"SearchAssistantOC.SearchAssistantOC" - -HKCR,"CLSID\{EAB22AC3-30C1-11CF-A7EB-0000C05BAE0B0}",,,"Microsoft Web Browser Version 1" -HKCR,"CLSID\{EAB22AC3-30C1-11CF-A7EB-0000C05BAE0B0}\InProcServer32",,,"shdocvw.dll" -HKCR,"CLSID\{EAB22AC3-30C1-11CF-A7EB-0000C05BAE0B0}\InProcServer32","ThreadingModel",,"Apartment" -HKCR,"CLSID\{EAB22AC3-30C1-11CF-A7EB-0000C05BAE0B0}\ProgID",,,"Shell.Explorer.1" -HKCR,"CLSID\{EAB22AC3-30C1-11CF-A7EB-0000C05BAE0B0}\VersionIndependentProgID",,,"Shell.Explorer" -HKCR,"Shell.Explorer.1",,,"" -HKCR,"Shell.Explorer.1\CLSID",,,"{EAB22AC3-30C1-11CF-A7EB-0000C05BAE0B0}" -HKCR,"CLSID\{FBF23B40-E3F0-101B-8488-00AA003E56F8}",,,"Internet Shortcut" -HKCR,"CLSID\{FBF23B40-E3F0-101B-8488-00AA003E56F8}\InProcServer32",,,"shdocvw.dll" -HKCR,"CLSID\{FBF23B40-E3F0-101B-8488-00AA003E56F8}\InProcServer32","ThreadingModel",,"Apartment" -HKCR,"CLSID\{FBF23B40-E3F0-101B-8488-00AA003E56F8}\ProgID",,,"InternetShortcut" -HKCR,"CLSID\{FBF23B40-E3F0-101B-8488-00AA003E56F8}\shellex\MayChangeDefaultMenu",,, -HKCR,"InternetShortcut",,,"Internet Shortcut" -HKCR,"InternetShortcut","EditFlags",2,"2" -HKCR,"InternetShortcut","IsShortcut",, -HKCR,"InternetShortcut","NeverShowExt",, -;HKCR,"InternetShortcut\CLSID",,,"%CLSID_InteretShortcut%" -HKCR,"InternetShortcut\DefaultIcon",,,"url.dll,0" -HKCR,"InternetShortcut\shell\open\command",,,"rundll32.exe shdocvw.dll,OpenURL %l" -HKCR,"InternetShortcut\shell\print\command",,,"rundll32.exe mshtml.dll,PrintHTML \"%1\"" -HKCR,"InternetShortcut\shell\printto\command",,,"rundll32.exe mshtml.dll,PrintHTML \"%1\" \"%2\" \"%3\" \"%4\"" +HKCR,TypeLib\{00020430-0000-0000-C000-000000000046}\1.0,,,"OLE Automation" +HKCR,TypeLib\{00020430-0000-0000-C000-000000000046}\1.0\0\win16,,,"stdole.tlb" +HKCR,TypeLib\{00020430-0000-0000-C000-000000000046}\1.0\0\win32,,,"stdole32.tlb" +HKCR,TypeLib\{00020430-0000-0000-C000-000000000046}\1.0\FLAGS,,,"1" +HKCR,TypeLib\{00020430-0000-0000-C000-000000000046}\2.0,,,"OLE Automation" +HKCR,TypeLib\{00020430-0000-0000-C000-000000000046}\2.0\0\win32,,,"stdole2.tlb" +HKCR,TypeLib\{00020430-0000-0000-C000-000000000046}\2.0\FLAGS,,,"0" ; EOF diff --git a/reactos/boot/bootdata/hivedef_amd64.inf b/reactos/boot/bootdata/hivedef_amd64.inf index 6a05c2d462f..404953a6257 100644 --- a/reactos/boot/bootdata/hivedef_amd64.inf +++ b/reactos/boot/bootdata/hivedef_amd64.inf @@ -3,57 +3,275 @@ Signature="$ReactOS$ [AddReg] -HKCU,"Control Panel",,0x00000012 -HKCU,"Control Panel\Appearance",,0x00000012 -HKCU,"Control Panel\Mouse","MouseTrails",0x00010001,0x00000000 -HKCU,"Control Panel\Mouse","SnapToDefaultButton",0x00010001,0x00000000 -HKCU,"Control Panel\Mouse","MouseSpeed",0x00010001,0x00000001 -HKCU,"Control Panel\Mouse","MouseThreshold1",0x00010001,0x00000006 -HKCU,"Control Panel\Mouse","MouseThreshold2",0x00010001,0x0000000A -HKCU,"Control Panel\Mouse","DoubleClickSpeed",0x00010001,0x000001E0 -HKCU,"Control Panel\Mouse","SwapMouseButtons",0x00010001,0x00000000 +HKCU,"Console","CursorSize",0x00010003,25 +HKCU,"Console","FaceName",0x00000002,"" +HKCU,"Console","FontFamily",0x00010003,0 +HKCU,"Console","FontSize",0x00010003,0 +HKCU,"Console","FontWeight",0x00010003,0 +HKCU,"Console","FullScreen",0x00010003,0 +HKCU,"Console","HistoryBufferSize",0x00010003,50 +HKCU,"Console","InsertMode",0x00010003,1 +HKCU,"Console","LoadConIme",0x00010003,1 +HKCU,"Console","NumberOfHistoryBuffers",0x00010003,4 +HKCU,"Console","PopupColors",0x00010003,245 +HKCU,"Console","QuickEdit",0x00010003,0 +HKCU,"Console","ScreenBufferSize",0x00010003,19660880 +HKCU,"Console","ScreenColors",0x00010003,7 +HKCU,"Console","WindowSize",0x00010003,1638480 +HKCU,"Console","ColorTable00",0x00010003,0 +HKCU,"Console","ColorTable01",0x00010003,8388608 +HKCU,"Console","ColorTable02",0x00010003,32768 +HKCU,"Console","ColorTable03",0x00010003,8421376 +HKCU,"Console","ColorTable04",0x00010003,128 +HKCU,"Console","ColorTable05",0x00010003,8388736 +HKCU,"Console","ColorTable06",0x00010003,32896 +HKCU,"Console","ColorTable07",0x00010003,12632256 +HKCU,"Console","ColorTable08",0x00010003,8421504 +HKCU,"Console","ColorTable09",0x00010003,16711680 +HKCU,"Console","ColorTable10",0x00010003,65280 +HKCU,"Console","ColorTable11",0x00010003,16776960 +HKCU,"Console","ColorTable12",0x00010003,255 +HKCU,"Console","ColorTable13",0x00010003,16711935 +HKCU,"Console","ColorTable14",0x00010003,65535 +HKCU,"Console","ColorTable15",0x00010003,16777215 -HKCU,"Control Panel\Desktop","AutoEndTasks",0x00000002,"0" -HKCU,"Control Panel\Desktop","CursorBlinkRate",0x00000002,"530" -HKCU,"Control Panel\Desktop","DragFullWindows",0x00000002,"0" +HKCU,"Control Panel",,0x00000012 + +; Accessibility +HKCU,"Control Panel\Accessibility",,0x00000012 +HKCU,"Control Panel\Accessibility\Keyboard Preference",,0x00000012 +HKCU,"Control Panel\Accessibility\Keyboard Preference","On",2,"0" +HKCU,"Control Panel\Accessibility\HighContrast","Flags",2,"126" +HKCU,"Control Panel\Accessibility\HighContrast","High Contrast Scheme",2,"High Contrast Black (large)" +HKCU,"Control Panel\Accessibility\Keyboard Response","AutoRepeatDelay",2,"1000" +HKCU,"Control Panel\Accessibility\Keyboard Response","AutoRepeatRate",2,"500" +HKCU,"Control Panel\Accessibility\Keyboard Response","BounceTime",2,"0" +HKCU,"Control Panel\Accessibility\Keyboard Response","DelayBeforeAcceptance",2,"1000" +HKCU,"Control Panel\Accessibility\Keyboard Response","Flags",2,"126" +HKCU,"Control Panel\Accessibility\MouseKeys","Flags",2,"62" +HKCU,"Control Panel\Accessibility\MouseKeys","MaximumSpeed",2,"80" +HKCU,"Control Panel\Accessibility\MouseKeys","TimeToMaximumSpeed",2,"3000" +HKCU,"Control Panel\Accessibility\ShowSounds","On",2,"0" +HKCU,"Control Panel\Accessibility\SoundSentry","Flags",2,"2" +HKCU,"Control Panel\Accessibility\SoundSentry","FSTextEffect",2,"0" +HKCU,"Control Panel\Accessibility\SoundSentry","WindowsEffect",2,"1" +HKCU,"Control Panel\Accessibility\StickyKeys","Flags",2,"510" +HKCU,"Control Panel\Accessibility\TimeOut","Flags",2,"2" +HKCU,"Control Panel\Accessibility\TimeOut","TimeToWait",2,"300000" +HKCU,"Control Panel\Accessibility\ToggleKeys","Flags",2,"62" +HKCU,"Control Panel\Accessibility\Blind Access","On",2,"0" + +HKCU,"Control Panel\Mouse","MouseTrails",0x00000002,"0" +HKCU,"Control Panel\Mouse","SnapToDefaultButton",0x00000002,"0" +HKCU,"Control Panel\Mouse","MouseSpeed",0x00000002,"1" +HKCU,"Control Panel\Mouse","MouseThreshold1",0x00000002,"6" +HKCU,"Control Panel\Mouse","MouseThreshold2",0x00000002,"10" +HKCU,"Control Panel\Mouse","DoubleClickSpeed",0x00000002,"500" +HKCU,"Control Panel\Mouse","SwapMouseButtons",0x00000002,"0" +HKCU,"Control Panel\Mouse","MouseSensitivity",0x00000002,"10" +HKCU,"Control Panel\Mouse","MouseHoverTime",0x00000002,"400" +HKCU,"Control Panel\Mouse","MouseHoverWidth",0x00000002,"4" +HKCU,"Control Panel\Mouse","MouseHoverHeight",0x00000002,"4" +HKCU,"Control Panel\Mouse","DoubleClickWidth",0x00000002,"4" +HKCU,"Control Panel\Mouse","DoubleClickHeight",0x00000002,"4" + +HKCU,"Control Panel\Keyboard","InitialKeyboardIndicators",2,"0x80000000" +HKCU,"Control Panel\Keyboard","KeyboardDelay",2,"1" +HKCU,"Control Panel\Keyboard","KeyboardSpeed",2,"31" + +HKCU,"Control Panel\Desktop","ActiveWndTrkTimeout",0x00010003,0x00000000 +HKCU,"Control Panel\Desktop","AutoEndTasks",2,"0" +HKCU,"Control Panel\Desktop","CaretWidth",0x00010003,0x00000001 +HKCU,"Control Panel\Desktop","CoolSwitch",2,"1" +HKCU,"Control Panel\Desktop","CoolSwitchColumns",2,"7" +HKCU,"Control Panel\Desktop","CoolSwitchRows",2,"3" +HKCU,"Control Panel\Desktop","CursorBlinkRate",2,"530" +HKCU,"Control Panel\Desktop","DragFullWindows",2,"0" +HKCU,"Control Panel\Desktop","DragHeight",0x00000000,"4" +HKCU,"Control Panel\Desktop","DragWidth",0x00000000,"4" HKCU,"Control Panel\Desktop","PaintDesktopVersion",0x00010001,"0" -HKCU,"Control Panel\Desktop","HungAppTimeout",0x00000002,"5000" -HKCU,"Control Panel\Desktop","SCRNSAVE.EXE",0x00000000,"" -HKCU,"Control Panel\Desktop","WaitToKillAppTimeout",0x00000002,"20000" +HKCU,"Control Panel\Desktop","HungAppTimeout",2,"5000" +HKCU,"Control Panel\Desktop","SCRNSAVE.EXE",0,"" +HKCU,"Control Panel\Desktop","ScreenSaveActive",2,"1" +HKCU,"Control Panel\Desktop","ScreenSaverIsSecure",2,"1" +HKCU,"Control Panel\Desktop","ScreenSaveTimeOut",0,"600" +HKCU,"Control Panel\Desktop","WaitToKillAppTimeout",2,"20000" HKCU,"Control Panel\Desktop","Wallpaper",0x00000000,"" +HKCU,"Control Panel\Desktop","FontSmoothing",2,"0" +HKCU,"Control Panel\Desktop","FontSmoothingOrientation",0x00010003,0x00000001 +HKCU,"Control Panel\Desktop","FontSmoothingType",0x00010003,0x00000001 +HKCU,"Control Panel\Desktop","ForegroundFlashCount",0x00010003,0x00000003 +HKCU,"Control Panel\Desktop","ForegroundLockTimeout",0x00010003,0x00030d40 +HKCU,"Control Panel\Desktop","GridGranularity",2,"0" +HKCU,"Control Panel\Desktop","SmoothScroll",3,00,00,00,00 +HKCU,"Control Panel\Desktop","UserPreferencesMask",3,10,00,00,80 +HKCU,"Control Panel\Desktop","LowPowerActive",2,"0" +HKCU,"Control Panel\Desktop","LowPowerTimeOut",2,"0" +HKCU,"Control Panel\Desktop","PowerOffActive",2,"0" +HKCU,"Control Panel\Desktop","PowerOffTimeOut",2,"0" +HKCU,"Control Panel\Desktop","MenuShowDelay",2,"400" +HKCU,"Control Panel\Desktop","WheelScrollLines",2,"3" +HKCU,"Control Panel\Desktop","WheelScrollChars",2,"3" +HKCU,"Control Panel\Desktop","TileWallpaper",2,"0" +HKCU,"Control Panel\Desktop","Pattern",2,"(None)" + +HKCU,"Control Panel\Desktop\WindowMetrics","ScrollWidth",2,"16" +HKCU,"Control Panel\Desktop\WindowMetrics","ScrollHeight",2,"16" +HKCU,"Control Panel\Desktop\WindowMetrics","CaptionWidth",2,"18" +HKCU,"Control Panel\Desktop\WindowMetrics","CaptionHeight",2,"18" +HKCU,"Control Panel\Desktop\WindowMetrics","SmCaptionWidth",2,"13" +HKCU,"Control Panel\Desktop\WindowMetrics","SmCaptionHeight",2,"15" +HKCU,"Control Panel\Desktop\WindowMetrics","MenuWidth",2,"18" +HKCU,"Control Panel\Desktop\WindowMetrics","MenuHeight",2,"18" +HKCU,"Control Panel\Desktop\WindowMetrics","BorderWidth",2,"1" +HKCU,"Control Panel\Desktop\WindowMetrics","Shell Icon Size",2,"32" +HKCU, "Control Panel\Desktop\WindowMetrics","CaptionFont",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,01,00,00,00,00,54,00,61,00,68,00,6f,00,6d,\ +00,61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU, "Control Panel\Desktop\WindowMetrics","IconFont",0x00000001,f5,ff,ff,ff,00,00,00,00,\ +00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,01,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,\ +61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU, "Control Panel\Desktop\WindowMetrics","MenuFont",0x00000001,f5,ff,ff,ff,00,00,00,00,\ +00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,01,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,\ +61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU, "Control Panel\Desktop\WindowMetrics","MessageFont",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,01,00,00,00,00,54,00,61,00,68,00,6f,00,6d,\ +00,61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU, "Control Panel\Desktop\WindowMetrics","SmCaptionFont",0x00000001,f5,ff,ff,ff,00,00,\ +00,00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,01,00,00,00,00,54,00,61,00,68,00,6f,00,\ +6d,00,61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU, "Control Panel\Desktop\WindowMetrics","StatusFont",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,01,00,00,00,00,54,00,61,00,68,00,6f,00,6d,\ +00,61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 + +; Input Methods +HKCU,"Control Panel\Input Method\Hot Keys",,0x00000012 +HKCU,"Control Panel\Input Method\Hot Keys\00000010","Key Modifiers",0x00030003,02,c0,00,00 +HKCU,"Control Panel\Input Method\Hot Keys\00000010","Target IME",0x00030003,00,00,00,00 +HKCU,"Control Panel\Input Method\Hot Keys\00000010","Virtual Key",0x00030003,20,00,00,00 +HKCU,"Control Panel\Input Method\Hot Keys\00000011","Key Modifiers",0x00030003,04,c0,00,00 +HKCU,"Control Panel\Input Method\Hot Keys\00000011","Target IME",0x00030003,00,00,00,00 +HKCU,"Control Panel\Input Method\Hot Keys\00000011","Virtual Key",0x00030003,20,00,00,00 +HKCU,"Control Panel\Input Method\Hot Keys\00000012","Key Modifiers",0x00030003,02,c0,00,00 +HKCU,"Control Panel\Input Method\Hot Keys\00000012","Target IME",0x00030003,00,00,00,00 +HKCU,"Control Panel\Input Method\Hot Keys\00000012","Virtual Key",0x00030003,be,00,00,00 +HKCU,"Control Panel\Input Method\Hot Keys\00000070","Key Modifiers",0x00030003,02,c0,00,00 +HKCU,"Control Panel\Input Method\Hot Keys\00000070","Target IME",0x00030003,00,00,00,00 +HKCU,"Control Panel\Input Method\Hot Keys\00000070","Virtual Key",0x00030003,20,00,00,00 +HKCU,"Control Panel\Input Method\Hot Keys\00000071","Key Modifiers",0x00030003,04,c0,00,00 +HKCU,"Control Panel\Input Method\Hot Keys\00000071","Target IME",0x00030003,00,00,00,00 +HKCU,"Control Panel\Input Method\Hot Keys\00000071","Virtual Key",0x00030003,20,00,00,00 +HKCU,"Control Panel\Input Method\Hot Keys\00000072","Key Modifiers",0x00030003,03,c0,00,00 +HKCU,"Control Panel\Input Method\Hot Keys\00000072","Target IME",0x00030003,00,00,00,00 +HKCU,"Control Panel\Input Method\Hot Keys\00000072","Virtual Key",0x00030003,bc,00,00,00 +HKCU,"Control Panel\Input Method\Hot Keys\00000200","Key Modifiers",0x00030003,03,C0,00,00 +HKCU,"Control Panel\Input Method\Hot Keys\00000200","Target IME",0x00030003,00,00,00,00 +HKCU,"Control Panel\Input Method\Hot Keys\00000200","Virtual Key",0x00030003,47,00,00,00 +HKCU,"Control Panel\Input Method\Hot Keys\00000201","Key Modifiers",0x00030003,03,c0,00,00 +HKCU,"Control Panel\Input Method\Hot Keys\00000201","Target IME",0x00030003,00,00,00,00 +HKCU,"Control Panel\Input Method\Hot Keys\00000201","Virtual Key",0x00030003,4b,00,00,00 +HKCU,"Control Panel\Input Method\Hot Keys\00000202","Key Modifiers",0x00030003,03,c0,00,00 +HKCU,"Control Panel\Input Method\Hot Keys\00000202","Target IME",0x00030003,00,00,00,00 +HKCU,"Control Panel\Input Method\Hot Keys\00000202","Virtual Key",0x00030003,4c,00,00,00 + +; International keys HKCU,"Control Panel\International",,0x00000012 HKCU,"Control Panel\International","Locale",0x00000000,"0409" +HKCU,"Control Panel\International","iCountry",2,"1" +HKCU,"Control Panel\International","iCurrDigits",2,"2" +HKCU,"Control Panel\International","iCurrency",2,"0" +HKCU,"Control Panel\International","iDate",2,"0" +HKCU,"Control Panel\International","iDigits",2,"2" +HKCU,"Control Panel\International","iLZero",2,"1" +HKCU,"Control Panel\International","iMeasure",2,"1" +HKCU,"Control Panel\International","iNegCurr",2,"0" +HKCU,"Control Panel\International","iTime",2,"0" +HKCU,"Control Panel\International","iTLZero",2,"0" +HKCU,"Control Panel\International","s1159",2,"AM" +HKCU,"Control Panel\International","s2359",2,"PM" +HKCU,"Control Panel\International","sCountry",2,"United States" +HKCU,"Control Panel\International","sCurrency",2,"$" +HKCU,"Control Panel\International","sDate",2,"/" +HKCU,"Control Panel\International","sDecimal",2,"." +;HKCU,"Control Panel\International","sLanguage",2,"ENU" +HKCU,"Control Panel\International","sList",2,"," +HKCU,"Control Panel\International","sLongDate",2,"dddd, MMMM dd, yyyy" +HKCU,"Control Panel\International","sShortDate",2,"M/d/yyyy" +HKCU,"Control Panel\International","sThousand",2,"," +HKCU,"Control Panel\International","sTime",2,":" HKCU,"Control Panel\International\Geo","Nation",0x00000000,"1" -;Cursors Schemes +; Cursors Schemes HKCU,"Control Panel\Cursors",,,"ReactOS Default" HKCU,"Control Panel\Cursors","Scheme Source",0x00010001,0x00000002 -;PowerCfg -HKCU,"Control Panel\PowerCfg","CurrentPowerPolicy",0x00000002,"0" -HKCU,"Control Panel\PowerCfg\GlobalPowerPolicy","Policies",0x00000001,01,00,00,00,03,\ -00,00,00,03,00,00,00,00,00,00,00,03,00,00,00,03,00,00,00,00,00,00,00,02,00,00,00,03,\ -00,00,00,00,00,00,00,02,00,00,00,03,00,00,00,00,00,00,00,00,00,00,00,01,00,00,00,00,\ -00,00,80,00,00,00,00,01,00,00,00,00,00,00,80,01,00,00,00,03,00,00,00,02,00,00,00,04,\ -00,00,c0,01,00,00,00,04,00,00,00,01,00,00,00,0a,00,00,00,00,00,00,00,03,00,00,00,01,\ -00,01,00,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,02,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,03,00,00,00,00,00,16,\ +; PowerCfg +HKCU,"Control Panel\PowerCfg","CurrentPowerPolicy",2,"0" +HKCU,"Control Panel\PowerCfg\GlobalPowerPolicy","Policies",0x00030003,01,00,00,00,00,\ +00,00,00,03,00,00,00,10,00,00,00,00,00,00,00,03,00,00,00,10,00,00,00,02,00,00,00,03,\ +00,00,00,00,00,00,00,02,00,00,00,03,00,00,00,00,00,00,00,02,00,00,00,01,00,00,00,00,\ +00,00,00,02,00,00,00,01,00,00,00,00,00,00,00,01,00,00,00,03,00,00,00,03,00,00,00,00,\ +00,00,C0,01,00,00,00,05,00,00,00,01,00,00,00,0A,00,00,00,00,00,00,00,03,00,00,00,01,\ +00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,16,\ 00,00,00 -HKCU,"Control Panel\PowerCfg\PowerPolicies\0","Name",0x00020000,"Home/Office Desk" -HKCU,"Control Panel\PowerCfg\PowerPolicies\0","Description",0x00020000,"This scheme is suited to most home or desktop computers that are left plugged in all the time." -HKCU,"Control Panel\PowerCfg\PowerPolicies\0","Policies",0x00000001,01,00,00,00,02,\ -00,00,00,01,00,00,00,00,00,00,00,02,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,2c,\ -01,00,00,32,32,00,03,04,00,00,00,04,00,00,00,00,00,00,00,00,00,00,00,b0,04,00,00,2c,\ -01,00,00,00,00,00,00,58,02,00,00,01,01,64,50,64,64,00,00 + +HKCU,"Control Panel\PowerCfg\PowerPolicies\0","Name",2,"Home/Office Desk" +HKCU,"Control Panel\PowerCfg\PowerPolicies\0","Description",2,"This scheme is suited to most home or desktop computers that are left plugged in all the time." +HKCU,"Control Panel\PowerCfg\PowerPolicies\0","Policies",0x00030003,01,00,00,00,02,00,\ +00,00,01,00,00,00,00,00,00,00,02,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,2C,01,\ +00,00,32,32,00,03,04,00,00,00,04,00,00,00,00,00,00,00,00,00,00,00,B0,04,00,00,2C,01,\ +00,00,00,00,00,00,58,02,00,00,01,01,64,50,64,64,00,00 + +HKCU,"Control Panel\PowerCfg\PowerPolicies\1","Name",2,"Portable/Laptop" +HKCU,"Control Panel\PowerCfg\PowerPolicies\1","Description",2,"This scheme is designed for extended battery life for portable computers on the road." +HKCU,"Control Panel\PowerCfg\PowerPolicies\1","Policies",0x00030003,01,00,00,00,02,00,\ +00,00,01,00,00,00,00,00,00,00,02,00,00,00,01,00,00,00,00,00,00,00,B0,04,00,00,2C,01,\ +00,00,32,32,03,03,04,00,00,00,04,00,00,00,00,00,00,00,00,00,00,00,84,03,00,00,2C,01,\ +00,00,08,07,00,00,2C,01,00,00,01,01,64,50,64,64,00,00 + +HKCU,"Control Panel\PowerCfg\PowerPolicies\2","Name",2,"Presentation" +HKCU,"Control Panel\PowerCfg\PowerPolicies\2","Description",2,"This scheme keeps the monitor on for doing presentations." +HKCU,"Control Panel\PowerCfg\PowerPolicies\2","Policies",0x00030003,01,00,00,00,02,00,\ +00,00,01,00,00,00,00,00,00,00,02,00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,84,03,\ +00,00,32,32,03,02,04,00,00,00,04,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,2C,01,00,00,01,01,50,50,64,64,00,00 + +HKCU,"Control Panel\PowerCfg\PowerPolicies\3","Name",2,"Always On" +HKCU,"Control Panel\PowerCfg\PowerPolicies\3","Description",2,"This scheme keeps the computer running so that it can be accessed from the network. Use this scheme if you do not have network wakeup hardware." +HKCU,"Control Panel\PowerCfg\PowerPolicies\3","Policies",0x00030003,01,00,00,00,02,00,\ +00,00,01,00,00,00,00,00,00,00,02,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,32,32,00,00,04,00,00,00,04,00,00,00,00,00,00,00,00,00,00,00,B0,04,00,00,84,03,\ +00,00,00,00,00,00,08,07,00,00,00,01,64,64,64,64,00,00 + +HKCU,"Control Panel\PowerCfg\PowerPolicies\4","Name",2,"Minimal Power Management" +HKCU,"Control Panel\PowerCfg\PowerPolicies\4","Description",2,"This scheme keeps the computer on and optimizes it for high performance." +HKCU,"Control Panel\PowerCfg\PowerPolicies\4","Policies",0x00030003,01,00,00,00,02,00,\ +00,00,01,00,00,00,00,00,00,00,02,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,2C,01,\ +00,00,32,32,03,03,04,00,00,00,04,00,00,00,00,00,00,00,00,00,00,00,84,03,00,00,2C,01,\ +00,00,00,00,00,00,84,03,00,00,00,01,64,64,64,64,00,00 + +HKCU,"Control Panel\PowerCfg\PowerPolicies\5","Name",2,"Max Battery" +HKCU,"Control Panel\PowerCfg\PowerPolicies\5","Description",2,"This scheme is extremely aggressive for saving power." +HKCU,"Control Panel\PowerCfg\PowerPolicies\5","Policies",0x00030003,01,00,00,00,02,00,\ +00,00,01,00,00,00,00,00,00,00,02,00,00,00,05,00,00,00,00,00,00,00,B0,04,00,00,78,00,\ +00,00,32,32,03,02,04,00,00,00,04,00,00,00,00,00,00,00,00,00,00,00,84,03,00,00,3C,00,\ +00,00,00,00,00,00,B4,00,00,00,01,01,64,32,64,64,00,00 ; Color schemes HKCU,"Control Panel\Current","Color Schemes",0x00020000,"ReactOS Standard" HKCU,"Control Panel\Appearance","Current",0x00020000,"ReactOS Standard" HKCU,"Control Panel\Appearance","NewCurrent",0x00020000,"ReactOS Standard" +HKCU,"Control Panel\Appearance\New Schemes","SelectedSize",0x00020000,"0" HKCU,"Control Panel\Appearance\New Schemes","SelectedStyle",0x00020000,"0" ; ReactOS Standard HKCU,"Control Panel\Appearance\New Schemes\0","DisplayName",0x00020000,"@themeui.dll,-883" -HKCU,"Control Panel\Appearance\New Schemes\0","SelectedSize",0x00020000,"0" HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Flat Menus",0x00010001,0x00000000 HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ @@ -68,6 +286,10 @@ HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Font #2",0x00000001,f5,ff 00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ 00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ @@ -76,10 +298,6 @@ HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Font #5",0x00000001,f5,ff 00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #0",0x00010001,0x00c8d0d4 HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #1",0x00010001,0x00a56e3a HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #2",0x00010001,0x006a240a @@ -113,73 +331,1297 @@ HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #29",0x00010001,0x0 HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Color #30",0x00010001,0x00c8d0d4 HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","Contrast",0x00010001,0x00000000 HKCU,"Control Panel\Appearance\New Schemes\0\Sizes\0","LegacyName",0x00020000,"ReactOS Standard" -; ReactOS Classic -HKCU,"Control Panel\Appearance\New Schemes\1","DisplayName",0x00020000,"@themeui.dll,-880" +; Brick +HKCU,"Control Panel\Appearance\New Schemes\1","DisplayName",0x00020000,"@themeui.dll,-851" HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Flat Menus",0x00010001,0x00000000 HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,4d,00,69,00,63,00,72,00,6f,00,73,\ -00,6f,00,66,00,74,00,20,00,53,00,61,00,6e,00,73,00,20,00,53,00,65,00,72,00,69,00,66,00,00,00,fc,\ -7f,22,14,fc,7f,b0,fe,12,00,00,00,00,00,00,00,00,00,98,23,eb,77 +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,4d,00,69,00,63,00,72,00,6f,00,73,\ -00,6f,00,66,00,74,00,20,00,53,00,61,00,6e,00,73,00,20,00,53,00,65,00,72,00,69,00,66,00,00,00,f0,\ -77,00,20,14,00,00,00,00,10,80,05,14,00,f0,1f,14,00,00,00,14,00 +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,4d,00,69,00,63,00,72,00,6f,00,73,\ -00,6f,00,66,00,74,00,20,00,53,00,61,00,6e,00,73,00,20,00,53,00,65,00,72,00,69,00,66,00,00,00,14,\ -00,88,fb,e8,77,02,02,00,00,ac,b9,f0,77,00,00,00,00,20,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,4d,00,69,00,63,00,72,00,6f,00,73,\ -00,6f,00,66,00,74,00,20,00,53,00,61,00,6e,00,73,00,20,00,53,00,65,00,72,00,69,00,66,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,7c,6b,e8,77,00,00,00,00 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,4d,00,69,00,63,00,72,00,6f,00,73,\ -00,6f,00,66,00,74,00,20,00,53,00,61,00,6e,00,73,00,20,00,53,00,65,00,72,00,69,00,66,00,00,00,00,\ -00,06,00,00,00,18,00,00,00,ff,ff,ff,ff,f0,4b,21,fc,00,c4,f0,77 +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,4d,00,69,00,63,00,72,00,6f,00,73,\ -00,6f,00,66,00,74,00,20,00,53,00,61,00,6e,00,73,00,20,00,53,00,65,00,72,00,69,00,66,00,00,00,14,\ -00,0b,00,00,00,00,ff,12,00,50,00,00,00,c0,fe,12,00,0c,10,00,01 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #0",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #1",0x00010001,0x00a56e3a -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #2",0x00010001,0x00800000 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #3",0x00010001,0x00808080 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #4",0x00010001,0x00c0c0c0 +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #0",0x00010001,0x02d2e0e1 +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #1",0x00010001,0x00000042 +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #2",0x00010001,0x00000080 +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #3",0x00010001,0x0061898d +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #4",0x00010001,0x00a5bfc2 HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #5",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #6",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #6",0x00010001,0x02000000 HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #7",0x00010001,0x00000000 HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #8",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #9",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #10",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #11",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #12",0x00010001,0x00808080 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #13",0x00010001,0x00800000 +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #9",0x00010001,0x00d2e0e1 +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #10",0x00010001,0x00a5bfc2 +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #11",0x00010001,0x00a5bfc2 +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #12",0x00010001,0x00d2e0e1 +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #13",0x00010001,0x0061898d HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #14",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #15",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #16",0x00010001,0x00808080 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #17",0x00010001,0x00808080 +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #15",0x00010001,0x00a5bfc2 +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #16",0x00010001,0x0261898d +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #17",0x00010001,0x0261898d HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #18",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #19",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #20",0x00010001,0x00ffffff -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #21",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #22",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #23",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #24",0x00010001,0x00e1ffff +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #19",0x00010001,0x00d2e0e1 +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #20",0x00010001,0x02d2e0e1 +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #21",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #22",0x00010001,0x02a5bfc2 +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #23",0x00010001,0x00000080 +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #24",0x00010001,0x00d2e0e1 HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #25",0x00010001,0x00c0c0c0 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #26",0x00010001,0x00800000 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #27",0x00010001,0x00d08410 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #28",0x00010001,0x00b5b5b5 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #29",0x00010001,0x00800000 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #30",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #26",0x00010001,0x02000080 +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #27",0x00010001,0x004074b0 +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #28",0x00010001,0x0070b8c8 +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #29",0x00010001,0x00808000 +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Color #30",0x00010001,0x00a5bfc2 HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","Contrast",0x00010001,0x00000000 -HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","LegacyName",0x00020000,"ReactOS Classic" +HKCU,"Control Panel\Appearance\New Schemes\1\Sizes\0","LegacyName",0x00020000,"Brick" +; Eggplant +HKCU,"Control Panel\Appearance\New Schemes\2","DisplayName",0x00020000,"@themeui.dll,-851" +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Flat Menus",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #0",0x00010001,0x02a8b090 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #1",0x00010001,0x00400040 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #2",0x00010001,0x00788058 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #3",0x00010001,0x00a8b090 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #4",0x00010001,0x00a8b090 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #5",0x00010001,0x02ffffff +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #6",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #7",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #8",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #9",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #10",0x00010001,0x02a8b090 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #11",0x00010001,0x02a8b090 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #12",0x00010001,0x02808080 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #13",0x00010001,0x00788058 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #14",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #15",0x00010001,0x02a8b090 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #16",0x00010001,0x02788058 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #17",0x00010001,0x02788058 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #18",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #19",0x00010001,0x00788058 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #20",0x00010001,0x02d8d8c8 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #21",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #22",0x00010001,0x02a8b090 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #23",0x00010001,0x00800080 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #24",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #25",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #26",0x00010001,0x02788058 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #27",0x00010001,0x00834b83 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #28",0x00010001,0x00d2bdcb +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #29",0x00010001,0x00788058 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Color #30",0x00010001,0x00a8b090 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","Contrast",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\2\Sizes\0","LegacyName",0x00020000,"Eggplant" +; Green Olive +HKCU,"Control Panel\Appearance\New Schemes\3","DisplayName",0x00020000,"@themeui.dll,-877" +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Flat Menus",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #0",0x00010001,0x02d3e3d0 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #1",0x00010001,0x00213f21 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #2",0x00010001,0x00649759 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #3",0x00010001,0x00808080 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #4",0x00010001,0x00a9c8a2 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #5",0x00010001,0x02ffffff +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #6",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #7",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #8",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #9",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #10",0x00010001,0x02a9c8a2 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #11",0x00010001,0x02a9c8a2 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #12",0x00010001,0x02d3e3d0 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #13",0x00010001,0x00649759 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #14",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #15",0x00010001,0x02a9c8a2 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #16",0x00010001,0x02649759 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #17",0x00010001,0x02649759 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #18",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #19",0x00010001,0x00d3e3d0 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #20",0x00010001,0x02d3e3d0 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #21",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #22",0x00010001,0x02a9c8a2 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #23",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #24",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #25",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #26",0x00010001,0x02649759 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #27",0x00010001,0x00e8c898 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #28",0x00010001,0x00b0cca8 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #29",0x00010001,0x00649759 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Color #30",0x00010001,0x00a9c8a2 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","Contrast",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\3\Sizes\0","LegacyName",0x00020000,"Green Olive" +; High Contrast 1 +HKCU,"Control Panel\Appearance\New Schemes\4","DisplayName",0x00020000,"@themeui.dll,-851" +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Flat Menus",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #0",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #1",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #2",0x00010001,0x00ff0000 +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #3",0x00010001,0x00ffff00 +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #4",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #5",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #6",0x00010001,0x02ffffff +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #7",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #8",0x00010001,0x0000ffff +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #9",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #10",0x00010001,0x00ff0000 +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #11",0x00010001,0x00ffff00 +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #12",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #13",0x00010001,0x00008000 +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #14",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #15",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #16",0x00010001,0x02808080 +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #17",0x00010001,0x0200ff00 +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #18",0x00010001,0x02ffffff +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #19",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #20",0x00010001,0x02c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #21",0x00010001,0x02ffffff +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #22",0x00010001,0x02ffffff +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #23",0x00010001,0x0000ffff +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #24",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #25",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #26",0x00010001,0x02800080 +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #27",0x00010001,0x00ff0000 +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #28",0x00010001,0x00ffff00 +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #29",0x00010001,0x00008000 +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Color #30",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","Contrast",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\4\Sizes\0","LegacyName",0x00020000,"High Contrast 1" +; High Contrast 2 +HKCU,"Control Panel\Appearance\New Schemes\5","DisplayName",0x00020000,"@themeui.dll,-851" +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Flat Menus",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #0",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #1",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #2",0x00010001,0x00ffff00 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #3",0x00010001,0x00ff0000 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #4",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #5",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #6",0x00010001,0x02ffffff +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #7",0x00010001,0x0000ff00 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #8",0x00010001,0x0000ff00 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #9",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #10",0x00010001,0x00ffff00 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #11",0x00010001,0x00ff0000 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #12",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #13",0x00010001,0x00ff0000 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #14",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #15",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #16",0x00010001,0x02808080 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #17",0x00010001,0x0200ff00 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #18",0x00010001,0x0000ff00 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #19",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #20",0x00010001,0x02c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #21",0x00010001,0x02ffffff +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #22",0x00010001,0x02ffffff +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #23",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #24",0x00010001,0x0000ffff +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #25",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #26",0x00010001,0x02800080 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #27",0x00010001,0x00ffff00 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #28",0x00010001,0x00ff0000 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #29",0x00010001,0x00ff0000 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Color #30",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","Contrast",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\5\Sizes\0","LegacyName",0x00020000,"High Contrast 2" +; High Contrast Black +HKCU,"Control Panel\Appearance\New Schemes\6","DisplayName",0x00020000,"@themeui.dll,-851" +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Flat Menus",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #0",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #1",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #2",0x00010001,0x00800080 +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #3",0x00010001,0x00008000 +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #4",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #5",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #6",0x00010001,0x02ffffff +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #7",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #8",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #9",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #10",0x00010001,0x0200ffff +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #11",0x00010001,0x02008000 +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #12",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #13",0x00010001,0x00800080 +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #14",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #15",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #16",0x00010001,0x02808080 +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #17",0x00010001,0x0200ff00 +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #18",0x00010001,0x02ffffff +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #19",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #20",0x00010001,0x02c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #21",0x00010001,0x02ffffff +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #22",0x00010001,0x02ffffff +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #23",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #24",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #25",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #26",0x00010001,0x02800080 +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #27",0x00010001,0x00800080 +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #28",0x00010001,0x00008000 +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #29",0x00010001,0x00800080 +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Color #30",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","Contrast",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\6\Sizes\0","LegacyName",0x00020000,"High Contrast Black" +; High Contrast White +HKCU,"Control Panel\Appearance\New Schemes\7","DisplayName",0x00020000,"@themeui.dll,-851" +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Flat Menus",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #0",0x00010001,0x02ffffff +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #1",0x00010001,0x02ffffff +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #2",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #3",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #4",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #5",0x00010001,0x02ffffff +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #6",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #7",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #8",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #9",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #10",0x00010001,0x02808080 +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #11",0x00010001,0x02c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #12",0x00010001,0x02808080 +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #13",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #14",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #15",0x00010001,0x02ffffff +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #16",0x00010001,0x02808080 +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #17",0x00010001,0x0200ff00 +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #18",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #19",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #20",0x00010001,0x02c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #21",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #22",0x00010001,0x02c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #23",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #24",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #25",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #26",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #27",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #28",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #29",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Color #30",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","Contrast",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\7\Sizes\0","LegacyName",0x00020000,"High Contrast White" +; Lilac +HKCU,"Control Panel\Appearance\New Schemes\8","DisplayName",0x00020000,"@themeui.dll,-851" +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Flat Menus",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #0",0x00010001,0x02d9a8ae +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #1",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #2",0x00010001,0x00b14e5a +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #3",0x00010001,0x00808080 +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #4",0x00010001,0x00d9a8ae +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #5",0x00010001,0x02ffffff +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #6",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #7",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #8",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #9",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #10",0x00010001,0x02d9a8ae +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #11",0x00010001,0x02d9a8ae +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #12",0x00010001,0x02b14e5a +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #13",0x00010001,0x00b14e5a +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #14",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #15",0x00010001,0x02d9a8ae +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #16",0x00010001,0x02b14e5a +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #17",0x00010001,0x02b14e5a +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #18",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #19",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #20",0x00010001,0x02ecd5d8 +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #21",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #22",0x00010001,0x02d9a8ae +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #23",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #24",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #25",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #26",0x00010001,0x02b14e5a +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #27",0x00010001,0x00cb8fb6 +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #28",0x00010001,0x00d0b4b8 +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #29",0x00010001,0x00b14e5a +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Color #30",0x00010001,0x00d9a8ae +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","Contrast",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\8\Sizes\0","LegacyName",0x00020000,"Lilac" +; Maple +HKCU,"Control Panel\Appearance\New Schemes\9","DisplayName",0x00020000,"@themeui.dll,-851" +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Flat Menus",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #0",0x00010001,0x02d7ecf2 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #1",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #2",0x00010001,0x00000080 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #3",0x00010001,0x0046a6c6 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #4",0x00010001,0x00aed8e6 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #5",0x00010001,0x02ffffff +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #6",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #7",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #8",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #9",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #10",0x00010001,0x02aed8e6 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #11",0x00010001,0x02aed8e6 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #12",0x00010001,0x0246a6c6 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #13",0x00010001,0x0046a6c6 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #14",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #15",0x00010001,0x02aed8e6 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #16",0x00010001,0x0246a6c6 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #17",0x00010001,0x0246a6c6 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #18",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #19",0x00010001,0x00d7ecf2 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #20",0x00010001,0x02d7ecf2 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #21",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #22",0x00010001,0x02aed8e6 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #23",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #24",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #25",0x00010001,0x02c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #26",0x00010001,0x0246a6c6 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #27",0x00010001,0x00389cc0 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #28",0x00010001,0x0088c8e0 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #29",0x00010001,0x0046a6c6 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Color #30",0x00010001,0x00aed8e6 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","Contrast",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\9\Sizes\0","LegacyName",0x00020000,"Maple" +; Marine +HKCU,"Control Panel\Appearance\New Schemes\10","DisplayName",0x00020000,"@themeui.dll,-851" +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Flat Menus",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #0",0x00010001,0x02d8e0c8 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #1",0x00010001,0x00474e2c +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #2",0x00010001,0x00800000 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #3",0x00010001,0x00889048 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #4",0x00010001,0x00b8c088 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #5",0x00010001,0x02d8e0c8 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #6",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #7",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #8",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #9",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #10",0x00010001,0x02b8c088 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #11",0x00010001,0x02b8c088 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #12",0x00010001,0x00848d4b +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #13",0x00010001,0x00800000 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #14",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #15",0x00010001,0x02b8c088 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #16",0x00010001,0x02889048 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #17",0x00010001,0x02889048 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #18",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #19",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #20",0x00010001,0x02d8e0c8 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #21",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #22",0x00010001,0x02b8c088 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #23",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #24",0x00010001,0x00d8e0c8 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #25",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #26",0x00010001,0x02800000 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #27",0x00010001,0x00c0b418 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #28",0x00010001,0x00d8cc78 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #29",0x00010001,0x00800000 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Color #30",0x00010001,0x00b8c088 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","Contrast",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\10\Sizes\0","LegacyName",0x00020000,"Marine" +; Plum +HKCU,"Control Panel\Appearance\New Schemes\11","DisplayName",0x00020000,"@themeui.dll,-869" +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Flat Menus",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #0",0x00010001,0x00c8d0d8 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #1",0x00010001,0x00402840 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #2",0x00010001,0x00604048 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #3",0x00010001,0x00586078 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #4",0x00010001,0x009098a8 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #5",0x00010001,0x00c8d0d8 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #6",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #7",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #8",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #9",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #10",0x00010001,0x009098a8 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #11",0x00010001,0x009098a8 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #12",0x00010001,0x005a6374 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #13",0x00010001,0x00808000 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #14",0x00010001,0x00c8d0d8 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #15",0x00010001,0x009098a8 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #16",0x00010001,0x00586078 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #17",0x00010001,0x00586078 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #18",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #19",0x00010001,0x009098a8 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #20",0x00010001,0x00c8d0d8 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #21",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #22",0x00010001,0x009098a8 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #23",0x00010001,0x00580030 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #24",0x00010001,0x00c8ccd5 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #25",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #26",0x00010001,0x00604048 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #27",0x00010001,0x00b884a0 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #28",0x00010001,0x007898a8 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #29",0x00010001,0x00808000 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Color #30",0x00010001,0x009098a8 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","Contrast",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\11\Sizes\0","LegacyName",0x00020000,"Plum" +; Pumpkin +HKCU,"Control Panel\Appearance\New Schemes\12","DisplayName",0x00020000,"@themeui.dll,-851" +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Flat Menus",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #0",0x00010001,0x02cfeaf5 +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #1",0x00010001,0x00420042 +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #2",0x00010001,0x002fa5d7 +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #3",0x00010001,0x00a4a0a0 +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #4",0x00010001,0x009dd5ec +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #5",0x00010001,0x02ffffff +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #6",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #7",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #8",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #9",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #10",0x00010001,0x029dd5ec +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #11",0x00010001,0x029dd5ec +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #12",0x00010001,0x02cfeaf5 +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #13",0x00010001,0x00800080 +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #14",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #15",0x00010001,0x029dd5ec +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #16",0x00010001,0x022fa5d7 +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #17",0x00010001,0x022fa5d7 +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #18",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #19",0x00010001,0x00cfeaf5 +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #20",0x00010001,0x02cfeaf5 +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #21",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #22",0x00010001,0x029dd5ec +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #23",0x00010001,0x00800080 +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #24",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #25",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #26",0x00010001,0x022fa5d7 +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #27",0x00010001,0x0088cce0 +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #28",0x00010001,0x0090ccd0 +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #29",0x00010001,0x00800080 +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Color #30",0x00010001,0x009dd5ec +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","Contrast",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\12\Sizes\0","LegacyName",0x00020000,"Pumpkin" +; Rainy Day +HKCU,"Control Panel\Appearance\New Schemes\13","DisplayName",0x00020000,"@themeui.dll,-851" +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Flat Menus",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #0",0x00010001,0x02d9ccc1 +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #1",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #2",0x00010001,0x007d654f +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #3",0x00010001,0x00808080 +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #4",0x00010001,0x00b19983 +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #5",0x00010001,0x02ffffff +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #6",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #7",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #8",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #9",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #10",0x00010001,0x02b19983 +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #11",0x00010001,0x02b19983 +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #12",0x00010001,0x02808080 +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #13",0x00010001,0x007d654f +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #14",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #15",0x00010001,0x02b19983 +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #16",0x00010001,0x027d654f +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #17",0x00010001,0x027d654f +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #18",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #19",0x00010001,0x00d9ccc1 +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #20",0x00010001,0x02d9ccc1 +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #21",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #22",0x00010001,0x02b19983 +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #23",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #24",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #25",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #26",0x00010001,0x027d654f +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #27",0x00010001,0x00d0b480 +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #28",0x00010001,0x00d0bcb0 +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #29",0x00010001,0x007d654f +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Color #30",0x00010001,0x00b19983 +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","Contrast",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\13\Sizes\0","LegacyName",0x00020000,"Rainy Day" +; ReactOS Classic +HKCU,"Control Panel\Appearance\New Schemes\14","DisplayName",0x00020000,"@themeui.dll,-880" +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Flat Menus",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #0",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #1",0x00010001,0x00a56e3a +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #2",0x00010001,0x00800000 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #3",0x00010001,0x00808080 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #4",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #5",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #6",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #7",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #8",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #9",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #10",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #11",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #12",0x00010001,0x00808080 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #13",0x00010001,0x00800000 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #14",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #15",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #16",0x00010001,0x00808080 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #17",0x00010001,0x00808080 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #18",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #19",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #20",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #21",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #22",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #23",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #24",0x00010001,0x00e1ffff +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #25",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #26",0x00010001,0x00800000 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #27",0x00010001,0x00d08410 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #28",0x00010001,0x00b5b5b5 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #29",0x00010001,0x00800000 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Color #30",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","Contrast",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\14\Sizes\0","LegacyName",0x00020000,"ReactOS Classic" +; Rose +HKCU,"Control Panel\Appearance\New Schemes\15","DisplayName",0x00020000,"@themeui.dll,-851" +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Flat Menus",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #0",0x00010001,0x02b7afcf +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #1",0x00010001,0x02808080 +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #2",0x00010001,0x0070609f +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #3",0x00010001,0x00a4a0a0 +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #4",0x00010001,0x00b7afcf +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #5",0x00010001,0x02ffffff +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #6",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #7",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #8",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #9",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #10",0x00010001,0x02b7afcf +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #11",0x00010001,0x02b7afcf +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #12",0x00010001,0x0270609f +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #13",0x00010001,0x0070609f +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #14",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #15",0x00010001,0x02b7afcf +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #16",0x00010001,0x0270609f +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #17",0x00010001,0x0270609f +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #18",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #19",0x00010001,0x007d7d7d +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #20",0x00010001,0x02dcd8e7 +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #21",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #22",0x00010001,0x02b7afcf +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #23",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #24",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #25",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #26",0x00010001,0x0270609f +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #27",0x00010001,0x00d0ccd8 +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #28",0x00010001,0x00d0d4d0 +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #29",0x00010001,0x0070609f +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Color #30",0x00010001,0x00b7afcf +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","Contrast",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\15\Sizes\0","LegacyName",0x00020000,"Rose" +; Sand +HKCU,"Control Panel\Appearance\New Schemes\16","DisplayName",0x00020000,"@themeui.dll,-851" +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Flat Menus",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #0",0x00010001,0x02dde6ea +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #1",0x00010001,0x02688da2 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #2",0x00010001,0x00808000 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #3",0x00010001,0x00688da2 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #4",0x00010001,0x00bbccd5 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #5",0x00010001,0x02ffffff +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #6",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #7",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #8",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #9",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #10",0x00010001,0x02bbccd5 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #11",0x00010001,0x02bbccd5 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #12",0x00010001,0x02688da2 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #13",0x00010001,0x00808000 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #14",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #15",0x00010001,0x02bbccd5 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #16",0x00010001,0x02688da2 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #17",0x00010001,0x02688da2 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #18",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #19",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #20",0x00010001,0x02dde6ea +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #21",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #22",0x00010001,0x02bbccd5 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #23",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #24",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #25",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #26",0x00010001,0x02808000 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #27",0x00010001,0x00aabd84 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #28",0x00010001,0x0080d0e8 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #29",0x00010001,0x00808000 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Color #30",0x00010001,0x00bbccd5 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","Contrast",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\16\Sizes\0","LegacyName",0x00020000,"Sand" +; Sky (WinXP-like) +HKCU,"Control Panel\Appearance\New Schemes\17","DisplayName",0x00020000,"@themeui.dll,-851" +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Flat Menus",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #0",0x00010001,0x00c8d0d4 +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #1",0x00010001,0x00984e00 +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #2",0x00010001,0x00e35400 +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #3",0x00010001,0x00df967a +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #4",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #5",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #6",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #7",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #8",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #9",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #10",0x00010001,0x00c8d0d4 +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #11",0x00010001,0x00c8d0d4 +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #12",0x00010001,0x00808080 +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #13",0x00010001,0x00c56a31 +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #14",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #15",0x00010001,0x00d8e9ec +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #16",0x00010001,0x0099a8ac +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #17",0x00010001,0x0099a8ac +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #18",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #19",0x00010001,0x00f8e4d8 +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #20",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #21",0x00010001,0x00646f71 +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #22",0x00010001,0x00e2eff1 +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #23",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #24",0x00010001,0x00e1ffff +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #25",0x00010001,0x00b5b5b5 +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #26",0x00010001,0x00800000 +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #27",0x00010001,0x00ff953d +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #28",0x00010001,0x00ebb99d +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #29",0x00010001,0x00c56a31 +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Color #30",0x00010001,0x00d8e9ec +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","Contrast",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\17\Sizes\0","LegacyName",0x00020000,"Sky" +; Slate +HKCU,"Control Panel\Appearance\New Schemes\18","DisplayName",0x00020000,"@themeui.dll,-851" +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Flat Menus",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #0",0x00010001,0x02e3dcce +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #1",0x00010001,0x00414141 +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #2",0x00010001,0x00978055 +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #3",0x00010001,0x00808080 +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #4",0x00010001,0x00c8b99d +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #5",0x00010001,0x02ffffff +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #6",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #7",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #8",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #9",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #10",0x00010001,0x02c8b99d +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #11",0x00010001,0x02c8b99d +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #12",0x00010001,0x00424242 +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #13",0x00010001,0x00978055 +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #14",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #15",0x00010001,0x02c8b99d +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #16",0x00010001,0x02978055 +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #17",0x00010001,0x02978055 +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #18",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #19",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #20",0x00010001,0x02e3dcce +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #21",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #22",0x00010001,0x02c8b99d +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #23",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #24",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #25",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #26",0x00010001,0x02978055 +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #27",0x00010001,0x00d8b888 +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #28",0x00010001,0x00c8bca0 +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #29",0x00010001,0x00978055 +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Color #30",0x00010001,0x00c8b99d +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","Contrast",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\18\Sizes\0","LegacyName",0x00020000,"Slate" +; Storm +HKCU,"Control Panel\Appearance\New Schemes\19","DisplayName",0x00020000,"@themeui.dll,-851" +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Flat Menus",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #0",0x00010001,0x02c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #1",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #2",0x00010001,0x00800080 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #3",0x00010001,0x00808080 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #4",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #5",0x00010001,0x02ffffff +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #6",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #7",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #8",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #9",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #10",0x00010001,0x02c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #11",0x00010001,0x02c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #12",0x00010001,0x02808080 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #13",0x00010001,0x00800080 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #14",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #15",0x00010001,0x02c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #16",0x00010001,0x02808080 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #17",0x00010001,0x02808080 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #18",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #19",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #20",0x00010001,0x02ffffff +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #21",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #22",0x00010001,0x02c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #23",0x00010001,0x00800080 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #24",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #25",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #26",0x00010001,0x02800080 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #27",0x00010001,0x00b08c38 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #28",0x00010001,0x00a8aca8 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #29",0x00010001,0x00800080 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Color #30",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","Contrast",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\19\Sizes\0","LegacyName",0x00020000,"Storm" +; Teal +HKCU,"Control Panel\Appearance\New Schemes\20","DisplayName",0x00020000,"@themeui.dll,-851" +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Flat Menus",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #0",0x00010001,0x02c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #1",0x00010001,0x00404000 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #2",0x00010001,0x00808000 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #3",0x00010001,0x00808080 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #4",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #5",0x00010001,0x02ffffff +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #6",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #7",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #8",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #9",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #10",0x00010001,0x02c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #11",0x00010001,0x02c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #12",0x00010001,0x02808080 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #13",0x00010001,0x00808000 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #14",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #15",0x00010001,0x02c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #16",0x00010001,0x02808080 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #17",0x00010001,0x02808080 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #18",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #19",0x00010001,0x00f0fbff +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #20",0x00010001,0x02ffffff +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #21",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #22",0x00010001,0x02c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #23",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #24",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #25",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #26",0x00010001,0x02808000 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #27",0x00010001,0x00d8cc00 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #28",0x00010001,0x00b8c898 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #29",0x00010001,0x00808000 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Color #30",0x00010001,0x00c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","Contrast",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\20\Sizes\0","LegacyName",0x00020000,"Teal" +; Wheat +HKCU,"Control Panel\Appearance\New Schemes\21","DisplayName",0x00020000,"@themeui.dll,-851" +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","DisplayName",0x00020000,"@themeui.dll,-2019" +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Flat Menus",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Font #0",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Font #1",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Font #2",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Font #3",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Font #4",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Font #5",0x00000001,f5,ff,ff,ff,00,00,00,\ +00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,00,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,61,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ +00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #0",0x00010001,0x02d0eeee +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #1",0x00010001,0x021d4000 +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #2",0x00010001,0x00008080 +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #3",0x00010001,0x0041bcbc +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #4",0x00010001,0x00a0dede +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #5",0x00010001,0x02ffffff +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #6",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #7",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #8",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #9",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #10",0x00010001,0x02a0dede +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #11",0x00010001,0x02a0dede +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #12",0x00010001,0x0241bcbc +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #13",0x00010001,0x00008080 +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #14",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #15",0x00010001,0x02a0dede +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #16",0x00010001,0x0241bcbc +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #17",0x00010001,0x0241bcbc +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #18",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #19",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #20",0x00010001,0x02d0eeee +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #21",0x00010001,0x02000000 +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #22",0x00010001,0x02a0dede +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #23",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #24",0x00010001,0x00ffffff +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #25",0x00010001,0x02c0c0c0 +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #26",0x00010001,0x02008080 +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #27",0x00010001,0x0048b0c8 +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #28",0x00010001,0x0080b8b8 +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #29",0x00010001,0x00008080 +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Color #30",0x00010001,0x00a0dede +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","Contrast",0x00010001,0x00000000 +HKCU,"Control Panel\Appearance\New Schemes\21\Sizes\0","LegacyName",0x00020000,"Wheat" + +HKCU,"Control Panel\Sound","Beep",2,"yes" +HKCU,"Control Panel\Sound","ExtendedSounds",2,"yes" HKCU,"Environment",,0x00000012 HKCU,"Environment","TEMP",0x00020000,"%USERPROFILE%\Local Settings\Temp" HKCU,"Environment","TMP",0x00020000,"%USERPROFILE%\Local Settings\Temp" HKCU,"SOFTWARE",,0x00000012 +HKCU,"SOFTWARE\Policies",,0x00000012 HKCU,"SOFTWARE\Microsoft",,0x00000012 ; DirectX version report as DirectX 9.0 @@ -203,37 +1645,58 @@ HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\FileExts",,0x00000012 HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons",,0x00000012 HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\ClassicStartMenu",,0x00000012 HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\ClassicStartMenu","{208D2C60-3AEA-1069-A2D7-08002B30309D}",0x00010001,0x00000000 -HKCU,"Software\Microsoft\Windows\CurrentVersion\Explorer\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}",,0x00000012 +HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}",,0x00000012 +; default shell +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon",,0x00000012 +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon","Shell",0x00020000,"%SystemRoot%\explorer.exe" + +HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Policies",,0x00000012 +HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Run",,0x00000012 +HKCU,"Software\Microsoft\Windows\CurrentVersion\Telephony",,0x00000012 +HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall",,0x00000012 HKCU,"SOFTWARE\Microsoft\Windows NT",,0x00000012 HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion",,0x00000012 +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Devices",,0x00000012 +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Network",,0x00000012 +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\PrinterPorts",,0x00000012 +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Program Manager",,0x00000012 -; application compatibility settings for Windows 95 +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows","DebugOptions",2,"2048" +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows","device",2,"" +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows","Documents",2,"" +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows","DosPrint",2,"no" +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows","load",2,"" +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows","NetMessage",2,"no" +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows","NullPort",2,"None" +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows","Programs",2,"com exe bat pif cmd" + +; Application compatibility settings for Windows 95 HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN95","MajorVersion",0x00010001,0x00000004 HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN95","MinorVersion",0x00010001,0x0000000A HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN95","BuildNumber",0x00010001,0x000003B6 HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN95","PlatformId",0x00010001,0x00000001 -; application compatibility settings for Windows 98/ME +; Application compatibility settings for Windows 98/ME HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN98","MajorVersion",0x00010001,0x00000004 HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN98","MinorVersion",0x00010001,0x00000000 HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN98","BuildNumber",0x00010001,0x000008AE HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN98","PlatformId",0x00010001,0x00000001 -; application compatibility settings for Windows NT 4 Service Pack 5 +; Application compatibility settings for Windows NT 4 Service Pack 5 HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\NT4SP5","MajorVersion",0x00010001,0x00000004 HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\NT4SP5","MinorVersion",0x00010001,0x00000000 HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\NT4SP5","BuildNumber",0x00010001,0x00000565 HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\NT4SP5","PlatformId",0x00010001,0x00000002 HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\NT4SP5","SPMajorVersion",0x00010001,0x00000005 HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\NT4SP5","SPMinorVersion",0x00010001,0x00000000 -; application compatibility settings for Windows 2000 +; Application compatibility settings for Windows 2000 HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN2000","MajorVersion",0x00010001,0x00000005 HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN2000","MinorVersion",0x00010001,0x00000000 HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN2000","BuildNumber",0x00010001,0x00000893 HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN2000","PlatformId",0x00010001,0x00000002 HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN2000","SPMajorVersion",0x00010001,0x00000003 HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WIN2000","SPMinorVersion",0x00010001,0x00000000 -; application compatibility settings for Windows XP +; Application compatibility settings for Windows XP HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WINXP","MajorVersion",0x00010001,0x00000005 HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WINXP","MinorVersion",0x00010001,0x00000001 HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers\WINXP","BuildNumber",0x00010001,0x00000A28 @@ -246,37 +1709,163 @@ HKCU,"SOFTWARE\ReactOS\Debug","SpyInclude",0x00020000,"INCLUDEALL" ;HKCU,"SOFTWARE\ReactOS\Debug","SpyExclude",0x00020000,"" ;HKCU,"SOFTWARE\ReactOS\Debug","SpyExcludeDWP",0x00020000,"" -; GUI Setup - -HKCU, "Control Panel\Desktop\WindowMetrics","CaptionFont",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,bc,02,00,00,00,00,00,01,00,00,00,00,54,00,61,00,68,00,6f,00,6d,\ -00,61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU, "Control Panel\Desktop\WindowMetrics","IconFont",0x00000001,f5,ff,ff,ff,00,00,00,00,\ -00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,01,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,\ -61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU, "Control Panel\Desktop\WindowMetrics","MenuFont",0x00000001,f5,ff,ff,ff,00,00,00,00,\ -00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,01,00,00,00,00,54,00,61,00,68,00,6f,00,6d,00,\ -61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU, "Control Panel\Desktop\WindowMetrics","MessageFont",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,01,00,00,00,00,54,00,61,00,68,00,6f,00,6d,\ -00,61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU, "Control Panel\Desktop\WindowMetrics","SmCaptionFont",0x00000001,f5,ff,ff,ff,00,00,\ -00,00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,01,00,00,00,00,54,00,61,00,68,00,6f,00,\ -6d,00,61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 -HKCU, "Control Panel\Desktop\WindowMetrics","StatusFont",0x00000001,f5,ff,ff,ff,00,00,00,\ -00,00,00,00,00,00,00,00,00,90,01,00,00,00,00,00,01,00,00,00,00,54,00,61,00,68,00,6f,00,6d,\ -00,61,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,\ -00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00 - ; Internet Explorer -HKCU,"Software\Microsoft\Internet Explorer\Main","Start Page",,"http://www.reactos.org" -HKCU,"Software\Microsoft\Internet Explorer\Main","Search Page",,"http://www.google.com" +HKCU,Software\Wine\MSHTML,"GeckoUrl",,"http://source.winehq.org/winegecko.php" +HKCU,Software\Wine\MSHTML,"GeckoCabDir",0x00020000,"%SystemRoot%\" +; Sound Schemes +HKCU,"AppEvents",,0x00000012 +HKCU,"AppEvents\Schemes","",0x00000000,".Default" +HKCU,"AppEvents\Schemes\Apps",,0x00000012 +HKCU,"AppEvents\Schemes\Apps\.Default","",0x00000000,"ReactOS" +HKCU,"AppEvents\Schemes\Apps\.Default","DispFileName",0x00000000,"@mmsys.cpl,-5856" +HKCU,"AppEvents\Schemes\Apps\.Default\.Default",,0x00000012 +HKCU,"AppEvents\Schemes\Apps\.Default\.Default\.Current","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\.Default\.Default","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\AppGPFault",,0x00000012 +HKCU,"AppEvents\Schemes\Apps\.Default\AppGPFault\.Current","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\AppGPFault\.Default","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\Close",,0x00000012 +HKCU,"AppEvents\Schemes\Apps\.Default\Close\.Current","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\Close\.Default","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\CriticalBatteryAlarm",,0x00000012 +HKCU,"AppEvents\Schemes\Apps\.Default\CriticalBatteryAlarm\.Current","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\CriticalBatteryAlarm\.Default","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\DeviceConnect",,0x00000012 +HKCU,"AppEvents\Schemes\Apps\.Default\DeviceConnect\.Current","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\DeviceConnect\.Default","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\DeviceDisconnect",,0x00000012 +HKCU,"AppEvents\Schemes\Apps\.Default\DeviceDisconnect\.Current","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\DeviceDisconnect\.Default","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\DeviceFail",,0x00000012 +HKCU,"AppEvents\Schemes\Apps\.Default\DeviceFail\.Current","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\DeviceFail\.Default","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\LowBatteryAlarm",,0x00000012 +HKCU,"AppEvents\Schemes\Apps\.Default\LowBatteryAlarm\.Current","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\LowBatteryAlarm\.Default","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\MailBeep",,0x00000012 +HKCU,"AppEvents\Schemes\Apps\.Default\MailBeep\.Current","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\MailBeep\.Default","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\Maximize",,0x00000012 +HKCU,"AppEvents\Schemes\Apps\.Default\Maximize\.Current","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\Maximize\.Default","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\MenuCommand",,0x00000012 +HKCU,"AppEvents\Schemes\Apps\.Default\MenuCommand\.Current","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\MenuCommand\.Default","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\MenuPopup",,0x00000012 +HKCU,"AppEvents\Schemes\Apps\.Default\MenuPopup\.Current","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\MenuPopup\.Default","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\Minimize",,0x00000012 +HKCU,"AppEvents\Schemes\Apps\.Default\Minimize\.Current","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\Minimize\.Default","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\Open",,0x00000012 +HKCU,"AppEvents\Schemes\Apps\.Default\Open\.Current","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\Open\.Default","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\PrintComplete",,0x00000012 +HKCU,"AppEvents\Schemes\Apps\.Default\PrintComplete\.Current","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\PrintComplete\.Default","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\RestoreDown",,0x00000012 +HKCU,"AppEvents\Schemes\Apps\.Default\RestoreDown\.Current","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\RestoreDown\.Default","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\RestoreUp",,0x00000012 +HKCU,"AppEvents\Schemes\Apps\.Default\RestoreUp\.Current","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\RestoreUp\.Default","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\SystemAsterisk",,0x00000012 +HKCU,"AppEvents\Schemes\Apps\.Default\SystemAsterisk\.Current","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\SystemAsterisk\.Default","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\SystemExclamation",,0x00000012 +HKCU,"AppEvents\Schemes\Apps\.Default\SystemExclamation\.Current","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\SystemExclamation\.Default","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\SystemExit",,0x00000012 +HKCU,"AppEvents\Schemes\Apps\.Default\SystemExit\.Current","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\SystemExit\.Default","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\SystemHand",,0x00000012 +HKCU,"AppEvents\Schemes\Apps\.Default\SystemHand\.Current","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\SystemHand\.Default","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\SystemNotification",,0x00000012 +HKCU,"AppEvents\Schemes\Apps\.Default\SystemNotification\.Current","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\SystemNotification\.Default","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\SystemQuestion",,0x00000012 +HKCU,"AppEvents\Schemes\Apps\.Default\SystemQuestion\.Current","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\SystemQuestion\.Default","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\SystemStart",,0x00000012 +HKCU,"AppEvents\Schemes\Apps\.Default\SystemStart\.Current","",0x00020000,"%SystemRoot%\media\ReactOS_LogOn.wav" +HKCU,"AppEvents\Schemes\Apps\.Default\SystemStart\.Default","",0x00020000,"%SystemRoot%\media\ReactOS_LogOn.wav" +HKCU,"AppEvents\Schemes\Apps\.Default\WindowsLogoff",,0x00000012 +HKCU,"AppEvents\Schemes\Apps\.Default\WindowsLogoff\.Current","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\WindowsLogoff\.Default","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\WindowsLogon",,0x00000012 +HKCU,"AppEvents\Schemes\Apps\.Default\WindowsLogon\.Current","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\.Default\WindowsLogon\.Default","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\Explorer","",0x00000002,"ReactOS Explorer" +HKCU,"AppEvents\Schemes\Apps\Explorer","DispFileName",0x00000000,"@mmsys.cpl,-5854" +HKCU,"AppEvents\Schemes\Apps\Explorer\EmptyRecycleBin",,0x00000012 +HKCU,"AppEvents\Schemes\Apps\Explorer\EmptyRecycleBin\.Current","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\Explorer\EmptyRecycleBin\.Default","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\Explorer\Navigating",,0x00000012 +HKCU,"AppEvents\Schemes\Apps\Explorer\Navigating\.Current","",0x00020000,"" +HKCU,"AppEvents\Schemes\Apps\Explorer\Navigating\.Default","",0x00020000,"" +HKCU,"AppEvents\Schemes\Names",,0x00000012 +HKCU,"AppEvents\Schemes\Names\.Default","",0x00000002,"ReactOS Default" +HKCU,"AppEvents\Schemes\Names\.None","",0x00000002,"No sounds" + +HKCU,"AppEvents\EventLabels",,0x00000012 +HKCU,"AppEvents\EventLabels\.Default","",0x00000000,"Default Beep" +HKCU,"AppEvents\EventLabels\.Default","DispFileName",0x00000000,"@mmsys.cpl,-5824" +HKCU,"AppEvents\EventLabels\AppGPFault","",0x00000000,"Program error" +HKCU,"AppEvents\EventLabels\AppGPFault","DispFileName",0x00000000,"@mmsys.cpl,-5825" +HKCU,"AppEvents\EventLabels\Close","",0x00000000,"Close program" +HKCU,"AppEvents\EventLabels\Close","DispFileName",0x00000000,"@mmsys.cpl,-5826" +HKCU,"AppEvents\EventLabels\CriticalBatteryAlarm","",0x00000000,"Critical Battery Alarm" +HKCU,"AppEvents\EventLabels\CriticalBatteryAlarm","DispFileName",0x00000000,"@mmsys.cpl,-5827" +HKCU,"AppEvents\EventLabels\DeviceConnect","",0x00000000,"Device Connect" +HKCU,"AppEvents\EventLabels\DeviceConnect","DispFileName",0x00000000,"@mmsys.cpl,-5828" +HKCU,"AppEvents\EventLabels\DeviceDisconnect","",0x00000000,"Device Disconnect" +HKCU,"AppEvents\EventLabels\DeviceDisconnect","DispFileName",0x00000000,"@mmsys.cpl,-5829" +HKCU,"AppEvents\EventLabels\DeviceFail","",0x00000000,"Device Failed to Connect" +HKCU,"AppEvents\EventLabels\DeviceFail","DispFileName",0x00000000,"@mmsys.cpl,-5830" +HKCU,"AppEvents\EventLabels\EmptyRecycleBin","",0x00000000,"Empty Recycle Bin" +HKCU,"AppEvents\EventLabels\EmptyRecycleBin","DispFileName",0x00000000,"@mmsys.cpl,-5831" +HKCU,"AppEvents\EventLabels\LowBatteryAlarm","",0x00000000,"Low Battery Alarm" +HKCU,"AppEvents\EventLabels\LowBatteryAlarm","DispFileName",0x00000000,"@mmsys.cpl,-5832" +HKCU,"AppEvents\EventLabels\Maximize","",0x00000000,"Maximize" +HKCU,"AppEvents\EventLabels\Maximize","DispFileName",0x00000000,"@mmsys.cpl,-5833" +HKCU,"AppEvents\EventLabels\MenuCommand","",0x00000000,"Menu command" +HKCU,"AppEvents\EventLabels\MenuCommand","DispFileName",0x00000000,"@mmsys.cpl,-5834" +HKCU,"AppEvents\EventLabels\MenuPopup","",0x00000000,"Menu popup" +HKCU,"AppEvents\EventLabels\MenuPopup","DispFileName",0x00000000,"@mmsys.cpl,-5835" +HKCU,"AppEvents\EventLabels\Minimize","",0x00000000,"Minimize" +HKCU,"AppEvents\EventLabels\Minimize","DispFileName",0x00000000,"@mmsys.cpl,-5836" +HKCU,"AppEvents\EventLabels\MailBeep","",0x00000000,"New Mail Notification" +HKCU,"AppEvents\EventLabels\MailBeep","DispFileName",0x00000000,"@mmsys.cpl,-5837" +HKCU,"AppEvents\EventLabels\Navigating","",0x00000000,"Start Navigation" +HKCU,"AppEvents\EventLabels\Navigating","DispFileName",0x00000000,"@mmsys.cpl,-5838" +HKCU,"AppEvents\EventLabels\Open","",0x00000000,"Open program" +HKCU,"AppEvents\EventLabels\Open","DispFileName",0x00000000,"@mmsys.cpl,-5839" +HKCU,"AppEvents\EventLabels\PrintComplete","",0x00000000,"Print Complete" +HKCU,"AppEvents\EventLabels\PrintComplete","DispFileName",0x00000000,"@mmsys.cpl,-5840" +HKCU,"AppEvents\EventLabels\RestoreDown","",0x00000000,"Restore Down" +HKCU,"AppEvents\EventLabels\RestoreDown","DispFileName",0x00000000,"@mmsys.cpl,-5841" +HKCU,"AppEvents\EventLabels\RestoreUp","",0x00000000,"Restore Up" +HKCU,"AppEvents\EventLabels\RestoreUp","DispFileName",0x00000000,"@mmsys.cpl,-5842" +HKCU,"AppEvents\EventLabels\SystemAsterisk","",0x00000000,"Asterisk" +HKCU,"AppEvents\EventLabels\SystemAsterisk","DispFileName",0x00000000,"@mmsys.cpl,-5843" +HKCU,"AppEvents\EventLabels\SystemExclamation","",0x00000000,"Exclamation" +HKCU,"AppEvents\EventLabels\SystemExclamation","DispFileName",0x00000000,"@mmsys.cpl,-5845" +HKCU,"AppEvents\EventLabels\SystemExit","",0x00000000,"Exit ReactOS" +HKCU,"AppEvents\EventLabels\SystemExit","DispFileName",0x00000000,"@mmsys.cpl,-5846" +HKCU,"AppEvents\EventLabels\SystemHand","",0x00000000,"Critical Stop" +HKCU,"AppEvents\EventLabels\SystemHand","DispFileName",0x00000000,"@mmsys.cpl,-5847" +HKCU,"AppEvents\EventLabels\SystemNotification","",0x00000000,"System Notification" +HKCU,"AppEvents\EventLabels\SystemNotification","DispFileName",0x00000000,"@mmsys.cpl,-5848" +HKCU,"AppEvents\EventLabels\SystemQuestion","",0x00000000,"Question" +HKCU,"AppEvents\EventLabels\SystemQuestion","DispFileName",0x00000000,"@mmsys.cpl,-5849" +HKCU,"AppEvents\EventLabels\SystemStart","",0x00000000,"Start ReactOS" +HKCU,"AppEvents\EventLabels\SystemStart","DispFileName",0x00000000,"@mmsys.cpl,-5850" +HKCU,"AppEvents\EventLabels\WindowsLogoff","",0x00000000,"ReactOS Logoff" +HKCU,"AppEvents\EventLabels\WindowsLogoff","DispFileName",0x00000000,"@mmsys.cpl,-5852" +HKCU,"AppEvents\EventLabels\WindowsLogon","",0x00000000,"ReactOS Logon" +HKCU,"AppEvents\EventLabels\WindowsLogon","DispFileName",0x00000000,"@mmsys.cpl,-5853" ; EOF diff --git a/reactos/boot/bootdata/hivedef_arm.inf b/reactos/boot/bootdata/hivedef_arm.inf index 9669902636d..8d8c48935d1 100644 --- a/reactos/boot/bootdata/hivedef_arm.inf +++ b/reactos/boot/bootdata/hivedef_arm.inf @@ -1451,6 +1451,9 @@ HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\Classi HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\ClassicStartMenu","{208D2C60-3AEA-1069-A2D7-08002B30309D}",0x00010001,0x00000000 HKCU,"Software\Microsoft\Windows\CurrentVersion\Explorer\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}",,0x00000012 +; default shell +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon",,0x00000012 +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon","Shell",0x00020000,"%SystemRoot%\explorer.exe" HKCU,"SOFTWARE\Microsoft\Windows NT",,0x00000012 HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion",,0x00000012 diff --git a/reactos/boot/bootdata/hivedef_i386.inf b/reactos/boot/bootdata/hivedef_i386.inf index ab9afcee63d..404953a6257 100644 --- a/reactos/boot/bootdata/hivedef_i386.inf +++ b/reactos/boot/bootdata/hivedef_i386.inf @@ -1647,6 +1647,10 @@ HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\Classi HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\ClassicStartMenu","{208D2C60-3AEA-1069-A2D7-08002B30309D}",0x00010001,0x00000000 HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\CLSID\{20D04FE0-3AEA-1069-A2D8-08002B30309D}",,0x00000012 +; default shell +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon",,0x00000012 +HKCU,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon","Shell",0x00020000,"%SystemRoot%\explorer.exe" + HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Policies",,0x00000012 HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Run",,0x00000012 HKCU,"Software\Microsoft\Windows\CurrentVersion\Telephony",,0x00000012 diff --git a/reactos/boot/bootdata/hivesft_amd64.inf b/reactos/boot/bootdata/hivesft_amd64.inf index fea8b84e020..006796e8779 100644 --- a/reactos/boot/bootdata/hivesft_amd64.inf +++ b/reactos/boot/bootdata/hivesft_amd64.inf @@ -4,48 +4,124 @@ Signature="$ReactOS$ [AddReg] ; Internet Explorer -HKLM,"Software\Microsoft\Internet Explorer","Version",,"6.0.2900.2180" +HKLM,"SOFTWARE\Microsoft\Internet Explorer","Build",,"62800" +HKLM,"SOFTWARE\Microsoft\Internet Explorer","Version",,"6.0.2800.3959" +HKLM,"SOFTWARE\Microsoft\Internet Explorer","W2kVersion",,"6.0.2800.3959" ; DirectX HKLM,"SOFTWARE\Microsoft\DirectX","Version",0x00000000,"4.09.00.0904" ; RPC -HKLM,Software\Microsoft\Rpc\SecurityService,1,2,"secur32.dll" -HKLM,Software\Microsoft\Rpc\SecurityService,10,2,"secur32.dll" -HKLM,Software\Microsoft\Rpc\SecurityService,14,2,"schannel.dll" -HKLM,Software\Microsoft\Rpc\SecurityService,16,2,"secur32.dll" -HKLM,Software\Microsoft\Rpc\SecurityService,18,2,"secur32.dll" -HKLM,Software\Microsoft\Rpc\SecurityService,68,2,"netlogon.dll" -HKLM,Software\Microsoft\Rpc\SecurityService,9,2,"secur32.dll" +HKLM,"SOFTWARE\Microsoft\Rpc",,0x00000012 +HKLM,"SOFTWARE\Microsoft\Rpc\NetBios",,0x00000012 +HKLM,"SOFTWARE\Microsoft\Rpc","DCOM Protocols",0x00010002,"ncacn_ip_tcp" +HKLM,"SOFTWARE\Microsoft\Rpc\ClientProtocols","ncacn_np",0x00000000,"rpcrt4.dll" +HKLM,"SOFTWARE\Microsoft\Rpc\NameService","DefaultSyntax",2,"3" +HKLM,"SOFTWARE\Microsoft\Rpc\NameService","Endpoint",2,"\pipe\locator" +HKLM,"SOFTWARE\Microsoft\Rpc\NameService","NetworkAddress",2,"\\." +HKLM,"SOFTWARE\Microsoft\Rpc\NameService","Protocol",2,"ncacn_np" +HKLM,"SOFTWARE\Microsoft\Rpc\NameService","ServerNetworkAddress",2,"\\." +HKLM,"SOFTWARE\Microsoft\Rpc\SecurityService","1",2,"secur32.dll" +HKLM,"SOFTWARE\Microsoft\Rpc\SecurityService","10",2,"secur32.dll" +HKLM,"SOFTWARE\Microsoft\Rpc\SecurityService","14",2,"schannel.dll" +HKLM,"SOFTWARE\Microsoft\Rpc\SecurityService","16",2,"secur32.dll" +HKLM,"SOFTWARE\Microsoft\Rpc\SecurityService","18",2,"secur32.dll" +HKLM,"SOFTWARE\Microsoft\Rpc\SecurityService","68",2,"netlogon.dll" +HKLM,"SOFTWARE\Microsoft\Rpc\SecurityService","9",2,"secur32.dll" + +HKLM,"SOFTWARE\Microsoft\Secure",,0x00000012 + +; WBem +HKLM,"SOFTWARE\Microsoft\wbem\ess",,0x00000012 +HKLM,"SOFTWARE\Microsoft\wbem\Transports",,0x00000012 +HKLM,"SOFTWARE\Microsoft\wbem\Scripting",,0x00000012 +HKLM,"SOFTWARE\Microsoft\wbem","Installation Directory",0x00020000,"%SystemRoot%\system32\wbem" +HKLM,"SOFTWARE\Microsoft\wbem","MOF Self-Install Directory",0x00020000,"%SystemRoot%\system32\wbem\mof" ; HTML Help -HKLM,SOFTWARE\Microsoft\Active Setup\Installed Components\{de5aed00-a4bf-11d1-9948-00c04f98bbc9},,2,"HTML Help" -HKLM,SOFTWARE\Microsoft\Active Setup\Installed Components\{de5aed00-a4bf-11d1-9948-00c04f98bbc9},"ComponentID",2,"HTMLHelp" -HKLM,SOFTWARE\Microsoft\Active Setup\Installed Components\{de5aed00-a4bf-11d1-9948-00c04f98bbc9},"IsInstalled",2,1 -HKLM,SOFTWARE\Microsoft\Active Setup\Installed Components\{de5aed00-a4bf-11d1-9948-00c04f98bbc9},"Locale",2,"*" -HKLM,SOFTWARE\Microsoft\Active Setup\Installed Components\{de5aed00-a4bf-11d1-9948-00c04f98bbc9},"Version",2,"4,74,9273,0" +HKLM,"SOFTWARE\Microsoft\Active Setup\Installed Components\{de5aed00-a4bf-11d1-9948-00c04f98bbc9}",,2,"HTML Help" +HKLM,"SOFTWARE\Microsoft\Active Setup\Installed Components\{de5aed00-a4bf-11d1-9948-00c04f98bbc9}","ComponentID",2,"HTMLHelp" +HKLM,"SOFTWARE\Microsoft\Active Setup\Installed Components\{de5aed00-a4bf-11d1-9948-00c04f98bbc9}","IsInstalled",2,1 +HKLM,"SOFTWARE\Microsoft\Active Setup\Installed Components\{de5aed00-a4bf-11d1-9948-00c04f98bbc9}","Locale",2,"*" +HKLM,"SOFTWARE\Microsoft\Active Setup\Installed Components\{de5aed00-a4bf-11d1-9948-00c04f98bbc9}","Version",2,"4,74,9273,0" + +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion","DevicePath",0x00020002,"%SystemRoot%\inf" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion","MediaPathUnexpanded",0x00020000,"%SystemRoot%\Media" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths",,0x00000012 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Applets",,0x00000012 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Control Panel\Cpls",,0x00000012 +; Cursors Schemes +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Control Panel\Cursors\Schemes","ReactOS Default",0x00020000,""",,,,,,,,,,,,,""" ; Common shell folders HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders",,0x00000012 HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folders",,0x00000012 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\DefragPath",,0x00000012 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\DefragPath","",0x00020000,"%systemroot%\system32\dfrg.msc %c:" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\BackupPath",,0x00000012 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\BackupPath","",0x00020000,"%SystemRoot%\system32\ntbackup.exe" + +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Run",,0x00000012 HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce",,0x00000012 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx",,0x00000012 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Setup",,0x00000012 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Setup","DriverCachePath",0x00020002,"%SystemRoot%\Driver Cache" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDlls",,0x00000012 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions",,0x00000012 + HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons",,0x00000012 HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\ClassicStartMenu",,0x00000012 HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\ClassicStartMenu","{208D2C60-3AEA-1069-A2D7-08002B30309D}",0x00010001,0x00000000 +HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Bitbucket",,0x00000012 +HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Bitbucket\Volume",,0x00000012 ; CMD Settings HKLM,"SOFTWARE\Microsoft\Command Processor","AutoRun",0x00020000,"" ; Uninstall Application list -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall",,0x00000010 - -HKLM,"SOFTWARE\Microsoft\Rpc",,0x00000012 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall",,0x00000012 ; Version Information -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion","CurrentVersion",0x00020000,"5.0" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion","CSDVersion",0x00020000,"Service Pack 3" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion","CurrentBuildNumber",0x00020000,"2195" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion","CurrentVersion",0x00020000,"5.2" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion","CSDVersion",0x00020000,"Service Pack 2" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion","CurrentBuildNumber",0x00020000,"3790" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion","InstallDate",0x00010003,0 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion","ProductName",2,"ReactOS" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion","RegDone",0x00000002,"" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion","RegisteredOrganization",2,"" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion","RegisteredOwner",2,"" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion","SoftwareType",2,"System" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Accessibility",,0x00000012 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Compatibility",,0x00000012 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Compatibility32",,0x00000012 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Network",,0x00000012 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Network\Shared Parameters",,0x00000012 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Network\SMAddOns",,0x00000012 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Network\UMAddOns",,0x00000012 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Network\World Full Access Shared Parameters",,0x00000012 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console",,0x00000012 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\Nls","00000409",2,"" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont","0",2,"Lucida Console" + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers",,0x00000012 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\drivers.desc",,0x00000012 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontMapper",,0x00000012 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\HotFix",,0x00000012 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\IME Compatibility",,0x00000012 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\IMM","LoadIMM",0x00010003,0 +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\IMM","LoadCTFIME",0x00010003,0 + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ports","COM1:",2,"9600,n,8,1" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ports","COM2:",2,"9600,n,8,1" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ports","COM3:",2,"9600,n,8,1" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ports","COM4:",2,"9600,n,8,1" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ports","FILE:",2,"" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ports","LPT1:",2,"" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ports","LPT2:",2,"" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Ports","LPT3:",2,"" ; Image File Execution Options (NtGlobalFlag with FLG_SHOW_LDR_SNAPS set for loadlib.exe) HKLM,"Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\loadlib.exe","GlobalFlag",0x00000000,"0x00000002" @@ -53,11 +129,56 @@ HKLM,"Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\ ;HKLM,"Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\soffice.exe","GlobalFlag",0x00000000,"0x00000002" ;HKLM,"Software\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\tlstest.exe","GlobalFlag",0x00000000,"0x00000002" -; MME - TODO: Should not require full paths! -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32","midimapper",0x00000000,"c:\reactos\system32\midimap.dll" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32","wavemapper",0x00000000,"c:\reactos\system32\msacm32.dll" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32","midimapper",0x00000000,"midimap.dll" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32","wavemapper",0x00000000,"msacm32.drv" ;HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32","wave",0x00000000,"sndblst.dll" -HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32","midi",0x00000000,"c:\reactos\system32\beepmidi.dll" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32","midi",0x00000000,"beepmidi.dll" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32","msacm.msadpcm",0x00000000,"msadp32.acm" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32","msacm.msg711",0x00000000,"msg711.acm" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32","msacm.msgsm610",0x00000000,"msgsm32.acm" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32","msacm.imaadpcm",0x00000000,"imaadp32.acm" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32","msacm.winemp3",0x00000000,"winemp3.acm" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32","vidc.cvid",0x00000000,"iccvid.dll" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32","vidc.mrle",0x00000000,"msrle32.dll" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32","vidc.msvc",0x00000000,"msvidc32.dll" + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI32","AVIVideo",0x00000002,"mciavi32.dll" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI32","CDAudio",0x00000002,"mcicda.dll" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI32","Sequencer",0x00000002,"mciseq.dll" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI32","WaveAudio",0x00000002,"mciwave.dll" + +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","aifc",0x00000002,"MPEGVideo" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","asf",0x00000002,"MPEGVideo" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","asx",0x00000002,"MPEGVideo" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","au",0x00000002,"MPEGVideo" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","avi",0x00000002,"AVIVideo" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","cda",0x00000002,"CDAudio" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","lsf",0x00000002,"MPEGVideo" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","lsx",0x00000002,"MPEGVideo" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","m1v",0x00000002,"MPEGVideo" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","m3u",0x00000002,"MPEGVideo" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","mid",0x00000002,"Sequencer" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","midi",0x00000002,"Sequencer" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","mp2",0x00000002,"MPEGVideo" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","mp2v",0x00000002,"MPEGVideo" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","mp3",0x00000002,"MPEGVideo" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","mpa",0x00000002,"MPEGVideo" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","mpe",0x00000002,"MPEGVideo" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","mpeg",0x00000002,"MPEGVideo" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","mpg",0x00000002,"MPEGVideo" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","mpv",0x00000002,"MPEGVideo" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","mpv2",0x00000002,"MPEGVideo" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","rmi",0x00000002,"MPEGVideo" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","rmi",0x00000002,"Sequencer" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","snd",0x00000002,"MPEGVideo" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","wav",0x00000002,"WaveAudio" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","wax",0x00000002,"MPEGVideo" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","wm",0x00000002,"MPEGVideo" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","wma",0x00000002,"MPEGVideo" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","wmp",0x00000002,"MPEGVideo" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","wmv",0x00000002,"MPEGVideo" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","wmx",0x00000002,"MPEGVideo" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\MCI Extensions","wvx",0x00000002,"MPEGVideo" ; Mesa OpenGL Driver HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\OpenGLDrivers","DefaultDriver",0x00000000,"Mesa" @@ -68,10 +189,11 @@ HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\OpenGLDrivers\Mesa","Flags",0 ; User Profile List HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList",,0x00000012 -;HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList","ProfilesDirectory",0x00020000,"%SystemDrive%\Documents and Settings" +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList","ProfilesDirectory",0x00020000,"%SystemDrive%\Documents and Settings" ; Font substitutes ; SysFontSubstitutes are also returned by EnumFontFamilies, FontSubstitutes aren't +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts",,0x00000012 HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes",,0x00000012 ; Time zone settings @@ -104,6 +226,7 @@ HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones","IndexMapping",0x "2c0a", "70",\ "380a", "70",\ "438", "85",\ + "48f", "85",\ "809", "85",\ "816", "85",\ "1809", "85",\ @@ -132,10 +255,12 @@ HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones","IndexMapping",0x "42d", "105",\ "80c", "105",\ "c0a", "105",\ + "490", "105",\ "407", "110",\ "410", "110",\ "413", "110",\ "414", "110",\ + "417", "110",\ "807", "110",\ "810", "110",\ "814", "110",\ @@ -176,8 +301,10 @@ HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones","IndexMapping",0x "429", "160",\ "2001", "165",\ "3801", "165",\ + "42b", "170",\ "420", "185",\ "439", "190",\ + "445", "190",\ "421", "205",\ "41e", "205",\ "42a", "205",\ @@ -884,6 +1011,15 @@ HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\DateTime\Servers","6",0x00000000 HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\DateTime\Servers","7",0x00000000,"time.windows.com" HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\DateTime\Servers","8",0x00000000,"time.nist.gov" +; Telephony +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony",,0x00000012 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Locations","DisableCallWaiting",0x00010003,3 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Locations","DisableCallWaiting0",2,"*70," +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Locations","DisableCallWaiting1",2,"70#," +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Locations","DisableCallWaiting2",2,"1170," +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\tapi3",,0x00000012 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Terminal Manager",,0x00000012 + ; Country Codes HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List",,0x00000012 HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List","CountryListVersion",0x00010001,0x00000019 @@ -965,6 +1101,8 @@ HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\43","Coun HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\43","Name",0x00000000,"Austria" HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\44","CountryCode",0x00010001,0x0000002c HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\44","Name",0x00000000,"United Kingdom" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\45","CountryCode",0x00010001,0x0000002D +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\45","Name",0x00000000,"Denmark" HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\46","CountryCode",0x00010001,0x0000002e HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\46","Name",0x00000000,"Sweden" HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\47","CountryCode",0x00010001,0x0000002f @@ -995,6 +1133,8 @@ HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\63","Coun HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\63","Name",0x00000000,"Philippines" HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\64","CountryCode",0x00010001,0x00000040 HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\64","Name",0x00000000,"New Zealand" +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\66","CountryCode",0x00010001,0x00000042 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\66","Name",0x00000000,"Thailand" HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\7","CountryCode",0x00010001,0x00000007 HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\7","Name",0x00000000,"Russia" HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\705","CountryCode",0x00010001,0x000002C1 @@ -1046,20 +1186,69 @@ HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\996","Nam HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\998","CountryCode",0x00010001,0x000003e6 HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Telephony\Country List\998","Name",0x00000000,"Uzbekistan" -;Cursors Schemes -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Control Panel\Cursors\Schemes","ReactOS Default",0x00020000,"\",,,,,,,,,,,,,\"" - -;PowerCfg +; PowerCfg HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\PowerCfg","LastID",0x00000002,"0" HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\PowerCfg","DiskSpinDownMax",0x00000002,"3600" HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\PowerCfg","DiskSpinDownMin",0x00000002,"3" -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\PowerCfg\GlobalPowerPolicy","Policies",0x00000001,\ +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\PowerCfg\GlobalPowerPolicy","Policies",0x00030003,\ 01,00,00,00,01,00,00,00,01,00,00,00,03,00,00,00 -HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\PowerCfg\PowerPolicies\0","Policies",0x00000001,\ -01,00,00,00,02,00,00,00,04,00,00,00,02,00,00,00,02,00,00,00,00,00,00,00,84,03,00,00,00,00,00,00,84,03,\ -00,00,32,32,00,00,02,00,00,00,04,00,00,c0,00,00,00,00,02,00,00,00,04,00,00,c0,00,00,00,00 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\PowerCfg\PowerPolicies\0","Policies",0x00030003,\ +01,00,00,00,02,00,00,00,04,00,00,00,02,00,00,00,02,00,00,00,00,00,00,00,84,03,00,00,00,00,00,00,84,03,00,00,32,\ +32,00,00,02,00,00,00,04,00,00,C0,00,00,00,00,02,00,00,00,04,00,00,C0,00,00,00,00 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\PowerCfg\PowerPolicies\1","Policies",0x00030003,\ +01,00,00,00,02,00,00,00,03,00,00,00,03,00,00,00,03,00,00,00,60,09,00,00,2C,01,00,00,80,25,00,00,F4,1A,00,00,32,\ +32,00,00,02,00,00,00,04,00,00,C0,00,00,00,00,02,00,00,00,04,00,00,C0,00,00,00,00 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\PowerCfg\PowerPolicies\2","Policies",0x00030003,\ +01,00,00,00,02,00,00,00,03,00,00,00,02,00,00,00,02,00,00,00,00,00,00,00,84,03,00,00,00,00,00,00,9C,18,00,00,32,\ +32,00,00,02,00,00,00,04,00,00,C0,00,00,00,00,02,00,00,00,04,00,00,C0,00,00,00,00 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\PowerCfg\PowerPolicies\3","Policies",0x00030003,\ +01,00,00,00,02,00,00,00,04,00,00,00,02,00,00,00,02,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,5A,\ +5A,00,00,02,00,00,00,04,00,00,C0,00,00,00,00,02,00,00,00,04,00,00,C0,00,00,00,00 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\PowerCfg\PowerPolicies\4","Policies",0x00030003,\ +01,00,00,00,02,00,00,00,04,00,00,00,02,00,00,00,02,00,00,00,00,00,00,00,08,07,00,00,00,00,00,00,04,29,00,00,5A,\ +5A,00,00,02,00,00,00,04,00,00,C0,00,00,00,00,02,00,00,00,04,00,00,C0,00,00,00,00 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\PowerCfg\PowerPolicies\5","Policies",0x00030003,\ +01,00,00,00,02,00,00,00,04,00,00,00,03,00,00,00,03,00,00,00,DC,05,00,00,B4,00,00,00,DC,05,00,00,98,0D,00,00,32,\ +0A,00,00,02,00,00,00,04,00,00,C0,00,00,00,00,02,00,00,00,04,00,00,C0,00,00,00,00 + +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\PowerCfg\ProcessorPolicies\0","Policies",0x00030001,\ +01,00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,28,32,00,00,02,00,\ +00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,28,3C,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,28,50,00,00,\ +01,00,00,00,01,00,00,00,03,00,00,00,00,00,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,0A,14,00,00,02,00,\ +00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,14,28,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,14,46,00,00,\ +01,00,00,00 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\PowerCfg\ProcessorPolicies\1","Policies",0x00030001,\ +01,00,00,00,01,00,00,00,03,00,00,00,00,00,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,28,32,00,00,02,00,\ +00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,28,3C,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,28,50,00,00,\ +01,00,00,00,01,00,00,00,03,00,00,00,00,00,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,0A,14,00,00,02,00,\ +00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,14,28,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,14,46,00,00,\ +01,00,00,00 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\PowerCfg\ProcessorPolicies\2","Policies",0x00030001,\ +01,00,00,00,01,00,00,00,03,00,00,00,00,00,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,28,32,00,00,02,00,\ +00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,28,3C,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,28,50,00,00,\ +01,00,00,00,01,00,00,00,02,00,00,00,00,00,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,0A,14,00,00,02,00,\ +00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,14,28,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,14,46,00,00,\ +01,00,00,00 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\PowerCfg\ProcessorPolicies\3","Policies",0x00030001,\ +01,00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,28,32,00,00,02,00,\ +00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,28,3C,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,28,50,00,00,\ +01,00,00,00,01,00,00,00,00,00,00,00,00,00,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,0A,14,00,00,02,00,\ +00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,14,28,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,14,50,00,00,\ +01,00,00,00 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\PowerCfg\ProcessorPolicies\4","Policies",0x00030001,\ +01,00,00,00,01,00,00,00,03,00,00,00,00,00,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,28,32,00,00,02,00,\ +00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,28,3C,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,28,50,00,00,\ +01,00,00,00,01,00,00,00,03,00,00,00,00,00,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,0A,14,00,00,02,00,\ +00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,14,28,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,14,46,00,00,\ +01,00,00,00 +HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\PowerCfg\ProcessorPolicies\5","Policies",0x00030001,\ +01,00,00,00,01,00,00,00,03,00,00,00,00,00,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,28,32,00,00,02,00,\ +00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,28,3C,00,00,02,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,28,50,00,00,\ +01,00,00,00,01,00,00,00,02,00,00,00,00,00,00,00,03,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,0A,14,00,00,02,00,\ +00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,14,28,00,00,02,00,00,00,A0,86,01,00,A0,86,01,00,A0,86,01,00,14,41,00,00,\ +01,00,00,00 ; deskadp.dll shell extension HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\Device\shellex\PropertySheetHandlers\Display Adapter CPL Extension","",0x00000000,"{42071712-76d4-11d1-8b24-00a0c9068ff3}" @@ -1067,8 +1256,8 @@ HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\Device\shellex\P ; deskmon.dll shell extension HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Controls Folder\Device\shellex\PropertySheetHandlers\Display Monitor CPL Extension","",0x00000000,"{42071713-76d4-11d1-8b24-00a0c9068ff3}" -; Where to download the Mozilla ActiveX control -HKLM,"SOFTWARE\ReactOS\shdocvw","MozillaUrl",0x00000000,"http://links.reactos.org/mozactivex" +HKLM,"SOFTWARE\Microsoft\Ole","EnableDCOM",0x00000000,"Y" +HKLM,"SOFTWARE\Microsoft\Ole","EnableRemoteConnect",0x00000000,"N" ; Keyboard layout switcher ;HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\Run","kbswitch",0x00000000,"kbswitch.exe" diff --git a/reactos/boot/bootdata/hivesys_amd64.inf b/reactos/boot/bootdata/hivesys_amd64.inf index dc907b5e224..977ea93d55b 100644 --- a/reactos/boot/bootdata/hivesys_amd64.inf +++ b/reactos/boot/bootdata/hivesys_amd64.inf @@ -3,6 +3,15 @@ Signature = "$ReactOS$" [AddReg] +HKLM,"SYSTEM\CurrentControlSet\Control","CurrentUser",2,"USERNAME" +HKLM,"SYSTEM\CurrentControlSet\Control","WaitToKillServiceTimeout",2,"20000" +HKLM,"SYSTEM\CurrentControlSet\Control\Biosinfo","InfName",2,"biosinfo.inf" +HKLM,"SYSTEM\CurrentControlSet\Control\PnP",,0x00000012 + +HKLM,"SYSTEM\CurrentControlSet\Control\FileSystem","NtfsDisable8dot3NameCreation",0x00010003,0 +HKLM,"SYSTEM\CurrentControlSet\Control\FileSystem","Win31FileSystem",0x00010001,0 +HKLM,"SYSTEM\CurrentControlSet\Control\FileSystem","Win95TruncatedExtensions",0x00010001,1 + ; Device classes (this list is incomplete... and should be generated from .inf files during installation) HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E973-E325-11CE-BFC1-08002BE10318}",,0x00000000,"Network Client" HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E973-E325-11CE-BFC1-08002BE10318}","Class",0x00000000,"NetClient" @@ -25,6 +34,10 @@ HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E975-E325-11CE-BFC1-08002BE103 HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E975-E325-11CE-BFC1-08002BE10318}","NoDisplayClass",0x00000000,"1" HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E975-E325-11CE-BFC1-08002BE10318}","NoInstallClass",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\Class\{9D6D66A6-0B0C-4563-9077-A0E9A7955AE4}",,0x00000000,"Ramdisk" +HKLM,"SYSTEM\CurrentControlSet\Control\Class\{9D6D66A6-0B0C-4563-9077-A0E9A7955AE4}","Class",0x00000000,"Ramdisk" +HKLM,"SYSTEM\CurrentControlSet\Control\Class\{9D6D66A6-0B0C-4563-9077-A0E9A7955AE4}","Icon",0x00000000,"-5" + ; Default computer name settings HKLM,"SYSTEM\CurrentControlSet\Control\ComputerName",,0x00000012 HKLM,"SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName","ComputerName",0x00000002,"COMPUTERNAME" @@ -32,6 +45,24 @@ HKLM,"SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName","ComputerName" ; Device classes key HKLM,"SYSTEM\CurrentControlSet\Control\DeviceClasses",,0x00000012 +; HAL Chipset Hacks +HKLM,"SYSTEM\CurrentControlSet\Control\HAL","10390530",0x00010001,0x1 +HKLM,"SYSTEM\CurrentControlSet\Control\HAL","10390620",0x00010001,0x1 +HKLM,"SYSTEM\CurrentControlSet\Control\HAL","10B90533",0x00010001,0x1 +HKLM,"SYSTEM\CurrentControlSet\Control\HAL","10B91533",0x00010001,0x1 +HKLM,"SYSTEM\CurrentControlSet\Control\HAL","11060596",0x00010001,0x1 +HKLM,"SYSTEM\CurrentControlSet\Control\HAL","11060686",0x00010001,0x5 +HKLM,"SYSTEM\CurrentControlSet\Control\HAL","1166004F",0x00010001,0x1 +HKLM,"SYSTEM\CurrentControlSet\Control\HAL","11660050",0x00010001,0x1 +HKLM,"SYSTEM\CurrentControlSet\Control\HAL","11660200",0x00010001,0x1 +HKLM,"SYSTEM\CurrentControlSet\Control\HAL","80862410",0x00010001,0x8 +HKLM,"SYSTEM\CurrentControlSet\Control\HAL","80862420",0x00010001,0x8 +HKLM,"SYSTEM\CurrentControlSet\Control\HAL","80862440",0x00010001,0x8 +HKLM,"SYSTEM\CurrentControlSet\Control\HAL","8086244C",0x00010001,0x8 +HKLM,"SYSTEM\CurrentControlSet\Control\HAL","80862480",0x00010001,0x8 +HKLM,"SYSTEM\CurrentControlSet\Control\HAL","8086248C",0x00010001,0x8 +HKLM,"SYSTEM\CurrentControlSet\Control\HAL","80867110",0x00010001,0x1 + ; Hardware profile settings HKLM,"SYSTEM\CurrentControlSet\Control\IDConfigDB",,0x00000012 HKLM,"SYSTEM\CurrentControlSet\Control\IDConfigDB","CurrentConfig",0x00010001,0x00000000 @@ -147,6 +178,10 @@ HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040d","Layout File", HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040d","Layout Text",0x00000000,"Hebrew" HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040d","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5083" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040e","Layout File",0x00000000,"kbdhu.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040e","Layout Text",0x00000000,"Hungarian" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040e","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5033" + HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040f","Layout File",0x00000000,"kbdic.dll" HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040f","Layout Text",0x00000000,"Icelandic" HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000040f","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5013" @@ -260,9 +295,9 @@ HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000426","Layout File", HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000426","Layout Text",0x00000000,"Latvian" HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000426","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5043" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000427","Layout File",0x00000000,"kbdlt.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000427","Layout Text",0x00000000,"Lithuanian IBM" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000427","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5045" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010427","Layout File",0x00000000,"kbdlt1.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010427","Layout Text",0x00000000,"Lithuanian" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010427","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5088" HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000042a","Layout File",0x00000000,"kbdvntc.dll" HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000042a","Layout Text",0x00000000,"Vietnamese" @@ -273,7 +308,7 @@ HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000042b","Layout Text", HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000042b","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5120" HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0001042b","Layout File",0x00000000,"kbdarmw.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0001042b","Layout Text",0x00000000,"Armenian Eastern" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0001042b","Layout Text",0x00000000,"Armenian Western" HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0001042b","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5121" HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\0000042c","Layout File",0x00000000,"kbdazel.dll" @@ -332,10 +367,14 @@ HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000414","Layout File", HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000414","Layout Text",0x00000000,"Norwegian" HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000414","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5018" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000405","Layout File",0x00000000,"kbdcz1.dll" -HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000405","Layout Text",0x00000000,"Czech (QWERTY)" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000405","Layout File",0x00000000,"kbdcz.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000405","Layout Text",0x00000000,"Czech" HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000405","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5031" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010405","Layout File",0x00000000,"kbdcz1.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010405","Layout Text",0x00000000,"Czech (QWERTY)" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00010405","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5032" + HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00011009","Layout File",0x00000000,"kbdcan.dll" HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00011009","Layout Id", 0x00000000,"0020" HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00011009","Layout Text",0x00000000,"Canadian Multilingual Standard" @@ -357,6 +396,80 @@ HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000412","Layout File", HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000412","Layout Text",0x00000000,"Korean" HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layouts\00000412","Layout Display Name",0x00000000,"@%SystemRoot%\system32\input.dll,-5063" +; Keyboard layouts +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout",,0x00000012 +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000402",2,"bg" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000404",2,"ch" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000405",2,"cz" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000406",2,"dk" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000407",2,"gr" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000408",2,"gk" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000409",2,"us" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","0000040A",2,"sp" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","0000040B",2,"su" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","0000040C",2,"fr" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","0000040E",2,"hu" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","0000040F",2,"is" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000410",2,"it" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000411",2,"jp" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000412",2,"ko" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000413",2,"nl" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000414",2,"no" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000415",2,"pl" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000416",2,"br" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000418",2,"ro" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000419",2,"ru" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","0000041A",2,"yu" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","0000041B",2,"sl" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","0000041C",2,"us" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","0000041D",2,"sv" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","0000041F",2,"tr" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000422",2,"us" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000423",2,"us" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000424",2,"yu" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000425",2,"et" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000426",2,"us" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000427",2,"us" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000804",2,"ch" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000807",2,"sg" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000809",2,"uk" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","0000080A",2,"la" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","0000080C",2,"be" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000813",2,"be" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000816",2,"po" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000C0C",2,"cf" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00000C1A",2,"us" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00001009",2,"us" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","0000100C",2,"sf" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00001809",2,"us" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00010402",2,"us" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00010405",2,"cz" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00010407",2,"gr" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00010408",2,"gk" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00010409",2,"dv" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","0001040A",2,"sp" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","0001040E",2,"hu" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00010410",2,"it" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00010415",2,"pl" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00010419",2,"ru" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","0001041B",2,"sl" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","0001041F",2,"tr" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00010426",2,"us" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00010C0C",2,"cf" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00010C1A",2,"us" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00020408",2,"gk" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00020409",2,"us" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00030409",2,"usl" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00040409",2,"usr" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes","00050408",2,"gk" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybIDs","00000410",2,"141" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybIDs","0000041F",2,"179" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybIDs","00010408",2,"220" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybIDs","00010410",2,"142" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybIDs","00010415",2,"214" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybIDs","0001041F",2,"440" +HKLM,"SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybIDs","00020408",2,"319" + ; Network HKLM,"SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}",,0x00000000,"Network Adapters" HKLM,"SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}","Class",0x00000000,"Net" @@ -366,6 +479,7 @@ HKLM,"SYSTEM\CurrentControlSet\Control\Network\{4D36E974-E325-11CE-BFC1-08002BE1 HKLM,"SYSTEM\CurrentControlSet\Control\Network\{4D36E974-E325-11CE-BFC1-08002BE10318}","Class",0x00000000,"NetService" HKLM,"SYSTEM\CurrentControlSet\Control\Network\{4D36E975-E325-11CE-BFC1-08002BE10318}",,0x00000000,"Network Protocol" HKLM,"SYSTEM\CurrentControlSet\Control\Network\{4D36E975-E325-11CE-BFC1-08002BE10318}","Class",0x00000000,"NetTrans" +HKLM,"SYSTEM\CurrentControlSet\Control\NetworkProvider\Order","ProviderOrder",0x00000000,"" ; NLS Files HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","37",0x00000000,"c_037.nls" @@ -412,6 +526,7 @@ HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","10029",0x00000000,"c_10029 HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","10079",0x00000000,"c_10079.nls" HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","10081",0x00000000,"c_10081.nls" HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","20866",0x00000000,"c_20866.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","21866",0x00000000,"c_21866.nls" HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","28591",0x00000000,"c_28591.nls" HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","28592",0x00000000,"c_28592.nls" HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","28593",0x00000000,"c_28593.nls" @@ -421,15 +536,29 @@ HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","28596",0x00000000,"c_28596 HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","28597",0x00000000,"c_28597.nls" HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","28598",0x00000000,"c_28598.nls" HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","28599",0x00000000,"c_28599.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","28600",0x00000000,"c_28600.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","28603",0x00000000,"c_28603.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","28604",0x00000000,"c_28604.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","28605",0x00000000,"c_28605.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","28606",0x00000000,"c_28606.nls" HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","ACP",0x00000000,"1252" HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","OEMCP",0x00000000,"437" HKLM,"SYSTEM\CurrentControlSet\Control\NLS\CodePage","MACCP",0x00000000,"10000" +HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage\EUDCCodeRange","932",2,"F040-F9FC" +HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage\EUDCCodeRange","936",2,"AAA1-AFFE,F8A1-FEFE,A140-A7A0" +HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage\EUDCCodeRange","949",2,"C9A1-C9FE,FEA1-FEFE" +HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage\EUDCCodeRange","950",2,"FA40-FEFE,8E40-A0FE,8140-8DFE,C6A1-C8FE" +HKLM,"SYSTEM\CurrentControlSet\Control\Nls\CodePage\EUDCCodeRange","Unicode",2,"E000-F8FF" + ; NLS Language settings HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0402",0x00000000,"l_intl.nls" HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0403",0x00000000,"l_intl.nls" HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0404",0x00000000,"l_intl.nls" HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0804",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0c04",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","1004",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","1404",0x00000000,"l_intl.nls" HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0405",0x00000000,"l_intl.nls" HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0406",0x00000000,"l_intl.nls" HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0407",0x00000000,"l_intl.nls" @@ -489,6 +618,7 @@ HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0814",0x00000000,"l_intl.n HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0415",0x00000000,"l_intl.nls" HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0416",0x00000000,"l_intl.nls" HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0816",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0417",0x00000000,"l_intl.nls" HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0418",0x00000000,"l_intl.nls" HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0419",0x00000000,"l_intl.nls" HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","041a",0x00000000,"l_intl.nls" @@ -526,8 +656,11 @@ HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","083e",0x00000000,"l_intl.n HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0441",0x00000000,"l_intl.nls" ;HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0443",0x00000000,"l_intl.nls" HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0843",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0445",0x00000000,"l_intl.nls" ;HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0455",0x00000000,"l_intl.nls" HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0456",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","048f",0x00000000,"l_intl.nls" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","0490",0x00000000,"l_intl.nls" HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","Default",0x00000000,"0409" HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","InstallLanguage",0x00000000,"0409" @@ -537,8 +670,8 @@ HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language","InstallLanguage",0x0000000 HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale",,0x00000012 HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000402",0x00000000,"5" HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000403",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000404",0x00000000,"" -HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000804",0x00000000,"" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000404",0x00000000,"9" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000804",0x00000000,"a" HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000405",0x00000000,"2" HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000406",0x00000000,"1" HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000407",0x00000000,"1" @@ -583,7 +716,7 @@ HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000c0c",0x00000000,"1" HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000100c",0x00000000,"1" HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000140c",0x00000000,"1" HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000180c",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000040d",0x00000000,"" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000040d",0x00000000,"c" HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000040e",0x00000000,"2" HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000040f",0x00000000,"1" HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000410",0x00000000,"1" @@ -597,6 +730,7 @@ HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000814",0x00000000,"1" HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000415",0x00000000,"2" HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000416",0x00000000,"1" HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000816",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000417",0x00000000,"1" HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000418",0x00000000,"2" HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000419",0x00000000,"5" HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000041a",0x00000000,"2" @@ -606,7 +740,7 @@ HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000041b",0x00000000,"2" HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000041c",0x00000000,"2" HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000041d",0x00000000,"1" HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000081d",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000041e",0x00000000,"" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000041e",0x00000000,"b" HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000041f",0x00000000,"6" ;HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000420",0x00000000,"" HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000421",0x00000000,"1" @@ -618,15 +752,15 @@ HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000426",0x00000000,"3" HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000427",0x00000000,"3" ;HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000429",0x00000000,"" ;HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000042a",0x00000000,"" -HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000042b",0x00000000,"" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000042b",0x00000000,"11" ;HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000042c",0x00000000,"6" ;HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000082c",0x00000000,"5" HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000042d",0x00000000,"1" HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000042f",0x00000000,"5" HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000436",0x00000000,"1" -;HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000437",0x00000000,"" +;HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000437",0x00000000,"10" HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000438",0x00000000,"1" -HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000439",0x00000000,"" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000439",0x00000000,"f" HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000043e",0x00000000,"1" HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000083e",0x00000000,"1" ;HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000043f",0x00000000,"5" @@ -634,8 +768,11 @@ HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000083e",0x00000000,"1" HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000441",0x00000000,"1" ;HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000443",0x00000000,"6" HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000843",0x00000000,"5" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000445",0x00000000,"f" ;HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000455",0x00000000,"" HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000456",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","0000048f",0x00000000,"1" +HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale","00000490",0x00000000,"1" HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language Groups","1",0x00000000,"1" HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Language Groups","2",0x00000000,"1" @@ -663,6 +800,43 @@ HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale\Alternate Sorts","00021004",0x HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale\Alternate Sorts","00021404",0x00000000,"" HKLM,"SYSTEM\CurrentControlSet\Control\NLS\Locale\Alternate Sorts","00030404",0x00000000,"" +HKLM,"SYSTEM\CurrentControlSet\Control\PnP\Pci\CardList","Intel 82441FX",0x00030003,\ +01,00,00,00,86,80,37,12,00,00,00,00,00,00,00,00 +HKLM,"SYSTEM\CurrentControlSet\Control\PnP\Pci\CardList","Intel 82439HX",0x00030003,\ +01,00,00,00,86,80,50,12,00,00,00,00,00,00,00,00 +HKLM,"SYSTEM\CurrentControlSet\Control\PnP\Pci\CardList","Intel 82439TX",0x00030003,\ +01,00,00,00,86,80,00,71,00,00,00,00,00,00,00,00 +HKLM,"SYSTEM\CurrentControlSet\Control\PnP\Pci\CardList","Intel 82443LX/EX",0x00030003,\ +01,00,00,00,86,80,80,71,00,00,00,00,00,00,00,00 +HKLM,"SYSTEM\CurrentControlSet\Control\PnP\Pci\CardList","Intel 82443BX1",0x00030003,\ +01,00,00,00,86,80,90,71,00,00,00,00,00,00,00,00 +HKLM,"SYSTEM\CurrentControlSet\Control\PnP\Pci\CardList","Intel 82443BX2",0x00030003,\ +01,00,00,00,86,80,92,71,00,00,00,00,00,00,00,00 +HKLM,"SYSTEM\CurrentControlSet\Control\PnP\Pci\CardList","Intel 82443GX",0x00030003,\ +01,00,00,00,86,80,a0,71,00,00,00,00,00,00,00,00 +HKLM,"SYSTEM\CurrentControlSet\Control\PnP\Pci\CardList","VIA Tech1",0x00030003,\ +01,00,00,00,06,11,01,05,00,00,00,00,00,00,00,00 +HKLM,"SYSTEM\CurrentControlSet\Control\PnP\Pci\CardList","VIA Tech2",0x00030003,\ +01,00,00,00,06,11,91,06,00,00,00,00,00,00,00,00 +HKLM,"SYSTEM\CurrentControlSet\Control\PnP\Pci\CardList","Toshiba",0x00030003,\ +01,00,00,00,79,11,01,06,00,00,00,00,00,00,00,00 +HKLM,"SYSTEM\CurrentControlSet\Control\PnP\Pci\CardList","Ali",0x00030003,\ +01,00,00,00,b9,10,21,15,00,00,00,00,00,00,00,00 + +HKLM,"SYSTEM\CurrentControlSet\Control\Print","MajorVersion",0x00010001,2 +HKLM,"SYSTEM\CurrentControlSet\Control\Print","MinorVersion",0x00010003,0 +HKLM,"SYSTEM\CurrentControlSet\Control\Print","PriorityClass",0x00010003,0 +HKLM,"SYSTEM\CurrentControlSet\Control\Print\Environments",,0x00000012 +HKLM,"SYSTEM\CurrentControlSet\Control\Print\Monitors",,0x00000012 +HKLM,"SYSTEM\CurrentControlSet\Control\Print\Monitors\Local Port","Driver",2,"localspl.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Print\Printers",,0x00000012 + +HKLM,"SYSTEM\CurrentControlSet\Control\ProductOptions","ProductType",2,"WinNT" +HKLM,"SYSTEM\CurrentControlSet\Control\ProductOptions","ProductSuite",0x00010002,"" + +HKLM,"SYSTEM\CurrentControlSet\Control\SecurityProviders","SecurityProviders",2,"schannel.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\SecurityProviders\SaslProfiles",,0x00000012 + ; Some installers check for SP6 HKLM,"SYSTEM\CurrentControlSet\Control\Windows","CSDVersion",0x00010001,0x00000600 @@ -691,10 +865,12 @@ HKLM,"SYSTEM\CurrentControlSet\Control\ServiceGroupOrder","List",0x00010000, \ "PNP_TDI", \ "TDI", \ "PlugPlay", \ + "SpoolerGroup", \ "Extended Base" ; Set the timeout for directx/ReactX graphic surface lock see _EDD_DIRECTDRAW_GLOBAL struct for more info HKLM,"SYSTEM\CurrentControlSet\Control\GraphicsDrivers\DCI","Timeout",0x00010001,0x00000007 +HKLM,"SYSTEM\CurrentControlSet\Control\GraphicsDrivers\UseNewKey",,0x00000012 ; Group order, the first DWORD is the count of entries, ; the following dwords are the tag entries for the load order. @@ -725,7 +901,7 @@ HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\DOS Devices","UNC",0x0000 ; System environment settings HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Environment","ComSpec",0x00020000,"%SystemRoot%\system32\cmd.exe" HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Environment","OS",0x00020000,"ReactOS" -HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Environment","Path",0x00020000,"%SystemRoot%\bin;%SystemRoot%\system32;%SystemRoot%" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Environment","Path",0x00020000,"%SystemRoot%\bin;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\system32\wbem" HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Environment","windir",0x00020000,"%SystemRoot%" HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Environment","TEMP",0x00020000,"%SystemDrive%\TEMP" HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Environment","TMP",0x00020000,"%SystemDrive%\TEMP" @@ -736,7 +912,24 @@ HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Environment","PROCESSOR_A ; Known DLLs HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","DllDirectory",0x00020000,"%SystemRoot%\system32" HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","advapi32",0x00000000,"advapi32.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","comdlg32",0x00000000,"comdlg32.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","gdi32",0x00000000,"gdi32.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","imagehlp",0x00000000,"imagehlp.dll" HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","kernel32",0x00000000,"kernel32.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","lz32",0x00000000,"lz32.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","ole32",0x00000000,"ole32.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","oleaut32",0x00000000,"oleaut32.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","olecli32",0x00000000,"olecli32.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","olesvr32",0x00000000,"olesvr32.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","olethk32",0x00000000,"olethk32.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","rpcrt4",0x00000000,"rpcrt4.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","shell32",0x00000000,"shell32.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","url",0x00000000,"url.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","urlmon",0x00000000,"urlmon.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","user32",0x00000000,"user32.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","version",0x00000000,"version.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","wininet",0x00000000,"wininet.dll" +HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\KnownDlls","wldap32",0x00000000,"wldap32.dll" ; Pagefile settings HKLM,"SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management","PagingFiles",0x00010000, \ @@ -765,13 +958,13 @@ HKLM,"SYSTEM\CurrentControlSet\Services\Afd","ImagePath",0x00020000,"system32\dr HKLM,"SYSTEM\CurrentControlSet\Services\Afd","Start",0x00010001,0x00000001 HKLM,"SYSTEM\CurrentControlSet\Services\Afd","Type",0x00010001,0x00000001 -; Atapi miniport driver -HKLM,"SYSTEM\CurrentControlSet\Services\Atapi","ErrorControl",0x00010001,0x00000000 -HKLM,"SYSTEM\CurrentControlSet\Services\Atapi","Group",0x00000000,"SCSI Miniport" -HKLM,"SYSTEM\CurrentControlSet\Services\Atapi","ImagePath",0x00020000,"system32\drivers\atapi.sys" -HKLM,"SYSTEM\CurrentControlSet\Services\Atapi","Start",0x00010001,0x00000000 -HKLM,"SYSTEM\CurrentControlSet\Services\Atapi","Type",0x00010001,0x00000001 -HKLM,"SYSTEM\CurrentControlSet\Services\Atapi","Tag",0x00010001,0x00000010 +; UniATA/Atapi miniport driver +HKLM,"SYSTEM\CurrentControlSet\Services\UniATA","ErrorControl",0x00010001,0x00000000 +HKLM,"SYSTEM\CurrentControlSet\Services\UniATA","Group",0x00000000,"System Bus Extender" +HKLM,"SYSTEM\CurrentControlSet\Services\UniATA","ImagePath",0x00020000,"system32\drivers\uniata.sys" +HKLM,"SYSTEM\CurrentControlSet\Services\UniATA","Start",0x00010001,0x00000000 +HKLM,"SYSTEM\CurrentControlSet\Services\UniATA","Type",0x00010001,0x00000001 +HKLM,"SYSTEM\CurrentControlSet\Services\UniATA","Tag",0x00010001,0x00000010 ; Audio Service HKLM,"SYSTEM\CurrentControlSet\Services\RosAudioSrv","DisplayName",0x00000000,"Audio Service" @@ -879,14 +1072,6 @@ HKLM,"SYSTEM\CurrentControlSet\Services\Fs_Rec","ImagePath",0x00020000,"system32 HKLM,"SYSTEM\CurrentControlSet\Services\Fs_Rec","Start",0x00010001,0x00000001 HKLM,"SYSTEM\CurrentControlSet\Services\Fs_Rec","Type",0x00010001,0x00000008 -; i8042 port driver -HKLM,"SYSTEM\CurrentControlSet\Services\i8042prt","ErrorControl",0x00010001,0x00000000 -HKLM,"SYSTEM\CurrentControlSet\Services\i8042prt","Group",0x00000000,"Keyboard Port" -HKLM,"SYSTEM\CurrentControlSet\Services\i8042prt","ImagePath",0x00020000,"system32\drivers\i8042prt.sys" -HKLM,"SYSTEM\CurrentControlSet\Services\i8042prt","Start",0x00010001,0x00000001 -HKLM,"SYSTEM\CurrentControlSet\Services\i8042prt","Type",0x00010001,0x00000001 -HKLM,"SYSTEM\CurrentControlSet\Services\i8042prt\Parameters","BreakOnSysRq",0x00010001,0x00000001 - ; Kernel-Mode Tests ;HKLM,"SYSTEM\CurrentControlSet\Services\Kmtest","ErrorControl",0x00010001,0x00000000 ;HKLM,"SYSTEM\CurrentControlSet\Services\Kmtest","Group",0x00000000,"Base" @@ -903,21 +1088,6 @@ HKLM,"SYSTEM\CurrentControlSet\Services\kbdclass","Type",0x00010001,0x00000001 HKLM,"SYSTEM\CurrentControlSet\Services\kbdclass\Parameters","ConnectMultiplePorts",0x00010001,1 HKLM,"SYSTEM\CurrentControlSet\Control\Class\{4D36E96B-E325-11CE-BFC1-08002BE10318}","UpperFilters",0x00010000,"kbdclass" -; SB16 driver -HKLM,"SYSTEM\CurrentControlSet\Services\sndblst","Group",0x00000000,"Base" -HKLM,"SYSTEM\CurrentControlSet\Services\sndblst","ServiceType",0x00010001,0x00000001 -HKLM,"SYSTEM\CurrentControlSet\Services\sndblst","Type",0x00010001,0x00000001 -HKLM,"SYSTEM\CurrentControlSet\Services\sndblst","Start",0x00010001,0x00000004 -HKLM,"SYSTEM\CurrentControlSet\Services\sndblst","ErrorControl",0x00010001,0x00000001 -HKLM,"SYSTEM\CurrentControlSet\Services\sndblst","ImagePath",0x00020000,"system32\drivers\sndblst.sys" -;HKLM,"SYSTEM\CurrentControlSet\Services\sndblst\Parameters\Device0","DmaChannel",0x00010001,0x00000001 -;HKLM,"SYSTEM\CurrentControlSet\Services\sndblst\Parameters\Device0","DmaChannel16",0x00010001,0x00000005 -;HKLM,"SYSTEM\CurrentControlSet\Services\sndblst\Parameters\Device0","Port",0x00010001,0x00000220 -;HKLM,"SYSTEM\CurrentControlSet\Services\sndblst\Parameters\Device0","Interrupt",0x00010001,0x00000005 -;HKLM,"SYSTEM\CurrentControlSet\Services\sndblst\Parameters\Device0","DSP Version",0x00010001,0x00000401 -HKLM,"SYSTEM\CurrentControlSet\Services\sndblst\Parameters\Device0\Devices","SBWaveIn0",0x00010001,0x00000001 -HKLM,"SYSTEM\CurrentControlSet\Services\sndblst\Parameters\Device0\Devices","SBWaveOut0",0x00010001,0x00000002 - ; MPU-401 MIDI driver HKLM,"SYSTEM\CurrentControlSet\Services\mpu401","Group",0x00000000,"Base" HKLM,"SYSTEM\CurrentControlSet\Services\mpu401","ServiceType",0x00010001,0x00000001 @@ -949,12 +1119,12 @@ HKLM,"SYSTEM\CurrentControlSet\Services\Ndis","Start",0x00010001,0x00000000 HKLM,"SYSTEM\CurrentControlSet\Services\Ndis","Type",0x00010001,0x00000001 ; NetLogon -HKLM,"SYSTEM\CurrentControlSet\Services\NetLogon","DisplayName",0x00000000,"Net Logon" -HKLM,"SYSTEM\CurrentControlSet\Services\NetLogon","Description",0x00000000,"Sets up a secure channel to a domain controller for domain authentication" -HKLM,"SYSTEM\CurrentControlSet\Services\NetLogon","ErrorControl",0x00010001,0x00000001 -HKLM,"SYSTEM\CurrentControlSet\Services\Netlogon","ImagePath",0x00020000,"%SystemRoot%\system32\lsass.exe" -HKLM,"SYSTEM\CurrentControlSet\Services\NetLogon","Start",0x00010001,0x00000003 -HKLM,"SYSTEM\CurrentControlSet\Services\Netlogon","Type",0x00010001,0x00000020 +;HKLM,"SYSTEM\CurrentControlSet\Services\NetLogon","DisplayName",0x00000000,"Net Logon" +;HKLM,"SYSTEM\CurrentControlSet\Services\NetLogon","Description",0x00000000,"Sets up a secure channel to a domain controller for domain authentication" +;HKLM,"SYSTEM\CurrentControlSet\Services\NetLogon","ErrorControl",0x00010001,0x00000001 +;HKLM,"SYSTEM\CurrentControlSet\Services\Netlogon","ImagePath",0x00020000,"%SystemRoot%\system32\lsass.exe" +;HKLM,"SYSTEM\CurrentControlSet\Services\NetLogon","Start",0x00010001,0x00000003 +;HKLM,"SYSTEM\CurrentControlSet\Services\Netlogon","Type",0x00010001,0x00000020 ; Named Pipe filesystem driver HKLM,"SYSTEM\CurrentControlSet\Services\Npfs","ErrorControl",0x00010001,0x00000000 @@ -999,7 +1169,7 @@ HKLM,"SYSTEM\CurrentControlSet\Services\Rpcss","Description",0x00000000,"RPC sub HKLM,"SYSTEM\CurrentControlSet\Services\Rpcss","ErrorControl",0x00010001,0x00000001 HKLM,"SYSTEM\CurrentControlSet\Services\Rpcss","Group",0x00000000," RPC Service" HKLM,"SYSTEM\CurrentControlSet\Services\Rpcss","ImagePath",0x00020000,"%SystemRoot%\system32\rpcss.exe" -HKLM,"SYSTEM\CurrentControlSet\Services\Rpcss","Start",0x00010001,0x00000004 +HKLM,"SYSTEM\CurrentControlSet\Services\Rpcss","Start",0x00010001,0x00000002 HKLM,"SYSTEM\CurrentControlSet\Services\Rpcss","Type",0x00010001,0x00000010 ; Scsiport driver @@ -1009,6 +1179,28 @@ HKLM,"SYSTEM\CurrentControlSet\Services\Scsiport","ImagePath",0x00020000,"system HKLM,"SYSTEM\CurrentControlSet\Services\Scsiport","Start",0x00010001,0x00000000 HKLM,"SYSTEM\CurrentControlSet\Services\Scsiport","Type",0x00010001,0x00000001 +; Spooler service +HKLM,"SYSTEM\CurrentControlSet\Services\Spooler","DependOnService",0x00010000,"RPCSS" +HKLM,"SYSTEM\CurrentControlSet\Services\Spooler","DisplayName",0x00000000,"Printer Spooler" +HKLM,"SYSTEM\CurrentControlSet\Services\Spooler","Description",0x00000000,"Printer Spooler" +HKLM,"SYSTEM\CurrentControlSet\Services\Spooler","ErrorControl",0x00010001,0x00000001 +HKLM,"SYSTEM\CurrentControlSet\Services\Spooler","Group",0x00000000,"SpoolerGroup" +HKLM,"SYSTEM\CurrentControlSet\Services\Spooler","ImagePath",0x00020000,"%SystemRoot%\system32\spoolsv.exe" +HKLM,"SYSTEM\CurrentControlSet\Services\Spooler","ObjectName",0x00000000,"LocalSystem" +HKLM,"SYSTEM\CurrentControlSet\Services\Spooler","Start",0x00010001,0x00000002 +HKLM,"SYSTEM\CurrentControlSet\Services\Spooler","Type",0x00010001,0x00000110 + +; WLAN service +HKLM,"SYSTEM\CurrentControlSet\Services\WlanSvc","DependOnService",0x00010000,"RPCSS" +HKLM,"SYSTEM\CurrentControlSet\Services\WlanSvc","DisplayName",0x00000000,"WLAN Service" +HKLM,"SYSTEM\CurrentControlSet\Services\WlanSvc","Description",0x00000000,"WLAN Service" +HKLM,"SYSTEM\CurrentControlSet\Services\WlanSvc","ErrorControl",0x00010001,0x00000001 +HKLM,"SYSTEM\CurrentControlSet\Services\WlanSvc","Group",0x00000000,"TDI" +HKLM,"SYSTEM\CurrentControlSet\Services\WlanSvc","ImagePath",0x00020000,"%SystemRoot%\system32\wlansvc.exe" +HKLM,"SYSTEM\CurrentControlSet\Services\WlanSvc","ObjectName",0x00000000,"LocalSystem" +HKLM,"SYSTEM\CurrentControlSet\Services\WlanSvc","Start",0x00010001,0x00000003 +HKLM,"SYSTEM\CurrentControlSet\Services\WlanSvc","Type",0x00010001,0x00000110 + ; Simple TCP services HKLM,"SYSTEM\CurrentControlSet\Services\tcpsvcs","Description",0x00000000,"Supports the following TCP/IP services: Chargen, Daytime, Discard, Echo, QOTD" HKLM,"SYSTEM\CurrentControlSet\Services\tcpsvcs","DisplayName",0x00000000,"Simple TCP/IP Services" @@ -1018,6 +1210,23 @@ HKLM,"SYSTEM\CurrentControlSet\Services\tcpsvcs","ImagePath",0x00020000,"%System HKLM,"SYSTEM\CurrentControlSet\Services\tcpsvcs","Start",0x00010001,0x00000003 HKLM,"SYSTEM\CurrentControlSet\Services\tcpsvcs","Type",0x00010001,0x00000020 +; ReactOS Telnet Daemon +HKLM,"SYSTEM\CurrentControlSet\Services\telnetd","Description",0x00000000,"ReactOS Telnet Daemon" +HKLM,"SYSTEM\CurrentControlSet\Services\telnetd","DisplayName",0x00000000,"ReactOS Telnet Daemon" +HKLM,"SYSTEM\CurrentControlSet\Services\telnetd","ErrorControl",0x00010001,0x00000001 +HKLM,"SYSTEM\CurrentControlSet\Services\telnetd","Group",0x00000000,"Network" +HKLM,"SYSTEM\CurrentControlSet\Services\telnetd","ImagePath",0x00020000,"%SystemRoot%\system32\telnetd.exe" +HKLM,"SYSTEM\CurrentControlSet\Services\telnetd","Start",0x00010001,0x00000003 +HKLM,"SYSTEM\CurrentControlSet\Services\telnetd","Type",0x00010001,0x00000020 + +; Sound Blaster (NT4) +;HKLM,"SYSTEM\CurrentControlSet\Services\sndblst","Description",0x00000000,"Sound Blaster (NT4)" +;HKLM,"SYSTEM\CurrentControlSet\Services\sndblst","ErrorControl",0x00010001,0x00000001 +;HKLM,"SYSTEM\CurrentControlSet\Services\sndblst","Group",0x00000000,"Base" +;HKLM,"SYSTEM\CurrentControlSet\Services\sndblst","ImagePath",0x00020000,"system32\drivers\sndblst.sys" +;HKLM,"SYSTEM\CurrentControlSet\Services\sndblst","Start",0x00010001,0x00000003 +;HKLM,"SYSTEM\CurrentControlSet\Services\sndblst","Type",0x00010001,0x00000001 + ; Virtual FAT filesystem driver HKLM,"SYSTEM\CurrentControlSet\Services\fastfat","ErrorControl",0x00010001,0x00000000 HKLM,"SYSTEM\CurrentControlSet\Services\fastfat","Group",0x00000000,"Boot File System" @@ -1025,6 +1234,13 @@ HKLM,"SYSTEM\CurrentControlSet\Services\fastfat","ImagePath",0x00020000,"system3 HKLM,"SYSTEM\CurrentControlSet\Services\fastfat","Start",0x00010001,0x00000000 HKLM,"SYSTEM\CurrentControlSet\Services\fastfat","Type",0x00010001,0x00000002 +; RAM Disk class driver +HKLM,"SYSTEM\CurrentControlSet\Services\RamDisk","ErrorControl",0x00010001,0x00000000 +HKLM,"SYSTEM\CurrentControlSet\Services\RamDisk","Group",0x00000000,"Boot File System" +HKLM,"SYSTEM\CurrentControlSet\Services\RamDisk","ImagePath",0x00020000,"system32\drivers\ramdisk.sys" +HKLM,"SYSTEM\CurrentControlSet\Services\RamDisk","Start",0x00010001,0x00000000 +HKLM,"SYSTEM\CurrentControlSet\Services\RamDisk","Type",0x00010001,0x00000002 + ; EXT2 Filesystem driver HKLM,"SYSTEM\CurrentControlSet\Services\Ext2fs","ErrorControl",0x00010001,0x00000000 HKLM,"SYSTEM\CurrentControlSet\Services\Ext2fs","Group",0x00000000,"Boot File System" @@ -1061,11 +1277,18 @@ HKLM,"SYSTEM\CurrentControlSet\Hardware Profiles\Current\System\CurrentControlSe HKLM,"SYSTEM\CurrentControlSet\Hardware Profiles\Current\System\CurrentControlSet\Services\Vga\Device0","DefaultSettings.YResolution",0x00010001,480 ; USB uhci/ehci driver -;HKLM,"SYSTEM\CurrentControlSet\Services\usbdriver","ErrorControl",0x00010001,0x00000000 -;HKLM,"SYSTEM\CurrentControlSet\Services\usbdriver","Group",0x00000000,"Base" -;HKLM,"SYSTEM\CurrentControlSet\Services\usbdriver","ImagePath",0x00020000,"system32\drivers\usbdriver.sys" -;HKLM,"SYSTEM\CurrentControlSet\Services\usbdriver","Start",0x00010001,0x00000001 -;HKLM,"SYSTEM\CurrentControlSet\Services\usbdriver","Type",0x00010001,0x00000001 +HKLM,"SYSTEM\CurrentControlSet\Services\usbdriver","ErrorControl",0x00010001,0x00000000 +HKLM,"SYSTEM\CurrentControlSet\Services\usbdriver","Group",0x00000000,"Base" +HKLM,"SYSTEM\CurrentControlSet\Services\usbdriver","ImagePath",0x00020000,"system32\drivers\usbdriver.sys" +HKLM,"SYSTEM\CurrentControlSet\Services\usbdriver","Start",0x00010001,0x00000001 +HKLM,"SYSTEM\CurrentControlSet\Services\usbdriver","Type",0x00010001,0x00000001 + +; USB storage driver +;HKLM,"SYSTEM\CurrentControlSet\Services\usbstor","ErrorControl",0x00010001,0x00000000 +;HKLM,"SYSTEM\CurrentControlSet\Services\usbstor","Group",0x00000000,"Extended Base" +;HKLM,"SYSTEM\CurrentControlSet\Services\usbstor","ImagePath",0x00020000,"system32\drivers\usbstor.sys" +;HKLM,"SYSTEM\CurrentControlSet\Services\usbstor","Start",0x00010001,0x00000003 +;HKLM,"SYSTEM\CurrentControlSet\Services\usbstor","Type",0x00010001,0x00000001 ; Windows Installer Service HKLM,"SYSTEM\CurrentControlSet\Services\MSIserver","DisplayName",0x00000000,"ReactOS Installer" diff --git a/reactos/boot/bootdata/txtsetup.sif b/reactos/boot/bootdata/txtsetup.sif index 6673c3e697d..7977e447752 100644 --- a/reactos/boot/bootdata/txtsetup.sif +++ b/reactos/boot/bootdata/txtsetup.sif @@ -13,7 +13,7 @@ Signature = "$ReactOS$" [SourceDisksFiles] acpi.sys=,,,,,,,,,,,,4 -;uniata.sys=,,,,,,x,,,,,,4 +uniata.sys=,,,,,,x,,,,,,4 buslogic.sys=,,,,,,x,,,,,,4 blue.sys=,,,,,,x,,,,,,4 bootvid.dll=,,,,,,,,,,,,2 @@ -32,8 +32,8 @@ ntfs.sys=,,,,,,,,,,,,4 pci.sys=,,,,,,,,,,,,4 scsiport.sys=,,,,,,x,,,,,,4 fastfat.sys=,,,,,,x,,,,,,4 -;ramdisk.sys=,,,,,,x,,,,,,4 -;ext2.sys=,,,,,,x,,,,,,4 +ramdisk.sys=,,,,,,x,,,,,,4 +ext2.sys=,,,,,,x,,,,,,4 [HardwareIdsDatabase] *PNP0C08 = acpi @@ -50,7 +50,7 @@ Cabinet=reactos.cab [SetupData] DefaultPath = \ReactOS OsLoadOptions = "/NOGUIBOOT /NODEBUG" -DbgOsLoadOptions = "/NOGUIBOOT /DEBUGPORT=COM2 /BAUDRATE=115200" +DbgOsLoadOptions = "/NOGUIBOOT /DEBUGPORT=COM1" ;OsLoadOptions = "/NOGUIBOOT /DEBUGPORT=SCREEN" ;OsLoadOptions = "/NOGUIBOOT /DEBUGPORT=BOCHS" From 6e87c963931c5165d4d6370ba2c0711e50283925 Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Thu, 17 Dec 2009 05:55:53 +0000 Subject: [PATCH 235/286] [uniata] - Make x86 specific optimizations x86 specific, use macros otherwise. - Try to fix numerous pointer to ULONG casts. - Now Builds for amd64. svn path=/branches/ros-amd64-bringup/; revision=44634 --- reactos/drivers/storage/ide/directory.rbuild | 4 +- reactos/drivers/storage/ide/uniata/id_ata.cpp | 26 ++++++------ reactos/drivers/storage/ide/uniata/id_dma.cpp | 26 ++++++------ .../drivers/storage/ide/uniata/id_init.cpp | 42 +++++++++---------- .../drivers/storage/ide/uniata/id_probe.cpp | 22 +++++----- .../drivers/storage/ide/uniata/id_sata.cpp | 40 +++++++++--------- reactos/drivers/storage/ide/uniata/inc/misc.h | 2 + reactos/drivers/storage/ide/uniata/tools.h | 19 +++++++-- .../drivers/storage/ide/uniata/uniata.rbuild | 4 +- 9 files changed, 100 insertions(+), 85 deletions(-) diff --git a/reactos/drivers/storage/ide/directory.rbuild b/reactos/drivers/storage/ide/directory.rbuild index 2e28f361ad2..9c436eb5ba0 100644 --- a/reactos/drivers/storage/ide/directory.rbuild +++ b/reactos/drivers/storage/ide/directory.rbuild @@ -10,7 +10,7 @@ - + diff --git a/reactos/drivers/storage/ide/uniata/id_ata.cpp b/reactos/drivers/storage/ide/uniata/id_ata.cpp index e62398539f2..6360a4f7b98 100644 --- a/reactos/drivers/storage/ide/uniata/id_ata.cpp +++ b/reactos/drivers/storage/ide/uniata/id_ata.cpp @@ -2041,16 +2041,16 @@ AtapiResetController__( goto default_reset; offset = ((Channel & 1) << 7) + ((Channel & 2) << 8); /* disable PHY state change interrupt */ - AtapiWritePortEx4(NULL, (ULONG)(&deviceExtension->BaseIoAddressSATA_0), 0x148 + offset, 0); + AtapiWritePortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAddressSATA_0), 0x148 + offset, 0); UniataSataClearErr(HwDeviceExtension, j, UNIATA_SATA_IGNORE_CONNECT); /* reset controller part for this channel */ - AtapiWritePortEx4(NULL, (ULONG)(&deviceExtension->BaseIoAddressSATA_0), 0x48, - AtapiReadPortEx4(NULL, (ULONG)(&deviceExtension->BaseIoAddressSATA_0), 0x48) | (0xc0 >> Channel)); + AtapiWritePortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAddressSATA_0), 0x48, + AtapiReadPortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAddressSATA_0), 0x48) | (0xc0 >> Channel)); AtapiStallExecution(1000); - AtapiWritePortEx4(NULL, (ULONG)(&deviceExtension->BaseIoAddressSATA_0), 0x48, - AtapiReadPortEx4(NULL, (ULONG)(&deviceExtension->BaseIoAddressSATA_0), 0x48) & ~(0xc0 >> Channel)); + AtapiWritePortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAddressSATA_0), 0x48, + AtapiReadPortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAddressSATA_0), 0x48) & ~(0xc0 >> Channel)); break; } @@ -3613,7 +3613,7 @@ AtapiCheckInterrupt__( switch(ChipType) { case PROLD: case PRNEW: - status = AtapiReadPortEx4(chan, (ULONG)(&deviceExtension->BaseIoAddressBM_0),0x1c); + status = AtapiReadPortEx4(chan, PtrToUlong(&deviceExtension->BaseIoAddressBM_0),0x1c); if (!DmaTransfer) break; if (!(status & @@ -3633,10 +3633,10 @@ AtapiCheckInterrupt__( } break; case PRMIO: - status = AtapiReadPortEx4(chan, (ULONG)(&deviceExtension->BaseIoAddressBM_0),0x0040); + status = AtapiReadPortEx4(chan, PtrToUlong(&deviceExtension->BaseIoAddressBM_0),0x0040); if(ChipFlags & PRSATA) { - pr_status = AtapiReadPortEx4(chan, (ULONG)(&deviceExtension->BaseIoAddressBM_0),0x006c); - AtapiWritePortEx4(chan, (ULONG)(&deviceExtension->BaseIoAddressBM_0),0x006c, pr_status & 0x000000ff); + pr_status = AtapiReadPortEx4(chan, PtrToUlong(&deviceExtension->BaseIoAddressBM_0),0x006c); + AtapiWritePortEx4(chan, PtrToUlong(&deviceExtension->BaseIoAddressBM_0),0x006c, pr_status & 0x000000ff); } if(pr_status & (0x11 << Channel)) { // TODO: reset channel @@ -3662,11 +3662,11 @@ AtapiCheckInterrupt__( /* get and clear interrupt status */ if(ChipFlags & NVQ) { - pr_status = AtapiReadPortEx4(chan, (ULONG)(&deviceExtension->BaseIoAddressSATA_0),offs); - AtapiWritePortEx4(chan, (ULONG)(&deviceExtension->BaseIoAddressSATA_0),offs, (0x0fUL << shift) | 0x00f000f0); + pr_status = AtapiReadPortEx4(chan, PtrToUlong(&deviceExtension->BaseIoAddressSATA_0),offs); + AtapiWritePortEx4(chan, PtrToUlong(&deviceExtension->BaseIoAddressSATA_0),offs, (0x0fUL << shift) | 0x00f000f0); } else { - pr_status = AtapiReadPortEx1(chan, (ULONG)(&deviceExtension->BaseIoAddressSATA_0),offs); - AtapiWritePortEx1(chan, (ULONG)(&deviceExtension->BaseIoAddressSATA_0),offs, (0x0f << shift)); + pr_status = AtapiReadPortEx1(chan, PtrToUlong(&deviceExtension->BaseIoAddressSATA_0),offs); + AtapiWritePortEx1(chan, PtrToUlong(&deviceExtension->BaseIoAddressSATA_0),offs, (0x0f << shift)); } KdPrint2((PRINT_PREFIX " pr_status %x\n", pr_status)); diff --git a/reactos/drivers/storage/ide/uniata/id_dma.cpp b/reactos/drivers/storage/ide/uniata/id_dma.cpp index bac03b239bc..e875ada0218 100644 --- a/reactos/drivers/storage/ide/uniata/id_dma.cpp +++ b/reactos/drivers/storage/ide/uniata/id_dma.cpp @@ -251,7 +251,7 @@ AtapiDmaSetup( return FALSE; } //KdPrint2((PRINT_PREFIX " checkpoint 3\n" )); - if((ULONG)data & deviceExtension->AlignmentMask) { + if((ULONG_PTR)data & deviceExtension->AlignmentMask) { KdPrint2((PRINT_PREFIX "AtapiDmaSetup: unaligned data: %#x (%#x)\n", data, deviceExtension->AlignmentMask)); return FALSE; } @@ -293,7 +293,7 @@ retry_DB_IO: return FALSE; } - dma_count = min(count, (PAGE_SIZE - ((ULONG)data & PAGE_MASK))); + dma_count = min(count, (PAGE_SIZE - ((ULONG_PTR)data & PAGE_MASK))); data += dma_count; count -= dma_count; i = 0; @@ -495,10 +495,10 @@ AtapiDmaStart( if(ChipType == PRNEW) { ULONG Channel = deviceExtension->Channel + lChannel; if(chan->ChannelCtrlFlags & CTRFLAGS_LBA48) { - AtapiWritePortEx1(chan, (ULONG)(&deviceExtension->BaseIoAddressBM_0),0x11, - AtapiReadPortEx1(chan, (ULONG)(&deviceExtension->BaseIoAddressBM_0),0x11) | + AtapiWritePortEx1(chan, PtrToUlong(&deviceExtension->BaseIoAddressBM_0),0x11, + AtapiReadPortEx1(chan, PtrToUlong(&deviceExtension->BaseIoAddressBM_0),0x11) | (Channel ? 0x08 : 0x02)); - AtapiWritePortEx4(chan, (ULONG)(&deviceExtension->BaseIoAddressBM_0),(Channel ? 0x24 : 0x20), + AtapiWritePortEx4(chan, PtrToUlong(&deviceExtension->BaseIoAddressBM_0),(Channel ? 0x24 : 0x20), ((Srb->SrbFlags & SRB_FLAGS_DATA_IN) ? 0x05000000 : 0x06000000) | (Srb->DataTransferLength >> 1) ); } @@ -562,10 +562,10 @@ AtapiDmaDone( if(ChipType == PRNEW) { ULONG Channel = deviceExtension->Channel + lChannel; if(chan->ChannelCtrlFlags & CTRFLAGS_LBA48) { - AtapiWritePortEx1(chan, (ULONG)(&deviceExtension->BaseIoAddressBM_0),0x11, - AtapiReadPortEx1(chan, (ULONG)(&deviceExtension->BaseIoAddressBM_0),0x11) & + AtapiWritePortEx1(chan, PtrToUlong(&deviceExtension->BaseIoAddressBM_0),0x11, + AtapiReadPortEx1(chan, PtrToUlong(&deviceExtension->BaseIoAddressBM_0),0x11) & ~(Channel ? 0x08 : 0x02)); - AtapiWritePortEx4(chan, (ULONG)(&deviceExtension->BaseIoAddressBM_0),(Channel ? 0x24 : 0x20), + AtapiWritePortEx4(chan, PtrToUlong(&deviceExtension->BaseIoAddressBM_0),(Channel ? 0x24 : 0x20), 0 ); } @@ -1083,18 +1083,18 @@ set_new_acard: apiomode = 4; for(i=udmamode; i>=0; i--) { if(AtaSetTransferMode(deviceExtension, DeviceNumber, lChannel, LunExt, ATA_UDMA0 + i)) { - AtapiWritePortEx4(chan, (ULONG)(&deviceExtension->BaseIoAddressBM_0), mode_reg, cyr_udmatiming[udmamode]); + AtapiWritePortEx4(chan, PtrToUlong(&deviceExtension->BaseIoAddressBM_0), mode_reg, cyr_udmatiming[udmamode]); return; } } for(i=wdmamode; i>=0; i--) { if(AtaSetTransferMode(deviceExtension, DeviceNumber, lChannel, LunExt, ATA_WDMA0 + i)) { - AtapiWritePortEx4(chan, (ULONG)(&deviceExtension->BaseIoAddressBM_0), mode_reg, cyr_wdmatiming[wdmamode]); + AtapiWritePortEx4(chan, PtrToUlong(&deviceExtension->BaseIoAddressBM_0), mode_reg, cyr_wdmatiming[wdmamode]); return; } } if(AtaSetTransferMode(deviceExtension, DeviceNumber, lChannel, LunExt, ATA_PIO0 + apiomode)) { - AtapiWritePortEx4(chan, (ULONG)(&deviceExtension->BaseIoAddressBM_0), mode_reg, cyr_piotiming[apiomode]); + AtapiWritePortEx4(chan, PtrToUlong(&deviceExtension->BaseIoAddressBM_0), mode_reg, cyr_piotiming[apiomode]); return; } return; @@ -1837,8 +1837,8 @@ cyrix_timing( case ATA_WDMA2: reg24 = 0x00002020; break; case ATA_UDMA2: reg24 = 0x00911030; break; } - AtapiWritePortEx4(NULL, (ULONG)(&deviceExtension->BaseIoAddressBM_0),(dev*8) + 0x20, reg20); - AtapiWritePortEx4(NULL, (ULONG)(&deviceExtension->BaseIoAddressBM_0),(dev*8) + 0x24, reg24); + AtapiWritePortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAddressBM_0),(dev*8) + 0x20, reg20); + AtapiWritePortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAddressBM_0),(dev*8) + 0x24, reg24); } // cyrix_timing() VOID diff --git a/reactos/drivers/storage/ide/uniata/id_init.cpp b/reactos/drivers/storage/ide/uniata/id_init.cpp index ea3f39a5568..dca092ffb5e 100644 --- a/reactos/drivers/storage/ide/uniata/id_init.cpp +++ b/reactos/drivers/storage/ide/uniata/id_init.cpp @@ -1526,17 +1526,17 @@ AtapiChipInit( KdPrint2((PRINT_PREFIX "BaseIoAddressSATA_0=%x\n", deviceExtension->BaseIoAddressSATA_0.Addr)); if(ChipFlags & NVQ) { /* clear interrupt status */ - AtapiWritePortEx4(NULL, (ULONG)(&deviceExtension->BaseIoAddressSATA_0),offs, 0x00ff00ff); + AtapiWritePortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAddressSATA_0),offs, 0x00ff00ff); /* enable device and PHY state change interrupts */ - AtapiWritePortEx4(NULL, (ULONG)(&deviceExtension->BaseIoAddressSATA_0),offs+4, 0x000d000d); + AtapiWritePortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAddressSATA_0),offs+4, 0x000d000d); /* disable NCQ support */ - AtapiWritePortEx4(NULL, (ULONG)(&deviceExtension->BaseIoAddressSATA_0),0x0400, - AtapiReadPortEx4(NULL, (ULONG)(&deviceExtension->BaseIoAddressSATA_0),0x0400) & 0xfffffff9); + AtapiWritePortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAddressSATA_0),0x0400, + AtapiReadPortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAddressSATA_0),0x0400) & 0xfffffff9); } else { /* clear interrupt status */ - AtapiWritePortEx1(NULL, (ULONG)(&deviceExtension->BaseIoAddressSATA_0),offs, 0xff); + AtapiWritePortEx1(NULL, PtrToUlong(&deviceExtension->BaseIoAddressSATA_0),offs, 0xff); /* enable device and PHY state change interrupts */ - AtapiWritePortEx1(NULL, (ULONG)(&deviceExtension->BaseIoAddressSATA_0),offs+1, 0xdd); + AtapiWritePortEx1(NULL, PtrToUlong(&deviceExtension->BaseIoAddressSATA_0),offs+1, 0xdd); } /* enable PCI interrupt */ ChangePciConfig2(offsetof(PCI_COMMON_CONFIG, Command), (a & ~0x0400)); @@ -1567,16 +1567,16 @@ AtapiChipInit( /* setup clocks */ if(c == CHAN_NOT_SPECIFIED) { // ATA_OUTB(ctlr->r_res1, 0x11, ATA_INB(ctlr->r_res1, 0x11) | 0x0a); - AtapiWritePortEx1(NULL, (ULONG)(&deviceExtension->BaseIoAddressBM_0),0x11, - AtapiReadPortEx1(NULL, (ULONG)(&deviceExtension->BaseIoAddressBM_0),0x11) | 0x0a ); + AtapiWritePortEx1(NULL, PtrToUlong(&deviceExtension->BaseIoAddressBM_0),0x11, + AtapiReadPortEx1(NULL, PtrToUlong(&deviceExtension->BaseIoAddressBM_0),0x11) | 0x0a ); } /* FALLTHROUGH */ case PROLD: /* enable burst mode */ // ATA_OUTB(ctlr->r_res1, 0x1f, ATA_INB(ctlr->r_res1, 0x1f) | 0x01); if(c == CHAN_NOT_SPECIFIED) { - AtapiWritePortEx1(NULL, (ULONG)(&deviceExtension->BaseIoAddressBM_0),0x1f, - AtapiReadPortEx1(NULL, (ULONG)(&deviceExtension->BaseIoAddressBM_0),0x1f) | 0x01 ); + AtapiWritePortEx1(NULL, PtrToUlong(&deviceExtension->BaseIoAddressBM_0),0x1f, + AtapiReadPortEx1(NULL, PtrToUlong(&deviceExtension->BaseIoAddressBM_0),0x1f) | 0x01 ); } else { // check 80-pin cable chan = &deviceExtension->chan[c]; @@ -1601,7 +1601,7 @@ AtapiChipInit( case PRMIO: if(c == CHAN_NOT_SPECIFIED) { if(ChipFlags & PRSATA) { - AtapiWritePortEx4(NULL, (ULONG)(&deviceExtension->BaseIoAddressBM_0),0x6c, 0x000000ff); + AtapiWritePortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAddressBM_0),0x6c, 0x000000ff); } } else { chan = &deviceExtension->chan[c]; @@ -1680,16 +1680,16 @@ AtapiChipInit( unit10 = (c & 2); if(ChipFlags & SIINOSATAIRQ) { KdPrint2((PRINT_PREFIX "Disable broken SATA intr on c=%x\n", c)); - AtapiWritePortEx4(NULL, (ULONG)(&deviceExtension->BaseIoAddressSATA_0), 0x148 + (unit01 << 7) + (unit10 << 8),0); + AtapiWritePortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAddressSATA_0), 0x148 + (unit01 << 7) + (unit10 << 8),0); } } } else { if(ChipFlags & SIINOSATAIRQ) { KdPrint2((PRINT_PREFIX "Disable broken SATA intr on c=%x\n", c)); - AtapiWritePortEx4(NULL, (ULONG)(&deviceExtension->BaseIoAddressSATA_0), 0x148 + (unit01 << 7) + (unit10 << 8),0); + AtapiWritePortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAddressSATA_0), 0x148 + (unit01 << 7) + (unit10 << 8),0); } else { KdPrint2((PRINT_PREFIX "Enable SATA intr on c=%x\n", c)); - AtapiWritePortEx4(NULL, (ULONG)(&deviceExtension->BaseIoAddressSATA_0), 0x148 + (unit01 << 7) + (unit10 << 8),(1 << 16)); + AtapiWritePortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAddressSATA_0), 0x148 + (unit01 << 7) + (unit10 << 8),(1 << 16)); } } } @@ -1699,16 +1699,16 @@ AtapiChipInit( // Enable 3rd and 4th channels if (ChipFlags & SII4CH) { KdPrint2((PRINT_PREFIX "SII4CH\n")); - AtapiWritePortEx4(NULL, (ULONG)(&deviceExtension->BaseIoAddressSATA_0),0x0200, 0x00000002); + AtapiWritePortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAddressSATA_0),0x0200, 0x00000002); } } else { chan = &deviceExtension->chan[c]; /* dont block interrupts */ //ChangePciConfig4(0x48, (a & ~0x03c00000)); - tmp32 = AtapiReadPortEx4(NULL, (ULONG)(&deviceExtension->BaseIoAddressSATA_0),0x48); - AtapiWritePortEx4(NULL, (ULONG)(&deviceExtension->BaseIoAddressSATA_0),0x48, (1 << 22) << c); + tmp32 = AtapiReadPortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAddressSATA_0),0x48); + AtapiWritePortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAddressSATA_0),0x48, (1 << 22) << c); // flush - tmp32 = AtapiReadPortEx4(NULL, (ULONG)(&deviceExtension->BaseIoAddressSATA_0),0x48); + tmp32 = AtapiReadPortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAddressSATA_0),0x48); /* Initialize FIFO PCI bus arbitration */ GetPciConfig1(offsetof(PCI_COMMON_CONFIG, CacheLineSize), tmp8); @@ -1908,7 +1908,7 @@ UniataInitMapBM( for(c=0; cNumberChannels; c++) { chan = &deviceExtension->chan[c]; for (i=0; iRegTranslation[IDX_BM_IO+i].Addr = BaseIoAddressBM_0 ? ((ULONG)BaseIoAddressBM_0 + i) : 0; + chan->RegTranslation[IDX_BM_IO+i].Addr = BaseIoAddressBM_0 ? ((ULONG_PTR)BaseIoAddressBM_0 + i) : 0; chan->RegTranslation[IDX_BM_IO+i].MemIo = MemIo; } if(BaseIoAddressBM_0) { @@ -1928,11 +1928,11 @@ UniataInitMapBase( ULONG i; for (i=0; iRegTranslation[IDX_IO1+i].Addr = BaseIoAddress1 ? ((ULONG)BaseIoAddress1 + i) : 0; + chan->RegTranslation[IDX_IO1+i].Addr = BaseIoAddress1 ? ((ULONG_PTR)BaseIoAddress1 + i) : 0; chan->RegTranslation[IDX_IO1+i].MemIo = FALSE; } for (i=0; iRegTranslation[IDX_IO2+i].Addr = BaseIoAddress2 ? ((ULONG)BaseIoAddress2 + i) : 0; + chan->RegTranslation[IDX_IO2+i].Addr = BaseIoAddress2 ? ((ULONG_PTR)BaseIoAddress2 + i) : 0; chan->RegTranslation[IDX_IO2+i].MemIo = FALSE; } UniataInitSyncBaseIO(chan); diff --git a/reactos/drivers/storage/ide/uniata/id_probe.cpp b/reactos/drivers/storage/ide/uniata/id_probe.cpp index 752c88c826e..5a617cbe913 100644 --- a/reactos/drivers/storage/ide/uniata/id_probe.cpp +++ b/reactos/drivers/storage/ide/uniata/id_probe.cpp @@ -98,7 +98,7 @@ AtapiGetIoRange( IN ULONG length ) { - ULONG io_start = 0; + ULONG_PTR io_start = 0; KdPrint2((PRINT_PREFIX " AtapiGetIoRange:\n")); if(ConfigInfo->NumberOfAccessRanges <= rid) @@ -115,7 +115,7 @@ AtapiGetIoRange( if((*ConfigInfo->AccessRanges)[rid].RangeInMemory) { io_start = // Get the system physical address for this IO range. - ((ULONG)ScsiPortGetDeviceBase(HwDeviceExtension, + ((ULONG_PTR)ScsiPortGetDeviceBase(HwDeviceExtension, PCIBus /*ConfigInfo->AdapterInterfaceType*/, SystemIoBusNumber /*ConfigInfo->SystemIoBusNumber*/, ScsiPortConvertUlongToPhysicalAddress( @@ -873,7 +873,7 @@ UniataFindBusMasterController( ULONG dev_id; PCI_SLOT_NUMBER slotData; - ULONG i; + ULONG_PTR i; ULONG channel; ULONG c = 0; PUCHAR ioSpace; @@ -926,7 +926,7 @@ UniataFindBusMasterController( KdPrint2((PRINT_PREFIX "AdapterInterfaceType: Isa\n")); } if(InDriverEntry) { - i = (ULONG)Context; + i = (ULONG_PTR)Context; if(i & 0x80000000) { AltInit = TRUE; } @@ -942,7 +942,7 @@ UniataFindBusMasterController( } if(i >= BMListLen) { KdPrint2((PRINT_PREFIX "unexpected device arrival\n")); - i = (ULONG)Context; + i = (ULONG_PTR)Context; if(FirstMasterOk) { channel = 1; } @@ -1179,7 +1179,7 @@ UniataFindBusMasterController( BaseIoAddressBM_0, (*ConfigInfo->AccessRanges)[4].RangeInMemory ? TRUE : FALSE); deviceExtension->BusMaster = TRUE; - deviceExtension->BaseIoAddressBM_0.Addr = (ULONG)BaseIoAddressBM_0; + deviceExtension->BaseIoAddressBM_0.Addr = (ULONG_PTR)BaseIoAddressBM_0; if((*ConfigInfo->AccessRanges)[4].RangeInMemory) { deviceExtension->BaseIoAddressBM_0.MemIo = TRUE; } @@ -1749,7 +1749,7 @@ UniataFindFakeBusMasterController( ULONG dev_id; PCI_SLOT_NUMBER slotData; - ULONG i; + ULONG_PTR i; // PUCHAR ioSpace; // UCHAR statusByte; @@ -1771,7 +1771,7 @@ UniataFindFakeBusMasterController( *Again = FALSE; if(InDriverEntry) { - i = (ULONG)Context; + i = (ULONG_PTR)Context; } else { for(i=0; iSlotNumber && @@ -1957,7 +1957,7 @@ UniataFindFakeBusMasterController( BaseIoAddressBM_0, (*ConfigInfo->AccessRanges)[4].RangeInMemory ? TRUE : FALSE); deviceExtension->BusMaster = TRUE; - deviceExtension->BaseIoAddressBM_0.Addr = (ULONG)BaseIoAddressBM_0; + deviceExtension->BaseIoAddressBM_0.Addr = (ULONG_PTR)BaseIoAddressBM_0; if((*ConfigInfo->AccessRanges)[4].RangeInMemory) { deviceExtension->BaseIoAddressBM_0.MemIo = TRUE; } @@ -2379,14 +2379,14 @@ AtapiFindController( ioSpace = (PUCHAR)ScsiPortGetDeviceBase(HwDeviceExtension, ConfigInfo->AdapterInterfaceType, ConfigInfo->SystemIoBusNumber, - ScsiPortConvertUlongToPhysicalAddress((ULONG)BaseIoAddress1 + 0x0E), + ScsiPortConvertUlongToPhysicalAddress((ULONG_PTR)BaseIoAddress1 + 0x0E), ATA_ALTIOSIZE, TRUE); } else { ioSpace = (PUCHAR)ScsiPortGetDeviceBase(HwDeviceExtension, ConfigInfo->AdapterInterfaceType, ConfigInfo->SystemIoBusNumber, - ScsiPortConvertUlongToPhysicalAddress((ULONG)BaseIoAddress1 + ATA_ALTOFFSET), + ScsiPortConvertUlongToPhysicalAddress((ULONG_PTR)BaseIoAddress1 + ATA_ALTOFFSET), ATA_ALTIOSIZE, TRUE); } diff --git a/reactos/drivers/storage/ide/uniata/id_sata.cpp b/reactos/drivers/storage/ide/uniata/id_sata.cpp index e175f195a6b..3fe0e750a75 100644 --- a/reactos/drivers/storage/ide/uniata/id_sata.cpp +++ b/reactos/drivers/storage/ide/uniata/id_sata.cpp @@ -218,20 +218,20 @@ UniataAhciInit( ULONGLONG base; /* reset AHCI controller */ - AtapiWritePortEx4(NULL, (ULONG)&deviceExtension->BaseIoAHCI_0, IDX_AHCI_GHC, - AtapiReadPortEx4(NULL, (ULONG)&deviceExtension->BaseIoAHCI_0, IDX_AHCI_GHC) | AHCI_GHC_HR); + AtapiWritePortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAHCI_0), IDX_AHCI_GHC, + AtapiReadPortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAHCI_0), IDX_AHCI_GHC) | AHCI_GHC_HR); AtapiStallExecution(1000000); - if(AtapiReadPortEx4(NULL, (ULONG)&deviceExtension->BaseIoAHCI_0, IDX_AHCI_GHC) & AHCI_GHC_HR) { + if(AtapiReadPortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAHCI_0), IDX_AHCI_GHC) & AHCI_GHC_HR) { KdPrint2((PRINT_PREFIX " AHCI reset failed\n")); return FALSE; } /* enable AHCI mode */ - AtapiWritePortEx4(NULL, (ULONG)&deviceExtension->BaseIoAHCI_0, IDX_AHCI_GHC, - AtapiReadPortEx4(NULL, (ULONG)&deviceExtension->BaseIoAHCI_0, IDX_AHCI_GHC) | AHCI_GHC_AE); + AtapiWritePortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAHCI_0), IDX_AHCI_GHC, + AtapiReadPortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAHCI_0), IDX_AHCI_GHC) | AHCI_GHC_AE); - CAP = AtapiReadPortEx4(NULL, (ULONG)&deviceExtension->BaseIoAHCI_0, IDX_AHCI_CAP); - PI = AtapiReadPortEx4(NULL, (ULONG)&deviceExtension->BaseIoAHCI_0, IDX_AHCI_PI); + CAP = AtapiReadPortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAHCI_0), IDX_AHCI_CAP); + PI = AtapiReadPortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAHCI_0), IDX_AHCI_PI); /* get the number of HW channels */ for(i=PI, n=0; i; n++, i=i>>1); deviceExtension->NumberChannels = @@ -242,14 +242,14 @@ UniataAhciInit( } /* clear interrupts */ - AtapiWritePortEx4(NULL, (ULONG)&deviceExtension->BaseIoAHCI_0, IDX_AHCI_IS, - AtapiReadPortEx4(NULL, (ULONG)&deviceExtension->BaseIoAHCI_0, IDX_AHCI_IS)); + AtapiWritePortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAHCI_0), IDX_AHCI_IS, + AtapiReadPortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAHCI_0), IDX_AHCI_IS)); /* enable AHCI interrupts */ - AtapiWritePortEx4(NULL, (ULONG)&deviceExtension->BaseIoAHCI_0, IDX_AHCI_GHC, - AtapiReadPortEx4(NULL, (ULONG)&deviceExtension->BaseIoAHCI_0, IDX_AHCI_GHC) | AHCI_GHC_IE); + AtapiWritePortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAHCI_0), IDX_AHCI_GHC, + AtapiReadPortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAHCI_0), IDX_AHCI_GHC) | AHCI_GHC_IE); - version = AtapiReadPortEx4(NULL, (ULONG)&deviceExtension->BaseIoAHCI_0, IDX_AHCI_VS); + version = AtapiReadPortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAHCI_0), IDX_AHCI_VS); KdPrint2((PRINT_PREFIX " AHCI version %x%x.%x%x controller with %d ports (mask %x) detected\n", (version >> 24) & 0xff, (version >> 16) & 0xff, (version >> 8) & 0xff, version & 0xff, deviceExtension->NumberChannels, PI)); @@ -295,15 +295,15 @@ UniataAhciInit( KdPrint2((PRINT_PREFIX " AHCI buffer allocation failed\n")); return FALSE; } - AtapiWritePortEx4(NULL, (ULONG)&deviceExtension->BaseIoAHCI_0, offs + IDX_AHCI_P_CLB, + AtapiWritePortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAHCI_0), offs + IDX_AHCI_P_CLB, (ULONG)(base & 0xffffffff)); - AtapiWritePortEx4(NULL, (ULONG)&deviceExtension->BaseIoAHCI_0, offs + IDX_AHCI_P_CLB + 4, + AtapiWritePortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAHCI_0), offs + IDX_AHCI_P_CLB + 4, (ULONG)((base >> 32) & 0xffffffff)); base = chan->AHCI_CL_PhAddr + ATA_AHCI_MAX_TAGS; - AtapiWritePortEx4(NULL, (ULONG)&deviceExtension->BaseIoAHCI_0, offs + IDX_AHCI_P_FB, + AtapiWritePortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAHCI_0), offs + IDX_AHCI_P_FB, (ULONG)(base & 0xffffffff)); - AtapiWritePortEx4(NULL, (ULONG)&deviceExtension->BaseIoAHCI_0, offs + IDX_AHCI_P_FB + 4, + AtapiWritePortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAHCI_0), offs + IDX_AHCI_P_FB + 4, (ULONG)((base >> 32) & 0xffffffff)); chan->ChannelCtrlFlags |= CTRFLAGS_NO_SLAVE; @@ -328,25 +328,25 @@ UniataAhciStatus( SATA_SSTATUS_REG SStatus; SATA_SERROR_REG SError; ULONG offs = sizeof(IDE_AHCI_REGISTERS) + Channel*sizeof(IDE_AHCI_PORT_REGISTERS); - ULONG base; + ULONG_PTR base; ULONG tag=0; KdPrint(("UniataAhciStatus:\n")); - hIS = AtapiReadPortEx4(NULL, (ULONG)&deviceExtension->BaseIoAHCI_0, IDX_AHCI_IS); + hIS = AtapiReadPortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAHCI_0), IDX_AHCI_IS); KdPrint((" hIS %x\n", hIS)); hIS &= (1 << Channel); if(!hIS) { return 0; } - base = (ULONG)&deviceExtension->BaseIoAHCI_0 + offs; + base = (ULONG_PTR)(&deviceExtension->BaseIoAHCI_0 + offs); IS.Reg = AtapiReadPort4(chan, base + IDX_AHCI_P_IS); CI = AtapiReadPort4(chan, base + IDX_AHCI_P_CI); SStatus.Reg = AtapiReadPort4(chan, IDX_SATA_SStatus); SError.Reg = AtapiReadPort4(chan, IDX_SATA_SError); /* clear interrupt(s) */ - AtapiWritePortEx4(NULL, (ULONG)&deviceExtension->BaseIoAHCI_0, IDX_AHCI_IS, hIS); + AtapiWritePortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAHCI_0), IDX_AHCI_IS, hIS); AtapiWritePort4(chan, base + IDX_AHCI_P_IS, IS.Reg); AtapiWritePort4(chan, IDX_SATA_SError, SError.Reg); diff --git a/reactos/drivers/storage/ide/uniata/inc/misc.h b/reactos/drivers/storage/ide/uniata/inc/misc.h index 3921283bda6..1afe91cd073 100644 --- a/reactos/drivers/storage/ide/uniata/inc/misc.h +++ b/reactos/drivers/storage/ide/uniata/inc/misc.h @@ -1,6 +1,7 @@ #ifndef __CROSSNT_MISC__H__ #define __CROSSNT_MISC__H__ +#if defined(_M_X86_) extern "C" void __fastcall @@ -126,5 +127,6 @@ _XCHG_DD( void* b // EDX ); #define XCHG_DD(a,b) _XCHG_DD(&(a),&(b)) +#endif #endif // __CROSSNT_MISC__H__ diff --git a/reactos/drivers/storage/ide/uniata/tools.h b/reactos/drivers/storage/ide/uniata/tools.h index ac40559c8aa..80d9bb469d1 100644 --- a/reactos/drivers/storage/ide/uniata/tools.h +++ b/reactos/drivers/storage/ide/uniata/tools.h @@ -94,9 +94,9 @@ typedef struct _FOUR_BYTE { } #define DEC_TO_BCD(x) (((x / 10) << 4) + (x % 10)) -/* -#if defined _X86_ && !defined(__GNUC__) + +#if defined(_M_X86_) && defined(_MSC_VER) #define MOV_DD_SWP(a,b) \ { \ @@ -203,7 +203,7 @@ typedef struct _FOUR_BYTE { __asm mov [ebx],eax \ } -#else // NO X86 optimization , use generic C/C++ +#elif !defined(_M_X86_) // NO X86 optimization , use generic C/C++ #define MOV_DD_SWP(a,b) \ { \ @@ -247,6 +247,17 @@ typedef struct _FOUR_BYTE { _to_->Byte3 = _from_->Byte0; \ } +#define MOV_SWP_DW2DD(a,b) \ +{ \ + PFOUR_BYTE _from_, _to_; \ + _from_ = ((PFOUR_BYTE)&(b)); \ + _to_ = ((PFOUR_BYTE)&(a)); \ + *((PUSHORT)_to_) = 0; \ + _to_->Byte0 = _from_->Byte1; \ + _to_->Byte1 = _from_->Byte0; \ +} + + #define MOV_MSF(a,b) \ { \ PFOUR_BYTE _from_, _to_; \ @@ -282,7 +293,7 @@ typedef struct _FOUR_BYTE { #define MOV_3B_SWP(a,b) MOV_MSF_SWP(a,b) -*/ + #ifdef DBG diff --git a/reactos/drivers/storage/ide/uniata/uniata.rbuild b/reactos/drivers/storage/ide/uniata/uniata.rbuild index 339327fcaca..aa384a3a3cf 100644 --- a/reactos/drivers/storage/ide/uniata/uniata.rbuild +++ b/reactos/drivers/storage/ide/uniata/uniata.rbuild @@ -23,6 +23,8 @@ ros_glue.cpp - ros_glue_asm.s + + ros_glue_asm.s + From 885969b80a1b26bfdcc8dfa7ce523a26854168c7 Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Thu, 17 Dec 2009 06:40:37 +0000 Subject: [PATCH 236/286] remove debugging code svn path=/branches/ros-amd64-bringup/; revision=44635 --- reactos/ntoskrnl/mm/marea.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/ntoskrnl/mm/marea.c b/reactos/ntoskrnl/mm/marea.c index 93cb9706b69..ae0f4722adc 100644 --- a/reactos/ntoskrnl/mm/marea.c +++ b/reactos/ntoskrnl/mm/marea.c @@ -894,7 +894,7 @@ MmCreateMemoryArea(PMMSUPPORT AddressSpace, if ((*BaseAddress) == 0 && !FixedAddress) { tmpLength = PAGE_ROUND_UP(Length); - __debugbreak(); + *BaseAddress = MmFindGap(AddressSpace, tmpLength, Granularity, From fb0bd4efd9f51e7ae37d2a9b036b8409a2890293 Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Thu, 17 Dec 2009 14:35:25 +0000 Subject: [PATCH 237/286] [UniAta] - Coding late at night can cloud your judgment. - Better fix for pointer truncation(just don't do it.) - Todo send patch upstream svn path=/branches/ros-amd64-bringup/; revision=44639 --- reactos/drivers/storage/ide/uniata/bsmaster.h | 28 +++++++------- reactos/drivers/storage/ide/uniata/id_ata.cpp | 38 +++++++++---------- reactos/drivers/storage/ide/uniata/id_dma.cpp | 22 +++++------ .../drivers/storage/ide/uniata/id_init.cpp | 36 +++++++++--------- .../drivers/storage/ide/uniata/id_sata.cpp | 36 +++++++++--------- 5 files changed, 80 insertions(+), 80 deletions(-) diff --git a/reactos/drivers/storage/ide/uniata/bsmaster.h b/reactos/drivers/storage/ide/uniata/bsmaster.h index cfb153991f7..650abf1f2b9 100644 --- a/reactos/drivers/storage/ide/uniata/bsmaster.h +++ b/reactos/drivers/storage/ide/uniata/bsmaster.h @@ -1345,7 +1345,7 @@ VOID DDKFASTAPI AtapiWritePort4( IN PHW_CHANNEL chan, - IN ULONG port, + IN ULONG_PTR port, IN ULONG data ); @@ -1353,7 +1353,7 @@ VOID DDKFASTAPI AtapiWritePort2( IN PHW_CHANNEL chan, - IN ULONG port, + IN ULONG_PTR port, IN USHORT data ); @@ -1361,7 +1361,7 @@ VOID DDKFASTAPI AtapiWritePort1( IN PHW_CHANNEL chan, - IN ULONG port, + IN ULONG_PTR port, IN UCHAR data ); @@ -1369,7 +1369,7 @@ VOID DDKFASTAPI AtapiWritePortEx4( IN PHW_CHANNEL chan, - IN ULONG port, + IN ULONG_PTR port, IN ULONG offs, IN ULONG data ); @@ -1378,7 +1378,7 @@ VOID DDKFASTAPI AtapiWritePortEx1( IN PHW_CHANNEL chan, - IN ULONG port, + IN ULONG_PTR port, IN ULONG offs, IN UCHAR data ); @@ -1387,28 +1387,28 @@ ULONG DDKFASTAPI AtapiReadPort4( IN PHW_CHANNEL chan, - IN ULONG port + IN ULONG_PTR port ); USHORT DDKFASTAPI AtapiReadPort2( IN PHW_CHANNEL chan, - IN ULONG port + IN ULONG_PTR port ); UCHAR DDKFASTAPI AtapiReadPort1( IN PHW_CHANNEL chan, - IN ULONG port + IN ULONG_PTR port ); ULONG DDKFASTAPI AtapiReadPortEx4( IN PHW_CHANNEL chan, - IN ULONG port, + IN ULONG_PTR port, IN ULONG offs ); @@ -1416,7 +1416,7 @@ UCHAR DDKFASTAPI AtapiReadPortEx1( IN PHW_CHANNEL chan, - IN ULONG port, + IN ULONG_PTR port, IN ULONG offs ); @@ -1424,7 +1424,7 @@ VOID DDKFASTAPI AtapiWriteBuffer4( IN PHW_CHANNEL chan, - IN ULONG _port, + IN ULONG_PTR _port, IN PVOID Buffer, IN ULONG Count, IN ULONG Timing @@ -1434,7 +1434,7 @@ VOID DDKFASTAPI AtapiWriteBuffer2( IN PHW_CHANNEL chan, - IN ULONG _port, + IN ULONG_PTR _port, IN PVOID Buffer, IN ULONG Count, IN ULONG Timing @@ -1444,7 +1444,7 @@ VOID DDKFASTAPI AtapiReadBuffer4( IN PHW_CHANNEL chan, - IN ULONG _port, + IN ULONG_PTR _port, IN PVOID Buffer, IN ULONG Count, IN ULONG Timing @@ -1454,7 +1454,7 @@ VOID DDKFASTAPI AtapiReadBuffer2( IN PHW_CHANNEL chan, - IN ULONG _port, + IN ULONG_PTR _port, IN PVOID Buffer, IN ULONG Count, IN ULONG Timing diff --git a/reactos/drivers/storage/ide/uniata/id_ata.cpp b/reactos/drivers/storage/ide/uniata/id_ata.cpp index 6360a4f7b98..a3878f7fc22 100644 --- a/reactos/drivers/storage/ide/uniata/id_ata.cpp +++ b/reactos/drivers/storage/ide/uniata/id_ata.cpp @@ -240,7 +240,7 @@ VOID \ DDKFASTAPI \ AtapiWritePort##sz( \ IN PHW_CHANNEL chan, \ - IN ULONG _port, \ + IN ULONG_PTR _port, \ IN _type data \ ) \ { \ @@ -272,7 +272,7 @@ VOID \ DDKFASTAPI \ AtapiWritePortEx##sz( \ IN PHW_CHANNEL chan, \ - IN ULONG _port, \ + IN ULONG_PTR _port, \ IN ULONG offs, \ IN _type data \ ) \ @@ -305,7 +305,7 @@ _type \ DDKFASTAPI \ AtapiReadPort##sz( \ IN PHW_CHANNEL chan, \ - IN ULONG _port \ + IN ULONG_PTR _port \ ) \ { \ PIORES res; \ @@ -336,7 +336,7 @@ _type \ DDKFASTAPI \ AtapiReadPortEx##sz( \ IN PHW_CHANNEL chan, \ - IN ULONG _port, \ + IN ULONG_PTR _port, \ IN ULONG offs \ ) \ { \ @@ -367,7 +367,7 @@ VOID \ DDKFASTAPI \ AtapiReadBuffer##sz( \ IN PHW_CHANNEL chan, \ - IN ULONG _port, \ + IN ULONG_PTR _port, \ IN PVOID Buffer, \ IN ULONG Count, \ IN ULONG Timing \ @@ -412,7 +412,7 @@ VOID \ DDKFASTAPI \ AtapiWriteBuffer##sz( \ IN PHW_CHANNEL chan, \ - IN ULONG _port, \ + IN ULONG_PTR _port, \ IN PVOID Buffer, \ IN ULONG Count, \ IN ULONG Timing \ @@ -2041,16 +2041,16 @@ AtapiResetController__( goto default_reset; offset = ((Channel & 1) << 7) + ((Channel & 2) << 8); /* disable PHY state change interrupt */ - AtapiWritePortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAddressSATA_0), 0x148 + offset, 0); + AtapiWritePortEx4(NULL, (ULONG_PTR)&deviceExtension->BaseIoAddressSATA_0, 0x148 + offset, 0); UniataSataClearErr(HwDeviceExtension, j, UNIATA_SATA_IGNORE_CONNECT); /* reset controller part for this channel */ - AtapiWritePortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAddressSATA_0), 0x48, - AtapiReadPortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAddressSATA_0), 0x48) | (0xc0 >> Channel)); + AtapiWritePortEx4(NULL, (ULONG_PTR)&deviceExtension->BaseIoAddressSATA_0, 0x48, + AtapiReadPortEx4(NULL, (ULONG_PTR)&deviceExtension->BaseIoAddressSATA_0, 0x48) | (0xc0 >> Channel)); AtapiStallExecution(1000); - AtapiWritePortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAddressSATA_0), 0x48, - AtapiReadPortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAddressSATA_0), 0x48) & ~(0xc0 >> Channel)); + AtapiWritePortEx4(NULL, (ULONG_PTR)&deviceExtension->BaseIoAddressSATA_0, 0x48, + AtapiReadPortEx4(NULL, (ULONG_PTR)&deviceExtension->BaseIoAddressSATA_0, 0x48) & ~(0xc0 >> Channel)); break; } @@ -3613,7 +3613,7 @@ AtapiCheckInterrupt__( switch(ChipType) { case PROLD: case PRNEW: - status = AtapiReadPortEx4(chan, PtrToUlong(&deviceExtension->BaseIoAddressBM_0),0x1c); + status = AtapiReadPortEx4(chan, (ULONG_PTR)&deviceExtension->BaseIoAddressBM_0,0x1c); if (!DmaTransfer) break; if (!(status & @@ -3633,10 +3633,10 @@ AtapiCheckInterrupt__( } break; case PRMIO: - status = AtapiReadPortEx4(chan, PtrToUlong(&deviceExtension->BaseIoAddressBM_0),0x0040); + status = AtapiReadPortEx4(chan, (ULONG_PTR)&deviceExtension->BaseIoAddressBM_0,0x0040); if(ChipFlags & PRSATA) { - pr_status = AtapiReadPortEx4(chan, PtrToUlong(&deviceExtension->BaseIoAddressBM_0),0x006c); - AtapiWritePortEx4(chan, PtrToUlong(&deviceExtension->BaseIoAddressBM_0),0x006c, pr_status & 0x000000ff); + pr_status = AtapiReadPortEx4(chan, (ULONG_PTR)&deviceExtension->BaseIoAddressBM_0,0x006c); + AtapiWritePortEx4(chan, (ULONG_PTR)&deviceExtension->BaseIoAddressBM_0,0x006c, pr_status & 0x000000ff); } if(pr_status & (0x11 << Channel)) { // TODO: reset channel @@ -3662,11 +3662,11 @@ AtapiCheckInterrupt__( /* get and clear interrupt status */ if(ChipFlags & NVQ) { - pr_status = AtapiReadPortEx4(chan, PtrToUlong(&deviceExtension->BaseIoAddressSATA_0),offs); - AtapiWritePortEx4(chan, PtrToUlong(&deviceExtension->BaseIoAddressSATA_0),offs, (0x0fUL << shift) | 0x00f000f0); + pr_status = AtapiReadPortEx4(chan, (ULONG_PTR)&deviceExtension->BaseIoAddressSATA_0,offs); + AtapiWritePortEx4(chan, (ULONG_PTR)&deviceExtension->BaseIoAddressSATA_0,offs, (0x0fUL << shift) | 0x00f000f0); } else { - pr_status = AtapiReadPortEx1(chan, PtrToUlong(&deviceExtension->BaseIoAddressSATA_0),offs); - AtapiWritePortEx1(chan, PtrToUlong(&deviceExtension->BaseIoAddressSATA_0),offs, (0x0f << shift)); + pr_status = AtapiReadPortEx1(chan,(ULONG_PTR)&deviceExtension->BaseIoAddressSATA_0,offs); + AtapiWritePortEx1(chan, (ULONG_PTR)&deviceExtension->BaseIoAddressSATA_0,offs, (0x0f << shift)); } KdPrint2((PRINT_PREFIX " pr_status %x\n", pr_status)); diff --git a/reactos/drivers/storage/ide/uniata/id_dma.cpp b/reactos/drivers/storage/ide/uniata/id_dma.cpp index e875ada0218..d52fef2edc6 100644 --- a/reactos/drivers/storage/ide/uniata/id_dma.cpp +++ b/reactos/drivers/storage/ide/uniata/id_dma.cpp @@ -495,10 +495,10 @@ AtapiDmaStart( if(ChipType == PRNEW) { ULONG Channel = deviceExtension->Channel + lChannel; if(chan->ChannelCtrlFlags & CTRFLAGS_LBA48) { - AtapiWritePortEx1(chan, PtrToUlong(&deviceExtension->BaseIoAddressBM_0),0x11, - AtapiReadPortEx1(chan, PtrToUlong(&deviceExtension->BaseIoAddressBM_0),0x11) | + AtapiWritePortEx1(chan, (ULONG_PTR)(&deviceExtension->BaseIoAddressBM_0),0x11, + AtapiReadPortEx1(chan, (ULONG_PTR)(&deviceExtension->BaseIoAddressBM_0),0x11) | (Channel ? 0x08 : 0x02)); - AtapiWritePortEx4(chan, PtrToUlong(&deviceExtension->BaseIoAddressBM_0),(Channel ? 0x24 : 0x20), + AtapiWritePortEx4(chan, (ULONG_PTR)(&deviceExtension->BaseIoAddressBM_0),(Channel ? 0x24 : 0x20), ((Srb->SrbFlags & SRB_FLAGS_DATA_IN) ? 0x05000000 : 0x06000000) | (Srb->DataTransferLength >> 1) ); } @@ -562,10 +562,10 @@ AtapiDmaDone( if(ChipType == PRNEW) { ULONG Channel = deviceExtension->Channel + lChannel; if(chan->ChannelCtrlFlags & CTRFLAGS_LBA48) { - AtapiWritePortEx1(chan, PtrToUlong(&deviceExtension->BaseIoAddressBM_0),0x11, - AtapiReadPortEx1(chan, PtrToUlong(&deviceExtension->BaseIoAddressBM_0),0x11) & + AtapiWritePortEx1(chan, (ULONG_PTR)(&deviceExtension->BaseIoAddressBM_0),0x11, + AtapiReadPortEx1(chan, (ULONG_PTR)(&deviceExtension->BaseIoAddressBM_0),0x11) & ~(Channel ? 0x08 : 0x02)); - AtapiWritePortEx4(chan, PtrToUlong(&deviceExtension->BaseIoAddressBM_0),(Channel ? 0x24 : 0x20), + AtapiWritePortEx4(chan, (ULONG_PTR)(&deviceExtension->BaseIoAddressBM_0),(Channel ? 0x24 : 0x20), 0 ); } @@ -1083,18 +1083,18 @@ set_new_acard: apiomode = 4; for(i=udmamode; i>=0; i--) { if(AtaSetTransferMode(deviceExtension, DeviceNumber, lChannel, LunExt, ATA_UDMA0 + i)) { - AtapiWritePortEx4(chan, PtrToUlong(&deviceExtension->BaseIoAddressBM_0), mode_reg, cyr_udmatiming[udmamode]); + AtapiWritePortEx4(chan, (ULONG_PTR)(&deviceExtension->BaseIoAddressBM_0), mode_reg, cyr_udmatiming[udmamode]); return; } } for(i=wdmamode; i>=0; i--) { if(AtaSetTransferMode(deviceExtension, DeviceNumber, lChannel, LunExt, ATA_WDMA0 + i)) { - AtapiWritePortEx4(chan, PtrToUlong(&deviceExtension->BaseIoAddressBM_0), mode_reg, cyr_wdmatiming[wdmamode]); + AtapiWritePortEx4(chan, (ULONG_PTR)(&deviceExtension->BaseIoAddressBM_0), mode_reg, cyr_wdmatiming[wdmamode]); return; } } if(AtaSetTransferMode(deviceExtension, DeviceNumber, lChannel, LunExt, ATA_PIO0 + apiomode)) { - AtapiWritePortEx4(chan, PtrToUlong(&deviceExtension->BaseIoAddressBM_0), mode_reg, cyr_piotiming[apiomode]); + AtapiWritePortEx4(chan, (ULONG_PTR)(&deviceExtension->BaseIoAddressBM_0), mode_reg, cyr_piotiming[apiomode]); return; } return; @@ -1837,8 +1837,8 @@ cyrix_timing( case ATA_WDMA2: reg24 = 0x00002020; break; case ATA_UDMA2: reg24 = 0x00911030; break; } - AtapiWritePortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAddressBM_0),(dev*8) + 0x20, reg20); - AtapiWritePortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAddressBM_0),(dev*8) + 0x24, reg24); + AtapiWritePortEx4(NULL, (ULONG_PTR)(&deviceExtension->BaseIoAddressBM_0),(dev*8) + 0x20, reg20); + AtapiWritePortEx4(NULL, (ULONG_PTR)(&deviceExtension->BaseIoAddressBM_0),(dev*8) + 0x24, reg24); } // cyrix_timing() VOID diff --git a/reactos/drivers/storage/ide/uniata/id_init.cpp b/reactos/drivers/storage/ide/uniata/id_init.cpp index dca092ffb5e..a426991537f 100644 --- a/reactos/drivers/storage/ide/uniata/id_init.cpp +++ b/reactos/drivers/storage/ide/uniata/id_init.cpp @@ -1526,17 +1526,17 @@ AtapiChipInit( KdPrint2((PRINT_PREFIX "BaseIoAddressSATA_0=%x\n", deviceExtension->BaseIoAddressSATA_0.Addr)); if(ChipFlags & NVQ) { /* clear interrupt status */ - AtapiWritePortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAddressSATA_0),offs, 0x00ff00ff); + AtapiWritePortEx4(NULL, (ULONG_PTR)(&deviceExtension->BaseIoAddressSATA_0),offs, 0x00ff00ff); /* enable device and PHY state change interrupts */ - AtapiWritePortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAddressSATA_0),offs+4, 0x000d000d); + AtapiWritePortEx4(NULL, (ULONG_PTR)(&deviceExtension->BaseIoAddressSATA_0),offs+4, 0x000d000d); /* disable NCQ support */ - AtapiWritePortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAddressSATA_0),0x0400, - AtapiReadPortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAddressSATA_0),0x0400) & 0xfffffff9); + AtapiWritePortEx4(NULL, (ULONG_PTR)(&deviceExtension->BaseIoAddressSATA_0),0x0400, + AtapiReadPortEx4(NULL, (ULONG_PTR)(&deviceExtension->BaseIoAddressSATA_0),0x0400) & 0xfffffff9); } else { /* clear interrupt status */ - AtapiWritePortEx1(NULL, PtrToUlong(&deviceExtension->BaseIoAddressSATA_0),offs, 0xff); + AtapiWritePortEx1(NULL, (ULONG_PTR)(&deviceExtension->BaseIoAddressSATA_0),offs, 0xff); /* enable device and PHY state change interrupts */ - AtapiWritePortEx1(NULL, PtrToUlong(&deviceExtension->BaseIoAddressSATA_0),offs+1, 0xdd); + AtapiWritePortEx1(NULL, (ULONG_PTR)(&deviceExtension->BaseIoAddressSATA_0),offs+1, 0xdd); } /* enable PCI interrupt */ ChangePciConfig2(offsetof(PCI_COMMON_CONFIG, Command), (a & ~0x0400)); @@ -1567,16 +1567,16 @@ AtapiChipInit( /* setup clocks */ if(c == CHAN_NOT_SPECIFIED) { // ATA_OUTB(ctlr->r_res1, 0x11, ATA_INB(ctlr->r_res1, 0x11) | 0x0a); - AtapiWritePortEx1(NULL, PtrToUlong(&deviceExtension->BaseIoAddressBM_0),0x11, - AtapiReadPortEx1(NULL, PtrToUlong(&deviceExtension->BaseIoAddressBM_0),0x11) | 0x0a ); + AtapiWritePortEx1(NULL, (ULONG_PTR)(&deviceExtension->BaseIoAddressBM_0),0x11, + AtapiReadPortEx1(NULL, (ULONG_PTR)(&deviceExtension->BaseIoAddressBM_0),0x11) | 0x0a ); } /* FALLTHROUGH */ case PROLD: /* enable burst mode */ // ATA_OUTB(ctlr->r_res1, 0x1f, ATA_INB(ctlr->r_res1, 0x1f) | 0x01); if(c == CHAN_NOT_SPECIFIED) { - AtapiWritePortEx1(NULL, PtrToUlong(&deviceExtension->BaseIoAddressBM_0),0x1f, - AtapiReadPortEx1(NULL, PtrToUlong(&deviceExtension->BaseIoAddressBM_0),0x1f) | 0x01 ); + AtapiWritePortEx1(NULL, (ULONG_PTR)(&deviceExtension->BaseIoAddressBM_0),0x1f, + AtapiReadPortEx1(NULL, (ULONG_PTR)(&deviceExtension->BaseIoAddressBM_0),0x1f) | 0x01 ); } else { // check 80-pin cable chan = &deviceExtension->chan[c]; @@ -1601,7 +1601,7 @@ AtapiChipInit( case PRMIO: if(c == CHAN_NOT_SPECIFIED) { if(ChipFlags & PRSATA) { - AtapiWritePortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAddressBM_0),0x6c, 0x000000ff); + AtapiWritePortEx4(NULL, (ULONG_PTR)(&deviceExtension->BaseIoAddressBM_0),0x6c, 0x000000ff); } } else { chan = &deviceExtension->chan[c]; @@ -1680,16 +1680,16 @@ AtapiChipInit( unit10 = (c & 2); if(ChipFlags & SIINOSATAIRQ) { KdPrint2((PRINT_PREFIX "Disable broken SATA intr on c=%x\n", c)); - AtapiWritePortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAddressSATA_0), 0x148 + (unit01 << 7) + (unit10 << 8),0); + AtapiWritePortEx4(NULL, (ULONG_PTR)(&deviceExtension->BaseIoAddressSATA_0), 0x148 + (unit01 << 7) + (unit10 << 8),0); } } } else { if(ChipFlags & SIINOSATAIRQ) { KdPrint2((PRINT_PREFIX "Disable broken SATA intr on c=%x\n", c)); - AtapiWritePortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAddressSATA_0), 0x148 + (unit01 << 7) + (unit10 << 8),0); + AtapiWritePortEx4(NULL, (ULONG_PTR)(&deviceExtension->BaseIoAddressSATA_0), 0x148 + (unit01 << 7) + (unit10 << 8),0); } else { KdPrint2((PRINT_PREFIX "Enable SATA intr on c=%x\n", c)); - AtapiWritePortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAddressSATA_0), 0x148 + (unit01 << 7) + (unit10 << 8),(1 << 16)); + AtapiWritePortEx4(NULL, (ULONG_PTR)(&deviceExtension->BaseIoAddressSATA_0), 0x148 + (unit01 << 7) + (unit10 << 8),(1 << 16)); } } } @@ -1699,16 +1699,16 @@ AtapiChipInit( // Enable 3rd and 4th channels if (ChipFlags & SII4CH) { KdPrint2((PRINT_PREFIX "SII4CH\n")); - AtapiWritePortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAddressSATA_0),0x0200, 0x00000002); + AtapiWritePortEx4(NULL, (ULONG_PTR)(&deviceExtension->BaseIoAddressSATA_0),0x0200, 0x00000002); } } else { chan = &deviceExtension->chan[c]; /* dont block interrupts */ //ChangePciConfig4(0x48, (a & ~0x03c00000)); - tmp32 = AtapiReadPortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAddressSATA_0),0x48); - AtapiWritePortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAddressSATA_0),0x48, (1 << 22) << c); + tmp32 = AtapiReadPortEx4(NULL, (ULONG_PTR)(&deviceExtension->BaseIoAddressSATA_0),0x48); + AtapiWritePortEx4(NULL, (ULONG_PTR)(&deviceExtension->BaseIoAddressSATA_0),0x48, (1 << 22) << c); // flush - tmp32 = AtapiReadPortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAddressSATA_0),0x48); + tmp32 = AtapiReadPortEx4(NULL, (ULONG_PTR)(&deviceExtension->BaseIoAddressSATA_0),0x48); /* Initialize FIFO PCI bus arbitration */ GetPciConfig1(offsetof(PCI_COMMON_CONFIG, CacheLineSize), tmp8); diff --git a/reactos/drivers/storage/ide/uniata/id_sata.cpp b/reactos/drivers/storage/ide/uniata/id_sata.cpp index 3fe0e750a75..b0679617662 100644 --- a/reactos/drivers/storage/ide/uniata/id_sata.cpp +++ b/reactos/drivers/storage/ide/uniata/id_sata.cpp @@ -218,20 +218,20 @@ UniataAhciInit( ULONGLONG base; /* reset AHCI controller */ - AtapiWritePortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAHCI_0), IDX_AHCI_GHC, - AtapiReadPortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAHCI_0), IDX_AHCI_GHC) | AHCI_GHC_HR); + AtapiWritePortEx4(NULL, (ULONG_PTR)(&deviceExtension->BaseIoAHCI_0), IDX_AHCI_GHC, + AtapiReadPortEx4(NULL, (ULONG_PTR)(&deviceExtension->BaseIoAHCI_0), IDX_AHCI_GHC) | AHCI_GHC_HR); AtapiStallExecution(1000000); - if(AtapiReadPortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAHCI_0), IDX_AHCI_GHC) & AHCI_GHC_HR) { + if(AtapiReadPortEx4(NULL, (ULONG_PTR)(&deviceExtension->BaseIoAHCI_0), IDX_AHCI_GHC) & AHCI_GHC_HR) { KdPrint2((PRINT_PREFIX " AHCI reset failed\n")); return FALSE; } /* enable AHCI mode */ - AtapiWritePortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAHCI_0), IDX_AHCI_GHC, - AtapiReadPortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAHCI_0), IDX_AHCI_GHC) | AHCI_GHC_AE); + AtapiWritePortEx4(NULL, (ULONG_PTR)(&deviceExtension->BaseIoAHCI_0), IDX_AHCI_GHC, + AtapiReadPortEx4(NULL, (ULONG_PTR)(&deviceExtension->BaseIoAHCI_0), IDX_AHCI_GHC) | AHCI_GHC_AE); - CAP = AtapiReadPortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAHCI_0), IDX_AHCI_CAP); - PI = AtapiReadPortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAHCI_0), IDX_AHCI_PI); + CAP = AtapiReadPortEx4(NULL, (ULONG_PTR)(&deviceExtension->BaseIoAHCI_0), IDX_AHCI_CAP); + PI = AtapiReadPortEx4(NULL, (ULONG_PTR)(&deviceExtension->BaseIoAHCI_0), IDX_AHCI_PI); /* get the number of HW channels */ for(i=PI, n=0; i; n++, i=i>>1); deviceExtension->NumberChannels = @@ -242,14 +242,14 @@ UniataAhciInit( } /* clear interrupts */ - AtapiWritePortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAHCI_0), IDX_AHCI_IS, - AtapiReadPortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAHCI_0), IDX_AHCI_IS)); + AtapiWritePortEx4(NULL, (ULONG_PTR)(&deviceExtension->BaseIoAHCI_0), IDX_AHCI_IS, + AtapiReadPortEx4(NULL, (ULONG_PTR)(&deviceExtension->BaseIoAHCI_0), IDX_AHCI_IS)); /* enable AHCI interrupts */ - AtapiWritePortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAHCI_0), IDX_AHCI_GHC, - AtapiReadPortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAHCI_0), IDX_AHCI_GHC) | AHCI_GHC_IE); + AtapiWritePortEx4(NULL, (ULONG_PTR)(&deviceExtension->BaseIoAHCI_0), IDX_AHCI_GHC, + AtapiReadPortEx4(NULL, (ULONG_PTR)(&deviceExtension->BaseIoAHCI_0), IDX_AHCI_GHC) | AHCI_GHC_IE); - version = AtapiReadPortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAHCI_0), IDX_AHCI_VS); + version = AtapiReadPortEx4(NULL, (ULONG_PTR)(&deviceExtension->BaseIoAHCI_0), IDX_AHCI_VS); KdPrint2((PRINT_PREFIX " AHCI version %x%x.%x%x controller with %d ports (mask %x) detected\n", (version >> 24) & 0xff, (version >> 16) & 0xff, (version >> 8) & 0xff, version & 0xff, deviceExtension->NumberChannels, PI)); @@ -295,15 +295,15 @@ UniataAhciInit( KdPrint2((PRINT_PREFIX " AHCI buffer allocation failed\n")); return FALSE; } - AtapiWritePortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAHCI_0), offs + IDX_AHCI_P_CLB, + AtapiWritePortEx4(NULL, (ULONG_PTR)(&deviceExtension->BaseIoAHCI_0), offs + IDX_AHCI_P_CLB, (ULONG)(base & 0xffffffff)); - AtapiWritePortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAHCI_0), offs + IDX_AHCI_P_CLB + 4, + AtapiWritePortEx4(NULL, (ULONG_PTR)(&deviceExtension->BaseIoAHCI_0), offs + IDX_AHCI_P_CLB + 4, (ULONG)((base >> 32) & 0xffffffff)); base = chan->AHCI_CL_PhAddr + ATA_AHCI_MAX_TAGS; - AtapiWritePortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAHCI_0), offs + IDX_AHCI_P_FB, + AtapiWritePortEx4(NULL, (ULONG_PTR)(&deviceExtension->BaseIoAHCI_0), offs + IDX_AHCI_P_FB, (ULONG)(base & 0xffffffff)); - AtapiWritePortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAHCI_0), offs + IDX_AHCI_P_FB + 4, + AtapiWritePortEx4(NULL, (ULONG_PTR)(&deviceExtension->BaseIoAHCI_0), offs + IDX_AHCI_P_FB + 4, (ULONG)((base >> 32) & 0xffffffff)); chan->ChannelCtrlFlags |= CTRFLAGS_NO_SLAVE; @@ -333,7 +333,7 @@ UniataAhciStatus( KdPrint(("UniataAhciStatus:\n")); - hIS = AtapiReadPortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAHCI_0), IDX_AHCI_IS); + hIS = AtapiReadPortEx4(NULL, (ULONG_PTR)(&deviceExtension->BaseIoAHCI_0), IDX_AHCI_IS); KdPrint((" hIS %x\n", hIS)); hIS &= (1 << Channel); if(!hIS) { @@ -346,7 +346,7 @@ UniataAhciStatus( SError.Reg = AtapiReadPort4(chan, IDX_SATA_SError); /* clear interrupt(s) */ - AtapiWritePortEx4(NULL, PtrToUlong(&deviceExtension->BaseIoAHCI_0), IDX_AHCI_IS, hIS); + AtapiWritePortEx4(NULL, (ULONG_PTR)(&deviceExtension->BaseIoAHCI_0), IDX_AHCI_IS, hIS); AtapiWritePort4(chan, base + IDX_AHCI_P_IS, IS.Reg); AtapiWritePort4(chan, IDX_SATA_SError, SError.Reg); From 14ce443d0a4b9d75d8d9429e25ac642baa17ffec Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 19 Dec 2009 00:04:37 +0000 Subject: [PATCH 238/286] [KDBG] Port KdbEnter to amd64 assembly. Untested. svn path=/branches/ros-amd64-bringup/; revision=44652 --- reactos/ntoskrnl/kdbg/amd64/kdb_help.S | 127 +++++++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 reactos/ntoskrnl/kdbg/amd64/kdb_help.S diff --git a/reactos/ntoskrnl/kdbg/amd64/kdb_help.S b/reactos/ntoskrnl/kdbg/amd64/kdb_help.S new file mode 100644 index 00000000000..e60d94a5181 --- /dev/null +++ b/reactos/ntoskrnl/kdbg/amd64/kdb_help.S @@ -0,0 +1,127 @@ + +#include +#include + +.globl _KdbEnter +_KdbEnter: + + /* save flags */ + pushfq + + /* Make room for a KTRAP_FRAME */ + sub rsp, SIZE_KTRAP_FRAME + .allocstack SIZE_KTRAP_FRAME + + /* Save rbp */ + mov [rsp + KTRAP_FRAME_Rbp], rbp + + /* Save non-volatile registers */ + mov [rsp + KTRAP_FRAME_Rbx], rbx + mov [rsp + KTRAP_FRAME_Rdi], rdi + mov [rsp + KTRAP_FRAME_Rsi], rsi + + /* Save volatile registers */ + mov [rsp + KTRAP_FRAME_Rax], rax + mov [rsp + KTRAP_FRAME_Rcx], rcx + mov [rsp + KTRAP_FRAME_Rdx], rdx + mov [rsp + KTRAP_FRAME_R8], r8 + mov [rsp + KTRAP_FRAME_R9], r9 + mov [rsp + KTRAP_FRAME_R10], r10 + mov [rsp + KTRAP_FRAME_R11], r11 + + /* Save xmm registers */ +// movdqa [rbp + KTRAP_FRAME_Xmm0], xmm0 +// movdqa [rbp + KTRAP_FRAME_Xmm1], xmm1 +// movdqa [rbp + KTRAP_FRAME_Xmm2], xmm2 +// movdqa [rbp + KTRAP_FRAME_Xmm3], xmm3 +// movdqa [rbp + KTRAP_FRAME_Xmm4], xmm4 +// movdqa [rbp + KTRAP_FRAME_Xmm5], xmm5 + + /* Save cs and previous mode */ + mov ax, cs + mov [rsp + KTRAP_FRAME_SegCs], ax + and ax, 1 + mov [rsp + KTRAP_FRAME_PreviousMode], al + + /* Save segment selectors */ + mov ax, ds + mov [rbp + KTRAP_FRAME_SegDs], ax + mov ax, es + mov [rbp + KTRAP_FRAME_SegEs], ax + mov ax, fs + mov [rbp + KTRAP_FRAME_SegFs], ax + mov ax, gs + mov [rbp + KTRAP_FRAME_SegGs], ax + + /* Save previous irql */ + mov rax, cr8 + mov [rsp + KTRAP_FRAME_PreviousIrql], al + + /* Save debug registers */ + mov rax, dr0 + mov [rsp + KTRAP_FRAME_Dr0], rax + mov rax, dr1 + mov [rsp + KTRAP_FRAME_Dr1], rax + mov rax, dr2 + mov [rsp + KTRAP_FRAME_Dr2], rax + mov rax, dr3 + mov [rsp + KTRAP_FRAME_Dr3], rax + mov rax, dr6 + mov [rsp + KTRAP_FRAME_Dr6], rax + mov rax, dr7 + mov [rsp + KTRAP_FRAME_Dr7], rax + + /* Point rbp, where rsp was initially */ + lea rbp, [rsp + SIZE_KTRAP_FRAME + 8] + mov [rsp + KTRAP_FRAME_Rsp], rbp + + /* Store the EFLAGS we previously pushed on the stack */ + mov rax, [rbp] + mov [rsp + KTRAP_FRAME_EFlags], rax + + /* Get RIP from the stack */ + mov rax, [rbp + 8] + mov [rsp + KTRAP_FRAME_Rip], rax + + /* Make sure the direction flag is cleared */ + cld + + /* Clear all breakpoint enables in dr7. */ + mov rax, dr7 + and rax, 0xFFFF0000 + mov dr7, rax + + /* Call KDB */ + mov byte ptr [rsp + KTRAP_FRAME_P5], 1 /* FirstChance */ + mov r9, rsp /* Pointer to the trap frame */ + mov r8, 0 /* Context */ + mov dl, 0 /* PreviousMode (KernelMode) */ + mov rcx, 0 /* ExceptionRecord */ + call _KdbEnterDebuggerException + + /* Restore segment selectors */ + mov ax, [rsp + KTRAP_FRAME_SegDs] + mov ds, ax + mov ax, [rsp + KTRAP_FRAME_SegEs] + mov es, ax + mov ax, [rsp + KTRAP_FRAME_SegFs] + mov fs, ax + + /* Restore non-volatile registers */ + mov rbx, [rsp + KTRAP_FRAME_Rbx] + mov rdi, [rsp + KTRAP_FRAME_Rdi] + mov rsi, [rsp + KTRAP_FRAME_Rsi] + + /* Restore volatile registers */ + mov rax, [rsp + KTRAP_FRAME_Rax] + mov rcx, [rsp + KTRAP_FRAME_Rcx] + mov rdx, [rsp + KTRAP_FRAME_Rdx] + mov r8, [rsp + KTRAP_FRAME_R8] + mov r9, [rsp + KTRAP_FRAME_R9] + mov r10, [rsp + KTRAP_FRAME_R10] + mov r11, [rsp + KTRAP_FRAME_R11] + + /* Restore RSP */ + mov rsp, [rsp + KTRAP_FRAME_Rsp] + + iret From ffe14b3daefa0ff59d6f6edf12d31745a57978cf Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 19 Dec 2009 03:43:33 +0000 Subject: [PATCH 239/286] [MM] - Improve MiGetPteForProcess Implement MiGetPteProtection, MiSetPteProtection, MmCreateVirtualMappingUnsafe, MmCreateVirtualMapping svn path=/branches/ros-amd64-bringup/; revision=44653 --- reactos/ntoskrnl/mm/amd64/page.c | 220 ++++++++++++++++++++----------- 1 file changed, 142 insertions(+), 78 deletions(-) diff --git a/reactos/ntoskrnl/mm/amd64/page.c b/reactos/ntoskrnl/mm/amd64/page.c index 4c14d932c2e..d5a68da7588 100644 --- a/reactos/ntoskrnl/mm/amd64/page.c +++ b/reactos/ntoskrnl/mm/amd64/page.c @@ -18,6 +18,14 @@ #pragma alloc_text(INIT, MiInitPageDirectoryMap) #endif +#undef InterlockedExchangePte +#define InterlockedExchangePte(pte1, pte2) \ + InterlockedExchange64(&pte1->u.Long, pte2.u.Long) + +#define PAGE_EXECUTE_ANY (PAGE_EXECUTE|PAGE_EXECUTE_READ|PAGE_EXECUTE_READWRITE|PAGE_EXECUTE_WRITECOPY) +#define PAGE_WRITE_ANY (PAGE_EXECUTE_READWRITE|PAGE_READWRITE|PAGE_EXECUTE_WRITECOPY|PAGE_WRITECOPY) +#define PAGE_WRITECOPY_ANY (PAGE_EXECUTE_WRITECOPY|PAGE_WRITECOPY) + extern MMPTE HyperTemplatePte; /* GLOBALS *****************************************************************/ @@ -53,7 +61,7 @@ MiGetPteForProcess( PVOID Address, BOOLEAN Create) { - PMMPTE Pte; + MMPTE TmplPte, *Pte; /* Check if we need hypersapce mapping */ if (Address < MmSystemRangeStart && @@ -64,25 +72,33 @@ MiGetPteForProcess( } else if (Create) { + TmplPte.u.Long = 0; + TmplPte.u.Flush.Valid = 1; + TmplPte.u.Flush.Write = 1; + /* Get the PXE */ Pte = MiAddressToPxe(Address); if (!Pte->u.Hard.Valid) - InterlockedBitTestAndSet64(&Pte->u.Long, 0); + { + TmplPte.u.Hard.PageFrameNumber = MiAllocPage(TRUE); + InterlockedExchangePte(Pte, TmplPte); + } /* Get the PPE */ Pte = MiAddressToPpe(Address); if (!Pte->u.Hard.Valid) - InterlockedBitTestAndSet64(&Pte->u.Long, 0); + { + TmplPte.u.Hard.PageFrameNumber = MiAllocPage(TRUE); + InterlockedExchangePte(Pte, TmplPte); + } /* Get the PDE */ Pte = MiAddressToPde(Address); if (!Pte->u.Hard.Valid) - InterlockedBitTestAndSet64(&Pte->u.Long, 0); - - /* Get the PTE */ - Pte = MiAddressToPte(Address); - - return Pte; + { + TmplPte.u.Hard.PageFrameNumber = MiAllocPage(TRUE); + InterlockedExchangePte(Pte, TmplPte); + } } else { @@ -100,14 +116,9 @@ MiGetPteForProcess( Pte = MiAddressToPde(Address); if (!Pte->u.Hard.Valid) return NULL; - - /* Get the PTE */ - Pte = MiAddressToPte(Address); - - return Pte; } - return 0; + return MiAddressToPte(Address); } static @@ -128,6 +139,57 @@ MiGetPteValueForProcess( return PteValue; } +ULONG +NTAPI +MiGetPteProtection(MMPTE Pte) +{ + ULONG Protect; + + if (!Pte.u.Flush.Valid) + { + Protect = PAGE_NOACCESS; + } + else if (Pte.u.Flush.NoExecute) + { + if (Pte.u.Flush.CopyOnWrite) + Protect = PAGE_WRITECOPY; + else if (Pte.u.Flush.Write) + Protect = PAGE_READWRITE; + else + Protect = PAGE_READONLY; + } + else + { + if (Pte.u.Flush.CopyOnWrite) + Protect = PAGE_EXECUTE_WRITECOPY; + else if (Pte.u.Flush.Write) + Protect = PAGE_EXECUTE_READWRITE; + else + Protect = PAGE_EXECUTE_READ; + } + + if (Pte.u.Flush.CacheDisable) + Protect |= PAGE_NOCACHE; + + if (Pte.u.Flush.WriteThrough) + Protect |= PAGE_WRITETHROUGH; + + // PAGE_GUARD ? + return Protect; +} + +VOID +NTAPI +MiSetPteProtection(PMMPTE Pte, ULONG Protection) +{ + Pte->u.Flush.CopyOnWrite = (Protection & PAGE_WRITECOPY_ANY) ? 1 : 0; + Pte->u.Flush.Write = (Protection & PAGE_WRITE_ANY) ? 1 : 0; + Pte->u.Flush.CacheDisable = (Protection & PAGE_NOCACHE) ? 1 : 0; + Pte->u.Flush.WriteThrough = (Protection & PAGE_WRITETHROUGH) ? 1 : 0; + + // FIXME: This doesn't work. Why? +// Pte->u.Flush.NoExecute = (Protection & PAGE_EXECUTE_ANY) ? 0 : 1; +} /* FUNCTIONS ***************************************************************/ @@ -198,42 +260,9 @@ MmGetPageProtect(PEPROCESS Process, PVOID Address) Pte.u.Long = MiGetPteValueForProcess(Process, Address); - if (!Pte.u.Flush.Valid) - { - Protect = PAGE_NOACCESS; - } - else if (Pte.u.Flush.NoExecute) - { - if (Pte.u.Flush.CopyOnWrite) - Protect = PAGE_WRITECOPY; - else if (Pte.u.Flush.Write) - Protect = PAGE_READWRITE; - else - Protect = PAGE_READONLY; - } - else - { - if (Pte.u.Flush.CopyOnWrite) - Protect = PAGE_EXECUTE_WRITECOPY; - else if (Pte.u.Flush.Write) - Protect = PAGE_EXECUTE_READWRITE; - else - Protect = PAGE_EXECUTE_READ; - } - - if (Pte.u.Flush.CacheDisable) - Protect |= PAGE_NOCACHE; - - if (Pte.u.Flush.WriteThrough) - Protect |= PAGE_WRITETHROUGH; - - // PAGE_GUARD ? - - return Protect; + return MiGetPteProtection(Pte); } -#define PAGE_EXECUTE_ANY (PAGE_EXECUTE|PAGE_EXECUTE_READ|PAGE_EXECUTE_READWRITE|PAGE_EXECUTE_WRITECOPY) - VOID NTAPI MmSetPageProtect(PEPROCESS Process, PVOID Address, ULONG flProtect) @@ -241,27 +270,14 @@ MmSetPageProtect(PEPROCESS Process, PVOID Address, ULONG flProtect) PMMPTE Pte; MMPTE NewPte; - if (!(flProtect & PAGE_EXECUTE_ANY)) - NewPte.u.Flush.NoExecute = 1; - - if (flProtect & (PAGE_EXECUTE_WRITECOPY|PAGE_WRITECOPY)) - { - NewPte.u.Flush.Write = 1; - NewPte.u.Flush.CopyOnWrite = 1; - } - - if (flProtect & (PAGE_EXECUTE_READWRITE|PAGE_READWRITE)) - NewPte.u.Flush.Write = 1; - - if (flProtect & PAGE_NOCACHE) - NewPte.u.Flush.CacheDisable = 1; - - if (flProtect & PAGE_WRITETHROUGH) - NewPte.u.Flush.WriteThrough = 1; - Pte = MiGetPteForProcess(Process, Address, FALSE); + ASSERT(Pte != NULL); - InterlockedExchange64(&Pte->u.Long, NewPte.u.Long); + NewPte = *Pte; + + MiSetPteProtection(&NewPte, flProtect); + + InterlockedExchangePte(Pte, NewPte); MiFlushTlb(Pte, Address); } @@ -409,26 +425,74 @@ MmCreatePageFileMapping(PEPROCESS Process, NTSTATUS NTAPI -MmCreateVirtualMappingUnsafe(PEPROCESS Process, - PVOID Address, - ULONG flProtect, - PPFN_NUMBER Pages, - ULONG PageCount) +MmCreateVirtualMappingUnsafe( + PEPROCESS Process, + PVOID Address, + ULONG PageProtection, + PPFN_NUMBER Pages, + ULONG PageCount) { - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; + ULONG i; + MMPTE TmplPte, *Pte; + + /* Check if the range is valid */ + if ((Process == NULL && Address < MmSystemRangeStart) || + (Process != NULL && Address > MmHighestUserAddress)) + { + DPRINT1("Address 0x%p is invalid for process %p\n", Address, Process); + ASSERT(FALSE); + } + + TmplPte.u.Long = 0; + TmplPte.u.Hard.Valid = 1; + MiSetPteProtection(&TmplPte, PageProtection); + +//__debugbreak(); + + for (i = 0; i < PageCount; i++) + { + TmplPte.u.Hard.PageFrameNumber = Pages[i]; + + Pte = MiGetPteForProcess(Process, Address, TRUE); + +DPRINT1("MmCreateVirtualMappingUnsafe, Address=%p, TmplPte=%p, Pte=%p\n", + Address, TmplPte.u.Long, Pte); + + if (InterlockedExchangePte(Pte, TmplPte)) + { + KeInvalidateTlbEntry(Address); + } + + if (MiIsHyperspaceAddress(Pte)) + MmDeleteHyperspaceMapping((PVOID)PAGE_ROUND_DOWN(Pte)); + + Address = (PVOID)((ULONG64)Address + PAGE_SIZE); + } + + + return STATUS_SUCCESS; } NTSTATUS NTAPI MmCreateVirtualMapping(PEPROCESS Process, PVOID Address, - ULONG flProtect, + ULONG Protect, PPFN_NUMBER Pages, ULONG PageCount) { - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL; + ULONG i; + + for (i = 0; i < PageCount; i++) + { + if (!MmIsPageInUse(Pages[i])) + { + DPRINT1("Page %x not in use\n", Pages[i]); + KeBugCheck(MEMORY_MANAGEMENT); + } + } + + return MmCreateVirtualMappingUnsafe(Process, Address, Protect, Pages, PageCount); } NTSTATUS From 6134ac261939d3ef2ceb2506db0c424125dd8600 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 21 Dec 2009 19:46:40 +0000 Subject: [PATCH 240/286] try to fix build svn path=/branches/ros-amd64-bringup/; revision=44686 --- reactos/ntoskrnl/mm/amd64/page.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/reactos/ntoskrnl/mm/amd64/page.c b/reactos/ntoskrnl/mm/amd64/page.c index d5a68da7588..d83cace3412 100644 --- a/reactos/ntoskrnl/mm/amd64/page.c +++ b/reactos/ntoskrnl/mm/amd64/page.c @@ -80,7 +80,7 @@ MiGetPteForProcess( Pte = MiAddressToPxe(Address); if (!Pte->u.Hard.Valid) { - TmplPte.u.Hard.PageFrameNumber = MiAllocPage(TRUE); +// TmplPte.u.Hard.PageFrameNumber = MiAllocPage(TRUE); InterlockedExchangePte(Pte, TmplPte); } @@ -88,7 +88,7 @@ MiGetPteForProcess( Pte = MiAddressToPpe(Address); if (!Pte->u.Hard.Valid) { - TmplPte.u.Hard.PageFrameNumber = MiAllocPage(TRUE); +// TmplPte.u.Hard.PageFrameNumber = MiAllocPage(TRUE); InterlockedExchangePte(Pte, TmplPte); } @@ -96,7 +96,7 @@ MiGetPteForProcess( Pte = MiAddressToPde(Address); if (!Pte->u.Hard.Valid) { - TmplPte.u.Hard.PageFrameNumber = MiAllocPage(TRUE); +// TmplPte.u.Hard.PageFrameNumber = MiAllocPage(TRUE); InterlockedExchangePte(Pte, TmplPte); } } From 0cb1aea70176ce8e892f03b500146aae2ede3c78 Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Wed, 23 Dec 2009 03:36:40 +0000 Subject: [PATCH 241/286] Lazy port of kdbg to AMD64. Kdbg is very x86 specific but thankfully amd64 isn't that diferent. It can query register values, list modules, and dump PCR. Other stuff is broken and needs further debugging such as KdpSafe API, IDT, GDT, LDT offsets and disasm code. Backtraces not available because of missing unwind data. Special thanks to Physicus for making this commit possible. svn path=/branches/ros-amd64-bringup/; revision=44722 --- reactos/ntoskrnl/kd/amd64/kdmemsup.c | 217 ++ reactos/ntoskrnl/kdbg/amd64/dis-asm.h | 330 ++ reactos/ntoskrnl/kdbg/amd64/i386-dis.c | 4300 ++++++++++++++++++++++ reactos/ntoskrnl/kdbg/amd64/kdb.c | 247 +- reactos/ntoskrnl/kdbg/amd64/kdb_help.S | 59 +- reactos/ntoskrnl/kdbg/amd64/setjmp.S | 118 + reactos/ntoskrnl/kdbg/kdb.c | 72 +- reactos/ntoskrnl/kdbg/kdb.h | 25 +- reactos/ntoskrnl/kdbg/kdb_cli.c | 199 +- reactos/ntoskrnl/kdbg/kdb_expr.c | 42 +- reactos/ntoskrnl/ke/amd64/kiinit.c | 12 +- reactos/ntoskrnl/ntoskrnl-generic.rbuild | 26 +- 12 files changed, 5361 insertions(+), 286 deletions(-) create mode 100644 reactos/ntoskrnl/kd/amd64/kdmemsup.c create mode 100644 reactos/ntoskrnl/kdbg/amd64/dis-asm.h create mode 100644 reactos/ntoskrnl/kdbg/amd64/i386-dis.c create mode 100644 reactos/ntoskrnl/kdbg/amd64/setjmp.S diff --git a/reactos/ntoskrnl/kd/amd64/kdmemsup.c b/reactos/ntoskrnl/kd/amd64/kdmemsup.c new file mode 100644 index 00000000000..75f19a1cbce --- /dev/null +++ b/reactos/ntoskrnl/kd/amd64/kdmemsup.c @@ -0,0 +1,217 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS Kernel + * FILE: ntoskrnl/kd/amd64/kdmemsup.c + * PURPOSE: Kernel Debugger Safe Memory Support + * + * PROGRAMMERS: arty + */ + +#include +#define NDEBUG +#include + +#define HIGH_PHYS_MASK 0x80000000 +#define PAGE_TABLE_MASK 0x3ff +#define BIG_PAGE_SIZE (1<<22) +#define CR4_PAGE_SIZE_BIT 0x10 +#define PDE_PRESENT_BIT 0x01 +#define PDE_W_BIT 0x02 +#define PDE_PWT_BIT 0x08 +#define PDE_PCD_BIT 0x10 +#define PDE_ACCESSED_BIT 0x20 +#define PDE_DIRTY_BIT 0x40 +#define PDE_PS_BIT 0x80 + +#define MI_KDBG_TMP_PAGE_1 (HYPER_SPACE + 0x400000 - PAGE_SIZE) +#define MI_KDBG_TMP_PAGE_0 (MI_KDBG_TMP_PAGE_1 - PAGE_SIZE) + +/* VARIABLES ***************************************************************/ + +static BOOLEAN KdpPhysAccess = FALSE; + +static +ULONG_PTR +KdpPhysMap(ULONG_PTR PhysAddr, LONG Len) +{ + MMPTE TempPte; + PMMPTE PointerPte; + ULONG_PTR VirtAddr; + + TempPte.u.Long = PDE_PRESENT_BIT | PDE_W_BIT | PDE_PWT_BIT | + PDE_PCD_BIT | PDE_ACCESSED_BIT | PDE_DIRTY_BIT; + + if ((PhysAddr & (PAGE_SIZE - 1)) + Len > PAGE_SIZE) + { + TempPte.u.Hard.PageFrameNumber = (PhysAddr >> PAGE_SHIFT) + 1; + PointerPte = MiAddressToPte((PVOID)MI_KDBG_TMP_PAGE_1); + *PointerPte = TempPte; + VirtAddr = (ULONG_PTR)PointerPte << 10; + KeInvalidateTlbEntry((PVOID)VirtAddr); + } + + TempPte.u.Hard.PageFrameNumber = PhysAddr >> PAGE_SHIFT; + PointerPte = MiAddressToPte((PVOID)MI_KDBG_TMP_PAGE_0); + *PointerPte = TempPte; + VirtAddr = (ULONG_PTR)PointerPte << 10; + KeInvalidateTlbEntry((PVOID)VirtAddr); + + return VirtAddr + (PhysAddr & (PAGE_SIZE - 1)); +} + +static +ULONGLONG +KdpPhysRead(ULONG_PTR PhysAddr, LONG Len) +{ + ULONG_PTR Addr; + ULONGLONG Result = 0; + + Addr = KdpPhysMap(PhysAddr, Len); + + switch (Len) + { + case 8: + Result = *((PULONGLONG)Addr); + break; + case 4: + Result = *((PULONG)Addr); + break; + case 2: + Result = *((PUSHORT)Addr); + break; + case 1: + Result = *((PUCHAR)Addr); + break; + } + + return Result; +} + +static +VOID +KdpPhysWrite(ULONG_PTR PhysAddr, LONG Len, ULONGLONG Value) +{ + ULONG_PTR Addr; + + Addr = KdpPhysMap(PhysAddr, Len); + + switch (Len) + { + case 8: + *((PULONGLONG)Addr) = Value; + break; + case 4: + *((PULONG)Addr) = Value; + break; + case 2: + *((PUSHORT)Addr) = Value; + break; + case 1: + *((PUCHAR)Addr) = Value; + break; + } +} + +BOOLEAN +NTAPI +KdpTranslateAddress(ULONG_PTR Addr, PULONG_PTR ResultAddr) +{ + ULONG_PTR CR3Value = __readcr3(); + ULONG_PTR CR4Value = __readcr4(); + ULONG_PTR PageDirectory = (CR3Value & ~(PAGE_SIZE-1)) + + ((Addr >> 22) * sizeof(ULONG)); + ULONG_PTR PageDirectoryEntry = KdpPhysRead(PageDirectory, sizeof(ULONG)); + + /* Not present -> fail */ + if (!(PageDirectoryEntry & PDE_PRESENT_BIT)) + { + return FALSE; + } + + /* Big Page? */ + if ((PageDirectoryEntry & PDE_PS_BIT) && (CR4Value & CR4_PAGE_SIZE_BIT)) + { + *ResultAddr = (PageDirectoryEntry & ~(BIG_PAGE_SIZE-1)) + + (Addr & (BIG_PAGE_SIZE-1)); + return TRUE; + } + else + { + ULONG_PTR PageTableAddr = + (PageDirectoryEntry & ~(PAGE_SIZE-1)) + + ((Addr >> PAGE_SHIFT) & PAGE_TABLE_MASK) * sizeof(ULONG); + ULONG_PTR PageTableEntry = KdpPhysRead(PageTableAddr, sizeof(ULONG)); + if (PageTableEntry & PDE_PRESENT_BIT) + { + *ResultAddr = (PageTableEntry & ~(PAGE_SIZE-1)) + + (Addr & (PAGE_SIZE-1)); + return TRUE; + } + } + + return FALSE; +} + +BOOLEAN +NTAPI +KdpSafeReadMemory(ULONG_PTR Addr, LONG Len, PVOID Value) +{ + ULONG_PTR ResultPhysAddr; + + if (!KdpPhysAccess) + { + memcpy(Value, (PVOID)Addr, Len); + return TRUE; + } + + memset(Value, 0, Len); + + if (!KdpTranslateAddress(Addr, &ResultPhysAddr)) + return FALSE; + + switch (Len) + { + case 8: + *((PULONGLONG)Value) = KdpPhysRead(ResultPhysAddr, Len); + break; + case 4: + *((PULONG)Value) = KdpPhysRead(ResultPhysAddr, Len); + break; + case 2: + *((PUSHORT)Value) = KdpPhysRead(ResultPhysAddr, Len); + break; + case 1: + *((PUCHAR)Value) = KdpPhysRead(ResultPhysAddr, Len); + break; + } + + return TRUE; +} + +BOOLEAN +NTAPI +KdpSafeWriteMemory(ULONG_PTR Addr, LONG Len, ULONGLONG Value) +{ + ULONG_PTR ResultPhysAddr; + + if (!KdpPhysAccess) + { + memcpy((PVOID)Addr, &Value, Len); + return TRUE; + } + + if (!KdpTranslateAddress(Addr, &ResultPhysAddr)) + return FALSE; + + KdpPhysWrite(ResultPhysAddr, Len, Value); + return TRUE; +} + +VOID +NTAPI +KdpEnableSafeMem(VOID) +{ + KdpPhysAccess = TRUE; +} + +/* EOF */ diff --git a/reactos/ntoskrnl/kdbg/amd64/dis-asm.h b/reactos/ntoskrnl/kdbg/amd64/dis-asm.h new file mode 100644 index 00000000000..4052910d451 --- /dev/null +++ b/reactos/ntoskrnl/kdbg/amd64/dis-asm.h @@ -0,0 +1,330 @@ +/* Interface between the opcode library and its callers. + + Copyright 2001, 2002 Free Software Foundation, Inc. + + 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. + + Written by Cygnus Support, 1993. + + The opcode library (libopcodes.a) provides instruction decoders for + a large variety of instruction sets, callable with an identical + interface, for making instruction-processing programs more independent + of the instruction set being processed. */ + +#ifndef DIS_ASM_H +#define DIS_ASM_H + +#ifdef __cplusplus +extern "C" { +#endif + +#if 0 +/* #include */ +/* #include "bfd.h" */ +#endif + +typedef int (*fprintf_ftype) PARAMS((PTR, const char*, ...)); + +enum dis_insn_type { + dis_noninsn, /* Not a valid instruction */ + dis_nonbranch, /* Not a branch instruction */ + dis_branch, /* Unconditional branch */ + dis_condbranch, /* Conditional branch */ + dis_jsr, /* Jump to subroutine */ + dis_condjsr, /* Conditional jump to subroutine */ + dis_dref, /* Data reference instruction */ + dis_dref2 /* Two data references in instruction */ +}; + +/* This struct is passed into the instruction decoding routine, + and is passed back out into each callback. The various fields are used + for conveying information from your main routine into your callbacks, + for passing information into the instruction decoders (such as the + addresses of the callback functions), or for passing information + back from the instruction decoders to their callers. + + It must be initialized before it is first passed; this can be done + by hand, or using one of the initialization macros below. */ + +typedef struct disassemble_info { + fprintf_ftype fprintf_func; + PTR stream; + PTR application_data; + + /* Target description. We could replace this with a pointer to the bfd, + but that would require one. There currently isn't any such requirement + so to avoid introducing one we record these explicitly. */ + /* The bfd_flavour. This can be bfd_target_unknown_flavour. */ + enum bfd_flavour flavour; + /* The bfd_arch value. */ + enum bfd_architecture arch; + /* The bfd_mach value. */ + unsigned long mach; +#if 0 + enum bfd_endian endian; +#endif + /* An arch/mach-specific bitmask of selected instruction subsets, mainly + for processors with run-time-switchable instruction sets. The default, + zero, means that there is no constraint. CGEN-based opcodes ports + may use ISA_foo masks. */ + unsigned long insn_sets; + +#if 0 + /* Some targets need information about the current section to accurately + display insns. If this is NULL, the target disassembler function + will have to make its best guess. */ + asection *section; + + /* An array of pointers to symbols either at the location being disassembled + or at the start of the function being disassembled. The array is sorted + so that the first symbol is intended to be the one used. The others are + present for any misc. purposes. This is not set reliably, but if it is + not NULL, it is correct. */ + asymbol **symbols; + /* Number of symbols in array. */ + int num_symbols; +#endif + /* For use by the disassembler. + The top 16 bits are reserved for public use (and are documented here). + The bottom 16 bits are for the internal use of the disassembler. */ + unsigned long flags; +#define INSN_HAS_RELOC 0x80000000 + PTR private_data; + + /* Function used to get bytes to disassemble. MEMADDR is the + address of the stuff to be disassembled, MYADDR is the address to + put the bytes in, and LENGTH is the number of bytes to read. + INFO is a pointer to this struct. + Returns an errno value or 0 for success. */ + int (*read_memory_func) + PARAMS ((bfd_vma memaddr, bfd_byte *myaddr, unsigned int length, + struct disassemble_info *info)); + + /* Function which should be called if we get an error that we can't + recover from. STATUS is the errno value from read_memory_func and + MEMADDR is the address that we were trying to read. INFO is a + pointer to this struct. */ + void (*memory_error_func) + PARAMS ((int status, bfd_vma memaddr, struct disassemble_info *info)); + + /* Function called to print ADDR. */ + void (*print_address_func) + PARAMS ((bfd_vma addr, struct disassemble_info *info)); + + /* Function called to determine if there is a symbol at the given ADDR. + If there is, the function returns 1, otherwise it returns 0. + This is used by ports which support an overlay manager where + the overlay number is held in the top part of an address. In + some circumstances we want to include the overlay number in the + address, (normally because there is a symbol associated with + that address), but sometimes we want to mask out the overlay bits. */ + int (* symbol_at_address_func) + PARAMS ((bfd_vma addr, struct disassemble_info * info)); + + /* These are for buffer_read_memory. */ + bfd_byte *buffer; + bfd_vma buffer_vma; + unsigned int buffer_length; + + /* This variable may be set by the instruction decoder. It suggests + the number of bytes objdump should display on a single line. If + the instruction decoder sets this, it should always set it to + the same value in order to get reasonable looking output. */ + int bytes_per_line; + + /* the next two variables control the way objdump displays the raw data */ + /* For example, if bytes_per_line is 8 and bytes_per_chunk is 4, the */ + /* output will look like this: + 00: 00000000 00000000 + with the chunks displayed according to "display_endian". */ + int bytes_per_chunk; + enum bfd_endian display_endian; + + /* Number of octets per incremented target address + Normally one, but some DSPs have byte sizes of 16 or 32 bits. */ + unsigned int octets_per_byte; + + /* Results from instruction decoders. Not all decoders yet support + this information. This info is set each time an instruction is + decoded, and is only valid for the last such instruction. + + To determine whether this decoder supports this information, set + insn_info_valid to 0, decode an instruction, then check it. */ + + char insn_info_valid; /* Branch info has been set. */ + char branch_delay_insns; /* How many sequential insn's will run before + a branch takes effect. (0 = normal) */ + char data_size; /* Size of data reference in insn, in bytes */ + enum dis_insn_type insn_type; /* Type of instruction */ + bfd_vma target; /* Target address of branch or dref, if known; + zero if unknown. */ + bfd_vma target2; /* Second target address for dref2 */ + + /* Command line options specific to the target disassembler. */ + char * disassembler_options; + +} disassemble_info; + + +/* Standard disassemblers. Disassemble one instruction at the given + target address. Return number of octets processed. */ +typedef int (*disassembler_ftype) + PARAMS((bfd_vma, disassemble_info *)); + +extern int print_insn_big_mips PARAMS ((bfd_vma, disassemble_info*)); +extern int print_insn_little_mips PARAMS ((bfd_vma, disassemble_info*)); +extern int print_insn_i386 PARAMS ((bfd_vma, disassemble_info *)); +extern int print_insn_i386_att PARAMS ((bfd_vma, disassemble_info*)); +extern int print_insn_i386_intel PARAMS ((bfd_vma, disassemble_info*)); +extern int print_insn_ia64 PARAMS ((bfd_vma, disassemble_info*)); +extern int print_insn_i370 PARAMS ((bfd_vma, disassemble_info*)); +extern int print_insn_m68hc11 PARAMS ((bfd_vma, disassemble_info*)); +extern int print_insn_m68hc12 PARAMS ((bfd_vma, disassemble_info*)); +extern int print_insn_m68k PARAMS ((bfd_vma, disassemble_info*)); +extern int print_insn_z8001 PARAMS ((bfd_vma, disassemble_info*)); +extern int print_insn_z8002 PARAMS ((bfd_vma, disassemble_info*)); +extern int print_insn_h8300 PARAMS ((bfd_vma, disassemble_info*)); +extern int print_insn_h8300h PARAMS ((bfd_vma, disassemble_info*)); +extern int print_insn_h8300s PARAMS ((bfd_vma, disassemble_info*)); +extern int print_insn_h8500 PARAMS ((bfd_vma, disassemble_info*)); +extern int print_insn_alpha PARAMS ((bfd_vma, disassemble_info*)); +extern int print_insn_big_arm PARAMS ((bfd_vma, disassemble_info*)); +extern int print_insn_little_arm PARAMS ((bfd_vma, disassemble_info*)); +extern int print_insn_sparc PARAMS ((bfd_vma, disassemble_info*)); +extern int print_insn_big_a29k PARAMS ((bfd_vma, disassemble_info*)); +extern int print_insn_little_a29k PARAMS ((bfd_vma, disassemble_info*)); +extern int print_insn_avr PARAMS ((bfd_vma, disassemble_info*)); +extern int print_insn_d10v PARAMS ((bfd_vma, disassemble_info*)); +extern int print_insn_d30v PARAMS ((bfd_vma, disassemble_info*)); +extern int print_insn_dlx PARAMS ((bfd_vma, disassemble_info*)); +extern int print_insn_fr30 PARAMS ((bfd_vma, disassemble_info*)); +extern int print_insn_hppa PARAMS ((bfd_vma, disassemble_info*)); +extern int print_insn_i860 PARAMS ((bfd_vma, disassemble_info*)); +extern int print_insn_i960 PARAMS ((bfd_vma, disassemble_info*)); +extern int print_insn_ip2k PARAMS ((bfd_vma, disassemble_info*)); +extern int print_insn_m32r PARAMS ((bfd_vma, disassemble_info*)); +extern int print_insn_m88k PARAMS ((bfd_vma, disassemble_info*)); +extern int print_insn_mcore PARAMS ((bfd_vma, disassemble_info*)); +extern int print_insn_mmix PARAMS ((bfd_vma, disassemble_info*)); +extern int print_insn_mn10200 PARAMS ((bfd_vma, disassemble_info*)); +extern int print_insn_mn10300 PARAMS ((bfd_vma, disassemble_info*)); +extern int print_insn_msp430 PARAMS ((bfd_vma, disassemble_info*)); +extern int print_insn_ns32k PARAMS ((bfd_vma, disassemble_info*)); +extern int print_insn_openrisc PARAMS ((bfd_vma, disassemble_info*)); +extern int print_insn_big_or32 PARAMS ((bfd_vma, disassemble_info*)); +extern int print_insn_little_or32 PARAMS ((bfd_vma, disassemble_info*)); +extern int print_insn_pdp11 PARAMS ((bfd_vma, disassemble_info*)); +extern int print_insn_pj PARAMS ((bfd_vma, disassemble_info*)); +extern int print_insn_big_powerpc PARAMS ((bfd_vma, disassemble_info*)); +extern int print_insn_little_powerpc PARAMS ((bfd_vma, disassemble_info*)); +extern int print_insn_rs6000 PARAMS ((bfd_vma, disassemble_info*)); +extern int print_insn_s390 PARAMS ((bfd_vma, disassemble_info*)); +extern int print_insn_sh PARAMS ((bfd_vma, disassemble_info*)); +extern int print_insn_tic30 PARAMS ((bfd_vma, disassemble_info*)); +extern int print_insn_tic4x PARAMS ((bfd_vma, disassemble_info*)); +extern int print_insn_tic54x PARAMS ((bfd_vma, disassemble_info*)); +extern int print_insn_tic80 PARAMS ((bfd_vma, disassemble_info*)); +extern int print_insn_v850 PARAMS ((bfd_vma, disassemble_info*)); +extern int print_insn_vax PARAMS ((bfd_vma, disassemble_info*)); +extern int print_insn_w65 PARAMS ((bfd_vma, disassemble_info*)); +extern int print_insn_xstormy16 PARAMS ((bfd_vma, disassemble_info*)); +extern int print_insn_sh64 PARAMS ((bfd_vma, disassemble_info *)); +extern int print_insn_sh64x_media PARAMS ((bfd_vma, disassemble_info *)); +extern int print_insn_frv PARAMS ((bfd_vma, disassemble_info *)); +extern int print_insn_iq2000 PARAMS ((bfd_vma, disassemble_info *)); + +extern disassembler_ftype arc_get_disassembler PARAMS ((void *)); +extern disassembler_ftype cris_get_disassembler PARAMS ((bfd *)); + +extern void print_mips_disassembler_options PARAMS ((FILE *)); +extern void print_ppc_disassembler_options PARAMS ((FILE *)); +extern void print_arm_disassembler_options PARAMS ((FILE *)); +extern void parse_arm_disassembler_option PARAMS ((char *)); +extern int get_arm_regname_num_options PARAMS ((void)); +extern int set_arm_regname_option PARAMS ((int)); +extern int get_arm_regnames PARAMS ((int, const char **, const char **, const char ***)); + +/* Fetch the disassembler for a given BFD, if that support is available. */ +extern disassembler_ftype disassembler PARAMS ((bfd *)); + +/* Document any target specific options available from the disassembler. */ +extern void disassembler_usage PARAMS ((FILE *)); + + +/* This block of definitions is for particular callers who read instructions + into a buffer before calling the instruction decoder. */ + +/* Here is a function which callers may wish to use for read_memory_func. + It gets bytes from a buffer. */ +extern int buffer_read_memory + PARAMS ((bfd_vma, bfd_byte *, unsigned int, struct disassemble_info *)); + +/* This function goes with buffer_read_memory. + It prints a message using info->fprintf_func and info->stream. */ +extern void perror_memory PARAMS ((int, bfd_vma, struct disassemble_info *)); + + +/* Just print the address in hex. This is included for completeness even + though both GDB and objdump provide their own (to print symbolic + addresses). */ +extern void generic_print_address + PARAMS ((bfd_vma, struct disassemble_info *)); + +/* Always true. */ +extern int generic_symbol_at_address + PARAMS ((bfd_vma, struct disassemble_info *)); + +/* Macro to initialize a disassemble_info struct. This should be called + by all applications creating such a struct. */ +#define INIT_DISASSEMBLE_INFO(INFO, STREAM, FPRINTF_FUNC) \ + (INFO).flavour = bfd_target_unknown_flavour, \ + (INFO).arch = bfd_arch_unknown, \ + (INFO).mach = 0, \ + (INFO).insn_sets = 0, \ + (INFO).endian = BFD_ENDIAN_UNKNOWN, \ + (INFO).octets_per_byte = 1, \ + INIT_DISASSEMBLE_INFO_NO_ARCH(INFO, STREAM, FPRINTF_FUNC) + +/* Call this macro to initialize only the internal variables for the + disassembler. Architecture dependent things such as byte order, or machine + variant are not touched by this macro. This makes things much easier for + GDB which must initialize these things separately. */ + +#define INIT_DISASSEMBLE_INFO_NO_ARCH(INFO, STREAM, FPRINTF_FUNC) \ + (INFO).fprintf_func = (fprintf_ftype)(FPRINTF_FUNC), \ + (INFO).stream = (PTR)(STREAM), \ + (INFO).section = NULL, \ + (INFO).symbols = NULL, \ + (INFO).num_symbols = 0, \ + (INFO).private_data = NULL, \ + (INFO).buffer = NULL, \ + (INFO).buffer_vma = 0, \ + (INFO).buffer_length = 0, \ + (INFO).read_memory_func = buffer_read_memory, \ + (INFO).memory_error_func = perror_memory, \ + (INFO).print_address_func = generic_print_address, \ + (INFO).symbol_at_address_func = generic_symbol_at_address, \ + (INFO).flags = 0, \ + (INFO).bytes_per_line = 0, \ + (INFO).bytes_per_chunk = 0, \ + (INFO).display_endian = BFD_ENDIAN_UNKNOWN, \ + (INFO).disassembler_options = NULL, \ + (INFO).insn_info_valid = 0 + +#ifdef __cplusplus +} +#endif + +#endif /* ! defined (DIS_ASM_H) */ diff --git a/reactos/ntoskrnl/kdbg/amd64/i386-dis.c b/reactos/ntoskrnl/kdbg/amd64/i386-dis.c new file mode 100644 index 00000000000..60dc0246987 --- /dev/null +++ b/reactos/ntoskrnl/kdbg/amd64/i386-dis.c @@ -0,0 +1,4300 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS kernel + * FILE: ntoskrnl/kdbg/i386/i386-dis.c + * PURPOSE: No purpose listed. + * + * PROGRAMMERS: No programmer listed. + */ + +#include +#define NDEBUG +#include + +/* ReactOS compatibility stuff. */ +#define PARAMS(X) X +#define PTR void* +typedef enum bfd_flavour +{ + bfd_target_unknown_flavour, +} bfd_flavour; +typedef enum bfd_architecture +{ + bfd_arch_i386, +} bfd_arch; +typedef ULONG_PTR bfd_vma; +typedef unsigned char bfd_byte; +enum bfd_endian { BFD_ENDIAN_BIG, BIG_ENDIAN_LITTLE, BFD_ENDIAN_UNKNOWN }; +typedef void* bfd; +typedef signed int bfd_signed_vma; +#define bfd_mach_x86_64_intel_syntax 0 +#define bfd_mach_x86_64 1 +#define bfd_mach_i386_i386_intel_syntax 2 +#define bfd_mach_i386_i386 3 +#define bfd_mach_i386_i8086 4 +#define abort() DbgBreakPoint(); +#define _(X) X +#define ATTRIBUTE_UNUSED +extern int sprintf(char *str, const char *format, ...); +#define sprintf_vma(BUF, VMA) sprintf(BUF, "0x%X", VMA) +#define _setjmp setjmp +#define _INC_SETJMPEX +struct disassemble_info; + +int +print_insn_i386 (bfd_vma pc, struct disassemble_info *info); + +int +KdbpPrintDisasm(void* Ignored, const char* fmt, ...) +{ + va_list ap; + static char buffer[256]; + int ret; + + va_start(ap, fmt); + ret = vsprintf(buffer, fmt, ap); + DbgPrint("%s", buffer); + va_end(ap); + return(ret); +} + +int +KdbpNopPrintDisasm(void* Ignored, const char* fmt, ...) +{ + return(0); +} + +static int +KdbpReadMemory(ULONG_PTR Addr, unsigned char* Data, unsigned int Length, + struct disassemble_info * Ignored) +{ + return KdbpSafeReadMemory(Data, (void *)Addr, Length); /* 0 means no error */ +} + +static void +KdbpMemoryError(int Status, ULONG_PTR Addr, + struct disassemble_info * Ignored) +{ +} + +static void +KdbpPrintAddressInCode(ULONG_PTR Addr, struct disassemble_info * Ignored) +{ + if (!KdbSymPrintAddress((void*)Addr)) + { + DbgPrint("<%08x>", Addr); + } +} + +static void +KdbpNopPrintAddress(ULONG_PTR Addr, struct disassemble_info * Ignored) +{ +} + +#include "dis-asm.h" + +LONG +KdbpGetInstLength(IN ULONG_PTR Address) +{ + disassemble_info info; + + info.fprintf_func = KdbpNopPrintDisasm; + info.stream = NULL; + info.application_data = NULL; + info.flavour = bfd_target_unknown_flavour; + info.arch = bfd_arch_i386; + info.mach = bfd_mach_x86_64; + info.insn_sets = 0; + info.flags = 0; + info.read_memory_func = KdbpReadMemory; + info.memory_error_func = KdbpMemoryError; + info.print_address_func = KdbpNopPrintAddress; + info.symbol_at_address_func = NULL; + info.buffer = NULL; + info.buffer_vma = info.buffer_length = 0; + info.bytes_per_chunk = 0; + info.display_endian = BIG_ENDIAN_LITTLE; + info.disassembler_options = NULL; + + return(print_insn_i386(Address, &info)); +} + +LONG +KdbpDisassemble(IN ULONG_PTR Address, IN ULONG IntelSyntax) +{ + disassemble_info info; + + info.fprintf_func = KdbpPrintDisasm; + info.stream = NULL; + info.application_data = NULL; + info.flavour = bfd_target_unknown_flavour; + info.arch = bfd_arch_i386; + info.mach = IntelSyntax ? bfd_mach_i386_i386_intel_syntax : bfd_mach_i386_i386; + info.insn_sets = 0; + info.flags = 0; + info.read_memory_func = KdbpReadMemory; + info.memory_error_func = KdbpMemoryError; + info.print_address_func = KdbpPrintAddressInCode; + info.symbol_at_address_func = NULL; + info.buffer = NULL; + info.buffer_vma = info.buffer_length = 0; + info.bytes_per_chunk = 0; + info.display_endian = BIG_ENDIAN_LITTLE; + info.disassembler_options = NULL; + + return(print_insn_i386(Address, &info)); +} + +/* Print i386 instructions for GDB, the GNU debugger. + Copyright 1988, 1989, 1991, 1993, 1994, 1995, 1996, 1997, 1998, 1999, + 2001 + Free Software Foundation, Inc. + +This file is part of GDB. + +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. +*/ + +/* + * 80386 instruction printer by Pace Willisson (pace@prep.ai.mit.edu) + * July 1988 + * modified by John Hassey (hassey@dg-rtp.dg.com) + * x86-64 support added by Jan Hubicka (jh@suse.cz) + */ + +/* + * The main tables describing the instructions is essentially a copy + * of the "Opcode Map" chapter (Appendix A) of the Intel 80386 + * Programmers Manual. Usually, there is a capital letter, followed + * by a small letter. The capital letter tell the addressing mode, + * and the small letter tells about the operand size. Refer to + * the Intel manual for details. + */ + +#include "dis-asm.h" +#if 0 +#include "sysdep.h" +#include "opintl.h" +#endif + +#define MAXLEN 20 + +#include + +#ifndef UNIXWARE_COMPAT +/* Set non-zero for broken, compatible instructions. Set to zero for + non-broken opcodes. */ +#define UNIXWARE_COMPAT 1 +#endif + +static int fetch_data PARAMS ((struct disassemble_info *, bfd_byte *)); +static void ckprefix PARAMS ((void)); +static const char *prefix_name PARAMS ((int, int)); +static int print_insn PARAMS ((bfd_vma, disassemble_info *)); +static void dofloat PARAMS ((int)); +static void OP_ST PARAMS ((int, int)); +static void OP_STi PARAMS ((int, int)); +static int putop PARAMS ((const char *, int)); +static void oappend PARAMS ((const char *)); +static void append_seg PARAMS ((void)); +static void OP_indirE PARAMS ((int, int)); +static void print_operand_value PARAMS ((char *, int, bfd_vma)); +static void OP_E PARAMS ((int, int)); +static void OP_G PARAMS ((int, int)); +static bfd_vma get64 PARAMS ((void)); +static bfd_signed_vma get32 PARAMS ((void)); +static bfd_signed_vma get32s PARAMS ((void)); +static int get16 PARAMS ((void)); +static void set_op PARAMS ((bfd_vma, int)); +static void OP_REG PARAMS ((int, int)); +static void OP_IMREG PARAMS ((int, int)); +static void OP_I PARAMS ((int, int)); +static void OP_I64 PARAMS ((int, int)); +static void OP_sI PARAMS ((int, int)); +static void OP_J PARAMS ((int, int)); +static void OP_SEG PARAMS ((int, int)); +static void OP_DIR PARAMS ((int, int)); +static void OP_OFF PARAMS ((int, int)); +static void OP_OFF64 PARAMS ((int, int)); +static void ptr_reg PARAMS ((int, int)); +static void OP_ESreg PARAMS ((int, int)); +static void OP_DSreg PARAMS ((int, int)); +static void OP_C PARAMS ((int, int)); +static void OP_D PARAMS ((int, int)); +static void OP_T PARAMS ((int, int)); +static void OP_Rd PARAMS ((int, int)); +static void OP_MMX PARAMS ((int, int)); +static void OP_XMM PARAMS ((int, int)); +static void OP_EM PARAMS ((int, int)); +static void OP_EX PARAMS ((int, int)); +static void OP_MS PARAMS ((int, int)); +static void OP_XS PARAMS ((int, int)); +static void OP_3DNowSuffix PARAMS ((int, int)); +static void OP_SIMD_Suffix PARAMS ((int, int)); +static void SIMD_Fixup PARAMS ((int, int)); +static void BadOp PARAMS ((void)); + +struct dis_private { + /* Points to first byte not fetched. */ + bfd_byte *max_fetched; + bfd_byte the_buffer[MAXLEN]; + bfd_vma insn_start; + int orig_sizeflag; + jmp_buf bailout; +}; + +/* The opcode for the fwait instruction, which we treat as a prefix + when we can. */ +#define FWAIT_OPCODE (0x9b) + +/* Set to 1 for 64bit mode disassembly. */ +static int mode_64bit = 1; + +/* Flags for the prefixes for the current instruction. See below. */ +static int prefixes; + +/* REX prefix the current instruction. See below. */ +static int rex; +/* Bits of REX we've already used. */ +static int rex_used; +#define REX_MODE64 8 +#define REX_EXTX 4 +#define REX_EXTY 2 +#define REX_EXTZ 1 +/* Mark parts used in the REX prefix. When we are testing for + empty prefix (for 8bit register REX extension), just mask it + out. Otherwise test for REX bit is excuse for existence of REX + only in case value is nonzero. */ +#define USED_REX(value) \ + { \ + if (value) \ + rex_used |= (rex & value) ? (value) | 0x40 : 0; \ + else \ + rex_used |= 0x40; \ + } + +/* Flags for prefixes which we somehow handled when printing the + current instruction. */ +static int used_prefixes; + +/* Flags stored in PREFIXES. */ +#define PREFIX_REPZ 1 +#define PREFIX_REPNZ 2 +#define PREFIX_LOCK 4 +#define PREFIX_CS 8 +#define PREFIX_SS 0x10 +#define PREFIX_DS 0x20 +#define PREFIX_ES 0x40 +#define PREFIX_FS 0x80 +#define PREFIX_GS 0x100 +#define PREFIX_DATA 0x200 +#define PREFIX_ADDR 0x400 +#define PREFIX_FWAIT 0x800 + +/* Make sure that bytes from INFO->PRIVATE_DATA->BUFFER (inclusive) + to ADDR (exclusive) are valid. Returns 1 for success, longjmps + on error. */ +#define FETCH_DATA(info, addr) \ + ((addr) <= ((struct dis_private *) (info->private_data))->max_fetched \ + ? 1 : fetch_data ((info), (addr))) + +static int +fetch_data (info, addr) + struct disassemble_info *info; + bfd_byte *addr; +{ + int status; + struct dis_private *priv = (struct dis_private *) info->private_data; + bfd_vma start = priv->insn_start + (priv->max_fetched - priv->the_buffer); + + status = (*info->read_memory_func) (start, + priv->max_fetched, + addr - priv->max_fetched, + info); + if (status != 0) + { + /* If we did manage to read at least one byte, then + print_insn_i386 will do something sensible. Otherwise, print + an error. We do that here because this is where we know + STATUS. */ + if (priv->max_fetched == priv->the_buffer) + (*info->memory_error_func) (status, start, info); + longjmp (priv->bailout, 1); + } + else + priv->max_fetched = addr; + return 1; +} + +#define XX NULL, 0 + +#define Eb OP_E, b_mode +#define Ev OP_E, v_mode +#define Ed OP_E, d_mode +#define indirEb OP_indirE, b_mode +#define indirEv OP_indirE, v_mode +#define Ew OP_E, w_mode +#define Ma OP_E, v_mode +#define M OP_E, 0 /* lea, lgdt, etc. */ +#define Mp OP_E, 0 /* 32 or 48 bit memory operand for LDS, LES etc */ +#define Gb OP_G, b_mode +#define Gv OP_G, v_mode +#define Gd OP_G, d_mode +#define Gw OP_G, w_mode +#define Rd OP_Rd, d_mode +#define Rm OP_Rd, m_mode +#define Ib OP_I, b_mode +#define sIb OP_sI, b_mode /* sign extened byte */ +#define Iv OP_I, v_mode +#define Iq OP_I, q_mode +#define Iv64 OP_I64, v_mode +#define Iw OP_I, w_mode +#define Jb OP_J, b_mode +#define Jv OP_J, v_mode +#define Cm OP_C, m_mode +#define Dm OP_D, m_mode +#define Td OP_T, d_mode + +#define RMeAX OP_REG, eAX_reg +#define RMeBX OP_REG, eBX_reg +#define RMeCX OP_REG, eCX_reg +#define RMeDX OP_REG, eDX_reg +#define RMeSP OP_REG, eSP_reg +#define RMeBP OP_REG, eBP_reg +#define RMeSI OP_REG, eSI_reg +#define RMeDI OP_REG, eDI_reg +#define RMrAX OP_REG, rAX_reg +#define RMrBX OP_REG, rBX_reg +#define RMrCX OP_REG, rCX_reg +#define RMrDX OP_REG, rDX_reg +#define RMrSP OP_REG, rSP_reg +#define RMrBP OP_REG, rBP_reg +#define RMrSI OP_REG, rSI_reg +#define RMrDI OP_REG, rDI_reg +#define RMAL OP_REG, al_reg +#define RMAL OP_REG, al_reg +#define RMCL OP_REG, cl_reg +#define RMDL OP_REG, dl_reg +#define RMBL OP_REG, bl_reg +#define RMAH OP_REG, ah_reg +#define RMCH OP_REG, ch_reg +#define RMDH OP_REG, dh_reg +#define RMBH OP_REG, bh_reg +#define RMAX OP_REG, ax_reg +#define RMDX OP_REG, dx_reg + +#define eAX OP_IMREG, eAX_reg +#define eBX OP_IMREG, eBX_reg +#define eCX OP_IMREG, eCX_reg +#define eDX OP_IMREG, eDX_reg +#define eSP OP_IMREG, eSP_reg +#define eBP OP_IMREG, eBP_reg +#define eSI OP_IMREG, eSI_reg +#define eDI OP_IMREG, eDI_reg +#define AL OP_IMREG, al_reg +#define AL OP_IMREG, al_reg +#define CL OP_IMREG, cl_reg +#define DL OP_IMREG, dl_reg +#define BL OP_IMREG, bl_reg +#define AH OP_IMREG, ah_reg +#define CH OP_IMREG, ch_reg +#define DH OP_IMREG, dh_reg +#define BH OP_IMREG, bh_reg +#define AX OP_IMREG, ax_reg +#define DX OP_IMREG, dx_reg +#define indirDX OP_IMREG, indir_dx_reg + +#define Sw OP_SEG, w_mode +#define Ap OP_DIR, 0 +#define Ob OP_OFF, b_mode +#define Ob64 OP_OFF64, b_mode +#define Ov OP_OFF, v_mode +#define Ov64 OP_OFF64, v_mode +#define Xb OP_DSreg, eSI_reg +#define Xv OP_DSreg, eSI_reg +#define Yb OP_ESreg, eDI_reg +#define Yv OP_ESreg, eDI_reg +#define DSBX OP_DSreg, eBX_reg + +#define es OP_REG, es_reg +#define ss OP_REG, ss_reg +#define cs OP_REG, cs_reg +#define ds OP_REG, ds_reg +#define fs OP_REG, fs_reg +#define gs OP_REG, gs_reg + +#define MX OP_MMX, 0 +#define XM OP_XMM, 0 +#define EM OP_EM, v_mode +#define EX OP_EX, v_mode +#define MS OP_MS, v_mode +#define XS OP_XS, v_mode +#define None OP_E, 0 +#define OPSUF OP_3DNowSuffix, 0 +#define OPSIMD OP_SIMD_Suffix, 0 + +#define cond_jump_flag NULL, cond_jump_mode +#define loop_jcxz_flag NULL, loop_jcxz_mode + +/* bits in sizeflag */ +#define SUFFIX_ALWAYS 4 +#define AFLAG 2 +#define DFLAG 1 + +#define b_mode 1 /* byte operand */ +#define v_mode 2 /* operand size depends on prefixes */ +#define w_mode 3 /* word operand */ +#define d_mode 4 /* double word operand */ +#define q_mode 5 /* quad word operand */ +#define x_mode 6 +#define m_mode 7 /* d_mode in 32bit, q_mode in 64bit mode. */ +#define cond_jump_mode 8 +#define loop_jcxz_mode 9 + +#define es_reg 100 +#define cs_reg 101 +#define ss_reg 102 +#define ds_reg 103 +#define fs_reg 104 +#define gs_reg 105 + +#define eAX_reg 108 +#define eCX_reg 109 +#define eDX_reg 110 +#define eBX_reg 111 +#define eSP_reg 112 +#define eBP_reg 113 +#define eSI_reg 114 +#define eDI_reg 115 + +#define al_reg 116 +#define cl_reg 117 +#define dl_reg 118 +#define bl_reg 119 +#define ah_reg 120 +#define ch_reg 121 +#define dh_reg 122 +#define bh_reg 123 + +#define ax_reg 124 +#define cx_reg 125 +#define dx_reg 126 +#define bx_reg 127 +#define sp_reg 128 +#define bp_reg 129 +#define si_reg 130 +#define di_reg 131 + +#define rAX_reg 132 +#define rCX_reg 133 +#define rDX_reg 134 +#define rBX_reg 135 +#define rSP_reg 136 +#define rBP_reg 137 +#define rSI_reg 138 +#define rDI_reg 139 + +#define indir_dx_reg 150 + +#define FLOATCODE 1 +#define USE_GROUPS 2 +#define USE_PREFIX_USER_TABLE 3 +#define X86_64_SPECIAL 4 + +#define FLOAT NULL, NULL, FLOATCODE, NULL, 0, NULL, 0 + +#define GRP1b NULL, NULL, USE_GROUPS, NULL, 0, NULL, 0 +#define GRP1S NULL, NULL, USE_GROUPS, NULL, 1, NULL, 0 +#define GRP1Ss NULL, NULL, USE_GROUPS, NULL, 2, NULL, 0 +#define GRP2b NULL, NULL, USE_GROUPS, NULL, 3, NULL, 0 +#define GRP2S NULL, NULL, USE_GROUPS, NULL, 4, NULL, 0 +#define GRP2b_one NULL, NULL, USE_GROUPS, NULL, 5, NULL, 0 +#define GRP2S_one NULL, NULL, USE_GROUPS, NULL, 6, NULL, 0 +#define GRP2b_cl NULL, NULL, USE_GROUPS, NULL, 7, NULL, 0 +#define GRP2S_cl NULL, NULL, USE_GROUPS, NULL, 8, NULL, 0 +#define GRP3b NULL, NULL, USE_GROUPS, NULL, 9, NULL, 0 +#define GRP3S NULL, NULL, USE_GROUPS, NULL, 10, NULL, 0 +#define GRP4 NULL, NULL, USE_GROUPS, NULL, 11, NULL, 0 +#define GRP5 NULL, NULL, USE_GROUPS, NULL, 12, NULL, 0 +#define GRP6 NULL, NULL, USE_GROUPS, NULL, 13, NULL, 0 +#define GRP7 NULL, NULL, USE_GROUPS, NULL, 14, NULL, 0 +#define GRP8 NULL, NULL, USE_GROUPS, NULL, 15, NULL, 0 +#define GRP9 NULL, NULL, USE_GROUPS, NULL, 16, NULL, 0 +#define GRP10 NULL, NULL, USE_GROUPS, NULL, 17, NULL, 0 +#define GRP11 NULL, NULL, USE_GROUPS, NULL, 18, NULL, 0 +#define GRP12 NULL, NULL, USE_GROUPS, NULL, 19, NULL, 0 +#define GRP13 NULL, NULL, USE_GROUPS, NULL, 20, NULL, 0 +#define GRP14 NULL, NULL, USE_GROUPS, NULL, 21, NULL, 0 +#define GRPAMD NULL, NULL, USE_GROUPS, NULL, 22, NULL, 0 + +#define PREGRP0 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 0, NULL, 0 +#define PREGRP1 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 1, NULL, 0 +#define PREGRP2 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 2, NULL, 0 +#define PREGRP3 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 3, NULL, 0 +#define PREGRP4 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 4, NULL, 0 +#define PREGRP5 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 5, NULL, 0 +#define PREGRP6 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 6, NULL, 0 +#define PREGRP7 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 7, NULL, 0 +#define PREGRP8 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 8, NULL, 0 +#define PREGRP9 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 9, NULL, 0 +#define PREGRP10 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 10, NULL, 0 +#define PREGRP11 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 11, NULL, 0 +#define PREGRP12 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 12, NULL, 0 +#define PREGRP13 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 13, NULL, 0 +#define PREGRP14 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 14, NULL, 0 +#define PREGRP15 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 15, NULL, 0 +#define PREGRP16 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 16, NULL, 0 +#define PREGRP17 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 17, NULL, 0 +#define PREGRP18 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 18, NULL, 0 +#define PREGRP19 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 19, NULL, 0 +#define PREGRP20 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 20, NULL, 0 +#define PREGRP21 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 21, NULL, 0 +#define PREGRP22 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 22, NULL, 0 +#define PREGRP23 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 23, NULL, 0 +#define PREGRP24 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 24, NULL, 0 +#define PREGRP25 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 25, NULL, 0 +#define PREGRP26 NULL, NULL, USE_PREFIX_USER_TABLE, NULL, 26, NULL, 0 + +#define X86_64_0 NULL, NULL, X86_64_SPECIAL, NULL, 0, NULL, 0 + +typedef void (*op_rtn) PARAMS ((int bytemode, int sizeflag)); + +struct dis386 { + const char *name; + op_rtn op1; + int bytemode1; + op_rtn op2; + int bytemode2; + op_rtn op3; + int bytemode3; +}; + +/* Upper case letters in the instruction names here are macros. + 'A' => print 'b' if no register operands or suffix_always is true + 'B' => print 'b' if suffix_always is true + 'E' => print 'e' if 32-bit form of jcxz + 'F' => print 'w' or 'l' depending on address size prefix (loop insns) + 'H' => print ",pt" or ",pn" branch hint + 'L' => print 'l' if suffix_always is true + 'N' => print 'n' if instruction has no wait "prefix" + 'O' => print 'd', or 'o' + 'P' => print 'w', 'l' or 'q' if instruction has an operand size prefix, + . or suffix_always is true. print 'q' if rex prefix is present. + 'Q' => print 'w', 'l' or 'q' if no register operands or suffix_always + . is true + 'R' => print 'w', 'l' or 'q' ("wd" or "dq" in intel mode) + 'S' => print 'w', 'l' or 'q' if suffix_always is true + 'T' => print 'q' in 64bit mode and behave as 'P' otherwise + 'U' => print 'q' in 64bit mode and behave as 'Q' otherwise + 'X' => print 's', 'd' depending on data16 prefix (for XMM) + 'W' => print 'b' or 'w' ("w" or "de" in intel mode) + 'Y' => 'q' if instruction has an REX 64bit overwrite prefix + + Many of the above letters print nothing in Intel mode. See "putop" + for the details. + + Braces '{' and '}', and vertical bars '|', indicate alternative + mnemonic strings for AT&T, Intel, X86_64 AT&T, and X86_64 Intel + modes. In cases where there are only two alternatives, the X86_64 + instruction is reserved, and "(bad)" is printed. +*/ + +static const struct dis386 dis386[] = { + /* 00 */ + { "addB", Eb, Gb, XX }, + { "addS", Ev, Gv, XX }, + { "addB", Gb, Eb, XX }, + { "addS", Gv, Ev, XX }, + { "addB", AL, Ib, XX }, + { "addS", eAX, Iv, XX }, + { "push{T|}", es, XX, XX }, + { "pop{T|}", es, XX, XX }, + /* 08 */ + { "orB", Eb, Gb, XX }, + { "orS", Ev, Gv, XX }, + { "orB", Gb, Eb, XX }, + { "orS", Gv, Ev, XX }, + { "orB", AL, Ib, XX }, + { "orS", eAX, Iv, XX }, + { "push{T|}", cs, XX, XX }, + { "(bad)", XX, XX, XX }, /* 0x0f extended opcode escape */ + /* 10 */ + { "adcB", Eb, Gb, XX }, + { "adcS", Ev, Gv, XX }, + { "adcB", Gb, Eb, XX }, + { "adcS", Gv, Ev, XX }, + { "adcB", AL, Ib, XX }, + { "adcS", eAX, Iv, XX }, + { "push{T|}", ss, XX, XX }, + { "popT|}", ss, XX, XX }, + /* 18 */ + { "sbbB", Eb, Gb, XX }, + { "sbbS", Ev, Gv, XX }, + { "sbbB", Gb, Eb, XX }, + { "sbbS", Gv, Ev, XX }, + { "sbbB", AL, Ib, XX }, + { "sbbS", eAX, Iv, XX }, + { "push{T|}", ds, XX, XX }, + { "pop{T|}", ds, XX, XX }, + /* 20 */ + { "andB", Eb, Gb, XX }, + { "andS", Ev, Gv, XX }, + { "andB", Gb, Eb, XX }, + { "andS", Gv, Ev, XX }, + { "andB", AL, Ib, XX }, + { "andS", eAX, Iv, XX }, + { "(bad)", XX, XX, XX }, /* SEG ES prefix */ + { "daa{|}", XX, XX, XX }, + /* 28 */ + { "subB", Eb, Gb, XX }, + { "subS", Ev, Gv, XX }, + { "subB", Gb, Eb, XX }, + { "subS", Gv, Ev, XX }, + { "subB", AL, Ib, XX }, + { "subS", eAX, Iv, XX }, + { "(bad)", XX, XX, XX }, /* SEG CS prefix */ + { "das{|}", XX, XX, XX }, + /* 30 */ + { "xorB", Eb, Gb, XX }, + { "xorS", Ev, Gv, XX }, + { "xorB", Gb, Eb, XX }, + { "xorS", Gv, Ev, XX }, + { "xorB", AL, Ib, XX }, + { "xorS", eAX, Iv, XX }, + { "(bad)", XX, XX, XX }, /* SEG SS prefix */ + { "aaa{|}", XX, XX, XX }, + /* 38 */ + { "cmpB", Eb, Gb, XX }, + { "cmpS", Ev, Gv, XX }, + { "cmpB", Gb, Eb, XX }, + { "cmpS", Gv, Ev, XX }, + { "cmpB", AL, Ib, XX }, + { "cmpS", eAX, Iv, XX }, + { "(bad)", XX, XX, XX }, /* SEG DS prefix */ + { "aas{|}", XX, XX, XX }, + /* 40 */ + { "inc{S|}", RMeAX, XX, XX }, + { "inc{S|}", RMeCX, XX, XX }, + { "inc{S|}", RMeDX, XX, XX }, + { "inc{S|}", RMeBX, XX, XX }, + { "inc{S|}", RMeSP, XX, XX }, + { "inc{S|}", RMeBP, XX, XX }, + { "inc{S|}", RMeSI, XX, XX }, + { "inc{S|}", RMeDI, XX, XX }, + /* 48 */ + { "dec{S|}", RMeAX, XX, XX }, + { "dec{S|}", RMeCX, XX, XX }, + { "dec{S|}", RMeDX, XX, XX }, + { "dec{S|}", RMeBX, XX, XX }, + { "dec{S|}", RMeSP, XX, XX }, + { "dec{S|}", RMeBP, XX, XX }, + { "dec{S|}", RMeSI, XX, XX }, + { "dec{S|}", RMeDI, XX, XX }, + /* 50 */ + { "pushS", RMrAX, XX, XX }, + { "pushS", RMrCX, XX, XX }, + { "pushS", RMrDX, XX, XX }, + { "pushS", RMrBX, XX, XX }, + { "pushS", RMrSP, XX, XX }, + { "pushS", RMrBP, XX, XX }, + { "pushS", RMrSI, XX, XX }, + { "pushS", RMrDI, XX, XX }, + /* 58 */ + { "popS", RMrAX, XX, XX }, + { "popS", RMrCX, XX, XX }, + { "popS", RMrDX, XX, XX }, + { "popS", RMrBX, XX, XX }, + { "popS", RMrSP, XX, XX }, + { "popS", RMrBP, XX, XX }, + { "popS", RMrSI, XX, XX }, + { "popS", RMrDI, XX, XX }, + /* 60 */ + { "pusha{P|}", XX, XX, XX }, + { "popa{P|}", XX, XX, XX }, + { "bound{S|}", Gv, Ma, XX }, + { X86_64_0 }, + { "(bad)", XX, XX, XX }, /* seg fs */ + { "(bad)", XX, XX, XX }, /* seg gs */ + { "(bad)", XX, XX, XX }, /* op size prefix */ + { "(bad)", XX, XX, XX }, /* adr size prefix */ + /* 68 */ + { "pushT", Iq, XX, XX }, + { "imulS", Gv, Ev, Iv }, + { "pushT", sIb, XX, XX }, + { "imulS", Gv, Ev, sIb }, + { "ins{b||b|}", Yb, indirDX, XX }, + { "ins{R||R|}", Yv, indirDX, XX }, + { "outs{b||b|}", indirDX, Xb, XX }, + { "outs{R||R|}", indirDX, Xv, XX }, + /* 70 */ + { "joH", Jb, XX, cond_jump_flag }, + { "jnoH", Jb, XX, cond_jump_flag }, + { "jbH", Jb, XX, cond_jump_flag }, + { "jaeH", Jb, XX, cond_jump_flag }, + { "jeH", Jb, XX, cond_jump_flag }, + { "jneH", Jb, XX, cond_jump_flag }, + { "jbeH", Jb, XX, cond_jump_flag }, + { "jaH", Jb, XX, cond_jump_flag }, + /* 78 */ + { "jsH", Jb, XX, cond_jump_flag }, + { "jnsH", Jb, XX, cond_jump_flag }, + { "jpH", Jb, XX, cond_jump_flag }, + { "jnpH", Jb, XX, cond_jump_flag }, + { "jlH", Jb, XX, cond_jump_flag }, + { "jgeH", Jb, XX, cond_jump_flag }, + { "jleH", Jb, XX, cond_jump_flag }, + { "jgH", Jb, XX, cond_jump_flag }, + /* 80 */ + { GRP1b }, + { GRP1S }, + { "(bad)", XX, XX, XX }, + { GRP1Ss }, + { "testB", Eb, Gb, XX }, + { "testS", Ev, Gv, XX }, + { "xchgB", Eb, Gb, XX }, + { "xchgS", Ev, Gv, XX }, + /* 88 */ + { "movB", Eb, Gb, XX }, + { "movS", Ev, Gv, XX }, + { "movB", Gb, Eb, XX }, + { "movS", Gv, Ev, XX }, + { "movQ", Ev, Sw, XX }, + { "leaS", Gv, M, XX }, + { "movQ", Sw, Ev, XX }, + { "popU", Ev, XX, XX }, + /* 90 */ + { "nop", XX, XX, XX }, + /* FIXME: NOP with REPz prefix is called PAUSE. */ + { "xchgS", RMeCX, eAX, XX }, + { "xchgS", RMeDX, eAX, XX }, + { "xchgS", RMeBX, eAX, XX }, + { "xchgS", RMeSP, eAX, XX }, + { "xchgS", RMeBP, eAX, XX }, + { "xchgS", RMeSI, eAX, XX }, + { "xchgS", RMeDI, eAX, XX }, + /* 98 */ + { "cW{tR||tR|}", XX, XX, XX }, + { "cR{tO||tO|}", XX, XX, XX }, + { "lcall{T|}", Ap, XX, XX }, + { "(bad)", XX, XX, XX }, /* fwait */ + { "pushfT", XX, XX, XX }, + { "popfT", XX, XX, XX }, + { "sahf{|}", XX, XX, XX }, + { "lahf{|}", XX, XX, XX }, + /* a0 */ + { "movB", AL, Ob64, XX }, + { "movS", eAX, Ov64, XX }, + { "movB", Ob64, AL, XX }, + { "movS", Ov64, eAX, XX }, + { "movs{b||b|}", Yb, Xb, XX }, + { "movs{R||R|}", Yv, Xv, XX }, + { "cmps{b||b|}", Xb, Yb, XX }, + { "cmps{R||R|}", Xv, Yv, XX }, + /* a8 */ + { "testB", AL, Ib, XX }, + { "testS", eAX, Iv, XX }, + { "stosB", Yb, AL, XX }, + { "stosS", Yv, eAX, XX }, + { "lodsB", AL, Xb, XX }, + { "lodsS", eAX, Xv, XX }, + { "scasB", AL, Yb, XX }, + { "scasS", eAX, Yv, XX }, + /* b0 */ + { "movB", RMAL, Ib, XX }, + { "movB", RMCL, Ib, XX }, + { "movB", RMDL, Ib, XX }, + { "movB", RMBL, Ib, XX }, + { "movB", RMAH, Ib, XX }, + { "movB", RMCH, Ib, XX }, + { "movB", RMDH, Ib, XX }, + { "movB", RMBH, Ib, XX }, + /* b8 */ + { "movS", RMeAX, Iv64, XX }, + { "movS", RMeCX, Iv64, XX }, + { "movS", RMeDX, Iv64, XX }, + { "movS", RMeBX, Iv64, XX }, + { "movS", RMeSP, Iv64, XX }, + { "movS", RMeBP, Iv64, XX }, + { "movS", RMeSI, Iv64, XX }, + { "movS", RMeDI, Iv64, XX }, + /* c0 */ + { GRP2b }, + { GRP2S }, + { "retT", Iw, XX, XX }, + { "retT", XX, XX, XX }, + { "les{S|}", Gv, Mp, XX }, + { "ldsS", Gv, Mp, XX }, + { "movA", Eb, Ib, XX }, + { "movQ", Ev, Iv, XX }, + /* c8 */ + { "enterT", Iw, Ib, XX }, + { "leaveT", XX, XX, XX }, + { "lretP", Iw, XX, XX }, + { "lretP", XX, XX, XX }, + { "int3", XX, XX, XX }, + { "int", Ib, XX, XX }, + { "into{|}", XX, XX, XX }, + { "iretP", XX, XX, XX }, + /* d0 */ + { GRP2b_one }, + { GRP2S_one }, + { GRP2b_cl }, + { GRP2S_cl }, + { "aam{|}", sIb, XX, XX }, + { "aad{|}", sIb, XX, XX }, + { "(bad)", XX, XX, XX }, + { "xlat", DSBX, XX, XX }, + /* d8 */ + { FLOAT }, + { FLOAT }, + { FLOAT }, + { FLOAT }, + { FLOAT }, + { FLOAT }, + { FLOAT }, + { FLOAT }, + /* e0 */ + { "loopneFH", Jb, XX, loop_jcxz_flag }, + { "loopeFH", Jb, XX, loop_jcxz_flag }, + { "loopFH", Jb, XX, loop_jcxz_flag }, + { "jEcxzH", Jb, XX, loop_jcxz_flag }, + { "inB", AL, Ib, XX }, + { "inS", eAX, Ib, XX }, + { "outB", Ib, AL, XX }, + { "outS", Ib, eAX, XX }, + /* e8 */ + { "callT", Jv, XX, XX }, + { "jmpT", Jv, XX, XX }, + { "ljmp{T|}", Ap, XX, XX }, + { "jmp", Jb, XX, XX }, + { "inB", AL, indirDX, XX }, + { "inS", eAX, indirDX, XX }, + { "outB", indirDX, AL, XX }, + { "outS", indirDX, eAX, XX }, + /* f0 */ + { "(bad)", XX, XX, XX }, /* lock prefix */ + { "(bad)", XX, XX, XX }, + { "(bad)", XX, XX, XX }, /* repne */ + { "(bad)", XX, XX, XX }, /* repz */ + { "hlt", XX, XX, XX }, + { "cmc", XX, XX, XX }, + { GRP3b }, + { GRP3S }, + /* f8 */ + { "clc", XX, XX, XX }, + { "stc", XX, XX, XX }, + { "cli", XX, XX, XX }, + { "sti", XX, XX, XX }, + { "cld", XX, XX, XX }, + { "std", XX, XX, XX }, + { GRP4 }, + { GRP5 }, +}; + +static const struct dis386 dis386_twobyte[] = { + /* 00 */ + { GRP6 }, + { GRP7 }, + { "larS", Gv, Ew, XX }, + { "lslS", Gv, Ew, XX }, + { "(bad)", XX, XX, XX }, + { "syscall", XX, XX, XX }, + { "clts", XX, XX, XX }, + { "sysretP", XX, XX, XX }, + /* 08 */ + { "invd", XX, XX, XX }, + { "wbinvd", XX, XX, XX }, + { "(bad)", XX, XX, XX }, + { "ud2a", XX, XX, XX }, + { "(bad)", XX, XX, XX }, + { GRPAMD }, + { "femms", XX, XX, XX }, + { "", MX, EM, OPSUF }, /* See OP_3DNowSuffix. */ + /* 10 */ + { PREGRP8 }, + { PREGRP9 }, + { "movlpX", XM, EX, SIMD_Fixup, 'h' }, /* really only 2 operands */ + { "movlpX", EX, XM, SIMD_Fixup, 'h' }, + { "unpcklpX", XM, EX, XX }, + { "unpckhpX", XM, EX, XX }, + { "movhpX", XM, EX, SIMD_Fixup, 'l' }, + { "movhpX", EX, XM, SIMD_Fixup, 'l' }, + /* 18 */ + { GRP14 }, + { "(bad)", XX, XX, XX }, + { "(bad)", XX, XX, XX }, + { "(bad)", XX, XX, XX }, + { "(bad)", XX, XX, XX }, + { "(bad)", XX, XX, XX }, + { "(bad)", XX, XX, XX }, + { "(bad)", XX, XX, XX }, + /* 20 */ + { "movL", Rm, Cm, XX }, + { "movL", Rm, Dm, XX }, + { "movL", Cm, Rm, XX }, + { "movL", Dm, Rm, XX }, + { "movL", Rd, Td, XX }, + { "(bad)", XX, XX, XX }, + { "movL", Td, Rd, XX }, + { "(bad)", XX, XX, XX }, + /* 28 */ + { "movapX", XM, EX, XX }, + { "movapX", EX, XM, XX }, + { PREGRP2 }, + { "movntpX", Ev, XM, XX }, + { PREGRP4 }, + { PREGRP3 }, + { "ucomisX", XM,EX, XX }, + { "comisX", XM,EX, XX }, + /* 30 */ + { "wrmsr", XX, XX, XX }, + { "rdtsc", XX, XX, XX }, + { "rdmsr", XX, XX, XX }, + { "rdpmc", XX, XX, XX }, + { "sysenter", XX, XX, XX }, + { "sysexit", XX, XX, XX }, + { "(bad)", XX, XX, XX }, + { "(bad)", XX, XX, XX }, + /* 38 */ + { "(bad)", XX, XX, XX }, + { "(bad)", XX, XX, XX }, + { "(bad)", XX, XX, XX }, + { "(bad)", XX, XX, XX }, + { "(bad)", XX, XX, XX }, + { "(bad)", XX, XX, XX }, + { "(bad)", XX, XX, XX }, + { "(bad)", XX, XX, XX }, + /* 40 */ + { "cmovo", Gv, Ev, XX }, + { "cmovno", Gv, Ev, XX }, + { "cmovb", Gv, Ev, XX }, + { "cmovae", Gv, Ev, XX }, + { "cmove", Gv, Ev, XX }, + { "cmovne", Gv, Ev, XX }, + { "cmovbe", Gv, Ev, XX }, + { "cmova", Gv, Ev, XX }, + /* 48 */ + { "cmovs", Gv, Ev, XX }, + { "cmovns", Gv, Ev, XX }, + { "cmovp", Gv, Ev, XX }, + { "cmovnp", Gv, Ev, XX }, + { "cmovl", Gv, Ev, XX }, + { "cmovge", Gv, Ev, XX }, + { "cmovle", Gv, Ev, XX }, + { "cmovg", Gv, Ev, XX }, + /* 50 */ + { "movmskpX", Gd, XS, XX }, + { PREGRP13 }, + { PREGRP12 }, + { PREGRP11 }, + { "andpX", XM, EX, XX }, + { "andnpX", XM, EX, XX }, + { "orpX", XM, EX, XX }, + { "xorpX", XM, EX, XX }, + /* 58 */ + { PREGRP0 }, + { PREGRP10 }, + { PREGRP17 }, + { PREGRP16 }, + { PREGRP14 }, + { PREGRP7 }, + { PREGRP5 }, + { PREGRP6 }, + /* 60 */ + { "punpcklbw", MX, EM, XX }, + { "punpcklwd", MX, EM, XX }, + { "punpckldq", MX, EM, XX }, + { "packsswb", MX, EM, XX }, + { "pcmpgtb", MX, EM, XX }, + { "pcmpgtw", MX, EM, XX }, + { "pcmpgtd", MX, EM, XX }, + { "packuswb", MX, EM, XX }, + /* 68 */ + { "punpckhbw", MX, EM, XX }, + { "punpckhwd", MX, EM, XX }, + { "punpckhdq", MX, EM, XX }, + { "packssdw", MX, EM, XX }, + { PREGRP26 }, + { PREGRP24 }, + { "movd", MX, Ed, XX }, + { PREGRP19 }, + /* 70 */ + { PREGRP22 }, + { GRP10 }, + { GRP11 }, + { GRP12 }, + { "pcmpeqb", MX, EM, XX }, + { "pcmpeqw", MX, EM, XX }, + { "pcmpeqd", MX, EM, XX }, + { "emms", XX, XX, XX }, + /* 78 */ + { "(bad)", XX, XX, XX }, + { "(bad)", XX, XX, XX }, + { "(bad)", XX, XX, XX }, + { "(bad)", XX, XX, XX }, + { "(bad)", XX, XX, XX }, + { "(bad)", XX, XX, XX }, + { PREGRP23 }, + { PREGRP20 }, + /* 80 */ + { "joH", Jv, XX, cond_jump_flag }, + { "jnoH", Jv, XX, cond_jump_flag }, + { "jbH", Jv, XX, cond_jump_flag }, + { "jaeH", Jv, XX, cond_jump_flag }, + { "jeH", Jv, XX, cond_jump_flag }, + { "jneH", Jv, XX, cond_jump_flag }, + { "jbeH", Jv, XX, cond_jump_flag }, + { "jaH", Jv, XX, cond_jump_flag }, + /* 88 */ + { "jsH", Jv, XX, cond_jump_flag }, + { "jnsH", Jv, XX, cond_jump_flag }, + { "jpH", Jv, XX, cond_jump_flag }, + { "jnpH", Jv, XX, cond_jump_flag }, + { "jlH", Jv, XX, cond_jump_flag }, + { "jgeH", Jv, XX, cond_jump_flag }, + { "jleH", Jv, XX, cond_jump_flag }, + { "jgH", Jv, XX, cond_jump_flag }, + /* 90 */ + { "seto", Eb, XX, XX }, + { "setno", Eb, XX, XX }, + { "setb", Eb, XX, XX }, + { "setae", Eb, XX, XX }, + { "sete", Eb, XX, XX }, + { "setne", Eb, XX, XX }, + { "setbe", Eb, XX, XX }, + { "seta", Eb, XX, XX }, + /* 98 */ + { "sets", Eb, XX, XX }, + { "setns", Eb, XX, XX }, + { "setp", Eb, XX, XX }, + { "setnp", Eb, XX, XX }, + { "setl", Eb, XX, XX }, + { "setge", Eb, XX, XX }, + { "setle", Eb, XX, XX }, + { "setg", Eb, XX, XX }, + /* a0 */ + { "pushT", fs, XX, XX }, + { "popT", fs, XX, XX }, + { "cpuid", XX, XX, XX }, + { "btS", Ev, Gv, XX }, + { "shldS", Ev, Gv, Ib }, + { "shldS", Ev, Gv, CL }, + { "(bad)", XX, XX, XX }, + { "(bad)", XX, XX, XX }, + /* a8 */ + { "pushT", gs, XX, XX }, + { "popT", gs, XX, XX }, + { "rsm", XX, XX, XX }, + { "btsS", Ev, Gv, XX }, + { "shrdS", Ev, Gv, Ib }, + { "shrdS", Ev, Gv, CL }, + { GRP13 }, + { "imulS", Gv, Ev, XX }, + /* b0 */ + { "cmpxchgB", Eb, Gb, XX }, + { "cmpxchgS", Ev, Gv, XX }, + { "lssS", Gv, Mp, XX }, + { "btrS", Ev, Gv, XX }, + { "lfsS", Gv, Mp, XX }, + { "lgsS", Gv, Mp, XX }, + { "movz{bR|x|bR|x}", Gv, Eb, XX }, + { "movz{wR|x|wR|x}", Gv, Ew, XX }, /* yes, there really is movzww ! */ + /* b8 */ + { "(bad)", XX, XX, XX }, + { "ud2b", XX, XX, XX }, + { GRP8 }, + { "btcS", Ev, Gv, XX }, + { "bsfS", Gv, Ev, XX }, + { "bsrS", Gv, Ev, XX }, + { "movs{bR|x|bR|x}", Gv, Eb, XX }, + { "movs{wR|x|wR|x}", Gv, Ew, XX }, /* yes, there really is movsww ! */ + /* c0 */ + { "xaddB", Eb, Gb, XX }, + { "xaddS", Ev, Gv, XX }, + { PREGRP1 }, + { "movntiS", Ev, Gv, XX }, + { "pinsrw", MX, Ed, Ib }, + { "pextrw", Gd, MS, Ib }, + { "shufpX", XM, EX, Ib }, + { GRP9 }, + /* c8 */ + { "bswap", RMeAX, XX, XX }, + { "bswap", RMeCX, XX, XX }, + { "bswap", RMeDX, XX, XX }, + { "bswap", RMeBX, XX, XX }, + { "bswap", RMeSP, XX, XX }, + { "bswap", RMeBP, XX, XX }, + { "bswap", RMeSI, XX, XX }, + { "bswap", RMeDI, XX, XX }, + /* d0 */ + { "(bad)", XX, XX, XX }, + { "psrlw", MX, EM, XX }, + { "psrld", MX, EM, XX }, + { "psrlq", MX, EM, XX }, + { "paddq", MX, EM, XX }, + { "pmullw", MX, EM, XX }, + { PREGRP21 }, + { "pmovmskb", Gd, MS, XX }, + /* d8 */ + { "psubusb", MX, EM, XX }, + { "psubusw", MX, EM, XX }, + { "pminub", MX, EM, XX }, + { "pand", MX, EM, XX }, + { "paddusb", MX, EM, XX }, + { "paddusw", MX, EM, XX }, + { "pmaxub", MX, EM, XX }, + { "pandn", MX, EM, XX }, + /* e0 */ + { "pavgb", MX, EM, XX }, + { "psraw", MX, EM, XX }, + { "psrad", MX, EM, XX }, + { "pavgw", MX, EM, XX }, + { "pmulhuw", MX, EM, XX }, + { "pmulhw", MX, EM, XX }, + { PREGRP15 }, + { PREGRP25 }, + /* e8 */ + { "psubsb", MX, EM, XX }, + { "psubsw", MX, EM, XX }, + { "pminsw", MX, EM, XX }, + { "por", MX, EM, XX }, + { "paddsb", MX, EM, XX }, + { "paddsw", MX, EM, XX }, + { "pmaxsw", MX, EM, XX }, + { "pxor", MX, EM, XX }, + /* f0 */ + { "(bad)", XX, XX, XX }, + { "psllw", MX, EM, XX }, + { "pslld", MX, EM, XX }, + { "psllq", MX, EM, XX }, + { "pmuludq", MX, EM, XX }, + { "pmaddwd", MX, EM, XX }, + { "psadbw", MX, EM, XX }, + { PREGRP18 }, + /* f8 */ + { "psubb", MX, EM, XX }, + { "psubw", MX, EM, XX }, + { "psubd", MX, EM, XX }, + { "psubq", MX, EM, XX }, + { "paddb", MX, EM, XX }, + { "paddw", MX, EM, XX }, + { "paddd", MX, EM, XX }, + { "(bad)", XX, XX, XX } +}; + +static const unsigned char onebyte_has_modrm[256] = { + /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */ + /* ------------------------------- */ + /* 00 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 00 */ + /* 10 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 10 */ + /* 20 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 20 */ + /* 30 */ 1,1,1,1,0,0,0,0,1,1,1,1,0,0,0,0, /* 30 */ + /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 40 */ + /* 50 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 50 */ + /* 60 */ 0,0,1,1,0,0,0,0,0,1,0,1,0,0,0,0, /* 60 */ + /* 70 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 70 */ + /* 80 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 80 */ + /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 90 */ + /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* a0 */ + /* b0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* b0 */ + /* c0 */ 1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0, /* c0 */ + /* d0 */ 1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1, /* d0 */ + /* e0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* e0 */ + /* f0 */ 0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1 /* f0 */ + /* ------------------------------- */ + /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */ +}; + +static const unsigned char twobyte_has_modrm[256] = { + /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */ + /* ------------------------------- */ + /* 00 */ 1,1,1,1,0,0,0,0,0,0,0,0,0,1,0,1, /* 0f */ + /* 10 */ 1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0, /* 1f */ + /* 20 */ 1,1,1,1,1,0,1,0,1,1,1,1,1,1,1,1, /* 2f */ + /* 30 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 3f */ + /* 40 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 4f */ + /* 50 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 5f */ + /* 60 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 6f */ + /* 70 */ 1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1, /* 7f */ + /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */ + /* 90 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* 9f */ + /* a0 */ 0,0,0,1,1,1,0,0,0,0,0,1,1,1,1,1, /* af */ + /* b0 */ 1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1, /* bf */ + /* c0 */ 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0, /* cf */ + /* d0 */ 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* df */ + /* e0 */ 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, /* ef */ + /* f0 */ 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0 /* ff */ + /* ------------------------------- */ + /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */ +}; + +static const unsigned char twobyte_uses_SSE_prefix[256] = { + /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */ + /* ------------------------------- */ + /* 00 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 0f */ + /* 10 */ 1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 1f */ + /* 20 */ 0,0,0,0,0,0,0,0,0,0,1,0,1,1,0,0, /* 2f */ + /* 30 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 3f */ + /* 40 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 4f */ + /* 50 */ 0,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1, /* 5f */ + /* 60 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,1, /* 6f */ + /* 70 */ 1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1, /* 7f */ + /* 80 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 8f */ + /* 90 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* 9f */ + /* a0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* af */ + /* b0 */ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, /* bf */ + /* c0 */ 0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0, /* cf */ + /* d0 */ 0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, /* df */ + /* e0 */ 0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, /* ef */ + /* f0 */ 0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0 /* ff */ + /* ------------------------------- */ + /* 0 1 2 3 4 5 6 7 8 9 a b c d e f */ +}; + +static char obuf[100]; +static char *obufp; +static char scratchbuf[100]; +static unsigned char *start_codep; +static unsigned char *insn_codep; +static unsigned char *codep; +static disassemble_info *the_info; +static int mod; +static int rm; +static int reg; +static unsigned char need_modrm; + +/* If we are accessing mod/rm/reg without need_modrm set, then the + values are stale. Hitting this abort likely indicates that you + need to update onebyte_has_modrm or twobyte_has_modrm. */ +#define MODRM_CHECK if (!need_modrm) abort () + +static const char **names64; +static const char **names32; +static const char **names16; +static const char **names8; +static const char **names8rex; +static const char **names_seg; +static const char **index16; + +static const char *intel_names64[] = { + "rax", "rcx", "rdx", "rbx", "rsp", "rbp", "rsi", "rdi", + "r8", "r9", "r10", "r11", "r12", "r13", "r14", "r15" +}; +static const char *intel_names32[] = { + "eax", "ecx", "edx", "ebx", "esp", "ebp", "esi", "edi", + "r8d", "r9d", "r10d", "r11d", "r12d", "r13d", "r14d", "r15d" +}; +static const char *intel_names16[] = { + "ax", "cx", "dx", "bx", "sp", "bp", "si", "di", + "r8w", "r9w", "r10w", "r11w", "r12w", "r13w", "r14w", "r15w" +}; +static const char *intel_names8[] = { + "al", "cl", "dl", "bl", "ah", "ch", "dh", "bh", +}; +static const char *intel_names8rex[] = { + "al", "cl", "dl", "bl", "spl", "bpl", "sil", "dil", + "r8b", "r9b", "r10b", "r11b", "r12b", "r13b", "r14b", "r15b" +}; +static const char *intel_names_seg[] = { + "es", "cs", "ss", "ds", "fs", "gs", "?", "?", +}; +static const char *intel_index16[] = { + "bx+si", "bx+di", "bp+si", "bp+di", "si", "di", "bp", "bx" +}; + +static const char *att_names64[] = { + "%rax", "%rcx", "%rdx", "%rbx", "%rsp", "%rbp", "%rsi", "%rdi", + "%r8", "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15" +}; +static const char *att_names32[] = { + "%eax", "%ecx", "%edx", "%ebx", "%esp", "%ebp", "%esi", "%edi", + "%r8d", "%r9d", "%r10d", "%r11d", "%r12d", "%r13d", "%r14d", "%r15d" +}; +static const char *att_names16[] = { + "%ax", "%cx", "%dx", "%bx", "%sp", "%bp", "%si", "%di", + "%r8w", "%r9w", "%r10w", "%r11w", "%r12w", "%r13w", "%r14w", "%r15w" +}; +static const char *att_names8[] = { + "%al", "%cl", "%dl", "%bl", "%ah", "%ch", "%dh", "%bh", +}; +static const char *att_names8rex[] = { + "%al", "%cl", "%dl", "%bl", "%spl", "%bpl", "%sil", "%dil", + "%r8b", "%r9b", "%r10b", "%r11b", "%r12b", "%r13b", "%r14b", "%r15b" +}; +static const char *att_names_seg[] = { + "%es", "%cs", "%ss", "%ds", "%fs", "%gs", "%?", "%?", +}; +static const char *att_index16[] = { + "%bx,%si", "%bx,%di", "%bp,%si", "%bp,%di", "%si", "%di", "%bp", "%bx" +}; + +static const struct dis386 grps[][8] = { + /* GRP1b */ + { + { "addA", Eb, Ib, XX }, + { "orA", Eb, Ib, XX }, + { "adcA", Eb, Ib, XX }, + { "sbbA", Eb, Ib, XX }, + { "andA", Eb, Ib, XX }, + { "subA", Eb, Ib, XX }, + { "xorA", Eb, Ib, XX }, + { "cmpA", Eb, Ib, XX } + }, + /* GRP1S */ + { + { "addQ", Ev, Iv, XX }, + { "orQ", Ev, Iv, XX }, + { "adcQ", Ev, Iv, XX }, + { "sbbQ", Ev, Iv, XX }, + { "andQ", Ev, Iv, XX }, + { "subQ", Ev, Iv, XX }, + { "xorQ", Ev, Iv, XX }, + { "cmpQ", Ev, Iv, XX } + }, + /* GRP1Ss */ + { + { "addQ", Ev, sIb, XX }, + { "orQ", Ev, sIb, XX }, + { "adcQ", Ev, sIb, XX }, + { "sbbQ", Ev, sIb, XX }, + { "andQ", Ev, sIb, XX }, + { "subQ", Ev, sIb, XX }, + { "xorQ", Ev, sIb, XX }, + { "cmpQ", Ev, sIb, XX } + }, + /* GRP2b */ + { + { "rolA", Eb, Ib, XX }, + { "rorA", Eb, Ib, XX }, + { "rclA", Eb, Ib, XX }, + { "rcrA", Eb, Ib, XX }, + { "shlA", Eb, Ib, XX }, + { "shrA", Eb, Ib, XX }, + { "(bad)", XX, XX, XX }, + { "sarA", Eb, Ib, XX }, + }, + /* GRP2S */ + { + { "rolQ", Ev, Ib, XX }, + { "rorQ", Ev, Ib, XX }, + { "rclQ", Ev, Ib, XX }, + { "rcrQ", Ev, Ib, XX }, + { "shlQ", Ev, Ib, XX }, + { "shrQ", Ev, Ib, XX }, + { "(bad)", XX, XX, XX }, + { "sarQ", Ev, Ib, XX }, + }, + /* GRP2b_one */ + { + { "rolA", Eb, XX, XX }, + { "rorA", Eb, XX, XX }, + { "rclA", Eb, XX, XX }, + { "rcrA", Eb, XX, XX }, + { "shlA", Eb, XX, XX }, + { "shrA", Eb, XX, XX }, + { "(bad)", XX, XX, XX }, + { "sarA", Eb, XX, XX }, + }, + /* GRP2S_one */ + { + { "rolQ", Ev, XX, XX }, + { "rorQ", Ev, XX, XX }, + { "rclQ", Ev, XX, XX }, + { "rcrQ", Ev, XX, XX }, + { "shlQ", Ev, XX, XX }, + { "shrQ", Ev, XX, XX }, + { "(bad)", XX, XX, XX}, + { "sarQ", Ev, XX, XX }, + }, + /* GRP2b_cl */ + { + { "rolA", Eb, CL, XX }, + { "rorA", Eb, CL, XX }, + { "rclA", Eb, CL, XX }, + { "rcrA", Eb, CL, XX }, + { "shlA", Eb, CL, XX }, + { "shrA", Eb, CL, XX }, + { "(bad)", XX, XX, XX }, + { "sarA", Eb, CL, XX }, + }, + /* GRP2S_cl */ + { + { "rolQ", Ev, CL, XX }, + { "rorQ", Ev, CL, XX }, + { "rclQ", Ev, CL, XX }, + { "rcrQ", Ev, CL, XX }, + { "shlQ", Ev, CL, XX }, + { "shrQ", Ev, CL, XX }, + { "(bad)", XX, XX, XX }, + { "sarQ", Ev, CL, XX } + }, + /* GRP3b */ + { + { "testA", Eb, Ib, XX }, + { "(bad)", Eb, XX, XX }, + { "notA", Eb, XX, XX }, + { "negA", Eb, XX, XX }, + { "mulA", Eb, XX, XX }, /* Don't print the implicit %al register, */ + { "imulA", Eb, XX, XX }, /* to distinguish these opcodes from other */ + { "divA", Eb, XX, XX }, /* mul/imul opcodes. Do the same for div */ + { "idivA", Eb, XX, XX } /* and idiv for consistency. */ + }, + /* GRP3S */ + { + { "testQ", Ev, Iv, XX }, + { "(bad)", XX, XX, XX }, + { "notQ", Ev, XX, XX }, + { "negQ", Ev, XX, XX }, + { "mulQ", Ev, XX, XX }, /* Don't print the implicit register. */ + { "imulQ", Ev, XX, XX }, + { "divQ", Ev, XX, XX }, + { "idivQ", Ev, XX, XX }, + }, + /* GRP4 */ + { + { "incA", Eb, XX, XX }, + { "decA", Eb, XX, XX }, + { "(bad)", XX, XX, XX }, + { "(bad)", XX, XX, XX }, + { "(bad)", XX, XX, XX }, + { "(bad)", XX, XX, XX }, + { "(bad)", XX, XX, XX }, + { "(bad)", XX, XX, XX }, + }, + /* GRP5 */ + { + { "incQ", Ev, XX, XX }, + { "decQ", Ev, XX, XX }, + { "callT", indirEv, XX, XX }, + { "lcallT", indirEv, XX, XX }, + { "jmpT", indirEv, XX, XX }, + { "ljmpT", indirEv, XX, XX }, + { "pushU", Ev, XX, XX }, + { "(bad)", XX, XX, XX }, + }, + /* GRP6 */ + { + { "sldtQ", Ev, XX, XX }, + { "strQ", Ev, XX, XX }, + { "lldt", Ew, XX, XX }, + { "ltr", Ew, XX, XX }, + { "verr", Ew, XX, XX }, + { "verw", Ew, XX, XX }, + { "(bad)", XX, XX, XX }, + { "(bad)", XX, XX, XX } + }, + /* GRP7 */ + { + { "sgdtQ", M, XX, XX }, + { "sidtQ", M, XX, XX }, + { "lgdtQ", M, XX, XX }, + { "lidtQ", M, XX, XX }, + { "smswQ", Ev, XX, XX }, + { "(bad)", XX, XX, XX }, + { "lmsw", Ew, XX, XX }, + { "invlpg", Ew, XX, XX }, + }, + /* GRP8 */ + { + { "(bad)", XX, XX, XX }, + { "(bad)", XX, XX, XX }, + { "(bad)", XX, XX, XX }, + { "(bad)", XX, XX, XX }, + { "btQ", Ev, Ib, XX }, + { "btsQ", Ev, Ib, XX }, + { "btrQ", Ev, Ib, XX }, + { "btcQ", Ev, Ib, XX }, + }, + /* GRP9 */ + { + { "(bad)", XX, XX, XX }, + { "cmpxchg8b", Ev, XX, XX }, + { "(bad)", XX, XX, XX }, + { "(bad)", XX, XX, XX }, + { "(bad)", XX, XX, XX }, + { "(bad)", XX, XX, XX }, + { "(bad)", XX, XX, XX }, + { "(bad)", XX, XX, XX }, + }, + /* GRP10 */ + { + { "(bad)", XX, XX, XX }, + { "(bad)", XX, XX, XX }, + { "psrlw", MS, Ib, XX }, + { "(bad)", XX, XX, XX }, + { "psraw", MS, Ib, XX }, + { "(bad)", XX, XX, XX }, + { "psllw", MS, Ib, XX }, + { "(bad)", XX, XX, XX }, + }, + /* GRP11 */ + { + { "(bad)", XX, XX, XX }, + { "(bad)", XX, XX, XX }, + { "psrld", MS, Ib, XX }, + { "(bad)", XX, XX, XX }, + { "psrad", MS, Ib, XX }, + { "(bad)", XX, XX, XX }, + { "pslld", MS, Ib, XX }, + { "(bad)", XX, XX, XX }, + }, + /* GRP12 */ + { + { "(bad)", XX, XX, XX }, + { "(bad)", XX, XX, XX }, + { "psrlq", MS, Ib, XX }, + { "psrldq", MS, Ib, XX }, + { "(bad)", XX, XX, XX }, + { "(bad)", XX, XX, XX }, + { "psllq", MS, Ib, XX }, + { "pslldq", MS, Ib, XX }, + }, + /* GRP13 */ + { + { "fxsave", Ev, XX, XX }, + { "fxrstor", Ev, XX, XX }, + { "ldmxcsr", Ev, XX, XX }, + { "stmxcsr", Ev, XX, XX }, + { "(bad)", XX, XX, XX }, + { "lfence", None, XX, XX }, + { "mfence", None, XX, XX }, + { "sfence", None, XX, XX }, + /* FIXME: the sfence with memory operand is clflush! */ + }, + /* GRP14 */ + { + { "prefetchnta", Ev, XX, XX }, + { "prefetcht0", Ev, XX, XX }, + { "prefetcht1", Ev, XX, XX }, + { "prefetcht2", Ev, XX, XX }, + { "(bad)", XX, XX, XX }, + { "(bad)", XX, XX, XX }, + { "(bad)", XX, XX, XX }, + { "(bad)", XX, XX, XX }, + }, + /* GRPAMD */ + { + { "prefetch", Eb, XX, XX }, + { "prefetchw", Eb, XX, XX }, + { "(bad)", XX, XX, XX }, + { "(bad)", XX, XX, XX }, + { "(bad)", XX, XX, XX }, + { "(bad)", XX, XX, XX }, + { "(bad)", XX, XX, XX }, + { "(bad)", XX, XX, XX }, + } +}; + +static const struct dis386 prefix_user_table[][4] = { + /* PREGRP0 */ + { + { "addps", XM, EX, XX }, + { "addss", XM, EX, XX }, + { "addpd", XM, EX, XX }, + { "addsd", XM, EX, XX }, + }, + /* PREGRP1 */ + { + { "", XM, EX, OPSIMD }, /* See OP_SIMD_SUFFIX. */ + { "", XM, EX, OPSIMD }, + { "", XM, EX, OPSIMD }, + { "", XM, EX, OPSIMD }, + }, + /* PREGRP2 */ + { + { "cvtpi2ps", XM, EM, XX }, + { "cvtsi2ssY", XM, Ev, XX }, + { "cvtpi2pd", XM, EM, XX }, + { "cvtsi2sdY", XM, Ev, XX }, + }, + /* PREGRP3 */ + { + { "cvtps2pi", MX, EX, XX }, + { "cvtss2siY", Gv, EX, XX }, + { "cvtpd2pi", MX, EX, XX }, + { "cvtsd2siY", Gv, EX, XX }, + }, + /* PREGRP4 */ + { + { "cvttps2pi", MX, EX, XX }, + { "cvttss2siY", Gv, EX, XX }, + { "cvttpd2pi", MX, EX, XX }, + { "cvttsd2siY", Gv, EX, XX }, + }, + /* PREGRP5 */ + { + { "divps", XM, EX, XX }, + { "divss", XM, EX, XX }, + { "divpd", XM, EX, XX }, + { "divsd", XM, EX, XX }, + }, + /* PREGRP6 */ + { + { "maxps", XM, EX, XX }, + { "maxss", XM, EX, XX }, + { "maxpd", XM, EX, XX }, + { "maxsd", XM, EX, XX }, + }, + /* PREGRP7 */ + { + { "minps", XM, EX, XX }, + { "minss", XM, EX, XX }, + { "minpd", XM, EX, XX }, + { "minsd", XM, EX, XX }, + }, + /* PREGRP8 */ + { + { "movups", XM, EX, XX }, + { "movss", XM, EX, XX }, + { "movupd", XM, EX, XX }, + { "movsd", XM, EX, XX }, + }, + /* PREGRP9 */ + { + { "movups", EX, XM, XX }, + { "movss", EX, XM, XX }, + { "movupd", EX, XM, XX }, + { "movsd", EX, XM, XX }, + }, + /* PREGRP10 */ + { + { "mulps", XM, EX, XX }, + { "mulss", XM, EX, XX }, + { "mulpd", XM, EX, XX }, + { "mulsd", XM, EX, XX }, + }, + /* PREGRP11 */ + { + { "rcpps", XM, EX, XX }, + { "rcpss", XM, EX, XX }, + { "(bad)", XM, EX, XX }, + { "(bad)", XM, EX, XX }, + }, + /* PREGRP12 */ + { + { "rsqrtps", XM, EX, XX }, + { "rsqrtss", XM, EX, XX }, + { "(bad)", XM, EX, XX }, + { "(bad)", XM, EX, XX }, + }, + /* PREGRP13 */ + { + { "sqrtps", XM, EX, XX }, + { "sqrtss", XM, EX, XX }, + { "sqrtpd", XM, EX, XX }, + { "sqrtsd", XM, EX, XX }, + }, + /* PREGRP14 */ + { + { "subps", XM, EX, XX }, + { "subss", XM, EX, XX }, + { "subpd", XM, EX, XX }, + { "subsd", XM, EX, XX }, + }, + /* PREGRP15 */ + { + { "(bad)", XM, EX, XX }, + { "cvtdq2pd", XM, EX, XX }, + { "cvttpd2dq", XM, EX, XX }, + { "cvtpd2dq", XM, EX, XX }, + }, + /* PREGRP16 */ + { + { "cvtdq2ps", XM, EX, XX }, + { "cvttps2dq",XM, EX, XX }, + { "cvtps2dq",XM, EX, XX }, + { "(bad)", XM, EX, XX }, + }, + /* PREGRP17 */ + { + { "cvtps2pd", XM, EX, XX }, + { "cvtss2sd", XM, EX, XX }, + { "cvtpd2ps", XM, EX, XX }, + { "cvtsd2ss", XM, EX, XX }, + }, + /* PREGRP18 */ + { + { "maskmovq", MX, MS, XX }, + { "(bad)", XM, EX, XX }, + { "maskmovdqu", XM, EX, XX }, + { "(bad)", XM, EX, XX }, + }, + /* PREGRP19 */ + { + { "movq", MX, EM, XX }, + { "movdqu", XM, EX, XX }, + { "movdqa", XM, EX, XX }, + { "(bad)", XM, EX, XX }, + }, + /* PREGRP20 */ + { + { "movq", EM, MX, XX }, + { "movdqu", EX, XM, XX }, + { "movdqa", EX, XM, XX }, + { "(bad)", EX, XM, XX }, + }, + /* PREGRP21 */ + { + { "(bad)", EX, XM, XX }, + { "movq2dq", XM, MS, XX }, + { "movq", EX, XM, XX }, + { "movdq2q", MX, XS, XX }, + }, + /* PREGRP22 */ + { + { "pshufw", MX, EM, Ib }, + { "pshufhw", XM, EX, Ib }, + { "pshufd", XM, EX, Ib }, + { "pshuflw", XM, EX, Ib }, + }, + /* PREGRP23 */ + { + { "movd", Ed, MX, XX }, + { "movq", XM, EX, XX }, + { "movd", Ed, XM, XX }, + { "(bad)", Ed, XM, XX }, + }, + /* PREGRP24 */ + { + { "(bad)", MX, EX, XX }, + { "(bad)", XM, EX, XX }, + { "punpckhqdq", XM, EX, XX }, + { "(bad)", XM, EX, XX }, + }, + /* PREGRP25 */ + { + { "movntq", Ev, MX, XX }, + { "(bad)", Ev, XM, XX }, + { "movntdq", Ev, XM, XX }, + { "(bad)", Ev, XM, XX }, + }, + /* PREGRP26 */ + { + { "(bad)", MX, EX, XX }, + { "(bad)", XM, EX, XX }, + { "punpcklqdq", XM, EX, XX }, + { "(bad)", XM, EX, XX }, + }, +}; + +static const struct dis386 x86_64_table[][2] = { + { + { "arpl", Ew, Gw, XX }, + { "movs{||lq|xd}", Gv, Ed, XX }, + }, +}; + +#define INTERNAL_DISASSEMBLER_ERROR _("") + +static void +ckprefix () +{ + int newrex; + rex = 0; + prefixes = 0; + used_prefixes = 0; + rex_used = 0; + while (1) + { + FETCH_DATA (the_info, codep + 1); + newrex = 0; + switch (*codep) + { + /* REX prefixes family. */ + case 0x40: + case 0x41: + case 0x42: + case 0x43: + case 0x44: + case 0x45: + case 0x46: + case 0x47: + case 0x48: + case 0x49: + case 0x4a: + case 0x4b: + case 0x4c: + case 0x4d: + case 0x4e: + case 0x4f: + if (mode_64bit) + newrex = *codep; + else + return; + break; + case 0xf3: + prefixes |= PREFIX_REPZ; + break; + case 0xf2: + prefixes |= PREFIX_REPNZ; + break; + case 0xf0: + prefixes |= PREFIX_LOCK; + break; + case 0x2e: + prefixes |= PREFIX_CS; + break; + case 0x36: + prefixes |= PREFIX_SS; + break; + case 0x3e: + prefixes |= PREFIX_DS; + break; + case 0x26: + prefixes |= PREFIX_ES; + break; + case 0x64: + prefixes |= PREFIX_FS; + break; + case 0x65: + prefixes |= PREFIX_GS; + break; + case 0x66: + prefixes |= PREFIX_DATA; + break; + case 0x67: + prefixes |= PREFIX_ADDR; + break; + case FWAIT_OPCODE: + /* fwait is really an instruction. If there are prefixes + before the fwait, they belong to the fwait, *not* to the + following instruction. */ + if (prefixes) + { + prefixes |= PREFIX_FWAIT; + codep++; + return; + } + prefixes = PREFIX_FWAIT; + break; + default: + return; + } + /* Rex is ignored when followed by another prefix. */ + if (rex) + { + oappend (prefix_name (rex, 0)); + oappend (" "); + } + rex = newrex; + codep++; + } +} + +/* Return the name of the prefix byte PREF, or NULL if PREF is not a + prefix byte. */ + +static const char * +prefix_name (pref, sizeflag) + int pref; + int sizeflag; +{ + switch (pref) + { + /* REX prefixes family. */ + case 0x40: + return "rex"; + case 0x41: + return "rexZ"; + case 0x42: + return "rexY"; + case 0x43: + return "rexYZ"; + case 0x44: + return "rexX"; + case 0x45: + return "rexXZ"; + case 0x46: + return "rexXY"; + case 0x47: + return "rexXYZ"; + case 0x48: + return "rex64"; + case 0x49: + return "rex64Z"; + case 0x4a: + return "rex64Y"; + case 0x4b: + return "rex64YZ"; + case 0x4c: + return "rex64X"; + case 0x4d: + return "rex64XZ"; + case 0x4e: + return "rex64XY"; + case 0x4f: + return "rex64XYZ"; + case 0xf3: + return "repz"; + case 0xf2: + return "repnz"; + case 0xf0: + return "lock"; + case 0x2e: + return "cs"; + case 0x36: + return "ss"; + case 0x3e: + return "ds"; + case 0x26: + return "es"; + case 0x64: + return "fs"; + case 0x65: + return "gs"; + case 0x66: + return (sizeflag & DFLAG) ? "data16" : "data32"; + case 0x67: + if (mode_64bit) + return (sizeflag & AFLAG) ? "addr32" : "addr64"; + else + return ((sizeflag & AFLAG) && !mode_64bit) ? "addr16" : "addr32"; + case FWAIT_OPCODE: + return "fwait"; + default: + return NULL; + } +} + +static char op1out[100], op2out[100], op3out[100]; +static int op_ad, op_index[3]; +static bfd_vma op_address[3]; +static bfd_vma op_riprel[3]; +static bfd_vma start_pc; + +/* + * On the 386's of 1988, the maximum length of an instruction is 15 bytes. + * (see topic "Redundant prefixes" in the "Differences from 8086" + * section of the "Virtual 8086 Mode" chapter.) + * 'pc' should be the address of this instruction, it will + * be used to print the target address if this is a relative jump or call + * The function returns the length of this instruction in bytes. + */ + +static char intel_syntax; +static char open_char; +static char close_char; +static char separator_char; +static char scale_char; + +/* Here for backwards compatibility. When gdb stops using + print_insn_i386_att and print_insn_i386_intel these functions can + disappear, and print_insn_i386 be merged into print_insn. */ +int +print_insn_i386_att (pc, info) + bfd_vma pc; + disassemble_info *info; +{ + intel_syntax = 0; + + return print_insn (pc, info); +} + +int +print_insn_i386_intel (pc, info) + bfd_vma pc; + disassemble_info *info; +{ + intel_syntax = 1; + + return print_insn (pc, info); +} + +int +print_insn_i386 (pc, info) + bfd_vma pc; + disassemble_info *info; +{ + intel_syntax = -1; + + return print_insn (pc, info); +} + +static int +print_insn (pc, info) + bfd_vma pc; + disassemble_info *info; +{ + const struct dis386 *dp; + int i; + int two_source_ops; + char *first, *second, *third; + int needcomma; + unsigned char uses_SSE_prefix; + int sizeflag; + /*const char *p;*/ + struct dis_private priv; + + mode_64bit = (info->mach == bfd_mach_x86_64_intel_syntax + || info->mach == bfd_mach_x86_64); + + if (intel_syntax == -1) + intel_syntax = (info->mach == bfd_mach_i386_i386_intel_syntax + || info->mach == bfd_mach_x86_64_intel_syntax); + + if (info->mach == bfd_mach_i386_i386 + || info->mach == bfd_mach_x86_64 + || info->mach == bfd_mach_i386_i386_intel_syntax + || info->mach == bfd_mach_x86_64_intel_syntax) + priv.orig_sizeflag = AFLAG | DFLAG; + else if (info->mach == bfd_mach_i386_i8086) + priv.orig_sizeflag = 0; + else + abort (); + +#if 0 + for (p = info->disassembler_options; p != NULL; ) + { + if (strncmp (p, "x86-64", 6) == 0) + { + mode_64bit = 1; + priv.orig_sizeflag = AFLAG | DFLAG; + } + else if (strncmp (p, "i386", 4) == 0) + { + mode_64bit = 0; + priv.orig_sizeflag = AFLAG | DFLAG; + } + else if (strncmp (p, "i8086", 5) == 0) + { + mode_64bit = 0; + priv.orig_sizeflag = 0; + } + else if (strncmp (p, "intel", 5) == 0) + { + intel_syntax = 1; + } + else if (strncmp (p, "att", 3) == 0) + { + intel_syntax = 0; + } + else if (strncmp (p, "addr", 4) == 0) + { + if (p[4] == '1' && p[5] == '6') + priv.orig_sizeflag &= ~AFLAG; + else if (p[4] == '3' && p[5] == '2') + priv.orig_sizeflag |= AFLAG; + } + else if (strncmp (p, "data", 4) == 0) + { + if (p[4] == '1' && p[5] == '6') + priv.orig_sizeflag &= ~DFLAG; + else if (p[4] == '3' && p[5] == '2') + priv.orig_sizeflag |= DFLAG; + } + else if (strncmp (p, "suffix", 6) == 0) + priv.orig_sizeflag |= SUFFIX_ALWAYS; + + p = strchr (p, ','); + if (p != NULL) + p++; + } +#else + mode_64bit = 0; + priv.orig_sizeflag = AFLAG | DFLAG; + /*intel_syntax = 0;*/ +#endif + + if (intel_syntax) + { + names64 = intel_names64; + names32 = intel_names32; + names16 = intel_names16; + names8 = intel_names8; + names8rex = intel_names8rex; + names_seg = intel_names_seg; + index16 = intel_index16; + open_char = '['; + close_char = ']'; + separator_char = '+'; + scale_char = '*'; + } + else + { + names64 = att_names64; + names32 = att_names32; + names16 = att_names16; + names8 = att_names8; + names8rex = att_names8rex; + names_seg = att_names_seg; + index16 = att_index16; + open_char = '('; + close_char = ')'; + separator_char = ','; + scale_char = ','; + } + + /* The output looks better if we put 7 bytes on a line, since that + puts most long word instructions on a single line. */ + info->bytes_per_line = 7; + + info->private_data = (PTR) &priv; + priv.max_fetched = priv.the_buffer; + priv.insn_start = pc; + + obuf[0] = 0; + op1out[0] = 0; + op2out[0] = 0; + op3out[0] = 0; + + op_index[0] = op_index[1] = op_index[2] = -1; + + the_info = info; + start_pc = pc; + start_codep = priv.the_buffer; + codep = priv.the_buffer; + + if (_setjmp (priv.bailout) != 0) + { + const char *name; + + /* Getting here means we tried for data but didn't get it. That + means we have an incomplete instruction of some sort. Just + print the first byte as a prefix or a .byte pseudo-op. */ + if (codep > priv.the_buffer) + { + name = prefix_name (priv.the_buffer[0], priv.orig_sizeflag); + if (name != NULL) + (*info->fprintf_func) (info->stream, "%s", name); + else + { + /* Just print the first byte as a .byte instruction. */ + (*info->fprintf_func) (info->stream, ".byte 0x%x", + (unsigned int) priv.the_buffer[0]); + } + + return 1; + } + + return -1; + } + + obufp = obuf; + ckprefix (); + + insn_codep = codep; + sizeflag = priv.orig_sizeflag; + + FETCH_DATA (info, codep + 1); + two_source_ops = (*codep == 0x62) || (*codep == 0xc8); + + if ((prefixes & PREFIX_FWAIT) + && ((*codep < 0xd8) || (*codep > 0xdf))) + { + const char *name; + + /* fwait not followed by floating point instruction. Print the + first prefix, which is probably fwait itself. */ + name = prefix_name (priv.the_buffer[0], priv.orig_sizeflag); + if (name == NULL) + name = INTERNAL_DISASSEMBLER_ERROR; + (*info->fprintf_func) (info->stream, "%s", name); + return 1; + } + + if (*codep == 0x0f) + { + FETCH_DATA (info, codep + 2); + dp = &dis386_twobyte[*++codep]; + need_modrm = twobyte_has_modrm[*codep]; + uses_SSE_prefix = twobyte_uses_SSE_prefix[*codep]; + } + else + { + dp = &dis386[*codep]; + need_modrm = onebyte_has_modrm[*codep]; + uses_SSE_prefix = 0; + } + codep++; + + if (!uses_SSE_prefix && (prefixes & PREFIX_REPZ)) + { + oappend ("repz "); + used_prefixes |= PREFIX_REPZ; + } + if (!uses_SSE_prefix && (prefixes & PREFIX_REPNZ)) + { + oappend ("repnz "); + used_prefixes |= PREFIX_REPNZ; + } + if (prefixes & PREFIX_LOCK) + { + oappend ("lock "); + used_prefixes |= PREFIX_LOCK; + } + + if (prefixes & PREFIX_ADDR) + { + sizeflag ^= AFLAG; + if (dp->bytemode3 != loop_jcxz_mode || intel_syntax) + { + if ((sizeflag & AFLAG) || mode_64bit) + oappend ("addr32 "); + else + oappend ("addr16 "); + used_prefixes |= PREFIX_ADDR; + } + } + + if (!uses_SSE_prefix && (prefixes & PREFIX_DATA)) + { + sizeflag ^= DFLAG; + if (dp->bytemode3 == cond_jump_mode + && dp->bytemode1 == v_mode + && !intel_syntax) + { + if (sizeflag & DFLAG) + oappend ("data32 "); + else + oappend ("data16 "); + used_prefixes |= PREFIX_DATA; + } + } + + if (need_modrm) + { + FETCH_DATA (info, codep + 1); + mod = (*codep >> 6) & 3; + reg = (*codep >> 3) & 7; + rm = *codep & 7; + } + + if (dp->name == NULL && dp->bytemode1 == FLOATCODE) + { + dofloat (sizeflag); + } + else + { + int index; + if (dp->name == NULL) + { + switch (dp->bytemode1) + { + case USE_GROUPS: + dp = &grps[dp->bytemode2][reg]; + break; + + case USE_PREFIX_USER_TABLE: + index = 0; + used_prefixes |= (prefixes & PREFIX_REPZ); + if (prefixes & PREFIX_REPZ) + index = 1; + else + { + used_prefixes |= (prefixes & PREFIX_DATA); + if (prefixes & PREFIX_DATA) + index = 2; + else + { + used_prefixes |= (prefixes & PREFIX_REPNZ); + if (prefixes & PREFIX_REPNZ) + index = 3; + } + } + dp = &prefix_user_table[dp->bytemode2][index]; + break; + + case X86_64_SPECIAL: + dp = &x86_64_table[dp->bytemode2][mode_64bit]; + break; + + default: + oappend (INTERNAL_DISASSEMBLER_ERROR); + break; + } + } + + if (putop (dp->name, sizeflag) == 0) + { + obufp = op1out; + op_ad = 2; + if (dp->op1) + (*dp->op1) (dp->bytemode1, sizeflag); + + obufp = op2out; + op_ad = 1; + if (dp->op2) + (*dp->op2) (dp->bytemode2, sizeflag); + + obufp = op3out; + op_ad = 0; + if (dp->op3) + (*dp->op3) (dp->bytemode3, sizeflag); + } + } + + /* See if any prefixes were not used. If so, print the first one + separately. If we don't do this, we'll wind up printing an + instruction stream which does not precisely correspond to the + bytes we are disassembling. */ + if ((prefixes & ~used_prefixes) != 0) + { + const char *name; + + name = prefix_name (priv.the_buffer[0], priv.orig_sizeflag); + if (name == NULL) + name = INTERNAL_DISASSEMBLER_ERROR; + (*info->fprintf_func) (info->stream, "%s", name); + return 1; + } + if (rex & ~rex_used) + { + const char *name; + name = prefix_name (rex | 0x40, priv.orig_sizeflag); + if (name == NULL) + name = INTERNAL_DISASSEMBLER_ERROR; + (*info->fprintf_func) (info->stream, "%s ", name); + } + + obufp = obuf + strlen (obuf); + for (i = strlen (obuf); i < 6; i++) + oappend (" "); + oappend (" "); + (*info->fprintf_func) (info->stream, "%s", obuf); + + /* The enter and bound instructions are printed with operands in the same + order as the intel book; everything else is printed in reverse order. */ + if (intel_syntax || two_source_ops) + { + first = op1out; + second = op2out; + third = op3out; + op_ad = op_index[0]; + op_index[0] = op_index[2]; + op_index[2] = op_ad; + } + else + { + first = op3out; + second = op2out; + third = op1out; + } + needcomma = 0; + if (*first) + { + if (op_index[0] != -1 && !op_riprel[0]) + (*info->print_address_func) ((bfd_vma) op_address[op_index[0]], info); + else + (*info->fprintf_func) (info->stream, "%s", first); + needcomma = 1; + } + if (*second) + { + if (needcomma) + (*info->fprintf_func) (info->stream, ","); + if (op_index[1] != -1 && !op_riprel[1]) + (*info->print_address_func) ((bfd_vma) op_address[op_index[1]], info); + else + (*info->fprintf_func) (info->stream, "%s", second); + needcomma = 1; + } + if (*third) + { + if (needcomma) + (*info->fprintf_func) (info->stream, ","); + if (op_index[2] != -1 && !op_riprel[2]) + (*info->print_address_func) ((bfd_vma) op_address[op_index[2]], info); + else + (*info->fprintf_func) (info->stream, "%s", third); + } + for (i = 0; i < 3; i++) + if (op_index[i] != -1 && op_riprel[i]) + { + (*info->fprintf_func) (info->stream, " # "); + (*info->print_address_func) ((bfd_vma) (start_pc + codep - start_codep + + op_address[op_index[i]]), info); + } + return codep - priv.the_buffer; +} + +static const char *float_mem[] = { + /* d8 */ + "fadd{s||s|}", + "fmul{s||s|}", + "fcom{s||s|}", + "fcomp{s||s|}", + "fsub{s||s|}", + "fsubr{s||s|}", + "fdiv{s||s|}", + "fdivr{s||s|}", + /* d9 */ + "fld{s||s|}", + "(bad)", + "fst{s||s|}", + "fstp{s||s|}", + "fldenv", + "fldcw", + "fNstenv", + "fNstcw", + /* da */ + "fiadd{l||l|}", + "fimul{l||l|}", + "ficom{l||l|}", + "ficomp{l||l|}", + "fisub{l||l|}", + "fisubr{l||l|}", + "fidiv{l||l|}", + "fidivr{l||l|}", + /* db */ + "fild{l||l|}", + "(bad)", + "fist{l||l|}", + "fistp{l||l|}", + "(bad)", + "fld{t||t|}", + "(bad)", + "fstp{t||t|}", + /* dc */ + "fadd{l||l|}", + "fmul{l||l|}", + "fcom{l||l|}", + "fcomp{l||l|}", + "fsub{l||l|}", + "fsubr{l||l|}", + "fdiv{l||l|}", + "fdivr{l||l|}", + /* dd */ + "fld{l||l|}", + "(bad)", + "fst{l||l|}", + "fstp{l||l|}", + "frstor", + "(bad)", + "fNsave", + "fNstsw", + /* de */ + "fiadd", + "fimul", + "ficom", + "ficomp", + "fisub", + "fisubr", + "fidiv", + "fidivr", + /* df */ + "fild", + "(bad)", + "fist", + "fistp", + "fbld", + "fild{ll||ll|}", + "fbstp", + "fistpll", +}; + +#define ST OP_ST, 0 +#define STi OP_STi, 0 + +#define FGRPd9_2 NULL, NULL, 0, NULL, 0, NULL, 0 +#define FGRPd9_4 NULL, NULL, 1, NULL, 0, NULL, 0 +#define FGRPd9_5 NULL, NULL, 2, NULL, 0, NULL, 0 +#define FGRPd9_6 NULL, NULL, 3, NULL, 0, NULL, 0 +#define FGRPd9_7 NULL, NULL, 4, NULL, 0, NULL, 0 +#define FGRPda_5 NULL, NULL, 5, NULL, 0, NULL, 0 +#define FGRPdb_4 NULL, NULL, 6, NULL, 0, NULL, 0 +#define FGRPde_3 NULL, NULL, 7, NULL, 0, NULL, 0 +#define FGRPdf_4 NULL, NULL, 8, NULL, 0, NULL, 0 + +static const struct dis386 float_reg[][8] = { + /* d8 */ + { + { "fadd", ST, STi, XX }, + { "fmul", ST, STi, XX }, + { "fcom", STi, XX, XX }, + { "fcomp", STi, XX, XX }, + { "fsub", ST, STi, XX }, + { "fsubr", ST, STi, XX }, + { "fdiv", ST, STi, XX }, + { "fdivr", ST, STi, XX }, + }, + /* d9 */ + { + { "fld", STi, XX, XX }, + { "fxch", STi, XX, XX }, + { FGRPd9_2 }, + { "(bad)", XX, XX, XX }, + { FGRPd9_4 }, + { FGRPd9_5 }, + { FGRPd9_6 }, + { FGRPd9_7 }, + }, + /* da */ + { + { "fcmovb", ST, STi, XX }, + { "fcmove", ST, STi, XX }, + { "fcmovbe",ST, STi, XX }, + { "fcmovu", ST, STi, XX }, + { "(bad)", XX, XX, XX }, + { FGRPda_5 }, + { "(bad)", XX, XX, XX }, + { "(bad)", XX, XX, XX }, + }, + /* db */ + { + { "fcmovnb",ST, STi, XX }, + { "fcmovne",ST, STi, XX }, + { "fcmovnbe",ST, STi, XX }, + { "fcmovnu",ST, STi, XX }, + { FGRPdb_4 }, + { "fucomi", ST, STi, XX }, + { "fcomi", ST, STi, XX }, + { "(bad)", XX, XX, XX }, + }, + /* dc */ + { + { "fadd", STi, ST, XX }, + { "fmul", STi, ST, XX }, + { "(bad)", XX, XX, XX }, + { "(bad)", XX, XX, XX }, +#if UNIXWARE_COMPAT + { "fsub", STi, ST, XX }, + { "fsubr", STi, ST, XX }, + { "fdiv", STi, ST, XX }, + { "fdivr", STi, ST, XX }, +#else + { "fsubr", STi, ST, XX }, + { "fsub", STi, ST, XX }, + { "fdivr", STi, ST, XX }, + { "fdiv", STi, ST, XX }, +#endif + }, + /* dd */ + { + { "ffree", STi, XX, XX }, + { "(bad)", XX, XX, XX }, + { "fst", STi, XX, XX }, + { "fstp", STi, XX, XX }, + { "fucom", STi, XX, XX }, + { "fucomp", STi, XX, XX }, + { "(bad)", XX, XX, XX }, + { "(bad)", XX, XX, XX }, + }, + /* de */ + { + { "faddp", STi, ST, XX }, + { "fmulp", STi, ST, XX }, + { "(bad)", XX, XX, XX }, + { FGRPde_3 }, +#if UNIXWARE_COMPAT + { "fsubp", STi, ST, XX }, + { "fsubrp", STi, ST, XX }, + { "fdivp", STi, ST, XX }, + { "fdivrp", STi, ST, XX }, +#else + { "fsubrp", STi, ST, XX }, + { "fsubp", STi, ST, XX }, + { "fdivrp", STi, ST, XX }, + { "fdivp", STi, ST, XX }, +#endif + }, + /* df */ + { + { "ffreep", STi, XX, XX }, + { "(bad)", XX, XX, XX }, + { "(bad)", XX, XX, XX }, + { "(bad)", XX, XX, XX }, + { FGRPdf_4 }, + { "fucomip",ST, STi, XX }, + { "fcomip", ST, STi, XX }, + { "(bad)", XX, XX, XX }, + }, +}; + +static char *fgrps[][8] = { + /* d9_2 0 */ + { + "fnop","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)", + }, + + /* d9_4 1 */ + { + "fchs","fabs","(bad)","(bad)","ftst","fxam","(bad)","(bad)", + }, + + /* d9_5 2 */ + { + "fld1","fldl2t","fldl2e","fldpi","fldlg2","fldln2","fldz","(bad)", + }, + + /* d9_6 3 */ + { + "f2xm1","fyl2x","fptan","fpatan","fxtract","fprem1","fdecstp","fincstp", + }, + + /* d9_7 4 */ + { + "fprem","fyl2xp1","fsqrt","fsincos","frndint","fscale","fsin","fcos", + }, + + /* da_5 5 */ + { + "(bad)","fucompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)", + }, + + /* db_4 6 */ + { + "feni(287 only)","fdisi(287 only)","fNclex","fNinit", + "fNsetpm(287 only)","(bad)","(bad)","(bad)", + }, + + /* de_3 7 */ + { + "(bad)","fcompp","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)", + }, + + /* df_4 8 */ + { + "fNstsw","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)","(bad)", + }, +}; + +static void +dofloat (sizeflag) + int sizeflag; +{ + const struct dis386 *dp; + unsigned char floatop; + + floatop = codep[-1]; + + if (mod != 3) + { + putop (float_mem[(floatop - 0xd8) * 8 + reg], sizeflag); + obufp = op1out; + if (floatop == 0xdb) + OP_E (x_mode, sizeflag); + else if (floatop == 0xdd) + OP_E (d_mode, sizeflag); + else + OP_E (v_mode, sizeflag); + return; + } + /* Skip mod/rm byte. */ + MODRM_CHECK; + codep++; + + dp = &float_reg[floatop - 0xd8][reg]; + if (dp->name == NULL) + { + putop (fgrps[dp->bytemode1][rm], sizeflag); + + /* Instruction fnstsw is only one with strange arg. */ + if (floatop == 0xdf && codep[-1] == 0xe0) + strcpy (op1out, names16[0]); + } + else + { + putop (dp->name, sizeflag); + + obufp = op1out; + if (dp->op1) + (*dp->op1) (dp->bytemode1, sizeflag); + obufp = op2out; + if (dp->op2) + (*dp->op2) (dp->bytemode2, sizeflag); + } +} + +static void +OP_ST (bytemode, sizeflag) + int bytemode ATTRIBUTE_UNUSED; + int sizeflag ATTRIBUTE_UNUSED; +{ + oappend ("%st"); +} + +static void +OP_STi (bytemode, sizeflag) + int bytemode ATTRIBUTE_UNUSED; + int sizeflag ATTRIBUTE_UNUSED; +{ + sprintf (scratchbuf, "%%st(%d)", rm); + oappend (scratchbuf + intel_syntax); +} + +/* Capital letters in template are macros. */ +static int +putop (template, sizeflag) + const char *template; + int sizeflag; +{ + const char *p; + int alt; + + for (p = template; *p; p++) + { + switch (*p) + { + default: + *obufp++ = *p; + break; + case '{': + alt = 0; + if (intel_syntax) + alt += 1; + if (mode_64bit) + alt += 2; + while (alt != 0) + { + while (*++p != '|') + { + if (*p == '}') + { + /* Alternative not valid. */ + strcpy (obuf, "(bad)"); + obufp = obuf + 5; + return 1; + } + else if (*p == '\0') + abort (); + } + alt--; + } + break; + case '|': + while (*++p != '}') + { + if (*p == '\0') + abort (); + } + break; + case '}': + break; + case 'A': + if (intel_syntax) + break; + if (mod != 3 || (sizeflag & SUFFIX_ALWAYS)) + *obufp++ = 'b'; + break; + case 'B': + if (intel_syntax) + break; + if (sizeflag & SUFFIX_ALWAYS) + *obufp++ = 'b'; + break; + case 'E': /* For jcxz/jecxz */ + if (mode_64bit) + { + if (sizeflag & AFLAG) + *obufp++ = 'r'; + else + *obufp++ = 'e'; + } + else + if (sizeflag & AFLAG) + *obufp++ = 'e'; + used_prefixes |= (prefixes & PREFIX_ADDR); + break; + case 'F': + if (intel_syntax) + break; + if ((prefixes & PREFIX_ADDR) || (sizeflag & SUFFIX_ALWAYS)) + { + if (sizeflag & AFLAG) + *obufp++ = mode_64bit ? 'q' : 'l'; + else + *obufp++ = mode_64bit ? 'l' : 'w'; + used_prefixes |= (prefixes & PREFIX_ADDR); + } + break; + case 'H': + if (intel_syntax) + break; + if ((prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_CS + || (prefixes & (PREFIX_CS | PREFIX_DS)) == PREFIX_DS) + { + used_prefixes |= prefixes & (PREFIX_CS | PREFIX_DS); + *obufp++ = ','; + *obufp++ = 'p'; + if (prefixes & PREFIX_DS) + *obufp++ = 't'; + else + *obufp++ = 'n'; + } + break; + case 'L': + if (intel_syntax) + break; + if (sizeflag & SUFFIX_ALWAYS) + *obufp++ = 'l'; + break; + case 'N': + if ((prefixes & PREFIX_FWAIT) == 0) + *obufp++ = 'n'; + else + used_prefixes |= PREFIX_FWAIT; + break; + case 'O': + USED_REX (REX_MODE64); + if (rex & REX_MODE64) + *obufp++ = 'o'; + else + *obufp++ = 'd'; + break; + case 'T': + if (intel_syntax) + break; + if (mode_64bit) + { + *obufp++ = 'q'; + break; + } + /* Fall through. */ + case 'P': + if (intel_syntax) + break; + if ((prefixes & PREFIX_DATA) + || (rex & REX_MODE64) + || (sizeflag & SUFFIX_ALWAYS)) + { + USED_REX (REX_MODE64); + if (rex & REX_MODE64) + *obufp++ = 'q'; + else + { + if (sizeflag & DFLAG) + *obufp++ = 'l'; + else + *obufp++ = 'w'; + used_prefixes |= (prefixes & PREFIX_DATA); + } + } + break; + case 'U': + if (intel_syntax) + break; + if (mode_64bit) + { + *obufp++ = 'q'; + break; + } + /* Fall through. */ + case 'Q': + if (intel_syntax) + break; + USED_REX (REX_MODE64); + if (mod != 3 || (sizeflag & SUFFIX_ALWAYS)) + { + if (rex & REX_MODE64) + *obufp++ = 'q'; + else + { + if (sizeflag & DFLAG) + *obufp++ = 'l'; + else + *obufp++ = 'w'; + used_prefixes |= (prefixes & PREFIX_DATA); + } + } + break; + case 'R': + USED_REX (REX_MODE64); + if (intel_syntax) + { + if (rex & REX_MODE64) + { + *obufp++ = 'q'; + *obufp++ = 't'; + } + else if (sizeflag & DFLAG) + { + *obufp++ = 'd'; + *obufp++ = 'q'; + } + else + { + *obufp++ = 'w'; + *obufp++ = 'd'; + } + } + else + { + if (rex & REX_MODE64) + *obufp++ = 'q'; + else if (sizeflag & DFLAG) + *obufp++ = 'l'; + else + *obufp++ = 'w'; + } + if (!(rex & REX_MODE64)) + used_prefixes |= (prefixes & PREFIX_DATA); + break; + case 'S': + if (intel_syntax) + break; + if (sizeflag & SUFFIX_ALWAYS) + { + if (rex & REX_MODE64) + *obufp++ = 'q'; + else + { + if (sizeflag & DFLAG) + *obufp++ = 'l'; + else + *obufp++ = 'w'; + used_prefixes |= (prefixes & PREFIX_DATA); + } + } + break; + case 'X': + if (prefixes & PREFIX_DATA) + *obufp++ = 'd'; + else + *obufp++ = 's'; + used_prefixes |= (prefixes & PREFIX_DATA); + break; + case 'Y': + if (intel_syntax) + break; + if (rex & REX_MODE64) + { + USED_REX (REX_MODE64); + *obufp++ = 'q'; + } + break; + /* implicit operand size 'l' for i386 or 'q' for x86-64 */ + case 'W': + /* operand size flag for cwtl, cbtw */ + USED_REX (0); + if (rex) + *obufp++ = 'l'; + else if (sizeflag & DFLAG) + *obufp++ = 'w'; + else + *obufp++ = 'b'; + if (intel_syntax) + { + if (rex) + { + *obufp++ = 'q'; + *obufp++ = 'e'; + } + if (sizeflag & DFLAG) + { + *obufp++ = 'd'; + *obufp++ = 'e'; + } + else + { + *obufp++ = 'w'; + } + } + if (!rex) + used_prefixes |= (prefixes & PREFIX_DATA); + break; + } + } + *obufp = 0; + return 0; +} + +static void +oappend (s) + const char *s; +{ + strcpy (obufp, s); + obufp += strlen (s); +} + +static void +append_seg () +{ + if (prefixes & PREFIX_CS) + { + used_prefixes |= PREFIX_CS; + oappend ("%cs:" + intel_syntax); + } + if (prefixes & PREFIX_DS) + { + used_prefixes |= PREFIX_DS; + oappend ("%ds:" + intel_syntax); + } + if (prefixes & PREFIX_SS) + { + used_prefixes |= PREFIX_SS; + oappend ("%ss:" + intel_syntax); + } + if (prefixes & PREFIX_ES) + { + used_prefixes |= PREFIX_ES; + oappend ("%es:" + intel_syntax); + } + if (prefixes & PREFIX_FS) + { + used_prefixes |= PREFIX_FS; + oappend ("%fs:" + intel_syntax); + } + if (prefixes & PREFIX_GS) + { + used_prefixes |= PREFIX_GS; + oappend ("%gs:" + intel_syntax); + } +} + +static void +OP_indirE (bytemode, sizeflag) + int bytemode; + int sizeflag; +{ + if (!intel_syntax) + oappend ("*"); + OP_E (bytemode, sizeflag); +} + +static void +print_operand_value (buf, hex, disp) + char *buf; + int hex; + bfd_vma disp; +{ + if (mode_64bit) + { + if (hex) + { + char tmp[30]; + int i; + buf[0] = '0'; + buf[1] = 'x'; + sprintf_vma (tmp, disp); + for (i = 0; tmp[i] == '0' && tmp[i + 1]; i++); + strcpy (buf + 2, tmp + i); + } + else + { + bfd_signed_vma v = disp; + char tmp[30]; + int i; + if (v < 0) + { + *(buf++) = '-'; + v = -disp; + /* Check for possible overflow on 0x8000000000000000. */ + if (v < 0) + { + strcpy (buf, "9223372036854775808"); + return; + } + } + if (!v) + { + strcpy (buf, "0"); + return; + } + + i = 0; + tmp[29] = 0; + while (v) + { + tmp[28 - i] = (v % 10) + '0'; + v /= 10; + i++; + } + strcpy (buf, tmp + 29 - i); + } + } + else + { + if (hex) + sprintf (buf, "0x%x", (unsigned int) disp); + else + sprintf (buf, "%d", (int) disp); + } +} + +static void +OP_E (bytemode, sizeflag) + int bytemode; + int sizeflag; +{ + bfd_vma disp; + int add = 0; + int riprel = 0; + USED_REX (REX_EXTZ); + if (rex & REX_EXTZ) + add += 8; + + /* Skip mod/rm byte. */ + MODRM_CHECK; + codep++; + + if (mod == 3) + { + switch (bytemode) + { + case b_mode: + USED_REX (0); + if (rex) + oappend (names8rex[rm + add]); + else + oappend (names8[rm + add]); + break; + case w_mode: + oappend (names16[rm + add]); + break; + case d_mode: + oappend (names32[rm + add]); + break; + case q_mode: + oappend (names64[rm + add]); + break; + case m_mode: + if (mode_64bit) + oappend (names64[rm + add]); + else + oappend (names32[rm + add]); + break; + case v_mode: + USED_REX (REX_MODE64); + if (rex & REX_MODE64) + oappend (names64[rm + add]); + else if (sizeflag & DFLAG) + oappend (names32[rm + add]); + else + oappend (names16[rm + add]); + used_prefixes |= (prefixes & PREFIX_DATA); + break; + case 0: + if (!(codep[-2] == 0xAE && codep[-1] == 0xF8 /* sfence */) + && !(codep[-2] == 0xAE && codep[-1] == 0xF0 /* mfence */) + && !(codep[-2] == 0xAE && codep[-1] == 0xe8 /* lfence */)) + BadOp (); /* bad sfence,lea,lds,les,lfs,lgs,lss modrm */ + break; + default: + oappend (INTERNAL_DISASSEMBLER_ERROR); + break; + } + return; + } + + disp = 0; + append_seg (); + + if ((sizeflag & AFLAG) || mode_64bit) /* 32 bit address mode */ + { + int havesib; + int havebase; + int base; + int index = 0; + int scale = 0; + + havesib = 0; + havebase = 1; + base = rm; + + if (base == 4) + { + havesib = 1; + FETCH_DATA (the_info, codep + 1); + scale = (*codep >> 6) & 3; + index = (*codep >> 3) & 7; + base = *codep & 7; + USED_REX (REX_EXTY); + USED_REX (REX_EXTZ); + if (rex & REX_EXTY) + index += 8; + if (rex & REX_EXTZ) + base += 8; + codep++; + } + + switch (mod) + { + case 0: + if ((base & 7) == 5) + { + havebase = 0; + if (mode_64bit && !havesib && (sizeflag & AFLAG)) + riprel = 1; + disp = get32s (); + } + break; + case 1: + FETCH_DATA (the_info, codep + 1); + disp = *codep++; + if ((disp & 0x80) != 0) + disp -= 0x100; + break; + case 2: + disp = get32s (); + break; + } + + if (!intel_syntax) + if (mod != 0 || (base & 7) == 5) + { + print_operand_value (scratchbuf, !riprel, disp); + oappend (scratchbuf); + if (riprel) + { + set_op (disp, 1); + oappend ("(%rip)"); + } + } + + if (havebase || (havesib && (index != 4 || scale != 0))) + { + if (intel_syntax) + { + switch (bytemode) + { + case b_mode: + oappend ("BYTE PTR "); + break; + case w_mode: + oappend ("WORD PTR "); + break; + case v_mode: + oappend ("DWORD PTR "); + break; + case d_mode: + oappend ("QWORD PTR "); + break; + case m_mode: + if (mode_64bit) + oappend ("DWORD PTR "); + else + oappend ("QWORD PTR "); + break; + case x_mode: + oappend ("XWORD PTR "); + break; + default: + break; + } + } + *obufp++ = open_char; + if (intel_syntax && riprel) + oappend ("rip + "); + *obufp = '\0'; + USED_REX (REX_EXTZ); + if (!havesib && (rex & REX_EXTZ)) + base += 8; + if (havebase) + oappend (mode_64bit && (sizeflag & AFLAG) + ? names64[base] : names32[base]); + if (havesib) + { + if (index != 4) + { + if (intel_syntax) + { + if (havebase) + { + *obufp++ = separator_char; + *obufp = '\0'; + } + sprintf (scratchbuf, "%s", + mode_64bit && (sizeflag & AFLAG) + ? names64[index] : names32[index]); + } + else + sprintf (scratchbuf, ",%s", + mode_64bit && (sizeflag & AFLAG) + ? names64[index] : names32[index]); + oappend (scratchbuf); + } + if (!intel_syntax + || (intel_syntax + && bytemode != b_mode + && bytemode != w_mode + && bytemode != v_mode)) + { + *obufp++ = scale_char; + *obufp = '\0'; + sprintf (scratchbuf, "%d", 1 << scale); + oappend (scratchbuf); + } + } + if (intel_syntax) + if (mod != 0 || (base & 7) == 5) + { + /* Don't print zero displacements. */ + if (disp != 0) + { + if ((bfd_signed_vma) disp > 0) + { + *obufp++ = '+'; + *obufp = '\0'; + } + + print_operand_value (scratchbuf, 0, disp); + oappend (scratchbuf); + } + } + + *obufp++ = close_char; + *obufp = '\0'; + } + else if (intel_syntax) + { + if (mod != 0 || (base & 7) == 5) + { + if (prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS + | PREFIX_ES | PREFIX_FS | PREFIX_GS)) + ; + else + { + oappend (names_seg[ds_reg - es_reg]); + oappend (":"); + } + print_operand_value (scratchbuf, 1, disp); + oappend (scratchbuf); + } + } + } + else + { /* 16 bit address mode */ + switch (mod) + { + case 0: + if ((rm & 7) == 6) + { + disp = get16 (); + if ((disp & 0x8000) != 0) + disp -= 0x10000; + } + break; + case 1: + FETCH_DATA (the_info, codep + 1); + disp = *codep++; + if ((disp & 0x80) != 0) + disp -= 0x100; + break; + case 2: + disp = get16 (); + if ((disp & 0x8000) != 0) + disp -= 0x10000; + break; + } + + if (!intel_syntax) + if (mod != 0 || (rm & 7) == 6) + { + print_operand_value (scratchbuf, 0, disp); + oappend (scratchbuf); + } + + if (mod != 0 || (rm & 7) != 6) + { + *obufp++ = open_char; + *obufp = '\0'; + oappend (index16[rm + add]); + *obufp++ = close_char; + *obufp = '\0'; + } + } +} + +static void +OP_G (bytemode, sizeflag) + int bytemode; + int sizeflag; +{ + int add = 0; + USED_REX (REX_EXTX); + if (rex & REX_EXTX) + add += 8; + switch (bytemode) + { + case b_mode: + USED_REX (0); + if (rex) + oappend (names8rex[reg + add]); + else + oappend (names8[reg + add]); + break; + case w_mode: + oappend (names16[reg + add]); + break; + case d_mode: + oappend (names32[reg + add]); + break; + case q_mode: + oappend (names64[reg + add]); + break; + case v_mode: + USED_REX (REX_MODE64); + if (rex & REX_MODE64) + oappend (names64[reg + add]); + else if (sizeflag & DFLAG) + oappend (names32[reg + add]); + else + oappend (names16[reg + add]); + used_prefixes |= (prefixes & PREFIX_DATA); + break; + default: + oappend (INTERNAL_DISASSEMBLER_ERROR); + break; + } +} + +static bfd_vma +get64 () +{ + bfd_vma x; +#ifdef BFD64 + unsigned int a; + unsigned int b; + + FETCH_DATA (the_info, codep + 8); + a = *codep++ & 0xff; + a |= (*codep++ & 0xff) << 8; + a |= (*codep++ & 0xff) << 16; + a |= (*codep++ & 0xff) << 24; + b = *codep++ & 0xff; + b |= (*codep++ & 0xff) << 8; + b |= (*codep++ & 0xff) << 16; + b |= (*codep++ & 0xff) << 24; + x = a + ((bfd_vma) b << 32); +#else + abort (); + x = 0; +#endif + return x; +} + +static bfd_signed_vma +get32 () +{ + bfd_signed_vma x = 0; + + FETCH_DATA (the_info, codep + 4); + x = *codep++ & (bfd_signed_vma) 0xff; + x |= (*codep++ & (bfd_signed_vma) 0xff) << 8; + x |= (*codep++ & (bfd_signed_vma) 0xff) << 16; + x |= (*codep++ & (bfd_signed_vma) 0xff) << 24; + return x; +} + +static bfd_signed_vma +get32s () +{ + bfd_signed_vma x = 0; + + FETCH_DATA (the_info, codep + 4); + x = *codep++ & (bfd_signed_vma) 0xff; + x |= (*codep++ & (bfd_signed_vma) 0xff) << 8; + x |= (*codep++ & (bfd_signed_vma) 0xff) << 16; + x |= (*codep++ & (bfd_signed_vma) 0xff) << 24; + + x = (x ^ ((bfd_signed_vma) 1 << 31)) - ((bfd_signed_vma) 1 << 31); + + return x; +} + +static int +get16 () +{ + int x = 0; + + FETCH_DATA (the_info, codep + 2); + x = *codep++ & 0xff; + x |= (*codep++ & 0xff) << 8; + return x; +} + +static void +set_op (op, riprel) + bfd_vma op; + int riprel; +{ + op_index[op_ad] = op_ad; + if (mode_64bit) + { + op_address[op_ad] = op; + op_riprel[op_ad] = riprel; + } + else + { + /* Mask to get a 32-bit address. */ + op_address[op_ad] = op & 0xffffffff; + op_riprel[op_ad] = riprel & 0xffffffff; + } +} + +static void +OP_REG (code, sizeflag) + int code; + int sizeflag; +{ + const char *s; + int add = 0; + USED_REX (REX_EXTZ); + if (rex & REX_EXTZ) + add = 8; + + switch (code) + { + case indir_dx_reg: + if (intel_syntax) + s = "[dx]"; + else + s = "(%dx)"; + break; + case ax_reg: case cx_reg: case dx_reg: case bx_reg: + case sp_reg: case bp_reg: case si_reg: case di_reg: + s = names16[code - ax_reg + add]; + break; + case es_reg: case ss_reg: case cs_reg: + case ds_reg: case fs_reg: case gs_reg: + s = names_seg[code - es_reg + add]; + break; + case al_reg: case ah_reg: case cl_reg: case ch_reg: + case dl_reg: case dh_reg: case bl_reg: case bh_reg: + USED_REX (0); + if (rex) + s = names8rex[code - al_reg + add]; + else + s = names8[code - al_reg]; + break; + case rAX_reg: case rCX_reg: case rDX_reg: case rBX_reg: + case rSP_reg: case rBP_reg: case rSI_reg: case rDI_reg: + if (mode_64bit) + { + s = names64[code - rAX_reg + add]; + break; + } + code += eAX_reg - rAX_reg; + /* Fall through. */ + case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg: + case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg: + USED_REX (REX_MODE64); + if (rex & REX_MODE64) + s = names64[code - eAX_reg + add]; + else if (sizeflag & DFLAG) + s = names32[code - eAX_reg + add]; + else + s = names16[code - eAX_reg + add]; + used_prefixes |= (prefixes & PREFIX_DATA); + break; + default: + s = INTERNAL_DISASSEMBLER_ERROR; + break; + } + oappend (s); +} + +static void +OP_IMREG (code, sizeflag) + int code; + int sizeflag; +{ + const char *s; + + switch (code) + { + case indir_dx_reg: + if (intel_syntax) + s = "[dx]"; + else + s = "(%dx)"; + break; + case ax_reg: case cx_reg: case dx_reg: case bx_reg: + case sp_reg: case bp_reg: case si_reg: case di_reg: + s = names16[code - ax_reg]; + break; + case es_reg: case ss_reg: case cs_reg: + case ds_reg: case fs_reg: case gs_reg: + s = names_seg[code - es_reg]; + break; + case al_reg: case ah_reg: case cl_reg: case ch_reg: + case dl_reg: case dh_reg: case bl_reg: case bh_reg: + USED_REX (0); + if (rex) + s = names8rex[code - al_reg]; + else + s = names8[code - al_reg]; + break; + case eAX_reg: case eCX_reg: case eDX_reg: case eBX_reg: + case eSP_reg: case eBP_reg: case eSI_reg: case eDI_reg: + USED_REX (REX_MODE64); + if (rex & REX_MODE64) + s = names64[code - eAX_reg]; + else if (sizeflag & DFLAG) + s = names32[code - eAX_reg]; + else + s = names16[code - eAX_reg]; + used_prefixes |= (prefixes & PREFIX_DATA); + break; + default: + s = INTERNAL_DISASSEMBLER_ERROR; + break; + } + oappend (s); +} + +static void +OP_I (bytemode, sizeflag) + int bytemode; + int sizeflag; +{ + bfd_signed_vma op; + bfd_signed_vma mask = -1; + + switch (bytemode) + { + case b_mode: + FETCH_DATA (the_info, codep + 1); + op = *codep++; + mask = 0xff; + break; + case q_mode: + if (mode_64bit) + { + op = get32s (); + break; + } + /* Fall through. */ + case v_mode: + USED_REX (REX_MODE64); + if (rex & REX_MODE64) + op = get32s (); + else if (sizeflag & DFLAG) + { + op = get32 (); + mask = 0xffffffff; + } + else + { + op = get16 (); + mask = 0xfffff; + } + used_prefixes |= (prefixes & PREFIX_DATA); + break; + case w_mode: + mask = 0xfffff; + op = get16 (); + break; + default: + oappend (INTERNAL_DISASSEMBLER_ERROR); + return; + } + + op &= mask; + scratchbuf[0] = '$'; + print_operand_value (scratchbuf + 1, 1, op); + oappend (scratchbuf + intel_syntax); + scratchbuf[0] = '\0'; +} + +static void +OP_I64 (bytemode, sizeflag) + int bytemode; + int sizeflag; +{ + bfd_signed_vma op; + bfd_signed_vma mask = -1; + + if (!mode_64bit) + { + OP_I (bytemode, sizeflag); + return; + } + + switch (bytemode) + { + case b_mode: + FETCH_DATA (the_info, codep + 1); + op = *codep++; + mask = 0xff; + break; + case v_mode: + USED_REX (REX_MODE64); + if (rex & REX_MODE64) + op = get64 (); + else if (sizeflag & DFLAG) + { + op = get32 (); + mask = 0xffffffff; + } + else + { + op = get16 (); + mask = 0xfffff; + } + used_prefixes |= (prefixes & PREFIX_DATA); + break; + case w_mode: + mask = 0xfffff; + op = get16 (); + break; + default: + oappend (INTERNAL_DISASSEMBLER_ERROR); + return; + } + + op &= mask; + scratchbuf[0] = '$'; + print_operand_value (scratchbuf + 1, 1, op); + oappend (scratchbuf + intel_syntax); + scratchbuf[0] = '\0'; +} + +static void +OP_sI (bytemode, sizeflag) + int bytemode; + int sizeflag; +{ + bfd_signed_vma op; + bfd_signed_vma mask = -1; + + switch (bytemode) + { + case b_mode: + FETCH_DATA (the_info, codep + 1); + op = *codep++; + if ((op & 0x80) != 0) + op -= 0x100; + mask = 0xffffffff; + break; + case v_mode: + USED_REX (REX_MODE64); + if (rex & REX_MODE64) + op = get32s (); + else if (sizeflag & DFLAG) + { + op = get32s (); + mask = 0xffffffff; + } + else + { + mask = 0xffffffff; + op = get16 (); + if ((op & 0x8000) != 0) + op -= 0x10000; + } + used_prefixes |= (prefixes & PREFIX_DATA); + break; + case w_mode: + op = get16 (); + mask = 0xffffffff; + if ((op & 0x8000) != 0) + op -= 0x10000; + break; + default: + oappend (INTERNAL_DISASSEMBLER_ERROR); + return; + } + + scratchbuf[0] = '$'; + print_operand_value (scratchbuf + 1, 1, op); + oappend (scratchbuf + intel_syntax); +} + +static void +OP_J (bytemode, sizeflag) + int bytemode; + int sizeflag; +{ + bfd_vma disp; + bfd_vma mask = -1; + + switch (bytemode) + { + case b_mode: + FETCH_DATA (the_info, codep + 1); + disp = *codep++; + if ((disp & 0x80) != 0) + disp -= 0x100; + break; + case v_mode: + if (sizeflag & DFLAG) + disp = get32s (); + else + { + disp = get16 (); + /* For some reason, a data16 prefix on a jump instruction + means that the pc is masked to 16 bits after the + displacement is added! */ + mask = 0xffff; + } + break; + default: + oappend (INTERNAL_DISASSEMBLER_ERROR); + return; + } + disp = (start_pc + codep - start_codep + disp) & mask; + set_op (disp, 0); + print_operand_value (scratchbuf, 1, disp); + oappend (scratchbuf); +} + +static void +OP_SEG (dummy, sizeflag) + int dummy ATTRIBUTE_UNUSED; + int sizeflag ATTRIBUTE_UNUSED; +{ + oappend (names_seg[reg]); +} + +static void +OP_DIR (dummy, sizeflag) + int dummy ATTRIBUTE_UNUSED; + int sizeflag; +{ + int seg, offset; + + if (sizeflag & DFLAG) + { + offset = get32 (); + seg = get16 (); + } + else + { + offset = get16 (); + seg = get16 (); + } + used_prefixes |= (prefixes & PREFIX_DATA); + if (intel_syntax) + sprintf (scratchbuf, "0x%x,0x%x", seg, offset); + else + sprintf (scratchbuf, "$0x%x,$0x%x", seg, offset); + oappend (scratchbuf); +} + +static void +OP_OFF (bytemode, sizeflag) + int bytemode ATTRIBUTE_UNUSED; + int sizeflag; +{ + bfd_vma off; + + append_seg (); + + if ((sizeflag & AFLAG) || mode_64bit) + off = get32 (); + else + off = get16 (); + + if (intel_syntax) + { + if (!(prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS + | PREFIX_ES | PREFIX_FS | PREFIX_GS))) + { + oappend (names_seg[ds_reg - es_reg]); + oappend (":"); + } + } + print_operand_value (scratchbuf, 1, off); + oappend (scratchbuf); +} + +static void +OP_OFF64 (bytemode, sizeflag) + int bytemode ATTRIBUTE_UNUSED; + int sizeflag ATTRIBUTE_UNUSED; +{ + bfd_vma off; + + if (!mode_64bit) + { + OP_OFF (bytemode, sizeflag); + return; + } + + append_seg (); + + off = get64 (); + + if (intel_syntax) + { + if (!(prefixes & (PREFIX_CS | PREFIX_SS | PREFIX_DS + | PREFIX_ES | PREFIX_FS | PREFIX_GS))) + { + oappend (names_seg[ds_reg - es_reg]); + oappend (":"); + } + } + print_operand_value (scratchbuf, 1, off); + oappend (scratchbuf); +} + +static void +ptr_reg (code, sizeflag) + int code; + int sizeflag; +{ + const char *s; + if (intel_syntax) + oappend ("["); + else + oappend ("("); + + USED_REX (REX_MODE64); + if (rex & REX_MODE64) + { + if (!(sizeflag & AFLAG)) + s = names32[code - eAX_reg]; + else + s = names64[code - eAX_reg]; + } + else if (sizeflag & AFLAG) + s = names32[code - eAX_reg]; + else + s = names16[code - eAX_reg]; + oappend (s); + if (intel_syntax) + oappend ("]"); + else + oappend (")"); +} + +static void +OP_ESreg (code, sizeflag) + int code; + int sizeflag; +{ + oappend ("%es:" + intel_syntax); + ptr_reg (code, sizeflag); +} + +static void +OP_DSreg (code, sizeflag) + int code; + int sizeflag; +{ + if ((prefixes + & (PREFIX_CS + | PREFIX_DS + | PREFIX_SS + | PREFIX_ES + | PREFIX_FS + | PREFIX_GS)) == 0) + prefixes |= PREFIX_DS; + append_seg (); + ptr_reg (code, sizeflag); +} + +static void +OP_C (dummy, sizeflag) + int dummy ATTRIBUTE_UNUSED; + int sizeflag ATTRIBUTE_UNUSED; +{ + int add = 0; + USED_REX (REX_EXTX); + if (rex & REX_EXTX) + add = 8; + sprintf (scratchbuf, "%%cr%d", reg + add); + oappend (scratchbuf + intel_syntax); +} + +static void +OP_D (dummy, sizeflag) + int dummy ATTRIBUTE_UNUSED; + int sizeflag ATTRIBUTE_UNUSED; +{ + int add = 0; + USED_REX (REX_EXTX); + if (rex & REX_EXTX) + add = 8; + if (intel_syntax) + sprintf (scratchbuf, "db%d", reg + add); + else + sprintf (scratchbuf, "%%db%d", reg + add); + oappend (scratchbuf); +} + +static void +OP_T (dummy, sizeflag) + int dummy ATTRIBUTE_UNUSED; + int sizeflag ATTRIBUTE_UNUSED; +{ + sprintf (scratchbuf, "%%tr%d", reg); + oappend (scratchbuf + intel_syntax); +} + +static void +OP_Rd (bytemode, sizeflag) + int bytemode; + int sizeflag; +{ + if (mod == 3) + OP_E (bytemode, sizeflag); + else + BadOp (); +} + +static void +OP_MMX (bytemode, sizeflag) + int bytemode ATTRIBUTE_UNUSED; + int sizeflag ATTRIBUTE_UNUSED; +{ + int add = 0; + USED_REX (REX_EXTX); + if (rex & REX_EXTX) + add = 8; + used_prefixes |= (prefixes & PREFIX_DATA); + if (prefixes & PREFIX_DATA) + sprintf (scratchbuf, "%%xmm%d", reg + add); + else + sprintf (scratchbuf, "%%mm%d", reg + add); + oappend (scratchbuf + intel_syntax); +} + +static void +OP_XMM (bytemode, sizeflag) + int bytemode ATTRIBUTE_UNUSED; + int sizeflag ATTRIBUTE_UNUSED; +{ + int add = 0; + USED_REX (REX_EXTX); + if (rex & REX_EXTX) + add = 8; + sprintf (scratchbuf, "%%xmm%d", reg + add); + oappend (scratchbuf + intel_syntax); +} + +static void +OP_EM (bytemode, sizeflag) + int bytemode; + int sizeflag; +{ + int add = 0; + if (mod != 3) + { + OP_E (bytemode, sizeflag); + return; + } + USED_REX (REX_EXTZ); + if (rex & REX_EXTZ) + add = 8; + + /* Skip mod/rm byte. */ + MODRM_CHECK; + codep++; + used_prefixes |= (prefixes & PREFIX_DATA); + if (prefixes & PREFIX_DATA) + sprintf (scratchbuf, "%%xmm%d", rm + add); + else + sprintf (scratchbuf, "%%mm%d", rm + add); + oappend (scratchbuf + intel_syntax); +} + +static void +OP_EX (bytemode, sizeflag) + int bytemode; + int sizeflag; +{ + int add = 0; + if (mod != 3) + { + OP_E (bytemode, sizeflag); + return; + } + USED_REX (REX_EXTZ); + if (rex & REX_EXTZ) + add = 8; + + /* Skip mod/rm byte. */ + MODRM_CHECK; + codep++; + sprintf (scratchbuf, "%%xmm%d", rm + add); + oappend (scratchbuf + intel_syntax); +} + +static void +OP_MS (bytemode, sizeflag) + int bytemode; + int sizeflag; +{ + if (mod == 3) + OP_EM (bytemode, sizeflag); + else + BadOp (); +} + +static void +OP_XS (bytemode, sizeflag) + int bytemode; + int sizeflag; +{ + if (mod == 3) + OP_EX (bytemode, sizeflag); + else + BadOp (); +} + +static const char *Suffix3DNow[] = { +/* 00 */ NULL, NULL, NULL, NULL, +/* 04 */ NULL, NULL, NULL, NULL, +/* 08 */ NULL, NULL, NULL, NULL, +/* 0C */ "pi2fw", "pi2fd", NULL, NULL, +/* 10 */ NULL, NULL, NULL, NULL, +/* 14 */ NULL, NULL, NULL, NULL, +/* 18 */ NULL, NULL, NULL, NULL, +/* 1C */ "pf2iw", "pf2id", NULL, NULL, +/* 20 */ NULL, NULL, NULL, NULL, +/* 24 */ NULL, NULL, NULL, NULL, +/* 28 */ NULL, NULL, NULL, NULL, +/* 2C */ NULL, NULL, NULL, NULL, +/* 30 */ NULL, NULL, NULL, NULL, +/* 34 */ NULL, NULL, NULL, NULL, +/* 38 */ NULL, NULL, NULL, NULL, +/* 3C */ NULL, NULL, NULL, NULL, +/* 40 */ NULL, NULL, NULL, NULL, +/* 44 */ NULL, NULL, NULL, NULL, +/* 48 */ NULL, NULL, NULL, NULL, +/* 4C */ NULL, NULL, NULL, NULL, +/* 50 */ NULL, NULL, NULL, NULL, +/* 54 */ NULL, NULL, NULL, NULL, +/* 58 */ NULL, NULL, NULL, NULL, +/* 5C */ NULL, NULL, NULL, NULL, +/* 60 */ NULL, NULL, NULL, NULL, +/* 64 */ NULL, NULL, NULL, NULL, +/* 68 */ NULL, NULL, NULL, NULL, +/* 6C */ NULL, NULL, NULL, NULL, +/* 70 */ NULL, NULL, NULL, NULL, +/* 74 */ NULL, NULL, NULL, NULL, +/* 78 */ NULL, NULL, NULL, NULL, +/* 7C */ NULL, NULL, NULL, NULL, +/* 80 */ NULL, NULL, NULL, NULL, +/* 84 */ NULL, NULL, NULL, NULL, +/* 88 */ NULL, NULL, "pfnacc", NULL, +/* 8C */ NULL, NULL, "pfpnacc", NULL, +/* 90 */ "pfcmpge", NULL, NULL, NULL, +/* 94 */ "pfmin", NULL, "pfrcp", "pfrsqrt", +/* 98 */ NULL, NULL, "pfsub", NULL, +/* 9C */ NULL, NULL, "pfadd", NULL, +/* A0 */ "pfcmpgt", NULL, NULL, NULL, +/* A4 */ "pfmax", NULL, "pfrcpit1", "pfrsqit1", +/* A8 */ NULL, NULL, "pfsubr", NULL, +/* AC */ NULL, NULL, "pfacc", NULL, +/* B0 */ "pfcmpeq", NULL, NULL, NULL, +/* B4 */ "pfmul", NULL, "pfrcpit2", "pfmulhrw", +/* B8 */ NULL, NULL, NULL, "pswapd", +/* BC */ NULL, NULL, NULL, "pavgusb", +/* C0 */ NULL, NULL, NULL, NULL, +/* C4 */ NULL, NULL, NULL, NULL, +/* C8 */ NULL, NULL, NULL, NULL, +/* CC */ NULL, NULL, NULL, NULL, +/* D0 */ NULL, NULL, NULL, NULL, +/* D4 */ NULL, NULL, NULL, NULL, +/* D8 */ NULL, NULL, NULL, NULL, +/* DC */ NULL, NULL, NULL, NULL, +/* E0 */ NULL, NULL, NULL, NULL, +/* E4 */ NULL, NULL, NULL, NULL, +/* E8 */ NULL, NULL, NULL, NULL, +/* EC */ NULL, NULL, NULL, NULL, +/* F0 */ NULL, NULL, NULL, NULL, +/* F4 */ NULL, NULL, NULL, NULL, +/* F8 */ NULL, NULL, NULL, NULL, +/* FC */ NULL, NULL, NULL, NULL, +}; + +static void +OP_3DNowSuffix (bytemode, sizeflag) + int bytemode ATTRIBUTE_UNUSED; + int sizeflag ATTRIBUTE_UNUSED; +{ + const char *mnemonic; + + FETCH_DATA (the_info, codep + 1); + /* AMD 3DNow! instructions are specified by an opcode suffix in the + place where an 8-bit immediate would normally go. ie. the last + byte of the instruction. */ + obufp = obuf + strlen (obuf); + mnemonic = Suffix3DNow[*codep++ & 0xff]; + if (mnemonic) + oappend (mnemonic); + else + { + /* Since a variable sized modrm/sib chunk is between the start + of the opcode (0x0f0f) and the opcode suffix, we need to do + all the modrm processing first, and don't know until now that + we have a bad opcode. This necessitates some cleaning up. */ + op1out[0] = '\0'; + op2out[0] = '\0'; + BadOp (); + } +} + +static const char *simd_cmp_op[] = { + "eq", + "lt", + "le", + "unord", + "neq", + "nlt", + "nle", + "ord" +}; + +static void +OP_SIMD_Suffix (bytemode, sizeflag) + int bytemode ATTRIBUTE_UNUSED; + int sizeflag ATTRIBUTE_UNUSED; +{ + unsigned int cmp_type; + + FETCH_DATA (the_info, codep + 1); + obufp = obuf + strlen (obuf); + cmp_type = *codep++ & 0xff; + if (cmp_type < 8) + { + char suffix1 = 'p', suffix2 = 's'; + used_prefixes |= (prefixes & PREFIX_REPZ); + if (prefixes & PREFIX_REPZ) + suffix1 = 's'; + else + { + used_prefixes |= (prefixes & PREFIX_DATA); + if (prefixes & PREFIX_DATA) + suffix2 = 'd'; + else + { + used_prefixes |= (prefixes & PREFIX_REPNZ); + if (prefixes & PREFIX_REPNZ) + suffix1 = 's', suffix2 = 'd'; + } + } + sprintf (scratchbuf, "cmp%s%c%c", + simd_cmp_op[cmp_type], suffix1, suffix2); + used_prefixes |= (prefixes & PREFIX_REPZ); + oappend (scratchbuf); + } + else + { + /* We have a bad extension byte. Clean up. */ + op1out[0] = '\0'; + op2out[0] = '\0'; + BadOp (); + } +} + +static void +SIMD_Fixup (extrachar, sizeflag) + int extrachar; + int sizeflag ATTRIBUTE_UNUSED; +{ + /* Change movlps/movhps to movhlps/movlhps for 2 register operand + forms of these instructions. */ + if (mod == 3) + { + char *p = obuf + strlen (obuf); + *(p + 1) = '\0'; + *p = *(p - 1); + *(p - 1) = *(p - 2); + *(p - 2) = *(p - 3); + *(p - 3) = extrachar; + } +} + +static void +BadOp (void) +{ + /* Throw away prefixes and 1st. opcode byte. */ + codep = insn_codep + 1; + oappend ("(bad)"); +} diff --git a/reactos/ntoskrnl/kdbg/amd64/kdb.c b/reactos/ntoskrnl/kdbg/amd64/kdb.c index ea5d73875c0..882ccb9ebcc 100644 --- a/reactos/ntoskrnl/kdbg/amd64/kdb.c +++ b/reactos/ntoskrnl/kdbg/amd64/kdb.c @@ -3,200 +3,109 @@ * PROJECT: ReactOS kernel * FILE: ntoskrnl/kdbg/amd64/kdb.c * PURPOSE: Kernel Debugger - * PROGRAMMERS: Gregor Anich - * Timo Kreuzer (timo.kreuzer@reactos.org) + * PROGRAMMERS: */ + /* INCLUDES ******************************************************************/ #include #define NDEBUG #include -extern KSPIN_LOCK KdpSerialSpinLock; -STRING KdpPromptString = RTL_CONSTANT_STRING("kdb:> "); - -/* GLOBALS *******************************************************************/ - -ULONG KdbDebugState = 0; /* KDBG Settings (NOECHO, KDSERIAL) */ - -/* FUNCTIONS *****************************************************************/ +ULONG +NTAPI +KiEspFromTrapFrame(IN PKTRAP_FRAME TrapFrame) +{ + return TrapFrame->Rsp; +} VOID NTAPI -KdbpGetCommandLineSettings(PCHAR p1) +KiEspToTrapFrame(IN PKTRAP_FRAME TrapFrame, + IN ULONG_PTR Esp) { - PCHAR p2; + KIRQL OldIrql; + ULONG Previous; - while (p1 && (p2 = strchr(p1, ' '))) + /* Raise to APC_LEVEL if needed */ + OldIrql = KeGetCurrentIrql(); + if (OldIrql < APC_LEVEL) KeRaiseIrql(APC_LEVEL, &OldIrql); + + /* Get the old ESP */ + Previous = KiEspFromTrapFrame(TrapFrame); + + /* Check if this is user-mode */ + if ((TrapFrame->SegCs & MODE_MASK)) { - p2++; - - if (!_strnicmp(p2, "KDSERIAL", 8)) - { - p2 += 8; - KdbDebugState |= KD_DEBUG_KDSERIAL; - KdpDebugMode.Serial = TRUE; - } - else if (!_strnicmp(p2, "KDNOECHO", 8)) - { - p2 += 8; - KdbDebugState |= KD_DEBUG_KDNOECHO; - } - - p1 = p2; + /* Write it directly */ + TrapFrame->Rsp = Esp; } -} + else + { + /* Don't allow ESP to be lowered, this is illegal */ + if (Esp < Previous) KeBugCheckEx(SET_OF_INVALID_CONTEXT, + Esp, + Previous, + (ULONG_PTR)TrapFrame, + 0); -KD_CONTINUE_TYPE -KdbEnterDebuggerException( - IN PEXCEPTION_RECORD ExceptionRecord OPTIONAL, - IN KPROCESSOR_MODE PreviousMode, - IN PCONTEXT Context, - IN OUT PKTRAP_FRAME TrapFrame, - IN BOOLEAN FirstChance) -{ - UNIMPLEMENTED; - return 0; -} + /* Create an edit frame, check if it was alrady */ + if (!(TrapFrame->SegCs & FRAME_EDITED)) + { + /* Update the value */ + TrapFrame->Rsp = Esp; + } + else + { + /* Check if ESP changed */ + if (Previous != Esp) + { + /* Save CS */ + TrapFrame->SegCs &= ~FRAME_EDITED; -VOID -KdbpCliModuleLoaded(IN PUNICODE_STRING Name) -{ - UNIMPLEMENTED; -} + /* Save ESP */ + TrapFrame->Rsp = Esp; + } + } + } + + /* Restore IRQL */ + if (OldIrql < APC_LEVEL) KeLowerIrql(OldIrql); -VOID -KdbpCliInit() -{ - UNIMPLEMENTED; } ULONG NTAPI -KdpPrompt(IN LPSTR InString, - IN USHORT InStringLength, - OUT LPSTR OutString, - IN USHORT OutStringLength) +KiSsFromTrapFrame(IN PKTRAP_FRAME TrapFrame) { - USHORT i; - CHAR Response; - ULONG DummyScanCode; - KIRQL OldIrql; - - /* Acquire the printing spinlock without waiting at raised IRQL */ - while (TRUE) + if (TrapFrame->SegCs & MODE_MASK) { - /* Wait when the spinlock becomes available */ - while (!KeTestSpinLock(&KdpSerialSpinLock)); - - /* Spinlock was free, raise IRQL */ - KeRaiseIrql(HIGH_LEVEL, &OldIrql); - - /* Try to get the spinlock */ - if (KeTryToAcquireSpinLockAtDpcLevel(&KdpSerialSpinLock)) - break; - - /* Someone else got the spinlock, lower IRQL back */ - KeLowerIrql(OldIrql); + /* User mode, return the User SS */ + return TrapFrame->SegSs | RPL_MASK; } - - /* Loop the string to send */ - for (i = 0; i < InStringLength; i++) + else { - /* Print it to serial */ - KdPortPutByteEx(&SerialPortInfo, *(PCHAR)(InString + i)); + /* Kernel mode */ + return KGDT_64_R0_SS; } - - /* Print a new line for log neatness */ - KdPortPutByteEx(&SerialPortInfo, '\r'); - KdPortPutByteEx(&SerialPortInfo, '\n'); - - /* Print the kdb prompt */ - for (i = 0; i < KdpPromptString.Length; i++) - { - /* Print it to serial */ - KdPortPutByteEx(&SerialPortInfo, - *(KdpPromptString.Buffer + i)); - } - - /* Loop the whole string */ - for (i = 0; i < OutStringLength; i++) - { - /* Check if this is serial debugging mode */ - if (KdbDebugState & KD_DEBUG_KDSERIAL) - { - /* Get the character from serial */ - do - { - Response = KdbpTryGetCharSerial(MAXULONG); - } while (Response == -1); - } - else - { - /* Get the response from the keyboard */ - do - { - Response = KdbpTryGetCharKeyboard(&DummyScanCode, MAXULONG); - } while (Response == -1); - } - - /* Check for return */ - if (Response == '\r') - { - /* - * We might need to discard the next '\n'. - * Wait a bit to make sure we receive it. - */ - KeStallExecutionProcessor(100000); - - /* Check the mode */ - if (KdbDebugState & KD_DEBUG_KDSERIAL) - { - /* Read and discard the next character, if any */ - KdbpTryGetCharSerial(5); - } - else - { - /* Read and discard the next character, if any */ - KdbpTryGetCharKeyboard(&DummyScanCode, 5); - } - - /* - * Null terminate the output string -- documentation states that - * DbgPrompt does not null terminate, but it does - */ - *(PCHAR)(OutString + i) = 0; - - /* Print a new line */ - KdPortPutByteEx(&SerialPortInfo, '\r'); - KdPortPutByteEx(&SerialPortInfo, '\n'); - - /* Release spinlock */ - KiReleaseSpinLock(&KdpSerialSpinLock); - - /* Lower IRQL back */ - KeLowerIrql(OldIrql); - - /* Return the length */ - return OutStringLength + 1; - } - - /* Write it back and print it to the log */ - *(PCHAR)(OutString + i) = Response; - KdPortPutByteEx(&SerialPortInfo, Response); - } - - /* Print a new line */ - KdPortPutByteEx(&SerialPortInfo, '\r'); - KdPortPutByteEx(&SerialPortInfo, '\n'); - - /* Release spinlock */ - KiReleaseSpinLock(&KdpSerialSpinLock); - - /* Lower IRQL back */ - KeLowerIrql(OldIrql); - - /* Return the length */ - return OutStringLength; } + +VOID +NTAPI +KiSsToTrapFrame(IN PKTRAP_FRAME TrapFrame, + IN ULONG Ss) +{ + /* Remove the high-bits */ + Ss &= 0xFFFF; + + if (TrapFrame->SegCs & MODE_MASK) + { + /* Usermode, save the User SS */ + TrapFrame->SegSs = Ss | RPL_MASK; + } + +} + + + diff --git a/reactos/ntoskrnl/kdbg/amd64/kdb_help.S b/reactos/ntoskrnl/kdbg/amd64/kdb_help.S index e60d94a5181..032602ec9fc 100644 --- a/reactos/ntoskrnl/kdbg/amd64/kdb_help.S +++ b/reactos/ntoskrnl/kdbg/amd64/kdb_help.S @@ -1,4 +1,3 @@ - #include #include @@ -7,10 +6,11 @@ _KdbEnter: /* save flags */ pushfq +// .pushreg ? /* Make room for a KTRAP_FRAME */ sub rsp, SIZE_KTRAP_FRAME - .allocstack SIZE_KTRAP_FRAME +// .allocstack SIZE_KTRAP_FRAME /* Save rbp */ mov [rsp + KTRAP_FRAME_Rbp], rbp @@ -30,12 +30,12 @@ _KdbEnter: mov [rsp + KTRAP_FRAME_R11], r11 /* Save xmm registers */ -// movdqa [rbp + KTRAP_FRAME_Xmm0], xmm0 -// movdqa [rbp + KTRAP_FRAME_Xmm1], xmm1 -// movdqa [rbp + KTRAP_FRAME_Xmm2], xmm2 -// movdqa [rbp + KTRAP_FRAME_Xmm3], xmm3 -// movdqa [rbp + KTRAP_FRAME_Xmm4], xmm4 -// movdqa [rbp + KTRAP_FRAME_Xmm5], xmm5 +// movdqa [rsp + KTRAP_FRAME_Xmm0], xmm0 +// movdqa [rsp + KTRAP_FRAME_Xmm1], xmm1 +// movdqa [rsp + KTRAP_FRAME_Xmm2], xmm2 +// movdqa [rsp + KTRAP_FRAME_Xmm3], xmm3 +// movdqa [rsp + KTRAP_FRAME_Xmm4], xmm4 +// movdqa [rsp + KTRAP_FRAME_Xmm5], xmm5 /* Save cs and previous mode */ mov ax, cs @@ -45,13 +45,13 @@ _KdbEnter: /* Save segment selectors */ mov ax, ds - mov [rbp + KTRAP_FRAME_SegDs], ax + mov [rsp + KTRAP_FRAME_SegDs], ax mov ax, es - mov [rbp + KTRAP_FRAME_SegEs], ax + mov [rsp + KTRAP_FRAME_SegEs], ax mov ax, fs - mov [rbp + KTRAP_FRAME_SegFs], ax + mov [rsp + KTRAP_FRAME_SegFs], ax mov ax, gs - mov [rbp + KTRAP_FRAME_SegGs], ax + mov [rsp + KTRAP_FRAME_SegGs], ax /* Save previous irql */ mov rax, cr8 @@ -71,16 +71,16 @@ _KdbEnter: mov rax, dr7 mov [rsp + KTRAP_FRAME_Dr7], rax - /* Point rbp, where rsp was initially */ - lea rbp, [rsp + SIZE_KTRAP_FRAME + 8] + /* Point rbp, where rsp was before */ + lea rbp, [rsp + SIZE_KTRAP_FRAME] mov [rsp + KTRAP_FRAME_Rsp], rbp /* Store the EFLAGS we previously pushed on the stack */ - mov rax, [rbp] + mov rax, [rbp + 8] mov [rsp + KTRAP_FRAME_EFlags], rax /* Get RIP from the stack */ - mov rax, [rbp + 8] + mov rax, [rbp + 16] mov [rsp + KTRAP_FRAME_Rip], rax /* Make sure the direction flag is cleared */ @@ -124,4 +124,29 @@ _KdbEnter: /* Restore RSP */ mov rsp, [rsp + KTRAP_FRAME_Rsp] - iret + /* Restore EFLAGS */ + popfq + + ret + +.globl _KdbpStackSwitchAndCall +_KdbpStackSwitchAndCall: + + /* Save old stack */ + mov rax, rsp + + /* Set new stack */ + mov rsp, rcx + + /* Save old stack on new stack */ + push rax + + /* Call function */ + call rdx + + /* Restire old stack */ + pop rax + mov rsp, rax + + /* Return */ + ret \ No newline at end of file diff --git a/reactos/ntoskrnl/kdbg/amd64/setjmp.S b/reactos/ntoskrnl/kdbg/amd64/setjmp.S new file mode 100644 index 00000000000..8a973342b5e --- /dev/null +++ b/reactos/ntoskrnl/kdbg/amd64/setjmp.S @@ -0,0 +1,118 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS system libraries + * PURPOSE: Implementation of _setjmp/longjmp + * FILE: lib/sdk/crt/setjmp/amd64/setjmp.s + * PROGRAMMER: Timo Kreuzer (timo.kreuzer@reactos.org) + */ + +/* INCLUDES ******************************************************************/ + +#include +#include + +.intel_syntax noprefix + +#define JUMP_BUFFER_Frame 0x00 +#define JUMP_BUFFER_Rbx 0x08 +#define JUMP_BUFFER_Rsp 0x10 +#define JUMP_BUFFER_Rbp 0x18 +#define JUMP_BUFFER_Rsi 0x20 +#define JUMP_BUFFER_Rdi 0x28 +#define JUMP_BUFFER_R12 0x30 +#define JUMP_BUFFER_R13 0x38 +#define JUMP_BUFFER_R14 0x40 +#define JUMP_BUFFER_R15 0x48 +#define JUMP_BUFFER_Rip 0x50 +#define JUMP_BUFFER_Spare 0x58 +#define JUMP_BUFFER_Xmm6 0x60 +#define JUMP_BUFFER_Xmm7 0x70 +#define JUMP_BUFFER_Xmm8 0x80 +#define JUMP_BUFFER_Xmm9 0x90 +#define JUMP_BUFFER_Xmm10 0xa0 +#define JUMP_BUFFER_Xmm11 0xb0 +#define JUMP_BUFFER_Xmm12 0xc0 +#define JUMP_BUFFER_Xmm13 0xd0 +#define JUMP_BUFFER_Xmm14 0xe0 +#define JUMP_BUFFER_Xmm15 0xf0 + + +/* FUNCTIONS ******************************************************************/ + +/* + * int _setjmp(jmp_buf env); + * + * Parameters: - jmp_buf env + * Returns: 0 + * Notes: Sets up the jmp_buf + */ +.globl _setjmp +_setjmp: + /* Load rsp as it was before the call into rax */ + lea rax, [rsp + 8] + /* Load return address into r8 */ + mov r8, [rsp] + mov qword ptr [rcx + JUMP_BUFFER_Frame], 0 + mov [rcx + JUMP_BUFFER_Rbx], rbx + mov [rcx + JUMP_BUFFER_Rbp], rbp + mov [rcx + JUMP_BUFFER_Rsi], rsi + mov [rcx + JUMP_BUFFER_Rdi], rdi + mov [rcx + JUMP_BUFFER_R12], r12 + mov [rcx + JUMP_BUFFER_R13], r13 + mov [rcx + JUMP_BUFFER_R14], r14 + mov [rcx + JUMP_BUFFER_R15], r15 + mov [rcx + JUMP_BUFFER_Rsp], rax + mov [rcx + JUMP_BUFFER_Rip], r8 + movdqa [rcx + JUMP_BUFFER_Xmm6], xmm6 + movdqa [rcx + JUMP_BUFFER_Xmm7], xmm7 + movdqa [rcx + JUMP_BUFFER_Xmm8], xmm8 + movdqa [rcx + JUMP_BUFFER_Xmm9], xmm9 + movdqa [rcx + JUMP_BUFFER_Xmm10], xmm10 + movdqa [rcx + JUMP_BUFFER_Xmm11], xmm11 + movdqa [rcx + JUMP_BUFFER_Xmm12], xmm12 + movdqa [rcx + JUMP_BUFFER_Xmm13], xmm13 + movdqa [rcx + JUMP_BUFFER_Xmm14], xmm14 + movdqa [rcx + JUMP_BUFFER_Xmm15], xmm15 + xor rax, rax + ret + +/* + * void longjmp(jmp_buf env, int value); + * + * Parameters: - jmp_buf setup by _setjmp + * - int value to return + * Returns: Doesn't return + * Notes: Non-local goto + */ +.proc longjmp + + // FIXME: handle frame + + mov rbx, [rcx + JUMP_BUFFER_Rbx] + mov rbp, [rcx + JUMP_BUFFER_Rbp] + mov rsi, [rcx + JUMP_BUFFER_Rsi] + mov rdi, [rcx + JUMP_BUFFER_Rdi] + mov r12, [rcx + JUMP_BUFFER_R12] + mov r13, [rcx + JUMP_BUFFER_R13] + mov r14, [rcx + JUMP_BUFFER_R14] + mov r15, [rcx + JUMP_BUFFER_R15] + mov rsp, [rcx + JUMP_BUFFER_Rsp] + mov r8, [rcx + JUMP_BUFFER_Rip] + movdqa xmm6, [rcx + JUMP_BUFFER_Xmm6] + movdqa xmm7, [rcx + JUMP_BUFFER_Xmm7] + movdqa xmm8, [rcx + JUMP_BUFFER_Xmm8] + movdqa xmm9, [rcx + JUMP_BUFFER_Xmm9] + movdqa xmm10, [rcx + JUMP_BUFFER_Xmm10] + movdqa xmm11, [rcx + JUMP_BUFFER_Xmm11] + movdqa xmm12, [rcx + JUMP_BUFFER_Xmm12] + movdqa xmm13, [rcx + JUMP_BUFFER_Xmm13] + movdqa xmm14, [rcx + JUMP_BUFFER_Xmm14] + movdqa xmm15, [rcx + JUMP_BUFFER_Xmm15] + + /* return param2 or 1 if it was 0 */ + mov rax, rdx + test rax, rax + jnz 2f + inc rax +2: jmp r8 +.endproc diff --git a/reactos/ntoskrnl/kdbg/kdb.c b/reactos/ntoskrnl/kdbg/kdb.c index 7798eaa1e6e..1975bb93b8b 100644 --- a/reactos/ntoskrnl/kdbg/kdb.c +++ b/reactos/ntoskrnl/kdbg/kdb.c @@ -125,7 +125,7 @@ VOID NTAPI KiEspToTrapFrame( IN PKTRAP_FRAME TrapFrame, - IN ULONG Esp); + IN ULONG_PTR Esp); /* ROS Internal. Please deprecate */ NTHALAPI @@ -140,14 +140,18 @@ KdbpTrapFrameToKdbTrapFrame( PKTRAP_FRAME TrapFrame, PKDB_KTRAP_FRAME KdbTrapFrame) { - ULONG TrapCr0, TrapCr2, TrapCr3, TrapCr4; + ULONG_PTR TrapCr0, TrapCr2, TrapCr3, TrapCr4; +#if defined(_M_IX86) /* Copy the TrapFrame only up to Eflags and zero the rest*/ RtlCopyMemory(&KdbTrapFrame->Tf, TrapFrame, FIELD_OFFSET(KTRAP_FRAME, HardwareEsp)); RtlZeroMemory((PVOID)((ULONG_PTR)&KdbTrapFrame->Tf + FIELD_OFFSET(KTRAP_FRAME, HardwareEsp)), sizeof(KTRAP_FRAME) - FIELD_OFFSET(KTRAP_FRAME, HardwareEsp)); +#elif defined(_M_AMD64) + RtlCopyMemory(&KdbTrapFrame->Tf, TrapFrame, sizeof(KTRAP_FRAME)); +#endif -#ifndef _MSC_VER +#if defined(__GNUC__) && defined(_M_IX86) asm volatile( "movl %%cr0, %0" "\n\t" "movl %%cr2, %1" "\n\t" @@ -155,7 +159,7 @@ KdbpTrapFrameToKdbTrapFrame( "movl %%cr4, %3" "\n\t" : "=r"(TrapCr0), "=r"(TrapCr2), "=r"(TrapCr3), "=r"(TrapCr4)); -#else +#elif defined(_MSC_VER) && defined(_M_IX86) __asm { mov eax, cr0; @@ -170,6 +174,16 @@ KdbpTrapFrameToKdbTrapFrame( //mov eax, cr4; //mov TrapCr4, eax; } +#elif defined(__GNUC__) && defined(_M_AMD64) + asm volatile( + "movq %%cr0, %0" "\n\t" + "movq %%cr2, %1" "\n\t" + "movq %%cr3, %2" "\n\t" + "movq %%cr4, %3" "\n\t" + : "=r"(TrapCr0), "=r"(TrapCr2), + "=r"(TrapCr3), "=r"(TrapCr4)); +#else +#error UNSUPPORTED ARCHITECTURE #endif KdbTrapFrame->Cr0 = TrapCr0; @@ -177,9 +191,13 @@ KdbpTrapFrameToKdbTrapFrame( KdbTrapFrame->Cr3 = TrapCr3; KdbTrapFrame->Cr4 = TrapCr4; +#ifdef _M_IX86 KdbTrapFrame->Tf.HardwareEsp = KiEspFromTrapFrame(TrapFrame); KdbTrapFrame->Tf.HardwareSegSs = (USHORT)(KiSsFromTrapFrame(TrapFrame) & 0xFFFF); - +#elif defined(_M_AMD64) + //KdbTrapFrame->Tf.Rsp = KiEspFromTrapFrame(TrapFrame); + //KdbTrapFrame->Tf.SegGs = (USHORT)(KiSsFromTrapFrame(TrapFrame) & 0xFFFF); +#endif /* FIXME: copy v86 registers if TrapFrame is a V86 trapframe */ } @@ -190,6 +208,7 @@ KdbpKdbTrapFrameToTrapFrame( PKTRAP_FRAME TrapFrame) { /* Copy the TrapFrame only up to Eflags and zero the rest*/ +#ifdef _M_IX86 RtlCopyMemory(TrapFrame, &KdbTrapFrame->Tf, FIELD_OFFSET(KTRAP_FRAME, HardwareEsp)); /* FIXME: write cr0, cr2, cr3 and cr4 (not needed atm) */ @@ -198,6 +217,13 @@ KdbpKdbTrapFrameToTrapFrame( KiEspToTrapFrame(TrapFrame, KdbTrapFrame->Tf.HardwareEsp); /* FIXME: copy v86 registers if TrapFrame is a V86 trapframe */ + +#elif defined(_M_AMD64) + RtlCopyMemory(TrapFrame, &KdbTrapFrame->Tf, sizeof(KTRAP_FRAME)); + //KiSsToTrapFrame(TrapFrame, KdbTrapFrame->Tf.SegSs); + //KiEspToTrapFrame(TrapFrame, KdbTrapFrame->Tf.Rsp); + +#endif } static VOID @@ -209,7 +235,7 @@ KdbpKdbTrapFrameFromKernelStack( RtlZeroMemory(KdbTrapFrame, sizeof(KDB_KTRAP_FRAME)); StackPtr = (ULONG_PTR *) KernelStack; -#if _M_X86_ +#ifdef _M_IX86 KdbTrapFrame->Tf.Ebp = StackPtr[3]; KdbTrapFrame->Tf.Edi = StackPtr[4]; KdbTrapFrame->Tf.Esi = StackPtr[5]; @@ -221,6 +247,18 @@ KdbpKdbTrapFrameFromKernelStack( KdbTrapFrame->Tf.SegDs = KGDT_R0_DATA; KdbTrapFrame->Tf.SegEs = KGDT_R0_DATA; KdbTrapFrame->Tf.SegGs = KGDT_R0_DATA; +#elif defined(_M_AMD64) + KdbTrapFrame->Tf.Rbp = StackPtr[3]; + KdbTrapFrame->Tf.Rdi = StackPtr[4]; + KdbTrapFrame->Tf.Rsi = StackPtr[5]; + KdbTrapFrame->Tf.Rbx = StackPtr[6]; + KdbTrapFrame->Tf.Rip = StackPtr[7]; + KdbTrapFrame->Tf.Rsp = (ULONG_PTR) (StackPtr + 16); + KdbTrapFrame->Tf.SegSs = KGDT_64_R0_SS; + KdbTrapFrame->Tf.SegCs = KGDT_64_R0_CODE; + KdbTrapFrame->Tf.SegDs = KGDT_64_DATA; + KdbTrapFrame->Tf.SegEs = KGDT_64_DATA; + KdbTrapFrame->Tf.SegGs = KGDT_64_DATA; #endif /* FIXME: what about the other registers??? */ @@ -423,7 +461,7 @@ KdbpStepIntoInstruction( } /* Get the interrupt descriptor */ - if (!NT_SUCCESS(KdbpSafeReadMemory(IntDesc, (PVOID)(ULONG_PTR)(Idtr.Base + (IntVect * 8)), sizeof (IntDesc)))) + if (!NT_SUCCESS(KdbpSafeReadMemory(IntDesc, (PVOID)(ULONG_PTR)((ULONG_PTR)Idtr.Base + (IntVect * 8)), sizeof (IntDesc)))) { /*KdbpPrint("Couldn't access memory at 0x%p\n", (ULONG_PTR)Idtr.Base + (IntVect * 8));*/ return FALSE; @@ -1244,7 +1282,7 @@ KdbpInternalEnter() { PETHREAD Thread; PVOID SavedInitialStack, SavedStackBase, SavedKernelStack; - ULONG SavedStackLimit; + ULONG_PTR SavedStackLimit; KbdDisableMouse(); if (KdpDebugMode.Screen) @@ -1262,7 +1300,7 @@ KdbpInternalEnter() Thread->Tcb.StackLimit = (ULONG_PTR)KdbStack; Thread->Tcb.KernelStack = (char*)KdbStack + KDB_STACK_SIZE; - /*KdbpPrint("Switching to KDB stack 0x%08x-0x%08x (Current Stack is 0x%08x)\n", Thread->Tcb.StackLimit, Thread->Tcb.StackBase, Esp);*/ + //KdbpPrint("Switching to KDB stack 0x%p-0x%p\n", Thread->Tcb.StackLimit, Thread->Tcb.StackBase); KdbpStackSwitchAndCall(KdbStack + KDB_STACK_SIZE - sizeof(ULONG), KdbpCallMainLoop); @@ -1351,7 +1389,7 @@ KdbEnterDebuggerException( ULONGLONG ull; BOOLEAN Resume = FALSE; BOOLEAN EnterConditionMet = TRUE; - ULONG OldEflags; + ULONG_PTR OldEflags; NTSTATUS ExceptionCode; ExceptionCode = (ExceptionRecord ? ExceptionRecord->ExceptionCode : STATUS_BREAKPOINT); @@ -1463,12 +1501,12 @@ KdbEnterDebuggerException( if (BreakPoint->Type == KdbBreakPointSoftware) { - KdbpPrint("Entered debugger on breakpoint #%d: EXEC 0x%04x:0x%08x\n", + KdbpPrint("Entered debugger on breakpoint #%d: EXEC 0x%04x:0x%p\n", KdbLastBreakPointNr, TrapFrame->SegCs & 0xffff, TrapFrame->Eip); } else if (BreakPoint->Type == KdbBreakPointHardware) { - KdbpPrint("Entered debugger on breakpoint #%d: %s 0x%08x\n", + KdbpPrint("Entered debugger on breakpoint #%d: %s 0x%p\n", KdbLastBreakPointNr, (BreakPoint->Data.Hw.AccessType == KdbAccessRead) ? "READ" : ((BreakPoint->Data.Hw.AccessType == KdbAccessWrite) ? "WRITE" : @@ -1551,7 +1589,7 @@ KdbEnterDebuggerException( return kdHandleException; } - KdbpPrint("Entered debugger on embedded INT3 at 0x%04x:0x%08x.\n", + KdbpPrint("Entered debugger on embedded INT3 at 0x%04x:0x%p.\n", TrapFrame->SegCs & 0xffff, TrapFrame->Eip - 1); } else @@ -1576,8 +1614,12 @@ KdbEnterDebuggerException( ULONG Err; TrapCr2 = __readcr2(); - +#ifdef _M_IX86 Err = TrapFrame->ErrCode; +#elif defined(_M_AMD64) + Err = TrapFrame->ErrorCode; +#endif + KdbpPrint("Memory at 0x%p could not be %s: ", TrapCr2, (Err & (1 << 1)) ? "written" : "read"); if ((Err & (1 << 0)) == 0) @@ -1760,4 +1802,4 @@ KdbpSafeWriteMemory( Result = FALSE; return Result ? STATUS_SUCCESS : STATUS_ACCESS_VIOLATION; -} +} \ No newline at end of file diff --git a/reactos/ntoskrnl/kdbg/kdb.h b/reactos/ntoskrnl/kdbg/kdb.h index 32785a5c26f..78d610e78b9 100644 --- a/reactos/ntoskrnl/kdbg/kdb.h +++ b/reactos/ntoskrnl/kdbg/kdb.h @@ -7,17 +7,25 @@ # define RTL_NUMBER_OF(x) (sizeof(x) / sizeof((x)[0])) #endif +//hack to avoid a hundred ifdefs +#ifdef _M_IX86 +#define Eip Eip +#elif defined(_M_AMD64) +#define Eip Rip +#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; + ULONG_PTR Cr0; + ULONG_PTR Cr1; /* reserved/unused */ + ULONG_PTR Cr2; + ULONG_PTR Cr3; + ULONG_PTR Cr4; } KDB_KTRAP_FRAME, *PKDB_KTRAP_FRAME; typedef enum _KDB_BREAKPOINT_TYPE @@ -78,12 +86,12 @@ typedef enum _KDB_OUTPUT_SETTINGS LONG KdbpDisassemble( - IN ULONG Address, + IN ULONG_PTR Address, IN ULONG IntelSyntax); LONG KdbpGetInstLength( - IN ULONG Address); + IN ULONG_PTR Address); /* from i386/kdb_help.S */ @@ -265,5 +273,4 @@ KbdDisableMouse(); VOID KbdEnableMouse(); -#endif /* NTOSKRNL_KDB_H */ - +#endif /* NTOSKRNL_KDB_H */ \ No newline at end of file diff --git a/reactos/ntoskrnl/kdbg/kdb_cli.c b/reactos/ntoskrnl/kdbg/kdb_cli.c index 4c6e4151527..b2d646e45ad 100644 --- a/reactos/ntoskrnl/kdbg/kdb_cli.c +++ b/reactos/ntoskrnl/kdbg/kdb_cli.c @@ -34,6 +34,9 @@ #include /* DEFINES *******************************************************************/ +//hack for amd64 +#define NPX_STATE_NOT_LOADED 0xA +#define NPX_STATE_LOADED 0x0 #define KEY_BS 8 #define KEY_ESC 27 @@ -557,7 +560,7 @@ KdbpCmdDisassembleX( if (!NT_SUCCESS(KdbpSafeReadMemory(&ul, (PVOID)Address, sizeof(ul)))) KdbpPrint(" ????????"); else - KdbpPrint(" %08x", ul); + KdbpPrint(" %x", ul); Address += sizeof(ul); } @@ -571,7 +574,7 @@ KdbpCmdDisassembleX( while (Count-- > 0) { if (!KdbSymPrintAddress((PVOID)Address)) - KdbpPrint("<%08x>: ", Address); + KdbpPrint("<%x>: ", Address); else KdbpPrint(": "); @@ -599,16 +602,26 @@ KdbpCmdRegs( { PKTRAP_FRAME Tf = &KdbCurrentTrapFrame->Tf; INT i; - static const PCHAR EflagsBits[32] = { " CF", NULL, " PF", " BIT3", " AF", " BIT5", + const PCHAR EflagsBits[64] = { " CF", NULL, " PF", " BIT3", " AF", " BIT5", " ZF", " SF", " TF", " IF", " DF", " OF", NULL, NULL, " NT", " BIT15", " RF", " VF", " AC", " VIF", " VIP", " ID", " BIT22", " BIT23", " BIT24", " BIT25", " BIT26", " BIT27", " BIT28", " BIT29", " BIT30", - " BIT31" }; + " BIT31", " BIT32", " BIT33", " BIT34", + " BIT35", " BIT36", " BIT37", " BIT38", + " BIT39", " BIT40", " BIT41", " BIT42", + " BIT43", " BIT44", " BIT45", " BIT46", + " BIT47", " BIT48", " BIT49", " BIT50", + " BIT51", " BIT52", " BIT53", " BIT54", + " BIT55", " BIT56", " BIT57", " BIT58", + " BIT59", " BIT60", " BIT61", " BIT62", + " BIT63", + }; if (Argv[0][0] == 'r') /* regs */ { + #ifdef _M_IX86 KdbpPrint("CS:EIP 0x%04x:0x%08x\n" "SS:ESP 0x%04x:0x%08x\n" " EAX 0x%08x EBX 0x%08x\n" @@ -621,9 +634,31 @@ KdbpCmdRegs( Tf->Ecx, Tf->Edx, Tf->Esi, Tf->Edi, Tf->Ebp); +#elif defined(_M_AMD64) + KdbpPrint("CS:RIP 0x%04x:0x%p\n" + "SS:RSP 0x%04x:0x%p\n" + " RAX 0x%p RBX 0x%p\n" + " RCX 0x%p RDX 0x%p\n" + " RSI 0x%p RDI 0x%p\n" + " RBP 0x%p R8 0x%p\n" + " R9 0x%p R10 0x%p\n" + " R11 0x%p\n", + Tf->SegCs & 0xFFFF, Tf->Rip, + Tf->SegSs, Tf->Rsp, + Tf->Rax, Tf->Rbx, + Tf->Rcx, Tf->Rdx, + Tf->Rsi, Tf->Rdi, + Tf->Rbp, Tf->R8, + Tf->R9, Tf->R10, + Tf->R11); +#endif KdbpPrint("EFLAGS 0x%08x ", Tf->EFlags); +#ifdef _M_IX86 for (i = 0; i < 32; i++) +#elif defined(_M_AMD64) + for (i = 0; i < 64; i++) +#endif { if (i == 1) { @@ -647,9 +682,15 @@ KdbpCmdRegs( } else if (Argv[0][0] == 'c') /* cregs */ { - ULONG Cr0, Cr2, Cr3, Cr4; + ULONG_PTR Cr0, Cr2, Cr3, Cr4; KDESCRIPTOR Gdtr, Idtr; +#if defined(_M_IX86) USHORT Ldtr; + Ke386GetGlobalDescriptorTable(&Gdtr.Limit); + Ldtr = Ke386GetLocalDescriptorTable(); +#elif defined(_M_AMD64) + __sgdt(&Gdtr.Limit); +#endif static const PCHAR Cr0Bits[32] = { " PE", " MP", " EM", " TS", " ET", " NE", NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, " WP", NULL, " AM", NULL, NULL, NULL, NULL, NULL, @@ -664,13 +705,11 @@ KdbpCmdRegs( Cr3 = KdbCurrentTrapFrame->Cr3; Cr4 = KdbCurrentTrapFrame->Cr4; - /* Get descriptor table regs */ - Ke386GetGlobalDescriptorTable(&Gdtr.Limit); - Ldtr = Ke386GetLocalDescriptorTable(); + /* Get interrupt descriptor table regs */ __sidt(&Idtr.Limit); /* Display the control registers */ - KdbpPrint("CR0 0x%08x ", Cr0); + KdbpPrint("CR0 0x%p ", Cr0); for (i = 0; i < 32; i++) { @@ -681,10 +720,10 @@ KdbpCmdRegs( KdbpPrint(Cr0Bits[i]); } - KdbpPrint("\nCR2 0x%08x\n", Cr2); - KdbpPrint("CR3 0x%08x Pagedir-Base 0x%08x %s%s\n", Cr3, (Cr3 & 0xfffff000), + KdbpPrint("\nCR2 0x%p\n", Cr2); + KdbpPrint("CR3 0x%p Pagedir-Base 0x%p %s%s\n", Cr3, (Cr3 & 0xfffff000), (Cr3 & (1 << 3)) ? " PWT" : "", (Cr3 & (1 << 4)) ? " PCD" : "" ); - KdbpPrint("CR4 0x%08x ", Cr4); + KdbpPrint("CR4 0x%p ", Cr4); for (i = 0; i < 32; i++) { @@ -696,9 +735,11 @@ KdbpCmdRegs( } /* Display the descriptor table regs */ - KdbpPrint("\nGDTR Base 0x%08x Size 0x%04x\n", Gdtr.Base, Gdtr.Limit); - KdbpPrint("LDTR 0x%04x\n", Ldtr); - KdbpPrint("IDTR Base 0x%08x Size 0x%04x\n", Idtr.Base, Idtr.Limit); + KdbpPrint("\nGDTR Base 0x%p Size 0x%04x\n", Gdtr.Base, Gdtr.Limit); +#ifdef _M_IX86 + KdbpPrint("LDTR 0x%p\n", Ldtr); +#endif + KdbpPrint("IDTR Base 0x%p Size 0x%04x\n", Idtr.Base, Idtr.Limit); } else if (Argv[0][0] == 's') /* sregs */ { @@ -713,18 +754,24 @@ KdbpCmdRegs( Tf->SegFs, Tf->SegFs >> 3, (Tf->SegFs & (1 << 2)) ? 'L' : 'G', Tf->SegFs & 3); KdbpPrint("GS 0x%04x Index 0x%04x %cDT RPL%d\n", Tf->SegGs, Tf->SegGs >> 3, (Tf->SegGs & (1 << 2)) ? 'L' : 'G', Tf->SegGs & 3); +#ifdef _M_IX86 KdbpPrint("SS 0x%04x Index 0x%04x %cDT RPL%d\n", Tf->HardwareSegSs, Tf->HardwareSegSs >> 3, (Tf->HardwareSegSs & (1 << 2)) ? 'L' : 'G', Tf->HardwareSegSs & 3); +#else + KdbpPrint("SS 0x%04x Index 0x%04x %cDT RPL%d\n", + Tf->SegSs, Tf->SegSs >> 3, (Tf->SegSs & (1 << 2)) ? 'L' : 'G', Tf->SegSs & 3); +#endif + } else /* dregs */ { ASSERT(Argv[0][0] == 'd'); - KdbpPrint("DR0 0x%08x\n" - "DR1 0x%08x\n" - "DR2 0x%08x\n" - "DR3 0x%08x\n" - "DR6 0x%08x\n" - "DR7 0x%08x\n", + KdbpPrint("DR0 0x%p\n" + "DR1 0x%p\n" + "DR2 0x%p\n" + "DR3 0x%p\n" + "DR6 0x%p\n" + "DR7 0x%p\n", Tf->Dr0, Tf->Dr1, Tf->Dr2, Tf->Dr3, Tf->Dr6, Tf->Dr7); } @@ -742,7 +789,11 @@ KdbpCmdBackTrace( ULONG Count; ULONG ul; ULONGLONG Result = 0; +#ifdef _M_IX86 ULONG_PTR Frame = KdbCurrentTrapFrame->Tf.Ebp; +#elif defined(_M_AMD64) + ULONG_PTR Frame = KdbCurrentTrapFrame->Tf.Rbp; +#endif ULONG_PTR Address; if (Argc >= 2) @@ -806,7 +857,7 @@ KdbpCmdBackTrace( /* Try printing the function at EIP */ if (!KdbSymPrintAddress((PVOID)KdbCurrentTrapFrame->Tf.Eip)) - KdbpPrint("<%08x>\n", KdbCurrentTrapFrame->Tf.Eip); + KdbpPrint("<%x>\n", KdbCurrentTrapFrame->Tf.Eip); else KdbpPrint("\n"); } @@ -824,7 +875,7 @@ KdbpCmdBackTrace( } if (!KdbSymPrintAddress((PVOID)Address)) - KdbpPrint("<%08x>\n", Address); + KdbpPrint("<%x>\n", Address); else KdbpPrint("\n"); @@ -936,7 +987,7 @@ KdbpCmdBreakPointList( { GlobalOrLocal = Buffer; sprintf(Buffer, " PID 0x%08lx", - (ULONG)(Process ? Process->UniqueProcessId : INVALID_HANDLE_VALUE)); + (ULONG_PTR)(Process ? Process->UniqueProcessId : INVALID_HANDLE_VALUE)); } if (Type == KdbBreakPointSoftware || Type == KdbBreakPointTemporary) @@ -1082,6 +1133,8 @@ KdbpCmdBreakPoint(ULONG Argc, PCHAR Argv[]) Size = 2; else if (_stricmp(Argv[2], "dword") == 0) Size = 4; + else if (_stricmp(Argv[2], "qword") == 0) + Size = 8; else if (AccessType == KdbAccessExec) { Size = 1; @@ -1155,10 +1208,10 @@ KdbpCmdThread( PETHREAD Thread = NULL; PEPROCESS Process = NULL; BOOLEAN ReferencedThread = FALSE, ReferencedProcess = FALSE; - PULONG Esp; - PULONG Ebp; - ULONG Eip; - ULONG ul = 0; + PULONG_PTR Esp; + PULONG_PTR Ebp; + ULONG_PTR Eip; + ULONG_PTR ul = 0; PCHAR State, pend, str1, str2; static const PCHAR ThreadStateToString[DeferredReady+1] = { @@ -1224,6 +1277,7 @@ KdbpCmdThread( if (Thread->Tcb.TrapFrame) { +#ifdef _M_IX86 if (Thread->Tcb.TrapFrame->PreviousPreviousMode == KernelMode) Esp = (PULONG)Thread->Tcb.TrapFrame->TempEsp; else @@ -1231,11 +1285,18 @@ KdbpCmdThread( Ebp = (PULONG)Thread->Tcb.TrapFrame->Ebp; Eip = Thread->Tcb.TrapFrame->Eip; + +#elif defined(_M_AMD64) + Esp = (PULONG_PTR)Thread->Tcb.TrapFrame->Rsp; + + Ebp = (PULONG_PTR)Thread->Tcb.TrapFrame->Rbp; + Eip = Thread->Tcb.TrapFrame->Eip; +#endif } else { - Esp = (PULONG)Thread->Tcb.KernelStack; - Ebp = (PULONG)Esp[4]; + Esp = (PULONG_PTR)Thread->Tcb.KernelStack; + Ebp = (PULONG_PTR)Esp[4]; Eip = 0; if (Ebp) /* FIXME: Should we attach to the process to read Ebp[1]? */ @@ -1247,7 +1308,7 @@ KdbpCmdThread( else State = "Unknown"; - KdbpPrint(" %s0x%08x %-11s %3d 0x%08x 0x%08x 0x%08x%s\n", + KdbpPrint(" %s0x%p %-11s %3d 0x%p 0x%p 0x%p%s\n", str1, Thread->Cid.UniqueThread, State, @@ -1320,11 +1381,11 @@ KdbpCmdThread( " State: %s (0x%x)\n" " Priority: %d\n" " Affinity: 0x%08x\n" - " Initial Stack: 0x%08x\n" - " Stack Limit: 0x%08x\n" - " Stack Base: 0x%08x\n" - " Kernel Stack: 0x%08x\n" - " Trap Frame: 0x%08x\n" + " Initial Stack: 0x%p\n" + " Stack Limit: 0x%p\n" + " Stack Base: 0x%p\n" + " Kernel Stack: 0x%p\n" + " Trap Frame: 0x%p\n" " NPX State: %s (0x%x)\n", (Argc < 2) ? "Current Thread:\n" : "", Thread->Cid.UniqueThread, @@ -1357,7 +1418,7 @@ KdbpCmdProc( PEPROCESS Process; BOOLEAN ReferencedProcess = FALSE; PCHAR State, pend, str1, str2; - ULONG ul; + ULONG_PTR ul; extern LIST_ENTRY PsActiveProcessHead; if (Argc >= 2 && _stricmp(Argv[1], "list") == 0) @@ -1419,8 +1480,8 @@ KdbpCmdProc( return TRUE; } - KdbpPrint("Attached to process 0x%08x, thread 0x%08x.\n", (ULONG)ul, - (ULONG)KdbCurrentThread->Cid.UniqueThread); + KdbpPrint("Attached to process 0x%x, thread 0x%x.\n", ul, + (ULONG_PTR)KdbCurrentThread->Cid.UniqueThread); } else { @@ -1509,7 +1570,7 @@ KdbpCmdMod( { ULONG_PTR ntoskrnlBase = ((ULONG_PTR)KdbpCmdMod) & 0xfff00000; KdbpPrint(" Base Size Name\n"); - KdbpPrint(" %08x %08x %s\n", ntoskrnlBase, 0, "ntoskrnl.exe"); + KdbpPrint(" %p %x %s\n", ntoskrnlBase, 0, "ntoskrnl.exe"); return TRUE; } @@ -1519,7 +1580,7 @@ KdbpCmdMod( KdbpPrint(" Base Size Name\n"); for (;;) { - KdbpPrint(" %08x %08x %wZ\n", LdrEntry->DllBase, LdrEntry->SizeOfImage, &LdrEntry->BaseDllName); + KdbpPrint(" %p %x %wZ\n", LdrEntry->DllBase, LdrEntry->SizeOfImage, &LdrEntry->BaseDllName); if(DisplayOnlyOneModule || !KdbpSymFindModule(NULL, NULL, i++, &LdrEntry)) break; @@ -1561,9 +1622,9 @@ KdbpCmdGdtLdtIdt( for (i = 0; (i + sizeof(SegDesc) - 1) <= Reg.Limit; i += 8) { - if (!NT_SUCCESS(KdbpSafeReadMemory(SegDesc, (PVOID)(Reg.Base + i), sizeof(SegDesc)))) + if (!NT_SUCCESS(KdbpSafeReadMemory(SegDesc, (PVOID)((ULONG_PTR)Reg.Base + i), sizeof(SegDesc)))) { - KdbpPrint("Couldn't access memory at 0x%08x!\n", Reg.Base + i); + KdbpPrint("Couldn't access memory at 0x%08x!\n", (ULONG_PTR)Reg.Base + i); return TRUE; } @@ -1608,7 +1669,11 @@ KdbpCmdGdtLdtIdt( if (Argv[0][0] == 'g') { /* Read GDTR */ +#ifdef _M_IX86 Ke386GetGlobalDescriptorTable(&Reg.Limit); +#elif defined(_M_AMD64) + __sgdt(&Reg.Limit); +#endif i = 8; } else @@ -1616,7 +1681,11 @@ KdbpCmdGdtLdtIdt( ASSERT(Argv[0][0] == 'l'); /* Read LDTR */ +#ifdef _M_IX86 Reg.Limit = Ke386GetLocalDescriptorTable(); +#elif defined(_M_AMD64) + __sldt(&Reg.Limit); +#endif Reg.Base = 0; i = 0; ul = 1 << 2; @@ -1635,9 +1704,9 @@ KdbpCmdGdtLdtIdt( for (; (i + sizeof(SegDesc) - 1) <= Reg.Limit; i += 8) { - if (!NT_SUCCESS(KdbpSafeReadMemory(SegDesc, (PVOID)(Reg.Base + i), sizeof(SegDesc)))) + if (!NT_SUCCESS(KdbpSafeReadMemory(SegDesc, (PVOID)((ULONG_PTR)Reg.Base + i), sizeof(SegDesc)))) { - KdbpPrint("Couldn't access memory at 0x%08x!\n", Reg.Base + i); + KdbpPrint("Couldn't access memory at 0x%08x!\n", (ULONG_PTR)Reg.Base + i); return TRUE; } @@ -1756,6 +1825,7 @@ KdbpCmdPcr( { PKIPCR Pcr = (PKIPCR)KeGetPcr(); +#ifdef _M_IX86 KdbpPrint("Current PCR is at 0x%08x.\n", (INT)Pcr); KdbpPrint(" Tib.ExceptionList: 0x%08x\n" " Tib.StackBase: 0x%08x\n" @@ -1790,7 +1860,35 @@ KdbpCmdPcr( Pcr->MajorVersion, Pcr->MinorVersion, Pcr->SetMember, Pcr->StallScaleFactor, Pcr->Number, Pcr->L2CacheAssociativity, Pcr->VdmAlert, Pcr->SecondLevelCacheSize, Pcr->InterruptMode); - +#elif defined(_M_AMD64) + KdbpPrint("Current PCR is at 0x%x.\n", (INT_PTR)Pcr); + KdbpPrint(" Tib.ExceptionList: 0x%x\n" + " Tib.StackBase: 0x%x\n" + " Tib.StackLimit: 0x%x\n" + " Tib.SubSystemTib: 0x%x\n" + " Tib.FiberData/Version: 0x%x\n" + " Tib.ArbitraryUserPointer: 0x%x\n" + " Tib.Self: 0x%x\n" + " Self: 0x%x\n" + " PCRCB: 0x%x\n" + " Irql: 0x%x\n" + " KdVersionBlock: 0x%08x\n" + " IDT: 0x%08x\n" + " GDT: 0x%08x\n" + " TSS: 0x%08x\n" + " UserRsp: 0x%08x\n" + " MajorVersion: 0x%04x\n" + " MinorVersion: 0x%04x\n" + " StallScaleFactor: 0x%08x\n" + " L2CacheAssociativity: 0x%02x\n" + " L2CacheSize: 0x%08x\n", + Pcr->NtTib.ExceptionList, Pcr->NtTib.StackBase, Pcr->NtTib.StackLimit, + Pcr->NtTib.SubSystemTib, Pcr->NtTib.FiberData, Pcr->NtTib.ArbitraryUserPointer, + Pcr->NtTib.Self, Pcr->Self, Pcr->Prcb, Pcr->Irql, + Pcr->KdVersionBlock, Pcr->IdtBase, Pcr->GdtBase, Pcr->TssBase,Pcr->UserRsp, + Pcr->MajorVersion, Pcr->MinorVersion, Pcr->StallScaleFactor, + Pcr->SecondLevelCacheAssociativity, Pcr->SecondLevelCacheSize); +#endif return TRUE; } @@ -1801,6 +1899,7 @@ KdbpCmdTss( ULONG Argc, PCHAR Argv[]) { +#ifdef _M_IX86 KTSS *Tss = KeGetPcr()->TSS; KdbpPrint("Current TSS is at 0x%08x.\n", (INT)Tss); @@ -1815,6 +1914,8 @@ KdbpCmdTss( Tss->Eip, Tss->Es, Tss->Cs, Tss->Ds, Tss->Fs, Tss->Gs, Tss->IoMapBase); return TRUE; +#endif + return FALSE; } /*!\brief Bugchecks the system. @@ -2902,7 +3003,7 @@ KdpPrompt(IN LPSTR InString, KdbpTryGetCharKeyboard(&DummyScanCode, 5); } - /* + /* * Null terminate the output string -- documentation states that * DbgPrompt does not null terminate, but it does */ @@ -2910,7 +3011,7 @@ KdpPrompt(IN LPSTR InString, /* Print a new line */ KdPortPutByteEx(&SerialPortInfo, '\r'); - KdPortPutByteEx(&SerialPortInfo, '\n'); + KdPortPutByteEx(&SerialPortInfo, '\n'); /* Release spinlock */ KiReleaseSpinLock(&KdpSerialSpinLock); @@ -2939,4 +3040,4 @@ KdpPrompt(IN LPSTR InString, /* Return the length */ return OutStringLength; -} +} \ No newline at end of file diff --git a/reactos/ntoskrnl/kdbg/kdb_expr.c b/reactos/ntoskrnl/kdbg/kdb_expr.c index c6adeae57a5..dacde63d6f3 100644 --- a/reactos/ntoskrnl/kdbg/kdb_expr.c +++ b/reactos/ntoskrnl/kdbg/kdb_expr.c @@ -72,7 +72,7 @@ RPN_OP, *PRPN_OP; typedef struct _RPN_STACK { ULONG Size; /* Number of RPN_OPs on Ops */ - ULONG Sp; /* Stack pointer */ + ULONG_PTR Sp; /* Stack pointer */ RPN_OP Ops[1]; /* Array of RPN_OPs */ } RPN_STACK, *PRPN_STACK; @@ -94,7 +94,7 @@ RPN_STACK, *PRPN_STACK; static struct { ULONG Size; - ULONG Sp; + ULONG_PTR Sp; RPN_OP Ops[RPN_OP_STACK_SIZE]; } RpnStack = @@ -106,11 +106,12 @@ RpnStack = static const struct { PCHAR Name; - UCHAR Offset; - UCHAR Size; + USHORT Offset; + USHORT Size; } RegisterToTrapFrame[] = { +#ifdef _M_IX86 {"eip", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.Eip), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.Eip)}, {"eflags", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.EFlags), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.EFlags)}, {"eax", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.Eax), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.Eax)}, @@ -137,6 +138,36 @@ RegisterToTrapFrame[] = {"cr2", FIELD_OFFSET(KDB_KTRAP_FRAME, Cr2), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Cr2)}, {"cr3", FIELD_OFFSET(KDB_KTRAP_FRAME, Cr3), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Cr3)}, {"cr4", FIELD_OFFSET(KDB_KTRAP_FRAME, Cr4), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Cr4)} +#elif defined(_M_AMD64) + {"rip", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.Rip), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.Rip)}, + {"rflags", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.EFlags), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.EFlags)}, + {"rax", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.Rax), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.Rax)}, + {"rbx", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.Rbx), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.Rbx)}, + {"rcx", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.Rcx), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.Rcx)}, + {"rdx", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.Rdx), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.Rdx)}, + {"rsi", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.Rsi), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.Rsi)}, + {"rdi", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.Rdi), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.Rdi)}, + {"r8", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.R8), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.R8)}, + {"r9", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.R9), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.R9)}, + {"r10", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.R10), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.R10)}, + {"r11", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.R11), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.R11)}, + {"cs", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.SegCs), 2 }, /* Use only the lower 2 bytes */ + {"ds", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.SegDs), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.SegDs)}, + {"es", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.SegEs), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.SegEs)}, + {"fs", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.SegFs), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.SegFs)}, + {"gs", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.SegGs), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.SegGs)}, + {"ss", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.SegSs), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.SegSs)}, + {"dr0", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.Dr0), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.Dr0)}, + {"dr1", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.Dr1), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.Dr1)}, + {"dr2", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.Dr2), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.Dr2)}, + {"dr3", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.Dr3), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.Dr3)}, + {"dr6", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.Dr6), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.Dr6)}, + {"dr7", FIELD_OFFSET(KDB_KTRAP_FRAME, Tf.Dr7), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Tf.Dr7)}, + {"cr0", FIELD_OFFSET(KDB_KTRAP_FRAME, Cr0), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Cr0)}, + {"cr2", FIELD_OFFSET(KDB_KTRAP_FRAME, Cr2), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Cr2)}, + {"cr3", FIELD_OFFSET(KDB_KTRAP_FRAME, Cr3), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Cr3)}, + {"cr4", FIELD_OFFSET(KDB_KTRAP_FRAME, Cr4), RTL_FIELD_SIZE(KDB_KTRAP_FRAME, Cr4)} +#endif }; static const INT RegisterToTrapFrameCount = sizeof (RegisterToTrapFrame) / sizeof (RegisterToTrapFrame[0]); @@ -1013,7 +1044,7 @@ RpnpEvaluateStack( if (!Ok) { - _snprintf(ErrMsg, 128, "Couldn't access memory at 0x%lx", (ULONG)p); + _snprintf(ErrMsg, 128, "Couldn't access memory at 0x%p", p); if (ErrOffset) *ErrOffset = Op->CharacterOffset; @@ -1199,4 +1230,3 @@ KdbpRpnEvaluateParsedExpression( /* Evaluate the stack */ return RpnpEvaluateStack(Stack, TrapFrame, Result, ErrOffset, ErrMsg); } - diff --git a/reactos/ntoskrnl/ke/amd64/kiinit.c b/reactos/ntoskrnl/ke/amd64/kiinit.c index e7dbf08ba73..86d44e8fd08 100644 --- a/reactos/ntoskrnl/ke/amd64/kiinit.c +++ b/reactos/ntoskrnl/ke/amd64/kiinit.c @@ -714,23 +714,13 @@ KiSystemStartupReal(IN PLOADER_PARAMETER_BLOCK LoaderBlock) if (KdPollBreakIn()) DbgBreakPointWithStatus(DBG_STATUS_CONTROL_C); /* Hack! Wait for the debugger! */ - while (!KdPollBreakIn()); + //while (!KdPollBreakIn()); - /* Display separator + ReactOS version at start of the debug log */ - DPRINT1("-----------------------------------------------------\n"); - DPRINT1("ReactOS "KERNEL_VERSION_STR" (Build "KERNEL_VERSION_BUILD_STR")\n"); - DPRINT1("Command Line: %s\n", LoaderBlock->LoadOptions); - DPRINT1("ARC Paths: %s %s %s %s\n", LoaderBlock->ArcBootDeviceName, - LoaderBlock->NtHalPathName, - LoaderBlock->ArcHalDeviceName, - LoaderBlock->NtBootPathName); } DPRINT("Pcr = %p, Gdt = %p, Idt = %p, Tss = %p\n", Pcr, Pcr->GdtBase, Pcr->IdtBase, Pcr->TssBase); - DbgBreakPointWithStatus(DBG_STATUS_CONTROL_C); - /* Initialize the Processor with HAL */ HalInitializeProcessor(Cpu, KeLoaderBlock); diff --git a/reactos/ntoskrnl/ntoskrnl-generic.rbuild b/reactos/ntoskrnl/ntoskrnl-generic.rbuild index 497666eabed..c8c86113d63 100644 --- a/reactos/ntoskrnl/ntoskrnl-generic.rbuild +++ b/reactos/ntoskrnl/ntoskrnl-generic.rbuild @@ -321,19 +321,24 @@ + + + + + i386-dis.c + kdb_help.S + kdb.c + setjmp.S + + + + - - kdb.c - kdb_cli.c - kdb_expr.c - + kdb.c + kdb_cli.c + kdb_expr.c kdb_keyboard.c kdb_serial.c - - - kdb.c - - kdb_symbols.c @@ -353,6 +358,7 @@ kd.c + kdmemsup.c kdinit.c From 928e6363413c03eaee5d191774180362d7ba44e6 Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Thu, 24 Dec 2009 04:12:02 +0000 Subject: [PATCH 242/286] [ntoskrnl] - enable KdpEnableSafeMem for amd64 - unhack ExInitPoolLookasidePointers - hackplement KiInitializeContextThread - Remove extended eflag code from kdb, its useless. - Rewrite KdbpCmdGdtLdtIdt - Enable KdbpCmdTss - misc kdb fixes. svn path=/branches/ros-amd64-bringup/; revision=44749 --- reactos/ntoskrnl/ex/lookas.c | 10 +- reactos/ntoskrnl/kd/kdinit.c | 2 +- reactos/ntoskrnl/kdbg/kdb_cli.c | 294 ++++++++++++++++++++++++---- reactos/ntoskrnl/ke/amd64/kiinit.c | 5 +- reactos/ntoskrnl/ke/amd64/thrdini.c | 122 ++++++------ 5 files changed, 321 insertions(+), 112 deletions(-) diff --git a/reactos/ntoskrnl/ex/lookas.c b/reactos/ntoskrnl/ex/lookas.c index 0c40be4f374..7979e739e06 100644 --- a/reactos/ntoskrnl/ex/lookas.c +++ b/reactos/ntoskrnl/ex/lookas.c @@ -72,24 +72,16 @@ ExInitPoolLookasidePointers(VOID) InitializeSListHead(&Entry->ListHead); /* Bind to PRCB */ -#ifdef _M_AMD64 - DPRINT1("Something is missing here, Prcb = %p\n", Prcb); - // FIXME -#else Prcb->PPNPagedLookasideList[i].P = Entry; Prcb->PPNPagedLookasideList[i].L = Entry; -#endif + /* Initialize the paged list */ Entry = &ExpSmallPagedPoolLookasideLists[i]; InitializeSListHead(&Entry->ListHead); /* Bind to PRCB */ -#ifdef _M_AMD64 - // FIXME -#else Prcb->PPPagedLookasideList[i].P = Entry; Prcb->PPPagedLookasideList[i].L = Entry; -#endif } } diff --git a/reactos/ntoskrnl/kd/kdinit.c b/reactos/ntoskrnl/kd/kdinit.c index aae380e922a..0bdf06bc51b 100644 --- a/reactos/ntoskrnl/kd/kdinit.c +++ b/reactos/ntoskrnl/kd/kdinit.c @@ -249,7 +249,7 @@ KdInitSystem(ULONG BootPhase, } else /* BootPhase > 0 */ { -#ifdef _M_IX86 +#if defined(_M_IX86) || defined(_M_AMD64) KdpEnableSafeMem(); #endif } diff --git a/reactos/ntoskrnl/kdbg/kdb_cli.c b/reactos/ntoskrnl/kdbg/kdb_cli.c index b2d646e45ad..0f45b6d2aae 100644 --- a/reactos/ntoskrnl/kdbg/kdb_cli.c +++ b/reactos/ntoskrnl/kdbg/kdb_cli.c @@ -602,21 +602,13 @@ KdbpCmdRegs( { PKTRAP_FRAME Tf = &KdbCurrentTrapFrame->Tf; INT i; - const PCHAR EflagsBits[64] = { " CF", NULL, " PF", " BIT3", " AF", " BIT5", + const PCHAR EflagsBits[32] = { " CF", NULL, " PF", " BIT3", " AF", " BIT5", " ZF", " SF", " TF", " IF", " DF", " OF", NULL, NULL, " NT", " BIT15", " RF", " VF", " AC", " VIF", " VIP", " ID", " BIT22", " BIT23", " BIT24", " BIT25", " BIT26", - " BIT27", " BIT28", " BIT29", " BIT30", - " BIT31", " BIT32", " BIT33", " BIT34", - " BIT35", " BIT36", " BIT37", " BIT38", - " BIT39", " BIT40", " BIT41", " BIT42", - " BIT43", " BIT44", " BIT45", " BIT46", - " BIT47", " BIT48", " BIT49", " BIT50", - " BIT51", " BIT52", " BIT53", " BIT54", - " BIT55", " BIT56", " BIT57", " BIT58", - " BIT59", " BIT60", " BIT61", " BIT62", - " BIT63", + " BIT27", " BIT28", " BIT29", " BIT30" + }; if (Argv[0][0] == 'r') /* regs */ @@ -654,11 +646,7 @@ KdbpCmdRegs( #endif KdbpPrint("EFLAGS 0x%08x ", Tf->EFlags); -#ifdef _M_IX86 for (i = 0; i < 32; i++) -#elif defined(_M_AMD64) - for (i = 0; i < 64; i++) -#endif { if (i == 1) { @@ -1591,6 +1579,235 @@ KdbpCmdMod( /*!\brief Displays GDT, LDT or IDTd. */ +#ifdef _M_AMD64 +static BOOLEAN +KdbpCmdGdtLdtIdt( + ULONG Argc, + PCHAR Argv[]) +{ + KDESCRIPTOR Reg; + KIDTENTRY IdtEntry; + KGDTENTRY GdtEntry; + ULONG_PTR SegBase; + ULONG SegLimit; + PCHAR SegType; + USHORT SegSel; + UCHAR Type, Dpl; + INT i = 0; + ULONG ul; + + if (Argv[0][0] == 'i') + { + /* Read IDTR */ + __sidt(&Reg.Limit); + + if (Reg.Limit < 7) + { + KdbpPrint("Interrupt descriptor table is empty.\n"); + return TRUE; + } + + KdbpPrint("IDT Base: 0x%p Limit: 0x%04x\n", Reg.Base, Reg.Limit); + KdbpPrint(" Idx Type Seg. Sel. Offset DPL\n"); + + while (i < (Reg.Limit)/sizeof(IdtEntry)) + { + if (!NT_SUCCESS(KdbpSafeReadMemory(&IdtEntry, (PVOID)((ULONG_PTR)Reg.Base +(i *sizeof(IdtEntry))), sizeof(IdtEntry)))) + { + KdbpPrint("Couldn't access memory at 0x%x!\n", (ULONG_PTR)Reg.Base + sizeof(IdtEntry)); + return TRUE; + } + + Dpl = IdtEntry.Dpl; + if (IdtEntry.Type == 0x5) /* Task gate */ + SegType = "TASKGATE"; + else if (IdtEntry.Type == 0xE) /* 32 bit Interrupt gate */ + SegType = "INTGATE32"; + else if (IdtEntry.Type == 0x6) /* 16 bit Interrupt gate */ + SegType = "INTGATE16"; + else if (IdtEntry.Type == 0xF) /* 32 bit Trap gate */ + SegType = "TRAPGATE32"; + else if (IdtEntry.Type == 0x7) /* 16 bit Trap gate */ + SegType = "TRAPGATE16"; + else + SegType = "UNKNOWN"; + + if (IdtEntry.Present == 0) /* not present */ + { + KdbpPrint(" %03d %-10s [NP] [NP] %02d\n", + i, SegType, Dpl); + } + else if (IdtEntry.Type == 0x5) /* Task gate */ + { + SegSel = IdtEntry.Selector; + KdbpPrint(" %03d %-10s 0x%04x %02d\n", + i, SegType, SegSel, Dpl); + } + else + { + SegSel = IdtEntry.Selector; + SegBase = (ULONG64)IdtEntry.OffsetLow | + (ULONG64)IdtEntry.OffsetMiddle << 16 | + (ULONG64)IdtEntry.OffsetHigh << 32; + + KdbpPrint(" %03d %-10s 0x%04x 0x%p %02d\n", + i , SegType, SegSel, SegBase, Dpl); + } + i++; + } + } + else + { + ul = 0; + + if (Argv[0][0] == 'g') + { + /* Read GDTR */ + __sgdt(&Reg.Limit); + + } + else + { + ASSERT(Argv[0][0] == 'l'); + + /* Read LDTR */ + __sldt(&Reg.Limit); + + Reg.Base = 0; + ul = 1 << 2; + } + + if (Reg.Limit < 7) + { + KdbpPrint("%s descriptor table is empty.\n", + Argv[0][0] == 'g' ? "Global" : "Local"); + return TRUE; + } + + KdbpPrint("%cDT Base: 0x%p Limit: 0x%04x\n", + Argv[0][0] == 'g' ? 'G' : 'L', Reg.Base, Reg.Limit); + KdbpPrint(" Idx Sel. Type Base Limit DPL Attribs\n"); + + while (i < (Reg.Limit)/sizeof(GdtEntry)) + { + if (!NT_SUCCESS(KdbpSafeReadMemory(&GdtEntry, (PVOID)((ULONG_PTR)Reg.Base +(i * 8)), sizeof(GdtEntry)))) + { + KdbpPrint("Couldn't access memory at 0x%p!\n", (ULONG_PTR)Reg.Base + i); + return TRUE; + } + + Dpl = GdtEntry.Bits.Dpl; + Type = GdtEntry.Bits.Type; + + SegBase = (ULONG_PTR)KiGetGdtDescriptorBase(&GdtEntry); + + SegLimit = GdtEntry.LimitLow; + SegLimit |= (ULONG64)GdtEntry.Bits.LimitHigh << 32; + + if (GdtEntry.Bits.DefaultBig != 0) + { + SegLimit *= 4096; + SegLimit += 4095; + } + else + { + SegLimit++; + } + + if (GdtEntry.Bits.System == 1) /* System segment */ + { + switch (Type) + { + case 1: SegType = "TSS16(Avl)"; break; + case 2: SegType = "LDT"; break; + case 3: SegType = "TSS16(Busy)"; break; + case 4: SegType = "CALLGATE16"; break; + case 5: SegType = "TASKGATE"; break; + case 6: SegType = "INTGATE16"; break; + case 7: SegType = "TRAPGATE16"; break; + case 9: SegType = "TSS32(Avl)"; break; + case 11: SegType = "TSS32(Busy)"; break; + case 12: SegType = "CALLGATE32"; break; + case 14: SegType = "INTGATE32"; break; + case 15: SegType = "INTGATE32"; break; + default: SegType = "UNKNOWN"; break; + } + + if (!(Type >= 1 && Type <= 3) && + Type != 9 && Type != 11) + { + SegBase = 0; + SegLimit = 0; + } + } + else if ((Type & (1 << 3)) == 0) /* Data segment */ + { + if (GdtEntry.Bits.LongMode != 0) + SegType = "DATA32"; + else + SegType = "DATA16"; + } + else /* Code segment */ + { + if (GdtEntry.Bits.LongMode != 0) + SegType = "CODE32"; + else + SegType = "CODE16"; + } + + if (GdtEntry.Bits.Present == 0) /* not present */ + { + KdbpPrint(" %03d 0x%04x %-11s [NP] [NP] %02d NP\n", + i, i | Dpl | ul, SegType, Dpl); + } + else + { + KdbpPrint(" %03d 0x%04x %-11s 0x%p 0x%08x %02d ", + i, i | Dpl | ul, SegType, SegBase, SegLimit, Dpl); + + if (GdtEntry.Bits.System == 1) /* System segment */ + { + /* FIXME: Display system segment */ + /* they are twice as big as regular segments */ + i++; + } + else if ((Type & (1 << 3)) == 0) /* Data segment */ + { + if ((Type & (1 << 2)) != 0) /* Expand-down */ + KdbpPrint(" E"); + + KdbpPrint((Type & (1 << 1)) ? " R/W" : " R"); + + if ((Type & (1 >> 1)) != 0) + KdbpPrint(" A"); + } + else /* Code segment */ + { + if ((Type & (1 << 2)) != 0) /* Conforming */ + KdbpPrint(" C"); + + KdbpPrint((Type & (1 << 1)) ? " R/X" : " X"); + + if ((Type & (1 << 1)) != 0) + KdbpPrint(" A"); + } + + if ((GdtEntry.Bits.LimitHigh & (1 << 3)) != 0) + KdbpPrint(" AVL"); + + KdbpPrint("\n"); + } + i++; + } + } + + return TRUE; +} +#endif + +/*!\brief Displays GDT, LDT or IDTd. + */ +#ifdef _M_IX86 static BOOLEAN KdbpCmdGdtLdtIdt( ULONG Argc, @@ -1669,11 +1886,7 @@ KdbpCmdGdtLdtIdt( if (Argv[0][0] == 'g') { /* Read GDTR */ -#ifdef _M_IX86 Ke386GetGlobalDescriptorTable(&Reg.Limit); -#elif defined(_M_AMD64) - __sgdt(&Reg.Limit); -#endif i = 8; } else @@ -1681,11 +1894,7 @@ KdbpCmdGdtLdtIdt( ASSERT(Argv[0][0] == 'l'); /* Read LDTR */ -#ifdef _M_IX86 Reg.Limit = Ke386GetLocalDescriptorTable(); -#elif defined(_M_AMD64) - __sldt(&Reg.Limit); -#endif Reg.Base = 0; i = 0; ul = 1 << 2; @@ -1815,6 +2024,7 @@ KdbpCmdGdtLdtIdt( return TRUE; } +#endif /*!\brief Displays the KPCR */ @@ -1862,21 +2072,21 @@ KdbpCmdPcr( Pcr->VdmAlert, Pcr->SecondLevelCacheSize, Pcr->InterruptMode); #elif defined(_M_AMD64) KdbpPrint("Current PCR is at 0x%x.\n", (INT_PTR)Pcr); - KdbpPrint(" Tib.ExceptionList: 0x%x\n" - " Tib.StackBase: 0x%x\n" + KdbpPrint(" Tib.ExceptionList: 0x%p\n" + " Tib.StackBase: 0x%p\n" " Tib.StackLimit: 0x%x\n" - " Tib.SubSystemTib: 0x%x\n" + " Tib.SubSystemTib: 0x%p\n" " Tib.FiberData/Version: 0x%x\n" - " Tib.ArbitraryUserPointer: 0x%x\n" - " Tib.Self: 0x%x\n" - " Self: 0x%x\n" - " PCRCB: 0x%x\n" + " Tib.ArbitraryUserPointer: 0x%p\n" + " Tib.Self: 0x%p\n" + " Self: 0x%p\n" + " PCRCB: 0x%p\n" " Irql: 0x%x\n" " KdVersionBlock: 0x%08x\n" - " IDT: 0x%08x\n" - " GDT: 0x%08x\n" - " TSS: 0x%08x\n" - " UserRsp: 0x%08x\n" + " IDT: 0x%p\n" + " GDT: 0x%p\n" + " TSS: 0x%p\n" + " UserRsp: 0x%p\n" " MajorVersion: 0x%04x\n" " MinorVersion: 0x%04x\n" " StallScaleFactor: 0x%08x\n" @@ -1902,8 +2112,8 @@ KdbpCmdTss( #ifdef _M_IX86 KTSS *Tss = KeGetPcr()->TSS; - KdbpPrint("Current TSS is at 0x%08x.\n", (INT)Tss); - KdbpPrint(" Eip: 0x%08x\n" + KdbpPrint("Current TSS is at 0x%p.\n", (INT_PTR)Tss); + KdbpPrint(" Eip: 0x%p\n" " Es: 0x%04x\n" " Cs: 0x%04x\n" " Ss: 0x%04x\n" @@ -1912,10 +2122,18 @@ KdbpCmdTss( " Gs: 0x%04x\n" " IoMapBase: 0x%04x\n", Tss->Eip, Tss->Es, Tss->Cs, Tss->Ds, Tss->Fs, Tss->Gs, Tss->IoMapBase); +#elif defined(_M_AMD64) + KTSS *Tss = KeGetPcr()->TssBase; - return TRUE; + KdbpPrint("Current TSS is at 0x%p.\n", (INT_PTR)Tss); + KdbpPrint(" Rsp0: 0x%p\n" + " Rsp1: 0x%p\n" + " Rsp2: 0x%p\n" + " Ist: 0x%p\n" + " IoMapBase: 0x%04x\n", + Tss->Rsp0, Tss->Rsp1, Tss->Rsp2, Tss->Ist, Tss->IoMapBase); #endif - return FALSE; + return TRUE; } /*!\brief Bugchecks the system. diff --git a/reactos/ntoskrnl/ke/amd64/kiinit.c b/reactos/ntoskrnl/ke/amd64/kiinit.c index 86d44e8fd08..3dcc2ef9e88 100644 --- a/reactos/ntoskrnl/ke/amd64/kiinit.c +++ b/reactos/ntoskrnl/ke/amd64/kiinit.c @@ -714,7 +714,10 @@ KiSystemStartupReal(IN PLOADER_PARAMETER_BLOCK LoaderBlock) if (KdPollBreakIn()) DbgBreakPointWithStatus(DBG_STATUS_CONTROL_C); /* Hack! Wait for the debugger! */ - //while (!KdPollBreakIn()); +#ifdef _WINKD_ + while (!KdPollBreakIn()); + DbgBreakPointWithStatus(DBG_STATUS_CONTROL_C); +#endif } diff --git a/reactos/ntoskrnl/ke/amd64/thrdini.c b/reactos/ntoskrnl/ke/amd64/thrdini.c index 6fde324983e..c98bba3d557 100644 --- a/reactos/ntoskrnl/ke/amd64/thrdini.c +++ b/reactos/ntoskrnl/ke/amd64/thrdini.c @@ -11,7 +11,7 @@ #include #define NDEBUG #include -#if 0 + typedef struct _KSWITCHFRAME { PVOID ExceptionList; @@ -32,16 +32,16 @@ typedef struct _KUINIT_FRAME KSWITCHFRAME CtxSwitchFrame; KSTART_FRAME StartFrame; KTRAP_FRAME TrapFrame; - FX_SAVE_AREA FxSaveArea; + //FX_SAVE_AREA FxSaveArea; } KUINIT_FRAME, *PKUINIT_FRAME; typedef struct _KKINIT_FRAME { KSWITCHFRAME CtxSwitchFrame; KSTART_FRAME StartFrame; - FX_SAVE_AREA FxSaveArea; + //FX_SAVE_AREA FxSaveArea; } KKINIT_FRAME, *PKKINIT_FRAME; -#endif + /* FUNCTIONS *****************************************************************/ VOID @@ -52,10 +52,8 @@ KiInitializeContextThread(IN PKTHREAD Thread, IN PVOID StartContext, IN PCONTEXT ContextPointer) { - FrLdrDbgPrint("KiInitializeContextThread stub\n"); -#if 0 - PFX_SAVE_AREA FxSaveArea; - PFXSAVE_FORMAT FxSaveFormat; + //PFX_SAVE_AREA FxSaveArea; + //PFXSAVE_FORMAT FxSaveFormat; PKSTART_FRAME StartFrame; PKSWITCHFRAME CtxSwitchFrame; PKTRAP_FRAME TrapFrame; @@ -78,60 +76,60 @@ KiInitializeContextThread(IN PKTHREAD Thread, /* Zero out the trap frame and save area */ RtlZeroMemory(&InitFrame->TrapFrame, - KTRAP_FRAME_LENGTH + sizeof(FX_SAVE_AREA)); + KTRAP_FRAME_LENGTH); /* Setup the Fx Area */ - FxSaveArea = &InitFrame->FxSaveArea; + //FxSaveArea = &InitFrame->FxSaveArea; /* Check if we support FXsr */ - if (KeI386FxsrPresent) - { - /* Get the FX Save Format Area */ - FxSaveFormat = (PFXSAVE_FORMAT)Context->ExtendedRegisters; - - /* Set an initial state */ - FxSaveFormat->ControlWord = 0x27F; - FxSaveFormat->StatusWord = 0; - FxSaveFormat->TagWord = 0; - FxSaveFormat->ErrorOffset = 0; - FxSaveFormat->ErrorSelector = 0; - FxSaveFormat->DataOffset = 0; - FxSaveFormat->DataSelector = 0; - FxSaveFormat->MXCsr = 0x1F80; - } - else - { - /* Setup the regular save area */ - Context->FloatSave.ControlWord = 0x27F; - Context->FloatSave.StatusWord = 0; - Context->FloatSave.TagWord = -1; - Context->FloatSave.ErrorOffset = 0; - Context->FloatSave.ErrorSelector = 0; - Context->FloatSave.DataOffset =0; - Context->FloatSave.DataSelector = 0; - } +// if (KeI386FxsrPresent) +// { +// /* Get the FX Save Format Area */ +// FxSaveFormat = (PFXSAVE_FORMAT)Context->ExtendedRegisters; +// +// /* Set an initial state */ +// FxSaveFormat->ControlWord = 0x27F; +// FxSaveFormat->StatusWord = 0; +// FxSaveFormat->TagWord = 0; +// FxSaveFormat->ErrorOffset = 0; +// FxSaveFormat->ErrorSelector = 0; +// FxSaveFormat->DataOffset = 0; +// FxSaveFormat->DataSelector = 0; +// FxSaveFormat->MXCsr = 0x1F80; +// } +// else +// { +// /* Setup the regular save area */ +// Context->FloatSave.ControlWord = 0x27F; +// Context->FloatSave.StatusWord = 0; +// Context->FloatSave.TagWord = -1; +// Context->FloatSave.ErrorOffset = 0; +// Context->FloatSave.ErrorSelector = 0; +// Context->FloatSave.DataOffset =0; +// Context->FloatSave.DataSelector = 0; +// } /* Check if the CPU has NPX */ if (KeI386NpxPresent) { /* Set an intial NPX State */ - Context->FloatSave.Cr0NpxState = 0; - FxSaveArea->Cr0NpxState = 0; - FxSaveArea->NpxSavedCpu = 0; + //Context->FloatSave.Cr0NpxState = 0; + //FxSaveArea->Cr0NpxState = 0; + //FxSaveArea->NpxSavedCpu = 0; /* Now set the context flags depending on XMM support */ - ContextFlags |= (KeI386FxsrPresent) ? CONTEXT_EXTENDED_REGISTERS : - CONTEXT_FLOATING_POINT; + //ContextFlags |= (KeI386FxsrPresent) ? CONTEXT_EXTENDED_REGISTERS : + // CONTEXT_FLOATING_POINT; /* Set the Thread's NPX State */ - Thread->NpxState = NPX_STATE_NOT_LOADED; + Thread->NpxState = 0xA; Thread->DispatcherHeader.NpxIrql = PASSIVE_LEVEL; } else { /* We'll use emulation */ - FxSaveArea->Cr0NpxState = CR0_EM; - Thread->NpxState = NPX_STATE_NOT_LOADED &~ CR0_MP; + //FxSaveArea->Cr0NpxState = CR0_EM; + Thread->NpxState = 0xA &~ CR0_MP; } /* Disable any debug regiseters */ @@ -148,19 +146,16 @@ KiInitializeContextThread(IN PKTHREAD Thread, UserMode); /* Set SS, DS, ES's RPL Mask properly */ - TrapFrame->HardwareSegSs |= RPL_MASK; + TrapFrame->SegSs |= RPL_MASK; TrapFrame->SegDs |= RPL_MASK; TrapFrame->SegEs |= RPL_MASK; TrapFrame->Dr7 = 0; - /* Set the debug mark */ - TrapFrame->DbgArgMark = 0xBADB0D00; - /* Set the previous mode as user */ - TrapFrame->PreviousPreviousMode = UserMode; + TrapFrame->PreviousMode = UserMode; /* Terminate the Exception Handler List */ - TrapFrame->ExceptionList = EXCEPTION_CHAIN_END; + TrapFrame->ExceptionFrame = 0; /* Setup the Stack for KiThreadStartup and Context Switching */ StartFrame = &InitFrame->StartFrame; @@ -180,25 +175,26 @@ KiInitializeContextThread(IN PKTHREAD Thread, sizeof(KKINIT_FRAME)); /* Setup the Fx Area */ - FxSaveArea = &InitFrame->FxSaveArea; - RtlZeroMemory(FxSaveArea, sizeof(FX_SAVE_AREA)); + //FxSaveArea = &InitFrame->FxSaveArea; + //RtlZeroMemory(FxSaveArea, sizeof(FX_SAVE_AREA)); /* Check if we have Fxsr support */ if (KeI386FxsrPresent) { - /* Set the stub FX area */ - FxSaveArea->U.FxArea.ControlWord = 0x27F; - FxSaveArea->U.FxArea.MXCsr = 0x1F80; - } - else - { - /* Set the stub FN area */ - FxSaveArea->U.FnArea.ControlWord = 0x27F; - FxSaveArea->U.FnArea.TagWord = -1; + DPRINT1("FxsrPresent but did nothing\n"); +// /* Set the stub FX area */ +// FxSaveArea->U.FxArea.ControlWord = 0x27F; +// FxSaveArea->U.FxArea.MXCsr = 0x1F80; +// } +// else +// { +// /* Set the stub FN area */ +// FxSaveArea->U.FnArea.ControlWord = 0x27F; +// FxSaveArea->U.FnArea.TagWord = -1; } /* No NPX State */ - Thread->NpxState = NPX_STATE_NOT_LOADED; + Thread->NpxState = 0xA; /* Setup the Stack for KiThreadStartup and Context Switching */ StartFrame = &InitFrame->StartFrame; @@ -223,7 +219,7 @@ KiInitializeContextThread(IN PKTHREAD Thread, /* Save back the new value of the kernel stack. */ Thread->KernelStack = (PVOID)CtxSwitchFrame; -#endif + } /* EOF */ From 086ab61bfa5d570a393deb70724872df04b69756 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 24 Dec 2009 23:17:18 +0000 Subject: [PATCH 243/286] [freeldr] Fix apic base svn path=/branches/ros-amd64-bringup/; revision=44754 --- reactos/boot/freeldr/freeldr/include/arch/amd64/amd64.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/boot/freeldr/freeldr/include/arch/amd64/amd64.h b/reactos/boot/freeldr/freeldr/include/arch/amd64/amd64.h index ea7e3800742..0a1ff1d82cb 100644 --- a/reactos/boot/freeldr/freeldr/include/arch/amd64/amd64.h +++ b/reactos/boot/freeldr/freeldr/include/arch/amd64/amd64.h @@ -46,7 +46,7 @@ #define HYPERSPACE_BASE 0xfffff70000000000ULL #define HAL_BASE 0xffffffff80000000ULL -#define APIC_BASE 0xfffffffffee00000ULL // FIXME +#define APIC_BASE 0xFFFFFFFFFFFE0000ULL #define APIC_PHYS_BASE 0xfee00000 From d2c55015f1d05392bda592f8808e326cabf75914 Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Sat, 26 Dec 2009 06:07:38 +0000 Subject: [PATCH 244/286] [rbuild] - Fix make install. - Fix mkhive command. - Automatically generate reactos.dff using the installfile and installbase attributes found in rbuild files. -- Fixes race to grab reactos.dff on concurrent builds in the same tree. -- Makes the result of make install, make livecd and make bootcd the same(some modules arent in reactos.dff but have installfile/base attributes, which means they got intto livecd/install but not bootcd!) -- Works really great with rosapps/rostests. -- Downside is some files now exist inside and outside the generated cab file, maybe this could be useful if we wanted to have a package that contained reactos and an app that installed it from livecd... just thinking out loud... svn path=/branches/ros-amd64-bringup/; revision=44762 --- reactos/base/services/tcpsvcs/tcpsvcs.rbuild | 1 + reactos/base/shell/explorer/explorer.rbuild | 2 +- reactos/boot/bootdata/hiveinst_amd64.inf | 19 + reactos/boot/bootdata/packages/reactos.dff | 798 ------------------ reactos/hal/hal/hal.rbuild | 6 +- reactos/hal/halx86/halup.rbuild | 2 +- reactos/media/inf/inf.rbuild | 5 +- reactos/tools/rbuild/backend/mingw/mingw.cpp | 9 +- reactos/tools/rbuild/backend/mingw/mingw.h | 1 + .../rbuild/backend/mingw/modulehandler.cpp | 4 +- reactos/tools/rbuild/installfile.cpp | 7 +- reactos/tools/rbuild/module.cpp | 6 + reactos/tools/rbuild/project.cpp | 92 ++ reactos/tools/rbuild/rbuild.h | 3 + 14 files changed, 147 insertions(+), 808 deletions(-) create mode 100644 reactos/boot/bootdata/hiveinst_amd64.inf delete mode 100644 reactos/boot/bootdata/packages/reactos.dff diff --git a/reactos/base/services/tcpsvcs/tcpsvcs.rbuild b/reactos/base/services/tcpsvcs/tcpsvcs.rbuild index f2b435f5aa9..5d1618f93dd 100644 --- a/reactos/base/services/tcpsvcs/tcpsvcs.rbuild +++ b/reactos/base/services/tcpsvcs/tcpsvcs.rbuild @@ -1,5 +1,6 @@ +quotes . ws2_32 diff --git a/reactos/base/shell/explorer/explorer.rbuild b/reactos/base/shell/explorer/explorer.rbuild index b4b9f109840..7b5c83988dc 100644 --- a/reactos/base/shell/explorer/explorer.rbuild +++ b/reactos/base/shell/explorer/explorer.rbuild @@ -66,7 +66,7 @@ explorer.rc --enable-stdcall-fixup -explorer-cfg-template.xml +explorer-cfg-template.xml diff --git a/reactos/boot/bootdata/hiveinst_amd64.inf b/reactos/boot/bootdata/hiveinst_amd64.inf new file mode 100644 index 00000000000..dd7fcdf4268 --- /dev/null +++ b/reactos/boot/bootdata/hiveinst_amd64.inf @@ -0,0 +1,19 @@ +[Version] +Signature = "$ReactOS$" + +[AddReg] +; Enable _one_ driver per section by removing the leading semicolon. + +; +; Display driver section +; + +; VBE SVGA driver +HKLM,"SYSTEM\CurrentControlSet\Services\VBE","Start",0x00010001,0x00000001 +HKLM,"SYSTEM\CurrentControlSet\Hardware Profiles\Current\System\CurrentControlSet\Services\VBE\Device0","DefaultSettings.VRefresh",0x00010001,1 +HKLM,"SYSTEM\CurrentControlSet\Hardware Profiles\Current\System\CurrentControlSet\Services\VBE\Device0","DefaultSettings.BitsPerPel",0x00010001,16 +HKLM,"SYSTEM\CurrentControlSet\Hardware Profiles\Current\System\CurrentControlSet\Services\VBE\Device0","DefaultSettings.XResolution",0x00010001,800 +HKLM,"SYSTEM\CurrentControlSet\Hardware Profiles\Current\System\CurrentControlSet\Services\VBE\Device0","DefaultSettings.YResolution",0x00010001,600 + +; VGA miniport driver +HKLM,"SYSTEM\CurrentControlSet\Services\Vga","Start",0x00010001,0x00000001 diff --git a/reactos/boot/bootdata/packages/reactos.dff b/reactos/boot/bootdata/packages/reactos.dff deleted file mode 100644 index 337915ae0eb..00000000000 --- a/reactos/boot/bootdata/packages/reactos.dff +++ /dev/null @@ -1,798 +0,0 @@ -; Main ReactOS package - -.Set DiskLabelTemplate="ReactOS" ; Label of disk -.Set CabinetNameTemplate="reactos.cab" ; reactos.cab -.Set InfFileName="reactos.inf" ; reactos.inf - - -;.Set Cabinet=on -;.Set Compress=on - -.InfBegin -[Version] -Signature = "$ReactOS$" - -[Directories] -1 = system32 -2 = system32\drivers -3 = Fonts -4 = -5 = system32\drivers\etc -6 = inf -7 = bin -8 = media - -.InfEnd - -; Contents of disk -.InfBegin -[SourceFiles] -.InfEnd - - -; Base files -base\applications\cacls\cacls.exe 1 -base\applications\calc\calc.exe 1 -base\applications\charmap\charmap.exe 1 -base\applications\cmdutils\dbgprint\dbgprint.exe 1 -base\applications\cmdutils\doskey\doskey.exe 1 -base\applications\cmdutils\find\find.exe 1 -base\applications\cmdutils\hostname\hostname.exe 1 -base\applications\cmdutils\lodctr\lodctr.exe 1 -base\applications\cmdutils\more\more.exe 1 -base\applications\cmdutils\reg\reg.exe 1 -base\applications\cmdutils\xcopy\xcopy.exe 1 -base\applications\control\control.exe 1 -base\applications\dxdiag\dxdiag.exe 1 -base\applications\fontview\fontview.exe 1 -base\applications\mscutils\devmgmt\devmgmt.exe 1 -base\applications\mscutils\eventvwr\eventvwr.exe 1 -base\applications\games\solitaire\sol.exe 1 -base\applications\games\spider\spider.exe 1 -base\applications\games\winemine\winemine.exe 1 -base\applications\hh\hh.exe 4 -base\applications\kbswitch\kbswitch.exe 1 -base\applications\kbswitch\kbsdll\kbsdll.dll 1 -base\applications\logoff\logoff.exe 1 -base\applications\magnify\magnify.exe 1 -base\applications\mplay32\mplay32.exe 1 -base\applications\msconfig\msconfig.exe 1 -base\applications\mstsc\mstsc.exe 1 -base\applications\network\arp\arp.exe 1 -base\applications\network\dwnl\dwnl.exe 1 -base\applications\network\route\route.exe 1 -base\applications\network\finger\finger.exe 1 -base\applications\network\ftp\ftp.exe 1 -base\applications\network\ipconfig\ipconfig.exe 1 -base\applications\network\netstat\netstat.exe 1 -base\applications\network\nslookup\nslookup.exe 1 -base\applications\network\ping\ping.exe 1 -base\applications\network\telnet\telnet.exe 1 -base\applications\network\tracert\tracert.exe 1 -base\applications\network\whois\whois.exe 1 -base\applications\notepad\notepad.exe 1 -base\applications\paint\paint.exe 1 -base\applications\rapps\rapps.exe 1 -base\applications\regedit\regedit.exe 4 -base\applications\regedit\clb\clb.dll 1 -base\applications\regedt32\regedt32.exe 1 -base\applications\sc\sc.exe 1 -base\applications\screensavers\3dtext\3dtext.scr 1 -base\applications\screensavers\logon\logon.scr 1 -base\applications\mscutils\servman\servman.exe 1 -base\applications\shutdown\shutdown.exe 1 -base\applications\sndvol32\sndvol32.exe 1 -base\applications\taskmgr\taskmgr.exe 1 -base\applications\winhlp32\winhlp32.exe 4 -base\applications\winver\winver.exe 1 -base\applications\wordpad\wordpad.exe 1 -base\applications\write\write.exe 1 - -base\services\audiosrv\audiosrv.exe 1 -base\services\dhcp\dhcp.exe 1 -base\services\eventlog\eventlog.exe 1 -base\services\rpcss\rpcss.exe 1 -base\services\spoolsv\spoolsv.exe 1 -base\services\tcpsvcs\tcpsvcs.exe 1 -base\services\telnetd\telnetd.exe 1 -base\services\tcpsvcs\quotes 5 -base\services\umpnpmgr\umpnpmgr.exe 1 -base\services\wlansvc\wlansvc.exe 1 -base\services\svchost\svchost.exe 1 - -base\setup\setup\setup.exe 1 -base\setup\vmwinst\vmwinst.exe 1 - -base\shell\cmd\cmd.exe 1 -base\shell\explorer\explorer.exe 4 -base\shell\explorer\explorer-cfg-template.xml 4 -base\shell\explorer\notifyhook\notifyhook.dll 1 -base\shell\explorer-new\explorer_new.exe 4 optional - -base\system\autochk\autochk.exe 1 -base\system\bootok\bootok.exe 1 -base\system\format\format.exe 1 -base\system\lsass\lsass.exe 1 -base\system\msiexec\msiexec.exe 1 -base\system\regsvr32\regsvr32.exe 1 -base\system\rundll32\rundll32.exe 1 -base\system\runonce\runonce.exe 1 -base\system\services\services.exe 1 -base\system\userinit\userinit.exe 1 -base\system\winlogon\winlogon.exe 1 -base\system\expand\expand.exe 1 -base\system\smss\smss.exe 1 - - -; Dynamic Link Libraries -dll\3rdparty\mesa32\mesa32.dll 1 -dll\3rdparty\libjpeg\libjpeg.dll 1 -dll\3rdparty\libxslt\libxslt.dll 1 -dll\3rdparty\dxtn\dxtn.dll 1 optional - -dll\cpl\access\access.cpl 1 -dll\cpl\appwiz\appwiz.cpl 1 -dll\cpl\console\console.dll 1 -dll\cpl\desk\desk.cpl 1 -dll\cpl\hdwwiz\hdwwiz.cpl 1 -dll\cpl\input\input.dll 1 -dll\cpl\intl\intl.cpl 1 -dll\cpl\joy\joy.cpl 1 -;dll\cpl\liccpa\liccpa.cpl 1 -dll\cpl\main\main.cpl 1 -dll\cpl\mmsys\mmsys.cpl 1 -dll\cpl\ncpa\ncpa.cpl 1 -;dll\cpl\odbccp32\odbccp32.cpl 1 -dll\cpl\powercfg\powercfg.cpl 1 -dll\cpl\sysdm\sysdm.cpl 1 -;dll\cpl\telephon\telephon.cpl 1 -dll\cpl\timedate\timedate.cpl 1 -;dll\cpl\usrmgr\usrmgr.cpl 1 - -dll\directx\amstream\amstream.dll 1 -dll\directx\dinput\dinput.dll 1 -dll\directx\dinput8\dinput8.dll 1 -dll\directx\dmusic\dmusic.dll 1 -dll\directx\dplay\dplay.dll 1 -dll\directx\dplayx\dplayx.dll 1 -dll\directx\dsound\dsound.dll 1 -dll\directx\dxdiagn\dxdiagn.dll 1 -dll\directx\wine\ddraw\ddraw.dll 1 optional -dll\directx\d3d8thk\d3d8thk.dll 1 -dll\directx\devenum\devenum.dll 1 -dll\directx\ksproxy\ksproxy.ax 1 -dll\directx\ksuser\ksuser.dll 1 -dll\directx\msdmo\msdmo.dll 1 -dll\directx\quartz\quartz.dll 1 -dll\directx\qedit\qedit.dll 1 -dll\directx\wine\d3d8\d3d8.dll 1 optional -dll\directx\wine\wined3d\wined3d.dll 1 optional -dll\directx\wine\d3d9\d3d9.dll 1 optional - -dll\keyboard\kbda1\kbda1.dll 1 -dll\keyboard\kbda2\kbda2.dll 1 -dll\keyboard\kbda3\kbda3.dll 1 -dll\keyboard\kbdal\kbdal.dll 1 -dll\keyboard\kbdarme\kbdarme.dll 1 -dll\keyboard\kbdarmw\kbdarmw.dll 1 -dll\keyboard\kbdaze\kbdaze.dll 1 -dll\keyboard\kbdazel\kbdazel.dll 1 -dll\keyboard\kbdbgm\kbdbgm.dll 1 -dll\keyboard\kbdbgt\kbdbgt.dll 1 -dll\keyboard\kbdblr\kbdblr.dll 1 -dll\keyboard\kbdbr\kbdbr.dll 1 -dll\keyboard\kbdbga\kbdbga.dll 1 -dll\keyboard\kbdbe\kbdbe.dll 1 -dll\keyboard\kbdbur\kbdbur.dll 1 -dll\keyboard\kbdcan\kbdcan.dll 1 -dll\keyboard\kbdcr\kbdcr.dll 1 -dll\keyboard\kbdcz\kbdcz.dll 1 -dll\keyboard\kbdcz1\kbdcz1.dll 1 -dll\keyboard\kbdda\kbdda.dll 1 -dll\keyboard\kbddv\kbddv.dll 1 -dll\keyboard\kbdes\kbdes.dll 1 -dll\keyboard\kbdest\kbdest.dll 1 -dll\keyboard\kbdfc\kbdfc.dll 1 -dll\keyboard\kbdfi\kbdfi.dll 1 -dll\keyboard\kbdfr\kbdfr.dll 1 -dll\keyboard\kbdgeo\kbdgeo.dll 1 -dll\keyboard\kbdgerg\kbdgerg.dll 1 -dll\keyboard\kbdgneo\kbdgneo.dll 1 -dll\keyboard\kbdgrist\kbdgrist.dll 1 -dll\keyboard\kbdgr\kbdgr.dll 1 -dll\keyboard\kbdhe\kbdhe.dll 1 -dll\keyboard\kbdheb\kbdheb.dll 1 -dll\keyboard\kbdhu\kbdhu.dll 1 -dll\keyboard\kbdic\kbdic.dll 1 -dll\keyboard\kbdinasa\kbdinasa.dll 1 -dll\keyboard\kbdinben\kbdinben.dll 1 -dll\keyboard\kbdindev\kbdindev.dll 1 -dll\keyboard\kbdinguj\kbdinguj.dll 1 -dll\keyboard\kbdinmal\kbdinmal.dll 1 -dll\keyboard\kbdir\kbdir.dll 1 -dll\keyboard\kbdit\kbdit.dll 1 -dll\keyboard\kbdja\kbdja.dll 1 -dll\keyboard\kbdkaz\kbdkaz.dll 1 -dll\keyboard\kbdla\kbdla.dll 1 -dll\keyboard\kbdlt1\kbdlt1.dll 1 -dll\keyboard\kbdlv\kbdlv.dll 1 -dll\keyboard\kbdmac\kbdmac.dll 1 -dll\keyboard\kbdne\kbdne.dll 1 -dll\keyboard\kbdno\kbdno.dll 1 -dll\keyboard\kbdpl1\kbdpl1.dll 1 -dll\keyboard\kbdpo\kbdpo.dll 1 -dll\keyboard\kbdro\kbdro.dll 1 -dll\keyboard\kbdru\kbdru.dll 1 -dll\keyboard\kbdru1\kbdru1.dll 1 -dll\keyboard\kbdsg\kbdsg.dll 1 -dll\keyboard\kbdsk\kbdsk.dll 1 -dll\keyboard\kbdsk1\kbdsk1.dll 1 -dll\keyboard\kbdsw\kbdsw.dll 1 -dll\keyboard\kbdtat\kbdtat.dll 1 -dll\keyboard\kbdth0\kbdth0.dll 1 -dll\keyboard\kbdth1\kbdth1.dll 1 -dll\keyboard\kbdth2\kbdth2.dll 1 -dll\keyboard\kbdth3\kbdth3.dll 1 -dll\keyboard\kbdtuf\kbdtuf.dll 1 -dll\keyboard\kbdtuq\kbdtuq.dll 1 -dll\keyboard\kbduk\kbduk.dll 1 -dll\keyboard\kbdur\kbdur.dll 1 -dll\keyboard\kbdurs\kbdurs.dll 1 -dll\keyboard\kbdus\kbdus.dll 1 -dll\keyboard\kbdusa\kbdusa.dll 1 -dll\keyboard\kbdusl\kbdusl.dll 1 -dll\keyboard\kbdusr\kbdusr.dll 1 -dll\keyboard\kbdusx\kbdusx.dll 1 -dll\keyboard\kbduzb\kbduzb.dll 1 -dll\keyboard\kbdvntc\kbdvntc.dll 1 -dll\keyboard\kbdycc\kbdycc.dll 1 -dll\keyboard\kbdycl\kbdycl.dll 1 -dll\keyboard\kbdko\kbdko.dll 1 - -dll\ntdll\ntdll.dll 1 - -dll\win32\acledit\acledit.dll 1 -dll\win32\aclui\aclui.dll 1 -dll\win32\activeds\activeds.dll 1 -dll\win32\advapi32\advapi32.dll 1 -dll\win32\advpack\advpack.dll 1 -dll\win32\actxprxy\actxprxy.dll 1 -dll\win32\atl\atl.dll 1 -dll\win32\authz\authz.dll 1 -dll\win32\avicap32\avicap32.dll 1 -dll\win32\avifil32\avifil32.dll 1 -dll\win32\bcrypt\bcrypt.dll 1 -dll\win32\beepmidi\beepmidi.dll 1 -dll\win32\browseui\browseui.dll 1 -dll\win32\cabinet\cabinet.dll 1 -dll\win32\cards\cards.dll 1 -dll\win32\cfgmgr32\cfgmgr32.dll 1 -dll\win32\clusapi\clusapi.dll 1 -dll\win32\comcat\comcat.dll 1 -dll\win32\comctl32\comctl32.dll 1 -dll\win32\comdlg32\comdlg32.dll 1 -dll\win32\compstui\compstui.dll 1 -dll\win32\credui\credui.dll 1 -dll\win32\crtdll\crtdll.dll 1 -dll\win32\crypt32\crypt32.dll 1 -dll\win32\cryptdlg\cryptdlg.dll 1 -dll\win32\cryptdll\cryptdll.dll 1 -dll\win32\cryptnet\cryptnet.dll 1 -dll\win32\cryptui\cryptui.dll 1 -dll\win32\dbghelp\dbghelp.dll 1 -dll\win32\dciman32\dciman32.dll 1 -dll\win32\dwmapi\dwmapi.dll 1 -dll\win32\devmgr\devmgr.dll 1 -dll\win32\dhcpcsvc\dhcpcsvc.dll 1 -dll\win32\dnsapi\dnsapi.dll 1 -dll\win32\fmifs\fmifs.dll 1 -dll\win32\fusion\fusion.dll 1 -dll\win32\gdi32\gdi32.dll 1 -dll\win32\gdiplus\gdiplus.dll 1 -dll\win32\getuname\getuname.dll 1 -dll\win32\glu32\glu32.dll 1 -dll\win32\hhctrl.ocx\hhctrl.ocx 1 -dll\win32\hid\hid.dll 1 -dll\win32\hlink\hlink.dll 1 -dll\win32\hnetcfg\hnetcfg.dll 1 -dll\win32\httpapi\httpapi.dll 1 -dll\win32\iccvid\iccvid.dll 1 -dll\win32\icmp\icmp.dll 1 -dll\win32\imaadp32.acm\imaadp32.acm 1 -dll\win32\imagehlp\imagehlp.dll 1 -dll\win32\imm32\imm32.dll 1 -dll\win32\inetcomm\inetcomm.dll 1 -dll\win32\inetmib1\inetmib1.dll 1 -dll\win32\initpki\initpki.dll 1 -dll\win32\inseng\inseng.dll 1 -dll\win32\iphlpapi\iphlpapi.dll 1 -dll\win32\itircl\itircl.dll 1 -dll\win32\itss\itss.dll 1 -dll\win32\jscript\jscript.dll 1 -dll\win32\kernel32\kernel32.dll 1 -dll\win32\loadperf\loadperf.dll 1 -dll\win32\localspl\localspl.dll 1 -dll\win32\localui\localui.dll 1 -dll\win32\lsasrv\lsasrv.dll 1 -dll\win32\lz32\lz32.dll 1 -dll\win32\mapi32\mapi32.dll 1 -dll\win32\mciavi32\mciavi32.dll 1 -dll\win32\mcicda\mcicda.dll 1 -dll\win32\mciqtz32\mciqtz32.dll 1 -dll\win32\mciseq\mciseq.dll 1 -dll\win32\mciwave\mciwave.dll 1 -dll\win32\mlang\mlang.dll 1 -dll\win32\mmdrv\mmdrv.dll 1 -dll\win32\modemui\modemui.dll 1 -dll\win32\mpr\mpr.dll 1 -dll\win32\mprapi\mprapi.dll 1 -dll\win32\msacm32\msacm32.dll 1 -dll\win32\msacm32\msacm32.drv\msacm32.drv 1 -dll\win32\msadp32.acm\msadp32.acm 1 -dll\win32\msafd\msafd.dll 1 -dll\win32\mscat32\mscat32.dll 1 -dll\win32\mscms\mscms.dll 1 -dll\win32\mscoree\mscoree.dll 1 -dll\win32\msctf\msctf.dll 1 -dll\win32\msftedit\msftedit.dll 1 -dll\win32\msg711.acm\msg711.acm 1 -dll\win32\msgina\msgina.dll 1 -dll\win32\msgsm32.acm\msgsm32.acm 1 -dll\win32\mshtml\mshtml.dll 1 -dll\win32\mshtml.tlb\mshtml.tlb 1 -dll\win32\msi\msi.dll 1 -dll\win32\msimg32\msimg32.dll 1 -dll\win32\msimtf\msimtf.dll 1 -dll\win32\msisip\msisip.dll 1 -dll\win32\msisys.ocx\msisys.ocx 1 -dll\win32\msnet32\msnet32.dll 1 -dll\win32\msrle32\msrle32.dll 1 -dll\win32\mssign32\mssign32.dll 1 -dll\win32\mssip32\mssip32.dll 1 -dll\win32\mstask\mstask.dll 1 -dll\win32\msvcrt\msvcrt.dll 1 -dll\win32\msvcrt20\msvcrt20.dll 1 -dll\win32\msvcrt40\msvcrt40.dll 1 -dll\win32\msvfw32\msvfw32.dll 1 -dll\win32\msvidc32\msvidc32.dll 1 -dll\win32\mswsock\mswsock.dll 1 -dll\win32\msxml3\msxml3.dll 1 -dll\win32\nddeapi\nddeapi.dll 1 -dll\win32\netapi32\netapi32.dll 1 -dll\win32\netcfgx\netcfgx.dll 1 -dll\win32\netid\netid.dll 1 -dll\win32\netshell\netshell.dll 1 -dll\win32\newdev\newdev.dll 1 -dll\win32\ntdsapi\ntdsapi.dll 1 -dll\win32\ntlanman\ntlanman.dll 1 -dll\win32\ntmarta\ntmarta.dll 1 -dll\win32\ntprint\ntprint.dll 1 -dll\win32\objsel\objsel.dll 1 -dll\win32\odbc32\odbc32.dll 1 -dll\win32\odbccp32\odbccp32.dll 1 -dll\win32\ole32\ole32.dll 1 -dll\win32\oleacc\oleacc.dll 1 -dll\win32\oleaut32\oleaut32.dll 1 -dll\win32\olecli32\olecli32.dll 1 -dll\win32\oledlg\oledlg.dll 1 -dll\win32\olepro32\olepro32.dll 1 -dll\win32\olesvr32\olesvr32.dll 1 -dll\win32\olethk32\olethk32.dll 1 -dll\win32\opengl32\opengl32.dll 1 -dll\win32\pdh\pdh.dll 1 -dll\win32\pidgen\pidgen.dll 1 -dll\win32\powrprof\powrprof.dll 1 -dll\win32\printui\printui.dll 1 -dll\win32\psapi\psapi.dll 1 -dll\win32\pstorec\pstorec.dll 1 -dll\win32\qmgr\qmgr.dll 1 -dll\win32\qmgrprxy\qmgrprxy.dll 1 -dll\win32\query\query.dll 1 -dll\win32\rasadhlp\rasadhlp.dll 1 -dll\win32\rasapi32\rasapi32.dll 1 -dll\win32\rasdlg\rasdlg.dll 1 -dll\win32\resutils\resutils.dll 1 -dll\win32\rasman\rasman.dll 1 -dll\win32\riched20\riched20.dll 1 -dll\win32\riched32\riched32.dll 1 -dll\win32\rpcrt4\rpcrt4.dll 1 -dll\win32\rsabase\rsabase.dll 1 -dll\win32\rsaenh\rsaenh.dll 1 -dll\win32\samlib\samlib.dll 1 -dll\win32\samsrv\samsrv.dll 1 -dll\win32\sccbase\sccbase.dll 1 -dll\win32\schannel\schannel.dll 1 -dll\win32\secur32\secur32.dll 1 -dll\win32\security\security.dll 1 -dll\win32\sensapi\sensapi.dll 1 -dll\win32\serialui\serialui.dll 1 -dll\win32\setupapi\setupapi.dll 1 -dll\win32\sfc\sfc.dll 1 -dll\win32\sfc_os\sfc_os.dll 1 -dll\win32\shdoclc\shdoclc.dll 1 -dll\win32\shdocvw\shdocvw.dll 1 -dll\win32\shell32\shell32.dll 1 -dll\win32\shfolder\shfolder.dll 1 -dll\win32\shimgvw\shimgvw.dll 1 -dll\win32\shlwapi\shlwapi.dll 1 -dll\win32\slbcsp\slbcsp.dll 1 -dll\win32\smdll\smdll.dll 1 -dll\win32\snmpapi\snmpapi.dll 1 -dll\win32\softpub\softpub.dll 1 -dll\win32\spoolss\spoolss.dll 1 -dll\win32\srclient\srclient.dll 1 -dll\win32\stdole2.tlb\stdole2.tlb 1 -dll\win32\stdole32.tlb\stdole32.tlb 1 -dll\win32\sti\sti.dll 1 -dll\win32\sxs\sxs.dll 1 -dll\win32\syssetup\syssetup.dll 1 -dll\win32\t2embed\t2embed.dll 1 -dll\win32\tapi32\tapi32.dll 1 -dll\win32\tapiui\tapiui.dll 1 -dll\win32\traffic\traffic.dll 1 -dll\win32\twain_32\twain_32.dll 1 -dll\win32\uext2\uext2.dll 1 -dll\win32\ufat\ufat.dll 1 -dll\win32\ufatx\ufatx.dll 1 optional -dll\win32\untfs\untfs.dll 1 -dll\win32\updspapi\updspapi.dll 1 -dll\win32\url\url.dll 1 -dll\win32\urlmon\urlmon.dll 1 -dll\win32\user32\user32.dll 1 -dll\win32\userenv\userenv.dll 1 -dll\win32\usp10\usp10.dll 1 -dll\win32\uxtheme\uxtheme.dll 1 -dll\win32\vdmdbg\vdmdbg.dll 1 -dll\win32\version\version.dll 1 -dll\win32\windowscodecs\windowscodecs.dll 1 -dll\win32\winemp3.acm\winemp3.acm 1 -dll\win32\winfax\winfax.dll 1 -dll\win32\winhttp\winhttp.dll 1 -dll\win32\wininet\wininet.dll 1 -dll\win32\winmm\winmm.dll 1 -dll\win32\winspool\winspool.drv 1 -dll\win32\winsta\winsta.dll 1 -dll\win32\wlanapi\wlanapi.dll 1 -dll\win32\wintrust\wintrust.dll 1 -dll\win32\wldap32\wldap32.dll 1 -dll\win32\wmi\wmi.dll 1 -dll\win32\ws2_32\ws2_32.dll 1 -dll\win32\ws2help\ws2help.dll 1 -dll\win32\wshirda\wshirda.dll 1 -dll\win32\wshtcpip\wshtcpip.dll 1 -dll\win32\wsock32\wsock32.dll 1 -dll\win32\wtsapi32\wtsapi32.dll 1 -dll\win32\wuapi\wuapi.dll 1 -dll\win32\xinput1_1\xinput1_1.dll 1 -dll\win32\xinput1_2\xinput1_2.dll 1 -dll\win32\xinput1_3\xinput1_3.dll 1 -dll\win32\xinput9_1_0\xinput9_1_0.dll 1 -dll\win32\xmllite\xmllite.dll 1 -dll\win32\winmm\midimap\midimap.dll 1 -dll\win32\wdmaud.drv\wdmaud.drv 1 - -; Shell Extensions -dll\shellext\deskadp\deskadp.dll 1 -dll\shellext\deskmon\deskmon.dll 1 - -; Drivers -drivers\base\bootvid\bootvid.dll 1 -drivers\base\beep\beep.sys 2 -drivers\base\null\null.sys 2 - -drivers\bus\isapnp\isapnp.sys 2 - -drivers\directx\dxapi\dxapi.sys 2 -drivers\directx\dxg\dxg.sys 2 -drivers\directx\dxgthk\dxgthk.sys 2 - -drivers\filesystems\fs_rec\fs_rec.sys 2 -drivers\filesystems\msfs\msfs.sys 2 -drivers\filesystems\mup\mup.sys 2 -drivers\filesystems\npfs\npfs.sys 2 - -drivers\input\mouclass\mouclass.sys 2 -drivers\input\sermouse\sermouse.sys 2 - -drivers\ksfilter\ks\ks.sys 2 - -drivers\network\afd\afd.sys 2 -drivers\network\ndis\ndis.sys 2 -drivers\network\tcpip\tcpip.sys 2 -drivers\network\tdi\tdi.sys 2 -drivers\network\dd\ne2000\ne2000.sys 2 -drivers\network\dd\pcnet\pcnet.sys 2 - -drivers\serial\serenum\serenum.sys 2 -drivers\serial\serial\serial.sys 2 - -drivers\storage\ide\pciide\pciide.sys 2 -drivers\storage\ide\pciidex\pciidex.sys 2 - -;drivers\usb\miniport\usbohci\usbohci.sys 2 -;drivers\usb\miniport\usbuhci\usbuhci.sys 2 -;drivers\usb\usbhub\usbhub.sys 2 -;drivers\usb\usbport\usbport.sys 2 -drivers\usb\nt4compat\usbdriver\usbdriver.sys 2 optional - -drivers\video\displays\vga\vgaddi.dll 1 -drivers\video\displays\framebuf\framebuf.dll 1 -drivers\video\miniport\vga\vgamp.sys 2 -drivers\video\miniport\vbe\vbemp.sys 2 -drivers\video\videoprt\videoprt.sys 2 -drivers\video\font\ftfd\ftfd.dll 1 - -drivers\wdm\audio\filters\kmixer\kmixer.sys 2 -drivers\wdm\audio\sysaudio\sysaudio.sys 2 -drivers\wdm\audio\legacy\wdmaud\wdmaud.sys 2 -drivers\wdm\audio\backpln\portcls\portcls.sys 2 -drivers\wdm\audio\drm\drmk\drmk.sys 2 -drivers\wmi\wmilib.sys 2 - -; Media -media\fonts\DejaVuSans.ttf 3 -media\fonts\DejaVuSans-Bold.ttf 3 -media\fonts\DejaVuSans-BoldOblique.ttf 3 -media\fonts\DejaVuSansMono.ttf 3 -media\fonts\DejaVuSansMono-Bold.ttf 3 -media\fonts\DejaVuSansMono-BoldOblique.ttf 3 -media\fonts\DejaVuSansMono-Oblique.ttf 3 -media\fonts\DejaVuSans-Oblique.ttf 3 -media\fonts\DejaVuSerif.ttf 3 -media\fonts\DejaVuSerif-Bold.ttf 3 -media\fonts\DejaVuSerif-BoldItalic.ttf 3 -media\fonts\DejaVuSerif-Italic.ttf 3 - -media\fonts\FreeMono.ttf 3 -media\fonts\FreeMonoBold.ttf 3 -media\fonts\FreeMonoBoldOblique.ttf 3 -media\fonts\FreeMonoOblique.ttf 3 - -media\fonts\LiberationMono-Bold.ttf 3 -media\fonts\LiberationMono-BoldItalic.ttf 3 -media\fonts\LiberationMono-Italic.ttf 3 -media\fonts\LiberationMono-Regular.ttf 3 -media\fonts\LiberationSans-Bold.ttf 3 -media\fonts\LiberationSans-BoldItalic.ttf 3 -media\fonts\LiberationSans-Italic.ttf 3 -media\fonts\LiberationSans-Regular.ttf 3 -media\fonts\LiberationSerif-Bold.ttf 3 -media\fonts\LiberationSerif-BoldItalic.ttf 3 -media\fonts\LiberationSerif-Italic.ttf 3 -media\fonts\LiberationSerif-Regular.ttf 3 - -media\fonts\Marlett.ttf 3 -media\fonts\symbol.ttf 3 -media\fonts\tahoma.ttf 3 -media\fonts\tahomabd.ttf 3 - -media\nls\c_037.nls 1 -media\nls\c_424.nls 1 -media\nls\c_500.nls 1 -media\nls\c_737.nls 1 -media\nls\c_775.nls 1 -media\nls\c_850.nls 1 -media\nls\c_852.nls 1 -media\nls\c_855.nls 1 -media\nls\c_856.nls 1 -media\nls\c_857.nls 1 -media\nls\c_860.nls 1 -media\nls\c_861.nls 1 -media\nls\c_862.nls 1 -media\nls\c_863.nls 1 -media\nls\c_864.nls 1 -media\nls\c_865.nls 1 -media\nls\c_866.nls 1 -media\nls\c_869.nls 1 -media\nls\c_874.nls 1 -media\nls\c_875.nls 1 -media\nls\c_878.nls 1 -media\nls\c_932.nls 1 -media\nls\c_936.nls 1 -media\nls\c_949.nls 1 -media\nls\c_950.nls 1 -media\nls\c_1006.nls 1 -media\nls\c_1026.nls 1 -media\nls\c_1250.nls 1 -media\nls\c_1251.nls 1 -media\nls\c_1253.nls 1 -media\nls\c_1254.nls 1 -media\nls\c_1255.nls 1 -media\nls\c_1256.nls 1 -media\nls\c_1257.nls 1 -media\nls\c_1258.nls 1 -media\nls\c_10000.nls 1 -media\nls\c_10006.nls 1 -media\nls\c_10007.nls 1 -media\nls\c_10029.nls 1 -media\nls\c_10079.nls 1 -media\nls\c_10081.nls 1 -media\nls\c_20866.nls 1 -media\nls\c_21866.nls 1 -media\nls\c_28591.nls 1 -media\nls\c_28592.nls 1 -media\nls\c_28593.nls 1 -media\nls\c_28594.nls 1 -media\nls\c_28595.nls 1 -media\nls\c_28596.nls 1 -media\nls\c_28597.nls 1 -media\nls\c_28598.nls 1 -media\nls\c_28599.nls 1 -media\nls\c_28600.nls 1 -media\nls\c_28603.nls 1 -media\nls\c_28604.nls 1 -media\nls\c_28605.nls 1 -media\nls\c_28606.nls 1 -media\drivers\etc\services 5 -media\inf\audio.inf 6 -media\inf\acpi.inf 6 -media\inf\cdrom.inf 6 -media\inf\display.inf 6 -media\inf\font.inf 6 -media\inf\fdc.inf 6 -media\inf\hdc.inf 6 -media\inf\intl.inf 6 -media\inf\layout.inf 6 -media\inf\machine.inf 6 -media\inf\msmouse.inf 6 -media\inf\keyboard.inf 6 -media\inf\ks.inf 6 -media\inf\NET_NIC.inf 6 -media\inf\netamd.inf 6 -media\inf\netisa.inf 6 -media\inf\netrtpnt.inf 6 -media\inf\nettcpip.inf 6 -media\inf\ports.inf 6 -media\inf\scsi.inf 6 -media\inf\syssetup.inf 6 -media\inf\usbport.inf 6 -media\inf\usb.inf 6 -media\inf\usbstor.inf 6 -media\inf\xboxdisp.inf 6 - - -; Media Files -media\sounds\ReactOS_LogOn.wav 8 - -; Ini Files -boot\bootdata\system.ini 4 - -; Regression Testing -boot\bootdata\bootcdregtest\regtest.cmd 7 optional - -; Subsystems -subsystems\win32\csrss\csrss.exe 1 -subsystems\win32\csrss\win32csr\win32csr.dll 1 -subsystems\ntvdm\ntvdm.exe 1 optional -subsystems\win32\win32k\win32k.sys 1 - -; Optional/proprietary files -modules\optional\netkvm2k.inf 6 optional -modules\optional\netkvm2k.cat 6 optional -modules\optional\netkvm.sys 2 optional -modules\optional\alcxwdm.inf 6 optional -modules\optional\alcxwdm.sys 2 optional -modules\optional\mfc42.dll 1 optional -modules\optional\mfc42u.dll 1 optional -modules\optional\mfc71.dll 1 optional -modules\optional\mfc71u.dll 1 optional -modules\optional\msvbvm50.dll 1 optional -modules\optional\msvbvm60.dll 1 optional -modules\optional\msvcirt.dll 1 optional -modules\optional\msvcp71.dll 1 optional -modules\optional\msvcr71.dll 1 optional -modules\optional\Systema.ttf 3 optional -modules\optional\vmx_fb.dll 1 optional -modules\optional\vmx_mode.dll 1 optional -modules\optional\vmx_svga.inf 6 optional -modules\optional\vmx_svga.sys 2 optional -modules\optional\wine_gecko-1.0.0-x86.cab 4 optional - -; Rosapps -modules\rosapps\applications\screensavers\cylfrac\cylfrac.scr 1 optional -modules\rosapps\applications\screensavers\matrix\matrix.scr 1 optional -modules\rosapps\applications\screensavers\blankscr\scrnsave.scr 1 optional -modules\rosapps\applications\screensavers\starfield\starfield.scr 1 optional -modules\rosapps\applications\screensavers\mazescr\mazescr.scr 1 optional -modules\rosapps\applications\screensavers\butterflies\butterflies.scr 1 optional -modules\rosapps\applications\cmdutils\comp\comp.exe 1 optional -modules\rosapps\applications\cmdutils\mode\mode.exe 1 optional -modules\rosapps\applications\cmdutils\sort\sort.exe 1 optional -modules\rosapps\applications\cmdutils\tee\tee.exe 1 optional -modules\rosapps\applications\cmdutils\touch\touch.exe 1 optional -modules\rosapps\applications\cmdutils\uptime\uptime.exe 1 optional -modules\rosapps\applications\cmdutils\y\y.exe 1 optional -modules\rosapps\applications\devutils\gdb2\gdb2.exe 1 optional -modules\rosapps\applications\devutils\gdihv\gdihv.exe 1 optional -modules\rosapps\applications\devutils\genguid\genguid.exe 1 optional -modules\rosapps\applications\sysutils\gettype\gettype.exe 1 optional -modules\rosapps\applications\net\ncftp\ncftp.exe 1 optional -modules\rosapps\applications\net\netreg\netreg.exe 1 optional -modules\rosapps\applications\net\niclist\niclist.exe 1 optional -modules\rosapps\applications\net\roshttpd\roshttpd.exe 1 optional -modules\rosapps\applications\notevil\notevil.exe 1 optional -modules\rosapps\applications\sysutils\chkdsk\chkdsk.exe 1 optional -modules\rosapps\applications\sysutils\systeminfo\systeminfo.exe 1 optional -modules\rosapps\applications\sysutils\chklib\chklib.exe 1 optional -modules\rosapps\applications\sysutils\ctm\ctm.exe 1 optional -modules\rosapps\applications\sysutils\kill\kill.exe 1 optional -modules\rosapps\applications\sysutils\lsdd\lsdd.exe 1 optional -modules\rosapps\applications\sysutils\man\man.exe 1 optional -modules\rosapps\applications\sysutils\pedump\pedump.exe 1 optional -modules\rosapps\applications\sysutils\regexpl\regexpl.exe 1 optional -modules\rosapps\applications\sysutils\tcat\tcat.exe 1 optional -modules\rosapps\applications\sysutils\tlist\tlist.exe 1 optional -modules\rosapps\applications\sysutils\screenshot\screenshot.exe 1 optional -modules\rosapps\applications\sysutils\utils\binpatch\binpatch.exe 1 optional -modules\rosapps\applications\sysutils\utils\cat\cat.exe 1 optional -modules\rosapps\applications\sysutils\utils\driver\load\load.exe 1 optional -modules\rosapps\applications\sysutils\utils\driver\unload\unload.exe 1 optional -modules\rosapps\applications\sysutils\utils\infinst\infinst.exe 1 optional -modules\rosapps\applications\sysutils\utils\nts2w32err\nts2w32err.exe 1 optional -modules\rosapps\applications\sysutils\utils\objdir\objdir.exe 1 optional -modules\rosapps\applications\sysutils\utils\partinfo\partinfo.exe 1 optional -modules\rosapps\applications\sysutils\utils\ps\ps.exe 1 optional -modules\rosapps\applications\sysutils\utils\rosperf\rosperf.exe 1 optional -modules\rosapps\applications\sysutils\utils\stats\stats.exe 1 optional -modules\rosapps\applications\sysutils\utils\tickcount\tickcount.exe 1 optional -modules\rosapps\applications\winfile\winfile.exe 1 optional -modules\rosapps\demos\maze\maze.exe 1 optional -modules\rosapps\drivers\green\green.sys 2 optional - -; Rostests -modules\rostests\rosautotest\rosautotest.exe 1 optional -modules\rostests\tests\pseh2\pseh2_test.exe 7 optional -modules\rostests\winetests\advapi32\advapi32_winetest.exe 7 optional -modules\rostests\winetests\advpack\advpack_winetest.exe 7 optional -modules\rostests\winetests\browseui\browseui_winetest.exe 7 optional -modules\rostests\winetests\cabinet\cabinet_winetest.exe 7 optional -modules\rostests\winetests\comcat\comcat_winetest.exe 7 optional -modules\rostests\winetests\comctl32\comctl32_winetest.exe 7 optional -modules\rostests\winetests\comdlg32\comdlg32_winetest.exe 7 optional -modules\rostests\winetests\crypt32\crypt32_winetest.exe 7 optional -modules\rostests\winetests\cryptnet\cryptnet_winetest.exe 7 optional -modules\rostests\winetests\gdi32\gdi32_winetest.exe 7 optional -modules\rostests\winetests\gdiplus\gdiplus_winetest.exe 7 optional -modules\rostests\winetests\hlink\hlink_winetest.exe 7 optional -modules\rostests\winetests\icmp\icmp_winetest.exe 7 optional -modules\rostests\winetests\iphlpapi\iphlpapi_winetest.exe 7 optional -modules\rostests\winetests\jscript\jscript_winetest.exe 7 optional -modules\rostests\winetests\kernel32\kernel32_winetest.exe 7 optional -modules\rostests\winetests\lz32\lz32_winetest.exe 7 optional -modules\rostests\winetests\mapi32\mapi32_winetest.exe 7 optional -modules\rostests\winetests\mlang\mlang_winetest.exe 7 optional -modules\rostests\winetests\mshtml\mshtml_winetest.exe 7 optional -modules\rostests\winetests\msi\msi_winetest.exe 7 optional -modules\rostests\winetests\mstask\mstask_winetest.exe 7 optional -modules\rostests\winetests\msvcrt\msvcrt_winetest.exe 7 optional -modules\rostests\winetests\msxml3\msxml3_winetest.exe 7 optional -modules\rostests\winetests\netapi32\netapi32_winetest.exe 7 optional -modules\rostests\winetests\ntdll\ntdll_winetest.exe 7 optional -modules\rostests\winetests\odbccp32\odbccp32_winetest.exe 7 optional -modules\rostests\winetests\ole32\ole32_winetest.exe 7 optional -modules\rostests\winetests\oleaut32\oleaut32_winetest.exe 7 optional -modules\rostests\winetests\powrprof\powrprof_winetest.exe 7 optional -modules\rostests\winetests\psapi\psapi_winetest.exe 7 optional -modules\rostests\winetests\riched20\riched20_winetest.exe 7 optional -modules\rostests\winetests\rpcrt4\rpcrt4_winetest.exe 7 optional -modules\rostests\winetests\rsabase\rsabase_winetest.exe 7 optional -modules\rostests\winetests\rsaenh\rsaenh_winetest.exe 7 optional -modules\rostests\winetests\schannel\schannel_winetest.exe 7 optional -modules\rostests\winetests\secur32\secur32_winetest.exe 7 optional -modules\rostests\winetests\setupapi\setupapi_winetest.exe 7 optional -modules\rostests\winetests\shdocvw\shdocvw_winetest.exe 7 optional -modules\rostests\winetests\shell32\shell32_winetest.exe 7 optional -modules\rostests\winetests\shlwapi\shlwapi_winetest.exe 7 optional -modules\rostests\winetests\urlmon\urlmon_winetest.exe 7 optional -modules\rostests\winetests\user32\user32_winetest.exe 7 optional -modules\rostests\winetests\usp10\usp10_winetest.exe 7 optional -modules\rostests\winetests\uxtheme\uxtheme_winetest.exe 7 optional -modules\rostests\winetests\version\version_winetest.exe 7 optional -modules\rostests\winetests\winhttp\winhttp_winetest.exe 7 optional -modules\rostests\winetests\wininet\wininet_winetest.exe 7 optional -modules\rostests\winetests\winmm\winmm_winetest.exe 7 optional -modules\rostests\winetests\wintrust\wintrust_winetest.exe 7 optional -modules\rostests\winetests\wlanapi\wlanapi_winetest.exe 7 optional -modules\rostests\winetests\ws2_32\ws2_32_winetest.exe 7 optional - -modules\wallpaper\Angelus_02_ROSWP.bmp 4 optional diff --git a/reactos/hal/hal/hal.rbuild b/reactos/hal/hal/hal.rbuild index d89871d099c..965c3ae6f8c 100644 --- a/reactos/hal/hal/hal.rbuild +++ b/reactos/hal/hal/hal.rbuild @@ -22,13 +22,13 @@ - + - + - + diff --git a/reactos/hal/halx86/halup.rbuild b/reactos/hal/halx86/halup.rbuild index 319db427e1b..4b7bdbbf5eb 100644 --- a/reactos/hal/halx86/halup.rbuild +++ b/reactos/hal/halx86/halup.rbuild @@ -1,7 +1,7 @@ - + include diff --git a/reactos/media/inf/inf.rbuild b/reactos/media/inf/inf.rbuild index d430394cad7..c55dc4b8024 100644 --- a/reactos/media/inf/inf.rbuild +++ b/reactos/media/inf/inf.rbuild @@ -1,10 +1,12 @@ - audio.inf acpi.inf + audio.inf cdrom.inf + cpu.inf display.inf + fdc.inf font.inf hdc.inf intl.inf @@ -21,6 +23,7 @@ ports.inf scsi.inf syssetup.inf + usb.inf usbport.inf usbstor.inf xboxdisp.inf diff --git a/reactos/tools/rbuild/backend/mingw/mingw.cpp b/reactos/tools/rbuild/backend/mingw/mingw.cpp index 9c9160142be..55dbe04fb70 100644 --- a/reactos/tools/rbuild/backend/mingw/mingw.cpp +++ b/reactos/tools/rbuild/backend/mingw/mingw.cpp @@ -365,11 +365,18 @@ MingwBackend::ProcessNormal () GenerateTestSupportCode (); GenerateCompilationUnitSupportCode (); GenerateSysSetup (); + GenerateInstallerFileList(); GenerateProxyMakefiles (); CheckAutomaticDependencies (); CloseMakefile (); } +void +MingwBackend::GenerateInstallerFileList() +{ + this->ProjectNode.GenerateInstallerFileList(); +} + void MingwBackend::CreateMakefile () { @@ -1297,7 +1304,7 @@ MingwBackend::OutputRegistryInstallTarget () fprintf ( fMakefile, "\t$(ECHO_MKHIVE)\n" ); fprintf ( fMakefile, - "\t$(MKHIVE_TARGET) boot%cbootdata %s $(ARCH) boot%cbootdata%chiveinst_$(ARCH).inf\n", + "\t$(MKHIVE_TARGET) boot%cbootdata %s boot%cbootdata%chiveinst_$(ARCH).inf\n", cSep, GetFullPath ( system32 ).c_str (), cSep, cSep ); fprintf ( fMakefile, diff --git a/reactos/tools/rbuild/backend/mingw/mingw.h b/reactos/tools/rbuild/backend/mingw/mingw.h index c4331b9c152..4e313946d1d 100644 --- a/reactos/tools/rbuild/backend/mingw/mingw.h +++ b/reactos/tools/rbuild/backend/mingw/mingw.h @@ -119,6 +119,7 @@ private: bool use_pch; bool DetectMicrosoftCompiler ( std::string& version, std::string& path ); bool DetectMicrosoftLinker ( std::string& version, std::string& path ); + void GenerateInstallerFileList(); }; diff --git a/reactos/tools/rbuild/backend/mingw/modulehandler.cpp b/reactos/tools/rbuild/backend/mingw/modulehandler.cpp index 6b0131c3c7c..282112fda26 100644 --- a/reactos/tools/rbuild/backend/mingw/modulehandler.cpp +++ b/reactos/tools/rbuild/backend/mingw/modulehandler.cpp @@ -2763,8 +2763,8 @@ MingwIsoModuleHandler::GenerateIsoModuleTarget () const FileLocation *isoboot = bootModule->output; // prepare reactos.dff and reactos.inf - FileLocation reactosDff ( SourceDirectory, - "boot" + sSep + "bootdata" + sSep + "packages", + FileLocation reactosDff ( IntermediateDirectory, + "", "reactos.dff" ); FileLocation reactosInf ( bootcdReactos.directory, bootcdReactos.relative_path, diff --git a/reactos/tools/rbuild/installfile.cpp b/reactos/tools/rbuild/installfile.cpp index 0083340b7b7..794e32b7255 100644 --- a/reactos/tools/rbuild/installfile.cpp +++ b/reactos/tools/rbuild/installfile.cpp @@ -36,6 +36,11 @@ InstallFile::InstallFile ( const Project& project, const XMLAttribute* base = node.GetAttribute ( "installbase", false ); const XMLAttribute* newname = node.GetAttribute ( "newname", false ); + if(base) + installbase = base->value; + else + installbase = ""; + DirectoryLocation source_directory = SourceDirectory; const XMLAttribute* att = node.GetAttribute ( "root", false ); if ( att != NULL) @@ -65,4 +70,4 @@ InstallFile::InstallFile ( const Project& project, ? newname->value : node.value, &node ); -} +} \ No newline at end of file diff --git a/reactos/tools/rbuild/module.cpp b/reactos/tools/rbuild/module.cpp index dd59e0bdc86..44389ed0db3 100644 --- a/reactos/tools/rbuild/module.cpp +++ b/reactos/tools/rbuild/module.cpp @@ -396,6 +396,12 @@ Module::Module ( const Project& project, if ( att != NULL ) { const XMLAttribute* installbase = moduleNode.GetAttribute ( "installbase", false ); + + if(installbase) + this->installbase = installbase->value; + else + this->installbase = ""; + install = new FileLocation ( InstallDirectory, installbase ? installbase->value : "", att->value, diff --git a/reactos/tools/rbuild/project.cpp b/reactos/tools/rbuild/project.cpp index 16eea20a006..4a2a0313bdf 100644 --- a/reactos/tools/rbuild/project.cpp +++ b/reactos/tools/rbuild/project.cpp @@ -541,3 +541,95 @@ Project::GetLinkerSet () const } return ""; } + +void +Project::GenerateInstallerFileList() +{ + std::map Result; + std::map::iterator i; + std::string buffer = ""; + + printf ( "Generating reactos.dff..." ); + std::string path = Environment::GetIntermediatePath(); + path += sSep + "reactos.dff"; + FILE* f = fopen(path.c_str(), "wb"); + + buffer = "; Main ReactOS package\r\n" + ".Set DiskLabelTemplate=\"ReactOS\" ; Label of disk\r\n" + ".Set CabinetNameTemplate=\"reactos.cab\" ; reactos.cab\r\n" + ".Set InfFileName=\"reactos.inf\" ; reactos.inf\r\n" + ".InfBegin\r\n" + "[Version]\r\n" + "Signature = \"$ReactOS$\"\r\n" + "[Directories]\r\n" + "1 = system32\r\n" + "2 = system32\\drivers\r\n" + "3 = Fonts\r\n" + "4 =\r\n" + "5 = system32\\drivers\\etc\r\n" + "6 = inf\r\n" + "7 = bin\r\n" + "8 = media\r\n" + ".InfEnd\r\n" + "; Contents of disk\r\n" + ".InfBegin\r\n" + "[SourceFiles]\r\n" + ".InfEnd\r\n"; + fprintf(f,buffer.c_str()); + for(i = modules.begin(); i != modules.end(); ++i) + { + buffer = ""; + if(i->second->install) + { + buffer = i->second->output->relative_path + sSep; + buffer += i->second->output->name; + if(i->second->installbase == "system32") + buffer += "\t1"; + if(i->second->installbase == "system32/drivers") + buffer += "\t2"; + else if(i->second->installbase == "fonts") + buffer += "\t3"; + else if(i->second->installbase == "") + buffer += "\t4"; + else if(i->second->installbase == "system32/drivers/etc") + buffer += "\t5"; + else if(i->second->installbase == "inf") + buffer += "\t6"; + else if(i->second->installbase == "bin") + buffer += "\t7"; + else if(i->second->installbase == "media") + buffer += "\t8"; + + fprintf(f, "%s\r\n",buffer.c_str()); + } + } + + for(size_t j = 0; j< installfiles.size(); j++) + { + buffer = ""; + buffer = installfiles[j]->source->relative_path + sSep; + buffer += installfiles[j]->target->name; + if(installfiles[j]->installbase == "system32") + buffer += "\t1"; + if(installfiles[j]->installbase == "system32/drivers") + buffer += "\t2"; + else if(installfiles[j]->installbase == "fonts") + buffer += "\t3"; + else if(installfiles[j]->installbase == "") + buffer += "\t4"; + else if(installfiles[j]->installbase == "system32/drivers/etc") + buffer += "\t5"; + else if(installfiles[j]->installbase == "inf") + buffer += "\t6"; + else if(installfiles[j]->installbase == "bin") + buffer += "\t7"; + else if(installfiles[j]->installbase == "media") + buffer += "\t8"; + + + fprintf(f,"%s\r\n",buffer.c_str()); + } + + printf ( "done\n" ); + +} diff --git a/reactos/tools/rbuild/rbuild.h b/reactos/tools/rbuild/rbuild.h index f8ae933a130..cf93ad987e7 100644 --- a/reactos/tools/rbuild/rbuild.h +++ b/reactos/tools/rbuild/rbuild.h @@ -276,6 +276,7 @@ public: const Property* LookupProperty ( const std::string& name ) const; std::string GetCompilerSet () const; std::string GetLinkerSet () const; + void GenerateInstallerFileList(); private: std::string ResolveNextProperty ( const std::string& s ) const; void ReadXml (); @@ -400,6 +401,7 @@ public: bool isCRT; std::string CRT; bool dynamicCRT; + std::string installbase; FileLocation *output; // "path/foo.exe" FileLocation *dependency; // "path/foo.exe" or "path/libfoo.a" FileLocation *install; @@ -904,6 +906,7 @@ class InstallFile : public XmlNode public: FileLocation *source; FileLocation *target; + std::string installbase; InstallFile ( const Project& project, const XMLElement& bootstrapNode, From 46b765a5fa875d991d5e86b67132850840e356c7 Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Sat, 26 Dec 2009 06:23:47 +0000 Subject: [PATCH 245/286] [rbuild] Really fix mkhive command. svn path=/branches/ros-amd64-bringup/; revision=44763 --- reactos/tools/rbuild/backend/mingw/mingw.cpp | 4 ++-- reactos/tools/rbuild/backend/mingw/modulehandler.cpp | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/reactos/tools/rbuild/backend/mingw/mingw.cpp b/reactos/tools/rbuild/backend/mingw/mingw.cpp index 55dbe04fb70..c50f326a8d2 100644 --- a/reactos/tools/rbuild/backend/mingw/mingw.cpp +++ b/reactos/tools/rbuild/backend/mingw/mingw.cpp @@ -1297,14 +1297,14 @@ MingwBackend::OutputRegistryInstallTarget () "install_registry: %s\n", registryTargetFiles.c_str () ); fprintf ( fMakefile, - "%s: %s %s $(MKHIVE_TARGET)\n", + "%s: %s %s $(mkhive_TARGET)\n", registryTargetFiles.c_str (), registrySourceFiles.c_str (), GetFullPath ( system32 ).c_str () ); fprintf ( fMakefile, "\t$(ECHO_MKHIVE)\n" ); fprintf ( fMakefile, - "\t$(MKHIVE_TARGET) boot%cbootdata %s boot%cbootdata%chiveinst_$(ARCH).inf\n", + "\t$(mkhive_TARGET) boot%cbootdata %s boot%cbootdata%chiveinst_$(ARCH).inf\n", cSep, GetFullPath ( system32 ).c_str (), cSep, cSep ); fprintf ( fMakefile, diff --git a/reactos/tools/rbuild/backend/mingw/modulehandler.cpp b/reactos/tools/rbuild/backend/mingw/modulehandler.cpp index 282112fda26..abc9c653441 100644 --- a/reactos/tools/rbuild/backend/mingw/modulehandler.cpp +++ b/reactos/tools/rbuild/backend/mingw/modulehandler.cpp @@ -2939,7 +2939,7 @@ MingwLiveIsoModuleHandler::OutputRegistryCommands ( string& livecdDirectory ) fprintf ( fMakefile, "\t$(ECHO_MKHIVE)\n" ); fprintf ( fMakefile, - "\t$(mkhive_TARGET) boot%cbootdata %s $(ARCH) boot%cbootdata%clivecd.inf boot%cbootdata%chiveinst_$(ARCH).inf\n", + "\t$(mkhive_TARGET) boot%cbootdata %s boot%cbootdata%clivecd.inf boot%cbootdata%chiveinst_$(ARCH).inf\n", cSep, backend->GetFullPath ( reactosSystem32ConfigDirectory ).c_str (), cSep, cSep, cSep, cSep ); } From 56fd28cbe838fd8e0e33c33f1c75e56ee6bf924e Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Sat, 26 Dec 2009 06:40:23 +0000 Subject: [PATCH 246/286] [rbuild] - fix mkhive command try 2. - 100% tested svn path=/branches/ros-amd64-bringup/; revision=44764 --- reactos/tools/rbuild/backend/mingw/mingw.cpp | 2 +- reactos/tools/rbuild/backend/mingw/modulehandler.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/reactos/tools/rbuild/backend/mingw/mingw.cpp b/reactos/tools/rbuild/backend/mingw/mingw.cpp index c50f326a8d2..2eb5a263fb7 100644 --- a/reactos/tools/rbuild/backend/mingw/mingw.cpp +++ b/reactos/tools/rbuild/backend/mingw/mingw.cpp @@ -1304,7 +1304,7 @@ MingwBackend::OutputRegistryInstallTarget () fprintf ( fMakefile, "\t$(ECHO_MKHIVE)\n" ); fprintf ( fMakefile, - "\t$(mkhive_TARGET) boot%cbootdata %s boot%cbootdata%chiveinst_$(ARCH).inf\n", + "\t$(mkhive_TARGET) boot%cbootdata %s $(ARCH) boot%cbootdata%chiveinst_$(ARCH).inf\n", cSep, GetFullPath ( system32 ).c_str (), cSep, cSep ); fprintf ( fMakefile, diff --git a/reactos/tools/rbuild/backend/mingw/modulehandler.cpp b/reactos/tools/rbuild/backend/mingw/modulehandler.cpp index abc9c653441..282112fda26 100644 --- a/reactos/tools/rbuild/backend/mingw/modulehandler.cpp +++ b/reactos/tools/rbuild/backend/mingw/modulehandler.cpp @@ -2939,7 +2939,7 @@ MingwLiveIsoModuleHandler::OutputRegistryCommands ( string& livecdDirectory ) fprintf ( fMakefile, "\t$(ECHO_MKHIVE)\n" ); fprintf ( fMakefile, - "\t$(mkhive_TARGET) boot%cbootdata %s boot%cbootdata%clivecd.inf boot%cbootdata%chiveinst_$(ARCH).inf\n", + "\t$(mkhive_TARGET) boot%cbootdata %s $(ARCH) boot%cbootdata%clivecd.inf boot%cbootdata%chiveinst_$(ARCH).inf\n", cSep, backend->GetFullPath ( reactosSystem32ConfigDirectory ).c_str (), cSep, cSep, cSep, cSep ); } From 4c27361c3bd8c80281b1f35eaa04df98f29f0373 Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Sun, 27 Dec 2009 18:03:16 +0000 Subject: [PATCH 247/286] Fix warning cast to 'unsigned int' loses precision. svn path=/branches/ros-amd64-bringup/; revision=44772 --- reactos/base/applications/sndrec32/audio_wavein.hpp | 2 +- reactos/base/applications/sndrec32/audio_waveout.hpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/reactos/base/applications/sndrec32/audio_wavein.hpp b/reactos/base/applications/sndrec32/audio_wavein.hpp index 0288ea6824e..7f9285b6b65 100644 --- a/reactos/base/applications/sndrec32/audio_wavein.hpp +++ b/reactos/base/applications/sndrec32/audio_wavein.hpp @@ -305,7 +305,7 @@ class audio_wavein if ( aud_info.bits() == 16 ) svalue = ( unsigned int ) abs( *(( short * ) (main_buffer + aud_info.bytes_in_samples( nsamp )))); else if ( aud_info.bits() == 8 ) - svalue = (unsigned int)(( unsigned char * ) *(main_buffer + aud_info.bytes_in_samples( nsamp ))); + svalue = (unsigned int)(( ptrdiff_t ) *(main_buffer + aud_info.bytes_in_samples( nsamp ))); else svalue = 0; diff --git a/reactos/base/applications/sndrec32/audio_waveout.hpp b/reactos/base/applications/sndrec32/audio_waveout.hpp index a36518dc3f3..0e22afdad7e 100644 --- a/reactos/base/applications/sndrec32/audio_waveout.hpp +++ b/reactos/base/applications/sndrec32/audio_waveout.hpp @@ -229,7 +229,7 @@ class audio_waveout if ( aud_info.bits() == 16 ) svalue = ( unsigned int ) abs( *(( short * ) (main_buffer + aud_info.bytes_in_samples( nsamp )))); else if ( aud_info.bits() == 8 ) - svalue = (unsigned int)(( unsigned char * ) *(main_buffer + aud_info.bytes_in_samples( nsamp ))); + svalue = (unsigned int)(( ptrdiff_t ) *(main_buffer + aud_info.bytes_in_samples( nsamp ))); else svalue = 0; From 948f940cd9bc55bccb03380d27be32e80027b059 Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Sun, 27 Dec 2009 18:19:20 +0000 Subject: [PATCH 248/286] Implement KeGetTrapFrame and KeGetExceptionFrame macros. svn path=/branches/ros-amd64-bringup/; revision=44773 --- reactos/ntoskrnl/include/internal/amd64/ke.h | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/reactos/ntoskrnl/include/internal/amd64/ke.h b/reactos/ntoskrnl/include/internal/amd64/ke.h index b5140b0b52c..fc5417189ba 100644 --- a/reactos/ntoskrnl/include/internal/amd64/ke.h +++ b/reactos/ntoskrnl/include/internal/amd64/ke.h @@ -102,6 +102,17 @@ extern ULONG KeI386CpuStep; #define KeSetContextReturnRegister(Context, ReturnValue) \ ((Context)->Rax = (ReturnValue)) +// +// Macro to get trap and exception frame from a thread stack +// +#define KeGetTrapFrame(Thread) \ + (PKTRAP_FRAME)((ULONG_PTR)((Thread)->InitialStack) - \ + sizeof(KTRAP_FRAME)) + +#define KeGetExceptionFrame(Thread) \ + (PKEXCEPTION_FRAME)((ULONG_PTR)KeGetTrapFrame(Thread) - \ + sizeof(KEXCEPTION_FRAME)) + // // Returns the Interrupt State from a Trap Frame. // ON = TRUE, OFF = FALSE From 5f039ce6364ae395286392388b3b53b14954f762 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sun, 27 Dec 2009 21:30:36 +0000 Subject: [PATCH 249/286] fix USERMODE=0 compilation svn path=/branches/ros-amd64-bringup/; revision=44778 --- reactos/lib/3rdparty/3rdparty.rbuild | 8 +++++--- reactos/lib/3rdparty/mingw/mingw.rbuild | 4 +++- reactos/subsystems/win32/win32.rbuild | 8 +++++--- 3 files changed, 13 insertions(+), 7 deletions(-) diff --git a/reactos/lib/3rdparty/3rdparty.rbuild b/reactos/lib/3rdparty/3rdparty.rbuild index 7f0c2006e45..ee7d3a59576 100644 --- a/reactos/lib/3rdparty/3rdparty.rbuild +++ b/reactos/lib/3rdparty/3rdparty.rbuild @@ -7,9 +7,11 @@ - - - + + + + + diff --git a/reactos/lib/3rdparty/mingw/mingw.rbuild b/reactos/lib/3rdparty/mingw/mingw.rbuild index 1b544f59879..b37c2817c3a 100644 --- a/reactos/lib/3rdparty/mingw/mingw.rbuild +++ b/reactos/lib/3rdparty/mingw/mingw.rbuild @@ -5,7 +5,9 @@ include/reactos/mingw-w64 - kernel32 + + kernel32 + _newmode.c atonexit.c binmode.c diff --git a/reactos/subsystems/win32/win32.rbuild b/reactos/subsystems/win32/win32.rbuild index 7dc498f28dd..50546eb032c 100644 --- a/reactos/subsystems/win32/win32.rbuild +++ b/reactos/subsystems/win32/win32.rbuild @@ -1,9 +1,11 @@ - - - + + + + + From ea9bdd25e82e8a31cbcd990b2d74294e17a04f46 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sun, 27 Dec 2009 22:06:48 +0000 Subject: [PATCH 250/286] reduce differences to trunk svn path=/branches/ros-amd64-bringup/; revision=44779 --- reactos/dll/win32/beepmidi/beepmidi.c | 2 +- reactos/dll/win32/comctl32/commctrl.c | 1 - reactos/dll/win32/gdiplus/brush.c | 16 +-- reactos/dll/win32/gdiplus/gdiplus.c | 2 +- reactos/dll/win32/gdiplus/graphics.c | 4 +- reactos/dll/win32/gdiplus/image.c | 20 ++-- reactos/dll/win32/glu32/glu32.spec | 112 +++++++++++---------- reactos/dll/win32/mmdrv/wave.c | 2 +- reactos/dll/win32/ole32/ole32.spec | 2 +- reactos/dll/win32/setupapi/parser.c | 6 +- reactos/dll/win32/shell32/shell32.rbuild | 2 +- reactos/dll/win32/wdmaud.drv/wdmaud.rbuild | 2 +- reactos/dll/win32/ws2_32_new/ws2_32.rbuild | 2 +- 13 files changed, 89 insertions(+), 84 deletions(-) diff --git a/reactos/dll/win32/beepmidi/beepmidi.c b/reactos/dll/win32/beepmidi/beepmidi.c index 57facf365c4..6365d05e65c 100644 --- a/reactos/dll/win32/beepmidi/beepmidi.c +++ b/reactos/dll/win32/beepmidi/beepmidi.c @@ -749,7 +749,7 @@ ProcessLongMidiMessage( header->dwFlags |= MHDR_DONE; header->dwFlags &= ~ MHDR_INQUEUE; - DPRINT("Success? %d\n", CallClient(the_device, MOM_DONE, (DWORD_PTR)header, 0)); + DPRINT("Success? %d\n", CallClient(the_device, MOM_DONE, (DWORD_PTR) header, 0)); return MMSYSERR_NOERROR; } diff --git a/reactos/dll/win32/comctl32/commctrl.c b/reactos/dll/win32/comctl32/commctrl.c index c9050df341e..db0eade682b 100644 --- a/reactos/dll/win32/comctl32/commctrl.c +++ b/reactos/dll/win32/comctl32/commctrl.c @@ -707,7 +707,6 @@ CreateUpDownControl (DWORD style, INT x, INT y, INT cx, INT cy, VOID WINAPI InitCommonControls (void) { - return; } diff --git a/reactos/dll/win32/gdiplus/brush.c b/reactos/dll/win32/gdiplus/brush.c index 48195403e39..bfce7d85bb5 100644 --- a/reactos/dll/win32/gdiplus/brush.c +++ b/reactos/dll/win32/gdiplus/brush.c @@ -303,20 +303,20 @@ GpStatus WINGDIPAPI GdipCreateHatchBrush(HatchStyle hatchstyle, ARGB forecol, AR } else { - FIXME("Unimplemented hatch style %d\n", hatchstyle); + FIXME("Unimplemented hatch style %d\n", hatchstyle); - (*brush)->brush.lb.lbStyle = BS_SOLID; - (*brush)->brush.lb.lbColor = fgcol; - (*brush)->brush.lb.lbHatch = 0; + (*brush)->brush.lb.lbStyle = BS_SOLID; + (*brush)->brush.lb.lbColor = fgcol; + (*brush)->brush.lb.lbHatch = 0; (*brush)->brush.gdibrush = CreateBrushIndirect(&(*brush)->brush.lb); } if (stat == Ok) { - (*brush)->brush.bt = BrushTypeHatchFill; - (*brush)->forecol = forecol; - (*brush)->backcol = backcol; - (*brush)->hatchstyle = hatchstyle; + (*brush)->brush.bt = BrushTypeHatchFill; + (*brush)->forecol = forecol; + (*brush)->backcol = backcol; + (*brush)->hatchstyle = hatchstyle; } else { diff --git a/reactos/dll/win32/gdiplus/gdiplus.c b/reactos/dll/win32/gdiplus/gdiplus.c index b32ed3793be..9fe933280ab 100644 --- a/reactos/dll/win32/gdiplus/gdiplus.c +++ b/reactos/dll/win32/gdiplus/gdiplus.c @@ -235,7 +235,7 @@ INT arc2polybezier(GpPointF * points, REAL x1, REAL y1, REAL x2, REAL y2, } if (points) - add_arc_part(&points[i], x1, y1, x2, y2, start_angle, end_angle, i == 0); + add_arc_part(&points[i], x1, y1, x2, y2, start_angle, end_angle, i == 0); start_angle += M_PI_2 * (sweepAngle < 0.0 ? -1.0 : 1.0); } diff --git a/reactos/dll/win32/gdiplus/graphics.c b/reactos/dll/win32/gdiplus/graphics.c index 5efa58f9453..df107e42040 100644 --- a/reactos/dll/win32/gdiplus/graphics.c +++ b/reactos/dll/win32/gdiplus/graphics.c @@ -222,7 +222,7 @@ static ARGB blend_line_gradient(GpLineGradient* brush, REAL position) } if (brush->pblendcount == 0) - return blend_colors(brush->startcolor, brush->endcolor, blendfac); + return blend_colors(brush->startcolor, brush->endcolor, blendfac); else { int i=1; @@ -240,7 +240,7 @@ static ARGB blend_line_gradient(GpLineGradient* brush, REAL position) right_blendcolor = brush->pblendcolor[i]; blendfac = (blendfac - left_blendpos) / (right_blendpos - left_blendpos); return blend_colors(left_blendcolor, right_blendcolor, blendfac); -} + } } static void brush_fill_path(GpGraphics *graphics, GpBrush* brush) diff --git a/reactos/dll/win32/gdiplus/image.c b/reactos/dll/win32/gdiplus/image.c index 3742b87c072..5b70918aa07 100644 --- a/reactos/dll/win32/gdiplus/image.c +++ b/reactos/dll/win32/gdiplus/image.c @@ -257,8 +257,8 @@ GpStatus WINGDIPAPI GdipBitmapGetPixel(GpBitmap* bitmap, INT x, INT y, break; default: FIXME("not implemented for format 0x%x\n", bitmap->format); - return NotImplemented; -} + return NotImplemented; + } *color = a<<24|r<<16|g<<8|b; @@ -405,8 +405,8 @@ GpStatus WINGDIPAPI GdipBitmapSetPixel(GpBitmap* bitmap, INT x, INT y, break; default: FIXME("not implemented for format 0x%x\n", bitmap->format); - return NotImplemented; -} + return NotImplemented; + } return Ok; } @@ -1789,23 +1789,23 @@ static GpStatus decode_image_bmp(IStream* stream, REFCLSID clsid, GpImage **imag bitmap = (GpBitmap*)*image; if (status == Ok && bitmap->format == PixelFormat32bppARGB) -{ + { /* WIC supports bmp files with alpha, but gdiplus does not */ bitmap->format = PixelFormat32bppRGB; } return status; - } +} static GpStatus decode_image_jpeg(IStream* stream, REFCLSID clsid, GpImage **image) { return decode_image_wic(stream, &CLSID_WICJpegDecoder, image); - } +} static GpStatus decode_image_png(IStream* stream, REFCLSID clsid, GpImage **image) - { +{ return decode_image_wic(stream, &CLSID_WICPngDecoder, image); - } +} static GpStatus decode_image_gif(IStream* stream, REFCLSID clsid, GpImage **image) { @@ -1925,7 +1925,7 @@ GpStatus WINGDIPAPI GdipLoadImageFromStream(IStream* stream, GpImage **image) if (stat == Ok) { memcpy(&(*image)->format, &codec->info.FormatID, sizeof(GUID)); -} + } return stat; } diff --git a/reactos/dll/win32/glu32/glu32.spec b/reactos/dll/win32/glu32/glu32.spec index 79a654814b1..e9db336accd 100644 --- a/reactos/dll/win32/glu32/glu32.spec +++ b/reactos/dll/win32/glu32/glu32.spec @@ -1,53 +1,59 @@ -@ stdcall gluBeginCurve(ptr) -@ stdcall gluBeginPolygon(ptr) -@ stdcall gluBeginSurface(ptr) -@ stdcall gluBeginTrim(ptr) -@ stdcall gluBuild1DMipmaps(long long long long long ptr) -@ stdcall gluBuild2DMipmaps(long long long long long long ptr) -@ stdcall gluCheckExtension(str ptr) -@ stdcall gluCylinder(ptr double double double long long) -@ stdcall gluDeleteNurbsRenderer(ptr) -@ stdcall gluDeleteQuadric(ptr) -@ stdcall gluDeleteTess(ptr) -@ stdcall gluDisk(ptr double double long long) -@ stdcall gluEndCurve(ptr) -@ stdcall gluEndPolygon(ptr) -@ stdcall gluEndSurface(ptr) -@ stdcall gluEndTrim(ptr) -@ stdcall gluErrorString(long) -@ stub gluErrorUnicodeStringEXT -@ stdcall gluGetNurbsProperty(ptr long ptr) -@ stdcall gluGetString(long) -@ stdcall gluGetTessProperty(ptr ptr ptr) -@ stdcall gluLoadSamplingMatrices(ptr ptr ptr ptr) -@ stdcall gluLookAt(double double double double double double double double double) -@ stdcall gluNewNurbsRenderer() -@ stdcall gluNewQuadric() -@ stdcall gluNewTess() -@ stdcall gluNextContour(ptr long) -@ stdcall gluNurbsCallback(ptr long ptr) -@ stdcall gluNurbsCurve(ptr long ptr long ptr long long) -@ stdcall gluNurbsProperty(ptr long long) -@ stdcall gluNurbsSurface(ptr long ptr long ptr long long ptr long long long) -@ stdcall gluOrtho2D(double double double double) -@ stdcall gluPartialDisk(ptr double double long long double double) -@ stdcall gluPerspective(double double double double) -@ stdcall gluPickMatrix(double double double double ptr) -@ stdcall gluProject(double double double ptr ptr ptr ptr ptr ptr) -@ stdcall gluPwlCurve(ptr long ptr long long) -@ stdcall gluQuadricCallback(ptr long ptr) -@ stdcall gluQuadricDrawStyle(ptr long) -@ stdcall gluQuadricNormals(ptr long) -@ stdcall gluQuadricOrientation(ptr long) -@ stdcall gluQuadricTexture(ptr long) -@ stdcall gluScaleImage(long long long long ptr long long long ptr) -@ stdcall gluSphere(ptr double long long) -@ stdcall gluTessBeginContour(ptr) -@ stdcall gluTessBeginPolygon(ptr ptr) -@ stdcall gluTessCallback(ptr long ptr) -@ stdcall gluTessEndContour(ptr) -@ stdcall gluTessEndPolygon(ptr) -@ stdcall gluTessNormal(ptr double double double) -@ stdcall gluTessProperty(ptr long double) -@ stdcall gluTessVertex(ptr ptr ptr) -@ stdcall gluUnProject(double double double ptr ptr ptr ptr ptr ptr) \ No newline at end of file +@ stdcall gluBeginCurve(ptr) +@ stdcall gluBeginPolygon(ptr) +@ stdcall gluBeginSurface(ptr) +@ stdcall gluBeginTrim(ptr) +@ stdcall gluBuild1DMipmapLevels(long long long long long long long long ptr) +@ stdcall gluBuild1DMipmaps(long long long long long ptr) +@ stdcall gluBuild2DMipmapLevels(long long long long long long long long long ptr) +@ stdcall gluBuild2DMipmaps(long long long long long long ptr) +@ stdcall gluBuild3DMipmapLevels(long long long long long long long long long long ptr) +@ stdcall gluBuild3DMipmaps(long long long long long long long ptr) +@ stdcall gluCheckExtension(str ptr) +@ stdcall gluCylinder(ptr double double double long long) +@ stdcall gluDeleteNurbsRenderer(ptr) +@ stdcall gluDeleteQuadric(ptr) +@ stdcall gluDeleteTess(ptr) +@ stdcall gluDisk(ptr double double long long) +@ stdcall gluEndCurve(ptr) +@ stdcall gluEndPolygon(ptr) +@ stdcall gluEndSurface(ptr) +@ stdcall gluEndTrim(ptr) +@ stdcall gluErrorString(long) +@ stdcall gluGetNurbsProperty(ptr long ptr) +@ stdcall gluGetString(long) +@ stdcall gluGetTessProperty(ptr long ptr) +@ stdcall gluLoadSamplingMatrices(ptr ptr ptr ptr) +@ stdcall gluLookAt(double double double double double double double double double) +@ stdcall gluNewNurbsRenderer() +@ stdcall gluNewQuadric() +@ stdcall gluNewTess() +@ stdcall gluNextContour(ptr long) +@ stdcall gluNurbsCallback(ptr long ptr) +@ stdcall gluNurbsCallbackData(ptr ptr) +@ stdcall gluNurbsCallbackDataEXT(ptr ptr) +@ stdcall gluNurbsCurve(ptr long ptr long ptr long long) +@ stdcall gluNurbsProperty(ptr long long) +@ stdcall gluNurbsSurface(ptr long ptr long ptr long long ptr long long long) +@ stdcall gluOrtho2D(double double double double) +@ stdcall gluPartialDisk(ptr double double long long double double) +@ stdcall gluPerspective(double double double double) +@ stdcall gluPickMatrix(double double double double ptr) +@ stdcall gluProject(double double double ptr ptr ptr ptr ptr ptr) +@ stdcall gluPwlCurve(ptr long ptr long long) +@ stdcall gluQuadricCallback(ptr long ptr) +@ stdcall gluQuadricDrawStyle(ptr long) +@ stdcall gluQuadricNormals(ptr long) +@ stdcall gluQuadricOrientation(ptr long) +@ stdcall gluQuadricTexture(ptr long) +@ stdcall gluScaleImage(long long long long ptr long long long ptr) +@ stdcall gluSphere(ptr double long long) +@ stdcall gluTessBeginContour(ptr) +@ stdcall gluTessBeginPolygon(ptr ptr) +@ stdcall gluTessCallback(ptr long ptr) +@ stdcall gluTessEndContour(ptr) +@ stdcall gluTessEndPolygon(ptr) +@ stdcall gluTessNormal(ptr double double double) +@ stdcall gluTessProperty(ptr long double) +@ stdcall gluTessVertex(ptr ptr ptr) +@ stdcall gluUnProject(double double double ptr ptr ptr ptr ptr ptr) +@ stdcall gluUnProject4(double double double double ptr ptr ptr double double ptr ptr ptr ptr) diff --git a/reactos/dll/win32/mmdrv/wave.c b/reactos/dll/win32/mmdrv/wave.c index fb688de20a5..408eb86b871 100644 --- a/reactos/dll/win32/mmdrv/wave.c +++ b/reactos/dll/win32/mmdrv/wave.c @@ -112,7 +112,7 @@ ReturnCompletedBuffers(SessionInfo* session_info) message = (session_info->device_type == WaveOutDevice) ? WOM_DONE : WIM_DATA; - DPRINT("Notifying client that buffer 0x%x is done\n", header); + DPRINT("Notifying client that buffer 0x%p is done\n", header); /* Notify the client */ NotifyClient(session_info, message, (DWORD_PTR) header, 0); diff --git a/reactos/dll/win32/ole32/ole32.spec b/reactos/dll/win32/ole32/ole32.spec index f39dbb01550..79e7686c11d 100644 --- a/reactos/dll/win32/ole32/ole32.spec +++ b/reactos/dll/win32/ole32/ole32.spec @@ -282,4 +282,4 @@ @ stdcall WriteClassStm(ptr ptr) @ stdcall WriteFmtUserTypeStg(ptr long ptr) @ stub WriteOleStg -@ stub WriteStringStream \ No newline at end of file +@ stub WriteStringStream diff --git a/reactos/dll/win32/setupapi/parser.c b/reactos/dll/win32/setupapi/parser.c index f9ca84bfb0b..e1b693ddaec 100644 --- a/reactos/dll/win32/setupapi/parser.c +++ b/reactos/dll/win32/setupapi/parser.c @@ -1906,13 +1906,13 @@ BOOL WINAPI SetupGetIntField( PINFCONTEXT context, DWORD index, PINT result ) if (!*buffer) *result = 0; else { - res = strtol( buffer, &end, 0 ); + res = strtol( buffer, &end, 0 ); if (end != buffer && !*end) *result = res; else - { + { SetLastError( ERROR_INVALID_DATA ); ret = FALSE; - } + } } done: diff --git a/reactos/dll/win32/shell32/shell32.rbuild b/reactos/dll/win32/shell32/shell32.rbuild index f020da53f1c..5276af049f5 100644 --- a/reactos/dll/win32/shell32/shell32.rbuild +++ b/reactos/dll/win32/shell32/shell32.rbuild @@ -1,5 +1,5 @@ - + . diff --git a/reactos/dll/win32/wdmaud.drv/wdmaud.rbuild b/reactos/dll/win32/wdmaud.drv/wdmaud.rbuild index 53473c9bee3..69b1f5729ed 100644 --- a/reactos/dll/win32/wdmaud.drv/wdmaud.rbuild +++ b/reactos/dll/win32/wdmaud.drv/wdmaud.rbuild @@ -22,4 +22,4 @@ mmixer.c legacy.c wdmaud.rc - \ No newline at end of file + diff --git a/reactos/dll/win32/ws2_32_new/ws2_32.rbuild b/reactos/dll/win32/ws2_32_new/ws2_32.rbuild index 5e768ff99e6..2fee79c1a9e 100644 --- a/reactos/dll/win32/ws2_32_new/ws2_32.rbuild +++ b/reactos/dll/win32/ws2_32_new/ws2_32.rbuild @@ -1,4 +1,4 @@ - + inc include/reactos/winsock From c8743e677ecfa1da21812c11369c47a44fe6dbce Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 28 Dec 2009 00:37:29 +0000 Subject: [PATCH 251/286] [KE] Make trap handling cleaner / simplify stack layout by using the P1Home ... P5 members of KTRAP_FRAME and KEXCEPTION_FRAME as save area for function parameters. svn path=/branches/ros-amd64-bringup/; revision=44781 --- reactos/ntoskrnl/ke/amd64/trap.S | 67 ++++++++++++++------------------ 1 file changed, 29 insertions(+), 38 deletions(-) diff --git a/reactos/ntoskrnl/ke/amd64/trap.S b/reactos/ntoskrnl/ke/amd64/trap.S index 4a720cd2be1..6d37873baf5 100644 --- a/reactos/ntoskrnl/ke/amd64/trap.S +++ b/reactos/ntoskrnl/ke/amd64/trap.S @@ -67,13 +67,9 @@ _MsgTrapInfo: * |-------------------| * | KTRAP_FRAME | * |-------------------| <- rbp - * | 0x20 bytes params | - * |-------------------| - * | KEXCEPTION_FRAME | - * |-------------------| * | EXCEPTION_RECORD | * |-------------------| - * | 0x28 bytes params | + * | KEXCEPTION_FRAME | * |-------------------| <- rsp * */ @@ -84,7 +80,7 @@ _MsgTrapInfo: .macro ENTER_TRAP_FRAME AllocSize Flags .set SIZE_INITIAL_FRAME, 7 * 8 //.set SIZE_LOCAL_DATA, SIZE_EXCEPTION_RECORD + 0x28 -.set SIZE_TRAP_FRAME_ALLOC, SIZE_KTRAP_FRAME - SIZE_INITIAL_FRAME + \AllocSize +.set SIZE_TRAP_FRAME_ALLOC, SIZE_KTRAP_FRAME - SIZE_INITIAL_FRAME .set TRAPFLAGS, \Flags /* Save rbp */ @@ -96,13 +92,7 @@ _MsgTrapInfo: .allocstack SIZE_TRAP_FRAME_ALLOC /* Point rbp to the KTRAP_FRAME */ - lea rbp, [rsp + \AllocSize] - -// KTRAP_FRAME_P1Home -// KTRAP_FRAME_P2Home -// KTRAP_FRAME_P3Home -// KTRAP_FRAME_P4Home -// KTRAP_FRAME_P5 + lea rbp, [rsp] .if (TRAPFLAGS & TRAPFLAG_NONVOLATILES) /* Save non-volatile registers */ @@ -249,42 +239,43 @@ _MsgTrapInfo: _InternalDispatchException: /* Allocate stack space for EXCEPTION_RECORD and KEXCEPTION_FRAME */ - sub rsp, SIZE_EXCEPTION_RECORD + SIZE_KEXCEPTION_FRAME + 0x28 + sub rsp, SIZE_EXCEPTION_RECORD + SIZE_KEXCEPTION_FRAME /* Set up EXCEPTION_RECORD */ - mov [rsp + 0x28 + EXCEPTION_RECORD_ExceptionCode], ecx + mov eax, ecx + lea rcx, [rsp + SIZE_KEXCEPTION_FRAME] + mov [rcx + EXCEPTION_RECORD_ExceptionCode], eax xor rax, rax - mov [rsp + 0x28 + EXCEPTION_RECORD_ExceptionFlags], eax - mov [rsp + 0x28 + EXCEPTION_RECORD_ExceptionRecord], rax + mov [rcx + EXCEPTION_RECORD_ExceptionFlags], eax + mov [rcx + EXCEPTION_RECORD_ExceptionRecord], rax mov rax, [rbp + KTRAP_FRAME_Rip] - mov [rsp + 0x28 + EXCEPTION_RECORD_ExceptionAddress], rax - mov [rsp + 0x28 + EXCEPTION_RECORD_NumberParameters], edx - mov [rsp + 0x28 + EXCEPTION_RECORD_ExceptionInformation + 0x00], r9 - mov [rsp + 0x28 + EXCEPTION_RECORD_ExceptionInformation + 0x08], r10 - mov [rsp + 0x28 + EXCEPTION_RECORD_ExceptionInformation + 0x10], r11 + mov [rcx + EXCEPTION_RECORD_ExceptionAddress], rax + mov [rcx + EXCEPTION_RECORD_NumberParameters], edx + mov [rcx + EXCEPTION_RECORD_ExceptionInformation + 0x00], r9 + mov [rcx + EXCEPTION_RECORD_ExceptionInformation + 0x08], r10 + mov [rcx + EXCEPTION_RECORD_ExceptionInformation + 0x10], r11 /* Set up KEXCEPTION_FRAME */ - lea rdx, [rsp + 0x28 + SIZE_EXCEPTION_RECORD] mov rax, [rbp + KTRAP_FRAME_Rbp] - mov [rdx + KEXCEPTION_FRAME_Rbp], rax - mov [rdx + KEXCEPTION_FRAME_Rbx], rbx - mov [rdx + KEXCEPTION_FRAME_Rdi], rdi - mov [rdx + KEXCEPTION_FRAME_Rsi], rsi - mov [rdx + KEXCEPTION_FRAME_R12], r12 - mov [rdx + KEXCEPTION_FRAME_R13], r13 - mov [rdx + KEXCEPTION_FRAME_R14], r14 - mov [rdx + KEXCEPTION_FRAME_R15], r15 - mov qword ptr [rdx + KEXCEPTION_FRAME_Return], 0 + mov [rsp + KEXCEPTION_FRAME_Rbp], rax + mov [rsp + KEXCEPTION_FRAME_Rbx], rbx + mov [rsp + KEXCEPTION_FRAME_Rdi], rdi + mov [rsp + KEXCEPTION_FRAME_Rsi], rsi + mov [rsp + KEXCEPTION_FRAME_R12], r12 + mov [rsp + KEXCEPTION_FRAME_R13], r13 + mov [rsp + KEXCEPTION_FRAME_R14], r14 + mov [rsp + KEXCEPTION_FRAME_R15], r15 + mov qword ptr [rsp + KEXCEPTION_FRAME_Return], 0 /* Call KiDispatchException */ - lea rcx, [rsp + 0x28] // ExceptionRecord - // rdx already points to ExceptionFrame - mov r8, rbp // TrapFrame - mov r9b, [r8 + KTRAP_FRAME_PreviousMode] // PreviousMode - mov byte ptr [rsp + 0x20], 1 // FirstChance + // rcx already points to ExceptionRecord + mov rdx, rsp // ExceptionFrame + mov r8, rbp // TrapFrame + mov r9b, [r8 + KTRAP_FRAME_PreviousMode] // PreviousMode + mov byte ptr [rsp + KEXCEPTION_FRAME_P5], 1 // FirstChance call _KiDispatchException - add rsp, SIZE_EXCEPTION_RECORD + SIZE_KEXCEPTION_FRAME + 0x28 + add rsp, SIZE_EXCEPTION_RECORD + SIZE_KEXCEPTION_FRAME ret /* SOFTWARE INTERRUPT SERVICES ***********************************************/ From c5a84e9af7c402cae412e9c269a3f1a0f316329b Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 28 Dec 2009 00:51:53 +0000 Subject: [PATCH 252/286] reduce diff to trunk svn path=/branches/ros-amd64-bringup/; revision=44782 --- reactos/dll/cpl/console/console.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/dll/cpl/console/console.spec b/reactos/dll/cpl/console/console.spec index 9e552162fb0..9c55a90e177 100644 --- a/reactos/dll/cpl/console/console.spec +++ b/reactos/dll/cpl/console/console.spec @@ -1 +1 @@ -@ stdcall CPlApplet(ptr long ptr ptr) +@ stdcall CPlApplet(ptr long ptr ptr) \ No newline at end of file From 214120100d7055dd0e0adbd31cbcbaa14f133050 Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Mon, 28 Dec 2009 01:07:10 +0000 Subject: [PATCH 253/286] - Fix LPBLOCKINGCALLBACK - Don't use size_t for string sizes. - Fixes warnings. svn path=/branches/ros-amd64-bringup/; revision=44783 --- reactos/dll/win32/ws2_32_new/inc/ws2_32p.h | 4 ++-- reactos/dll/win32/ws2_32_new/src/qshelpr.c | 8 ++++---- reactos/include/psdk/ws2spi.h | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/reactos/dll/win32/ws2_32_new/inc/ws2_32p.h b/reactos/dll/win32/ws2_32_new/inc/ws2_32p.h index 39983492531..09f8981ebbc 100644 --- a/reactos/dll/win32/ws2_32_new/inc/ws2_32p.h +++ b/reactos/dll/win32/ws2_32_new/inc/ws2_32p.h @@ -299,13 +299,13 @@ MapUnicodeProtocolInfoToAnsi(IN LPWSAPROTOCOL_INFOW UnicodeInfo, INT WSAAPI MapAnsiQuerySetToUnicode(IN LPWSAQUERYSETA AnsiSet, - IN OUT PSIZE_T SetSize, + IN OUT PDWORD SetSize, OUT LPWSAQUERYSETW UnicodeSet); INT WSAAPI MapUnicodeQuerySetToAnsi(OUT LPWSAQUERYSETW UnicodeSet, - IN OUT PSIZE_T SetSize, + IN OUT PDWORD SetSize, IN LPWSAQUERYSETA AnsiSet); INT diff --git a/reactos/dll/win32/ws2_32_new/src/qshelpr.c b/reactos/dll/win32/ws2_32_new/src/qshelpr.c index 66072745556..1d40f77fc05 100644 --- a/reactos/dll/win32/ws2_32_new/src/qshelpr.c +++ b/reactos/dll/win32/ws2_32_new/src/qshelpr.c @@ -807,11 +807,11 @@ WSABuildQuerySetBufferW(IN LPWSAQUERYSETW UnicodeSet, INT WSAAPI MapAnsiQuerySetToUnicode(IN LPWSAQUERYSETA AnsiSet, - IN OUT PSIZE_T SetSize, + IN OUT PDWORD SetSize, OUT LPWSAQUERYSETW UnicodeSet) { INT ErrorCode = ERROR_SUCCESS; - SIZE_T AnsiSize, UnicodeSize; + DWORD AnsiSize, UnicodeSize; LPWSAQUERYSETA AnsiCopy = NULL; LPWSAQUERYSETW UnicodeCopy; LPWSTR ServiceCopy = NULL, CommentCopy = NULL; @@ -928,11 +928,11 @@ error: INT WSAAPI MapUnicodeQuerySetToAnsi(OUT LPWSAQUERYSETW UnicodeSet, - IN OUT PSIZE_T SetSize, + IN OUT PDWORD SetSize, IN LPWSAQUERYSETA AnsiSet) { INT ErrorCode = ERROR_SUCCESS; - SIZE_T UnicodeSize, AnsiSize; + DWORD UnicodeSize, AnsiSize; LPWSAQUERYSETW UnicodeCopy = NULL; LPWSAQUERYSETA AnsiCopy; LPSTR ServiceCopy = NULL, CommentCopy = NULL; diff --git a/reactos/include/psdk/ws2spi.h b/reactos/include/psdk/ws2spi.h index c34e0b85585..78eed986946 100644 --- a/reactos/include/psdk/ws2spi.h +++ b/reactos/include/psdk/ws2spi.h @@ -39,7 +39,7 @@ typedef struct _WSATHREADID { DWORD Reserved; } WSATHREADID, FAR *LPWSATHREADID; -typedef BOOL (CALLBACK FAR *LPBLOCKINGCALLBACK)(DWORD); +typedef BOOL (CALLBACK FAR *LPBLOCKINGCALLBACK)(DWORD_PTR); typedef VOID (CALLBACK FAR *LPWSAUSERAPC)(DWORD); /* Prototypes for service provider procedure table */ From 648db9116c4346ed4891f5fa7205e1f08b8e6a20 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 28 Dec 2009 01:28:29 +0000 Subject: [PATCH 254/286] remove unneded parameter svn path=/branches/ros-amd64-bringup/; revision=44784 --- reactos/ntoskrnl/ke/amd64/trap.S | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/reactos/ntoskrnl/ke/amd64/trap.S b/reactos/ntoskrnl/ke/amd64/trap.S index 6d37873baf5..86d8d8ed984 100644 --- a/reactos/ntoskrnl/ke/amd64/trap.S +++ b/reactos/ntoskrnl/ke/amd64/trap.S @@ -77,7 +77,7 @@ _MsgTrapInfo: /* * ENTER_TRAP_FRAME - Allocate SIZE_KTRAP_FRAME and save registers to it */ -.macro ENTER_TRAP_FRAME AllocSize Flags +.macro ENTER_TRAP_FRAME Flags .set SIZE_INITIAL_FRAME, 7 * 8 //.set SIZE_LOCAL_DATA, SIZE_EXCEPTION_RECORD + 0x28 .set SIZE_TRAP_FRAME_ALLOC, SIZE_KTRAP_FRAME - SIZE_INITIAL_FRAME @@ -299,7 +299,7 @@ _InternalDispatchException: push 0 .allocstack 0x8 - ENTER_TRAP_FRAME (0x28), TRAPFLAG_ALL + ENTER_TRAP_FRAME TRAPFLAG_ALL TRAPINFO KiDebugTrapOrFault @@ -342,7 +342,7 @@ KiDebugTrapOrFaultKMode: push 0 .allocstack 0x8 - ENTER_TRAP_FRAME (0x28), TRAPFLAG_ALL + ENTER_TRAP_FRAME TRAPFLAG_ALL TRAPINFO KiBreakpointTrap @@ -396,7 +396,7 @@ KiDebugTrapOrFaultKMode: push 0 .allocstack 0x8 - ENTER_TRAP_FRAME (0x28), TRAPFLAG_ALL + ENTER_TRAP_FRAME TRAPFLAG_ALL TRAPINFO KiInvalidOpcodeFault @@ -491,7 +491,7 @@ KiDebugTrapOrFaultKMode: .pushframe 1 /* We have an error code */ - ENTER_TRAP_FRAME (0x28), TRAPFLAG_ALL + ENTER_TRAP_FRAME TRAPFLAG_ALL TRAPINFO KiGeneralProtectionFault @@ -512,7 +512,7 @@ KiDebugTrapOrFaultKMode: .pushframe 1 /* We have an error code */ - ENTER_TRAP_FRAME (0x28), TRAPFLAG_ALL + ENTER_TRAP_FRAME TRAPFLAG_ALL TRAPINFO KiPageFault @@ -642,7 +642,7 @@ PageFaultReturn: push 0 .allocstack 0x08 - ENTER_TRAP_FRAME (0x28), TRAPFLAG_ALL + ENTER_TRAP_FRAME TRAPFLAG_ALL TRAPINFO KiDebugServiceTrap From 532727313688e85dc068f68725d39221ed1abe01 Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Mon, 28 Dec 2009 01:37:31 +0000 Subject: [PATCH 255/286] Unhack ntoskrnl, fixes many x86 regressions. svn path=/branches/ros-amd64-bringup/; revision=44785 --- reactos/ntoskrnl/ex/init.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/reactos/ntoskrnl/ex/init.c b/reactos/ntoskrnl/ex/init.c index 9c36488e38d..12e291c77fd 100644 --- a/reactos/ntoskrnl/ex/init.c +++ b/reactos/ntoskrnl/ex/init.c @@ -956,8 +956,7 @@ ExpInitializeExecutive(IN ULONG Cpu, } /* Make sure interrupts are active now */ -// FIXME HAX!!! - //_enable(); + _enable(); /* Clear the crypto exponent */ SharedUserData->CryptoExponent = 0; From 6fa94d46fb92e90dc4fac9cdc811a6a840329410 Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Mon, 28 Dec 2009 03:02:12 +0000 Subject: [PATCH 256/286] Fix broken merge svn path=/branches/ros-amd64-bringup/; revision=44786 --- reactos/tools/rbuild/backend/mingw/rules.mak | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/reactos/tools/rbuild/backend/mingw/rules.mak b/reactos/tools/rbuild/backend/mingw/rules.mak index fc6f052c542..ba003b0fc65 100644 --- a/reactos/tools/rbuild/backend/mingw/rules.mak +++ b/reactos/tools/rbuild/backend/mingw/rules.mak @@ -263,7 +263,7 @@ ${call RBUILD_intermediate_path_noext,$(2)}_c: $(2) $(3) $$(widl_TARGET) | ${cal $$(Q)$$(widl_TARGET) ${call RBUILD_midlflags,$(1),$(4),-I${call RBUILD_dir,$(2)}} -h -H ${call RBUILD_intermediate_path_noext,$(2)}_c.h -c -C ${call RBUILD_intermediate_path_noext,$(2)}_c.c $(2) $${checkpoint} $$@>$(NUL) -endef +${call RBUILD_CC,$(1),${call RBUILD_intermediate_path_noext,$(2)}_c.c,,-fno-unit-at-a-time,${call RBUILD_intermediate_path_noext,$(2)}_c.o}endef #(module, source, dependencies, cflags) define RBUILD_WIDL_SERVER_RULE @@ -277,7 +277,7 @@ ${call RBUILD_intermediate_path_noext,$(2)}_s: $(2) $(3) $$(widl_TARGET) | ${cal $$(Q)$$(widl_TARGET) ${call RBUILD_midlflags,$(1),$(4),-I${call RBUILD_dir,$(2)}} -h -H ${call RBUILD_intermediate_path_noext,$(2)}_s.h -s -S ${call RBUILD_intermediate_path_noext,$(2)}_s.c $(2) $${checkpoint} $$@>$(NUL) -endef +${call RBUILD_CC,$(1),${call RBUILD_intermediate_path_noext,$(2)}_s.c,,-fno-unit-at-a-time,${call RBUILD_intermediate_path_noext,$(2)}_s.o}endef #(module, source, dependencies, cflags) define RBUILD_WIDL_PROXY_RULE @@ -291,7 +291,7 @@ ${call RBUILD_intermediate_path_noext,$(2)}_p: $(2) $(3) $$(widl_TARGET) | ${cal $$(Q)$$(widl_TARGET) ${call RBUILD_midlflags,$(1),$(4),-I${call RBUILD_dir,$(2)}} -h -H ${call RBUILD_intermediate_path_noext,$(2)}_p.h -p -P ${call RBUILD_intermediate_path_noext,$(2)}_p.c $(2) $${checkpoint} $$@>$(NUL) -endef +${call RBUILD_CC,$(1),${call RBUILD_intermediate_path_noext,$(2)}_p.c,,-fno-unit-at-a-time,${call RBUILD_intermediate_path_noext,$(2)}_p.o}endef #(module, source, dependencies, cflags) define RBUILD_WIDL_INTERFACE_RULE From c48d677ecbef653ac26f317aaa4520b796c187b8 Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Mon, 28 Dec 2009 03:09:37 +0000 Subject: [PATCH 257/286] Fix Build. svn path=/branches/ros-amd64-bringup/; revision=44787 --- reactos/config-arm.template.rbuild | 6 ++++++ reactos/config-ppc.template.rbuild | 6 ++++++ reactos/config.template.rbuild | 8 +++++++- reactos/tools/rbuild/backend/mingw/rules.mak | 12 +++++++++--- 4 files changed, 28 insertions(+), 4 deletions(-) diff --git a/reactos/config-arm.template.rbuild b/reactos/config-arm.template.rbuild index 38b8d9ffd2e..e93b5fd236a 100644 --- a/reactos/config-arm.template.rbuild +++ b/reactos/config-arm.template.rbuild @@ -90,4 +90,10 @@ --> + + + diff --git a/reactos/config-ppc.template.rbuild b/reactos/config-ppc.template.rbuild index 0961c6402a2..ef63ef77bae 100644 --- a/reactos/config-ppc.template.rbuild +++ b/reactos/config-ppc.template.rbuild @@ -70,4 +70,10 @@ --> + + + diff --git a/reactos/config.template.rbuild b/reactos/config.template.rbuild index d8a130414d9..56dc853a02e 100644 --- a/reactos/config.template.rbuild +++ b/reactos/config.template.rbuild @@ -97,6 +97,12 @@ - + + + + diff --git a/reactos/tools/rbuild/backend/mingw/rules.mak b/reactos/tools/rbuild/backend/mingw/rules.mak index ba003b0fc65..f83f84fe25d 100644 --- a/reactos/tools/rbuild/backend/mingw/rules.mak +++ b/reactos/tools/rbuild/backend/mingw/rules.mak @@ -263,7 +263,9 @@ ${call RBUILD_intermediate_path_noext,$(2)}_c: $(2) $(3) $$(widl_TARGET) | ${cal $$(Q)$$(widl_TARGET) ${call RBUILD_midlflags,$(1),$(4),-I${call RBUILD_dir,$(2)}} -h -H ${call RBUILD_intermediate_path_noext,$(2)}_c.h -c -C ${call RBUILD_intermediate_path_noext,$(2)}_c.c $(2) $${checkpoint} $$@>$(NUL) -${call RBUILD_CC,$(1),${call RBUILD_intermediate_path_noext,$(2)}_c.c,,-fno-unit-at-a-time,${call RBUILD_intermediate_path_noext,$(2)}_c.o}endef +${call RBUILD_CC,$(1),${call RBUILD_intermediate_path_noext,$(2)}_c.c,,,${call RBUILD_intermediate_path_noext,$(2)}_c.o} + +endef #(module, source, dependencies, cflags) define RBUILD_WIDL_SERVER_RULE @@ -277,7 +279,9 @@ ${call RBUILD_intermediate_path_noext,$(2)}_s: $(2) $(3) $$(widl_TARGET) | ${cal $$(Q)$$(widl_TARGET) ${call RBUILD_midlflags,$(1),$(4),-I${call RBUILD_dir,$(2)}} -h -H ${call RBUILD_intermediate_path_noext,$(2)}_s.h -s -S ${call RBUILD_intermediate_path_noext,$(2)}_s.c $(2) $${checkpoint} $$@>$(NUL) -${call RBUILD_CC,$(1),${call RBUILD_intermediate_path_noext,$(2)}_s.c,,-fno-unit-at-a-time,${call RBUILD_intermediate_path_noext,$(2)}_s.o}endef +${call RBUILD_CC,$(1),${call RBUILD_intermediate_path_noext,$(2)}_s.c,,,${call RBUILD_intermediate_path_noext,$(2)}_s.o} + +endef #(module, source, dependencies, cflags) define RBUILD_WIDL_PROXY_RULE @@ -291,7 +295,9 @@ ${call RBUILD_intermediate_path_noext,$(2)}_p: $(2) $(3) $$(widl_TARGET) | ${cal $$(Q)$$(widl_TARGET) ${call RBUILD_midlflags,$(1),$(4),-I${call RBUILD_dir,$(2)}} -h -H ${call RBUILD_intermediate_path_noext,$(2)}_p.h -p -P ${call RBUILD_intermediate_path_noext,$(2)}_p.c $(2) $${checkpoint} $$@>$(NUL) -${call RBUILD_CC,$(1),${call RBUILD_intermediate_path_noext,$(2)}_p.c,,-fno-unit-at-a-time,${call RBUILD_intermediate_path_noext,$(2)}_p.o}endef +${call RBUILD_CC,$(1),${call RBUILD_intermediate_path_noext,$(2)}_p.c,,,${call RBUILD_intermediate_path_noext,$(2)}_p.o} + +endef #(module, source, dependencies, cflags) define RBUILD_WIDL_INTERFACE_RULE From 88449605d9fe504755440ff3965f6acebc02267c Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 28 Dec 2009 04:39:02 +0000 Subject: [PATCH 258/286] Implement KiGeneralProtectionFault a bit svn path=/branches/ros-amd64-bringup/; revision=44788 --- reactos/ntoskrnl/ke/amd64/trap.S | 121 ++++++++++++++++++++++++++++--- 1 file changed, 110 insertions(+), 11 deletions(-) diff --git a/reactos/ntoskrnl/ke/amd64/trap.S b/reactos/ntoskrnl/ke/amd64/trap.S index 86d8d8ed984..0b5a110d165 100644 --- a/reactos/ntoskrnl/ke/amd64/trap.S +++ b/reactos/ntoskrnl/ke/amd64/trap.S @@ -235,14 +235,13 @@ _MsgTrapInfo: -// rbp = TrapFrame, ecx = ExceptionCode, edx = NumParams, r9,r10,r11 = params +// rbp = TrapFrame, eax = ExceptionCode, edx = NumParams, r9,r10,r11 = params _InternalDispatchException: /* Allocate stack space for EXCEPTION_RECORD and KEXCEPTION_FRAME */ sub rsp, SIZE_EXCEPTION_RECORD + SIZE_KEXCEPTION_FRAME /* Set up EXCEPTION_RECORD */ - mov eax, ecx lea rcx, [rsp + SIZE_KEXCEPTION_FRAME] mov [rcx + EXCEPTION_RECORD_ExceptionCode], eax xor rax, rax @@ -313,7 +312,7 @@ _InternalDispatchException: KiDebugTrapOrFaultKMode: /* Dispatch the exception */ - mov ecx, STATUS_SINGLE_STEP + mov eax, STATUS_SINGLE_STEP mov edx, 0 mov r9, 0 mov r10, 0 @@ -351,7 +350,7 @@ KiDebugTrapOrFaultKMode: // call _FrLdrDbgPrint[rip] /* Dispatch the exception */ - mov ecx, STATUS_BREAKPOINT + mov eax, STATUS_BREAKPOINT mov edx, 3 mov r9, 0 mov r10, 0 @@ -491,20 +490,111 @@ KiDebugTrapOrFaultKMode: .pushframe 1 /* We have an error code */ + cli ENTER_TRAP_FRAME TRAPFLAG_ALL TRAPINFO KiGeneralProtectionFault -// DISPATCH_EXCEPTION STATUS_BREAKPOINT, 3, 0, 0, 0 - mov rdx, [rbp + KTRAP_FRAME_Rip] lea rcx, _MsgGeneralProtFault[rip] call _FrLdrDbgPrint[rip] - jmp $ + + /* Check if this was from user-mode */ + cmp byte ptr [rbp + KTRAP_FRAME_PreviousMode], KernelMode + jnz KiGpfUserMode + + /* Get instruction */ + mov rax, [rbp + KTRAP_FRAME_Rip] + mov rax, [rax] + + /* Check for MSR failure */ + cmp al, 0xF + jz KiGpfMsr + + /* Check for IRET */ + cmp ax, 0xCF48 + je KiGpfIret + + /* Check for pop ds/es/fs/gs */ + xor edx, edx + cmp al, 0x1F + jz KiGpfPopSegDs + cmp al, 0x07 + jz KiGpfPopSegEs + cmp ax, 0xA10F + jz KiGpfPopSegFs + cmp ax, 0xA90F + jz KiGpfPopSegGs + + + mov dx, 0x002B // KGDT64_R3_DATA | RPL_MASK + cmp [rbp + KTRAP_FRAME_SegDs], dx + jne KiGpfPopSegDs + cmp [rbp + KTRAP_FRAME_SegEs], dx + jne KiGpfPopSegEs + cmp [rbp + KTRAP_FRAME_SegFs], dx + jne KiGpfPopSegFs + cmp [rbp + KTRAP_FRAME_SegGs], dx + jne KiGpfPopSegGs + +KiGpfFatal: + + /* Bugcheck */ + mov ecx, UNEXPECTED_KERNEL_MODE_TRAP + mov rdx, 0x0000D // EXCEPTION_GP_FAULT + xor rdx, rdx + xor r8, r8 + xor r9, r9 // Reserved + mov [rbp + KTRAP_FRAME_P5], rbp // trap frame + call _KeBugCheckWithTf + + + +KiGpfPopSegDs: + mov [rbp + KTRAP_FRAME_SegDs], dx + jmp KiGpfPopSeg + +KiGpfPopSegEs: + mov [rbp + KTRAP_FRAME_SegEs], dx + jmp KiGpfPopSeg + +KiGpfPopSegFs: + mov [rbp + KTRAP_FRAME_SegFs], dx + jmp KiGpfPopSeg + +KiGpfPopSegGs: + mov [rbp + KTRAP_FRAME_SegGs], dx + jmp KiGpfPopSeg + +KiGpfPopSeg: + jmp KiGpfExit + +KiGpfIret: + /* Get error code */ + mov ax, [rbp + KTRAP_FRAME_ErrorCode] +// and ax, ~RPL_MASK + +KiGpfMsr: + + jmp KiGpfFatal + + +KiGpfUserMode: + + /* Dispatch the exception */ + mov eax, STATUS_ACCESS_VIOLATION + mov edx, 2 + mov r9, [rbp + KTRAP_FRAME_ErrorCode] + mov r10, 0 + mov r11, 0 + call _InternalDispatchException + +KiGpfExit: /* Return */ LEAVE_TRAP_FRAME iretq + .endproc @@ -556,8 +646,8 @@ KiDebugTrapOrFaultKMode: InPageException: /* Dispatch in-page exception */ - mov ecx, STATUS_IN_PAGE_ERROR // ExceptionCode mov r11d, eax // Param3 = Status + mov eax, STATUS_IN_PAGE_ERROR // ExceptionCode mov edx, 3 // ParamCount call _InternalDispatchException jmp PageFaultReturn @@ -568,7 +658,6 @@ AccessViolation: SpecialCode: /* Setup a normal page fault exception */ - mov ecx, eax // ExceptionCode mov edx, 2 // ParamCount call _InternalDispatchException @@ -650,7 +739,7 @@ PageFaultReturn: inc qword ptr [rbp + KTRAP_FRAME_Rip] /* Dispatch the exception */ - mov ecx, STATUS_BREAKPOINT + mov eax, STATUS_BREAKPOINT mov edx, 3 mov r9, [rbp+KTRAP_FRAME_Rax] // Service mov r10, [rbp+KTRAP_FRAME_Rcx] // Buffer @@ -688,8 +777,18 @@ PageFaultReturn: lea rcx, _MsgUnexpectedInterrupt[rip] call _FrLdrDbgPrint[rip] - jmp $ + mov ecx, TRAP_CAUSE_UNKNOWN +// mov rdx, // The unexpected interrupt +// mov rdx, // The unknown floating-point exception +// mov r8, // The enabled and asserted status bits + xor r9, r9 // Reserved + mov [rbp + KTRAP_FRAME_P5], rbp // trap frame + call _KeBugCheckWithTf + .endproc +.proc KiSystemFatalException + +.endproc From 11bbb46220d51c32e3bd6e3c3afb4a6145523228 Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Mon, 28 Dec 2009 04:46:04 +0000 Subject: [PATCH 259/286] ignore some warnings by gcc 4.4.2 svn path=/branches/ros-amd64-bringup/; revision=44789 --- rostests/apitests/w32knapi/w32knapi.c | 1 + rostests/dxtest/win32kdxtest/win32kdxtest.rbuild | 2 +- rostests/tests/miditest/miditest.c | 2 +- rostests/tests/p_dup_handle/p_dup_handle.c | 2 +- rostests/tests/thread/thread.rbuild | 2 +- rostests/tests/tmrqueue/tmrqueue.rbuild | 2 +- 6 files changed, 6 insertions(+), 5 deletions(-) diff --git a/rostests/apitests/w32knapi/w32knapi.c b/rostests/apitests/w32knapi/w32knapi.c index 96ae78ca2a4..088007d1520 100644 --- a/rostests/apitests/w32knapi/w32knapi.c +++ b/rostests/apitests/w32knapi/w32knapi.c @@ -10,6 +10,7 @@ MyGdiQueryTable() { PTEB pTeb = NtCurrentTeb(); PPEB pPeb = pTeb->ProcessEnvironmentBlock; + printf("TEB::PEB=0x%lx PEB::GdiHT=0x%lx, Peb=%p, Teb=%p\n", FIELD_OFFSET(TEB, ProcessEnvironmentBlock), FIELD_OFFSET(PEB, GdiSharedHandleTable), pTeb, pPeb); return pPeb->GdiSharedHandleTable; } diff --git a/rostests/dxtest/win32kdxtest/win32kdxtest.rbuild b/rostests/dxtest/win32kdxtest/win32kdxtest.rbuild index ad0499a5d05..566b60b131c 100644 --- a/rostests/dxtest/win32kdxtest/win32kdxtest.rbuild +++ b/rostests/dxtest/win32kdxtest/win32kdxtest.rbuild @@ -1,4 +1,4 @@ - + . user32 gdi32 diff --git a/rostests/tests/miditest/miditest.c b/rostests/tests/miditest/miditest.c index 54a9edc641d..695df008aca 100644 --- a/rostests/tests/miditest/miditest.c +++ b/rostests/tests/miditest/miditest.c @@ -36,7 +36,7 @@ int main() printf("Opening MIDI output #0\n"); Result = midiOutOpen(&Handle, 0, 0, 0, CALLBACK_NULL); - printf("Result == %d Handle == %x\n", Result, Handle); + printf("Result == %d Handle == %p\n", Result, Handle); // play something: midiOutShortMsg(Handle, 0x007f3090); diff --git a/rostests/tests/p_dup_handle/p_dup_handle.c b/rostests/tests/p_dup_handle/p_dup_handle.c index 38cc094a68f..9be3fd860da 100644 --- a/rostests/tests/p_dup_handle/p_dup_handle.c +++ b/rostests/tests/p_dup_handle/p_dup_handle.c @@ -38,7 +38,7 @@ int main( int argc, char **argv ) { memset( &si, 0, sizeof( si ) ); memset( &pi, 0, sizeof( pi ) ); - sprintf( cmdline, "%s %x", argv[0], h_process ); + sprintf( cmdline, "%s %p", argv[0], h_process ); if( !CreateProcess(NULL, cmdline, NULL, NULL, TRUE, 0, NULL, NULL, &si, &pi ) ) { fprintf( stderr, "%lu: Could not create child process.\n", diff --git a/rostests/tests/thread/thread.rbuild b/rostests/tests/thread/thread.rbuild index 15e413233ab..25dfc36b217 100644 --- a/rostests/tests/thread/thread.rbuild +++ b/rostests/tests/thread/thread.rbuild @@ -1,4 +1,4 @@ - + gdi32 thread.c diff --git a/rostests/tests/tmrqueue/tmrqueue.rbuild b/rostests/tests/tmrqueue/tmrqueue.rbuild index 67140e61b04..04d8a102661 100644 --- a/rostests/tests/tmrqueue/tmrqueue.rbuild +++ b/rostests/tests/tmrqueue/tmrqueue.rbuild @@ -1,4 +1,4 @@ - + gdi32 tmrqueue.c From aea03eb5bfd71ffb7b85d76eeaa080a51360e790 Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Mon, 28 Dec 2009 06:38:19 +0000 Subject: [PATCH 260/286] Implement HalpInitPICs svn path=/branches/ros-amd64-bringup/; revision=44791 --- reactos/hal/halamd64/generic/generic.rbuild | 1 + reactos/hal/halamd64/generic/irq.S | 6 -- reactos/hal/halamd64/generic/pic.c | 111 ++++++++++++++++++++ 3 files changed, 112 insertions(+), 6 deletions(-) create mode 100644 reactos/hal/halamd64/generic/pic.c diff --git a/reactos/hal/halamd64/generic/generic.rbuild b/reactos/hal/halamd64/generic/generic.rbuild index d613424851b..8898d6e2fbb 100644 --- a/reactos/hal/halamd64/generic/generic.rbuild +++ b/reactos/hal/halamd64/generic/generic.rbuild @@ -12,6 +12,7 @@ mps.S systimer.S usage.c + pic.c ../include/hal.h diff --git a/reactos/hal/halamd64/generic/irq.S b/reactos/hal/halamd64/generic/irq.S index 1d5bb59861f..15934cde4dd 100644 --- a/reactos/hal/halamd64/generic/irq.S +++ b/reactos/hal/halamd64/generic/irq.S @@ -31,12 +31,6 @@ /* FUNCTIONS *****************************************************************/ -.globl _HalpInitPICs -.func _HalpInitPICs -_HalpInitPICs: - UNIMPLEMENTED "HalpInitPICs" -.endfunc - .global _HalEnableInterrupt .func _HalEnableInterrupt _HalEnableInterrupt: diff --git a/reactos/hal/halamd64/generic/pic.c b/reactos/hal/halamd64/generic/pic.c new file mode 100644 index 00000000000..15371bca57f --- /dev/null +++ b/reactos/hal/halamd64/generic/pic.c @@ -0,0 +1,111 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS kernel + * FILE: hal/pic.c + * PURPOSE: Hardware Abstraction Layer DLL + * PROGRAMMER: Samuel Serapión + */ +#include + +//#define NDEBUG +#include +#include + +/* + * 8259 interrupt controllers + */ +enum +{ + Int0ctl= 0x20, /* control port (ICW1, OCW2, OCW3) */ + Int0aux= 0x21, /* everything else (ICW2, ICW3, ICW4, OCW1) */ + Int1ctl= 0xA0, /* control port */ + Int1aux= 0xA1, /* everything else (ICW2, ICW3, ICW4, OCW1) */ + + Icw1= 0x10, /* select bit in ctl register */ + Ocw2= 0x00, + Ocw3= 0x08, + + EOI= 0x20, /* non-specific end of interrupt */ + + Elcr1= 0x4D0, /* Edge/Level Triggered Register */ + Elcr2= 0x4D1, +}; + + + +INT i8259mask = 0xFFFF; /* disabled interrupts */ +INT i8259elcr; + + +VOID +NTAPI +HalpInitPICs(VOID) +{ + ULONG OldEflags; + INT x; + + OldEflags = __readeflags(); + _disable(); + /* + * Set up the first 8259 interrupt processor. + * Make 8259 interrupts start at CPU vector VectorPIC. + * Set the 8259 as master with edge triggered + * input with fully nested interrupts. + */ + __outbyte(Int0ctl, 0x20); /* ICW1 - master, edge triggered */ + __outbyte(Int0aux, 0x11); /* Edge, cascade, CAI 8, ICW4 */ + __outbyte(Int0aux, PRIMARY_VECTOR_BASE); /* ICW2 - interrupt vector offset */ + __outbyte(Int0aux, 0x04); /* ICW3 - have slave on level 2 */ + __outbyte(Int0aux, 0x01); /* ICW4 - 8086 mode, not buffered */ + __outbyte(Int0aux, 0xFF); /* Mask Interrupts */ + /* + * Set up the second 8259 interrupt processor. + * Make 8259 interrupts start at CPU vector VectorPIC+8. + * Set the 8259 as slave with edge triggered + * input with fully nested interrupts. + */ + __outbyte(Int1ctl, 0xA0); /* ICW1 - master, edge triggered, */ + __outbyte(Int1aux, 0x11); /* Edge, cascade, CAI 8, ICW4 */ + __outbyte(Int1aux, PRIMARY_VECTOR_BASE+8); /* ICW2 - interrupt vector offset */ + __outbyte(Int1aux, 0x02); /* ICW3 - I am a slave on level 2 */ + __outbyte(Int1aux, 0x01); /* ICW4 - 8086 mode, not buffered */ + __outbyte(Int1aux, 0xFF); /* Mask Interrupts */ + + + /* + * pass #2 8259 interrupts to #1 + */ + i8259mask &= ~0x04; + __outbyte(Int0aux, i8259mask & 0xFF); + + /* + * Set Ocw3 to return the ISR when ctl read. + * After initialisation status read is set to IRR. + * Read IRR first to possibly deassert an outstanding + * interrupt. + */ + __inbyte (Int0ctl); + __outbyte(Int0ctl, Ocw3|0x03); + __inbyte (Int1ctl); + __outbyte(Int1ctl, Ocw3|0x03); + + /* + * Check for Edge/Level register. + * This check may not work for all chipsets. + * First try a non-intrusive test - the bits for + * IRQs 13, 8, 2, 1 and 0 must be edge (0). If + * that's OK try a R/W test. + */ + x = (__inbyte (Elcr2)<<8)|__inbyte(Elcr1); + if(!(x & 0x2107)){ + __outbyte(Elcr1, 0); + if(__inbyte (Elcr1) == 0){ + __outbyte(Elcr1, 0x20); + if(__inbyte (Elcr1) == 0x20) + i8259elcr = x; + __outbyte(Elcr1, x & 0xFF); + DPRINT("ELCR: %4.4uX\n", i8259elcr); + } + } + __writeeflags(OldEflags); + } From 0752824a4b9dfee049a389d67e4c6868ab98baca Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 28 Dec 2009 17:53:26 +0000 Subject: [PATCH 261/286] Remove the totally broken asm implementation of KeQueryPerformanceCounter and replace it with a much simpler C version using __rdtsc(). svn path=/branches/ros-amd64-bringup/; revision=44795 --- reactos/hal/halamd64/generic/misc.c | 23 +++ reactos/hal/halamd64/generic/systimer.S | 218 ++---------------------- 2 files changed, 35 insertions(+), 206 deletions(-) diff --git a/reactos/hal/halamd64/generic/misc.c b/reactos/hal/halamd64/generic/misc.c index 469b820e215..b4b43fc594c 100644 --- a/reactos/hal/halamd64/generic/misc.c +++ b/reactos/hal/halamd64/generic/misc.c @@ -5,6 +5,7 @@ * PURPOSE: Miscellanous Routines * PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org) * Eric Kohl (ekohl@abo.rhein-zeitung.de) + * Timo Kreuzer (timo.kreuzer@reactos.org) */ /* INCLUDES ******************************************************************/ @@ -13,6 +14,8 @@ #define NDEBUG #include +LARGE_INTEGER HalpPerformanceFrequency; + /* PRIVATE FUNCTIONS *********************************************************/ VOID @@ -103,3 +106,23 @@ KeFlushWriteBuffer(VOID) /* Not implemented on x86 */ return; } + +LARGE_INTEGER +NTAPI +KeQueryPerformanceCounter( + OUT PLARGE_INTEGER PerformanceFrequency OPTIONAL) +{ + LARGE_INTEGER Result; + + ASSERT(HalpPerformanceFrequency.QuadPart != 0); + + /* Does the caller want the frequency? */ + if (PerformanceFrequency) + { + /* Return value */ + *PerformanceFrequency = HalpPerformanceFrequency; + } + + Result.QuadPart = __rdtsc(); + return Result; +} diff --git a/reactos/hal/halamd64/generic/systimer.S b/reactos/hal/halamd64/generic/systimer.S index d8cb93ae09a..a0482cce014 100644 --- a/reactos/hal/halamd64/generic/systimer.S +++ b/reactos/hal/halamd64/generic/systimer.S @@ -8,22 +8,25 @@ /* INCLUDES ******************************************************************/ #include -#include -.intel_syntax noprefix +#include /* GLOBALS *******************************************************************/ -_HalpLastPerfCounterLow: .long 0 -_HalpLastPerfCounterHigh: .long 0 -_HalpPerfCounterLow: .long 0 -_HalpPerfCounterHigh: .long 0 -_HalpSystemHardwareFlags: .long 0 +.data _UnhandledMsg: .asciz "\n\x7\x7!!! Unhandled or Unexpected Code at line: %lx!!!\n" +.global _MsgUnimplemented +_MsgUnimplemented: +.asciz "WARNING: %s at %s:%d is UNIMPLEMENTED!\n" + + /* FUNCTIONS *****************************************************************/ +.text +.code64 + .global _HalpReleaseCmosSpinLock .func HalpReleaseCmosSpinLock _HalpReleaseCmosSpinLock: @@ -106,207 +109,10 @@ _HalpQuery8254Counter: ret .endfunc - -.global _KeQueryPerformanceCounter -.func KeQueryPerformanceCounter -_KeQueryPerformanceCounter: - - /* Check if we were called too early */ - cmp dword ptr _HalpCurrentRollOver, 0 - je NoCount - - /* Save volatiles */ - push rbx - push rsi - -LoopPreInt: - - /* Disable interrupts */ - pushf - cli - -LoopPostInt: - - /* Get the current value */ - mov ebx, _HalpPerfCounterLow - mov esi, _HalpPerfCounterHigh - - /* Read 8254 timer */ - mov al, 0 - out 0x43, al - jmp $+2 - in al, 0x40 - jmp $+2 - movzx ecx, al - in al, 0x40 - mov ch, al - - /* Enable interrupts and do a short wait */ - popf - nop - jmp $+2 - - /* Disable them again */ - pushf - cli - - /* Get the counter value again */ - mov eax, _HalpPerfCounterLow - mov edx, _HalpPerfCounterHigh - - /* Check if someone updated the counter */ - cmp eax, ebx - jnz LoopPostInt - cmp edx, esi - jnz LoopPostInt - - /* Check if the current 8254 value causes rollover */ - neg ecx - add ecx, _HalpCurrentRollOver - jnb DoRollOver - -SetSum: - - /* Calculate the sum */ - add eax, ecx - adc edx, 0 - - /* Check if we're above or below the last high value */ - cmp edx, _HalpLastPerfCounterHigh - jb short BelowHigh - jnz short BelowLow - - /* Check if we're above or below the last low value */ - cmp eax, _HalpLastPerfCounterLow - jb BelowHigh - -BelowLow: - - /* Update the last value and bring back interrupts */ - mov _HalpLastPerfCounterLow, eax - mov _HalpLastPerfCounterHigh, edx - popf - - /* Check if caller wants frequency */ - cmp dword ptr [esp+12], 0 - jz ReturnNoFreq - - /* Save hard-coded frequency */ - mov ecx, dword ptr [esp+12] - mov dword ptr [ecx], 1193182 - mov dword ptr [ecx+4], 0 - -ReturnNoFreq: - - /* Restore volatiles */ - pop rsi - pop rbx - ret 4 - -NoCount: - - /* Return empty, called too soon */ - mov eax, 0 - mov edx, 0 - ret 4 - -DoRollOver: - - /* We might have an incoming interrupt, save EFLAGS and reset rollover */ - mov esi, [esp] - mov ecx, _HalpCurrentRollOver - popf - - /* Check if interrupts were enabled and try again */ - test esi, EFLAGS_INTERRUPT_MASK - jnz LoopPreInt - - /* They're not, continue where we left */ - pushf - jmp SetSum - -BelowHigh: - - /* Get the last counter values */ - mov ebx, _HalpLastPerfCounterLow - mov esi, _HalpLastPerfCounterHigh - - /* Check if the previous value was 0 and go back if yes */ - mov ecx, ebx - or ecx, esi - jz BelowLow - - /* Make sure that the count is still valid */ - sub ebx, eax - sbb esi, edx - jnz InvalidCount - cmp ebx, _HalpCurrentRollOver - jg InvalidCount - - /* Fixup the count with the last known value */ - sub eax, ebx - sbb edx, esi - - /* We might have an incoming interrupt, save EFLAGS */ - mov ecx, [esp] - popf - - /* Check if interrupts were enabled and try again */ - test ecx, EFLAGS_INTERRUPT_MASK - jnz LoopPreInt - - /* They're not, continue where we left */ - pushf - jmp BelowLow - -InvalidCount: - popf - xor eax, eax - mov _HalpLastPerfCounterLow, eax - mov _HalpLastPerfCounterHigh, eax - jmp LoopPreInt -.endfunc - .globl _HalpClockInterrupt .func HalpClockInterrupt -//TRAP_FIXUPS hci_a, hci_t, DoFixupV86, DoFixupAbios _HalpClockInterrupt: - - /* Enter trap */ -// INT_PROLOG hci_a, hci_t, DoPushFakeErrorCode - - /* Push vector and make stack for IRQL */ - push 0x30 - sub esp, 4 - - /* Begin the interrupt */ - push rsp - push 0x30 - push CLOCK_LEVEL -// call _HalBeginSystemInterrupt - - /* Check if it's spurious */ - or al, al - jz Spurious - - /* Update the performance counter */ - xor ebx, ebx - mov eax, _HalpCurrentRollOver - add _HalpPerfCounterLow, eax - adc _HalpPerfCounterHigh, ebx - - /* Get the time increment and check if someone changed the clock rate */ - mov eax, _HalpCurrentTimeIncrement - cmp _HalpClockSetMSRate, ebx - jz _KeUpdateSystemTime - - /* FIXME: Someone did! */ - int 3 - -Spurious: - - /* Exit the interrupt */ - add esp, 8 -// jmp _Kei386EoiHelper + UNIMPLEMENTED _HalpClockInterrupt + iret .endfunc From 1a46e2dfde39ed45bbee8b8ea9fea16967713b77 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Mon, 28 Dec 2009 20:03:17 +0000 Subject: [PATCH 262/286] Add ksamd64.h. This is a temporary solution until it's autogenerated. Note to self: veryfy offsets before using them! svn path=/branches/ros-amd64-bringup/; revision=44798 --- reactos/include/ndk/amd64/ksamd64.h | 1430 +++++++++++++++++++++++++++ 1 file changed, 1430 insertions(+) create mode 100644 reactos/include/ndk/amd64/ksamd64.h diff --git a/reactos/include/ndk/amd64/ksamd64.h b/reactos/include/ndk/amd64/ksamd64.h new file mode 100644 index 00000000000..36a22689068 --- /dev/null +++ b/reactos/include/ndk/amd64/ksamd64.h @@ -0,0 +1,1430 @@ + +/* + * Definitions for amd64 assembly + * This file should later be autogenerated. + * + */ + +/* CONSTANT DEFINES **********************************************************/ + +/* Breakpoints */ +#define BREAKPOINT_BREAK 0x0000 +#define BREAKPOINT_PRINT 0x0001 +#define BREAKPOINT_PROMPT 0x0002 +#define BREAKPOINT_LOAD_SYMBOLS 0x0003 +#define BREAKPOINT_UNLOAD_SYMBOLS 0x0004 +#define BREAKPOINT_COMMAND_STRING 0x0005 + +/* Context Frame Flags */ +#define CONTEXT_FULL 0x0010000B +#define CONTEXT_CONTROL 0x00100001 +#define CONTEXT_INTEGER 0x00100002 +#define CONTEXT_SEGMENTS 0x00100004 +#define CONTEXT_FLOATING_POINT 0x00100008 +#define CONTEXT_DEBUG_REGISTERS 0x00100010 + +/* CR0 */ +#define CR0_PE 0x000000001 +#define CR0_MP 0x000000002 +#define CR0_EM 0x000000004 +#define CR0_TS 0x000000008 +#define CR0_ET 0x000000010 +#define CR0_NE 0x000000020 +#define CR0_WP 0x000010000 +#define CR0_AM 0x000040000 +#define CR0_NW 0x020000000 +#define CR0_CD 0x040000000 +#define CR0_PG 0x080000000 + +/* CR4 */ +#define CR4_VME 0x00001 +#define CR4_PVI 0x00002 +#define CR4_TSD 0x00004 +#define CR4_DE 0x00008 +#define CR4_PSE 0x00010 +#define CR4_PAE 0x00020 +#define CR4_MCE 0x00040 +#define CR4_PGE 0x00080 +#define CR4_FXSR 0x00200 +#define CR4_XMMEXCPT 0x00400 +#define CR4_CHANNELS 0x00800 + +/* Debug control register masks */ +#define DR7_LEGAL 0x0FFFF0355 +#define DR7_ACTIVE 0x00355 +#define DR7_TRACE_BRANCH 0x00200 +#define DR7_LAST_BRANCH 0x00100 +#define DEBUG_ACTIVE_DR7 0x00001 +#define DEBUG_ACTIVE_INSTRUMENTED 0x00002 + +/* EFLAGS */ +#define EFLAGS_TF_MASK 0x000100 +#define EFLAGS_TF_SHIFT 0x000008 +#define EFLAGS_ID_MASK 0x200000 +#define EFLAGS_IF_MASK 0x000200 +#define EFLAGS_IF_SHIFT 0x000009 + +/* fatal exception codes */ +#define EXCEPTION_DIVIDED_BY_ZERO 0x00000 +#define EXCEPTION_DEBUG 0x00001 +#define EXCEPTION_NMI 0x00002 +#define EXCEPTION_INT3 0x00003 +#define EXCEPTION_BOUND_CHECK 0x00005 +#define EXCEPTION_INVALID_OPCODE 0x00006 +#define EXCEPTION_NPX_NOT_AVAILABLE 0x00007 +#define EXCEPTION_DOUBLE_FAULT 0x00008 +#define EXCEPTION_NPX_OVERRUN 0x00009 +#define EXCEPTION_INVALID_TSS 0x0000A +#define EXCEPTION_SEGMENT_NOT_PRESENT 0x0000B +#define EXCEPTION_STACK_FAULT 0x0000C +#define EXCEPTION_GP_FAULT 0x0000D +#define EXCEPTION_RESERVED_TRAP 0x0000F +#define EXCEPTION_NPX_ERROR 0x00010 +#define EXCEPTION_ALIGNMENT_CHECK 0x00011 + +/* Exception flags */ +#define EXCEPTION_NONCONTINUABLE 0x00001 +#define EXCEPTION_UNWINDING 0x00002 +#define EXCEPTION_EXIT_UNWIND 0x00004 +#define EXCEPTION_STACK_INVALID 0x00008 +#define EXCEPTION_NESTED_CALL 0x00010 +#define EXCEPTION_TARGET_UNWIND 0x00020 +#define EXCEPTION_COLLIDED_UNWIND 0x00040 +#define EXCEPTION_UNWIND 0x00066 +#define EXCEPTION_EXECUTE_HANDLER 0x00001 +#define EXCEPTION_CONTINUE_SEARCH 0x00000 +#define EXCEPTION_CONTINUE_EXECUTION 0x0FFFFFFFF +#ifdef _X86_ +#define EXCEPTION_CHAIN_END 0x0FFFFFFFF +#define FIXED_NTVDMSTATE_LINEAR 0x00714 +#endif + +/* Exception type */ +#define ExceptionContinueExecution 0x00000 +#define ExceptionContinueSearch 0x00001 +#define ExceptionNestedException 0x00002 +#define ExceptionCollidedUnwind 0x00003 + + +/* Hypervisor Enlightenment Definitions */ +#define HV_MMU_USE_HYPERCALL_FOR_ADDRESS_SWITCH 0x00001 +#define HV_MMU_USE_HYPERCALL_FOR_LOCAL_FLUSH 0x00002 +#define HV_MMU_USE_HYPERCALL_FOR_REMOTE_FLUSH 0x00004 +#define HV_X64_MSR_APIC_EOI 0x040000070 +#define HV_APIC_ENLIGHTENED 0x00010 +#define HV_KE_USE_HYPERCALL_FOR_LONG_SPIN_WAIT 0x00040 +#define HV_VIRTUAL_APIC_NO_EOI_REQUIRED_V 0x00000 +#define HvApicFlags 0x00000 + +/* IRQL */ +#define PASSIVE_LEVEL 0x00 +#define APC_LEVEL 0x01 +#define DISPATCH_LEVEL 0x02 +#define CLOCK_LEVEL 0x0D +#define IPI_LEVEL 0x0E +#define POWER_LEVEL 0x0E +#define PROFILE_LEVEL 0x0F +#define HIGH_LEVEL 0x0F +#ifdef NT_UP +#define SYNCH_LEVEL 0x02 +#else +#define SYNCH_LEVEL 0x0C +#endif + +/* Performance Definitions */ +#define PERF_CONTEXTSWAP_OFFSET 0x00004 +#define PERF_CONTEXTSWAP_FLAG 0x00004 +#define PERF_INTERRUPT_OFFSET 0x00004 +#define PERF_INTERRUPT_FLAG 0x04000 +#define PERF_PROFILE_OFFSET 0x00004 +#define PERF_PROFILE_FLAG 0x00002 +#define PERF_SYSCALL_OFFSET 0x00008 +#define PERF_SYSCALL_FLAG 0x00040 +#define NTOS_YIELD_MACRO 0x00001 + +/* User shared data */ +#define USER_SHARED_DATA 0x0FFFFF78000000000 +#define MM_SHARED_USER_DATA_VA 0x07FFE0000 + +/* Bug Check Codes */ +#define APC_INDEX_MISMATCH 0x00001 +#define INVALID_AFFINITY_SET 0x00003 +#define INVALID_DATA_ACCESS_TRAP 0x00004 +#define IRQL_NOT_GREATER_OR_EQUAL 0x00009 +#define IRQL_NOT_LESS_OR_EQUAL 0x0000A +#define NO_USER_MODE_CONTEXT 0x0000E +#define SPIN_LOCK_ALREADY_OWNED 0x0000F +#define SPIN_LOCK_NOT_OWNED 0x00010 +#define THREAD_NOT_MUTEX_OWNER 0x00011 +#define TRAP_CAUSE_UNKNOWN 0x00012 +#define KMODE_EXCEPTION_NOT_HANDLED 0x0001E +#define KERNEL_APC_PENDING_DURING_EXIT 0x00020 +#define PANIC_STACK_SWITCH 0x0002B +#define DATA_BUS_ERROR 0x0002E +#define INSTRUCTION_BUS_ERROR 0x0002F +#define SYSTEM_EXIT_OWNED_MUTEX 0x00039 +#define SYSTEM_UNWIND_PREVIOUS_USER 0x0003A +#define SYSTEM_SERVICE_EXCEPTION 0x0003B +#define INTERRUPT_UNWIND_ATTEMPTED 0x0003C +#define INTERRUPT_EXCEPTION_NOT_HANDLED 0x0003D +#define PAGE_FAULT_WITH_INTERRUPTS_OFF 0x00049 +#define IRQL_GT_ZERO_AT_SYSTEM_SERVICE 0x0004A +#define DATA_COHERENCY_EXCEPTION 0x00055 +#define INSTRUCTION_COHERENCY_EXCEPTION 0x00056 +#define HAL1_INITIALIZATION_FAILED 0x00061 +#define UNEXPECTED_KERNEL_MODE_TRAP 0x0007F +#define NMI_HARDWARE_FAILURE 0x00080 +#define SPIN_LOCK_INIT_FAILURE 0x00081 +#define ATTEMPTED_SWITCH_FROM_DPC 0x000B8 +#define MUTEX_ALREADY_OWNED 0x000BF +#define HARDWARE_INTERRUPT_STORM 0x000F2 +#define RECURSIVE_MACHINE_CHECK 0x000FB +#define RECURSIVE_NMI 0x00111 + +/* Lock Queue */ +#define LOCK_QUEUE_WAIT 0x00001 +#define LOCK_QUEUE_OWNER 0x00002 +#define LockQueueDispatcherLock 0x00000 + +/* Process states */ +#define ProcessInMemory 0x00 +#define ProcessOutOfMemory 0x01 +#define ProcessInTransition 0x02 + +/* Processor mode */ +#define KernelMode 0x00 +#define UserMode 0x01 + +/* Status codes */ +#define STATUS_ACCESS_VIOLATION 0x0C0000005 +#define STATUS_ASSERTION_FAILURE 0x0C0000420 +#define STATUS_ARRAY_BOUNDS_EXCEEDED 0x0C000008C +#define STATUS_BAD_COMPRESSION_BUFFER 0x0C0000242 +#define STATUS_BREAKPOINT 0x080000003 +#define STATUS_CALLBACK_POP_STACK 0x0C0000423 +#define STATUS_DATATYPE_MISALIGNMENT 0x080000002 +#define STATUS_FLOAT_DENORMAL_OPERAND 0x0C000008D +#define STATUS_FLOAT_DIVIDE_BY_ZERO 0x0C000008E +#define STATUS_FLOAT_INEXACT_RESULT 0x0C000008F +#define STATUS_FLOAT_INVALID_OPERATION 0x0C0000090 +#define STATUS_FLOAT_OVERFLOW 0x0C0000091 +#define STATUS_FLOAT_STACK_CHECK 0x0C0000092 +#define STATUS_FLOAT_UNDERFLOW 0x0C0000093 +#define STATUS_FLOAT_MULTIPLE_FAULTS 0x0C00002B4 +#define STATUS_FLOAT_MULTIPLE_TRAPS 0x0C00002B5 +#define STATUS_GUARD_PAGE_VIOLATION 0x080000001 +#define STATUS_ILLEGAL_FLOAT_CONTEXT 0x0C000014A +#define STATUS_ILLEGAL_INSTRUCTION 0x0C000001D +#define STATUS_INSTRUCTION_MISALIGNMENT 0x0C00000AA +#define STATUS_INVALID_HANDLE 0x0C0000008 +#define STATUS_INVALID_LOCK_SEQUENCE 0x0C000001E +#define STATUS_INVALID_OWNER 0x0C000005A +#define STATUS_INVALID_PARAMETER 0x0C000000D +#define STATUS_INVALID_PARAMETER_1 0x0C00000EF +#define STATUS_INVALID_SYSTEM_SERVICE 0x0C000001C +#define STATUS_INTEGER_DIVIDE_BY_ZERO 0x0C0000094 +#define STATUS_INTEGER_OVERFLOW 0x0C0000095 +#define STATUS_IN_PAGE_ERROR 0x0C0000006 +#define STATUS_KERNEL_APC 0x00100 +#define STATUS_LONGJUMP 0x080000026 +#define STATUS_NO_CALLBACK_ACTIVE 0x0C0000258 +#define STATUS_NO_EVENT_PAIR 0x0C000014E +#define STATUS_PRIVILEGED_INSTRUCTION 0x0C0000096 +#define STATUS_SINGLE_STEP 0x080000004 +#define STATUS_STACK_BUFFER_OVERRUN 0x0C0000409 +#define STATUS_STACK_OVERFLOW 0x0C00000FD +#define STATUS_SUCCESS 0x00000 +#define STATUS_THREAD_IS_TERMINATING 0x0C000004B +#define STATUS_TIMEOUT 0x00102 +#define STATUS_UNWIND 0x0C0000027 +#define STATUS_UNWIND_CONSOLIDATE 0x080000029 +#define STATUS_USER_APC 0x000C0 +#define STATUS_WAKE_SYSTEM_DEBUGGER 0x080000007 + +/* Thread states */ +#define Initialized 0x00 +#define Ready 0x01 +#define Running 0x02 +#define Standby 0x03 +#define Terminated 0x04 +#define Waiting 0x05 + +/* Wait type / reason */ +#define WrExecutive 0x00000 +#define WrMutex 0x00001D +#define WrDispatchInt 0x00001F +#define WrQuantumEnd 0x00001E +#define WrEventPair 0x00000E +#define WaitAny 0x000001 +#define WaitAll 0x000000 + +/* interrupt object */ +#define InLevelSensitive 0x00000 +#define InLatched 0x00001 + +/* Stack sizes */ +#define KERNEL_STACK_SIZE 0x06000 +#define KERNEL_LARGE_STACK_SIZE 0x012000 +#define KERNEL_LARGE_STACK_COMMIT 0x06000 +#define KERNEL_MCA_EXCEPTION_STACK_SIZE 0x02000 +#define NMI_STACK_SIZE 0x02000 +#define DOUBLE_FAULT_STACK_SIZE 0x02000 + +/* TLS defines */ +#define TLS_MINIMUM_AVAILABLE 0x00040 +#define TLS_EXPANSION_SLOTS 0x00400 + +/* Miscellaneous Definitions */ +#define BASE_PRIORITY_THRESHOLD 0x00008 +#define EVENT_PAIR_INCREMENT 0x00001 +#define LOW_REALTIME_PRIORITY 0x00010 +#define CLOCK_QUANTUM_DECREMENT 0x00003 +#define READY_SKIP_QUANTUM 0x00002 +#define THREAD_QUANTUM 0x00006 +#define WAIT_QUANTUM_DECREMENT 0x00001 +#define ROUND_TRIP_DECREMENT_COUNT 0x00010 +#define MAXIMUM_PROCESSORS 0x00040 +#define INITIAL_STALL_COUNT 0x00064 +#define EXCEPTION_EXECUTE_FAULT 0x00008 +#define KCACHE_ERRATA_MONITOR_FLAGS 0x00003 +#define KI_EXCEPTION_GP_FAULT 0x010000001 +#define KI_EXCEPTION_INVALID_OP 0x010000002 +#define KI_EXCEPTION_INTEGER_DIVIDE_BY_ZERO 0x010000003 +#define KI_EXCEPTION_ACCESS_VIOLATION 0x010000004 +#define TARGET_FREEZE 0x00005 +#define BlackHole 0x0FFFFA000 +#define Executive 0x00000 +#define FALSE 0x00000 +#define TRUE 0x00001 +#define DBG_STATUS_CONTROL_C 0x00001 + +/* Pointer size */ +#define SizeofPointer 0x000008 + +/* KDGT selectors */ +#define KGDT64_NULL 0x000000 +#define KGDT64_R0_CODE 0x000010 +#define KGDT64_R0_DATA 0x000018 +#define KGDT64_R3_CMCODE 0x000020 +#define KGDT64_R3_DATA 0x000028 +#define KGDT64_R3_CODE 0x000030 +#define KGDT64_SYS_TSS 0x000040 +#define KGDT64_R3_CMTEB 0x000050 + +/* KeFeatureBits flags */ +#define KF_RDTSC 0x000002 +#define KF_CR4 0x000004 +#define KF_GLOBAL_PAGE 0x000010 +#define KF_LARGE_PAGE 0x000020 +#define KF_CMPXCHG8B 0x000080 +#define KF_FAST_SYSCALL 0x001000 + +/* Machine type definitions */ +#define MACHINE_TYPE_ISA 0x00 +#define MACHINE_TYPE_EISA 0x01 +#define MACHINE_TYPE_MCA 0x02 + +/* Machine Specific Register Numbers */ +#define MSR_EFER 0x0C0000080 +#define MSR_STAR 0x0C0000081 +#define MSR_LSTAR 0x0C0000082 +#define MSR_CSTAR 0x0C0000083 +#define MSR_SYSCALL_MASK 0x0C0000084 +#define MSR_FS_BASE 0x0C0000100 +#define MSR_GS_BASE 0x0C0000101 +#define MSR_GS_SWAP 0x0C0000102 +#define MSR_MCG_STATUS 0x00000017A +#define MSR_AMD_ACCESS 0x09C5A203A + +/* Flags for MSR_EFER */ +#define MSR_LMA 0x00400 +#define MSR_LME 0x00100 +#define MSR_SCE 0x00001 +#define MSR_NXE 0x00800 +#define MSR_PAT 0x00277 +#define MSR_DEGUG_CTL 0x001D9 +#define MSR_LAST_BRANCH_FROM 0x001DB +#define MSR_LAST_BRANCH_TO 0x001DC +#define MSR_LAST_EXCEPTION_FROM 0x001DD +#define MSR_LAST_EXCEPTION_TO 0x001DE + +/* Flags for MSR_DEGUG_CTL */ +#define MSR_DEBUG_CTL_LBR 0x00001 +#define MSR_DEBUG_CRL_BTF 0x00002 + + +/* STRUCTURE OFFSETS ********************************************************/ + +/* Argument Home Address */ +#define P1Home 0x0008 +#define P2Home 0x0010 +#define P3Home 0x0018 +#define P4Home 0x0020 + +/* KAPC */ +#define ApType 0x0000 +#define ApSize 0x0002 +#define ApThread 0x0008 +#define ApApcListEntry 0x0010 +#define ApKernelRoutine 0x0020 +#define ApRundownRoutine 0x0028 +#define ApNormalRoutine 0x0030 +#define ApNormalContext 0x0038 +#define ApSystemArgument1 0x0040 +#define ApSystemArgument2 0x0048 +#define ApApcStateIndex 0x0050 +#define ApApcMode 0x0051 +#define ApInserted 0x0052 +#define ApcObjectLength 0x0058 + +/* KAPC_STATE */ +#define AsApcListHead 0x0000 +#define AsProcess 0x0020 +#define AsKernelApcInProgress 0x0028 +#define AsKernelApcPending 0x0029 +#define AsUserApcPending 0x002A + +/* CLIENT_ID */ +#define CidUniqueProcess 0x0000 +#define CidUniqueThread 0x0008 + +/* RTL_CRITICAL_SECTION */ +#define CsDebugInfo 0x0000 +#define CsLockCount 0x0008 +#define CsRecursionCount 0x000C +#define CsOwningThread 0x0010 +#define CsLockSemaphore 0x0018 +#define CsSpinCount 0x0020 + +/* RTL_CRITICAL_SECTION_DEBUG */ +#define CsType 0x0000 +#define CsCreatorBackTraceIndex 0x0002 +#define CsCriticalSection 0x0008 +#define CsProcessLocksList 0x0010 +#define CsEntryCount 0x0020 +#define CsContentionCount 0x0024 + +/* CONTEXT */ +#define CxP1Home 0x0000 +#define CxP2Home 0x0008 +#define CxP3Home 0x0010 +#define CxP4Home 0x0018 +#define CxP5Home 0x0020 +#define CxP6Home 0x0028 +#define CxContextFlags 0x0030 +#define CxMxCsr 0x0034 +#define CxSegCs 0x0038 +#define CxSegDs 0x003A +#define CxSegEs 0x003C +#define CxSegFs 0x003E +#define CxSegGs 0x0040 +#define CxSegSs 0x0042 +#define CxEFlags 0x0044 +#define CxDr0 0x0048 +#define CxDr1 0x0050 +#define CxDr2 0x0058 +#define CxDr3 0x0060 +#define CxDr6 0x0068 +#define CxDr7 0x0070 +#define CxRax 0x0078 +#define CxRcx 0x0080 +#define CxRdx 0x0088 +#define CxRbx 0x0090 +#define CxRsp 0x0098 +#define CxRbp 0x00A0 +#define CxRsi 0x00A8 +#define CxRdi 0x00B0 +#define CxR8 0x00B8 +#define CxR9 0x00C0 +#define CxR10 0x00C8 +#define CxR11 0x00D0 +#define CxR12 0x00D8 +#define CxR13 0x00E0 +#define CxR14 0x00E8 +#define CxR15 0x00F0 +#define CxRip 0x00F8 +#define CxFltSave 0x0100 +#define CxXmm0 0x01A0 +#define CxXmm1 0x01B0 +#define CxXmm2 0x01C0 +#define CxXmm3 0x01D0 +#define CxXmm4 0x01E0 +#define CxXmm5 0x01F0 +#define CxXmm6 0x0200 +#define CxXmm7 0x0210 +#define CxXmm8 0x0220 +#define CxXmm9 0x0230 +#define CxXmm10 0x0240 +#define CxXmm11 0x0250 +#define CxXmm12 0x0260 +#define CxXmm13 0x0270 +#define CxXmm14 0x0280 +#define CxXmm15 0x0290 +#define CxDebugControl 0x04A8 +#define CxLastBranchToRip 0x04B0 +#define CxLastBranchFromRip 0x04B8 +#define CxLastExceptionToRip 0x04C0 +#define CxLastExceptionFromRip 0x04C8 +#define CxVectorControl 0x04A0 +#define CxVectorRegister 0x0300 +#define CONTEXT_FRAME_LENGTH 0x04D0 + +/* DISPATCHER_CONTEXT */ +#define DcControlPc 0x0000 +#define DcImageBase 0x0008 +#define DcFunctionEntry 0x0010 +#define DcEstablisherFrame 0x0018 +#define DcTargetIp 0x0020 +#define DcContextRecord 0x0028 +#define DcLanguageHandler 0x0030 +#define DcHandlerData 0x0038 +#define DcHistoryTable 0x0040 +#define DcScopeIndex 0x0048 + +/* KDEVICE_QUEUE_ENTRY */ +#define DeDeviceListEntry 0x0000 +#define DeSortKey 0x0010 +#define DeInserted 0x0014 +#define DeviceQueueEntryLength 0x0018 + +/* KDPC */ +#define DpType 0x0000 +#define DpImportance 0x0001 +#define DpNumber 0x0002 +#define DpDpcListEntry 0x0008 +#define DpDeferredRoutine 0x0018 +#define DpDeferredContext 0x0020 +#define DpSystemArgument1 0x0028 +#define DpSystemArgument2 0x0030 +#define DpDpcData 0x0038 +#define DpcObjectLength 0x0040 + +/* KDEVICE_QUEUE */ +#define DvType 0x0000 +#define DvSize 0x0002 +#define DvDeviceListHead 0x0008 +#define DvSpinLock 0x0018 +#define DvBusy 0x0020 +#define DeviceQueueObjectLength 0x0028 + +/* Event Pair Object */ +#define EpType 0x0000 +#define EpSize 0x0002 +#define EpEventLow 0x0008 +#define EpEventHigh 0x0020 + +/* EPROCESS */ +#define EpDebugPort 0x0150 +#define EpVdmObjects 0x0208 + +/* EXCEPTION_RECORD */ +#define ErExceptionCode 0x00000 +#define ErExceptionFlags 0x00004 +#define ErExceptionRecord 0x00008 +#define ErExceptionAddress 0x00010 +#define ErNumberParameters 0x00018 +#define ErExceptionInformation 0x00020 +#define ExceptionRecordLength 0x000A0 +#define EXCEPTION_RECORD_LENGTH 0x000A0 + +/* KEVENT */ +#define EvType 0x00000 +#define EvSize 0x00002 +#define EvSignalState 0x00004 +#define EvWaitListHead 0x00008 +#define EventObjectLength 0x00018 + +/* KEXCEPTION_FRAME */ +#define ExP1Home 0x00000 +#define ExP2Home 0x00008 +#define ExP3Home 0x00010 +#define ExP4Home 0x00018 +#define ExP5 0x00020 +#define ExXmm6 0x00030 +#define ExXmm7 0x00040 +#define ExXmm8 0x00050 +#define ExXmm9 0x00060 +#define ExXmm10 0x00070 +#define ExXmm11 0x00080 +#define ExXmm12 0x00090 +#define ExXmm13 0x000A0 +#define ExXmm14 0x000B0 +#define ExXmm15 0x000C0 +#define ExMxCsr 0x000F0 +#define ExRbp 0x000F8 +#define ExRbx 0x00100 +#define ExRdi 0x00108 +#define ExRsi 0x00110 +#define ExR12 0x00118 +#define ExR13 0x00120 +#define ExR14 0x00128 +#define ExR15 0x00130 +#define ExReturn 0x00138 +#define CuInitialStack 0x00028 +#define CuTrapFrame 0x000D0 +#define CuCallbackStack 0x000D8 +#define CuOutputBuffer 0x000E0 +#define CuOutputLength 0x000E8 +#define KEXCEPTION_FRAME_LENGTH 0x00140 + +/* FAST_MUTEX */ +#define FmCount 0x00000 +#define FmOwner 0x00008 +#define FmContention 0x00010 +#define FmGate 0x00018 +#define FmOldIrql 0x00030 + +/* KINTERRUPT */ +#define InType 0x00000 +#define InSize 0x00002 +#define InInterruptListEntry 0x00008 +#define InServiceRoutine 0x00018 +#define InServiceContext 0x00030 +#define InSpinLock 0x00038 +#define InTickCount 0x00040 +#define InActualLock 0x00048 +#define InDispatchAddress 0x00050 +#define InVector 0x00058 +#define InIrql 0x0005C +#define InSynchronizeIrql 0x0005D +#define InFloatingSave 0x0005E +#define InConnected 0x0005F +#define InNumber 0x00060 +#define InShareVector 0x00061 +#define InMode 0x00064 +#define InServiceCount 0x0006C +#define InDispatchCount 0x00070 +#define InTrapFrame 0x00080 +#define InDispatchCode 0x00090 +#define InterruptObjectLength 0x000A0 + +/* IO_STATUS_BLOCK */ +#define IoStatus 0x00000 +#define IoPointer 0x00000 +#define IoInformation 0x00008 + +/* JUMP_BUFFER */ +#define JbFrame 0x00000 +#define JbRbx 0x00008 +#define JbRsp 0x00010 +#define JbRbp 0x00018 +#define JbRsi 0x00020 +#define JbRdi 0x00028 +#define JbR12 0x00030 +#define JbR13 0x00038 +#define JbR14 0x00040 +#define JbR15 0x00048 +#define JbRip 0x00050 +#define JbMxCsr 0x00058 +#define JbFpCsr 0x0005C +#define JbXmm6 0x00060 +#define JbXmm7 0x00070 +#define JbXmm8 0x00080 +#define JbXmm9 0x00090 +#define JbXmm10 0x000A0 +#define JbXmm11 0x000B0 +#define JbXmm12 0x000C0 +#define JbXmm13 0x000D0 +#define JbXmm14 0x000E0 +#define JbXmm15 0x000F0 + +/* KERNEL_STACK_CONTROL */ +#define KcPreviousBase 0x00228 +#define KcPreviousLimit 0x00230 +#define KcPreviousKernel 0x00238 +#define KcPreviousInitial 0x00240 +#define KERNEL_STACK_CONTROL_LENGTH 0x00250 +#define KERNEL_STACK_CONTROL_LARGE_STACK 0x00001 + +/* KGDT */ +#define KgdtBaseLow 0x00002 +#define KgdtBaseMiddle 0x00004 +#define KgdtBaseHigh 0x00007 +#define KgdtBaseUpper 0x00008 +#define KgdtLimitHigh 0x00006 +#define KgdtLimitLow 0x00000 +#define KGDT_LIMIT_ENCODE_MASK 0x03C00 + +/* KNODE */ +#define KnRight 0x00078 +#define KnLeft 0x0007C +#define KnPfnDereferenceSListHead 0x00040 +#define KnProcessorMask 0x00050 +#define KnColor 0x00058 +#define KnSeed 0x00059 +#define KnNodeNumber 0x0005A +#define KnFlags 0x0005B +#define knMmShiftedColor 0x0005C +#define KnFreeCount 0x00060 +#define KnPfnDeferredList 0x00070 +#define KNODE_SIZE 0x000C0 + +/* KSPIN_LOCK_QUEUE */ +#define LqNext 0x00000 +#define LqLock 0x00008 + +/* KLOCK_QUEUE_HANDLE */ +#define LqhNext 0x00000 +#define LqhLock 0x00008 +#define LqhOldIrql 0x00010 +#define LOCK_QUEUE_HEADER_SIZE 0x00010 + +/* LARGE_INTEGER */ +#define LiLowPart 0x00000 +#define LiHighPart 0x00004 + +/* LOADER_PARAMETER_BLOCK (relative to LoadOrderListHead) */ +#define LpbLoadOrderListHead 0x00000 +#define LpbMemoryDescriptorListHead 0x00010 +#define LpbKernelStack 0x00030 +#define LpbPrcb 0x00038 +#define LpbProcess 0x00040 +#define LpbThread 0x00048 +#define LpbI386 0x000B8 +#define LpbRegistryLength 0x00050 +#define LpbRegistryBase 0x00058 +#define LpbConfigurationRoot 0x00060 +#define LpbArcBootDeviceName 0x00068 +#define LpbArcHalDeviceName 0x00070 +#define LpbLoadOptions 0x00088 +#define PAGE_SIZE 0x01000 + +/* LIST_ENTRY */ +#define LsFlink 0x00000 +#define LsBlink 0x00008 + +/* KPRCB */ +#define PbMxCsr 0x00000 +#define PbNumber 0x00004 +#define PbInterruptRequest 0x00006 +#define PbIdleHalt 0x00007 +#define PbCurrentThread 0x00008 +#define PbNextThread 0x00010 +#define PbIdleThread 0x00018 +#define PbNestingLevel 0x00020 +#define PbRspBase 0x00028 +#define PbPrcbLock 0x00030 +#define PbSetMember 0x00038 +#define PbProcessorState 0x00040 +#define PbCpuType 0x005F0 +#define PbCpuID 0x005F1 +#define PbCpuStep 0x005F2 +#define PbHalReserved 0x005F8 +#define PbMinorVersion 0x00638 +#define PbMajorVersion 0x0063A +#define PbBuildType 0x0063C +#define PbCpuVendor 0x0063D +#define PbCoresPerPhysicalProcessor 0x0063E +#define PbLogicalProcessorsPerCore 0x0063F +#define PbApicMask 0x00640 +#define PbCFlushSize 0x00644 +#define PbAcpiReserved 0x00648 +#define PbInitialApicId 0x00650 +#define PbStride 0x00654 +#define PbLockQueue 0x00670 +#define PbPPLookasideList 0x00980 +#define PbPPNPagedLookasideList 0x00A80 +#define PbPPPagedLookasideList 0x01680 +#define PbPacketBarrier 0x02280 +#define PbDeferredReadyListHead 0x02288 +#define PbLookasideIrpFloat 0x022D8 +#define PbSystemCalls 0x022B8 +#define PbReadOperationCount 0x022DC +#define PbWriteOperationCount 0x022E0 +#define PbOtherOperationCount 0x022E4 +#define PbReadTransferCount 0x022E8 +#define PbWriteTransferCount 0x022F0 +#define PbOtherTransferCount 0x022F8 +#define PbContextSwitches 0x022BC +#define PbTargetSet 0x02300 +#define PbIpiFrozen 0x02308 +#define PbRequestMailbox 0x02380 +#define PbSenderSummary 0x03380 +#define PbDpcListHead 0x03400 +#define PbDpcLock 0x03410 +#define PbDpcQueueDepth 0x03418 +#define PbDpcCount 0x0341C +#define PbDpcStack 0x03440 +#define PbMaximumDpcQueueDepth 0x03450 +#define PbDpcRequestRate 0x03454 +#define PbMinimumDpcRate 0x03458 +#define PbDpcInterruptRequested 0x0345C +#define PbDpcThreadRequested 0x0345D +#define PbDpcRoutineActive 0x0345E +#define PbDpcThreadActive 0x0345F +#define PbTimerHand 0x03460 +#define PbTimerRequest 0x03460 +#define PbTickOffset 0x03468 +#define PbMasterOffset 0x0346C +#define PbDpcLastCount 0x03470 +#define PbQuantumEnd 0x03475 +#define PbDpcSetEventRequest 0x03478 +#define PbIdleSchedule 0x03477 +#define PbReadySummary 0x03518 +#define PbDispatcherReadyListHead 0x03580 +#define PbInterruptCount 0x03780 +#define PbKernelTime 0x03784 +#define PbUserTime 0x03788 +#define PbDpcTime 0x0378C +#define PbInterruptTime 0x03790 +#define PbAdjustDpcThreshold 0x03794 +#define PbSkipTick 0x03798 +#define PbPollSlot 0x0379A +#define PbParentNode 0x037C0 +#define PbMultiThreadProcessorSet 0x037C8 +#define PbMultiThreadSetMaster 0x037D0 +#define PbStartCycles 0x037D8 +#define PbPageColor 0x037E4 +#define PbNodeColor 0x037E8 +#define PbNodeShiftedColor 0x037EC +#define PbSecondaryColorMask 0x037F0 +#define PbSleeping 0x037F4 +#define PbCycleTime 0x037F8 +#define PbFastReadNoWait 0x022C0 +#define PbFastReadWait 0x022C4 +#define PbFastReadNotPossible 0x022C8 +#define PbCopyReadNoWait 0x022CC +#define PbCopyReadWait 0x022D0 +#define PbCopyReadNoWaitMiss 0x022D4 +#define PbAlignmentFixupCount 0x03998 +#define PbExceptionDispatchCount 0x0347C +#define PbVendorString 0x0399C +#define PbPowerState 0x03880 +#define ProcessorBlockLength 0x03B20 + +/* KPCR */ +#define PcGdt 0x00000 +#define PcTss 0x00008 +#define PcUserRsp 0x00010 +#define PcSelf 0x00018 +#define PcCurrentPrcb 0x00020 +#define PcLockArray 0x00028 +#define PcTeb 0x00030 +#define PcIdt 0x00038 +#define PcIrql 0x00050 +#define PcStallScaleFactor 0x00064 +#define PcHalReserved 0x000C0 +#define PcPrcb 0x00180 +#define PcMxCsr 0x00180 +#define PcNumber 0x00184 +#define PcInterruptRequest 0x00186 +#define PcIdleHalt 0x00187 +#define PcCurrentThread 0x00188 +#define PcNextThread 0x00190 +#define PcIdleThread 0x00198 +#define PcIpiFrozen 0x02488 +#define PcNestingLevel 0x001A0 +#define PcRspBase 0x001A8 +#define PcPrcbLock 0x001B0 +#define PcSetMember 0x001B8 +#define PcCr0 0x001C0 +#define PcCr2 0x001C8 +#define PcCr3 0x001D0 +#define PcCr4 0x001D8 +#define PcKernelDr0 0x001E0 +#define PcKernelDr1 0x001E8 +#define PcKernelDr2 0x001F0 +#define PcKernelDr3 0x001F8 +#define PcKernelDr7 0x00208 +#define PcGdtrLimit 0x00216 +#define PcGdtrBase 0x00218 +#define PcIdtrLimit 0x00226 +#define PcIdtrBase 0x00228 +#define PcTr 0x00230 +#define PcLdtr 0x00232 +#define PcDebugControl 0x00238 +#define PcLastBranchToRip 0x00240 +#define PcLastBranchFromRip 0x00248 +#define PcLastExceptionToRip 0x00250 +#define PcLastExceptionFromRip 0x00258 +#define PcCr8 0x00260 +#define PcCpuType 0x00770 +#define PcCpuID 0x00771 +#define PcCpuStep 0x00772 +#define PcCpuVendor 0x007BD +#define PcVirtualApicAssist 0x03C48 +#define CPU_AMD 0x00001 +#define CPU_INTEL 0x00002 +#define PcCFlushSize 0x007C4 +#define PcDeferredReadyListHead 0x02408 +#define PcSystemCalls 0x02438 +#define PcDpcRoutineActive 0x035DE +#define PcInterruptCount 0x03900 +#define PcDebuggerSavedIRQL 0x03919 +#define PcTickOffset 0x035E8 +#define PcMasterOffset 0x035EC +#define PcSkipTick 0x03918 +#define PcStartCycles 0x03958 +#define ProcessorControlRegisterLength 0x03CA0 + +/* PEB */ +#define PeKernelCallbackTable 0x00058 +#define ProcessEnvironmentBlockLength 0x00368 + +/* KPROFILE */ +#define PfType 0x00000 +#define PfSize 0x00002 +#define PfProfileListEntry 0x00008 +#define PfProcess 0x00018 +#define PfRangeBase 0x00020 +#define PfRangeLimit 0x00028 +#define PfBucketShift 0x00030 +#define PfBuffer 0x00038 +#define PfSegment 0x00040 +#define PfAffinity 0x00048 +#define PfSource 0x00050 +#define PfStarted 0x00052 +#define ProfileObjectLength 0x00058 + +/* PORT_MESSAGE */ +#define PmLength 0x00000 +#define PmZeroInit 0x00004 +#define PmClientId 0x00008 +#define PmProcess 0x00008 +#define PmThread 0x00010 +#define PmMessageId 0x00018 +#define PmClientViewSize 0x00020 +#define PortMessageLength 0x00028 + +/* KPROCESS */ +#define PrType 0x00000 +#define PrSize 0x00002 +#define PrSignalState 0x00004 +#define PrProfileListHead 0x00018 +#define PrDirectoryTableBase 0x00028 +#define PrIopmOffset 0x00038 +#define PrInstrumentationCallback 0x00068 +#define PrActiveProcessors 0x00040 +#define PrKernelTime 0x00048 +#define PrUserTime 0x0004C +#define PrReadyListHead 0x00050 +#define PrSwapListEntry 0x00060 +#define PrThreadListHead 0x00070 +#define PrProcessLock 0x00080 +#define PrAffinity 0x00088 +#define PrProcessFlags 0x00090 +#define PrBasePriority 0x00094 +#define PrQuantumReset 0x00095 +#define PrState 0x00096 +#define PrStackCount 0x000A0 +#define PrCycleTime 0x000B8 +#define KernelProcessObjectLength 0x000C0 +#define ExecutiveProcessObjectLength 0x003E8 + +/* KPROCESSOR_STATE */ +#define PsSpecialRegisters 0x00000 +#define PsCr0 0x00000 +#define PsCr2 0x00008 +#define PsCr3 0x00010 +#define PsCr4 0x00018 +#define PsKernelDr0 0x00020 +#define PsKernelDr1 0x00028 +#define PsKernelDr2 0x00030 +#define PsKernelDr3 0x00038 +#define PsKernelDr6 0x00040 +#define PsKernelDr7 0x00048 +#define PsGdtr 0x00056 +#define PsIdtr 0x00066 +#define PsTr 0x00070 +#define PsLdtr 0x00072 +#define PsMxCsr 0x00074 +#define PsContextFrame 0x000E0 +#define PsDebugControl 0x00078 +#define PsLastBranchToRip 0x00080 +#define PsLastBranchFromRip 0x00088 +#define PsLastExceptionToRip 0x00090 +#define PsLastExceptionFromRip 0x00098 +#define PsCr8 0x000A0 +#define ProcessorStateLength 0x005B0 + +/* Processor Start Block */ +#define PsbCompletionFlag 0x00004 +#define PsbGdt32 0x00008 +#define PsbIdt32 0x0000E +#define PsbGdt 0x00018 +#define PsbTiledCr3 0x00058 +#define PsbPmTarget 0x00060 +#define PsbLmTarget 0x00070 +#define PsbLmIdentityTarget 0x00066 +#define PsbSelfMap 0x00078 +#define PsbMsrPat 0x00080 +#define PsbMsrEFER 0x00088 +#define PsbProcessorState 0x00090 +#define ProcessorStartBlockLength 0x00640 + +/* KQUEUE */ +#define QuType 0x00000 +#define QuSize 0x00002 +#define QuSignalState 0x00004 +#define QuEntryListHead 0x00018 +#define QuCurrentCount 0x00028 +#define QuMaximumCount 0x0002C +#define QuThreadListHead 0x00030 +#define QueueObjectLength 0x00040 + +/* KSTART_FRAME */ +#define SfP1Home 0x00000 +#define SfP2Home 0x00008 +#define SfP3Home 0x00010 +#define SfP4Home 0x00018 +#define SfReturn 0x00028 +#define KSTART_FRAME_LENGTH 0x00030 + +/* KSPECIAL_REGISTERS */ +#define SrKernelDr0 0x00020 +#define SrKernelDr1 0x00028 +#define SrKernelDr2 0x00030 +#define SrKernelDr3 0x00038 +#define SrKernelDr6 0x00040 +#define SrKernelDr7 0x00048 +#define SrGdtr 0x00050 +#define SrIdtr 0x00060 +#define SrTr 0x00070 +#define SrMxCsr 0x00074 +#define SrMsrGsBase 0x000A8 +#define SrMsrGsSwap 0x000B0 +#define SrMsrStar 0x000B8 +#define SrMsrLStar 0x000C0 +#define SrMsrCStar 0x000C8 +#define SrMsrSyscallMask 0x000D0 + +/* STRING */ +#define StrLength 0x00000 +#define StrMaximumLength 0x00002 +#define StrBuffer 0x00008 + +/* KSWITCH_FRAME */ +#define SwP5Home 0x00020 +#define SwApcBypass 0x00028 +#define SwRbp 0x00030 +#define SwReturn 0x00038 +#define KSWITCH_FRAME_LENGTH 0x00040 + +/* TEB */ +#define TeCmTeb 0x00000 +#define TeStackBase 0x00008 +#define TeStackLimit 0x00010 +#define TeFiberData 0x00020 +#define TeSelf 0x00030 +#define TeEnvironmentPointer 0x00038 +#define TeClientId 0x00040 +#define TeActiveRpcHandle 0x00050 +#define TeThreadLocalStoragePointer 0x00058 +#define TeCountOfOwnedCriticalSections 0x0006C +#define TePeb 0x00060 +#define TeCsrClientThread 0x00070 +#define TeWOW32Reserved 0x00100 +#define TeSoftFpcr 0x0010C +#define TeExceptionCode 0x002C0 +#define TeActivationContextStackPointer 0x002C8 +#define TeGdiClientPID 0x007F0 +#define TeGdiClientTID 0x007F4 +#define TeGdiThreadLocalInfo 0x007F8 +#define TeglDispatchTable 0x009F0 +#define TeglReserved1 0x01138 +#define TeglReserved2 0x01220 +#define TeglSectionInfo 0x01228 +#define TeglSection 0x01230 +#define TeglTable 0x01238 +#define TeglCurrentRC 0x01240 +#define TeglContext 0x01248 +#define TeDeallocationStack 0x01478 +#define TeTlsSlots 0x01480 +#define TeTlsExpansionSlots 0x01780 +#define TeLastErrorValue 0x00068 +#define TeVdm 0x01690 +#define TeInstrumentation 0x016B8 +#define TeGdiBatchCount 0x01740 +#define TeGuaranteedStackBytes 0x01748 +#define TeFlsData 0x017C8 +#define TeProcessRundown 0x0180C +#define ThreadEnvironmentBlockLength 0x01828 +#define CmThreadEnvironmentBlockOffset 0x02000 + +/* TIME_FIELDS */ +#define TfSecond 0x0000A +#define TfMinute 0x00008 +#define TfHour 0x00006 +#define TfWeekday 0x0000E +#define TfDay 0x00004 +#define TfMonth 0x00002 +#define TfYear 0x00000 +#define TfMilliseconds 0x0000C + +/* KTHREAD */ +#define ThType 0x00000 +#define ThNpxIrql 0x00001 +#define ThSize 0x00002 +#define ThDebugActive 0x00003 +#define ThSignalState 0x00004 +#define ThCycleTime 0x00018 +#define ThInitialStack 0x00028 +#define ThStackLimit 0x00030 +#define ThKernelStack 0x00038 +#define ThThreadLock 0x00040 +#define ThApcState 0x00048 +#define ThNextProcessor 0x00074 +#define ThDeferredProcessor 0x00076 +#define ThAdjustReason 0x001E4 +#define ThAdjustIncrement 0x001E5 +#define ThApcQueueLock 0x00078 +#define ThWaitStatus 0x00080 +#define ThWaitBlockList 0x00088 +#define ThGateObject 0x00088 +#define ThWaitReason 0x00094 +#define ThPriority 0x00073 +#define ThSwapBusy 0x00095 +#define ThAlerted 0x00096 +#define ThWaitListEntry 0x00098 +#define ThSwapListEntry 0x00098 +#define ThQueue 0x000A8 +#define ThTeb 0x000B0 +#define ThTimer 0x000B8 +#define ThThreadFlags 0x000F4 +#define ThWaitBlock 0x000F8 +#define ThPreviousMode 0x00153 +#define ThResourceIndex 0x00183 +#define ThLargeStack 0x001B3 +#define ThContextSwitches 0x00124 +#define ThState 0x00154 +#define ThNpxState 0x00155 +#define ThWaitIrql 0x00156 +#define ThWaitMode 0x00157 +#define ThWaitTime 0x00184 +#define ThCombinedApcDisable 0x001B4 +#define ThKernelApcDisable 0x001B4 +#define ThSpecialApcDisable 0x001B6 +#define ThQueueListEntry 0x001B8 +#define ThTrapFrame 0x001C8 +#define ThFirstArgument 0x001D0 +#define ThCallbackStack 0x001D8 +#define ThCallbackDepth 0x001D8 +#define ThApcStateIndex 0x001E0 +#define ThIdealProcessor 0x00123 +#define ThBasePriority 0x001E1 +#define ThPriorityDecrement 0x001E2 +#define ThSaturation 0x001E7 +#define ThSystemCallNumber 0x001E8 +#define ThUserAffinity 0x001F0 +#define ThProcess 0x001F8 +#define ThAffinity 0x00200 +#define ThApcStatePointer 0x00208 +#define ThSavedApcState 0x00218 +#define ThFreezeCount 0x001EC +#define ThSuspendCount 0x00244 +#define ThUserIdealProcessor 0x00245 +#define ThCodePatchInProgress 0x00247 +#define ThWin32Thread 0x00248 +#define ThStackBase 0x00250 +#define ThSuspendApc 0x00258 +#define ThKernelTime 0x0025C +#define ThLegoData 0x002A0 +#define ThPowerState 0x002AB +#define ThUserTime 0x002AC +#define ThSuspendSemaphore 0x002B0 +#define ThSListFaultCount 0x002CC +#define ThMutantListHead 0x002E0 +#define ThThreadListEntry 0x002D0 +#define ThSListFaultAddress 0x002F0 +#define KernelThreadObjectLength 0x00330 +#define ExecutiveThreadObjectLength 0x00450 + +/* KTIMER */ +#define TiType 0x00000 +#define TiSize 0x00002 +#define TiInserted 0x00003 +#define TiSignalState 0x00004 +#define TiDueTime 0x00018 +#define TiTimerListEntry 0x00020 +#define TiDpc 0x00030 +#define TiPeriod 0x00038 +#define TimerObjectLength 0x00040 + +/* TIME */ +#define TmLowTime 0x00000 +#define TmHighTime 0x00004 + +/* KTIMER_TABLE */ +#define TtEntry 0x00000 +#define TtTime 0x00010 +#define TIMER_ENTRY_SIZE 0x00018 +#define TIMER_TABLE_SIZE 0x00200 + +/* KTRAP_FRAME */ +#define TrP1Home 0x0FFFFFF80 +#define TrP2Home 0x0FFFFFF88 +#define TrP3Home 0x0FFFFFF90 +#define TrP4Home 0x0FFFFFF98 +#define TrP5 0x0FFFFFFA0 +#define TrPreviousMode 0x0FFFFFFA8 +#define TrPreviousIrql 0x0FFFFFFA9 +#define TrFaultIndicator 0x0FFFFFFAA +#define TrExceptionActive 0x0FFFFFFAB +#define TrMxCsr 0x0FFFFFFAC +#define TrRax 0x0FFFFFFB0 +#define TrRcx 0x0FFFFFFB8 +#define TrRdx 0x0FFFFFFC0 +#define TrR8 0x0FFFFFFC8 +#define TrR9 0x0FFFFFFD0 +#define TrR10 0x0FFFFFFD8 +#define TrR11 0x0FFFFFFE0 +#define TrGsBase 0x0FFFFFFE8 +#define TrGsSwap 0x0FFFFFFE8 +#define TrXmm0 0x0FFFFFFF0 +#define TrXmm1 0x00000 +#define TrXmm2 0x00010 +#define TrXmm3 0x00020 +#define TrXmm4 0x00030 +#define TrXmm5 0x00040 +#define TrFaultAddress 0x00050 +#define TrTimeStampCKCL 0x00050 +#define TrDr0 0x00058 +#define TrDr1 0x00060 +#define TrDr2 0x00068 +#define TrDr3 0x00070 +#define TrDr6 0x00078 +#define TrDr7 0x00080 +#define TrDebugControl 0x00088 +#define TrLastBranchToRip 0x00090 +#define TrLastBranchFromRip 0x00098 +#define TrLastExceptionToRip 0x000A0 +#define TrLastExceptionFromRip 0x000A8 +#define TrLastBranchControl 0x00088 +#define TrLastBranchMSR 0x00090 +#define TrSegDs 0x000B0 +#define TrSegEs 0x000B2 +#define TrSegFs 0x000B4 +#define TrSegGs 0x000B6 +#define TrTrapFrame 0x000B8 +#define TrRbx 0x000C0 +#define TrRdi 0x000C8 +#define TrRsi 0x000D0 +#define TrRbp 0x000D8 +#define TrErrorCode 0x000E0 +#define TrTimeStampKlog 0x000E0 +#define TrRip 0x000E8 +#define TrSegCs 0x000F0 +#define TrLogging 0x000F3 +#define TrEFlags 0x000F8 +#define TrRsp 0x00100 +#define TrSegSs 0x00108 +#define TrCodePatchCycle 0x0010C +#define KTRAP_FRAME_LENGTH 0x00190 + +/* KTSS */ +#define TssRsp0 0x0004 +#define TssRsp1 0x000C +#define TssRsp2 0x0014 +#define TssPanicStack 0x0024 +#define TssMcaStack 0x002C +#define TssNmiStack 0x0034 +#define TssIoMapBase 0x0066 +#define TssLength 0x0068 + +/* SYSTEM_CONTEXT_SWITCH_INFORMATION (relative to FindAny) */ +#define TwFindAny 0x0000 +#define TwFindIdeal 0x0004 +#define TwFindLast 0x0008 +#define TwIdleAny 0x000C +#define TwIdleCurrent 0x0010 +#define TwIdleIdeal 0x0014 +#define TwIdleLast 0x0018 +#define TwPreemptAny 0x001C +#define TwPreemptCurrent 0x0020 +#define TwPreemptLast 0x0024 +#define TwSwitchToIdle 0x0028 + +/* KUSER_SHARED_DATA */ +#define UsTickCountMultiplier 0x00004 +#define UsInterruptTime 0x00008 +#define UsSystemTime 0x00014 +#define UsTimeZoneBias 0x00020 +#define UsImageNumberLow 0x0002C +#define UsImageNumberHigh 0x0002E +#define UsNtSystemRoot 0x00030 +#define UsMaxStackTraceDepth 0x00238 +#define UsCryptoExponent 0x0023C +#define UsTimeZoneId 0x00240 +#define UsLargePageMinimum 0x00244 +#define UsReserved2 0x00248 +#define UsNtProductType 0x00264 +#define UsProductTypeIsValid 0x00268 +#define UsNtMajorVersion 0x0026C +#define UsNtMinorVersion 0x00270 +#define UsProcessorFeatures 0x00274 +#define UsReserved1 0x002B4 +#define UsReserved3 0x002B8 +#define UsTimeSlip 0x002BC +#define UsAlternativeArchitecture 0x002C0 +#define UsSystemExpirationDate 0x002C8 +#define UsSuiteMask 0x002D0 +#define UsKdDebuggerEnabled 0x002D4 +#define UsActiveConsoleId 0x002D8 +#define UsDismountCount 0x002DC +#define UsComPlusPackage 0x002E0 +#define UsLastSystemRITEventTickCount 0x002E4 +#define UsNumberOfPhysicalPages 0x002E8 +#define UsSafeBootMode 0x002EC +#define UsTestRetInstruction 0x002F8 +#define UsSystemCall 0x00300 +#define UsSystemCallReturn 0x00304 +#define UsSystemCallPad 0x00308 +#define UsTickCount 0x00320 +#define UsTickCountQuad 0x00320 +#define UsWow64SharedInformation 0x00340 + +/* KWAIT_BLOCK */ +#define WbWaitListEntry 0x00000 +#define WbThread 0x00010 +#define WbObject 0x00018 +#define WbNextWaitBlock 0x00020 +#define WbWaitKey 0x00028 +#define WbWaitType 0x0002A + +/* Other stuff */ + +/* Thread Object */ +#define EeKernelEventPair 0x00000 +#define EtCid 0x00380 +#define KTHREAD_AUTO_ALIGNMENT_BIT 0x00000 +#define KTHREAD_CYCLE_CHARGE_PENDING_BIT 0x00004 +#define KTHREAD_GUI_THREAD_MASK 0x00100 +#define KTHREAD_CYCLE_CHARGE_PENDING_MASK 0x00010 +#define KI_SLIST_FAULT_COUNT_MAXIMUM 0x00400 +#define DEBUG_ACTIVE_CPU_THROTTLED 0x00020 +#define DEBUG_ACTIVE_CPU_THROTTLED_BIT 0x00005 + +/* Fiber */ +#define FbFiberData 0x00000 +#define FbExceptionList 0x00008 +#define FbStackBase 0x00010 +#define FbStackLimit 0x00018 +#define FbDeallocationStack 0x00020 +#define FbFiberContext 0x00030 +#define FbWx86Tib 0x00500 +#define FbActivationContextStackPointer 0x00508 +#define FbFlsData 0x00510 +#define FbGuaranteedStackBytes 0x00518 +#define FbTebFlags 0x0051C + +/* System Service Descriptor Table */ +#define NUMBER_SERVICE_TABLES 0x00002 +#define SERVICE_NUMBER_MASK 0x00FFF +#define SERVICE_TABLE_SHIFT 0x00007 +#define SERVICE_TABLE_MASK 0x00020 +#define SERVICE_TABLE_TEST 0x00020 +#define ThBase 0x00000 +#define ThLimit 0x00008 +#define SdBase 0x00000 +#define SdCount 0x00008 +#define SdLimit 0x00010 +#define SdNumber 0x00018 +#define SdLength 0x00020 + +/* Hal enlightenment structure definitions */ +#define HeEnlightenments 0x00000 +#define HeHypervisorConnected 0x00004 +#define HeEndOfInterrupt 0x00008 +#define HeApicWriteIcr 0x00010 +#define HeSpinCountMask 0x0001C +#define HeLongSpinWait 0x00020 + +/* Apc Record Structure */ +#define ArNormalRoutine 0x00000 +#define ArNormalContext 0x00008 +#define ArSystemArgument1 0x00010 +#define ArSystemArgument2 0x00018 +#define ApcRecordLength 0x00020 + +/* system IRQL and IDT vector conversion */ +#define MAXIMUM_IDTVECTOR 0x000FF +#define MAXIMUM_PRIMARY_VECTOR 0x000FF +#define PRIMARY_VECTOR_BASE 0x00030 +#define RPL_MASK 0x00003 +#define MODE_BIT 0x00000 +#define MODE_MASK 0x00001 + +/* Legacy Floating Status Bit Masks */ +#define FSW_INVALID_OPERATION 0x00001 +#define FSW_DENORMAL 0x00002 +#define FSW_ZERO_DIVIDE 0x00004 +#define FSW_OVERFLOW 0x00008 +#define FSW_UNDERFLOW 0x00010 +#define FSW_PRECISION 0x00020 +#define FSW_STACK_FAULT 0x00040 +#define FSW_ERROR_SUMMARY 0x00080 +#define FSW_CONDITION_CODE_0 0x00100 +#define FSW_CONDITION_CODE_1 0x00200 +#define FSW_CONDITION_CODE_2 0x00400 +#define FSW_CONDITION_CODE_3 0x04000 +#define FSW_ERROR_MASK 0x0003F + +/* Legacy Floating States */ +#define LEGACY_STATE_UNUSED 0x00000 +#define LEGACY_STATE_SWITCH 0x00001 + +/* MXCSR Floating Control/Status Bit Masks */ +#define XSW_INVALID_OPERATION 0x00001 +#define XSW_DENORMAL 0x00002 +#define XSW_ZERO_DIVIDE 0x00004 +#define XSW_OVERFLOW 0x00008 +#define XSW_UNDERFLOW 0x00010 +#define XSW_PRECISION 0x00020 +#define XSW_ERROR_MASK 0x0003F +#define XSW_ERROR_SHIFT 0x00007 +#define XCW_INVALID_OPERATION 0x00080 +#define XCW_DENORMAL 0x00100 +#define XCW_ZERO_DIVIDE 0x00200 +#define XCW_OVERFLOW 0x00400 +#define XCW_UNDERFLOW 0x00800 +#define XCW_PRECISION 0x01000 +#define XCW_ROUND_CONTROL 0x06000 +#define XCW_FLUSH_ZERO 0x08000 +#define INITIAL_FPCSR 0x0027F +#define INITIAL_MXCSR 0x01F80 + +/* CPU information structure */ +#define CpuEax 0x00000 +#define CpuEbx 0x00004 +#define CpuEcx 0x00008 +#define CpuEdx 0x0000C + +/* Usermode Callout User Frame */ +#define CkBuffer 0x00020 +#define CkLength 0x00028 +#define CkApiNumber 0x0002C +#define CkRsp 0x00048 +#define CkRip 0x00030 +#define CalloutFrameLength 0x00058 + +/* Machine Frame */ +#define MfRip 0x00000 +#define MfSegCs 0x00008 +#define MfEFlags 0x00010 +#define MfRsp 0x00018 +#define MfSegSs 0x00020 +#define MachineFrameLength 0x00028 + +/* DPC Stack Frame */ +#define DpRsp 0x00040 +#define DpRip 0x00028 + +/* Legacy Floating Save Area */ +#define LfControlWord 0x00000 +#define LfStatusWord 0x00002 +#define LfTagWord 0x00004 +#define LfErrorOpcode 0x00006 +#define LfErrorOffset 0x00008 +#define LfErrorSelector 0x0000C +#define LfDataOffset 0x00010 +#define LfDataSelector 0x00014 +#define LfMxCsr 0x00018 +#define LfMxCsr_Mask 0x0001C +#define LfFloatRegisters 0x00020 +#define LEGACY_SAVE_AREA_LENGTH 0x00200 + +/* Kernel Stack Control */ +#define KcCurrentBase 0x00200 +#define KcCurrentLimit 0x00208 +#define KcActualLimit 0x00220 + From 8403dd605f0c73a12257583258305961c660b721 Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Wed, 30 Dec 2009 07:53:02 +0000 Subject: [PATCH 263/286] Add definitions for the x86bios emulator. http://www.geoffchappell.com/viewer.htm?doc=studies/windows/km/hal/api/x86bios/index.htm svn path=/branches/ros-amd64-bringup/; revision=44807 --- reactos/hal/hal/hal.c | 66 +++++++++++++++++++- reactos/hal/hal/hal.rbuild | 1 + reactos/hal/hal/hal_amd64.def | 21 ++++--- reactos/hal/halamd64/generic/generic.rbuild | 2 + reactos/hal/halamd64/generic/misc.c | 9 +++ reactos/hal/halamd64/generic/x86bios.c | 69 +++++++++++++++++++++ reactos/include/ndk/halfuncs.h | 42 +++++++++++++ reactos/include/ndk/haltypes.h | 13 ++++ 8 files changed, 215 insertions(+), 8 deletions(-) create mode 100644 reactos/hal/halamd64/generic/x86bios.c diff --git a/reactos/hal/hal/hal.c b/reactos/hal/hal/hal.c index 27ac324a6e1..8a06fd2c33d 100644 --- a/reactos/hal/hal/hal.c +++ b/reactos/hal/hal/hal.c @@ -172,6 +172,13 @@ HalAllocateCrashDumpRegisters( return NULL; } +VOID +NTAPI +HalBugCheckSystem (PVOID ErrorRecord) +{ + UNIMPLEMENTED; +} + NTSTATUS NTAPI @@ -248,7 +255,7 @@ VOID NTAPI HalEndSystemInterrupt( KIRQL Irql, - ULONG Unknown2) + ULONG Vector) { UNIMPLEMENTED; } @@ -1106,4 +1113,61 @@ HalGetInterruptSource(VOID) return 0; } +#ifdef _X86BIOS_ +NTSTATUS +NTAPI +x86BiosAllocateBuffer ( + ULONG *Size, + USHORT *Segment, + USHORT *Offset) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL;; + +} + +BOOLEAN +NTAPI +x86BiosCall ( + ULONG InterruptNumber, + X86_BIOS_REGISTERS *Registers) +{ + UNIMPLEMENTED; + return FALSE; +} + +NTSTATUS +NTAPI +x86BiosFreeBuffer ( + USHORT Segment, + USHORT Offset) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL;; +} + +NTSTATUS +x86BiosReadMemory ( + USHORT Segment, + USHORT Offset, + PVOID Buffer, + ULONG Size) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL;; +} + +NTSTATUS +NTAPI +x86BiosWriteMemory ( + USHORT Segment, + USHORT Offset, + PVOID Buffer, + ULONG Size) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL;; +} +#endif + /* EOF */ diff --git a/reactos/hal/hal/hal.rbuild b/reactos/hal/hal/hal.rbuild index 965c3ae6f8c..0c2cc65d97c 100644 --- a/reactos/hal/hal/hal.rbuild +++ b/reactos/hal/hal/hal.rbuild @@ -36,6 +36,7 @@ include ntoskrnl + hal.c hal.rc diff --git a/reactos/hal/hal/hal_amd64.def b/reactos/hal/hal/hal_amd64.def index e625c75cf51..dad767e2745 100644 --- a/reactos/hal/hal/hal_amd64.def +++ b/reactos/hal/hal/hal_amd64.def @@ -9,8 +9,9 @@ HalAllProcessorsStarted HalAllocateAdapterChannel HalAllocateCommonBuffer HalAllocateCrashDumpRegisters +;HalAllocateHardwareCounters HalAssignSlotResources -;HalBugCheckSystem +HalBugCheckSystem HalCalibratePerformanceCounter HalClearSoftwareInterrupt ;HalConvertDeviceIdtToIrql @@ -21,6 +22,7 @@ HalDisplayString ;HalEnumerateProcessors HalFlushCommonBuffer HalFreeCommonBuffer +;HalFreeHardwareCounters HalGetAdapter HalGetBusData HalGetBusDataByOffset @@ -28,6 +30,7 @@ HalGetEnvironmentVariable ;HalGetEnvironmentVariableEx ;HalGetInterruptTargetInformation HalGetInterruptVector +;HalGetMemoryCachingRequirements ;HalGetMessageRoutingInfo ;HalGetProcessorIdByNtNumber ;HalGetVectorInput @@ -39,6 +42,8 @@ HalInitSystem HalInitializeProcessor ;HalIsHyperThreadingEnabled HalMakeBeep +;HalMcUpdateReadPCIConfig +;HalPerformEndOfInterrupt HalProcessorIdle HalQueryDisplayParameters ;HalQueryEnvironmentVariableInfoEx @@ -48,6 +53,8 @@ HalReadDmaCounter ;HalRegisterDynamicProcessor ;HalRegisterErrataCallbacks HalReportResourceUsage +;HalRequestClockInterrupt +;HalRequestDeferredRecoveryServiceInterrupt HalRequestIpi HalRequestSoftwareInterrupt HalReturnToFirmware @@ -67,7 +74,7 @@ HalStartProfileInterrupt HalStopProfileInterrupt HalSystemVectorDispatchEntry HalTranslateBusAddress -IoAssignDriveLetters +IoAssignDriveLetters ;not present in win7 IoFlushAdapterBuffers IoFreeAdapterChannel IoFreeMapRegisters @@ -79,8 +86,8 @@ KdComPortInUse DATA KeFlushWriteBuffer KeQueryPerformanceCounter KeStallExecutionProcessor -;x86BiosAllocateBuffer -;x86BiosCall -;x86BiosFreeBuffer -;x86BiosReadMemory -;x86BiosWriteMemory +x86BiosAllocateBuffer +x86BiosCall +x86BiosFreeBuffer +x86BiosReadMemory +x86BiosWriteMemory diff --git a/reactos/hal/halamd64/generic/generic.rbuild b/reactos/hal/halamd64/generic/generic.rbuild index 8898d6e2fbb..4880c41cf9b 100644 --- a/reactos/hal/halamd64/generic/generic.rbuild +++ b/reactos/hal/halamd64/generic/generic.rbuild @@ -6,6 +6,7 @@ include + halinit.c irq.S misc.c @@ -13,6 +14,7 @@ systimer.S usage.c pic.c + x86bios.c ../include/hal.h diff --git a/reactos/hal/halamd64/generic/misc.c b/reactos/hal/halamd64/generic/misc.c index b4b43fc594c..8929e9f9129 100644 --- a/reactos/hal/halamd64/generic/misc.c +++ b/reactos/hal/halamd64/generic/misc.c @@ -96,6 +96,14 @@ HalSystemVectorDispatchEntry(IN ULONG Vector, return FALSE; } +VOID +NTAPI +HalBugCheckSystem (PVOID ErrorRecord) +{ + UNIMPLEMENTED; +} + + /* * @implemented */ @@ -126,3 +134,4 @@ KeQueryPerformanceCounter( Result.QuadPart = __rdtsc(); return Result; } + diff --git a/reactos/hal/halamd64/generic/x86bios.c b/reactos/hal/halamd64/generic/x86bios.c new file mode 100644 index 00000000000..d47ecff47c5 --- /dev/null +++ b/reactos/hal/halamd64/generic/x86bios.c @@ -0,0 +1,69 @@ +/* + * PROJECT: ReactOS HAL + * LICENSE: See COPYING in the top level directory + * FILE: hal/halamd64/generic/x86bios.c + * PURPOSE: + * PROGRAMMERS: + */ + +/* INCLUDES ******************************************************************/ + +#include +//#define NDEBUG +#include + +NTSTATUS +NTAPI +x86BiosAllocateBuffer ( + ULONG *Size, + USHORT *Segment, + USHORT *Offset) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL;; + +} + +BOOLEAN +NTAPI +x86BiosCall ( + ULONG InterruptNumber, + X86_BIOS_REGISTERS *Registers) +{ + UNIMPLEMENTED; + return FALSE; +} + +NTSTATUS +NTAPI +x86BiosFreeBuffer ( + USHORT Segment, + USHORT Offset) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL;; +} + +NTSTATUS +x86BiosReadMemory ( + USHORT Segment, + USHORT Offset, + PVOID Buffer, + ULONG Size) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL;; +} + +NTSTATUS +NTAPI +x86BiosWriteMemory ( + USHORT Segment, + USHORT Offset, + PVOID Buffer, + ULONG Size) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL;; +} + diff --git a/reactos/include/ndk/halfuncs.h b/reactos/include/ndk/halfuncs.h index c4121cc3ddf..6176842e1ef 100644 --- a/reactos/include/ndk/halfuncs.h +++ b/reactos/include/ndk/halfuncs.h @@ -274,5 +274,47 @@ HalSetRealTimeClock( IN PTIME_FIELDS RtcTime ); +// x86 BIOS emulator +#ifdef _X86BIOS_ +NTSTATUS +NTAPI +x86BiosAllocateBuffer ( + ULONG *Size, + USHORT *Segment, + USHORT *Offset +); + +BOOLEAN +NTAPI +x86BiosCall ( + ULONG InterruptNumber, + X86_BIOS_REGISTERS *Registers +); + +NTSTATUS +NTAPI +x86BiosFreeBuffer ( + USHORT Segment, + USHORT Offset +); + +NTSTATUS +x86BiosReadMemory ( + USHORT Segment, + USHORT Offset, + PVOID Buffer, + ULONG Size +); + +NTSTATUS +NTAPI +x86BiosWriteMemory ( + USHORT Segment, + USHORT Offset, + PVOID Buffer, + ULONG Size +); +#endif + #endif #endif diff --git a/reactos/include/ndk/haltypes.h b/reactos/include/ndk/haltypes.h index f7d5e57082a..a902d22c91a 100644 --- a/reactos/include/ndk/haltypes.h +++ b/reactos/include/ndk/haltypes.h @@ -246,6 +246,19 @@ typedef struct _BUS_HANDLER PVOID Spare8; } BUS_HANDLER; +#ifdef _X86BIOS_ +typedef struct _X86_BIOS_REGISTERS { + ULONG Eax; + ULONG Ecx; + ULONG Edx; + ULONG Ebx; + ULONG Ebp; + ULONG Esi; + ULONG Edi; + USHORT SegDs; + USHORT SegEs; +} X86_BIOS_REGISTERS, *PX86_BIOS_REGISTERS; +#endif // // HAL Chip Hacks // From d457242a5d895b89897a6ea1fbabe41d3687bd5a Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 31 Dec 2009 01:56:39 +0000 Subject: [PATCH 264/286] - mciGetCreatorTask returns HTASK not HANDLE - remove broken LargeInteger functions from wintrnl.h svn path=/branches/ros-amd64-bringup/; revision=44818 --- reactos/include/psdk/mmsystem.h | 2 +- reactos/include/psdk/winternl.h | 10 ---------- 2 files changed, 1 insertion(+), 11 deletions(-) diff --git a/reactos/include/psdk/mmsystem.h b/reactos/include/psdk/mmsystem.h index b8085c8cf4c..a979ed04161 100644 --- a/reactos/include/psdk/mmsystem.h +++ b/reactos/include/psdk/mmsystem.h @@ -1886,7 +1886,7 @@ MCIDEVICEID WINAPI mciGetDeviceIDFromElementIDW(DWORD,LPCWSTR); BOOL WINAPI mciGetErrorStringA(MCIERROR,LPSTR,UINT); BOOL WINAPI mciGetErrorStringW(MCIERROR,LPWSTR,UINT); BOOL WINAPI mciSetYieldProc(MCIDEVICEID,YIELDPROC,DWORD); -HANDLE WINAPI mciGetCreatorTask(MCIDEVICEID); +HTASK WINAPI mciGetCreatorTask(MCIDEVICEID); YIELDPROC WINAPI mciGetYieldProc(MCIDEVICEID,PDWORD); #ifdef _WINE diff --git a/reactos/include/psdk/winternl.h b/reactos/include/psdk/winternl.h index b403f971c58..1464c6e17af 100644 --- a/reactos/include/psdk/winternl.h +++ b/reactos/include/psdk/winternl.h @@ -2126,15 +2126,6 @@ BOOLEAN WINAPI RtlIsTextUnicode(LPCVOID,INT,INT *); BOOLEAN WINAPI RtlIsValidHandle(const RTL_HANDLE_TABLE *, const RTL_HANDLE *); BOOLEAN WINAPI RtlIsValidIndexHandle(const RTL_HANDLE_TABLE *, ULONG Index, RTL_HANDLE **); -#ifdef _M_AMD64 -#define RtlLargeIntegerAdd(x1, x2) ((x1)+(x2)) -#define RtlLargeIntegerArithmeticShift(x, s) ((x) >> (s)) -//#define RtlLargeIntegerDivide(a,b,c,d) -#define RtlLargeIntegerNegate(x) (-(x)) -#define RtlLargeIntegerShiftLeft(x, s) ((x)<<(s)) -#define RtlLargeIntegerShiftRight(x, s) ((x)>>(s)) -#define RtlLargeIntegerSubtract(x1, x2) ((x1)-(x2)) -#else LONGLONG WINAPI RtlLargeIntegerAdd(LONGLONG,LONGLONG); LONGLONG WINAPI RtlLargeIntegerArithmeticShift(LONGLONG,INT); ULONGLONG WINAPI RtlLargeIntegerDivide( ULONGLONG,ULONGLONG,ULONGLONG *); @@ -2142,7 +2133,6 @@ LONGLONG WINAPI RtlLargeIntegerNegate(LONGLONG); LONGLONG WINAPI RtlLargeIntegerShiftLeft(LONGLONG,INT); LONGLONG WINAPI RtlLargeIntegerShiftRight(LONGLONG,INT); LONGLONG WINAPI RtlLargeIntegerSubtract(LONGLONG,LONGLONG); -#endif NTSTATUS WINAPI RtlLargeIntegerToChar(const ULONGLONG *,ULONG,ULONG,PCHAR); NTSTATUS WINAPI RtlLeaveCriticalSection(RTL_CRITICAL_SECTION *); DWORD WINAPI RtlLengthRequiredSid(DWORD); From 534bb7e9662c316d1b4daf27a77bb1ce5010a25c Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Thu, 31 Dec 2009 07:26:46 +0000 Subject: [PATCH 265/286] Fix build after r44818 svn path=/branches/ros-amd64-bringup/; revision=44820 --- reactos/dll/win32/winmm/mci.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/reactos/dll/win32/winmm/mci.c b/reactos/dll/win32/winmm/mci.c index 40ab39a0f22..4ec6e4f15e0 100644 --- a/reactos/dll/win32/winmm/mci.c +++ b/reactos/dll/win32/winmm/mci.c @@ -2249,12 +2249,12 @@ YIELDPROC WINAPI mciGetYieldProc(MCIDEVICEID uDeviceID, DWORD* lpdwYieldData) /************************************************************************** * mciGetCreatorTask [WINMM.@] */ -HANDLE WINAPI mciGetCreatorTask(MCIDEVICEID uDeviceID) +HTASK WINAPI mciGetCreatorTask(MCIDEVICEID uDeviceID) { LPWINE_MCIDRIVER wmd; - HANDLE ret = 0; + HTASK ret = 0; - if ((wmd = MCI_GetDriver(uDeviceID))) ret = wmd->CreatorThread; + if ((wmd = MCI_GetDriver(uDeviceID))) ret = (HTASK)wmd->CreatorThread; TRACE("(%u) => %p\n", uDeviceID, ret); return ret; From aebe86c1091ceb4caad7b12d0962668efccedc93 Mon Sep 17 00:00:00 2001 From: Samuel Serapion Date: Thu, 31 Dec 2009 07:42:39 +0000 Subject: [PATCH 266/286] Fix Property USERMODE on x86 svn path=/branches/ros-amd64-bringup/; revision=44821 --- reactos/ReactOS-i386.rbuild | 15 +++++++++------ reactos/subsystems/subsystems.rbuild | 13 ++++++++----- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/reactos/ReactOS-i386.rbuild b/reactos/ReactOS-i386.rbuild index 897fadbfa2e..59f428471f4 100644 --- a/reactos/ReactOS-i386.rbuild +++ b/reactos/ReactOS-i386.rbuild @@ -36,15 +36,18 @@ -section-alignment=0x1000 - - - + + + + + + + + + - - - diff --git a/reactos/subsystems/subsystems.rbuild b/reactos/subsystems/subsystems.rbuild index 07933c920eb..64e61fe0712 100644 --- a/reactos/subsystems/subsystems.rbuild +++ b/reactos/subsystems/subsystems.rbuild @@ -1,11 +1,14 @@ - - - - - + + + + + + + + From 2a7cba77ee8ee63270b97af16183e7ec63b57295 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 31 Dec 2009 14:29:50 +0000 Subject: [PATCH 267/286] [HAL] - Implement architecture specific HalpSetInterruptGate, replacing SetInterruptGate svn path=/branches/ros-amd64-bringup/; revision=44823 --- reactos/hal/halamd64/generic/misc.c | 34 +++++++++++++++++++++ reactos/hal/halx86/generic/misc.c | 22 ++++++++++++++ reactos/hal/halx86/include/halp.h | 4 +++ reactos/hal/halx86/mp/apic.c | 46 +++-------------------------- 4 files changed, 64 insertions(+), 42 deletions(-) diff --git a/reactos/hal/halamd64/generic/misc.c b/reactos/hal/halamd64/generic/misc.c index 8929e9f9129..a591c14f803 100644 --- a/reactos/hal/halamd64/generic/misc.c +++ b/reactos/hal/halamd64/generic/misc.c @@ -46,6 +46,40 @@ HalpUnmapVirtualAddress(IN PVOID VirtualAddress, MmUnmapIoSpace(VirtualAddress, NumberPages << PAGE_SHIFT); } +VOID +NTAPI +HalpInitIdtEntry(PKIDTENTRY64 Idt, PVOID Address) +{ + Idt->OffsetLow = (ULONG_PTR)Address & 0xffff; + Idt->OffsetMiddle = ((ULONG_PTR)Address >> 16) & 0xffff; + Idt->OffsetHigh = (ULONG_PTR)Address >> 32; + Idt->Selector = KGDT_64_R0_CODE; + Idt->IstIndex = 0; + Idt->Type = 0x0e; + Idt->Dpl = 0; + Idt->Present = 1; + Idt->Reserved0 = 0; + Idt->Reserved1 = 0; +} + +VOID +NTAPI +HalpSetInterruptGate(ULONG Index, PVOID Address) +{ + ULONG_PTR Flags; + + /* Disable interupts */ + Flags = __readeflags(); + _disable(); + + /* Initialize the entry */ + HalpInitIdtEntry(&KeGetPcr()->IdtBase[Index], Address); + + /* Enable interrupts if they were enabled previously */ + __writeeflags(Flags); +} + + /* FUNCTIONS *****************************************************************/ /* diff --git a/reactos/hal/halx86/generic/misc.c b/reactos/hal/halx86/generic/misc.c index d8710c8bf5c..ca6af7129f6 100644 --- a/reactos/hal/halx86/generic/misc.c +++ b/reactos/hal/halx86/generic/misc.c @@ -43,6 +43,27 @@ HalpUnmapVirtualAddress(IN PVOID VirtualAddress, MmUnmapIoSpace(VirtualAddress, NumberPages << PAGE_SHIFT); } +VOID +NTAPI +HalpSetInterruptGate(ULONG Index, PVOID address) +{ + KIDTENTRY *idt; + KIDT_ACCESS Access; + + /* Set the IDT Access Bits */ + Access.Reserved = 0; + Access.Present = 1; + Access.Dpl = 0; /* Kernel-Mode */ + Access.SystemSegmentFlag = 0; + Access.SegmentType = I386_INTERRUPT_GATE; + + idt = (KIDTENTRY*)((ULONG)KeGetPcr()->IDT + index * sizeof(KIDTENTRY)); + idt->Offset = (USHORT)((ULONG_PTR)address & 0xffff); + idt->Selector = KGDT_R0_CODE; + idt->Access = Access.Value; + idt->ExtendedOffset = (USHORT)((ULONG_PTR)address >> 16); +} + /* FUNCTIONS *****************************************************************/ /* @@ -103,3 +124,4 @@ KeFlushWriteBuffer(VOID) /* Not implemented on x86 */ return; } + diff --git a/reactos/hal/halx86/include/halp.h b/reactos/hal/halx86/include/halp.h index 198842a648c..cd6a7c0d447 100644 --- a/reactos/hal/halx86/include/halp.h +++ b/reactos/hal/halx86/include/halp.h @@ -235,6 +235,10 @@ HalpReleaseCmosSpinLock( VOID ); +VOID +NTAPI +HalpSetInterruptGate(ULONG Index, PVOID Address); + #ifdef _M_AMD64 #define KfLowerIrql KeLowerIrql #ifndef CONFIG_SMP diff --git a/reactos/hal/halx86/mp/apic.c b/reactos/hal/halx86/mp/apic.c index cb6de82f0f8..11bec8d17e0 100644 --- a/reactos/hal/halx86/mp/apic.c +++ b/reactos/hal/halx86/mp/apic.c @@ -848,44 +848,6 @@ APICCalibrateTimer(ULONG CPU) CPUMap[CPU].BusSpeed%1000000); } -VOID -SetInterruptGate(ULONG index, ULONG_PTR address) -{ -#ifdef _M_AMD64 - KIDTENTRY64 *idt; - - idt = &KeGetPcr()->IdtBase[index]; - - idt->OffsetLow = address & 0xffff; - idt->Selector = KGDT_64_R0_CODE; - idt->IstIndex = 0; - idt->Reserved0 = 0; - idt->Type = 0x0e; - idt->Dpl = 0; - idt->Present = 1; - idt->OffsetMiddle = (address >> 16) & 0xffff; - idt->OffsetHigh = address >> 32; - idt->Reserved1 = 0; - idt->Alignment = 0; -#else - KIDTENTRY *idt; - KIDT_ACCESS Access; - - /* Set the IDT Access Bits */ - Access.Reserved = 0; - Access.Present = 1; - Access.Dpl = 0; /* Kernel-Mode */ - Access.SystemSegmentFlag = 0; - Access.SegmentType = I386_INTERRUPT_GATE; - - idt = (KIDTENTRY*)((ULONG)KeGetPcr()->IDT + index * sizeof(KIDTENTRY)); - idt->Offset = (USHORT)(address & 0xffff); - idt->Selector = KGDT_R0_CODE; - idt->Access = Access.Value; - idt->ExtendedOffset = (USHORT)(address >> 16); -#endif -} - VOID HaliInitBSP(VOID) { #ifdef CONFIG_SMP @@ -904,11 +866,11 @@ VOID HaliInitBSP(VOID) BSPInitialized = TRUE; /* Setup interrupt handlers */ - SetInterruptGate(LOCAL_TIMER_VECTOR, (ULONG_PTR)MpsTimerInterrupt); - SetInterruptGate(ERROR_VECTOR, (ULONG_PTR)MpsErrorInterrupt); - SetInterruptGate(SPURIOUS_VECTOR, (ULONG_PTR)MpsSpuriousInterrupt); + HalpSetInterruptGate(LOCAL_TIMER_VECTOR, MpsTimerInterrupt); + HalpSetInterruptGate(ERROR_VECTOR, MpsErrorInterrupt); + HalpSetInterruptGate(SPURIOUS_VECTOR, MpsSpuriousInterrupt); #ifdef CONFIG_SMP - SetInterruptGate(IPI_VECTOR, (ULONG_PTR)MpsIpiInterrupt); + HalpSetInterruptGate(IPI_VECTOR, MpsIpiInterrupt); #endif DPRINT1("APIC is mapped at 0x%p\n", (PVOID)APICBase); From 3d53481c234176a03cefd46e3b176cde3841142d Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 31 Dec 2009 14:57:24 +0000 Subject: [PATCH 268/286] [HAL] - Move i386 specific code into i386 folder - Move up specific code into up folder svn path=/branches/ros-amd64-bringup/; revision=44825 --- reactos/hal/halx86/generic/{ => i386}/portio.c | 0 reactos/hal/halx86/generic/{ => i386}/systimer.S | 0 reactos/hal/halx86/generic/{ => i386}/v86.s | 0 reactos/hal/halx86/hal_generic.rbuild | 10 +++++++--- reactos/hal/halx86/hal_generic_up.rbuild | 2 +- reactos/hal/halx86/{generic => up}/irq.S | 0 reactos/hal/halx86/{generic => up}/processor.c | 0 reactos/hal/halx86/{generic => up}/spinlock.c | 0 8 files changed, 8 insertions(+), 4 deletions(-) rename reactos/hal/halx86/generic/{ => i386}/portio.c (100%) rename reactos/hal/halx86/generic/{ => i386}/systimer.S (100%) rename reactos/hal/halx86/generic/{ => i386}/v86.s (100%) rename reactos/hal/halx86/{generic => up}/irq.S (100%) rename reactos/hal/halx86/{generic => up}/processor.c (100%) rename reactos/hal/halx86/{generic => up}/spinlock.c (100%) diff --git a/reactos/hal/halx86/generic/portio.c b/reactos/hal/halx86/generic/i386/portio.c similarity index 100% rename from reactos/hal/halx86/generic/portio.c rename to reactos/hal/halx86/generic/i386/portio.c diff --git a/reactos/hal/halx86/generic/systimer.S b/reactos/hal/halx86/generic/i386/systimer.S similarity index 100% rename from reactos/hal/halx86/generic/systimer.S rename to reactos/hal/halx86/generic/i386/systimer.S diff --git a/reactos/hal/halx86/generic/v86.s b/reactos/hal/halx86/generic/i386/v86.s similarity index 100% rename from reactos/hal/halx86/generic/v86.s rename to reactos/hal/halx86/generic/i386/v86.s diff --git a/reactos/hal/halx86/hal_generic.rbuild b/reactos/hal/halx86/hal_generic.rbuild index 95b1b44c1da..294a11c13c6 100644 --- a/reactos/hal/halx86/hal_generic.rbuild +++ b/reactos/hal/halx86/hal_generic.rbuild @@ -21,14 +21,18 @@ display.c halinit.c misc.c - portio.c profil.c reboot.c sysinfo.c - systimer.S timer.c usage.c - v86.s + + + portio.c + systimer.S + v86.s + + hal.h diff --git a/reactos/hal/halx86/hal_generic_up.rbuild b/reactos/hal/halx86/hal_generic_up.rbuild index 11fb20e4a18..1823da20c25 100644 --- a/reactos/hal/halx86/hal_generic_up.rbuild +++ b/reactos/hal/halx86/hal_generic_up.rbuild @@ -5,7 +5,7 @@ include include - + irq.S processor.c spinlock.c diff --git a/reactos/hal/halx86/generic/irq.S b/reactos/hal/halx86/up/irq.S similarity index 100% rename from reactos/hal/halx86/generic/irq.S rename to reactos/hal/halx86/up/irq.S diff --git a/reactos/hal/halx86/generic/processor.c b/reactos/hal/halx86/up/processor.c similarity index 100% rename from reactos/hal/halx86/generic/processor.c rename to reactos/hal/halx86/up/processor.c diff --git a/reactos/hal/halx86/generic/spinlock.c b/reactos/hal/halx86/up/spinlock.c similarity index 100% rename from reactos/hal/halx86/generic/spinlock.c rename to reactos/hal/halx86/up/spinlock.c From 7e2711ef2a6efc538a1dfa3d98d35dd436fc7bfa Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 31 Dec 2009 15:12:16 +0000 Subject: [PATCH 269/286] fix a typo svn path=/branches/ros-amd64-bringup/; revision=44826 --- reactos/hal/halx86/generic/misc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/hal/halx86/generic/misc.c b/reactos/hal/halx86/generic/misc.c index ca6af7129f6..2f884f2c885 100644 --- a/reactos/hal/halx86/generic/misc.c +++ b/reactos/hal/halx86/generic/misc.c @@ -45,7 +45,7 @@ HalpUnmapVirtualAddress(IN PVOID VirtualAddress, VOID NTAPI -HalpSetInterruptGate(ULONG Index, PVOID address) +HalpSetInterruptGate(ULONG index, PVOID address) { KIDTENTRY *idt; KIDT_ACCESS Access; From 216f7788ebbe54701f2ec23cf2cb2626aeece18c Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 31 Dec 2009 15:19:17 +0000 Subject: [PATCH 270/286] [HAL] - Raname each architecture's default hal (halup) to "hal" (Windows does that, too) and get rid of the duplicated stub hal. svn path=/branches/ros-amd64-bringup/; revision=44827 --- reactos/hal/{hal => }/hal.pspec | 0 reactos/hal/hal.rbuild | 3 - reactos/hal/hal/hal.c | 1173 ------------------- reactos/hal/hal/hal.rbuild | 44 - reactos/hal/hal/hal.rc | 5 - reactos/hal/hal/hal_i386.def | 98 -- reactos/hal/{hal => halamd64}/hal_amd64.def | 0 reactos/hal/halamd64/up/halup.rbuild | 6 +- reactos/hal/halarm/up/halup.rbuild | 4 +- reactos/hal/halppc/up/halup.rbuild | 4 +- reactos/hal/halx86/halmp.rbuild | 2 +- reactos/hal/halx86/halup.rbuild | 4 +- reactos/hal/halx86/halxbox.rbuild | 2 +- 13 files changed, 11 insertions(+), 1334 deletions(-) rename reactos/hal/{hal => }/hal.pspec (100%) delete mode 100644 reactos/hal/hal/hal.c delete mode 100644 reactos/hal/hal/hal.rbuild delete mode 100644 reactos/hal/hal/hal.rc delete mode 100644 reactos/hal/hal/hal_i386.def rename reactos/hal/{hal => halamd64}/hal_amd64.def (100%) diff --git a/reactos/hal/hal/hal.pspec b/reactos/hal/hal.pspec similarity index 100% rename from reactos/hal/hal/hal.pspec rename to reactos/hal/hal.pspec diff --git a/reactos/hal/hal.rbuild b/reactos/hal/hal.rbuild index 98d50f0dcf8..1ea85734b32 100644 --- a/reactos/hal/hal.rbuild +++ b/reactos/hal/hal.rbuild @@ -1,9 +1,6 @@ - - - diff --git a/reactos/hal/hal/hal.c b/reactos/hal/hal/hal.c deleted file mode 100644 index 8a06fd2c33d..00000000000 --- a/reactos/hal/hal/hal.c +++ /dev/null @@ -1,1173 +0,0 @@ -/* - * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS kernel - * FILE: hal/hal.c - * PURPOSE: Hardware Abstraction Layer DLL - * PROGRAMMER: Casper S. Hornstrup (chorns@users.sourceforge.net) - * REVISION HISTORY: - * 01-08-2001 CSH Created - */ - -/* INCLUDES ******************************************************************/ - -#include -#include -#include -#include -#include -#include -#include - -#define NDEBUG -#include - -#undef ExAcquireFastMutex -#undef ExReleaseFastMutex -#undef ExTryToAcquireFastMutex - -/* DATA **********************************************************************/ - -PUCHAR KdComPortInUse; - -/* FUNCTIONS *****************************************************************/ - -NTSTATUS -NTAPI -DriverEntry( - PDRIVER_OBJECT DriverObject, - PUNICODE_STRING RegistryPath) -{ - UNIMPLEMENTED; - - return STATUS_SUCCESS; -} - -/* -* @unimplemented -*/ -VOID -NTAPI -HalStopProfileInterrupt(IN KPROFILE_SOURCE ProfileSource) -{ - ASSERT(FALSE); - return; -} - -/* -* @unimplemented -*/ -VOID -NTAPI -HalStartProfileInterrupt(IN KPROFILE_SOURCE ProfileSource) -{ - ASSERT(FALSE); - return; -} - -/* -* @unimplemented -*/ -ULONG_PTR -NTAPI -HalSetProfileInterval(IN ULONG_PTR Interval) -{ - ASSERT(FALSE); - return Interval; -} - -#ifndef _M_AMD64 -VOID -FASTCALL -ExAcquireFastMutex( - PFAST_MUTEX FastMutex) -{ - UNIMPLEMENTED; -} - - -VOID -FASTCALL -ExReleaseFastMutex( - PFAST_MUTEX FastMutex) -{ - UNIMPLEMENTED; -} - - -BOOLEAN FASTCALL -ExTryToAcquireFastMutex( - PFAST_MUTEX FastMutex) -{ - UNIMPLEMENTED; - - return TRUE; -} -#endif - -VOID -NTAPI -HalAcquireDisplayOwnership( - PHAL_RESET_DISPLAY_PARAMETERS ResetDisplayParameters) -{ - UNIMPLEMENTED; -} - - -NTSTATUS -NTAPI -HalAdjustResourceList( - PCM_RESOURCE_LIST Resources) -{ - UNIMPLEMENTED; - - return STATUS_SUCCESS; -} - - -BOOLEAN -NTAPI -HalAllProcessorsStarted(VOID) -{ - UNIMPLEMENTED; - - return TRUE; -} - - -NTSTATUS -NTAPI -HalAllocateAdapterChannel( - PADAPTER_OBJECT AdapterObject, - PWAIT_CONTEXT_BLOCK WaitContextBlock, - ULONG NumberOfMapRegisters, - PDRIVER_CONTROL ExecutionRoutine) -{ - UNIMPLEMENTED; - - return STATUS_SUCCESS; -} - - -PVOID -NTAPI -HalAllocateCommonBuffer( - PADAPTER_OBJECT AdapterObject, - ULONG Length, - PPHYSICAL_ADDRESS LogicalAddress, - BOOLEAN CacheEnabled) -{ - UNIMPLEMENTED; - - return NULL; -} - - -PVOID -NTAPI -HalAllocateCrashDumpRegisters( - PADAPTER_OBJECT AdapterObject, - PULONG NumberOfMapRegisters) -{ - UNIMPLEMENTED; - return NULL; -} - -VOID -NTAPI -HalBugCheckSystem (PVOID ErrorRecord) -{ - UNIMPLEMENTED; -} - - -NTSTATUS -NTAPI -HalAssignSlotResources( - PUNICODE_STRING RegistryPath, - PUNICODE_STRING DriverClassName, - PDRIVER_OBJECT DriverObject, - PDEVICE_OBJECT DeviceObject, - INTERFACE_TYPE BusType, - ULONG BusNumber, - ULONG SlotNumber, - PCM_RESOURCE_LIST *AllocatedResources) -{ - UNIMPLEMENTED; - - return TRUE; -} - - -BOOLEAN -NTAPI -HalBeginSystemInterrupt (KIRQL Irql, - ULONG Vector, - PKIRQL OldIrql) -{ - UNIMPLEMENTED; - - return TRUE; -} - - -VOID -NTAPI -HalCalibratePerformanceCounter( - volatile LONG *Count, - ULONGLONG NewCount) -{ - UNIMPLEMENTED; -} - - -VOID -NTAPI -HalDisableSystemInterrupt(ULONG Vector, - KIRQL Irql) -{ - UNIMPLEMENTED; -} - - -VOID -NTAPI -HalDisplayString( - PCH String) -{ - UNIMPLEMENTED; -} - - -BOOLEAN -NTAPI -HalEnableSystemInterrupt( - ULONG Vector, - KIRQL Irql, - KINTERRUPT_MODE InterruptMode) -{ - UNIMPLEMENTED; - - return TRUE; -} - - -VOID -NTAPI -HalEndSystemInterrupt( - KIRQL Irql, - ULONG Vector) -{ - UNIMPLEMENTED; -} - - -BOOLEAN -NTAPI -HalFlushCommonBuffer( - ULONG Unknown1, - ULONG Unknown2, - ULONG Unknown3, - ULONG Unknown4, - ULONG Unknown5) -{ - UNIMPLEMENTED; - - return TRUE; -} - - -VOID -NTAPI -HalFreeCommonBuffer( - PADAPTER_OBJECT AdapterObject, - ULONG Length, - PHYSICAL_ADDRESS LogicalAddress, - PVOID VirtualAddress, - BOOLEAN CacheEnabled) -{ - UNIMPLEMENTED; -} - - -PADAPTER_OBJECT -NTAPI -HalGetAdapter( - PDEVICE_DESCRIPTION DeviceDescription, - PULONG NumberOfMapRegisters) -{ - UNIMPLEMENTED; - - return (PADAPTER_OBJECT)NULL; -} - - -ULONG -NTAPI -HalGetBusData( - BUS_DATA_TYPE BusDataType, - ULONG BusNumber, - ULONG SlotNumber, - PVOID Buffer, - ULONG Length) -{ - UNIMPLEMENTED; - - return 0; -} - - -ULONG -NTAPI -HalGetBusDataByOffset( - BUS_DATA_TYPE BusDataType, - ULONG BusNumber, - ULONG SlotNumber, - PVOID Buffer, - ULONG Offset, - ULONG Length) -{ - UNIMPLEMENTED; - - return 0; -} - - -ARC_STATUS -NTAPI -HalGetEnvironmentVariable( - PCH Name, - USHORT ValueLength, - PCH Value) -{ - UNIMPLEMENTED; - - return ENOENT; -} - - -ULONG -NTAPI -HalGetInterruptVector( - INTERFACE_TYPE InterfaceType, - ULONG BusNumber, - ULONG BusInterruptLevel, - ULONG BusInterruptVector, - PKIRQL Irql, - PKAFFINITY Affinity) -{ - UNIMPLEMENTED; - - return 0; -} - - -VOID -NTAPI -HalHandleNMI( - PVOID NmiData) -{ - UNIMPLEMENTED; -} - - -BOOLEAN -NTAPI -HalInitSystem( - ULONG BootPhase, - PLOADER_PARAMETER_BLOCK LoaderBlock) -{ - UNIMPLEMENTED; - - return TRUE; -} - - -VOID -NTAPI -HalInitializeProcessor(ULONG ProcessorNumber, - PLOADER_PARAMETER_BLOCK LoaderBlock) -{ - UNIMPLEMENTED; -} - - -BOOLEAN -NTAPI -HalMakeBeep( - ULONG Frequency) -{ - UNIMPLEMENTED; - - return TRUE; -} - - -VOID -NTAPI -HalProcessorIdle(VOID) -{ - UNIMPLEMENTED; -} - - -BOOLEAN -NTAPI -HalQueryDisplayOwnership(VOID) -{ - UNIMPLEMENTED; - - return FALSE; -} - - -VOID -NTAPI -HalQueryDisplayParameters( - OUT PULONG DispSizeX, - OUT PULONG DispSizeY, - OUT PULONG CursorPosX, - OUT PULONG CursorPosY) -{ - UNIMPLEMENTED; -} - - -BOOLEAN -NTAPI -HalQueryRealTimeClock( - PTIME_FIELDS Time) -{ - UNIMPLEMENTED; - return FALSE; -} - - -ULONG -NTAPI -HalReadDmaCounter( - PADAPTER_OBJECT AdapterObject) -{ - UNIMPLEMENTED; - - return 0; -} - - -VOID -NTAPI -HalReleaseDisplayOwnership(VOID) -{ - UNIMPLEMENTED; -} - -VOID -NTAPI -HalReportResourceUsage(VOID) -{ - UNIMPLEMENTED; -} - - -VOID -NTAPI -HalRequestIpi( - KAFFINITY TargetSet) -{ - UNIMPLEMENTED; -} - - -VOID -FASTCALL -HalRequestSoftwareInterrupt( - KIRQL Request) -{ - UNIMPLEMENTED; -} - -VOID FASTCALL -HalClearSoftwareInterrupt( - IN KIRQL Request) -{ - UNIMPLEMENTED; -} - - -VOID -NTAPI -HalReturnToFirmware( - FIRMWARE_REENTRY Action) -{ - UNIMPLEMENTED; -} - - -ULONG -NTAPI -HalSetBusData( - BUS_DATA_TYPE BusDataType, - ULONG BusNumber, - ULONG SlotNumber, - PVOID Buffer, - ULONG Length) -{ - UNIMPLEMENTED; - - return 0; -} - - -ULONG -NTAPI -HalSetBusDataByOffset( - BUS_DATA_TYPE BusDataType, - ULONG BusNumber, - ULONG SlotNumber, - PVOID Buffer, - ULONG Offset, - ULONG Length) -{ - UNIMPLEMENTED; - - return 0; -} - - -VOID -NTAPI -HalSetDisplayParameters( - ULONG CursorPosX, - ULONG CursorPosY) -{ - UNIMPLEMENTED; -} - - -ARC_STATUS -NTAPI -HalSetEnvironmentVariable( - PCH Name, - PCH Value) -{ - UNIMPLEMENTED; - - return ESUCCESS; -} - - -BOOLEAN -NTAPI -HalSetRealTimeClock( - PTIME_FIELDS Time) -{ - UNIMPLEMENTED; - - return TRUE; -} - - -ULONG -NTAPI -HalSetTimeIncrement( - ULONG Increment) -{ - UNIMPLEMENTED; - - return Increment; -} - - -BOOLEAN -NTAPI -HalStartNextProcessor(IN PLOADER_PARAMETER_BLOCK LoaderBlock, - IN PKPROCESSOR_STATE ProcessorState) -{ - UNIMPLEMENTED; - - return TRUE; -} - - -UCHAR -FASTCALL -HalSystemVectorDispatchEntry(IN ULONG Vector, - OUT PKINTERRUPT_ROUTINE **FlatDispatch, - OUT PKINTERRUPT_ROUTINE *NoConnection) -{ - UNIMPLEMENTED; - return 0; -} - - -BOOLEAN -NTAPI -HalTranslateBusAddress( - INTERFACE_TYPE InterfaceType, - ULONG BusNumber, - PHYSICAL_ADDRESS BusAddress, - PULONG AddressSpace, - PPHYSICAL_ADDRESS TranslatedAddress) -{ - UNIMPLEMENTED; - - return TRUE; -} - -#ifndef _M_ARM -VOID -NTAPI -HalpAssignDriveLetters(IN struct _LOADER_PARAMETER_BLOCK *LoaderBlock, - IN PSTRING NtDeviceName, - OUT PUCHAR NtSystemPath, - OUT PSTRING NtSystemPathString) -{ - /* Call the kernel */ - IoAssignDriveLetters(LoaderBlock, - NtDeviceName, - NtSystemPath, - NtSystemPathString); -} - -NTSTATUS -NTAPI -HalpReadPartitionTable(IN PDEVICE_OBJECT DeviceObject, - IN ULONG SectorSize, - IN BOOLEAN ReturnRecognizedPartitions, - IN OUT PDRIVE_LAYOUT_INFORMATION *PartitionBuffer) -{ - /* Call the kernel */ - return IoReadPartitionTable(DeviceObject, - SectorSize, - ReturnRecognizedPartitions, - PartitionBuffer); -} - -NTSTATUS -NTAPI -HalpWritePartitionTable(IN PDEVICE_OBJECT DeviceObject, - IN ULONG SectorSize, - IN ULONG SectorsPerTrack, - IN ULONG NumberOfHeads, - IN PDRIVE_LAYOUT_INFORMATION PartitionBuffer) -{ - /* Call the kernel */ - return IoWritePartitionTable(DeviceObject, - SectorSize, - SectorsPerTrack, - NumberOfHeads, - PartitionBuffer); -} - -NTSTATUS -NTAPI -HalpSetPartitionInformation(IN PDEVICE_OBJECT DeviceObject, - IN ULONG SectorSize, - IN ULONG PartitionNumber, - IN ULONG PartitionType) -{ - /* Call the kernel */ - return IoSetPartitionInformation(DeviceObject, - SectorSize, - PartitionNumber, - PartitionType); -} -#endif - -BOOLEAN -NTAPI -IoFlushAdapterBuffers( - PADAPTER_OBJECT AdapterObject, - PMDL Mdl, - PVOID MapRegisterBase, - PVOID CurrentVa, - ULONG Length, - BOOLEAN WriteToDevice) -{ - UNIMPLEMENTED; - - return TRUE; -} - - -VOID -NTAPI -IoFreeAdapterChannel( - PADAPTER_OBJECT AdapterObject) -{ - UNIMPLEMENTED; -} - - -VOID -NTAPI -IoFreeMapRegisters( - PADAPTER_OBJECT AdapterObject, - PVOID MapRegisterBase, - ULONG NumberOfMapRegisters) -{ - UNIMPLEMENTED; -} - - -PHYSICAL_ADDRESS -NTAPI -IoMapTransfer( - PADAPTER_OBJECT AdapterObject, - PMDL Mdl, - PVOID MapRegisterBase, - PVOID CurrentVa, - PULONG Length, - BOOLEAN WriteToDevice) -{ - PHYSICAL_ADDRESS Address; - - UNIMPLEMENTED; - - Address.QuadPart = 0; - - return Address; -} - - -#undef KeAcquireSpinLock -VOID -NTAPI -KeAcquireSpinLock( - PKSPIN_LOCK SpinLock, - PKIRQL OldIrql) -{ - UNIMPLEMENTED; -} - - -KIRQL -FASTCALL -KeAcquireSpinLockRaiseToSynch( - PKSPIN_LOCK SpinLock) -{ - UNIMPLEMENTED; - - return 0; -} - -#ifndef _M_AMD64 -VOID -FASTCALL -KeAcquireInStackQueuedSpinLock( - IN PKSPIN_LOCK SpinLock, - IN PKLOCK_QUEUE_HANDLE LockHandle - ) -{ - UNIMPLEMENTED; -} - -VOID -FASTCALL -KeAcquireInStackQueuedSpinLockRaiseToSynch( - IN PKSPIN_LOCK SpinLock, - IN PKLOCK_QUEUE_HANDLE LockHandle - ) -{ - UNIMPLEMENTED; -} - -VOID -FASTCALL -KeReleaseInStackQueuedSpinLock( - IN PKLOCK_QUEUE_HANDLE LockHandle - ) -{ - UNIMPLEMENTED; -} -#endif - -VOID -NTAPI -KeFlushWriteBuffer(VOID) -{ - UNIMPLEMENTED; -} - -#ifndef _M_AMD64 -#undef KeGetCurrentIrql -KIRQL -NTAPI -KeGetCurrentIrql(VOID) -{ - UNIMPLEMENTED; - - return (KIRQL)0; -} - -#undef KeLowerIrql -VOID -NTAPI -KeLowerIrql( - KIRQL NewIrql) -{ - UNIMPLEMENTED; -} -#endif - - -LARGE_INTEGER -NTAPI -KeQueryPerformanceCounter( - PLARGE_INTEGER PerformanceFreq) -{ - LARGE_INTEGER Value; - - UNIMPLEMENTED; - - Value.QuadPart = 0; - - return Value; -} - -#ifndef _M_AMD64 -#undef KeRaiseIrql -VOID -NTAPI -KeRaiseIrql( - KIRQL NewIrql, - PKIRQL OldIrql) -{ - UNIMPLEMENTED; -} - - -KIRQL -NTAPI -KeRaiseIrqlToDpcLevel(VOID) -{ - UNIMPLEMENTED; - - return (KIRQL)0; -} - - -KIRQL -NTAPI -KeRaiseIrqlToSynchLevel(VOID) -{ - UNIMPLEMENTED; - - return (KIRQL)0; -} -#endif - -#ifndef _M_AMD64 -#undef KeReleaseSpinLock -VOID -NTAPI -KeReleaseSpinLock( - PKSPIN_LOCK SpinLock, - KIRQL NewIrql) -{ - UNIMPLEMENTED; -} -#endif - -VOID -NTAPI -KeStallExecutionProcessor( - ULONG Microseconds) -{ - UNIMPLEMENTED; -} - - -LOGICAL -FASTCALL -KeTryToAcquireQueuedSpinLock( - KSPIN_LOCK_QUEUE_NUMBER LockNumber, - PKIRQL OldIrql) -{ - UNIMPLEMENTED; - - return FALSE; -} - - -BOOLEAN -FASTCALL -KeTryToAcquireQueuedSpinLockRaiseToSynch( - KSPIN_LOCK_QUEUE_NUMBER LockNumber, - PKIRQL OldIrql) -{ - UNIMPLEMENTED; - - return FALSE; -} - -#if !defined(_M_AMD64) -KIRQL -FASTCALL -KfAcquireSpinLock( - PKSPIN_LOCK SpinLock) -{ - UNIMPLEMENTED; - - return (KIRQL)0; -} - - -VOID -FASTCALL -KfLowerIrql( - KIRQL NewIrql) -{ - UNIMPLEMENTED; -} - - -KIRQL -FASTCALL -KfRaiseIrql( - KIRQL NewIrql) -{ - UNIMPLEMENTED; - - return (KIRQL)0; -} - - -VOID -FASTCALL -KfReleaseSpinLock( - PKSPIN_LOCK SpinLock, - KIRQL NewIrql) -{ - UNIMPLEMENTED; -} -#endif - -#if !defined(_M_AMD64) -VOID -NTAPI -READ_PORT_BUFFER_UCHAR( - PUCHAR Port, - PUCHAR Buffer, - ULONG Count) -{ - UNIMPLEMENTED; -} - - -VOID -NTAPI -READ_PORT_BUFFER_ULONG( - PULONG Port, - PULONG Buffer, - ULONG Count) -{ - UNIMPLEMENTED; -} - - -VOID -NTAPI -READ_PORT_BUFFER_USHORT( - PUSHORT Port, - PUSHORT Buffer, - ULONG Count) -{ - UNIMPLEMENTED; -} - - -UCHAR -NTAPI -READ_PORT_UCHAR( - PUCHAR Port) -{ - UNIMPLEMENTED; - - return 0; -} - - -ULONG -NTAPI -READ_PORT_ULONG( - PULONG Port) -{ - UNIMPLEMENTED; - - return 0; -} - - -USHORT -NTAPI -READ_PORT_USHORT( - PUSHORT Port) -{ - UNIMPLEMENTED; - - return 0; -} - - -VOID -NTAPI -WRITE_PORT_BUFFER_UCHAR( - PUCHAR Port, - PUCHAR Buffer, - ULONG Count) -{ - UNIMPLEMENTED; -} - - -VOID -NTAPI -WRITE_PORT_BUFFER_USHORT( - PUSHORT Port, - PUSHORT Buffer, - ULONG Count) -{ - UNIMPLEMENTED; -} - - -VOID -NTAPI -WRITE_PORT_BUFFER_ULONG( - PULONG Port, - PULONG Buffer, - ULONG Count) -{ - UNIMPLEMENTED; -} - - -VOID -NTAPI -WRITE_PORT_UCHAR( - PUCHAR Port, - UCHAR Value) -{ - UNIMPLEMENTED; -} - -VOID -NTAPI -WRITE_PORT_ULONG( - PULONG Port, - ULONG Value) -{ - UNIMPLEMENTED; -} - -VOID -NTAPI -WRITE_PORT_USHORT( - PUSHORT Port, - USHORT Value) -{ - UNIMPLEMENTED; -} -#endif - -KIRQL -FASTCALL -KeAcquireQueuedSpinLock(IN PKLOCK_QUEUE_HANDLE LockHandle) -{ - UNIMPLEMENTED; - return (KIRQL)0; -} - -KIRQL -FASTCALL -KeAcquireQueuedSpinLockRaiseToSynch(IN PKLOCK_QUEUE_HANDLE LockHandle) -{ - UNIMPLEMENTED; - return (KIRQL)0; -} - -VOID -FASTCALL -KeReleaseQueuedSpinLock(IN PKLOCK_QUEUE_HANDLE LockHandle, - IN KIRQL OldIrql) -{ - UNIMPLEMENTED; -} - -VOID -HalSweepDcache(VOID) -{ - UNIMPLEMENTED; -} - -VOID -HalSweepIcache(VOID) -{ - UNIMPLEMENTED; -} - -ULONG -HalGetInterruptSource(VOID) -{ - UNIMPLEMENTED; - return 0; -} - -#ifdef _X86BIOS_ -NTSTATUS -NTAPI -x86BiosAllocateBuffer ( - ULONG *Size, - USHORT *Segment, - USHORT *Offset) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL;; - -} - -BOOLEAN -NTAPI -x86BiosCall ( - ULONG InterruptNumber, - X86_BIOS_REGISTERS *Registers) -{ - UNIMPLEMENTED; - return FALSE; -} - -NTSTATUS -NTAPI -x86BiosFreeBuffer ( - USHORT Segment, - USHORT Offset) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL;; -} - -NTSTATUS -x86BiosReadMemory ( - USHORT Segment, - USHORT Offset, - PVOID Buffer, - ULONG Size) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL;; -} - -NTSTATUS -NTAPI -x86BiosWriteMemory ( - USHORT Segment, - USHORT Offset, - PVOID Buffer, - ULONG Size) -{ - UNIMPLEMENTED; - return STATUS_UNSUCCESSFUL;; -} -#endif - -/* EOF */ diff --git a/reactos/hal/hal/hal.rbuild b/reactos/hal/hal/hal.rbuild deleted file mode 100644 index 0c2cc65d97c..00000000000 --- a/reactos/hal/hal/hal.rbuild +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - include - ntoskrnl - - hal.c - hal.rc - - - - - - include - ntoskrnl - - hal.c - hal.rc - - - - - - - - - - - - - - - include - ntoskrnl - - - hal.c - hal.rc - - - diff --git a/reactos/hal/hal/hal.rc b/reactos/hal/hal/hal.rc deleted file mode 100644 index da2e5db7733..00000000000 --- a/reactos/hal/hal/hal.rc +++ /dev/null @@ -1,5 +0,0 @@ -#define REACTOS_VERSION_DLL -#define REACTOS_STR_FILE_DESCRIPTION "Template Hardware Abstraction Layer\0" -#define REACTOS_STR_INTERNAL_NAME "hal\0" -#define REACTOS_STR_ORIGINAL_FILENAME "hal.dll\0" -#include diff --git a/reactos/hal/hal/hal_i386.def b/reactos/hal/hal/hal_i386.def deleted file mode 100644 index eb489728203..00000000000 --- a/reactos/hal/hal/hal_i386.def +++ /dev/null @@ -1,98 +0,0 @@ -; Hardware Abstraction Layer - ReactOS Operating System - -LIBRARY hal.dll - -EXPORTS -@ExAcquireFastMutex@4=@ExiAcquireFastMutex@4 -@ExReleaseFastMutex@4=@ExiReleaseFastMutex@4 -@ExTryToAcquireFastMutex@4=@ExiTryToAcquireFastMutex@4 -@HalClearSoftwareInterrupt@4 -@HalRequestSoftwareInterrupt@4 -@HalSystemVectorDispatchEntry@12 -@KeAcquireInStackQueuedSpinLock@8 -@KeAcquireInStackQueuedSpinLockRaiseToSynch@8 -@KeAcquireSpinLockRaiseToSynch@4 -@KeAcquireQueuedSpinLock@4 -@KeAcquireQueuedSpinLockRaiseToSynch@4 -@KeReleaseInStackQueuedSpinLock@4 -@KeReleaseQueuedSpinLock@8 -@KeTryToAcquireQueuedSpinLock@8 -@KeTryToAcquireQueuedSpinLockRaiseToSynch@8 -@KfAcquireSpinLock@4 -@KfLowerIrql@4 -@KfRaiseIrql@4 -@KfReleaseSpinLock@8 - -HalAcquireDisplayOwnership@4 -HalAdjustResourceList@4 -HalAllProcessorsStarted@0 -HalAllocateAdapterChannel@16 -HalAllocateCommonBuffer@16 -HalAllocateCrashDumpRegisters@8 -HalAssignSlotResources@32 -HalBeginSystemInterrupt@12 -HalCalibratePerformanceCounter@12 -HalDisableSystemInterrupt@8 -HalDisplayString@4 -HalEnableSystemInterrupt@12 -HalEndSystemInterrupt@8 -HalFlushCommonBuffer@20 -HalFreeCommonBuffer@24 -HalGetAdapter@8 -HalGetBusData@20 -HalGetBusDataByOffset@24 -HalGetEnvironmentVariable@12 -HalGetInterruptVector@24 -HalHandleNMI@4 -HalInitSystem@8 -HalInitializeProcessor@8 -HalMakeBeep@4 -HalProcessorIdle@0 -HalQueryDisplayParameters@16 -HalQueryRealTimeClock@4 -HalReadDmaCounter@4 -HalReportResourceUsage@0 -HalRequestIpi@4 -HalReturnToFirmware@4 -HalSetBusData@20 -HalSetBusDataByOffset@24 -HalSetDisplayParameters@8 -HalSetEnvironmentVariable@8 -HalSetProfileInterval@4 -HalSetRealTimeClock@4 -HalSetTimeIncrement@4 -HalStartNextProcessor@8 -HalStartProfileInterrupt@4 -HalStopProfileInterrupt@4 -HalTranslateBusAddress@24 -IoAssignDriveLetters@16=HalpAssignDriveLetters@16 -IoFlushAdapterBuffers@24 -IoFreeAdapterChannel@4 -IoFreeMapRegisters@12 -IoMapTransfer@24 -IoReadPartitionTable@16=HalpReadPartitionTable@16 -IoSetPartitionInformation@16=HalpSetPartitionInformation@16 -IoWritePartitionTable@20=HalpWritePartitionTable@20 -KeAcquireSpinLock@8 -KdComPortInUse=_KdComPortInUse DATA -KeFlushWriteBuffer@0 -KeGetCurrentIrql@0 -KeLowerIrql@4 -KeQueryPerformanceCounter@4 -KeRaiseIrql@8 -KeRaiseIrqlToDpcLevel@0 -KeRaiseIrqlToSynchLevel@0 -KeReleaseSpinLock@8 -KeStallExecutionProcessor@4 -READ_PORT_BUFFER_UCHAR@12 -READ_PORT_BUFFER_ULONG@12 -READ_PORT_BUFFER_USHORT@12 -READ_PORT_UCHAR@4 -READ_PORT_ULONG@4 -READ_PORT_USHORT@4 -WRITE_PORT_BUFFER_UCHAR@12 -WRITE_PORT_BUFFER_ULONG@12 -WRITE_PORT_BUFFER_USHORT@12 -WRITE_PORT_UCHAR@8 -WRITE_PORT_ULONG@8 -WRITE_PORT_USHORT@8 diff --git a/reactos/hal/hal/hal_amd64.def b/reactos/hal/halamd64/hal_amd64.def similarity index 100% rename from reactos/hal/hal/hal_amd64.def rename to reactos/hal/halamd64/hal_amd64.def diff --git a/reactos/hal/halamd64/up/halup.rbuild b/reactos/hal/halamd64/up/halup.rbuild index 08f72745185..ce5877df4f9 100644 --- a/reactos/hal/halamd64/up/halup.rbuild +++ b/reactos/hal/halamd64/up/halup.rbuild @@ -1,9 +1,9 @@ - - + + - ../include + ../include include diff --git a/reactos/hal/halarm/up/halup.rbuild b/reactos/hal/halarm/up/halup.rbuild index 00b6da4c290..8b84f449b9e 100644 --- a/reactos/hal/halarm/up/halup.rbuild +++ b/reactos/hal/halarm/up/halup.rbuild @@ -1,7 +1,7 @@ - - + + ../include include diff --git a/reactos/hal/halppc/up/halup.rbuild b/reactos/hal/halppc/up/halup.rbuild index fde75835c85..0a032d82796 100644 --- a/reactos/hal/halppc/up/halup.rbuild +++ b/reactos/hal/halppc/up/halup.rbuild @@ -1,7 +1,7 @@ - - + + ../include include diff --git a/reactos/hal/halx86/halmp.rbuild b/reactos/hal/halx86/halmp.rbuild index 9ba7c68713f..156bb388e34 100644 --- a/reactos/hal/halx86/halmp.rbuild +++ b/reactos/hal/halx86/halmp.rbuild @@ -2,7 +2,7 @@ - + include include diff --git a/reactos/hal/halx86/halup.rbuild b/reactos/hal/halx86/halup.rbuild index 4b7bdbbf5eb..89c0b855ddc 100644 --- a/reactos/hal/halx86/halup.rbuild +++ b/reactos/hal/halx86/halup.rbuild @@ -1,8 +1,8 @@ - - + + include include diff --git a/reactos/hal/halx86/halxbox.rbuild b/reactos/hal/halx86/halxbox.rbuild index 2b5f0dee2a8..0f054f93d91 100644 --- a/reactos/hal/halx86/halxbox.rbuild +++ b/reactos/hal/halx86/halxbox.rbuild @@ -2,7 +2,7 @@ - + include include From 773fab1b92e97c0511256592110a2caad358e445 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 31 Dec 2009 15:31:20 +0000 Subject: [PATCH 271/286] [HAL] use the pspec for amd64, too svn path=/branches/ros-amd64-bringup/; revision=44828 --- reactos/hal/halamd64/hal_amd64.def | 93 ---------------------------- reactos/hal/halamd64/up/halup.rbuild | 2 +- 2 files changed, 1 insertion(+), 94 deletions(-) delete mode 100644 reactos/hal/halamd64/hal_amd64.def diff --git a/reactos/hal/halamd64/hal_amd64.def b/reactos/hal/halamd64/hal_amd64.def deleted file mode 100644 index dad767e2745..00000000000 --- a/reactos/hal/halamd64/hal_amd64.def +++ /dev/null @@ -1,93 +0,0 @@ -; Hardware Abstraction Layer - ReactOS Operating System - -LIBRARY hal.dll - -EXPORTS -HalAcquireDisplayOwnership -HalAdjustResourceList -HalAllProcessorsStarted -HalAllocateAdapterChannel -HalAllocateCommonBuffer -HalAllocateCrashDumpRegisters -;HalAllocateHardwareCounters -HalAssignSlotResources -HalBugCheckSystem -HalCalibratePerformanceCounter -HalClearSoftwareInterrupt -;HalConvertDeviceIdtToIrql -;HalDisableInterrupt -HalDisplayString -;HalEnableInterrupt -;HalEnumerateEnvironmentVariablesEx -;HalEnumerateProcessors -HalFlushCommonBuffer -HalFreeCommonBuffer -;HalFreeHardwareCounters -HalGetAdapter -HalGetBusData -HalGetBusDataByOffset -HalGetEnvironmentVariable -;HalGetEnvironmentVariableEx -;HalGetInterruptTargetInformation -HalGetInterruptVector -;HalGetMemoryCachingRequirements -;HalGetMessageRoutingInfo -;HalGetProcessorIdByNtNumber -;HalGetVectorInput -;HalHandleMcheck -HalHandleNMI -HalInitSystem -;HalInitializeBios -;HalInitializeOnResume -HalInitializeProcessor -;HalIsHyperThreadingEnabled -HalMakeBeep -;HalMcUpdateReadPCIConfig -;HalPerformEndOfInterrupt -HalProcessorIdle -HalQueryDisplayParameters -;HalQueryEnvironmentVariableInfoEx -;HalQueryMaximumProcessorCount -HalQueryRealTimeClock -HalReadDmaCounter -;HalRegisterDynamicProcessor -;HalRegisterErrataCallbacks -HalReportResourceUsage -;HalRequestClockInterrupt -;HalRequestDeferredRecoveryServiceInterrupt -HalRequestIpi -HalRequestSoftwareInterrupt -HalReturnToFirmware -;HalSendNMI -;HalSendSoftwareInterrupt -HalSetBusData -HalSetBusDataByOffset -HalSetDisplayParameters -HalSetEnvironmentVariable -;HalSetEnvironmentVariableEx -HalSetProfileInterval -HalSetRealTimeClock -HalSetTimeIncrement -;HalStartDynamicProcessor -HalStartNextProcessor -HalStartProfileInterrupt -HalStopProfileInterrupt -HalSystemVectorDispatchEntry -HalTranslateBusAddress -IoAssignDriveLetters ;not present in win7 -IoFlushAdapterBuffers -IoFreeAdapterChannel -IoFreeMapRegisters -IoMapTransfer -IoReadPartitionTable -IoSetPartitionInformation -IoWritePartitionTable -KdComPortInUse DATA -KeFlushWriteBuffer -KeQueryPerformanceCounter -KeStallExecutionProcessor -x86BiosAllocateBuffer -x86BiosCall -x86BiosFreeBuffer -x86BiosReadMemory -x86BiosWriteMemory diff --git a/reactos/hal/halamd64/up/halup.rbuild b/reactos/hal/halamd64/up/halup.rbuild index ce5877df4f9..baaee10e096 100644 --- a/reactos/hal/halamd64/up/halup.rbuild +++ b/reactos/hal/halamd64/up/halup.rbuild @@ -1,7 +1,7 @@ - + ../include include From 54dd2d3fd61bd1d257bf5285aac2b712c0245899 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 31 Dec 2009 15:38:34 +0000 Subject: [PATCH 272/286] [HAL] - fix pspec - entrypoint should be HalInitSystem svn path=/branches/ros-amd64-bringup/; revision=44829 --- reactos/hal/hal.pspec | 91 +++++++++++++--------------- reactos/hal/halamd64/up/halup.rbuild | 2 +- reactos/hal/halarm/up/halup.rbuild | 2 +- reactos/hal/halppc/up/halup.rbuild | 2 +- reactos/hal/halx86/halmp.rbuild | 2 +- reactos/hal/halx86/halup.rbuild | 2 +- reactos/hal/halx86/halxbox.rbuild | 2 +- 7 files changed, 48 insertions(+), 55 deletions(-) diff --git a/reactos/hal/hal.pspec b/reactos/hal/hal.pspec index 0a191bee07f..572425b2767 100644 --- a/reactos/hal/hal.pspec +++ b/reactos/hal/hal.pspec @@ -4,27 +4,26 @@ @ fastcall ExAcquireFastMutex(ptr) @ fastcall ExReleaseFastMutex(ptr) #else -@ fastcall ExAcquireFastMutex(ptr) ExiAcquireFastMutex -@ fastcall ExReleaseFastMutex(ptr) ExiReleaseFastMutex +@ fastcall -arch=i386 ExAcquireFastMutex(ptr) ExiAcquireFastMutex +@ fastcall -arch=i386 ExReleaseFastMutex(ptr) ExiReleaseFastMutex #endif -@ fastcall ExTryToAcquireFastMutex(ptr) ExiTryToAcquireFastMutex +@ fastcall -arch=i386,arm ExTryToAcquireFastMutex(ptr) ExiTryToAcquireFastMutex @ fastcall HalClearSoftwareInterrupt(long) @ fastcall HalRequestSoftwareInterrupt(long) @ fastcall HalSystemVectorDispatchEntry(long long long) -@ fastcall KeAcquireInStackQueuedSpinLock(ptr ptr) -@ fastcall KeAcquireInStackQueuedSpinLockRaiseToSynch(ptr ptr) -@ fastcall KeAcquireSpinLockRaiseToSynch(ptr) -@ fastcall KeAcquireQueuedSpinLock(ptr) -@ fastcall KeAcquireQueuedSpinLockRaiseToSynch(ptr) -@ fastcall KeReleaseInStackQueuedSpinLock(ptr) -@ fastcall KeReleaseQueuedSpinLock(ptr long) -@ fastcall KeTryToAcquireQueuedSpinLock(long ptr) -@ fastcall KeTryToAcquireQueuedSpinLockRaiseToSynch(long ptr) -@ fastcall KfAcquireSpinLock(ptr) -@ fastcall KfLowerIrql(long) -@ fastcall KfRaiseIrql(long) -@ fastcall KfReleaseSpinLock(ptr long) - +@ fastcall -arch=i386,arm KeAcquireInStackQueuedSpinLock(ptr ptr) +@ fastcall -arch=i386,arm KeAcquireInStackQueuedSpinLockRaiseToSynch(ptr ptr) +@ fastcall -arch=i386,arm KeAcquireSpinLockRaiseToSynch(ptr) +@ fastcall -arch=i386,arm KeAcquireQueuedSpinLock(ptr) +@ fastcall -arch=i386,arm KeAcquireQueuedSpinLockRaiseToSynch(ptr) +@ fastcall -arch=i386,arm KeReleaseInStackQueuedSpinLock(ptr) +@ fastcall -arch=i386,arm KeReleaseQueuedSpinLock(ptr long) +@ fastcall -arch=i386,arm KeTryToAcquireQueuedSpinLock(long ptr) +@ fastcall -arch=i386,arm KeTryToAcquireQueuedSpinLockRaiseToSynch(long ptr) +@ fastcall -arch=i386,arm KfAcquireSpinLock(ptr) +@ fastcall -arch=i386,arm KfLowerIrql(long) +@ fastcall -arch=i386,arm KfRaiseIrql(long) +@ fastcall -arch=i386,arm KfReleaseSpinLock(ptr long) @ stdcall HalAcquireDisplayOwnership(ptr) @ stdcall HalAdjustResourceList(ptr) @ stdcall HalAllProcessorsStarted() @@ -44,9 +43,7 @@ @ stdcall HalGetBusData(long long long ptr long) @ stdcall HalGetBusDataByOffset(long long long ptr long long) @ stdcall HalGetEnvironmentVariable(str long str) -#ifdef _M_ARM -@ fastcall HalGetInterruptSource() -#endif +@ fastcall -arch=arm HalGetInterruptSource() @ stdcall HalGetInterruptVector(long long long long ptr ptr) @ stdcall HalHandleNMI(ptr) @ stdcall HalInitSystem(long ptr) @@ -69,41 +66,37 @@ @ stdcall HalStartNextProcessor(ptr ptr) @ stdcall HalStartProfileInterrupt(long) @ stdcall HalStopProfileInterrupt(long) -#ifdef _M_ARM -@ fastcall HalSweepIcache() -@ fastcall HalSweepDcache() -#endif +@ fastcall -arch=arm HalSweepIcache() +@ fastcall -arch=arm HalSweepDcache() @ stdcall HalTranslateBusAddress(long long long long ptr ptr) @ stdcall IoFlushAdapterBuffers(ptr ptr ptr ptr long long) @ stdcall IoFreeAdapterChannel(ptr) @ stdcall IoFreeMapRegisters(ptr ptr long) @ stdcall IoMapTransfer(ptr ptr ptr ptr ptr long) -#ifndef _M_ARM -@ stdcall IoAssignDriveLetters(ptr str ptr ptr) HalpAssignDriveLetters -@ stdcall IoReadPartitionTable(ptr long long ptr) HalpReadPartitionTable -@ stdcall IoSetPartitionInformation(ptr long long long) HalpSetPartitionInformation -@ stdcall IoWritePartitionTable(ptr long long long ptr) HalpWritePartitionTable -#endif -@ stdcall KeAcquireSpinLock(ptr ptr) +@ stdcall -arch=i386,x86_64 IoAssignDriveLetters(ptr str ptr ptr) HalpAssignDriveLetters +@ stdcall -arch=i386,x86_64 IoReadPartitionTable(ptr long long ptr) HalpReadPartitionTable +@ stdcall -arch=i386,x86_64 IoSetPartitionInformation(ptr long long long) HalpSetPartitionInformation +@ stdcall -arch=i386,x86_64 IoWritePartitionTable(ptr long long long ptr) HalpWritePartitionTable +@ stdcall -arch=i386,arm KeAcquireSpinLock(ptr ptr) @ extern KdComPortInUse @ stdcall KeFlushWriteBuffer() -@ stdcall KeGetCurrentIrql() -@ stdcall KeLowerIrql(long) +@ stdcall -arch=i386,arm KeGetCurrentIrql() +@ stdcall -arch=i386,arm KeLowerIrql(long) @ stdcall KeQueryPerformanceCounter(ptr) -@ stdcall KeRaiseIrql(long ptr) -@ stdcall KeRaiseIrqlToDpcLevel() -@ stdcall KeRaiseIrqlToSynchLevel() -@ stdcall KeReleaseSpinLock(ptr long) +@ stdcall -arch=i386,arm KeRaiseIrql(long ptr) +@ stdcall -arch=i386,arm KeRaiseIrqlToDpcLevel() +@ stdcall -arch=i386,arm KeRaiseIrqlToSynchLevel() +@ stdcall -arch=i386,arm KeReleaseSpinLock(ptr long) @ stdcall KeStallExecutionProcessor(long) -@ stdcall READ_PORT_BUFFER_UCHAR(ptr ptr long) -@ stdcall READ_PORT_BUFFER_ULONG(ptr ptr long) -@ stdcall READ_PORT_BUFFER_USHORT(ptr ptr long) -@ stdcall READ_PORT_UCHAR(ptr) -@ stdcall READ_PORT_ULONG(ptr) -@ stdcall READ_PORT_USHORT(ptr) -@ stdcall WRITE_PORT_BUFFER_UCHAR(ptr ptr long) -@ stdcall WRITE_PORT_BUFFER_ULONG(ptr ptr long) -@ stdcall WRITE_PORT_BUFFER_USHORT(ptr ptr long) -@ stdcall WRITE_PORT_UCHAR(ptr long) -@ stdcall WRITE_PORT_ULONG(ptr long) -@ stdcall WRITE_PORT_USHORT(ptr long) +@ stdcall -arch=i386,arm READ_PORT_BUFFER_UCHAR(ptr ptr long) +@ stdcall -arch=i386,arm READ_PORT_BUFFER_ULONG(ptr ptr long) +@ stdcall -arch=i386,arm READ_PORT_BUFFER_USHORT(ptr ptr long) +@ stdcall -arch=i386,arm READ_PORT_UCHAR(ptr) +@ stdcall -arch=i386,arm READ_PORT_ULONG(ptr) +@ stdcall -arch=i386,arm READ_PORT_USHORT(ptr) +@ stdcall -arch=i386,arm WRITE_PORT_BUFFER_UCHAR(ptr ptr long) +@ stdcall -arch=i386,arm WRITE_PORT_BUFFER_ULONG(ptr ptr long) +@ stdcall -arch=i386,arm WRITE_PORT_BUFFER_USHORT(ptr ptr long) +@ stdcall -arch=i386,arm WRITE_PORT_UCHAR(ptr long) +@ stdcall -arch=i386,arm WRITE_PORT_ULONG(ptr long) +@ stdcall -arch=i386,arm WRITE_PORT_USHORT(ptr long) diff --git a/reactos/hal/halamd64/up/halup.rbuild b/reactos/hal/halamd64/up/halup.rbuild index baaee10e096..bfdd25e56db 100644 --- a/reactos/hal/halamd64/up/halup.rbuild +++ b/reactos/hal/halamd64/up/halup.rbuild @@ -1,6 +1,6 @@ - + ../include diff --git a/reactos/hal/halarm/up/halup.rbuild b/reactos/hal/halarm/up/halup.rbuild index 8b84f449b9e..b44390569d0 100644 --- a/reactos/hal/halarm/up/halup.rbuild +++ b/reactos/hal/halarm/up/halup.rbuild @@ -1,6 +1,6 @@ - + ../include diff --git a/reactos/hal/halppc/up/halup.rbuild b/reactos/hal/halppc/up/halup.rbuild index 0a032d82796..cd946027cc5 100644 --- a/reactos/hal/halppc/up/halup.rbuild +++ b/reactos/hal/halppc/up/halup.rbuild @@ -1,6 +1,6 @@ - + ../include diff --git a/reactos/hal/halx86/halmp.rbuild b/reactos/hal/halx86/halmp.rbuild index 156bb388e34..4169f0bfade 100644 --- a/reactos/hal/halx86/halmp.rbuild +++ b/reactos/hal/halx86/halmp.rbuild @@ -1,7 +1,7 @@ - + include diff --git a/reactos/hal/halx86/halup.rbuild b/reactos/hal/halx86/halup.rbuild index 89c0b855ddc..096feb21d3d 100644 --- a/reactos/hal/halx86/halup.rbuild +++ b/reactos/hal/halx86/halup.rbuild @@ -1,7 +1,7 @@ - + include diff --git a/reactos/hal/halx86/halxbox.rbuild b/reactos/hal/halx86/halxbox.rbuild index 0f054f93d91..60a06cee4d4 100644 --- a/reactos/hal/halx86/halxbox.rbuild +++ b/reactos/hal/halx86/halxbox.rbuild @@ -1,7 +1,7 @@ - + include include From 18534cb3b70caa0576ecba8ffc436d67942a0b70 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 31 Dec 2009 16:47:09 +0000 Subject: [PATCH 273/286] [HAL] - fix indentation - add HalDisableSystemInterrupt and HalEnableSystemInterrupt stubs svn path=/branches/ros-amd64-bringup/; revision=44830 --- reactos/hal/halamd64/generic/pic.c | 144 +++++++++++++++++------------ 1 file changed, 87 insertions(+), 57 deletions(-) diff --git a/reactos/hal/halamd64/generic/pic.c b/reactos/hal/halamd64/generic/pic.c index 15371bca57f..ad4e26ab805 100644 --- a/reactos/hal/halamd64/generic/pic.c +++ b/reactos/hal/halamd64/generic/pic.c @@ -41,71 +41,101 @@ VOID NTAPI HalpInitPICs(VOID) { - ULONG OldEflags; - INT x; + ULONG OldEflags; + INT x; - OldEflags = __readeflags(); - _disable(); - /* - * Set up the first 8259 interrupt processor. - * Make 8259 interrupts start at CPU vector VectorPIC. - * Set the 8259 as master with edge triggered - * input with fully nested interrupts. - */ - __outbyte(Int0ctl, 0x20); /* ICW1 - master, edge triggered */ - __outbyte(Int0aux, 0x11); /* Edge, cascade, CAI 8, ICW4 */ - __outbyte(Int0aux, PRIMARY_VECTOR_BASE); /* ICW2 - interrupt vector offset */ - __outbyte(Int0aux, 0x04); /* ICW3 - have slave on level 2 */ - __outbyte(Int0aux, 0x01); /* ICW4 - 8086 mode, not buffered */ - __outbyte(Int0aux, 0xFF); /* Mask Interrupts */ + OldEflags = __readeflags(); + _disable(); + + /* + * Set up the first 8259 interrupt processor. + * Make 8259 interrupts start at CPU vector VectorPIC. + * Set the 8259 as master with edge triggered + * input with fully nested interrupts. + */ + __outbyte(Int0ctl, 0x20); /* ICW1 - master, edge triggered */ + __outbyte(Int0aux, 0x11); /* Edge, cascade, CAI 8, ICW4 */ + __outbyte(Int0aux, PRIMARY_VECTOR_BASE); /* ICW2 - interrupt vector offset */ + __outbyte(Int0aux, 0x04); /* ICW3 - have slave on level 2 */ + __outbyte(Int0aux, 0x01); /* ICW4 - 8086 mode, not buffered */ + __outbyte(Int0aux, 0xFF); /* Mask Interrupts */ /* * Set up the second 8259 interrupt processor. * Make 8259 interrupts start at CPU vector VectorPIC+8. * Set the 8259 as slave with edge triggered * input with fully nested interrupts. */ - __outbyte(Int1ctl, 0xA0); /* ICW1 - master, edge triggered, */ - __outbyte(Int1aux, 0x11); /* Edge, cascade, CAI 8, ICW4 */ - __outbyte(Int1aux, PRIMARY_VECTOR_BASE+8); /* ICW2 - interrupt vector offset */ - __outbyte(Int1aux, 0x02); /* ICW3 - I am a slave on level 2 */ - __outbyte(Int1aux, 0x01); /* ICW4 - 8086 mode, not buffered */ - __outbyte(Int1aux, 0xFF); /* Mask Interrupts */ + __outbyte(Int1ctl, 0xA0); /* ICW1 - master, edge triggered, */ + __outbyte(Int1aux, 0x11); /* Edge, cascade, CAI 8, ICW4 */ + __outbyte(Int1aux, PRIMARY_VECTOR_BASE+8); /* ICW2 - interrupt vector offset */ + __outbyte(Int1aux, 0x02); /* ICW3 - I am a slave on level 2 */ + __outbyte(Int1aux, 0x01); /* ICW4 - 8086 mode, not buffered */ + __outbyte(Int1aux, 0xFF); /* Mask Interrupts */ - /* - * pass #2 8259 interrupts to #1 - */ - i8259mask &= ~0x04; - __outbyte(Int0aux, i8259mask & 0xFF); + /* + * pass #2 8259 interrupts to #1 + */ + i8259mask &= ~0x04; + __outbyte(Int0aux, i8259mask & 0xFF); - /* - * Set Ocw3 to return the ISR when ctl read. - * After initialisation status read is set to IRR. - * Read IRR first to possibly deassert an outstanding - * interrupt. - */ - __inbyte (Int0ctl); - __outbyte(Int0ctl, Ocw3|0x03); - __inbyte (Int1ctl); - __outbyte(Int1ctl, Ocw3|0x03); + /* + * Set Ocw3 to return the ISR when ctl read. + * After initialisation status read is set to IRR. + * Read IRR first to possibly deassert an outstanding + * interrupt. + */ + __inbyte (Int0ctl); + __outbyte(Int0ctl, Ocw3|0x03); + __inbyte (Int1ctl); + __outbyte(Int1ctl, Ocw3|0x03); + + /* + * Check for Edge/Level register. + * This check may not work for all chipsets. + * First try a non-intrusive test - the bits for + * IRQs 13, 8, 2, 1 and 0 must be edge (0). If + * that's OK try a R/W test. + */ + x = (__inbyte(Elcr2) << 8) | __inbyte(Elcr1); + + if (!(x & 0x2107)) + { + __outbyte(Elcr1, 0); + + if (__inbyte (Elcr1) == 0) + { + __outbyte(Elcr1, 0x20); + + if (__inbyte (Elcr1) == 0x20) + { + i8259elcr = x; + } + __outbyte(Elcr1, x & 0xFF); + DPRINT("ELCR: %4.4uX\n", i8259elcr); + } + } + + __writeeflags(OldEflags); +} + +VOID +NTAPI +HalDisableSystemInterrupt( + ULONG Vector, + KIRQL Irql) +{ + UNIMPLEMENTED; +} + +BOOLEAN +NTAPI +HalEnableSystemInterrupt( + ULONG Vector, + KIRQL Irql, + KINTERRUPT_MODE InterruptMode) +{ + UNIMPLEMENTED; + return FALSE; +} - /* - * Check for Edge/Level register. - * This check may not work for all chipsets. - * First try a non-intrusive test - the bits for - * IRQs 13, 8, 2, 1 and 0 must be edge (0). If - * that's OK try a R/W test. - */ - x = (__inbyte (Elcr2)<<8)|__inbyte(Elcr1); - if(!(x & 0x2107)){ - __outbyte(Elcr1, 0); - if(__inbyte (Elcr1) == 0){ - __outbyte(Elcr1, 0x20); - if(__inbyte (Elcr1) == 0x20) - i8259elcr = x; - __outbyte(Elcr1, x & 0xFF); - DPRINT("ELCR: %4.4uX\n", i8259elcr); - } - } - __writeeflags(OldEflags); - } From 6d68ae384a00a04af806547e3baa7a021b1ecefd Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 31 Dec 2009 16:51:05 +0000 Subject: [PATCH 274/286] [HAL] - begin integrating halamd64 into halx86 - Move some amd64 specific stuff into halx86 - use hal_generic for amd64, too svn path=/branches/ros-amd64-bringup/; revision=44831 --- reactos/hal/hal.rbuild | 2 +- reactos/hal/halamd64/generic/generic.rbuild | 8 ++--- .../generic => halx86/generic/amd64}/irq.S | 0 .../generic/amd64}/systimer.S | 0 .../{halamd64 => halx86}/generic/x86bios.c | 0 reactos/hal/halx86/hal_generic.rbuild | 22 +++++++++--- reactos/hal/halx86/hal_generic_amd64.rbuild | 35 ------------------- 7 files changed, 21 insertions(+), 46 deletions(-) rename reactos/hal/{halamd64/generic => halx86/generic/amd64}/irq.S (100%) rename reactos/hal/{halamd64/generic => halx86/generic/amd64}/systimer.S (100%) rename reactos/hal/{halamd64 => halx86}/generic/x86bios.c (100%) delete mode 100644 reactos/hal/halx86/hal_generic_amd64.rbuild diff --git a/reactos/hal/hal.rbuild b/reactos/hal/hal.rbuild index 1ea85734b32..2e37cc8290b 100644 --- a/reactos/hal/hal.rbuild +++ b/reactos/hal/hal.rbuild @@ -25,7 +25,7 @@ - + diff --git a/reactos/hal/halamd64/generic/generic.rbuild b/reactos/hal/halamd64/generic/generic.rbuild index 4880c41cf9b..da566068ca9 100644 --- a/reactos/hal/halamd64/generic/generic.rbuild +++ b/reactos/hal/halamd64/generic/generic.rbuild @@ -1,20 +1,16 @@ - - ../include + + ../include include - halinit.c - irq.S misc.c mps.S - systimer.S usage.c pic.c - x86bios.c ../include/hal.h diff --git a/reactos/hal/halamd64/generic/irq.S b/reactos/hal/halx86/generic/amd64/irq.S similarity index 100% rename from reactos/hal/halamd64/generic/irq.S rename to reactos/hal/halx86/generic/amd64/irq.S diff --git a/reactos/hal/halamd64/generic/systimer.S b/reactos/hal/halx86/generic/amd64/systimer.S similarity index 100% rename from reactos/hal/halamd64/generic/systimer.S rename to reactos/hal/halx86/generic/amd64/systimer.S diff --git a/reactos/hal/halamd64/generic/x86bios.c b/reactos/hal/halx86/generic/x86bios.c similarity index 100% rename from reactos/hal/halamd64/generic/x86bios.c rename to reactos/hal/halx86/generic/x86bios.c diff --git a/reactos/hal/halx86/hal_generic.rbuild b/reactos/hal/halx86/hal_generic.rbuild index 294a11c13c6..3b465cc819e 100644 --- a/reactos/hal/halx86/hal_generic.rbuild +++ b/reactos/hal/halx86/hal_generic.rbuild @@ -5,35 +5,49 @@ include include + bushndlr.c isabus.c halbus.c + pcibus.c pcidata.c sysbus.c beep.c - bios.c cmos.c dma.c drive.c display.c - halinit.c - misc.c profil.c reboot.c sysinfo.c timer.c - usage.c + x86bios.c + bios.c + halinit.c + misc.c + usage.c portio.c systimer.S v86.s + + + irq.s + systimer.S + + + + + apic.c + + hal.h diff --git a/reactos/hal/halx86/hal_generic_amd64.rbuild b/reactos/hal/halx86/hal_generic_amd64.rbuild deleted file mode 100644 index 157c41d60ad..00000000000 --- a/reactos/hal/halx86/hal_generic_amd64.rbuild +++ /dev/null @@ -1,35 +0,0 @@ - - - - - include - include - - - - - bushndlr.c - isabus.c - halbus.c - pcibus.c - pcidata.c - sysbus.c - - beep.c - cmos.c - dma.c - drive.c - display.c - profil.c - reboot.c - sysinfo.c - timer.c - - - apic.c - - - hal.h - - - From bda3767dfb6e4353ec75776944857653a4682fc6 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 31 Dec 2009 19:26:37 +0000 Subject: [PATCH 275/286] [HAL] some improvements svn path=/branches/ros-amd64-bringup/; revision=44832 --- reactos/hal/halamd64/generic/halinit.c | 34 ++++++++++++++------------ reactos/hal/halamd64/include/halp.h | 4 +++ reactos/hal/halamd64/up/processor.c | 6 +++-- 3 files changed, 26 insertions(+), 18 deletions(-) diff --git a/reactos/hal/halamd64/generic/halinit.c b/reactos/hal/halamd64/generic/halinit.c index 152618c1674..5c91dbd16ed 100644 --- a/reactos/hal/halamd64/generic/halinit.c +++ b/reactos/hal/halamd64/generic/halinit.c @@ -62,7 +62,7 @@ HalInitSystem(IN ULONG BootPhase, PKPRCB Prcb = KeGetCurrentPrcb(); /* Check the boot phase */ - if (!BootPhase) + if (BootPhase == 0) { /* Phase 0... save bus type */ HalpBusType = LoaderBlock->u.I386.MachineType & 0xFF; @@ -70,8 +70,8 @@ HalInitSystem(IN ULONG BootPhase, /* Get command-line parameters */ HalpGetParameters(LoaderBlock); - /* Checked HAL requires checked kernel */ #if DBG + /* Checked HAL requires checked kernel */ if (!(Prcb->BuildType & PRCB_BUILD_DEBUG)) { /* No match, bugcheck */ @@ -101,18 +101,21 @@ HalInitSystem(IN ULONG BootPhase, /* Validation failed, bugcheck */ KeBugCheckEx(MISMATCHED_HAL, 1, Prcb->MajorVersion, 1, 0); } -DPRINT1("HalInitSystem 2\n"); + + DPRINT1("HalInitSystem 1\n"); + /* Initialize the PICs */ HalpInitPICs(); -DPRINT1("HalInitSystem 3\n"); - /* Force initial PIC state */ - KfRaiseIrql(KeGetCurrentIrql()); -DPRINT1("HalInitSystem 4\n"); + + DPRINT1("HalInitSystem 2\n"); + /* Initialize the clock */ HalpInitializeClock(); -DPRINT1("HalInitSystem 5\n"); - /* Setup busy waiting */ - //HalpCalibrateStallExecution(); + + DPRINT1("HalInitSystem 3\n"); + + /* Calibrate counters */ +// HalpCalibrateCounters(); /* Fill out the dispatch tables */ HalQuerySystemInformation = HaliQuerySystemInformation; @@ -121,7 +124,9 @@ DPRINT1("HalInitSystem 5\n"); // HalGetDmaAdapter = HalpGetDmaAdapter; HalGetInterruptTranslator = NULL; // FIXME: TODO // HalResetDisplay = HalpBiosDisplayReset; -DPRINT1("HalInitSystem 6\n"); + + DPRINT1("HalInitSystem 4\n"); + /* Initialize the hardware lock (CMOS) */ KeInitializeSpinLock(&HalpSystemHardwareLock); @@ -134,11 +139,8 @@ DPRINT1("HalInitSystem 6\n"); //HalpInitBusHandler(); /* Enable the clock interrupt */ - PKIDTENTRY64 IdtEntry = &((PKIPCR)KeGetPcr())->IdtBase[0x30]; - IdtEntry->OffsetLow = (((ULONG_PTR)HalpClockInterrupt) & 0xFFFF); - IdtEntry->OffsetMiddle = (((ULONG_PTR)HalpClockInterrupt >> 16) & 0xFFFF); - IdtEntry->OffsetHigh = ((ULONG_PTR)HalpClockInterrupt >> 32); -// HalEnableSystemInterrupt(0x30, CLOCK_LEVEL, Latched); + HalpSetInterruptGate(0x30, HalpClockInterrupt); + HalEnableSystemInterrupt(0x30, CLOCK_LEVEL, Latched); /* Initialize DMA. NT does this in Phase 0 */ HalpInitDma(); diff --git a/reactos/hal/halamd64/include/halp.h b/reactos/hal/halamd64/include/halp.h index bac9ef1e7c9..4004a857dfe 100644 --- a/reactos/hal/halamd64/include/halp.h +++ b/reactos/hal/halamd64/include/halp.h @@ -164,6 +164,10 @@ HalpGetDmaAdapter( VOID HaliInitBSP(VOID); VOID HaliStartApplicationProcessor(ULONG Cpu, ULONG Stack); +VOID NTAPI HalpInitIdtEntry(PKIDTENTRY64 Idt, PVOID Address); +VOID NTAPI HalpSetInterruptGate(ULONG Index, PVOID Address); +VOID NTAPI HalpInitCpuInterruptHandling(ULONG Cpu); + extern PVOID HalpRealModeStart; extern PVOID HalpRealModeEnd; diff --git a/reactos/hal/halamd64/up/processor.c b/reactos/hal/halamd64/up/processor.c index 1104ed3aa0c..1be90e8a39c 100644 --- a/reactos/hal/halamd64/up/processor.c +++ b/reactos/hal/halamd64/up/processor.c @@ -25,8 +25,7 @@ NTAPI HalInitializeProcessor(IN ULONG ProcessorNumber, IN PLOADER_PARAMETER_BLOCK LoaderBlock) { - /* Set default IDR and stall count */ -// KeGetPcr()->IDR = 0xFFFFFFFB; + /* Set default stall count */ KeGetPcr()->StallScaleFactor = INITIAL_STALL_COUNT; /* Update the interrupt affinity and processor mask */ @@ -36,6 +35,9 @@ HalInitializeProcessor(IN ULONG ProcessorNumber, /* Register routines for KDCOM */ HalpRegisterKdSupportFunctions(); + + /* Do per CPU interrupt handling initialization */ +// HalpInitCpuInterruptHandling(ProcessorNumber); } /* From b40509f919e632f2e3df7078f99e164c2d69f1a4 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 31 Dec 2009 19:46:47 +0000 Subject: [PATCH 276/286] use a directory.rbuild for halx86 svn path=/branches/ros-amd64-bringup/; revision=44833 --- reactos/hal/hal.rbuild | 19 ++++--------------- reactos/hal/halx86/directory.rbuild | 21 +++++++++++++++++++++ reactos/hal/halx86/hal_generic_up.rbuild | 6 ++++-- reactos/hal/halx86/up/processor.c | 2 ++ 4 files changed, 31 insertions(+), 17 deletions(-) create mode 100644 reactos/hal/halx86/directory.rbuild diff --git a/reactos/hal/hal.rbuild b/reactos/hal/hal.rbuild index 2e37cc8290b..6f873c833be 100644 --- a/reactos/hal/hal.rbuild +++ b/reactos/hal/hal.rbuild @@ -1,18 +1,10 @@ - - - - - - - - - - - - + + + + @@ -24,9 +16,6 @@ - - - diff --git a/reactos/hal/halx86/directory.rbuild b/reactos/hal/halx86/directory.rbuild new file mode 100644 index 00000000000..bc046e1ae9a --- /dev/null +++ b/reactos/hal/halx86/directory.rbuild @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + diff --git a/reactos/hal/halx86/hal_generic_up.rbuild b/reactos/hal/halx86/hal_generic_up.rbuild index 1823da20c25..81f8e7e5457 100644 --- a/reactos/hal/halx86/hal_generic_up.rbuild +++ b/reactos/hal/halx86/hal_generic_up.rbuild @@ -6,9 +6,11 @@ include - irq.S processor.c - spinlock.c + + irq.S + spinlock.c + diff --git a/reactos/hal/halx86/up/processor.c b/reactos/hal/halx86/up/processor.c index 662514b19cf..aa8a5b2fbe0 100644 --- a/reactos/hal/halx86/up/processor.c +++ b/reactos/hal/halx86/up/processor.c @@ -37,7 +37,9 @@ HalInitializeProcessor(IN ULONG ProcessorNumber, IN PLOADER_PARAMETER_BLOCK LoaderBlock) { /* Set default IDR and stall count */ +#ifdef _M_IX86 KeGetPcr()->IDR = 0xFFFFFFFB; +#endif KeGetPcr()->StallScaleFactor = INITIAL_STALL_COUNT; /* Update the interrupt affinity and processor mask */ From 2a0c1bf64920805112c0f1f04d97ed45a0c3ceac Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 31 Dec 2009 20:46:45 +0000 Subject: [PATCH 277/286] [HAL] - rename halmp to halmps - remove hal_generic_pc - remove some stuff from halamd64 svn path=/branches/ros-amd64-bringup/; revision=44834 --- reactos/hal/halamd64/directory.rbuild | 3 - reactos/hal/halamd64/up/halinit_up.c | 32 ------- reactos/hal/halamd64/up/halup.rc | 5 -- reactos/hal/halamd64/up/processor.c | 89 ------------------- reactos/hal/halx86/directory.rbuild | 9 +- .../hal/halx86/{halup.rbuild => hal.rbuild} | 1 - reactos/hal/halx86/hal_generic_pc.rbuild | 14 --- .../halup.rbuild => halx86/halamd64.rbuild} | 17 ++-- .../halx86/{halmp.rbuild => halmps.rbuild} | 3 +- 9 files changed, 17 insertions(+), 156 deletions(-) delete mode 100644 reactos/hal/halamd64/up/halinit_up.c delete mode 100644 reactos/hal/halamd64/up/halup.rc delete mode 100644 reactos/hal/halamd64/up/processor.c rename reactos/hal/halx86/{halup.rbuild => hal.rbuild} (94%) delete mode 100644 reactos/hal/halx86/hal_generic_pc.rbuild rename reactos/hal/{halamd64/up/halup.rbuild => halx86/halamd64.rbuild} (62%) rename reactos/hal/halx86/{halmp.rbuild => halmps.rbuild} (87%) diff --git a/reactos/hal/halamd64/directory.rbuild b/reactos/hal/halamd64/directory.rbuild index 1e0c730ba32..78a530357b0 100644 --- a/reactos/hal/halamd64/directory.rbuild +++ b/reactos/hal/halamd64/directory.rbuild @@ -4,7 +4,4 @@ - - - diff --git a/reactos/hal/halamd64/up/halinit_up.c b/reactos/hal/halamd64/up/halinit_up.c deleted file mode 100644 index cbb18bc665e..00000000000 --- a/reactos/hal/halamd64/up/halinit_up.c +++ /dev/null @@ -1,32 +0,0 @@ -/* $Id: halinit_up.c 24964 2006-11-29 08:28:20Z ion $ - * - * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS kernel - * FILE: ntoskrnl/hal/x86/halinit.c - * PURPOSE: Initalize the x86 hal - * PROGRAMMER: David Welch (welch@cwcom.net) - * UPDATE HISTORY: - * 11/06/98: Created - */ - -/* INCLUDES *****************************************************************/ - -#include -#define NDEBUG -#include - -/* FUNCTIONS ***************************************************************/ - -VOID -HalpInitPhase0(IN PLOADER_PARAMETER_BLOCK LoaderBlock) -{ - -} - -VOID -HalpInitPhase1(VOID) -{ - -} - -/* EOF */ diff --git a/reactos/hal/halamd64/up/halup.rc b/reactos/hal/halamd64/up/halup.rc deleted file mode 100644 index 951c3581d56..00000000000 --- a/reactos/hal/halamd64/up/halup.rc +++ /dev/null @@ -1,5 +0,0 @@ -#define REACTOS_VERSION_DLL -#define REACTOS_STR_FILE_DESCRIPTION "AMD64 Uniprocessor Hardware Abstraction Layer\0" -#define REACTOS_STR_INTERNAL_NAME "halup\0" -#define REACTOS_STR_ORIGINAL_FILENAME "halup.dll\0" -#include diff --git a/reactos/hal/halamd64/up/processor.c b/reactos/hal/halamd64/up/processor.c deleted file mode 100644 index 1be90e8a39c..00000000000 --- a/reactos/hal/halamd64/up/processor.c +++ /dev/null @@ -1,89 +0,0 @@ -/* - * PROJECT: ReactOS HAL - * LICENSE: GPL - See COPYING in the top level directory - * FILE: hal/halamd64/up/processor.c - * PURPOSE: HAL Processor Routines - * PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org) - */ - -/* INCLUDES ******************************************************************/ - -#include -#define NDEBUG -#include - -LONG HalpActiveProcessors; -KAFFINITY HalpDefaultInterruptAffinity; - -/* FUNCTIONS *****************************************************************/ - -/* - * @implemented - */ -VOID -NTAPI -HalInitializeProcessor(IN ULONG ProcessorNumber, - IN PLOADER_PARAMETER_BLOCK LoaderBlock) -{ - /* Set default stall count */ - KeGetPcr()->StallScaleFactor = INITIAL_STALL_COUNT; - - /* Update the interrupt affinity and processor mask */ - InterlockedBitTestAndSet(&HalpActiveProcessors, ProcessorNumber); - InterlockedBitTestAndSet((PLONG)&HalpDefaultInterruptAffinity, - ProcessorNumber); - - /* Register routines for KDCOM */ - HalpRegisterKdSupportFunctions(); - - /* Do per CPU interrupt handling initialization */ -// HalpInitCpuInterruptHandling(ProcessorNumber); -} - -/* - * @implemented - */ -BOOLEAN -NTAPI -HalAllProcessorsStarted(VOID) -{ - /* Do nothing */ - return TRUE; -} - -/* - * @implemented - */ -BOOLEAN -NTAPI -HalStartNextProcessor(IN PLOADER_PARAMETER_BLOCK LoaderBlock, - IN PKPROCESSOR_STATE ProcessorState) -{ - /* Ready to start */ - return FALSE; -} - -/* - * @implemented - */ -VOID -NTAPI -HalProcessorIdle(VOID) -{ - /* Enable interrupts and halt the processor */ - _enable(); - __halt(); -} - -/* - * @implemented - */ -VOID -NTAPI -HalRequestIpi(KAFFINITY TargetSet) -{ - /* Not implemented on NT */ - __debugbreak(); -} - -/* EOF */ diff --git a/reactos/hal/halx86/directory.rbuild b/reactos/hal/halx86/directory.rbuild index bc046e1ae9a..4d5a2199bd5 100644 --- a/reactos/hal/halx86/directory.rbuild +++ b/reactos/hal/halx86/directory.rbuild @@ -3,19 +3,18 @@ - - + - + - + diff --git a/reactos/hal/halx86/halup.rbuild b/reactos/hal/halx86/hal.rbuild similarity index 94% rename from reactos/hal/halx86/halup.rbuild rename to reactos/hal/halx86/hal.rbuild index 096feb21d3d..e4f7ea6f8da 100644 --- a/reactos/hal/halx86/halup.rbuild +++ b/reactos/hal/halx86/hal.rbuild @@ -9,7 +9,6 @@ hal_generic hal_generic_up - hal_generic_pc ntoskrnl halinit_up.c diff --git a/reactos/hal/halx86/hal_generic_pc.rbuild b/reactos/hal/halx86/hal_generic_pc.rbuild deleted file mode 100644 index 5aac0c95c71..00000000000 --- a/reactos/hal/halx86/hal_generic_pc.rbuild +++ /dev/null @@ -1,14 +0,0 @@ - - - - - include - include - - - - pcibus.c - - - - diff --git a/reactos/hal/halamd64/up/halup.rbuild b/reactos/hal/halx86/halamd64.rbuild similarity index 62% rename from reactos/hal/halamd64/up/halup.rbuild rename to reactos/hal/halx86/halamd64.rbuild index bfdd25e56db..43126c4a08a 100644 --- a/reactos/hal/halamd64/up/halup.rbuild +++ b/reactos/hal/halx86/halamd64.rbuild @@ -1,16 +1,23 @@ - + - ../include + include include hal_generic_amd64 hal_generic + hal_generic_up ntoskrnl - halinit_up.c - halup.rc - processor.c + + + halinit_up.c + halup.rc + + + diff --git a/reactos/hal/halx86/halmp.rbuild b/reactos/hal/halx86/halmps.rbuild similarity index 87% rename from reactos/hal/halx86/halmp.rbuild rename to reactos/hal/halx86/halmps.rbuild index 4169f0bfade..7aededdb93e 100644 --- a/reactos/hal/halx86/halmp.rbuild +++ b/reactos/hal/halx86/halmps.rbuild @@ -1,7 +1,7 @@ - + include @@ -9,7 +9,6 @@ hal_generic - hal_generic_pc ntoskrnl apic.c From 5ec7192b662643e99d6df3e4f67455ff75296953 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 31 Dec 2009 21:23:01 +0000 Subject: [PATCH 278/286] [HAL] - Move the rest from halamd64 to halx86 svn path=/branches/ros-amd64-bringup/; revision=44835 --- reactos/hal/hal.rbuild | 5 - reactos/hal/halamd64/directory.rbuild | 7 - reactos/hal/halamd64/generic/generic.rbuild | 16 - reactos/hal/halamd64/include/bus.h | 296 ------------------ reactos/hal/halamd64/include/hal.h | 52 --- reactos/hal/halamd64/include/halp.h | 176 ----------- .../generic/amd64}/halinit.c | 0 .../generic => halx86/generic/amd64}/misc.c | 0 .../generic => halx86/generic/amd64}/pic.c | 0 .../generic => halx86/generic/amd64}/usage.c | 0 reactos/hal/halx86/hal_generic.rbuild | 4 + reactos/hal/halx86/halamd64.rbuild | 9 +- reactos/hal/halx86/halmps.rbuild | 8 +- .../generic => halx86/mp/amd64}/mps.S | 0 reactos/hal/halx86/mp/{ => i386}/mps.S | 0 reactos/hal/halx86/mp/{ => i386}/mpsboot.asm | 0 reactos/hal/halx86/mp/{ => i386}/spinlock.c | 0 17 files changed, 14 insertions(+), 559 deletions(-) delete mode 100644 reactos/hal/halamd64/directory.rbuild delete mode 100644 reactos/hal/halamd64/generic/generic.rbuild delete mode 100644 reactos/hal/halamd64/include/bus.h delete mode 100644 reactos/hal/halamd64/include/hal.h delete mode 100644 reactos/hal/halamd64/include/halp.h rename reactos/hal/{halamd64/generic => halx86/generic/amd64}/halinit.c (100%) rename reactos/hal/{halamd64/generic => halx86/generic/amd64}/misc.c (100%) rename reactos/hal/{halamd64/generic => halx86/generic/amd64}/pic.c (100%) rename reactos/hal/{halamd64/generic => halx86/generic/amd64}/usage.c (100%) rename reactos/hal/{halamd64/generic => halx86/mp/amd64}/mps.S (100%) rename reactos/hal/halx86/mp/{ => i386}/mps.S (100%) rename reactos/hal/halx86/mp/{ => i386}/mpsboot.asm (100%) rename reactos/hal/halx86/mp/{ => i386}/spinlock.c (100%) diff --git a/reactos/hal/hal.rbuild b/reactos/hal/hal.rbuild index 6f873c833be..a7cf4bb0274 100644 --- a/reactos/hal/hal.rbuild +++ b/reactos/hal/hal.rbuild @@ -15,9 +15,4 @@ - - - - - diff --git a/reactos/hal/halamd64/directory.rbuild b/reactos/hal/halamd64/directory.rbuild deleted file mode 100644 index 78a530357b0..00000000000 --- a/reactos/hal/halamd64/directory.rbuild +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/reactos/hal/halamd64/generic/generic.rbuild b/reactos/hal/halamd64/generic/generic.rbuild deleted file mode 100644 index da566068ca9..00000000000 --- a/reactos/hal/halamd64/generic/generic.rbuild +++ /dev/null @@ -1,16 +0,0 @@ - - - - - ../include - include - - - halinit.c - misc.c - mps.S - usage.c - pic.c - ../include/hal.h - - diff --git a/reactos/hal/halamd64/include/bus.h b/reactos/hal/halamd64/include/bus.h deleted file mode 100644 index 9f58d4055e0..00000000000 --- a/reactos/hal/halamd64/include/bus.h +++ /dev/null @@ -1,296 +0,0 @@ -#ifndef __INTERNAL_HAL_BUS_H -#define __INTERNAL_HAL_BUS_H - -// -// Helper Macros -// -#define PASTE2(x,y) x ## y -#define POINTER_TO_(x) PASTE2(P,x) -#define READ_FROM(x) PASTE2(READ_PORT_, x) -#define WRITE_TO(x) PASTE2(WRITE_PORT_, x) - -// -// Declares a PCI Register Read/Write Routine -// -#define TYPE_DEFINE(x, y) \ - ULONG \ - NTAPI \ - x( \ - IN PPCIPBUSDATA BusData, \ - IN y PciCfg, \ - IN PUCHAR Buffer, \ - IN ULONG Offset \ - ) -#define TYPE1_DEFINE(x) TYPE_DEFINE(x, PPCI_TYPE1_CFG_BITS); -#define TYPE2_DEFINE(x) TYPE_DEFINE(x, PPCI_TYPE2_ADDRESS_BITS); - -// -// Defines a PCI Register Read/Write Type 1 Routine Prologue and Epilogue -// -#define TYPE1_START(x, y) \ - TYPE_DEFINE(x, PPCI_TYPE1_CFG_BITS) \ -{ \ - ULONG i = Offset % sizeof(ULONG); \ - PciCfg->u.bits.RegisterNumber = Offset / sizeof(ULONG); \ - WRITE_PORT_ULONG(BusData->Config.Type1.Address, PciCfg->u.AsULONG); -#define TYPE1_END(y) \ - return sizeof(y); } -#define TYPE2_END TYPE1_END - -// -// PCI Register Read Type 1 Routine -// -#define TYPE1_READ(x, y) \ - TYPE1_START(x, y) \ - *((POINTER_TO_(y))Buffer) = \ - READ_FROM(y)((POINTER_TO_(y))(ULONG_PTR)(BusData->Config.Type1.Data + i)); \ - TYPE1_END(y) - -// -// PCI Register Write Type 1 Routine -// -#define TYPE1_WRITE(x, y) \ - TYPE1_START(x, y) \ - WRITE_TO(y)((POINTER_TO_(y))(ULONG_PTR)(BusData->Config.Type1.Data + i), \ - *((POINTER_TO_(y))Buffer)); \ - TYPE1_END(y) - -// -// Defines a PCI Register Read/Write Type 2 Routine Prologue and Epilogue -// -#define TYPE2_START(x, y) \ - TYPE_DEFINE(x, PPCI_TYPE2_ADDRESS_BITS) \ -{ \ - PciCfg->u.bits.RegisterNumber = (USHORT)Offset; - -// -// PCI Register Read Type 2 Routine -// -#define TYPE2_READ(x, y) \ - TYPE2_START(x, y) \ - *((POINTER_TO_(y))Buffer) = \ - READ_FROM(y)((POINTER_TO_(y))(ULONG_PTR)PciCfg->u.AsUSHORT); \ - TYPE2_END(y) - -// -// PCI Register Write Type 2 Routine -// -#define TYPE2_WRITE(x, y) \ - TYPE2_START(x, y) \ - WRITE_TO(y)((POINTER_TO_(y))(ULONG_PTR)PciCfg->u.AsUSHORT, \ - *((POINTER_TO_(y))Buffer)); \ - TYPE2_END(y) - -typedef struct _PCIPBUSDATA -{ - PCIBUSDATA CommonData; - union - { - struct - { - PULONG Address; - ULONG Data; - } Type1; - struct - { - PUCHAR CSE; - PUCHAR Forward; - ULONG Base; - } Type2; - } Config; - ULONG MaxDevice; -} PCIPBUSDATA, *PPCIPBUSDATA; - -typedef ULONG -(NTAPI *FncConfigIO)( - IN PPCIPBUSDATA BusData, - IN PVOID State, - IN PUCHAR Buffer, - IN ULONG Offset -); - -typedef VOID -(NTAPI *FncSync)( - IN PBUS_HANDLER BusHandler, - IN PCI_SLOT_NUMBER Slot, - IN PKIRQL Irql, - IN PVOID State -); - -typedef VOID -(NTAPI *FncReleaseSync)( - IN PBUS_HANDLER BusHandler, - IN KIRQL Irql -); - -typedef struct _PCI_CONFIG_HANDLER -{ - FncSync Synchronize; - FncReleaseSync ReleaseSynchronzation; - FncConfigIO ConfigRead[3]; - FncConfigIO ConfigWrite[3]; -} PCI_CONFIG_HANDLER, *PPCI_CONFIG_HANDLER; - -typedef struct _PCI_REGISTRY_INFO_INTERNAL -{ - UCHAR MajorRevision; - UCHAR MinorRevision; - UCHAR NoBuses; - UCHAR HardwareMechanism; - ULONG ElementCount; - PCI_CARD_DESCRIPTOR CardList[ANYSIZE_ARRAY]; -} PCI_REGISTRY_INFO_INTERNAL, *PPCI_REGISTRY_INFO_INTERNAL; - -/* FUNCTIONS *****************************************************************/ - -VOID -NTAPI -HalpPCISynchronizeType1( - IN PBUS_HANDLER BusHandler, - IN PCI_SLOT_NUMBER Slot, - IN PKIRQL Irql, - IN PPCI_TYPE1_CFG_BITS PciCfg -); - -VOID -NTAPI -HalpPCIReleaseSynchronzationType1( - IN PBUS_HANDLER BusHandler, - IN KIRQL Irql -); - -VOID -NTAPI -HalpPCISynchronizeType2( - IN PBUS_HANDLER BusHandler, - IN PCI_SLOT_NUMBER Slot, - IN PKIRQL Irql, - IN PPCI_TYPE2_ADDRESS_BITS PciCfg -); - -VOID -NTAPI -HalpPCIReleaseSynchronizationType2( - IN PBUS_HANDLER BusHandler, - IN KIRQL Irql -); - -TYPE1_DEFINE(HalpPCIReadUcharType1); -TYPE1_DEFINE(HalpPCIReadUshortType1); -TYPE1_DEFINE(HalpPCIReadUlongType1); -TYPE2_DEFINE(HalpPCIReadUcharType2); -TYPE2_DEFINE(HalpPCIReadUshortType2); -TYPE2_DEFINE(HalpPCIReadUlongType2); -TYPE1_DEFINE(HalpPCIWriteUcharType1); -TYPE1_DEFINE(HalpPCIWriteUshortType1); -TYPE1_DEFINE(HalpPCIWriteUlongType1); -TYPE2_DEFINE(HalpPCIWriteUcharType2); -TYPE2_DEFINE(HalpPCIWriteUshortType2); -TYPE2_DEFINE(HalpPCIWriteUlongType2); - -BOOLEAN -NTAPI -HalpValidPCISlot( - IN PBUS_HANDLER BusHandler, - IN PCI_SLOT_NUMBER Slot -); - -VOID -NTAPI -HalpReadPCIConfig( - IN PBUS_HANDLER BusHandler, - IN PCI_SLOT_NUMBER Slot, - IN PVOID Buffer, - IN ULONG Offset, - IN ULONG Length -); - -VOID -NTAPI -HalpWritePCIConfig( - IN PBUS_HANDLER BusHandler, - IN PCI_SLOT_NUMBER Slot, - IN PVOID Buffer, - IN ULONG Offset, - IN ULONG Length -); - -ULONG -NTAPI -HalpGetSystemInterruptVector( - ULONG BusNumber, - ULONG BusInterruptLevel, - ULONG BusInterruptVector, - PKIRQL Irql, - PKAFFINITY Affinity -); - -ULONG -NTAPI -HalpGetCmosData( - IN ULONG BusNumber, - IN ULONG SlotNumber, - IN PVOID Buffer, - IN ULONG Length -); - -ULONG -NTAPI -HalpSetCmosData( - IN ULONG BusNumber, - IN ULONG SlotNumber, - IN PVOID Buffer, - IN ULONG Length -); - -ULONG -NTAPI -HalpGetPCIData( - IN PBUS_HANDLER BusHandler, - IN PBUS_HANDLER RootBusHandler, - IN PCI_SLOT_NUMBER SlotNumber, - IN PUCHAR Buffer, - IN ULONG Offset, - IN ULONG Length -); - -ULONG -NTAPI -HalpSetPCIData( - IN PBUS_HANDLER BusHandler, - IN PBUS_HANDLER RootBusHandler, - IN PCI_SLOT_NUMBER SlotNumber, - IN PUCHAR Buffer, - IN ULONG Offset, - IN ULONG Length -); - -NTSTATUS -NTAPI -HalpAssignPCISlotResources( - IN PBUS_HANDLER BusHandler, - IN PBUS_HANDLER RootHandler, - IN PUNICODE_STRING RegistryPath, - IN PUNICODE_STRING DriverClassName OPTIONAL, - IN PDRIVER_OBJECT DriverObject, - IN PDEVICE_OBJECT DeviceObject OPTIONAL, - IN ULONG Slot, - IN OUT PCM_RESOURCE_LIST *pAllocatedResources -); - -VOID -NTAPI -HalpInitializePciBus( - VOID -); - -extern ULONG HalpBusType; -extern BOOLEAN HalpPCIConfigInitialized; -extern BUS_HANDLER HalpFakePciBusHandler; -extern ULONG HalpMinPciBus, HalpMaxPciBus; - -#endif /* __INTERNAL_HAL_BUS_H */ - -/* EOF */ - - diff --git a/reactos/hal/halamd64/include/hal.h b/reactos/hal/halamd64/include/hal.h deleted file mode 100644 index c793782d06a..00000000000 --- a/reactos/hal/halamd64/include/hal.h +++ /dev/null @@ -1,52 +0,0 @@ -/* - * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS Hardware Abstraction Layer - * FILE: hal/halx86/include/hal.h - * PURPOSE: HAL Header - * PROGRAMMER: Alex Ionescu (alex@relsoft.net) - */ - -/* INCLUDES ******************************************************************/ - -/* C Headers */ -#include - -/* WDK HAL Compilation hack */ -#ifdef _MSC_VER -#include -#include -#undef _NTHAL_ -#undef DECLSPEC_IMPORT -#define DECLSPEC_IMPORT -#define __declspec(dllimport) -#endif - -/* IFS/DDK/NDK Headers */ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -/* Internal kernel headers */ -#include "internal/pci.h" -#include "internal/i386/intrin_i.h" - -/* Internal HAL Headers */ -//#include "apic.h" -#include "bus.h" -//#include "halirq.h" -//#include "haldma.h" -#include "halp.h" -//#include "mps.h" -//#include "ioapic.h" - -/* Helper Header */ -#include - -/* EOF */ diff --git a/reactos/hal/halamd64/include/halp.h b/reactos/hal/halamd64/include/halp.h deleted file mode 100644 index 4004a857dfe..00000000000 --- a/reactos/hal/halamd64/include/halp.h +++ /dev/null @@ -1,176 +0,0 @@ -/* - * - */ - -#ifndef __INTERNAL_HAL_HAL_H -#define __INTERNAL_HAL_HAL_H - -#define HAL_APC_REQUEST 0 -#define HAL_DPC_REQUEST 1 - -/* CMOS Registers and Ports */ -#define CMOS_CONTROL_PORT (PUCHAR)0x70 -#define CMOS_DATA_PORT (PUCHAR)0x71 -#define RTC_REGISTER_A 0x0A -#define RTC_REGISTER_B 0x0B -#define RTC_REG_A_UIP 0x80 -#define RTC_REGISTER_CENTURY 0x32 - -/* Timer Registers and Ports */ -#define TIMER_CONTROL_PORT 0x43 -#define TIMER_DATA_PORT0 0x40 -#define TIMER_SC0 0 -#define TIMER_BOTH 0x30 -#define TIMER_MD2 0x4 - -/* Conversion functions */ -#define BCD_INT(bcd) \ - (((bcd & 0xF0) >> 4) * 10 + (bcd & 0x0F)) -#define INT_BCD(int) \ - (UCHAR)(((int / 10) << 4) + (int % 10)) - -/* adapter.c */ -PADAPTER_OBJECT NTAPI HalpAllocateAdapterEx(ULONG NumberOfMapRegisters,BOOLEAN IsMaster, BOOLEAN Dma32BitAddresses); - -/* bus.c */ -VOID NTAPI HalpInitNonBusHandler (VOID); - -/* irql.c */ -VOID NTAPI HalpInitPICs(VOID); - -/* udelay.c */ -VOID NTAPI HalpInitializeClock(VOID); - -/* pci.c */ -VOID HalpInitPciBus (VOID); - -/* dma.c */ -VOID HalpInitDma (VOID); - -/* Non-generic initialization */ -VOID HalpInitPhase0 (PLOADER_PARAMETER_BLOCK LoaderBlock); -VOID HalpInitPhase1(VOID); -VOID NTAPI HalpClockInterrupt(VOID); - -// -// KD Support -// -VOID -NTAPI -HalpCheckPowerButton( - VOID -); - -VOID -NTAPI -HalpRegisterKdSupportFunctions( - VOID -); - -NTSTATUS -NTAPI -HalpSetupPciDeviceForDebugging( - IN PVOID LoaderBlock, - IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice -); - -NTSTATUS -NTAPI -HalpReleasePciDeviceForDebugging( - IN OUT PDEBUG_DEVICE_DESCRIPTOR PciDevice -); - -// -// Memory routines -// -PVOID -NTAPI -HalpMapPhysicalMemory64( - IN PHYSICAL_ADDRESS PhysicalAddress, - IN ULONG NumberPage -); - -VOID -NTAPI -HalpUnmapVirtualAddress( - IN PVOID VirtualAddress, - IN ULONG NumberPages -); - -/* sysinfo.c */ -NTSTATUS -NTAPI -HaliQuerySystemInformation( - IN HAL_QUERY_INFORMATION_CLASS InformationClass, - IN ULONG BufferSize, - IN OUT PVOID Buffer, - OUT PULONG ReturnedLength -); - -NTSTATUS -NTAPI -HaliSetSystemInformation( - IN HAL_SET_INFORMATION_CLASS InformationClass, - IN ULONG BufferSize, - IN OUT PVOID Buffer -); - -// -// BIOS Routines -// -BOOLEAN -NTAPI -HalpBiosDisplayReset( - VOID -); - -ULONG -NTAPI -HalpBorrowTss( - VOID -); - -ULONG -NTAPI -HalpReturnTss( - ULONG SavedTss -); - -VOID -NTAPI -HalpBiosCall( - VOID -); - -VOID -NTAPI -HalpTrap0D( - VOID -); - -VOID -NTAPI -HalpTrap06( - VOID -); - -PDMA_ADAPTER -NTAPI -HalpGetDmaAdapter( - IN PVOID Context, - IN PDEVICE_DESCRIPTION DeviceDescription, - OUT PULONG NumberOfMapRegisters); - -VOID HaliInitBSP(VOID); -VOID HaliStartApplicationProcessor(ULONG Cpu, ULONG Stack); - -VOID NTAPI HalpInitIdtEntry(PKIDTENTRY64 Idt, PVOID Address); -VOID NTAPI HalpSetInterruptGate(ULONG Index, PVOID Address); -VOID NTAPI HalpInitCpuInterruptHandling(ULONG Cpu); - -extern PVOID HalpRealModeStart; -extern PVOID HalpRealModeEnd; - -extern KSPIN_LOCK HalpSystemHardwareLock; - -#endif /* __INTERNAL_HAL_HAL_H */ diff --git a/reactos/hal/halamd64/generic/halinit.c b/reactos/hal/halx86/generic/amd64/halinit.c similarity index 100% rename from reactos/hal/halamd64/generic/halinit.c rename to reactos/hal/halx86/generic/amd64/halinit.c diff --git a/reactos/hal/halamd64/generic/misc.c b/reactos/hal/halx86/generic/amd64/misc.c similarity index 100% rename from reactos/hal/halamd64/generic/misc.c rename to reactos/hal/halx86/generic/amd64/misc.c diff --git a/reactos/hal/halamd64/generic/pic.c b/reactos/hal/halx86/generic/amd64/pic.c similarity index 100% rename from reactos/hal/halamd64/generic/pic.c rename to reactos/hal/halx86/generic/amd64/pic.c diff --git a/reactos/hal/halamd64/generic/usage.c b/reactos/hal/halx86/generic/amd64/usage.c similarity index 100% rename from reactos/hal/halamd64/generic/usage.c rename to reactos/hal/halx86/generic/amd64/usage.c diff --git a/reactos/hal/halx86/hal_generic.rbuild b/reactos/hal/halx86/hal_generic.rbuild index 3b465cc819e..b2acc9bc052 100644 --- a/reactos/hal/halx86/hal_generic.rbuild +++ b/reactos/hal/halx86/hal_generic.rbuild @@ -38,8 +38,12 @@ + halinit.c irq.s + misc.c + pic.c systimer.S + usage.c diff --git a/reactos/hal/halx86/halamd64.rbuild b/reactos/hal/halx86/halamd64.rbuild index 43126c4a08a..2db1ca91afd 100644 --- a/reactos/hal/halx86/halamd64.rbuild +++ b/reactos/hal/halx86/halamd64.rbuild @@ -7,7 +7,6 @@ include - hal_generic_amd64 hal_generic hal_generic_up ntoskrnl @@ -17,7 +16,9 @@ halup.rc - + + + mps.S + + diff --git a/reactos/hal/halx86/halmps.rbuild b/reactos/hal/halx86/halmps.rbuild index 7aededdb93e..35c2556ba2e 100644 --- a/reactos/hal/halx86/halmps.rbuild +++ b/reactos/hal/halx86/halmps.rbuild @@ -16,12 +16,14 @@ ioapic.c ipi_mp.c mpconfig.c - mps.S - mpsboot.asm mpsirql.c processor_mp.c - spinlock.c halmp.rc + + mps.S + mpsboot.asm + spinlock.c + diff --git a/reactos/hal/halamd64/generic/mps.S b/reactos/hal/halx86/mp/amd64/mps.S similarity index 100% rename from reactos/hal/halamd64/generic/mps.S rename to reactos/hal/halx86/mp/amd64/mps.S diff --git a/reactos/hal/halx86/mp/mps.S b/reactos/hal/halx86/mp/i386/mps.S similarity index 100% rename from reactos/hal/halx86/mp/mps.S rename to reactos/hal/halx86/mp/i386/mps.S diff --git a/reactos/hal/halx86/mp/mpsboot.asm b/reactos/hal/halx86/mp/i386/mpsboot.asm similarity index 100% rename from reactos/hal/halx86/mp/mpsboot.asm rename to reactos/hal/halx86/mp/i386/mpsboot.asm diff --git a/reactos/hal/halx86/mp/spinlock.c b/reactos/hal/halx86/mp/i386/spinlock.c similarity index 100% rename from reactos/hal/halx86/mp/spinlock.c rename to reactos/hal/halx86/mp/i386/spinlock.c From e609c186514ee31aa2cba19878fcc7709d417aa5 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 31 Dec 2009 21:31:14 +0000 Subject: [PATCH 279/286] fix spec file for x86 svn path=/branches/ros-amd64-bringup/; revision=44836 --- reactos/hal/hal.pspec | 1 + 1 file changed, 1 insertion(+) diff --git a/reactos/hal/hal.pspec b/reactos/hal/hal.pspec index 572425b2767..68060f1e293 100644 --- a/reactos/hal/hal.pspec +++ b/reactos/hal/hal.pspec @@ -1,4 +1,5 @@ #include "include/reactos/msvctarget.h" +#undef i386 #ifdef _M_ARM @ fastcall ExAcquireFastMutex(ptr) From a4123875f0e5df30d2f84fcb674d6a7f04bec796 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 31 Dec 2009 21:43:20 +0000 Subject: [PATCH 280/286] fix build of halxbox svn path=/branches/ros-amd64-bringup/; revision=44837 --- reactos/hal/halx86/halxbox.rbuild | 5 ----- 1 file changed, 5 deletions(-) diff --git a/reactos/hal/halx86/halxbox.rbuild b/reactos/hal/halx86/halxbox.rbuild index 60a06cee4d4..7996e653931 100644 --- a/reactos/hal/halx86/halxbox.rbuild +++ b/reactos/hal/halx86/halxbox.rbuild @@ -10,11 +10,6 @@ hal_generic hal_generic_up ntoskrnl - - - pcibus.c - - halinit_xbox.c part_xbox.c From a1bc42e31a9111466061d2a80adc5866b52eacbc Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 31 Dec 2009 23:45:36 +0000 Subject: [PATCH 281/286] [HAL] Replace the asm implementations of HalpAcquireSystemHardwareSpinLock and HalpReleaseCmosSpinLock with C implementations. The old ones didn't work on SMP, as they were only compiled once as UP. svn path=/branches/ros-amd64-bringup/; revision=44840 --- reactos/hal/halx86/generic/amd64/systimer.S | 15 ----- reactos/hal/halx86/generic/cmos.c | 43 +++++++++++++ reactos/hal/halx86/generic/i386/systimer.S | 71 --------------------- 3 files changed, 43 insertions(+), 86 deletions(-) diff --git a/reactos/hal/halx86/generic/amd64/systimer.S b/reactos/hal/halx86/generic/amd64/systimer.S index a0482cce014..2a7dcff56f3 100644 --- a/reactos/hal/halx86/generic/amd64/systimer.S +++ b/reactos/hal/halx86/generic/amd64/systimer.S @@ -14,9 +14,6 @@ .data -_UnhandledMsg: - .asciz "\n\x7\x7!!! Unhandled or Unexpected Code at line: %lx!!!\n" - .global _MsgUnimplemented _MsgUnimplemented: .asciz "WARNING: %s at %s:%d is UNIMPLEMENTED!\n" @@ -27,18 +24,6 @@ _MsgUnimplemented: .text .code64 -.global _HalpReleaseCmosSpinLock -.func HalpReleaseCmosSpinLock -_HalpReleaseCmosSpinLock: - -.endfunc - -.global _HalpAcquireSystemHardwareSpinLock -.func HalpAcquireSystemHardwareSpinLock -_HalpAcquireSystemHardwareSpinLock: - -.endfunc - .global _HalpCalibrateStallExecution@0 .func HalpCalibrateStallExecution@0 _HalpCalibrateStallExecution@0: diff --git a/reactos/hal/halx86/generic/cmos.c b/reactos/hal/halx86/generic/cmos.c index 754d360a543..de5c443de94 100644 --- a/reactos/hal/halx86/generic/cmos.c +++ b/reactos/hal/halx86/generic/cmos.c @@ -5,6 +5,7 @@ * PURPOSE: CMOS Access Routines (Real Time Clock and LastKnownGood) * PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org) * Eric Kohl (ekohl@abo.rhein-zeitung.de) + * Timo Kreuzer (timo.kreuzer@reactos.org) */ /* INCLUDES ******************************************************************/ @@ -17,9 +18,51 @@ KSPIN_LOCK HalpSystemHardwareLock; UCHAR HalpCmosCenturyOffset; +ULONG HalpSystemHardwareFlags; /* PRIVATE FUNCTIONS *********************************************************/ +VOID +NTAPI +HalpAcquireSystemHardwareSpinLock(VOID) +{ + ULONG Flags; + + /* Get flags and disable interrupts */ + Flags = __readeflags(); + _disable(); + + /* Try to acquire the lock */ + while (InterlockedBitTestAndSet((PLONG)&HalpSystemHardwareLock, 0)) + { + /* Lock is held, short wait and try again */ + YieldProcessor(); + } + + /* We have the lock, save the flags now */ + HalpSystemHardwareFlags = Flags; +} + +VOID +NTAPI +HalpReleaseCmosSpinLock(VOID) +{ + ULONG Flags; + + /* Get the flags */ + Flags = HalpSystemHardwareFlags; + + /* Release lock and check if we owned it */ + if (!InterlockedBitTestAndReset((PLONG)&HalpSystemHardwareLock, 0)) + { + /* The spin lock was not owned! */ + KeBugCheckEx(SPIN_LOCK_NOT_OWNED, 0, 0, 0, 0); + } + + /* Restore the flags */ + __writeeflags(Flags); +} + FORCEINLINE UCHAR HalpReadCmos(IN UCHAR Reg) diff --git a/reactos/hal/halx86/generic/i386/systimer.S b/reactos/hal/halx86/generic/i386/systimer.S index 62f11c1d5d1..16c1bc1f5da 100644 --- a/reactos/hal/halx86/generic/i386/systimer.S +++ b/reactos/hal/halx86/generic/i386/systimer.S @@ -17,83 +17,12 @@ _HalpLastPerfCounterLow: .long 0 _HalpLastPerfCounterHigh: .long 0 _HalpPerfCounterLow: .long 0 _HalpPerfCounterHigh: .long 0 -_HalpSystemHardwareFlags: .long 0 _UnhandledMsg: .asciz "\n\x7\x7!!! Unhandled or Unexpected Code at line: %lx!!!\n" /* FUNCTIONS *****************************************************************/ -.global _HalpReleaseCmosSpinLock@0 -.func HalpReleaseCmosSpinLock@0 -_HalpReleaseCmosSpinLock@0: - -#ifdef CONFIG_SMP - /* Save clobbered register */ - push eax - - /* Push saved EFLAGS */ - push _HalpSystemHardwareFlags - - /* Release the lock */ - lea eax, _HalpSystemHardwareLock - RELEASE_SPINLOCK(eax) - - /* Restore EFLAGS */ - popf - - /* Return */ - pop eax - ret -#else - /* Restore EFLAGS and return */ - push _HalpSystemHardwareFlags - popf - ret -#endif - -.endfunc - -.global _HalpAcquireSystemHardwareSpinLock@0 -.func HalpAcquireSystemHardwareSpinLock@0 -_HalpAcquireSystemHardwareSpinLock@0: - -#ifdef CONFIG_SMP - /* Save clobbered register */ - push eax - -HardwareLock: - /* Save EFLAGS and disable interrupts */ - pushf - cli - - /* This is the CMOS lock, acquire it */ - lea eax, _HalpSystemHardwareLock - ACQUIRE_SPINLOCK(eax, CmosSpin) - - /* We have it, return the flags */ - pop _HalpSystemHardwareFlags - pop eax - ret - -CmosSpin: - - /* Restore EFLAGS */ - pushf _HalpSystemHardwareLock - popf - - /* Spin */ - SPIN_ON_LOCK(eax, HardwareLock) -#else - /* Save EFLAGS, disable interrupts and return */ - pushf - cli - pop _HalpSystemHardwareFlags - ret -#endif - -.endfunc - .global _HalpCalibrateStallExecution@0 .func HalpCalibrateStallExecution@0 _HalpCalibrateStallExecution@0: From d786ac57d2298415d1f5c6e1ce8ffc41bf42fee8 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Fri, 1 Jan 2010 12:17:24 +0000 Subject: [PATCH 282/286] [HAL] Don't spin with an interlocked operation. svn path=/branches/ros-amd64-bringup/; revision=44849 --- reactos/hal/halx86/generic/cmos.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/reactos/hal/halx86/generic/cmos.c b/reactos/hal/halx86/generic/cmos.c index de5c443de94..abcf18f970a 100644 --- a/reactos/hal/halx86/generic/cmos.c +++ b/reactos/hal/halx86/generic/cmos.c @@ -35,8 +35,9 @@ HalpAcquireSystemHardwareSpinLock(VOID) /* Try to acquire the lock */ while (InterlockedBitTestAndSet((PLONG)&HalpSystemHardwareLock, 0)) { - /* Lock is held, short wait and try again */ - YieldProcessor(); + /* Lock is held, spin until it's free */ + while (*(volatile ULONG*)HalpSystemHardwareLock & 1) + YieldProcessor(); } /* We have the lock, save the flags now */ From 27d2ac3ad6ff4738e7c3091913f2f4207a9e39bb Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 2 Jan 2010 16:22:43 +0000 Subject: [PATCH 283/286] [KE] - KxAcquireSpinLock: check for already owned lock only on debug builds, fix check in inner loop, don't call Kii386SpinOnSpinLock inside the inner loop, but instead of it, simplify the code - stubplement Kii386SpinOnSpinLock in C svn path=/branches/ros-amd64-bringup/; revision=44886 --- reactos/ntoskrnl/include/internal/ke_x.h | 46 +++++++++++------------- reactos/ntoskrnl/ke/i386/trap.s | 28 --------------- reactos/ntoskrnl/ke/spinlock.c | 19 ++++++++++ 3 files changed, 39 insertions(+), 54 deletions(-) diff --git a/reactos/ntoskrnl/include/internal/ke_x.h b/reactos/ntoskrnl/include/internal/ke_x.h index e8945ff3b59..a23b2c22c38 100644 --- a/reactos/ntoskrnl/include/internal/ke_x.h +++ b/reactos/ntoskrnl/include/internal/ke_x.h @@ -101,6 +101,10 @@ KeGetPreviousMode(VOID) } \ } +VOID +NTAPI +Kii386SpinOnSpinLock(PKSPIN_LOCK SpinLock, ULONG Flags); + #ifndef CONFIG_SMP // // Spinlock Acquire at IRQL >= DISPATCH_LEVEL @@ -310,44 +314,34 @@ FORCEINLINE VOID KxAcquireSpinLock(IN PKSPIN_LOCK SpinLock) { +#ifdef DBG /* Make sure that we don't own the lock already */ if (((KSPIN_LOCK)KeGetCurrentThread() | 1) == *SpinLock) { /* We do, bugcheck! */ KeBugCheckEx(SPIN_LOCK_ALREADY_OWNED, (ULONG_PTR)SpinLock, 0, 0, 0); } +#endif - /* Start acquire loop */ - for (;;) + /* Try to acquire the lock */ + while (InterlockedBitTestAndSet((PLONG)SpinLock, 0)) { - /* Try to acquire it */ - if (InterlockedBitTestAndSet((PLONG)SpinLock, 0)) - { - /* Value changed... wait until it's unlocked */ - while (*(volatile KSPIN_LOCK *)SpinLock == 1) - { -#if DBG - /* On debug builds, we use a much slower but useful routine */ - //Kii386SpinOnSpinLock(SpinLock, 5); - - /* FIXME: Do normal yield for now */ - YieldProcessor(); +#if defined(_M_IX86) && defined(DBG) + /* On x86 debug builds, we use a much slower but useful routine */ + Kii386SpinOnSpinLock(SpinLock, 5); #else - /* Otherwise, just yield and keep looping */ - YieldProcessor(); -#endif - } - } - else + /* It's locked... spin until it's unlocked */ + while (*(volatile KSPIN_LOCK *)SpinLock & 1) { -#if DBG - /* On debug builds, we OR in the KTHREAD */ - *SpinLock = (KSPIN_LOCK)KeGetCurrentThread() | 1; -#endif - /* All is well, break out */ - break; + /* Yield and keep looping */ + YieldProcessor(); } +#endif } +#ifdef DBG + /* On debug builds, we OR in the KTHREAD */ + *SpinLock = (KSPIN_LOCK)KeGetCurrentThread() | 1; +#endif } // diff --git a/reactos/ntoskrnl/ke/i386/trap.s b/reactos/ntoskrnl/ke/i386/trap.s index c8458c387ed..df49ea0f003 100644 --- a/reactos/ntoskrnl/ke/i386/trap.s +++ b/reactos/ntoskrnl/ke/i386/trap.s @@ -2828,31 +2828,3 @@ _KeSynchronizeExecution@12: ret 12 .endfunc -/*++ - * Kii386SpinOnSpinLock - * - * FILLMEIN - * - * Params: - * SpinLock - FILLMEIN - * - * Flags - FILLMEIN - * - * Returns: - * None. - * - * Remarks: - * FILLMEIN - * - *--*/ -.globl _Kii386SpinOnSpinLock@8 -.func Kii386SpinOnSpinLock@8 -_Kii386SpinOnSpinLock@8: - -#ifdef CONFIG_SMP - /* FIXME: TODO */ - int 3 -#endif - - ret 8 -.endfunc diff --git a/reactos/ntoskrnl/ke/spinlock.c b/reactos/ntoskrnl/ke/spinlock.c index 399800b53c7..0a98b330fd0 100644 --- a/reactos/ntoskrnl/ke/spinlock.c +++ b/reactos/ntoskrnl/ke/spinlock.c @@ -454,3 +454,22 @@ KeTestSpinLock(IN PKSPIN_LOCK SpinLock) /* Spinlock appears to be free */ return TRUE; } + +#ifdef _M_IX86 +VOID +NTAPI +Kii386SpinOnSpinLock(PKSPIN_LOCK SpinLock, ULONG Flags) +{ + // FIXME: Handle flags + UNREFERENCED_PARAMETER(Flags); + + /* Spin until it's unlocked */ + while (*(volatile KSPIN_LOCK *)SpinLock & 1) + { + // FIXME: Check for timeout + + /* Yield and keep looping */ + YieldProcessor(); + } +} +#endif From d9cec98933089f085b76c725fdfc7b3a83dca481 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 2 Jan 2010 16:31:41 +0000 Subject: [PATCH 284/286] [KE] Move the .text and .code64 tag before all functions in trap.S svn path=/branches/ros-amd64-bringup/; revision=44887 --- reactos/ntoskrnl/ke/amd64/trap.S | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/reactos/ntoskrnl/ke/amd64/trap.S b/reactos/ntoskrnl/ke/amd64/trap.S index 0b5a110d165..32c5153df50 100644 --- a/reactos/ntoskrnl/ke/amd64/trap.S +++ b/reactos/ntoskrnl/ke/amd64/trap.S @@ -234,6 +234,10 @@ _MsgTrapInfo: .endm +/* FUNCTIONS *****************************************************************/ + +.text +.code64 // rbp = TrapFrame, eax = ExceptionCode, edx = NumParams, r9,r10,r11 = params _InternalDispatchException: @@ -278,8 +282,6 @@ _InternalDispatchException: ret /* SOFTWARE INTERRUPT SERVICES ***********************************************/ -.text -.code64 .proc KiDivideErrorFault .pushframe 0 From 78490595edec2c03141825e1f26cdb20e6d885a2 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 2 Jan 2010 16:32:20 +0000 Subject: [PATCH 285/286] [KD64] - Remove unused variable svn path=/branches/ros-amd64-bringup/; revision=44888 --- reactos/ntoskrnl/kd64/amd64/kdx64.c | 1 - 1 file changed, 1 deletion(-) diff --git a/reactos/ntoskrnl/kd64/amd64/kdx64.c b/reactos/ntoskrnl/kd64/amd64/kdx64.c index d29b535aedb..9bb81b1b6ba 100644 --- a/reactos/ntoskrnl/kd64/amd64/kdx64.c +++ b/reactos/ntoskrnl/kd64/amd64/kdx64.c @@ -220,7 +220,6 @@ KdpSysWriteControlSpace(IN ULONG Processor, { PVOID ControlStart; PKPRCB Prcb = KiProcessorBlock[Processor]; - PKIPCR Pcr = CONTAINING_RECORD(Prcb, KIPCR, Prcb); switch (BaseAddress) { From 3a0ef6c524cdf23152c03554834877609af1ef26 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 2 Jan 2010 19:41:03 +0000 Subject: [PATCH 286/286] [NTOS] Move spinlock inline functions into their own header, so they can be shared with hal. svn path=/branches/ros-amd64-bringup/; revision=44893 --- reactos/ntoskrnl/include/internal/ke_x.h | 81 ----------------- reactos/ntoskrnl/include/internal/ntoskrnl.h | 1 + reactos/ntoskrnl/include/internal/spinlock.h | 95 ++++++++++++++++++++ 3 files changed, 96 insertions(+), 81 deletions(-) create mode 100644 reactos/ntoskrnl/include/internal/spinlock.h diff --git a/reactos/ntoskrnl/include/internal/ke_x.h b/reactos/ntoskrnl/include/internal/ke_x.h index a23b2c22c38..36c4bd43515 100644 --- a/reactos/ntoskrnl/include/internal/ke_x.h +++ b/reactos/ntoskrnl/include/internal/ke_x.h @@ -101,32 +101,7 @@ KeGetPreviousMode(VOID) } \ } -VOID -NTAPI -Kii386SpinOnSpinLock(PKSPIN_LOCK SpinLock, ULONG Flags); - #ifndef CONFIG_SMP -// -// Spinlock Acquire at IRQL >= DISPATCH_LEVEL -// -FORCEINLINE -VOID -KxAcquireSpinLock(IN PKSPIN_LOCK SpinLock) -{ - /* On UP builds, spinlocks don't exist at IRQL >= DISPATCH */ - UNREFERENCED_PARAMETER(SpinLock); -} - -// -// Spinlock Release at IRQL >= DISPATCH_LEVEL -// -FORCEINLINE -VOID -KxReleaseSpinLock(IN PKSPIN_LOCK SpinLock) -{ - /* On UP builds, spinlocks don't exist at IRQL >= DISPATCH */ - UNREFERENCED_PARAMETER(SpinLock); -} // // This routine protects against multiple CPU acquires, it's meaningless on UP. @@ -307,62 +282,6 @@ KiReleaseTimerLock(IN PKSPIN_LOCK_QUEUE LockQueue) #else -// -// Spinlock Acquisition at IRQL >= DISPATCH_LEVEL -// -FORCEINLINE -VOID -KxAcquireSpinLock(IN PKSPIN_LOCK SpinLock) -{ -#ifdef DBG - /* Make sure that we don't own the lock already */ - if (((KSPIN_LOCK)KeGetCurrentThread() | 1) == *SpinLock) - { - /* We do, bugcheck! */ - KeBugCheckEx(SPIN_LOCK_ALREADY_OWNED, (ULONG_PTR)SpinLock, 0, 0, 0); - } -#endif - - /* Try to acquire the lock */ - while (InterlockedBitTestAndSet((PLONG)SpinLock, 0)) - { -#if defined(_M_IX86) && defined(DBG) - /* On x86 debug builds, we use a much slower but useful routine */ - Kii386SpinOnSpinLock(SpinLock, 5); -#else - /* It's locked... spin until it's unlocked */ - while (*(volatile KSPIN_LOCK *)SpinLock & 1) - { - /* Yield and keep looping */ - YieldProcessor(); - } -#endif - } -#ifdef DBG - /* On debug builds, we OR in the KTHREAD */ - *SpinLock = (KSPIN_LOCK)KeGetCurrentThread() | 1; -#endif -} - -// -// Spinlock Release at IRQL >= DISPATCH_LEVEL -// -FORCEINLINE -VOID -KxReleaseSpinLock(IN PKSPIN_LOCK SpinLock) -{ -#if DBG - /* Make sure that the threads match */ - if (((KSPIN_LOCK)KeGetCurrentThread() | 1) != *SpinLock) - { - /* They don't, bugcheck */ - KeBugCheckEx(SPIN_LOCK_NOT_OWNED, (ULONG_PTR)SpinLock, 0, 0, 0); - } -#endif - /* Clear the lock */ - InterlockedAnd((PLONG)SpinLock, 0); -} - FORCEINLINE VOID KiAcquireDispatcherObject(IN DISPATCHER_HEADER* Object) diff --git a/reactos/ntoskrnl/include/internal/ntoskrnl.h b/reactos/ntoskrnl/include/internal/ntoskrnl.h index 72a55660fc5..7c812abb331 100644 --- a/reactos/ntoskrnl/include/internal/ntoskrnl.h +++ b/reactos/ntoskrnl/include/internal/ntoskrnl.h @@ -83,6 +83,7 @@ #include "../kdbg/kdb.h" #endif #include "dbgk.h" +#include "spinlock.h" #include "tag.h" #include "test.h" #include "inbv.h" diff --git a/reactos/ntoskrnl/include/internal/spinlock.h b/reactos/ntoskrnl/include/internal/spinlock.h new file mode 100644 index 00000000000..6d1ca71c231 --- /dev/null +++ b/reactos/ntoskrnl/include/internal/spinlock.h @@ -0,0 +1,95 @@ +/* +* PROJECT: ReactOS Kernel +* LICENSE: GPL - See COPYING in the top level directory +* FILE: ntoskrnl/include/spinlock.h +* PURPOSE: Internal Inlined Functions for spinlocks, shared with HAL +* PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org) +*/ + +VOID +NTAPI +Kii386SpinOnSpinLock(PKSPIN_LOCK SpinLock, ULONG Flags); + +#ifndef CONFIG_SMP + +// +// Spinlock Acquire at IRQL >= DISPATCH_LEVEL +// +FORCEINLINE +VOID +KxAcquireSpinLock(IN PKSPIN_LOCK SpinLock) +{ + /* On UP builds, spinlocks don't exist at IRQL >= DISPATCH */ + UNREFERENCED_PARAMETER(SpinLock); +} + +// +// Spinlock Release at IRQL >= DISPATCH_LEVEL +// +FORCEINLINE +VOID +KxReleaseSpinLock(IN PKSPIN_LOCK SpinLock) +{ + /* On UP builds, spinlocks don't exist at IRQL >= DISPATCH */ + UNREFERENCED_PARAMETER(SpinLock); +} + +#else + +// +// Spinlock Acquisition at IRQL >= DISPATCH_LEVEL +// +FORCEINLINE +VOID +KxAcquireSpinLock(IN PKSPIN_LOCK SpinLock) +{ +#ifdef DBG + /* Make sure that we don't own the lock already */ + if (((KSPIN_LOCK)KeGetCurrentThread() | 1) == *SpinLock) + { + /* We do, bugcheck! */ + KeBugCheckEx(SPIN_LOCK_ALREADY_OWNED, (ULONG_PTR)SpinLock, 0, 0, 0); + } +#endif + + /* Try to acquire the lock */ + while (InterlockedBitTestAndSet((PLONG)SpinLock, 0)) + { +#if defined(_M_IX86) && defined(DBG) + /* On x86 debug builds, we use a much slower but useful routine */ + Kii386SpinOnSpinLock(SpinLock, 5); +#else + /* It's locked... spin until it's unlocked */ + while (*(volatile KSPIN_LOCK *)SpinLock & 1) + { + /* Yield and keep looping */ + YieldProcessor(); + } +#endif + } +#ifdef DBG + /* On debug builds, we OR in the KTHREAD */ + *SpinLock = (KSPIN_LOCK)KeGetCurrentThread() | 1; +#endif +} + +// +// Spinlock Release at IRQL >= DISPATCH_LEVEL +// +FORCEINLINE +VOID +KxReleaseSpinLock(IN PKSPIN_LOCK SpinLock) +{ +#if DBG + /* Make sure that the threads match */ + if (((KSPIN_LOCK)KeGetCurrentThread() | 1) != *SpinLock) + { + /* They don't, bugcheck */ + KeBugCheckEx(SPIN_LOCK_NOT_OWNED, (ULONG_PTR)SpinLock, 0, 0, 0); + } +#endif + /* Clear the lock */ + InterlockedAnd((PLONG)SpinLock, 0); +} + +#endif