ReactOS 0.4.15-dev-6669-g8227c5d
bootanim.c
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS Kernel
3 * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
4 * PURPOSE: Boot Theme & Animation
5 * COPYRIGHT: Copyright 2007 Alex Ionescu (alex.ionescu@reactos.org)
6 * Copyright 2007 Hervé Poussineau (hpoussin@reactos.org)
7 * Copyright 2012-2022 Hermès Bélusca-Maïto
8 * Copyright 2017-2018 Stanislav Motylkov
9 * Copyright 2019-2020 Yaroslav Kibysh
10 */
11
12/* INCLUDES ******************************************************************/
13
14#include <ntoskrnl.h>
15#include "inbv/logo.h"
16
17/* See also mm/ARM3/miarm.h */
18#define MM_READONLY 1 // PAGE_READONLY
19#define MM_READWRITE 4 // PAGE_WRITECOPY
20
21/* GLOBALS *******************************************************************/
22
23/*
24 * ReactOS uses the same boot screen for all the products.
25 *
26 * Enable this define when ReactOS will have different SKUs
27 * (Workstation, Server, Storage Server, Cluster Server, etc...).
28 */
29// #define REACTOS_SKUS
30
31typedef enum _ROT_BAR_TYPE
32{
37
38/*
39 * BitBltAligned() alignments
40 */
42{
47
49{
54
55/*
56 * Enable this define when Inbv will support rotating progress bar.
57 */
58#define INBV_ROTBAR_IMPLEMENTED
59
62
63#ifdef INBV_ROTBAR_IMPLEMENTED
64/*
65 * Change this to modify progress bar behaviour
66 */
67#define ROT_BAR_DEFAULT_MODE RB_PROGRESS_BAR
68
69/*
70 * Values for PltRotBarStatus:
71 * - PltRotBarStatus == 1, do palette fading-in (done elsewhere in ReactOS);
72 * - PltRotBarStatus == 2, do rotation bar animation;
73 * - PltRotBarStatus == 3, stop the animation thread.
74 * - Any other value is ignored and the animation thread continues to run.
75 */
76typedef enum _ROT_BAR_STATUS
77{
83
87static UCHAR RotBarBuffer[24 * 9];
89#endif
90
91
92/* FADE-IN FUNCTION **********************************************************/
93
95typedef struct tagRGBQUAD
96{
102
103//
104// Bitmap Header
105//
106typedef struct tagBITMAPINFOHEADER
107{
120/*******************************/
121
123
124#define PALETTE_FADE_STEPS 12
125#define PALETTE_FADE_TIME (15 * 1000) /* 15 ms */
126
127static VOID
129{
130 UCHAR PaletteBitmapBuffer[sizeof(BITMAPINFOHEADER) + sizeof(MainPalette)];
131 PBITMAPINFOHEADER PaletteBitmap = (PBITMAPINFOHEADER)PaletteBitmapBuffer;
132 LPRGBQUAD Palette = (LPRGBQUAD)(PaletteBitmapBuffer + sizeof(BITMAPINFOHEADER));
133 ULONG Iteration, Index, ClrUsed;
134
135 LARGE_INTEGER Delay;
136 Delay.QuadPart = -(PALETTE_FADE_TIME * 10);
137
138 /* Check if we are installed and we own the display */
141 {
142 return;
143 }
144
145 /*
146 * Build a bitmap containing the fade-in palette. The palette entries
147 * are then processed in a loop and set using VidBitBlt function.
148 */
149 ClrUsed = RTL_NUMBER_OF(MainPalette);
150 RtlZeroMemory(PaletteBitmap, sizeof(BITMAPINFOHEADER));
151 PaletteBitmap->biSize = sizeof(BITMAPINFOHEADER);
152 PaletteBitmap->biBitCount = 4;
153 PaletteBitmap->biClrUsed = ClrUsed;
154
155 /*
156 * Main animation loop.
157 */
158 for (Iteration = 0; Iteration <= PALETTE_FADE_STEPS; ++Iteration)
159 {
160 for (Index = 0; Index < ClrUsed; Index++)
161 {
162 Palette[Index].rgbRed = (UCHAR)
163 (MainPalette[Index].rgbRed * Iteration / PALETTE_FADE_STEPS);
164 Palette[Index].rgbGreen = (UCHAR)
165 (MainPalette[Index].rgbGreen * Iteration / PALETTE_FADE_STEPS);
166 Palette[Index].rgbBlue = (UCHAR)
167 (MainPalette[Index].rgbBlue * Iteration / PALETTE_FADE_STEPS);
168 }
169
170 /* Do the animation */
172 VidBitBlt(PaletteBitmapBuffer, 0, 0);
174
175 /* Wait for a bit */
177 }
178}
179
180static VOID
182 IN PVOID Image,
183 IN BOOLEAN NoPalette,
184 IN ULONG X,
185 IN ULONG Y)
186{
187 LPRGBQUAD Palette;
188 RGBQUAD OrigPalette[RTL_NUMBER_OF(MainPalette)];
189
190 /* If requested, remove the palette from the image */
191 if (NoPalette)
192 {
193 /* Get bitmap header and palette */
194 PBITMAPINFOHEADER BitmapInfoHeader = Image;
195 Palette = (LPRGBQUAD)((PUCHAR)Image + BitmapInfoHeader->biSize);
196
197 /* Save the image original palette and remove palette information */
198 RtlCopyMemory(OrigPalette, Palette, sizeof(OrigPalette));
199 RtlZeroMemory(Palette, sizeof(OrigPalette));
200 }
201
202 /* Draw the image */
203 InbvBitBlt(Image, X, Y);
204
205 /* Restore the image original palette */
206 if (NoPalette)
207 {
208 RtlCopyMemory(Palette, OrigPalette, sizeof(OrigPalette));
209 }
210}
211
212static VOID
214 IN PVOID Image,
215 IN BOOLEAN NoPalette,
216 IN BBLT_HORZ_ALIGNMENT HorizontalAlignment,
217 IN BBLT_VERT_ALIGNMENT VerticalAlignment,
218 IN ULONG MarginLeft,
219 IN ULONG MarginTop,
220 IN ULONG MarginRight,
221 IN ULONG MarginBottom)
222{
223 PBITMAPINFOHEADER BitmapInfoHeader = Image;
224 ULONG X, Y;
225
226 /* Calculate X */
227 switch (HorizontalAlignment)
228 {
230 X = MarginLeft - MarginRight;
231 break;
232
234 X = MarginLeft - MarginRight + (SCREEN_WIDTH - BitmapInfoHeader->biWidth + 1) / 2;
235 break;
236
238 X = MarginLeft - MarginRight + SCREEN_WIDTH - BitmapInfoHeader->biWidth;
239 break;
240
241 default:
242 /* Unknown */
243 return;
244 }
245
246 /* Calculate Y */
247 switch (VerticalAlignment)
248 {
249 case AL_VERTICAL_TOP:
250 Y = MarginTop - MarginBottom;
251 break;
252
254 Y = MarginTop - MarginBottom + (SCREEN_HEIGHT - BitmapInfoHeader->biHeight + 1) / 2;
255 break;
256
258 Y = MarginTop - MarginBottom + SCREEN_HEIGHT - BitmapInfoHeader->biHeight;
259 break;
260
261 default:
262 /* Unknown */
263 return;
264 }
265
266 /* Finally draw the image */
267 BitBltPalette(Image, NoPalette, X, Y);
268}
269
270/* FUNCTIONS *****************************************************************/
271
272CODE_SEG("INIT")
274NTAPI
276 _In_ PLOADER_PARAMETER_BLOCK LoaderBlock,
278{
279#if 0
280 ULONG i;
281
282 /* Quit if we're already installed */
283 if (InbvBootDriverInstalled) return TRUE;
284
285 /* Find bitmap resources in the kernel */
287 for (i = 1; i <= ResourceCount; i++)
288 {
289 /* Do the lookup */
290 ResourceList[i] = FindBitmapResource(LoaderBlock, i);
291 }
292
293 /* Set the progress bar ranges */
295#endif
296
297 /* Return install state */
298 return TRUE;
299}
300
310VOID
311NTAPI
313 _In_ ULONG SubPercentTimes100)
314{
315 ULONG FillCount;
316
317 /* Make sure the progress bar is enabled, that we own and are installed */
321
322 /* Compute fill count */
323 FillCount = VID_PROGRESS_BAR_WIDTH * SubPercentTimes100 / (100 * 100);
324
325 /* Acquire the lock */
327
328 /* Fill the progress bar */
331 ProgressBarLeft + FillCount,
334
335 /* Release the lock */
337}
338
339#ifdef INBV_ROTBAR_IMPLEMENTED
340static
341VOID
342NTAPI
345{
346 ULONG X, Y, Index, Total;
347 LARGE_INTEGER Delay = {{0}};
348
351 {
352 Index = 0;
353 }
354 else
355 {
356 Index = 32;
357 }
358 X = ProgressBarLeft + 2;
359 Y = ProgressBarTop + 2;
361
363 {
364 /* Wait for a bit */
366
368
369 /* Unknown unexpected command */
371
373 {
374 /* Stop the thread */
376 break;
377 }
378
380 {
381 Delay.QuadPart = -800000; // 80 ms
382 Total = 18;
383 Index %= Total;
384
385 if (Index >= 3)
386 {
387 /* Fill previous bar position */
388 VidSolidColorFill(X + ((Index - 3) * 8), Y, (X + ((Index - 3) * 8)) + 8 - 1, Y + 9 - 1, BV_COLOR_BLACK);
389 }
390 if (Index < Total - 1)
391 {
392 /* Draw the progress bar bit */
393 if (Index < 2)
394 {
395 /* Appearing from the left */
396 VidBufferToScreenBlt(RotBarBuffer + 8 * (2 - Index) / 2, X, Y, 22 - 8 * (2 - Index), 9, 24);
397 }
398 else if (Index >= Total - 3)
399 {
400 /* Hiding to the right */
401 VidBufferToScreenBlt(RotBarBuffer, X + ((Index - 2) * 8), Y, 22 - 8 * (4 - (Total - Index)), 9, 24);
402 }
403 else
404 {
405 VidBufferToScreenBlt(RotBarBuffer, X + ((Index - 2) * 8), Y, 22, 9, 24);
406 }
407 }
408 Index++;
409 }
411 {
412 Delay.QuadPart = -600000; // 60 ms
413 Total = SCREEN_WIDTH;
414 Index %= Total;
415
416 /* Right part */
418 if (Index > 0)
419 {
420 /* Left part */
422 }
423 Index += 32;
424 }
425
427 }
428
430}
431
432CODE_SEG("INIT")
433VOID
434NTAPI
436{
438 /* Perform other initialization if needed */
439}
440#endif
441
442CODE_SEG("INIT")
443static
444VOID
445NTAPI
448{
449 /* Windows hack to skip first dots displayed by AUTOCHK */
450 static BOOLEAN DotHack = TRUE;
451
452 /* If "." is given set *String to empty string */
453 if (DotHack && strcmp(*String, ".") == 0)
454 *String = "";
455
456 if (**String)
457 {
458 /* Remove the filter */
460
461 DotHack = FALSE;
462
463 /* Draw text screen */
465 }
466}
467
468CODE_SEG("INIT")
469VOID
470NTAPI
472 _In_ BOOLEAN TextMode)
473{
474 PVOID BootCopy = NULL, BootProgress = NULL, BootLogo = NULL, Header = NULL, Footer = NULL;
475
476#ifdef INBV_ROTBAR_IMPLEMENTED
477 UCHAR Buffer[24 * 9];
478 PVOID Bar = NULL, LineBmp = NULL;
479 ROT_BAR_TYPE TempRotBarSelection = RB_UNSPECIFIED;
481 HANDLE ThreadHandle = NULL;
482#endif
483
484#ifdef REACTOS_SKUS
485 PVOID Text = NULL;
486#endif
487
488#ifdef INBV_ROTBAR_IMPLEMENTED
489 /* Check if the animation thread has already been created */
491 {
492 /* Yes, just reset the progress bar but keep the thread alive */
496 }
497#endif
498
500
501 /* Check if this is text mode */
502 if (TextMode)
503 {
504 /*
505 * Make the kernel resource section temporarily writable,
506 * as we are going to change the bitmaps' palette in place.
507 */
509
510 /* Check the type of the OS: workstation or server */
511 if (SharedUserData->NtProductType == NtProductWinNt)
512 {
513 /* Workstation; set colors */
517
518 /* Get resources */
521 }
522 else
523 {
524 /* Server; set colors */
528
529 /* Get resources */
532 }
533
534 /* Set the scrolling region */
537
538 /* Make sure we have resources */
539 if (Header && Footer)
540 {
541 /* BitBlt them on the screen */
542 BitBltAligned(Footer,
543 TRUE,
546 0, 0, 0, 59);
548 FALSE,
551 0, 0, 0, 0);
552 }
553
554 /* Restore the kernel resource section protection to be read-only */
556 }
557 else
558 {
559 /* Is the boot driver installed? */
560 if (!InbvBootDriverInstalled) return;
561
562 /*
563 * Make the kernel resource section temporarily writable,
564 * as we are going to change the bitmaps' palette in place.
565 */
567
568 /* Load boot screen logo */
570
571#ifdef REACTOS_SKUS
572 Text = NULL;
573 if (SharedUserData->NtProductType == NtProductWinNt)
574 {
575#ifdef INBV_ROTBAR_IMPLEMENTED
576 /* Workstation product, use appropriate status bar color */
578#endif
579 }
580 else
581 {
582 /* Display correct branding based on server suite */
584 {
585 /* Storage Server Edition */
587 }
589 {
590 /* Compute Cluster Edition */
592 }
593 else
594 {
595 /* Normal edition */
597 }
598
599#ifdef INBV_ROTBAR_IMPLEMENTED
600 /* Server product, use appropriate status bar color */
602#endif
603 }
604#else
605 /* Use default status bar */
607#endif
608
609 /* Make sure we have a logo */
610 if (BootLogo)
611 {
612 /* Save the main image palette for implementing the fade-in effect */
613 PBITMAPINFOHEADER BitmapInfoHeader = BootLogo;
614 LPRGBQUAD Palette = (LPRGBQUAD)((PUCHAR)BootLogo + BitmapInfoHeader->biSize);
615 RtlCopyMemory(MainPalette, Palette, sizeof(MainPalette));
616
617 /* Draw the logo at the center of the screen */
619 TRUE,
622 0, 0, 0, 34);
623
624#ifdef INBV_ROTBAR_IMPLEMENTED
625 /* Choose progress bar */
626 TempRotBarSelection = ROT_BAR_DEFAULT_MODE;
627#endif
628
629 /* Set progress bar coordinates and display it */
632
633#ifdef REACTOS_SKUS
634 /* Check for non-workstation products */
635 if (SharedUserData->NtProductType != NtProductWinNt)
636 {
637 /* Overwrite part of the logo for a server product */
639 VID_SKU_SAVE_AREA_TOP, 7, 7, 8);
643 VID_SKU_SAVE_AREA_TOP, 7, 7, 8);
644
645 /* In setup mode, you haven't selected a SKU yet */
647 }
648#endif
649 }
650
651 /* Load and draw progress bar bitmap */
653 BitBltAligned(BootProgress,
654 TRUE,
657 0, 118, 0, 0);
658
659 /* Load and draw copyright text bitmap */
661 BitBltAligned(BootCopy,
662 TRUE,
665 22, 0, 0, 20);
666
667#ifdef REACTOS_SKUS
668 /* Draw the SKU text if it exits */
669 if (Text)
671#endif
672
673#ifdef INBV_ROTBAR_IMPLEMENTED
674 if ((TempRotBarSelection == RB_SQUARE_CELLS) && Bar)
675 {
676 /* Save previous screen pixels to buffer */
677 InbvScreenToBufferBlt(Buffer, 0, 0, 22, 9, 24);
678 /* Draw the progress bar bit */
679 BitBltPalette(Bar, TRUE, 0, 0);
680 /* Store it in global buffer */
681 InbvScreenToBufferBlt(RotBarBuffer, 0, 0, 22, 9, 24);
682 /* Restore screen pixels */
683 InbvBufferToScreenBlt(Buffer, 0, 0, 22, 9, 24);
684 }
685
686 /*
687 * Add a rotating bottom horizontal bar when using a progress bar,
688 * to show that ReactOS can be still alive when the bar does not
689 * appear to progress.
690 */
691 if (TempRotBarSelection == RB_PROGRESS_BAR)
692 {
694 if (LineBmp)
695 {
696 /* Draw the line and store it in global buffer */
697 BitBltPalette(LineBmp, TRUE, 0, SCREEN_HEIGHT-6);
699 }
700 }
701 else
702 {
703 /* Hide the simple progress bar if not used */
705 }
706#endif
707
708 /* Restore the kernel resource section protection to be read-only */
710
711 /* Display the boot logo and fade it in */
713
714#ifdef INBV_ROTBAR_IMPLEMENTED
715 if (!RotBarThreadActive && TempRotBarSelection != RB_UNSPECIFIED)
716 {
717 /* Start the animation thread */
718 Status = PsCreateSystemThread(&ThreadHandle,
719 0,
720 NULL,
721 NULL,
722 NULL,
724 NULL);
725 if (NT_SUCCESS(Status))
726 {
727 /* The thread has started, close the handle as we don't need it */
729 ObCloseHandle(ThreadHandle, KernelMode);
730 }
731 }
732#endif
733
734 /* Set filter which will draw text display if needed */
736 }
737
738#ifdef INBV_ROTBAR_IMPLEMENTED
739 /* Do we have the animation thread? */
741 {
742 /* We do, initialize the progress bar */
744 RotBarSelection = TempRotBarSelection;
747 }
748#endif
749}
750
751CODE_SEG("INIT")
752VOID
753NTAPI
755{
756 /* Acquire lock and check the display state */
759 {
760 /* Clear the screen */
762 }
763
764 /* Reset progress bar and lock */
765#ifdef INBV_ROTBAR_IMPLEMENTED
768#endif
770}
unsigned char BOOLEAN
#define RTL_NUMBER_OF(x)
Definition: RtlRegistry.c:12
int strcmp(const char *String1, const char *String2)
Definition: utclib.c:469
VOID NTAPI VidSolidColorFill(_In_ ULONG Left, _In_ ULONG Top, _In_ ULONG Right, _In_ ULONG Bottom, _In_ UCHAR Color)
Definition: bootvid.c:274
LONG NTSTATUS
Definition: precomp.h:26
static VOID BitBltAligned(IN PVOID Image, IN BOOLEAN NoPalette, IN BBLT_HORZ_ALIGNMENT HorizontalAlignment, IN BBLT_VERT_ALIGNMENT VerticalAlignment, IN ULONG MarginLeft, IN ULONG MarginTop, IN ULONG MarginRight, IN ULONG MarginBottom)
Definition: bootanim.c:213
static RGBQUAD MainPalette[16]
Definition: bootanim.c:122
static UCHAR RotBarBuffer[24 *9]
Definition: bootanim.c:87
enum _ROT_BAR_STATUS ROT_BAR_STATUS
#define MM_READWRITE
Definition: bootanim.c:19
static VOID NTAPI InbvRotationThread(_In_ PVOID Context)
Definition: bootanim.c:343
struct tagBITMAPINFOHEADER * PBITMAPINFOHEADER
#define MM_READONLY
Definition: bootanim.c:18
#define PALETTE_FADE_TIME
Definition: bootanim.c:125
static ROT_BAR_TYPE RotBarSelection
Definition: bootanim.c:85
struct tagBITMAPINFOHEADER BITMAPINFOHEADER
static ROT_BAR_STATUS PltRotBarStatus
Definition: bootanim.c:86
struct tagRGBQUAD RGBQUAD
enum _ROT_BAR_TYPE ROT_BAR_TYPE
_BBLT_VERT_ALIGNMENT
Definition: bootanim.c:42
@ AL_VERTICAL_TOP
Definition: bootanim.c:43
@ AL_VERTICAL_BOTTOM
Definition: bootanim.c:45
@ AL_VERTICAL_CENTER
Definition: bootanim.c:44
#define PALETTE_FADE_STEPS
Definition: bootanim.c:124
ULONG ProgressBarTop
Definition: bootanim.c:60
VOID NTAPI FinalizeBootLogo(VOID)
Definition: bootanim.c:754
struct tagRGBQUAD * LPRGBQUAD
VOID NTAPI BootAnimTickProgressBar(_In_ ULONG SubPercentTimes100)
Ticks the progress bar. Used by InbvUpdateProgressBar() and related.
Definition: bootanim.c:312
BOOLEAN NTAPI BootAnimInitialize(_In_ PLOADER_PARAMETER_BLOCK LoaderBlock, _In_ ULONG Count)
Definition: bootanim.c:275
VOID NTAPI InbvRotBarInit(VOID)
Definition: bootanim.c:435
enum _BBLT_HORZ_ALIGNMENT BBLT_HORZ_ALIGNMENT
#define ROT_BAR_DEFAULT_MODE
Definition: bootanim.c:67
ULONG ProgressBarLeft
Definition: inbv.c:45
static UCHAR RotLineBuffer[SCREEN_WIDTH *6]
Definition: bootanim.c:88
static VOID BootLogoFadeIn(VOID)
Definition: bootanim.c:128
static VOID NTAPI DisplayFilter(_Inout_ PCHAR *String)
Definition: bootanim.c:446
enum _BBLT_VERT_ALIGNMENT BBLT_VERT_ALIGNMENT
_BBLT_HORZ_ALIGNMENT
Definition: bootanim.c:49
@ AL_HORIZONTAL_LEFT
Definition: bootanim.c:50
@ AL_HORIZONTAL_RIGHT
Definition: bootanim.c:52
@ AL_HORIZONTAL_CENTER
Definition: bootanim.c:51
_ROT_BAR_STATUS
Definition: bootanim.c:77
@ RBS_STOP_ANIMATE
Definition: bootanim.c:80
@ RBS_ANIMATE
Definition: bootanim.c:79
@ RBS_FADEIN
Definition: bootanim.c:78
@ RBS_STATUS_MAX
Definition: bootanim.c:81
VOID NTAPI DisplayBootBitmap(_In_ BOOLEAN TextMode)
Definition: bootanim.c:471
BOOLEAN ShowProgressBar
Definition: inbv.c:46
static VOID BitBltPalette(IN PVOID Image, IN BOOLEAN NoPalette, IN ULONG X, IN ULONG Y)
Definition: bootanim.c:181
_ROT_BAR_TYPE
Definition: bootanim.c:32
@ RB_PROGRESS_BAR
Definition: bootanim.c:35
@ RB_SQUARE_CELLS
Definition: bootanim.c:34
@ RB_UNSPECIFIED
Definition: bootanim.c:33
static BOOLEAN RotBarThreadActive
Definition: bootanim.c:84
Definition: bufpool.h:45
Definition: Header.h:9
char * Text
Definition: combotst.c:136
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
#define Y(I)
@ NtProductWinNt
Definition: shellpath.c:64
VOID NTAPI VidBitBlt(_In_ PUCHAR Buffer, _In_ ULONG Left, _In_ ULONG Top)
Definition: common.c:470
VOID NTAPI VidBufferToScreenBlt(_In_reads_bytes_(Delta *Height) PUCHAR Buffer, _In_ ULONG Left, _In_ ULONG Top, _In_ ULONG Width, _In_ ULONG Height, _In_ ULONG Delta)
Definition: common.c:452
ULONG RGBQUAD
Definition: precomp.h:50
#define KeDelayExecutionThread(mode, foo, t)
Definition: env_spec_w32.h:484
Status
Definition: gdiplustypes.h:25
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define X(b, s)
INBV_DISPLAY_STATE NTAPI InbvGetDisplayState(VOID)
Definition: inbv.c:323
VOID NTAPI InbvInstallDisplayStringFilter(_In_ INBV_DISPLAY_STRING_FILTER DisplayFilter)
Definition: inbv.c:386
VOID NTAPI InbvBufferToScreenBlt(_In_ PUCHAR Buffer, _In_ ULONG X, _In_ ULONG Y, _In_ ULONG Width, _In_ ULONG Height, _In_ ULONG Delta)
Definition: inbv.c:552
BOOLEAN InbvBootDriverInstalled
Definition: inbv.c:39
PUCHAR NTAPI InbvGetResourceAddress(_In_ ULONG ResourceNumber)
Definition: inbv.c:162
VOID NTAPI InbvAcquireLock(VOID)
Definition: inbv.c:219
VOID NTAPI InbvSetTextColor(_In_ ULONG Color)
Definition: inbv.c:459
VOID NTAPI InbvSetProgressBarCoordinates(_In_ ULONG Left, _In_ ULONG Top)
Sets the screen coordinates of the loading progress bar and enable it.
Definition: inbv.c:600
VOID NTAPI InbvScreenToBufferBlt(_Out_ PUCHAR Buffer, _In_ ULONG X, _In_ ULONG Y, _In_ ULONG Width, _In_ ULONG Height, _In_ ULONG Delta)
Definition: inbv.c:571
VOID NTAPI InbvSetProgressBarSubset(_In_ ULONG Floor, _In_ ULONG Ceiling)
Specifies a progress percentage sub-range. Further calls to InbvIndicateProgress() or InbvUpdateProgr...
Definition: inbv.c:663
static ULONG ResourceCount
Definition: inbv.c:50
VOID NTAPI InbvBitBlt(_In_ PUCHAR Buffer, _In_ ULONG X, _In_ ULONG Y)
Definition: inbv.c:530
VOID NTAPI InbvSetScrollRegion(_In_ ULONG Left, _In_ ULONG Top, _In_ ULONG Right, _In_ ULONG Bottom)
Definition: inbv.c:447
VOID NTAPI InbvReleaseLock(VOID)
Definition: inbv.c:241
VOID NTAPI InbvSolidColorFill(_In_ ULONG Left, _In_ ULONG Top, _In_ ULONG Right, _In_ ULONG Bottom, _In_ ULONG Color)
Definition: inbv.c:484
static PVOID FindBitmapResource(_In_ PLOADER_PARAMETER_BLOCK LoaderBlock, _In_ ULONG ResourceId)
Definition: inbv.c:97
@ INBV_DISPLAY_STATE_OWNED
Definition: inbvtypes.h:33
static CODE_SEG("PAGE")
Definition: isapnp.c:1482
#define VID_SKU_SAVE_AREA_LEFT
Definition: logo.h:35
#define VID_SKU_SAVE_AREA_TOP
Definition: logo.h:36
#define VID_SKU_TEXT_TOP
Definition: logo.h:39
#define VID_PROGRESS_BAR_LEFT
Definition: logo.h:19
#define VID_SKU_AREA_RIGHT
Definition: logo.h:32
#define VID_PROGRESS_BAR_WIDTH
Definition: logo.h:21
#define VID_SCROLL_AREA_BOTTOM
Definition: logo.h:17
#define VID_SCROLL_AREA_RIGHT
Definition: logo.h:16
#define VID_SKU_AREA_BOTTOM
Definition: logo.h:33
#define VID_PROGRESS_BAR_HEIGHT
Definition: logo.h:22
#define VID_SKU_AREA_TOP
Definition: logo.h:31
#define VID_SCROLL_AREA_TOP
Definition: logo.h:15
#define VID_SKU_AREA_LEFT
Definition: logo.h:30
#define VID_SCROLL_AREA_LEFT
Definition: logo.h:14
#define VID_PROGRESS_BAR_TOP
Definition: logo.h:20
#define VID_SKU_TEXT_LEFT
Definition: logo.h:38
#define VID_FOOTER_BG_TOP
Definition: logo.h:41
#define ASSERT(a)
Definition: mode.c:44
void Bar(void)
Definition: terminate.cpp:70
#define min(a, b)
Definition: monoChain.cc:55
#define _Inout_
Definition: ms_sal.h:378
#define _In_
Definition: ms_sal.h:308
#define KernelMode
Definition: asm.h:34
int Count
Definition: noreturn.cpp:7
BOOLEAN ExpInTextModeSetup
Definition: init.c:69
BOOLEAN NTAPI ExVerifySuite(SUITE_TYPE SuiteType)
Definition: sysinfo.c:377
BOOLEAN NTAPI MmChangeKernelResourceSectionProtection(IN ULONG_PTR ProtectionMask)
Definition: sysldr.c:2330
#define IDB_BAR_DEFAULT
Definition: resource.h:14
#define IDB_WKSTA_FOOTER
Definition: resource.h:18
#define IDB_SERVER_FOOTER
Definition: resource.h:25
#define IDB_SERVER_LOGO
Definition: resource.h:23
#define IDB_ROTATING_LINE
Definition: resource.h:42
#define IDB_LOGO_DEFAULT
Definition: resource.h:15
#define IDB_SERVER_HEADER
Definition: resource.h:24
#define IDB_WKSTA_HEADER
Definition: resource.h:17
#define IDB_BAR_WKSTA
Definition: resource.h:20
#define IDB_PROGRESS_BAR
Definition: resource.h:43
#define IDB_COPYRIGHT
Definition: resource.h:44
#define IDB_CLUSTER_SERVER
Definition: resource.h:38
#define IDB_STORAGE_SERVER
Definition: resource.h:37
NTSTATUS NTAPI PsTerminateSystemThread(IN NTSTATUS ExitStatus)
Definition: kill.c:1145
NTSTATUS NTAPI PsCreateSystemThread(OUT PHANDLE ThreadHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes, IN HANDLE ProcessHandle, IN PCLIENT_ID ClientId, IN PKSTART_ROUTINE StartRoutine, IN PVOID StartContext)
Definition: thread.c:602
NTSTATUS NTAPI ObCloseHandle(IN HANDLE Handle, IN KPROCESSOR_MODE AccessMode)
Definition: obhandle.c:3379
#define SCREEN_WIDTH
Definition: pc98video.c:27
#define SCREEN_HEIGHT
Definition: pc98video.c:28
long LONG
Definition: pedump.c:60
unsigned short USHORT
Definition: pedump.c:61
#define BV_COLOR_WHITE
Definition: display.h:30
#define BV_COLOR_LIGHT_CYAN
Definition: display.h:29
#define BV_COLOR_BLACK
Definition: display.h:15
#define BV_COLOR_RED
Definition: display.h:16
#define BV_COLOR_CYAN
Definition: display.h:21
#define BV_COLOR_DARK_GRAY
Definition: display.h:22
#define SharedUserData
#define STATUS_SUCCESS
Definition: shellext.h:65
ULONG biClrImportant
Definition: precomp.h:43
USHORT biBitCount
Definition: precomp.h:37
LONG biYPelsPerMeter
Definition: precomp.h:41
ULONG biCompression
Definition: precomp.h:38
LONG biXPelsPerMeter
Definition: precomp.h:40
UCHAR rgbReserved
Definition: bootanim.c:100
UCHAR rgbBlue
Definition: bootanim.c:97
UCHAR rgbRed
Definition: bootanim.c:99
UCHAR rgbGreen
Definition: bootanim.c:98
#define NTAPI
Definition: typedefs.h:36
#define RtlCopyMemory(Destination, Source, Length)
Definition: typedefs.h:263
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:262
#define IN
Definition: typedefs.h:39
unsigned char * PUCHAR
Definition: typedefs.h:53
uint32_t ULONG
Definition: typedefs.h:59
char * PCHAR
Definition: typedefs.h:51
LONGLONG QuadPart
Definition: typedefs.h:114
_In_ WDFCOLLECTION _In_ ULONG Index
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFSTRING String
Definition: wdfdevice.h:2433
_Must_inspect_result_ _In_ WDFIORESREQLIST _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFIORESLIST * ResourceList
Definition: wdfresource.h:309
BOOLEAN BootLogo
Definition: winldr.c:35
@ ComputeServer
Definition: extypes.h:34
@ StorageServer
Definition: extypes.h:33
unsigned char UCHAR
Definition: xmlstorage.h:181