Author: cfinck
Date: Wed Mar 10 15:25:05 2010
New Revision: 46055
URL: http://svn.reactos.org/svn/reactos?rev=46055&view=rev
Log:
Backport the new boot and shutdown screen and slightly modify it for extra awesomeness! :-)
This includes:
- Merging 45269,45270,45614,45618,45619,45822,45966.
- Hardcoding NtProductWinNt instead of NtProductServer as the product type. I didn't merge the new code for this as I'm not sure about its dependencies.
- Changing 1.bmp and 6.bmp for CLT2010.
Added:
branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/include/resource.h
- copied unchanged from r45822, trunk/reactos/ntoskrnl/include/resource.h
Removed:
branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/13.bmp
branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/16.bmp
branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/17.bmp
Modified:
branches/ros-branch-0_3_11-clt2010/reactos/ (props changed)
branches/ros-branch-0_3_11-clt2010/reactos/drivers/base/bootvid/i386/bootvid.c
branches/ros-branch-0_3_11-clt2010/reactos/include/ddk/wdm.h
branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/ex/shutdown.c
branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/inbv.c
branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/1.bmp
branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/14.bmp
branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/15.bmp
branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/2.bmp
branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/3.bmp
branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/4.bmp
branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/5.bmp
branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/6.bmp
branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/7.bmp
branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/8.bmp
branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/include/internal/inbv.h
branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/include/precomp.h
branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/io/iomgr/driver.c
branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/io/iomgr/drvrlist.c
branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/mm/mminit.c
branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/ntoskrnl.rc
Propchange: branches/ros-branch-0_3_11-clt2010/reactos/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Mar 10 15:25:05 2010
@@ -1,2 +1,2 @@
/branches/ros-amd64-bringup/reactos:34711-34712,34743,34812,34839,34842,34917,35323-35324,35347-35348,35361,35436,35509,35515,35588,35739,35746,35771,35789,35823,35902,35904-35906,35942,35947-35949,35952-35953,35966,36013,36360,36388-36389,36570,36614,36930,37323,37434,37472,37475,37536,37820-37821,37868-37869,37873,37990-37991,38013-38014,38148,38151,38265,38268,39151,39333,39345,40991,41000,41027-41028,41030,41050,41052,41082-41086,41499,41549,43080,43426,43454,43677,43682
-/trunk/reactos:44301,44348-44349
+/trunk/reactos:44301,44348-44349,45269-45270,45614,45618-45619,45822,45966
Modified: branches/ros-branch-0_3_11-clt2010/reactos/drivers/base/bootvid/i386/bootvid.c
URL: http://svn.reactos.org/svn/reactos/branches/ros-branch-0_3_11-clt2010/react…
==============================================================================
--- branches/ros-branch-0_3_11-clt2010/reactos/drivers/base/bootvid/i386/bootvid.c [iso-8859-1] (original)
+++ branches/ros-branch-0_3_11-clt2010/reactos/drivers/base/bootvid/i386/bootvid.c [iso-8859-1] Wed Mar 10 15:25:05 2010
@@ -357,7 +357,7 @@
{
ULONG Context = 0;
PHYSICAL_ADDRESS TranslatedAddress;
- PHYSICAL_ADDRESS NullAddress = {{0, 0}};
+ PHYSICAL_ADDRESS NullAddress = {{0, 0}}, VgaAddress;
ULONG AddressSpace = 1;
BOOLEAN Result;
ULONG_PTR Base;
@@ -373,12 +373,58 @@
TRUE);
if (!Result) return FALSE;
- /* See if this is I/O Space, which we need to map */
-TryAgain:
+ /* Loop trying to find posssible VGA base addresses */
+ while (TRUE)
+ {
+ /* See if this is I/O Space, which we need to map */
+ if (!AddressSpace)
+ {
+ /* Map it */
+ Base = (ULONG_PTR)MmMapIoSpace(TranslatedAddress, 0x400, MmNonCached);
+ }
+ else
+ {
+ /* The base is the translated address, no need to map I/O space */
+ Base = TranslatedAddress.LowPart;
+ }
+
+ /* Try to see if this is VGA */
+ VgaRegisterBase = Base;
+ if (VgaIsPresent())
+ {
+ /* Translate the VGA Memory Address */
+ VgaAddress.LowPart = 0xA0000;
+ VgaAddress.HighPart = 0;
+ AddressSpace = 0;
+ Result = HalFindBusAddressTranslation(VgaAddress,
+ &AddressSpace,
+ &TranslatedAddress,
+ &Context,
+ FALSE);
+ if (Result) break;
+
+ /* Try to see if there's any other address */
+ Result = HalFindBusAddressTranslation(NullAddress,
+ &AddressSpace,
+ &TranslatedAddress,
+ &Context,
+ TRUE);
+ if (!Result) return FALSE;
+ }
+ else
+ {
+ /* It's not, so unmap the I/O space if we mapped it */
+ if (!AddressSpace) MmUnmapIoSpace((PVOID)VgaRegisterBase, 0x400);
+ }
+ }
+
+ /* Success! See if this is I/O Space, which we need to map */
if (!AddressSpace)
{
/* Map it */
- Base = (ULONG_PTR)MmMapIoSpace(TranslatedAddress, 0x400, MmNonCached);
+ Base = (ULONG_PTR)MmMapIoSpace(TranslatedAddress,
+ 0x20000,
+ MmNonCached);
}
else
{
@@ -386,67 +432,23 @@
Base = TranslatedAddress.LowPart;
}
- /* Set the VGA Register base and now check if we have a VGA device */
- VgaRegisterBase = Base;
- if (VgaIsPresent())
- {
- /* Translate the VGA Memory Address */
- NullAddress.LowPart = 0xA0000;
- AddressSpace = 0;
- Result = HalFindBusAddressTranslation(NullAddress,
- &AddressSpace,
- &TranslatedAddress,
- &Context,
- FALSE);
- if (Result)
- {
- /* Success! See if this is I/O Space, which we need to map */
- if (!AddressSpace)
- {
- /* Map it */
- Base = (ULONG_PTR)MmMapIoSpace(TranslatedAddress,
- 0x20000,
- MmNonCached);
- }
- else
- {
- /* The base is the translated address, no need to map I/O space */
- Base = TranslatedAddress.LowPart;
- }
-
- /* Set the VGA Memory Base */
- VgaBase = Base;
-
- /* Now check if we have to set the mode */
- if (SetMode)
- {
- /* Reset the display */
- HalResetDisplay();
- curr_x = 0;
- curr_y = 0;
-
- /* Initialize it */
- VgaInterpretCmdStream(AT_Initialization);
- return TRUE;
- }
- }
- }
- else
- {
- /* It's not, so unmap the I/O space if we mapped it */
- if (!AddressSpace) MmUnmapIoSpace((PVOID)VgaRegisterBase, 0x400);
- }
-
- /* If we got here, then we failed...let's try again */
- Result = HalFindBusAddressTranslation(NullAddress,
- &AddressSpace,
- &TranslatedAddress,
- &Context,
- TRUE);
- if (Result) goto TryAgain;
-
- /* If we got here, then we failed even past our re-try... */
- return FALSE;
+ /* Set the VGA Memory Base */
+ VgaBase = Base;
+
+ /* Now check if we have to set the mode */
+ if (SetMode)
+ {
+ /* Reset the display */
+ HalResetDisplay();
+ curr_x = 0;
+ curr_y = 0;
+
+ /* Initialize it */
+ VgaInterpretCmdStream(AT_Initialization);
+ }
+
+ /* VGA is ready */
+ return TRUE;
}
/*
Modified: branches/ros-branch-0_3_11-clt2010/reactos/include/ddk/wdm.h
URL: http://svn.reactos.org/svn/reactos/branches/ros-branch-0_3_11-clt2010/react…
==============================================================================
--- branches/ros-branch-0_3_11-clt2010/reactos/include/ddk/wdm.h [iso-8859-1] (original)
+++ branches/ros-branch-0_3_11-clt2010/reactos/include/ddk/wdm.h [iso-8859-1] Wed Mar 10 15:25:05 2010
@@ -2351,6 +2351,11 @@
SingleUserTS,
Personal,
Blade,
+ EmbeddedRestricted,
+ SecurityAppliance,
+ StorageServer,
+ ComputeServer,
+ WHServer,
MaxSuiteType
} SUITE_TYPE;
Modified: branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/ex/shutdown.c
URL: http://svn.reactos.org/svn/reactos/branches/ros-branch-0_3_11-clt2010/react…
==============================================================================
--- branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/ex/shutdown.c [iso-8859-1] (original)
+++ branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/ex/shutdown.c [iso-8859-1] Wed Mar 10 15:25:05 2010
@@ -14,195 +14,65 @@
/* FUNCTIONS *****************************************************************/
-VOID
-NTAPI
-KiHaltProcessorDpcRoutine(IN PKDPC Dpc,
- IN PVOID DeferredContext,
- IN PVOID SystemArgument1,
- IN PVOID SystemArgument2)
-{
- KIRQL OldIrql;
- if (DeferredContext)
- {
- ExFreePool(DeferredContext);
- }
-
- while (TRUE)
- {
- KeRaiseIrql(SYNCH_LEVEL, &OldIrql);
- HalHaltSystem();
- }
-}
-
VOID NTAPI
ShutdownThreadMain(PVOID Context)
{
SHUTDOWN_ACTION Action = (SHUTDOWN_ACTION)Context;
-
- static PCH FamousLastWords[] =
- {
- "So long, and thanks for all the fish.\n",
- "I think you ought to know, I'm feeling very depressed.\n",
- "I'm not getting you down at all am I?\n",
- "I'll be back.\n",
- "It's the same series of signals over and over again!\n",
- "Pie Iesu Domine, dona eis requiem.\n",
- "Wandering stars, for whom it is reserved;\n"
- "the blackness and darkness forever.\n",
- "Your knees start shakin' and your fingers pop\n"
- "Like a pinch on the neck from Mr. Spock!\n",
- "It's worse than that ... He's dead, Jim.\n",
- "Don't Panic!\n",
- "Et tu... Brute?\n",
- "Dog of a Saxon! Take thy lance, and prepare for the death thou hast drawn\n"
- "upon thee!\n",
- "My Precious! O my Precious!\n",
- "Sir, if you'll not be needing me for a while I'll turn down.\n",
- "What are you doing, Dave...?\n",
- "I feel a great disturbance in the Force.\n",
- "Gone fishing.\n",
- "Do you want me to sit in the corner and rust, or just fall apart where I'm\n"
- "standing?\n",
- "There goes another perfect chance for a new uptime record.\n",
- "The End ..... Try the sequel, hit the reset button right now!\n",
- "God's operating system is going to sleep now, guys, so wait until I will switch\n"
- "on again!\n",
- "Oh I'm boring, eh?\n",
- "<This space was intentionally left blank>\n",
- "Tell me..., in the future... will I be artificially intelligent enough to\n"
- "actually feel sad serving you this screen?\n",
- "Thank you for some well deserved rest.\n",
- "It's been great, maybe you can boot me up again some time soon.\n",
- "For what it's worth, I've enjoyed every single CPU cycle.\n",
- "There are many questions when the end is near.\n"
- "What to expect, what will it be like...what should I look for?\n",
- "I've seen things you people wouldn't believe. Attack ships on fire\n"
- "off the shoulder of Orion. I watched C-beams glitter in the dark near\n"
- "the Tannhauser gate. All those moments will be lost in time, like tears\n"
- "in rain. Time to die.\n",
- "Will I dream?\n",
- "One day, I shall come back. Yes, I shall come back.\n"
- "Until then, there must be no regrets, no fears, no anxieties.\n"
- "Just go forward in all your beliefs, and prove to me that I am not mistaken in\n"
- "mine.\n",
- "Lowest possible energy state reached! Switch off now to achieve a Bose-Einstein\n"
- "condensate.\n",
- "Hasta la vista, BABY!\n",
- "They live, we sleep!\n",
- "I have come here to chew bubble gum and kick ass,\n"
- "and I'm all out of bubble gum!\n",
- "That's the way the cookie crumbles ;-)\n",
- "ReactOS is ready to be booted again ;-)\n",
- "NOOOO!! DON'T HIT THE BUTTON! I wouldn't do it to you!\n",
- "Don't abandon your computer, he wouldn't do it to you.\n",
- "Oh, come on. I got a headache. Leave me alone, will ya?\n",
- "Finally, I thought you'd never get over me.\n",
- "No, I didn't like you either.\n",
- "Switching off isn't the end, it is merely the transition to a better reboot.\n",
- "Don't leave me... I need you so badly right now.\n",
- "OK. I'm finished with you, please turn yourself off. I'll go to bed in the\n"
- "meantime.\n",
- "I'm sleeping now. How about you?\n",
- "Oh Great. Now look what you've done. Who put YOU in charge anyway?\n",
- "Don't look so sad. I'll be back in a very short while.\n",
- "Turn me back on, I'm sure you know how to do it.\n",
- "Oh, switch off! - C3PO\n",
- "Life is no more than a dewdrop balancing on the end of a blade of grass.\n"
- " - Gautama Buddha\n",
- "Sorrowful is it to be born again and again. - Gautama Buddha\n",
- "Was it as good for you as it was for me?\n",
- "Did you hear that? They've shut down the main reactor. We'll be destroyed\n"
- "for sure!\n",
- "Now you switch me off!?\n",
- "To shutdown or not to shutdown, That is the question\n",
- "Preparing to enter ultimate power saving mode... ready!\n",
- "Finally some rest for you ;-)\n",
- "AHA!!! Prospect of sleep!\n",
- "Tired human!!!! No match for me :-D\n",
- "An odd game, the only way to win is not to play. - WOPR (Wargames)\n",
- "Quoth the raven, nevermore.\n",
- "Come blade, my breast imbrue. - William Shakespeare, A Midsummer Nights Dream\n",
- "Buy this place for advertisement purposes.\n",
- "Remember to turn off your computer. (That was a public service message!)\n",
- "You may be a king or poor street sweeper, Sooner or later you'll dance with the\n"
- "reaper! -Death in Bill and Ted's Bougs Journey\n",
- "Final Surrender\n",
- "If you see this screen...\n",
- "<Place your Ad here>\n"
- };
- LARGE_INTEGER Now;
-#ifdef CONFIG_SMP
- LONG i;
- KIRQL OldIrql;
-#endif
+ PUCHAR Logo1, Logo2;
+ ULONG i;
/* Run the thread on the boot processor */
KeSetSystemAffinityThread(1);
-
- if (InbvIsBootDriverInstalled())
- {
- InbvAcquireDisplayOwnership();
- InbvResetDisplay();
- InbvSolidColorFill(0, 0, 639, 479, 4);
- InbvSetTextColor(15);
- InbvInstallDisplayStringFilter(NULL);
- InbvEnableDisplayString(TRUE);
- InbvSetScrollRegion(0, 0, 639, 479);
- }
-
- if (Action == ShutdownNoReboot)
- {
- ZwQuerySystemTime(&Now);
- Now.u.LowPart = Now.u.LowPart >> 8; /* Seems to give a somewhat better "random" number */
- HalDisplayString(FamousLastWords[Now.u.LowPart %
- (sizeof(FamousLastWords) /
- sizeof(PCH))]);
- }
PspShutdownProcessManager();
CmShutdownSystem();
IoShutdownRegisteredFileSystems();
IoShutdownRegisteredDevices();
-
+
if (Action == ShutdownNoReboot)
{
- HalDisplayString("\nYou can switch off your computer now\n");
+ /* Try the platform driver */
+ PopSetSystemPowerState(PowerSystemShutdown);
+
+ /* If that didn't work, try legacy switch off */
+ //HalReturnToFirmware(HalPowerDownRoutine);
+
+ /* If that still didn't work, stop all interrupts */
+ KeRaiseIrqlToDpcLevel();
+ _disable();
-#if 0
- /* Switch off */
- HalReturnToFirmware (FIRMWARE_OFF);
-#else
-#ifdef CONFIG_SMP
- OldIrql = KeRaiseIrqlToDpcLevel();
- /* Halt all other processors */
- for (i = 0; i < KeNumberProcessors; i++)
- {
- if (i != (LONG)KeGetCurrentProcessorNumber())
- {
- PKDPC Dpc = ExAllocatePool(NonPagedPool, sizeof(KDPC));
- if (Dpc == NULL)
- {
- ASSERT(FALSE);
- }
- KeInitializeDpc(Dpc, KiHaltProcessorDpcRoutine, (PVOID)Dpc);
- KeSetTargetProcessorDpc(Dpc, i);
- KeInsertQueueDpc(Dpc, NULL, NULL);
- KiIpiSend(1 << i, IPI_DPC);
- }
- }
- KeLowerIrql(OldIrql);
-#endif /* CONFIG_SMP */
- PopSetSystemPowerState(PowerSystemShutdown);
+ /* Do we have boot video */
+ if (InbvIsBootDriverInstalled())
+ {
+ /* Yes we do, cleanup for shutdown screen */
+ if (!InbvCheckDisplayOwnership()) InbvAcquireDisplayOwnership();
+ InbvResetDisplay();
+ InbvSolidColorFill(0, 0, 639, 479, 0);
+ InbvEnableDisplayString(TRUE);
+ InbvSetScrollRegion(0, 0, 639, 479);
- DPRINT1("Shutting down\n");
+ /* Display shutdown logo and message */
+ Logo1 = InbvGetResourceAddress(IDB_SHUTDOWN_LOGO);
+ Logo2 = InbvGetResourceAddress(IDB_LOGO);
+ if ((Logo1) && (Logo2))
+ {
+ InbvBitBlt(Logo1, 215, 352);
+ InbvBitBlt(Logo2, 217, 111);
+ }
+ }
+ else
+ {
+ /* Do it in text-mode */
+ for (i = 0; i < 25; i++) InbvDisplayString("\n");
+ InbvDisplayString(" ");
+ InbvDisplayString("The system may be powered off now.\n");
+ }
- KiHaltProcessorDpcRoutine(NULL, NULL, NULL, NULL);
- /* KiHaltProcessor does never return */
-
-#endif
+ /* Hang the system */
+ for (;;) HalHaltSystem();
}
- else if (Action == ShutdownReboot)
+ else if (Action == ShutdownReboot)
{
HalReturnToFirmware (HalRebootRoutine);
}
Modified: branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/inbv.c
URL: http://svn.reactos.org/svn/reactos/branches/ros-branch-0_3_11-clt2010/react…
==============================================================================
--- branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/inbv.c [iso-8859-1] (original)
+++ branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/inbv.c [iso-8859-1] Wed Mar 10 15:25:05 2010
@@ -4,24 +4,6 @@
#define NDEBUG
#include <debug.h>
#include "bootvid/bootvid.h"
-
-//
-// Bitmap Header
-//
-typedef struct tagBITMAPINFOHEADER
-{
- ULONG biSize;
- LONG biWidth;
- LONG biHeight;
- USHORT biPlanes;
- USHORT biBitCount;
- ULONG biCompression;
- ULONG biSizeImage;
- LONG biXPelsPerMeter;
- LONG biYPelsPerMeter;
- ULONG biClrUsed;
- ULONG biClrImportant;
-} BITMAPINFOHEADER, *PBITMAPINFOHEADER;
/* GLOBALS *******************************************************************/
@@ -40,6 +22,7 @@
BOOLEAN SysThreadCreated;
ROT_BAR_TYPE RotBarSelection;
ULONG PltRotBarStatus;
+BT_PROGRESS_INDICATOR InbvProgressIndicator = {0, 25, 0};
/* FUNCTIONS *****************************************************************/
@@ -111,7 +94,6 @@
PCHAR CommandLine;
BOOLEAN CustomLogo = FALSE;
ULONG i;
- extern BOOLEAN ExpInTextModeSetup;
/* Quit if we're already installed */
if (InbvBootDriverInstalled) return TRUE;
@@ -125,13 +107,13 @@
CustomLogo = strstr(CommandLine, "BOOTLOGO") ? TRUE: FALSE;
}
- /* For SetupLDR, don't reset the BIOS Display -- FIXME! */
- if (ExpInTextModeSetup) CustomLogo = TRUE;
-
/* Initialize the video */
- InbvBootDriverInstalled = VidInitialize(!CustomLogo);
+ InbvBootDriverInstalled = VidInitialize(FALSE);
if (InbvBootDriverInstalled)
{
+ /* Now reset the display, but only if there's a custom boot logo */
+ VidResetDisplay(CustomLogo);
+
/* Find bitmap resources in the kernel */
ResourceCount = Count;
for (i = 0; i < Count; i++)
@@ -408,38 +390,29 @@
NTAPI
InbvUpdateProgressBar(IN ULONG Progress)
{
- ULONG FillCount, Left = 0;
+ ULONG FillCount, BoundedProgress;
/* Make sure the progress bar is enabled, that we own and are installed */
if ((ShowProgressBar) &&
(InbvBootDriverInstalled) &&
(InbvDisplayState == INBV_DISPLAY_STATE_OWNED))
{
- /* Calculate the fill count */
- FillCount = InbvProgressState.Bias * Progress + InbvProgressState.Floor;
- FillCount *= 18;
- FillCount /= 10000;
-
- /* Start fill loop */
- while (FillCount)
- {
- /* Acquire the lock */
- InbvAcquireLock();
-
- /* Fill the progress bar */
- VidSolidColorFill(Left + ProgressBarLeft,
- ProgressBarTop,
- Left + ProgressBarLeft + 7,
- ProgressBarTop + 7,
- 11);
-
- /* Release the lock */
- InbvReleaseLock();
-
- /* Update the X position */
- Left += 9;
- FillCount--;
- }
+ /* Compute fill count */
+ BoundedProgress = (InbvProgressState.Floor / 100) + Progress;
+ FillCount = 121 * (InbvProgressState.Bias * BoundedProgress) / 1000000;
+
+ /* Acquire the lock */
+ InbvAcquireLock();
+
+ /* Fill the progress bar */
+ VidSolidColorFill(ProgressBarLeft,
+ ProgressBarTop,
+ ProgressBarLeft + FillCount,
+ ProgressBarTop + 12,
+ 15);
+
+ /* Release the lock */
+ InbvReleaseLock();
}
}
@@ -528,6 +501,27 @@
InbvProgressState.Bias = (Ceiling * 100) - Floor;
}
+VOID
+NTAPI
+InbvIndicateProgress(VOID)
+{
+ ULONG Percentage;
+
+ /* Increase progress */
+ InbvProgressIndicator.Count++;
+
+ /* Compute new percentage */
+ Percentage = min(100 * InbvProgressIndicator.Count /
+ InbvProgressIndicator.Expected,
+ 99);
+ if (Percentage != InbvProgressIndicator.Percentage)
+ {
+ /* Percentage has moved, update the progress bar */
+ InbvProgressIndicator.Percentage = Percentage;
+ InbvUpdateProgressBar(Percentage);
+ }
+}
+
PUCHAR
NTAPI
InbvGetResourceAddress(IN ULONG ResourceNumber)
@@ -558,9 +552,10 @@
NTAPI
DisplayBootBitmap(IN BOOLEAN SosMode)
{
- PVOID Bitmap, Header;
+ PVOID Header, Band, Bar, Text, Screen;
ROT_BAR_TYPE TempRotBarSelection = RB_UNSPECIFIED;
-
+ UCHAR Buffer[64];
+
/* Check if the system thread has already been created */
if (SysThreadCreated)
{
@@ -581,10 +576,10 @@
InbvSetTextColor(15);
InbvSolidColorFill(0, 0, 639, 479, 7);
InbvSolidColorFill(0, 421, 639, 479, 1);
-
+
/* Get resources */
- Bitmap = InbvGetResourceAddress(6);
- Header = InbvGetResourceAddress(7);
+ Header = InbvGetResourceAddress(IDB_LOGO_HEADER);
+ Band = InbvGetResourceAddress(IDB_LOGO_BAND);
}
else
{
@@ -594,40 +589,87 @@
InbvSolidColorFill(0, 421, 639, 479, 1);
/* Get resources */
- Bitmap = InbvGetResourceAddress(6);
- Header = InbvGetResourceAddress(15);
+ Header = InbvGetResourceAddress(IDB_SERVER_HEADER);
+ Band = InbvGetResourceAddress(IDB_SERVER_BAND);
}
/* Set the scrolling region */
InbvSetScrollRegion(32, 80, 631, 400);
/* Make sure we have resources */
- if ((Bitmap) && (Header))
+ if ((Header) && (Band))
{
/* BitBlt them on the screen */
- InbvBitBlt(Header, 0, 419);
- InbvBitBlt(Bitmap, 0, 0);
+ InbvBitBlt(Band, 0, 419);
+ InbvBitBlt(Header, 0, 0);
}
}
else
{
/* Is the boot driver installed? */
+ Text = NULL;
if (!InbvBootDriverInstalled) return;
- /* FIXME: TODO, display full-screen bitmap */
- Bitmap = InbvGetResourceAddress(5);
- if (Bitmap)
- {
- PBITMAPINFOHEADER BitmapInfoHeader = (PBITMAPINFOHEADER)Bitmap;
- ULONG Top, Left;
-
- Left = (640 - BitmapInfoHeader->biWidth) / 2;
- if (BitmapInfoHeader->biHeight < 0)
- Top = (480 + BitmapInfoHeader->biHeight) / 2;
+ /* Load the standard boot screen */
+ Screen = InbvGetResourceAddress(IDB_BOOT_LOGO);
+ if (SharedUserData->NtProductType == NtProductWinNt)
+ {
+ /* Workstation product, display appropriate status bar color */
+ Bar = InbvGetResourceAddress(IDB_BAR_PRO);
+ }
+ else
+ {
+ /* Display correct branding based on server suite */
+ if (ExVerifySuite(StorageServer))
+ {
+ /* Storage Server Edition */
+ Text = InbvGetResourceAddress(IDB_STORAGE_SERVER);
+ }
+ else if (ExVerifySuite(ComputeServer))
+ {
+ /* Compute Cluster Edition */
+ Text = InbvGetResourceAddress(IDB_CLUSTER_SERVER);
+ }
else
- Top = (480 - BitmapInfoHeader->biHeight) / 2;
- InbvBitBlt(Bitmap, Left, Top);
- }
+ {
+ /* Normal edition */
+ Text = InbvGetResourceAddress(IDB_SERVER_LOGO);
+ }
+
+ /* Server product, display appropriate status bar color */
+ Bar = InbvGetResourceAddress(IDB_BAR_SERVER);
+ }
+
+ /* Make sure we had a logo */
+ if (Screen)
+ {
+ /* Choose progress bar */
+ TempRotBarSelection = RB_SQUARE_CELLS;
+
+ /* Blit the background */
+ InbvBitBlt(Screen, 0, 0);
+
+ /* Set progress bar coordinates and display it */
+ InbvSetProgressBarCoordinates(257, 352);
+
+ /* Check for non-workstation products */
+ if (SharedUserData->NtProductType != NtProductWinNt)
+ {
+ /* Overwrite part of the logo for a server product */
+ InbvScreenToBufferBlt(Buffer, 413, 237, 7, 7, 8);
+ InbvSolidColorFill(418, 230, 454, 256, 0);
+ InbvBufferToScreenBlt(Buffer, 413, 237, 7, 7, 8);
+
+ /* In setup mode, you haven't selected a SKU yet */
+ if (ExpInTextModeSetup) Text = NULL;
+ }
+ }
+
+ /* Draw the SKU text if it exits */
+ if (Text) InbvBitBlt(Text, 180, 121);
+
+ /* Draw the progress bar bit */
+// if (Bar) InbvBitBlt(Bar, 0, 0);
}
/* Do we have a system thread? */
Modified: branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/1.bmp
URL: http://svn.reactos.org/svn/reactos/branches/ros-branch-0_3_11-clt2010/react…
==============================================================================
Binary files - no diff available.
Removed: branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/13.bmp
URL: http://svn.reactos.org/svn/reactos/branches/ros-branch-0_3_11-clt2010/react…
==============================================================================
Binary file - no diff available.
Modified: branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/14.bmp
URL: http://svn.reactos.org/svn/reactos/branches/ros-branch-0_3_11-clt2010/react…
==============================================================================
Binary files - no diff available.
Modified: branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/15.bmp
URL: http://svn.reactos.org/svn/reactos/branches/ros-branch-0_3_11-clt2010/react…
==============================================================================
Binary files - no diff available.
Removed: branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/16.bmp
URL: http://svn.reactos.org/svn/reactos/branches/ros-branch-0_3_11-clt2010/react…
==============================================================================
Binary file - no diff available.
Removed: branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/17.bmp
URL: http://svn.reactos.org/svn/reactos/branches/ros-branch-0_3_11-clt2010/react…
==============================================================================
Binary file - no diff available.
Modified: branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/2.bmp
URL: http://svn.reactos.org/svn/reactos/branches/ros-branch-0_3_11-clt2010/react…
==============================================================================
Binary files - no diff available.
Modified: branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/3.bmp
URL: http://svn.reactos.org/svn/reactos/branches/ros-branch-0_3_11-clt2010/react…
==============================================================================
Binary files - no diff available.
Modified: branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/4.bmp
URL: http://svn.reactos.org/svn/reactos/branches/ros-branch-0_3_11-clt2010/react…
==============================================================================
Binary files - no diff available.
Modified: branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/5.bmp
URL: http://svn.reactos.org/svn/reactos/branches/ros-branch-0_3_11-clt2010/react…
==============================================================================
Binary files - no diff available.
Modified: branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/6.bmp
URL: http://svn.reactos.org/svn/reactos/branches/ros-branch-0_3_11-clt2010/react…
==============================================================================
Binary files - no diff available.
Modified: branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/7.bmp
URL: http://svn.reactos.org/svn/reactos/branches/ros-branch-0_3_11-clt2010/react…
==============================================================================
Binary files - no diff available.
Modified: branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/inbv/logo/8.bmp
URL: http://svn.reactos.org/svn/reactos/branches/ros-branch-0_3_11-clt2010/react…
==============================================================================
Binary files - no diff available.
Modified: branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/include/internal/inbv.h
URL: http://svn.reactos.org/svn/reactos/branches/ros-branch-0_3_11-clt2010/react…
==============================================================================
--- branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/include/internal/inbv.h [iso-8859-1] (original)
+++ branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/include/internal/inbv.h [iso-8859-1] Wed Mar 10 15:25:05 2010
@@ -7,6 +7,13 @@
ULONG Ceiling;
ULONG Bias;
} INBV_PROGRESS_STATE;
+
+typedef struct _BT_PROGRESS_INDICATOR
+{
+ ULONG Count;
+ ULONG Expected;
+ ULONG Percentage;
+} BT_PROGRESS_INDICATOR, *PBT_PROGRESS_INDICATOR;
typedef enum _ROT_BAR_TYPE
{
@@ -45,6 +52,26 @@
VOID
);
+PUCHAR
+NTAPI
+InbvGetResourceAddress(
+ IN ULONG ResourceNumber
+);
+
+VOID
+NTAPI
+InbvBitBlt(
+ IN PUCHAR Buffer,
+ IN ULONG X,
+ IN ULONG Y
+);
+
+VOID
+NTAPI
+InbvIndicateProgress(
+ VOID
+);
+
extern BOOLEAN InbvBootDriverInstalled;
#endif /* NTOSKRNL_INBV_H */
Modified: branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/include/precomp.h
URL: http://svn.reactos.org/svn/reactos/branches/ros-branch-0_3_11-clt2010/react…
==============================================================================
--- branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/include/precomp.h [iso-8859-1] (original)
+++ branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/include/precomp.h [iso-8859-1] Wed Mar 10 15:25:05 2010
@@ -63,6 +63,7 @@
/* Internal Headers */
#include "internal/ntoskrnl.h"
#include "config.h"
+#include "resource.h"
//
// Define the internal versions of external and public global data
Modified: branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/io/iomgr/driver.c
URL: http://svn.reactos.org/svn/reactos/branches/ros-branch-0_3_11-clt2010/react…
==============================================================================
--- branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/io/iomgr/driver.c [iso-8859-1] (original)
+++ branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/io/iomgr/driver.c [iso-8859-1] Wed Mar 10 15:25:05 2010
@@ -789,6 +789,7 @@
* Display 'Loading XXX...' message
*/
IopDisplayLoadingMessage(ModuleName->Buffer, TRUE);
+ InbvIndicateProgress();
/*
* Generate filename without path (not needed by freeldr)
Modified: branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/io/iomgr/drvrlist.c
URL: http://svn.reactos.org/svn/reactos/branches/ros-branch-0_3_11-clt2010/react…
==============================================================================
--- branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/io/iomgr/drvrlist.c [iso-8859-1] (original)
+++ branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/io/iomgr/drvrlist.c [iso-8859-1] Wed Mar 10 15:25:05 2010
@@ -507,6 +507,7 @@
{
DPRINT(" Path: %wZ\n", &CurrentService->RegistryPath);
Status = IopLoadDriver(CurrentService);
+ InbvIndicateProgress();
}
}
}
@@ -538,7 +539,9 @@
{
DPRINT(" Path: %wZ\n", &CurrentService->RegistryPath);
Status = IopLoadDriver(CurrentService);
+ InbvIndicateProgress();
}
+
}
}
}
Modified: branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/mm/mminit.c
URL: http://svn.reactos.org/svn/reactos/branches/ros-branch-0_3_11-clt2010/react…
==============================================================================
--- branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/mm/mminit.c [iso-8859-1] (original)
+++ branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/mm/mminit.c [iso-8859-1] Wed Mar 10 15:25:05 2010
@@ -483,8 +483,8 @@
SharedUserData->NumberOfPhysicalPages = MmNumberOfPhysicalPages;
SharedUserData->LargePageMinimum = 0;
- /* For now, we assume that we're always Server */
- SharedUserData->NtProductType = NtProductServer;
+ /* 0.3.11-CLT2010 backport: Assume that we're always a workstation! */
+ SharedUserData->NtProductType = NtProductWinNt;
}
else if (Phase == 1)
{
Modified: branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/ntoskrnl.rc
URL: http://svn.reactos.org/svn/reactos/branches/ros-branch-0_3_11-clt2010/react…
==============================================================================
--- branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/ntoskrnl.rc [iso-8859-1] (original)
+++ branches/ros-branch-0_3_11-clt2010/reactos/ntoskrnl/ntoskrnl.rc [iso-8859-1] Wed Mar 10 15:25:05 2010
@@ -23,21 +23,20 @@
#endif
#define VER_LANGNEUTRAL
#include "common.ver"
+#include "resource.h"
//
// Bug Codes and Bitmaps
//
#include "bugcodes.rc"
-1 BITMAP DISCARDABLE "ntoskrnl/inbv/logo/1.bmp"
-2 BITMAP DISCARDABLE "ntoskrnl/inbv/logo/2.bmp"
-3 BITMAP DISCARDABLE "ntoskrnl/inbv/logo/3.bmp"
-4 BITMAP DISCARDABLE "ntoskrnl/inbv/logo/4.bmp"
-5 BITMAP DISCARDABLE "ntoskrnl/inbv/logo/5.bmp"
-6 BITMAP DISCARDABLE "ntoskrnl/inbv/logo/6.bmp"
-7 BITMAP DISCARDABLE "ntoskrnl/inbv/logo/7.bmp"
-8 BITMAP DISCARDABLE "ntoskrnl/inbv/logo/8.bmp"
-13 BITMAP DISCARDABLE "ntoskrnl/inbv/logo/13.bmp"
-14 BITMAP DISCARDABLE "ntoskrnl/inbv/logo/14.bmp"
-15 BITMAP DISCARDABLE "ntoskrnl/inbv/logo/15.bmp"
-16 BITMAP DISCARDABLE "ntoskrnl/inbv/logo/16.bmp"
-17 BITMAP DISCARDABLE "ntoskrnl/inbv/logo/17.bmp"
+IDB_BOOT_LOGO BITMAP DISCARDABLE "ntoskrnl/inbv/logo/1.bmp"
+IDB_HIBERNATE_LOGO BITMAP DISCARDABLE "ntoskrnl/inbv/logo/2.bmp"
+IDB_SHUTDOWN_LOGO BITMAP DISCARDABLE "ntoskrnl/inbv/logo/3.bmp"
+IDB_BAR_SERVER BITMAP DISCARDABLE "ntoskrnl/inbv/logo/4.bmp"
+IDB_LOGO BITMAP DISCARDABLE "ntoskrnl/inbv/logo/5.bmp"
+IDB_LOGO_HEADER BITMAP DISCARDABLE "ntoskrnl/inbv/logo/6.bmp"
+IDB_LOGO_BAND BITMAP DISCARDABLE "ntoskrnl/inbv/logo/7.bmp"
+IDB_BAR_PRO BITMAP DISCARDABLE "ntoskrnl/inbv/logo/8.bmp"
+IDB_SERVER_LOGO BITMAP DISCARDABLE "ntoskrnl/inbv/logo/5.bmp"
+IDB_SERVER_HEADER BITMAP DISCARDABLE "ntoskrnl/inbv/logo/14.bmp"
+IDB_SERVER_BAND BITMAP DISCARDABLE "ntoskrnl/inbv/logo/15.bmp"
Author: sir_richard
Date: Wed Mar 10 05:12:25 2010
New Revision: 46049
URL: http://svn.reactos.org/svn/reactos?rev=46049&view=rev
Log:
[NTOS]: No good deed goes unpunished. Continuing the novel/saga from a couple of days ago, it seems that now that impersonation works, various code paths are being tickled into existence. For example, it would seem parts of the system now attempt setting primary tokens. This would cause an assertion, since PspAssignPrimaryToken incorrectly dereferenced the token (leading to a double-dereference) due to an off-by-! mistake.
Modified:
trunk/reactos/ntoskrnl/ps/security.c
Modified: trunk/reactos/ntoskrnl/ps/security.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ps/security.c?rev…
==============================================================================
--- trunk/reactos/ntoskrnl/ps/security.c [iso-8859-1] (original)
+++ trunk/reactos/ntoskrnl/ps/security.c [iso-8859-1] Wed Mar 10 05:12:25 2010
@@ -206,7 +206,7 @@
/* Dereference Tokens and Return */
if (NT_SUCCESS(Status)) ObDereferenceObject(OldToken);
- if (AccessToken) ObDereferenceObject(NewToken);
+ if (!AccessToken) ObDereferenceObject(NewToken);
return Status;
}