ReactOS 0.4.16-dev-981-g80eb313
inbv.c
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS Kernel
3 * LICENSE: BSD - See COPYING.ARM in the top level directory
4 * PURPOSE: Boot Video Driver support
5 * COPYRIGHT: Copyright 2007 Alex Ionescu (alex.ionescu@reactos.org)
6 * Copyright 2010 Aleksey Bragin (aleksey@reactos.org)
7 * Copyright 2015-2022 Hermès Bélusca-Maïto
8 */
9
10/* INCLUDES ******************************************************************/
11
12#include <ntoskrnl.h>
13#include "inbv/logo.h"
14
15/* GLOBALS *******************************************************************/
16
17/*
18 * Enable this define if you want Inbv to use coloured headless mode.
19 */
20// #define INBV_HEADLESS_COLORS
21
23{
28
30{
35
41
44
49
51static PUCHAR ResourceList[1 + IDB_MAX_RESOURCES]; // First entry == NULL, followed by 'ResourceCount' entries.
52
53
54/*
55 * Headless terminal text colors
56 */
57
58#ifdef INBV_HEADLESS_COLORS
59
60// Conversion table CGA to ANSI color index
61static const UCHAR CGA_TO_ANSI_COLOR_TABLE[16] =
62{
63 0, // Black
64 4, // Blue
65 2, // Green
66 6, // Cyan
67 1, // Red
68 5, // Magenta
69 3, // Brown/Yellow
70 7, // Grey/White
71
72 60, // Bright Black
73 64, // Bright Blue
74 62, // Bright Green
75 66, // Bright Cyan
76 61, // Bright Red
77 65, // Bright Magenta
78 63, // Bright Yellow
79 67 // Bright Grey (White)
80};
81
82#define CGA_TO_ANSI_COLOR(CgaColor) \
83 CGA_TO_ANSI_COLOR_TABLE[CgaColor & 0x0F]
84
85#endif
86
87// Default colors: text in white, background in black
90
91
92/* FUNCTIONS *****************************************************************/
93
94#define RT_BITMAP MAKEINTRESOURCE(2)
95
96CODE_SEG("INIT")
97static
100 _In_ PLOADER_PARAMETER_BLOCK LoaderBlock,
102{
103 UNICODE_STRING UpString = RTL_CONSTANT_STRING(L"ntoskrnl.exe");
104 UNICODE_STRING MpString = RTL_CONSTANT_STRING(L"ntkrnlmp.exe");
105 PLIST_ENTRY NextEntry, ListHead;
106 PLDR_DATA_TABLE_ENTRY LdrEntry;
107 PIMAGE_RESOURCE_DATA_ENTRY ResourceDataEntry;
108 LDR_RESOURCE_INFO ResourceInfo;
110 PVOID Data = NULL;
111
112 /* Loop the driver list */
113 ListHead = &LoaderBlock->LoadOrderListHead;
114 for (NextEntry = ListHead->Flink;
115 NextEntry != ListHead;
116 NextEntry = NextEntry->Flink)
117 {
118 /* Get the entry */
119 LdrEntry = CONTAINING_RECORD(NextEntry,
121 InLoadOrderLinks);
122
123 /* Check for a match */
124 if (RtlEqualUnicodeString(&LdrEntry->BaseDllName, &UpString, TRUE) ||
125 RtlEqualUnicodeString(&LdrEntry->BaseDllName, &MpString, TRUE))
126 {
127 /* Break out */
128 break;
129 }
130 }
131
132 /* Check if we found it */
133 if (NextEntry != ListHead)
134 {
135 /* Try to find the resource */
136 ResourceInfo.Type = RT_BITMAP;
137 ResourceInfo.Name = ResourceId;
139
140 Status = LdrFindResource_U(LdrEntry->DllBase,
141 &ResourceInfo,
143 &ResourceDataEntry);
144 if (NT_SUCCESS(Status))
145 {
146 /* Access the resource */
147 ULONG Size = 0;
148 Status = LdrAccessResource(LdrEntry->DllBase,
149 ResourceDataEntry,
150 &Data,
151 &Size);
152 if ((Data) && (ResourceId < 3))
153 {
155 }
156 if (!NT_SUCCESS(Status)) Data = NULL;
157 }
158 }
159
160 /* Return the pointer */
161 return Data;
162}
163
164PUCHAR
165NTAPI
167 _In_ ULONG ResourceNumber)
168{
169 /* Validate the resource number */
170 if (ResourceNumber > ResourceCount) return NULL;
171
172 /* Return the address */
173 return ResourceList[ResourceNumber];
174}
175
176CODE_SEG("INIT")
178NTAPI
180 _In_ PLOADER_PARAMETER_BLOCK LoaderBlock,
182{
183 PCHAR CommandLine;
184 BOOLEAN ResetMode = FALSE; // By default do not reset the video mode
185 ULONG i;
186
187 /* Quit if we're already installed */
188 if (InbvBootDriverInstalled) return TRUE;
189
190 /* Initialize the lock and check the current display state */
193 {
194 /* Reset the video mode in case we do not have a custom boot logo */
195 CommandLine = (LoaderBlock->LoadOptions ? _strupr(LoaderBlock->LoadOptions) : NULL);
196 ResetMode = (CommandLine == NULL) || (strstr(CommandLine, "BOOTLOGO") == NULL);
197 }
198
199 /* Initialize the video */
202 {
203 /* Find bitmap resources in the kernel */
205 for (i = 1; i <= ResourceCount; i++)
206 {
207 /* Do the lookup */
208 ResourceList[i] = FindBitmapResource(LoaderBlock, i);
209 }
210
211 /* Set the progress bar ranges */
213
214 // BootAnimInitialize(LoaderBlock, Count);
215 }
216
217 /* Return install state */
219}
220
221VOID
222NTAPI
224{
226
227 /* Check if we're at dispatch level or lower */
229 if (OldIrql <= DISPATCH_LEVEL)
230 {
231 /* Loop until the lock is free */
233
234 /* Raise IRQL to dispatch level */
236 }
237
238 /* Acquire the lock */
241}
242
243VOID
244NTAPI
246{
248
249 /* Capture the old IRQL */
251
252 /* Release the driver lock */
254
255 /* If we were at dispatch level or lower, restore the old IRQL */
257}
258
259VOID
260NTAPI
263{
264 /* Check if we're installed */
266 {
267 /* Check for lost state */
269
270 /* Acquire the lock */
272
273 /* Cleanup the screen if we own it */
275
276 /* Set the new display state */
279
280 /* Release the lock */
282 }
283 else
284 {
285 /* Set the new display state */
288 }
289}
290
291VOID
292NTAPI
294{
295 /* Check if we have a callback and we're just acquiring it now */
298 {
299 /* Call the callback */
301 }
302
303 /* Acquire the display */
305}
306
307VOID
308NTAPI
310 _In_ BOOLEAN DisplayOwned)
311{
312 /* Set the new display state */
315}
316
318NTAPI
320{
321 /* Return if we own it or not */
323}
324
326NTAPI
328{
329 /* Return the actual state */
330 return InbvDisplayState;
331}
332
334NTAPI
337{
338 /* Make sure we own the display */
340 {
341 /* If we're not allowed, return success anyway */
342 if (!InbvDisplayDebugStrings) return TRUE;
343
344 /* Check if a filter is installed */
346
347 /* Acquire the lock */
349
350 /* Make sure we're installed and display the string */
352
353 /* Print the string on the EMS port */
355 String,
356 strlen(String) + sizeof(ANSI_NULL),
357 NULL,
358 NULL);
359
360 /* Release the lock */
362
363 /* All done */
364 return TRUE;
365 }
366
367 /* We don't own it, fail */
368 return FALSE;
369}
370
372NTAPI
375{
376 BOOLEAN OldSetting;
377
378 /* Get the old setting */
379 OldSetting = InbvDisplayDebugStrings;
380
381 /* Update it */
383
384 /* Return the old setting */
385 return OldSetting;
386}
387
388VOID
389NTAPI
392{
393 /* Save the filter */
395}
396
398NTAPI
400{
401 /* Return driver state */
403}
404
405VOID
406NTAPI
409{
410 /* Check if we're installed */
412 {
413 /* Acquire the lock and cleanup if we own the screen */
416
417 /* Set the reset callback and display state */
420
421 /* Release the lock */
423 }
424 else
425 {
426 /* Set the reset callback and display state */
429 }
430}
431
433NTAPI
435{
436 /* Check if we're installed and we own it */
439 {
440 /* Do the reset */
442 return TRUE;
443 }
444
445 /* Nothing to reset */
446 return FALSE;
447}
448
449VOID
450NTAPI
452 _In_ ULONG Left,
453 _In_ ULONG Top,
454 _In_ ULONG Right,
456{
457 /* Just call bootvid */
458 VidSetScrollRegion(Left, Top, Right, Bottom);
459}
460
461VOID
462NTAPI
465{
466 HEADLESS_CMD_SET_COLOR HeadlessSetColor;
467
468 /* Set color for EMS port */
469#ifdef INBV_HEADLESS_COLORS
470 InbvTerminalTextColor = 30 + CGA_TO_ANSI_COLOR(Color);
471#else
473#endif
474 HeadlessSetColor.TextColor = InbvTerminalTextColor;
475 HeadlessSetColor.BkgdColor = InbvTerminalBkgdColor;
477 &HeadlessSetColor,
478 sizeof(HeadlessSetColor),
479 NULL,
480 NULL);
481
482 /* Update the text color */
484}
485
486VOID
487NTAPI
489 _In_ ULONG Left,
490 _In_ ULONG Top,
491 _In_ ULONG Right,
494{
495 HEADLESS_CMD_SET_COLOR HeadlessSetColor;
496
497 /* Make sure we own it */
499 {
500 /* Acquire the lock */
502
503 /* Check if we're installed */
505 {
506 /* Call bootvid */
507 VidSolidColorFill(Left, Top, Right, Bottom, (UCHAR)Color);
508 }
509
510 /* Set color for EMS port and clear display */
511#ifdef INBV_HEADLESS_COLORS
512 InbvTerminalBkgdColor = 40 + CGA_TO_ANSI_COLOR(Color);
513#else
515#endif
516 HeadlessSetColor.TextColor = InbvTerminalTextColor;
517 HeadlessSetColor.BkgdColor = InbvTerminalBkgdColor;
519 &HeadlessSetColor,
520 sizeof(HeadlessSetColor),
521 NULL,
522 NULL);
524 NULL, 0,
525 NULL, NULL);
526
527 /* Release the lock */
529 }
530}
531
532VOID
533NTAPI
536 _In_ ULONG X,
537 _In_ ULONG Y)
538{
539 /* Check if we're installed and we own it */
542 {
543 /* Acquire the lock */
545
546 /* Do the blit */
547 VidBitBlt(Buffer, X, Y);
548
549 /* Release the lock */
551 }
552}
553
554VOID
555NTAPI
558 _In_ ULONG X,
559 _In_ ULONG Y,
563{
564 /* Check if we're installed and we own it */
567 {
568 /* Do the blit */
570 }
571}
572
573VOID
574NTAPI
577 _In_ ULONG X,
578 _In_ ULONG Y,
582{
583 /* Check if we're installed and we own it */
586 {
587 /* Do the blit */
589 }
590}
591
602VOID
603NTAPI
605 _In_ ULONG Left,
606 _In_ ULONG Top)
607{
608 /* Update the coordinates */
609 ProgressBarLeft = Left;
611
612 /* Enable the progress bar */
614}
615
626CODE_SEG("INIT")
627VOID
628NTAPI
630{
631 ULONG Percentage;
632
633 /* Increase progress */
635
636 /* Compute the new percentage - Don't go over 100% */
637 Percentage = 100 * InbvProgressIndicator.Count /
639 Percentage = min(Percentage, 99);
640
641 if (Percentage != InbvProgressIndicator.Percentage)
642 {
643 /* Percentage has changed, update the progress bar */
645 InbvUpdateProgressBar(Percentage);
646 }
647}
648
665VOID
666NTAPI
668 _In_ ULONG Floor,
669 _In_ ULONG Ceiling)
670{
671 /* Sanity checks */
672 ASSERT(Floor < Ceiling);
673 ASSERT(Ceiling <= 100);
674
675 /* Update the progress bar state */
676 InbvProgressState.Floor = Floor * 100;
677 InbvProgressState.Ceiling = Ceiling * 100;
678 InbvProgressState.Bias = Ceiling - Floor;
679}
680
691VOID
692NTAPI
694 _In_ ULONG Percentage)
695{
696 ULONG TotalProgress;
697
698 /* Make sure the progress bar is enabled, that we own and are installed */
699 if (ShowProgressBar &&
702 {
703 /* Compute the total progress and tick the progress bar */
704 TotalProgress = InbvProgressState.Floor + (Percentage * InbvProgressState.Bias);
705 // TotalProgress /= (100 * 100);
706
707 BootAnimTickProgressBar(TotalProgress);
708 }
709}
710
712NTAPI
714{
716 UNICODE_STRING CapturedString;
720
721 PAGED_CODE();
722
724
725 /* We require the TCB privilege */
728
729 /* Capture the string */
731 if (!NT_SUCCESS(Status))
732 return Status;
733
734 /* Do not display the string if it is empty */
735 if (CapturedString.Length == 0 || CapturedString.Buffer == NULL)
736 {
738 goto Quit;
739 }
740
741 /*
742 * Convert the string since INBV understands only ANSI/OEM. Allocate the
743 * string buffer in non-paged pool because INBV passes it down to BOOTVID.
744 * We cannot perform the allocation using RtlUnicodeStringToOemString()
745 * since its allocator uses PagedPool.
746 */
747 OemLength = RtlUnicodeStringToOemSize(&CapturedString);
748 if (OemLength > MAXUSHORT)
749 {
751 goto Quit;
752 }
753 RtlInitEmptyAnsiString((PANSI_STRING)&OemString, NULL, (USHORT)OemLength);
755 if (OemString.Buffer == NULL)
756 {
758 goto Quit;
759 }
761 if (!NT_SUCCESS(Status))
762 {
764 goto Quit;
765 }
766
767 /* Display the string */
769
770 /* Free the string buffer */
772
774
775Quit:
776 /* Free the captured string */
778
779 return Status;
780}
#define PAGED_CODE()
#define CODE_SEG(...)
#define STATUS_PRIVILEGE_NOT_HELD
Definition: DriverTester.h:9
_In_ PVOID _In_ ULONG _Out_ PVOID _In_ ULONG _Inout_ PULONG _In_ KPROCESSOR_MODE PreviousMode
INT ResourceId
Definition: LoadImageGCC.c:72
unsigned char BOOLEAN
#define RTL_NUMBER_OF(x)
Definition: RtlRegistry.c:12
char * strstr(char *String1, char *String2)
Definition: utclib.c:653
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
VOID NTAPI VidScreenToBufferBlt(_Out_writes_bytes_(Delta *Height) PUCHAR Buffer, _In_ ULONG Left, _In_ ULONG Top, _In_ ULONG Width, _In_ ULONG Height, _In_ ULONG Delta)
Definition: bootvid.c:247
VOID NTAPI VidSolidColorFill(_In_ ULONG Left, _In_ ULONG Top, _In_ ULONG Right, _In_ ULONG Bottom, _In_ UCHAR Color)
Definition: bootvid.c:261
VOID NTAPI VidCleanUp(VOID)
Definition: bootvid.c:239
VOID NTAPI VidResetDisplay(_In_ BOOLEAN HalReset)
Definition: bootvid.c:216
BOOLEAN NTAPI VidInitialize(_In_ BOOLEAN SetMode)
Definition: bootvid.c:183
LONG NTSTATUS
Definition: precomp.h:26
VOID DisplayString(LPWSTR Msg)
Definition: misc.c:211
static LPHIST_ENTRY Bottom
Definition: history.c:54
static LPHIST_ENTRY Top
Definition: history.c:53
VOID NTAPI BootAnimTickProgressBar(_In_ ULONG SubPercentTimes100)
Ticks the progress bar. Used by InbvUpdateProgressBar() and related.
Definition: bootanim.c:318
static VOID NTAPI DisplayFilter(_Inout_ PCHAR *String)
Definition: bootanim.c:454
ULONG_PTR KiBugCheckData[5]
Definition: bug.c:31
Definition: bufpool.h:45
#define STATUS_NO_MEMORY
Definition: d3dkmdt.h:51
#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:33
#define Y(I)
#define RtlComputeCrc32
Definition: compat.h:810
VOID NTAPI VidBitBlt(_In_ PUCHAR Buffer, _In_ ULONG Left, _In_ ULONG Top)
Definition: common.c:471
ULONG NTAPI VidSetTextColor(_In_ ULONG Color)
Definition: common.c:315
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:453
VOID NTAPI VidDisplayString(_In_z_ PUCHAR String)
Definition: common.c:375
VOID NTAPI VidSetScrollRegion(_In_ ULONG Left, _In_ ULONG Top, _In_ ULONG Right, _In_ ULONG Bottom)
Definition: common.c:352
#define ExAllocatePoolWithTag(hernya, size, tag)
Definition: env_spec_w32.h:350
UCHAR KIRQL
Definition: env_spec_w32.h:591
ULONG KSPIN_LOCK
Definition: env_spec_w32.h:72
#define KeRaiseIrql(irql, oldIrql)
Definition: env_spec_w32.h:597
#define KeLowerIrql(oldIrql)
Definition: env_spec_w32.h:602
#define KeGetCurrentIrql()
Definition: env_spec_w32.h:706
#define NonPagedPool
Definition: env_spec_w32.h:307
#define DISPATCH_LEVEL
Definition: env_spec_w32.h:696
#define KeInitializeSpinLock(sl)
Definition: env_spec_w32.h:604
#define ExGetPreviousMode
Definition: ex.h:143
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
@ HeadlessCmdPutString
Definition: hdl.h:131
@ HeadlessCmdSetColor
Definition: hdl.h:137
@ HeadlessCmdClearDisplay
Definition: hdl.h:132
NTSTATUS NTAPI HeadlessDispatch(IN HEADLESS_CMD Command, IN PVOID InputBuffer, IN SIZE_T InputBufferSize, OUT PVOID OutputBuffer, OUT PSIZE_T OutputBufferSize)
Definition: hdlsterm.c:580
INBV_DISPLAY_STATE NTAPI InbvGetDisplayState(VOID)
Definition: inbv.c:327
VOID NTAPI InbvSetDisplayOwnership(_In_ BOOLEAN DisplayOwned)
Definition: inbv.c:309
VOID NTAPI InbvAcquireDisplayOwnership(VOID)
Definition: inbv.c:293
VOID NTAPI InbvInstallDisplayStringFilter(_In_ INBV_DISPLAY_STRING_FILTER DisplayFilter)
Definition: inbv.c:390
VOID NTAPI InbvBufferToScreenBlt(_In_ PUCHAR Buffer, _In_ ULONG X, _In_ ULONG Y, _In_ ULONG Width, _In_ ULONG Height, _In_ ULONG Delta)
Definition: inbv.c:556
VOID NTAPI InbvNotifyDisplayOwnershipLost(_In_ INBV_RESET_DISPLAY_PARAMETERS Callback)
Definition: inbv.c:407
static ULONG InbvTerminalBkgdColor
Definition: inbv.c:89
BOOLEAN InbvBootDriverInstalled
Definition: inbv.c:39
PUCHAR NTAPI InbvGetResourceAddress(_In_ ULONG ResourceNumber)
Definition: inbv.c:166
VOID NTAPI InbvAcquireLock(VOID)
Definition: inbv.c:223
#define RT_BITMAP
Definition: inbv.c:94
static INBV_DISPLAY_STRING_FILTER InbvDisplayFilter
Definition: inbv.c:43
static KIRQL InbvOldIrql
Definition: inbv.c:37
VOID NTAPI InbvIndicateProgress(VOID)
Gives some progress feedback, without specifying any explicit number of progress steps or percentage....
Definition: inbv.c:629
static INBV_DISPLAY_STATE InbvDisplayState
Definition: inbv.c:38
struct _BT_PROGRESS_INDICATOR BT_PROGRESS_INDICATOR
static BOOLEAN InbvDisplayDebugStrings
Definition: inbv.c:42
struct _BT_PROGRESS_INDICATOR * PBT_PROGRESS_INDICATOR
static INBV_PROGRESS_STATE InbvProgressState
Definition: inbv.c:47
BOOLEAN NTAPI InbvCheckDisplayOwnership(VOID)
Definition: inbv.c:319
ULONG ProgressBarTop
Definition: inbv.c:45
VOID NTAPI InbvEnableBootDriver(_In_ BOOLEAN Enable)
Definition: inbv.c:261
VOID NTAPI InbvSetTextColor(_In_ ULONG Color)
Definition: inbv.c:463
VOID NTAPI InbvSetProgressBarCoordinates(_In_ ULONG Left, _In_ ULONG Top)
Sets the screen coordinates of the loading progress bar and enable it.
Definition: inbv.c:604
VOID NTAPI InbvScreenToBufferBlt(_Out_ PUCHAR Buffer, _In_ ULONG X, _In_ ULONG Y, _In_ ULONG Width, _In_ ULONG Height, _In_ ULONG Delta)
Definition: inbv.c:575
VOID NTAPI InbvSetProgressBarSubset(_In_ ULONG Floor, _In_ ULONG Ceiling)
Specifies a progress percentage sub-range. Further calls to InbvIndicateProgress() or InbvUpdateProgr...
Definition: inbv.c:667
static ULONG ResourceCount
Definition: inbv.c:50
BOOLEAN NTAPI InbvEnableDisplayString(_In_ BOOLEAN Enable)
Definition: inbv.c:373
ULONG ProgressBarLeft
Definition: inbv.c:45
static INBV_RESET_DISPLAY_PARAMETERS InbvResetDisplayParameters
Definition: inbv.c:40
BOOLEAN NTAPI InbvDisplayString(_In_ PCHAR String)
Definition: inbv.c:335
BOOLEAN NTAPI InbvDriverInitialize(_In_ PLOADER_PARAMETER_BLOCK LoaderBlock, _In_ ULONG Count)
Definition: inbv.c:179
static BT_PROGRESS_INDICATOR InbvProgressIndicator
Definition: inbv.c:48
VOID NTAPI InbvUpdateProgressBar(_In_ ULONG Percentage)
Updates the progress bar percentage, relative to the current percentage sub-range previously set by I...
Definition: inbv.c:693
VOID NTAPI InbvBitBlt(_In_ PUCHAR Buffer, _In_ ULONG X, _In_ ULONG Y)
Definition: inbv.c:534
struct _INBV_PROGRESS_STATE INBV_PROGRESS_STATE
static KSPIN_LOCK BootDriverLock
Definition: inbv.c:36
static ULONG InbvTerminalTextColor
Definition: inbv.c:88
BOOLEAN NTAPI InbvResetDisplay(VOID)
Definition: inbv.c:434
BOOLEAN ShowProgressBar
Definition: inbv.c:46
VOID NTAPI InbvSetScrollRegion(_In_ ULONG Left, _In_ ULONG Top, _In_ ULONG Right, _In_ ULONG Bottom)
Definition: inbv.c:451
VOID NTAPI InbvReleaseLock(VOID)
Definition: inbv.c:245
VOID NTAPI InbvSolidColorFill(_In_ ULONG Left, _In_ ULONG Top, _In_ ULONG Right, _In_ ULONG Bottom, _In_ ULONG Color)
Definition: inbv.c:488
static PVOID FindBitmapResource(_In_ PLOADER_PARAMETER_BLOCK LoaderBlock, _In_ ULONG ResourceId)
Definition: inbv.c:99
NTSTATUS NTAPI NtDisplayString(IN PUNICODE_STRING DisplayString)
Definition: inbv.c:713
BOOLEAN NTAPI InbvIsBootDriverInstalled(VOID)
Definition: inbv.c:399
@ INBV_DISPLAY_STATE_OWNED
Definition: inbvtypes.h:33
@ INBV_DISPLAY_STATE_LOST
Definition: inbvtypes.h:35
@ INBV_DISPLAY_STATE_DISABLED
Definition: inbvtypes.h:34
enum _INBV_DISPLAY_STATE INBV_DISPLAY_STATE
VOID(NTAPI * INBV_DISPLAY_STRING_FILTER)(_Inout_ PCHAR *String)
Definition: inbvtypes.h:50
BOOLEAN(NTAPI * INBV_RESET_DISPLAY_PARAMETERS)(_In_ ULONG Cols, _In_ ULONG Rows)
Definition: inbvtypes.h:43
NTSTATUS NTAPI LdrAccessResource(_In_ PVOID BaseAddress, _In_ PIMAGE_RESOURCE_DATA_ENTRY ResourceDataEntry, _Out_opt_ PVOID *Resource, _Out_opt_ PULONG Size)
NTSTATUS NTAPI LdrFindResource_U(_In_ PVOID BaseAddress, _In_ PLDR_RESOURCE_INFO ResourceInfo, _In_ ULONG Level, _Out_ PIMAGE_RESOURCE_DATA_ENTRY *ResourceDataEntry)
#define RESOURCE_DATA_LEVEL
Definition: ldrtypes.h:33
#define ASSERT(a)
Definition: mode.c:44
#define ExFreePoolWithTag(_P, _T)
Definition: module.h:1109
#define min(a, b)
Definition: monoChain.cc:55
NTSYSAPI NTSTATUS NTAPI RtlUnicodeStringToOemString(POEM_STRING DestinationString, PCUNICODE_STRING SourceString, BOOLEAN AllocateDestinationString)
#define _Out_
Definition: no_sal2.h:160
#define _In_
Definition: no_sal2.h:158
int Count
Definition: noreturn.cpp:7
NTSYSAPI BOOLEAN NTAPI RtlEqualUnicodeString(PUNICODE_STRING String1, PUNICODE_STRING String2, BOOLEAN CaseInSensitive)
#define ANSI_NULL
_In_ ULONGLONG _In_ ULONGLONG _In_ BOOLEAN Enable
Definition: ntddpcm.h:142
const LUID SeTcbPrivilege
Definition: priv.c:26
#define IDB_MAX_RESOURCES
Definition: resource.h:55
BOOLEAN FASTCALL KeTestSpinLock(IN PKSPIN_LOCK SpinLock)
Definition: spinlock.c:475
VOID FASTCALL KiAcquireSpinLock(IN PKSPIN_LOCK SpinLock)
Definition: spinlock.c:287
VOID FASTCALL KiReleaseSpinLock(IN PKSPIN_LOCK SpinLock)
Definition: spinlock.c:298
BOOLEAN NTAPI SeSinglePrivilegeCheck(_In_ LUID PrivilegeValue, _In_ KPROCESSOR_MODE PreviousMode)
Checks if a single privilege is present in the context of the calling thread.
Definition: priv.c:744
#define L(x)
Definition: ntvdm.h:50
unsigned short USHORT
Definition: pedump.c:61
#define LANG_NEUTRAL
Definition: nls.h:22
#define MAKELANGID(p, s)
Definition: nls.h:15
#define SUBLANG_NEUTRAL
Definition: nls.h:167
static __inline NTSTATUS ProbeAndCaptureUnicodeString(OUT PUNICODE_STRING Dest, IN KPROCESSOR_MODE CurrentMode, IN const UNICODE_STRING *UnsafeSrc)
Definition: probe.h:142
static __inline VOID ReleaseCapturedUnicodeString(IN PUNICODE_STRING CapturedString, IN KPROCESSOR_MODE CurrentMode)
Definition: probe.h:239
_strupr
Definition: string.h:453
#define STATUS_SUCCESS
Definition: shellext.h:65
#define STATUS_BUFFER_OVERFLOW
Definition: shellext.h:66
Definition: pedump.c:458
Definition: btrfs_drv.h:1876
PVOID DllBase
Definition: btrfs_drv.h:1880
UNICODE_STRING BaseDllName
Definition: ldrtypes.h:149
ULONG_PTR Language
Definition: ldrtypes.h:187
ULONG_PTR Name
Definition: ldrtypes.h:186
ULONG_PTR Type
Definition: ldrtypes.h:185
Definition: typedefs.h:120
struct _LIST_ENTRY * Flink
Definition: typedefs.h:121
#define TAG_OSTR
Definition: tag.h:146
#define RTL_CONSTANT_STRING(s)
Definition: tunneltest.c:14
#define NTAPI
Definition: typedefs.h:36
#define MAXUSHORT
Definition: typedefs.h:83
#define IN
Definition: typedefs.h:39
#define CONTAINING_RECORD(address, type, field)
Definition: typedefs.h:260
unsigned char * PUCHAR
Definition: typedefs.h:53
uint32_t ULONG
Definition: typedefs.h:59
char * PCHAR
Definition: typedefs.h:51
STRING OEM_STRING
Definition: umtypes.h:203
_In_ HFONT _Out_ PUINT _Out_ PUINT Width
Definition: font.h:89
_In_ HFONT _Out_ PUINT Height
Definition: font.h:88
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
Definition: wdfdevice.h:4533
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFSTRING String
Definition: wdfdevice.h:2433
_In_ WDFINTERRUPT _In_ PFN_WDF_INTERRUPT_SYNCHRONIZE Callback
Definition: wdfinterrupt.h:458
_Must_inspect_result_ _In_ WDFIORESREQLIST _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFIORESLIST * ResourceList
Definition: wdfresource.h:309
static ULONG Delta
Definition: xboxvideo.c:33
_Requires_lock_held_ Interrupt _Releases_lock_ Interrupt _In_ _IRQL_restores_ KIRQL OldIrql
Definition: kefuncs.h:778
CCHAR KPROCESSOR_MODE
Definition: ketypes.h:7
#define RtlUnicodeStringToOemSize(STRING)
*BytesInOemString PCHAR OemString
Definition: rtlfuncs.h:1577
unsigned char UCHAR
Definition: xmlstorage.h:181