diff --git a/reactos/subsys/system/usetup/usetup.c b/reactos/subsys/system/usetup/usetup.c index cbfc2213a30..b83c859a2bb 100644 --- a/reactos/subsys/system/usetup/usetup.c +++ b/reactos/subsys/system/usetup/usetup.c @@ -31,6 +31,7 @@ #include #include +#include #include "usetup.h" #include "console.h" @@ -3691,6 +3692,43 @@ FlushPage(PINPUT_RECORD Ir) } +static VOID +SignalInitEvent() +{ + NTSTATUS Status; + OBJECT_ATTRIBUTES ObjectAttributes; + UNICODE_STRING UnicodeString; + HANDLE ReactOSInitEvent; + + RtlRosInitUnicodeStringFromLiteral(&UnicodeString, L"\\ReactOSInitDone"); + InitializeObjectAttributes(&ObjectAttributes, + &UnicodeString, + EVENT_ALL_ACCESS, + 0, + NULL); + Status = NtOpenEvent(&ReactOSInitEvent, + EVENT_ALL_ACCESS, + &ObjectAttributes); + if (NT_SUCCESS(Status)) + { + LARGE_INTEGER Timeout; + /* This will cause the boot screen image to go away (if displayed) */ + NtPulseEvent(ReactOSInitEvent, NULL); + + /* Wait for the display mode to be changed (if in graphics mode) */ + Timeout.QuadPart = -50000000LL; /* 5 second timeout */ + NtWaitForSingleObject(ReactOSInitEvent, FALSE, &Timeout); + + NtClose(ReactOSInitEvent); + } + else + { + /* We don't really care if this fails */ + DPRINT1("USETUP: Failed to open ReactOS init notification event\n"); + } +} + + VOID STDCALL NtProcessStartup(PPEB Peb) { @@ -3702,6 +3740,8 @@ NtProcessStartup(PPEB Peb) ProcessHeap = Peb->ProcessHeap; + SignalInitEvent(); + Status = AllocConsole(); if (!NT_SUCCESS(Status)) {