#include <ntoskrnl.h>
#define NDEBUG
#include <debug.h>
-#include "ntstrsafe.h"
/* Temporary hack */
BOOLEAN
#endif
/* NT System Info */
-ULONG NtGlobalFlag;
+ULONG NtGlobalFlag = 0;
ULONG ExSuiteMask;
/* Cm Version Info */
NTSTATUS
NTAPI
+INIT_FUNCTION
ExpCreateSystemRootLink(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
{
UNICODE_STRING LinkName;
VOID
NTAPI
+INIT_FUNCTION
ExpInitNls(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
{
LARGE_INTEGER SectionSize;
/* Allocate the a new buffer since loader memory will be freed */
ExpNlsTableBase = ExAllocatePoolWithTag(NonPagedPool,
ExpNlsTableSize,
- 'iltR');
+ TAG_RTLI);
if (!ExpNlsTableBase) KeBugCheck(PHASE0_INITIALIZATION_FAILED);
/* Copy the codepage data in its new location. */
}
/* Copy the codepage data in its new location. */
+ ASSERT(SectionBase > MmSystemRangeStart);
RtlCopyMemory(SectionBase, ExpNlsTableBase, ExpNlsTableSize);
/* Free the previously allocated buffer and set the new location */
- ExFreePoolWithTag(ExpNlsTableBase, 'iltR');
+ ExFreePoolWithTag(ExpNlsTableBase, TAG_RTLI);
ExpNlsTableBase = SectionBase;
/* Initialize the NLS Tables */
VOID
NTAPI
+INIT_FUNCTION
ExpLoadInitialProcess(IN PINIT_BUFFER InitBuffer,
OUT PRTL_USER_PROCESS_PARAMETERS *ProcessParameters,
OUT PCHAR *ProcessEnvironment)
ULONG
NTAPI
+INIT_FUNCTION
ExComputeTickCountMultiplier(IN ULONG ClockIncrement)
{
ULONG MsRemainder = 0, MsIncrement;
BOOLEAN
NTAPI
+INIT_FUNCTION
ExpInitSystemPhase0(VOID)
{
/* Initialize EXRESOURCE Support */
BOOLEAN
NTAPI
+INIT_FUNCTION
ExpInitSystemPhase1(VOID)
{
/* Initialize worker threads */
BOOLEAN
NTAPI
+INIT_FUNCTION
ExInitSystem(VOID)
{
/* Check the initialization phase */
BOOLEAN
NTAPI
+INIT_FUNCTION
ExpIsLoaderValid(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
{
PLOADER_PARAMETER_EXTENSION Extension;
VOID
NTAPI
+INIT_FUNCTION
ExpLoadBootSymbols(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
{
ULONG i = 0;
VOID
NTAPI
+INIT_FUNCTION
ExBurnMemory(IN PLOADER_PARAMETER_BLOCK LoaderBlock,
IN ULONG PagesToDestroy,
IN TYPE_OF_MEMORY MemoryType)
VOID
NTAPI
+INIT_FUNCTION
ExpInitializeExecutive(IN ULONG Cpu,
IN PLOADER_PARAMETER_BLOCK LoaderBlock)
{
PLDR_DATA_TABLE_ENTRY NtosEntry;
PMESSAGE_RESOURCE_ENTRY MsgEntry;
ANSI_STRING CsdString;
- SIZE_T Remaining = 0;
+ size_t Remaining = 0;
PCHAR RcEnd = NULL;
CHAR VersionBuffer [65];
if (CmNtCSDReleaseType == 1) CmNtSpBuildNumber |= 1830 << 16;
}
+ /* Add loaded CmNtGlobalFlag value */
+ NtGlobalFlag |= CmNtGlobalFlag;
+
/* Initialize the executive at phase 0 */
if (!ExInitSystem()) KeBugCheck(PHASE0_INITIALIZATION_FAILED);
SharedUserData->NtMinorVersion = NtMinorVersion;
/* Set the machine type */
- SharedUserData->ImageNumberLow = IMAGE_FILE_MACHINE_ARCHITECTURE;
- SharedUserData->ImageNumberHigh = IMAGE_FILE_MACHINE_ARCHITECTURE;
+ SharedUserData->ImageNumberLow = IMAGE_FILE_MACHINE_NATIVE;
+ SharedUserData->ImageNumberHigh = IMAGE_FILE_MACHINE_NATIVE;
}
VOID
NTAPI
+INIT_FUNCTION
Phase1InitializationDiscard(IN PVOID Context)
{
PLOADER_PARAMETER_BLOCK LoaderBlock = Context;
ANSI_STRING TempString;
ULONG LastTzBias, Length, YearHack = 0, Disposition, MessageCode = 0;
SIZE_T Size;
+ size_t Remaining;
PRTL_USER_PROCESS_INFORMATION ProcessInfo;
KEY_VALUE_PARTIAL_INFORMATION KeyPartialInfo;
UNICODE_STRING KeyName, DebugString;
/* Allocate the initialization buffer */
InitBuffer = ExAllocatePoolWithTag(NonPagedPool,
sizeof(INIT_BUFFER),
- 'tinI');
+ TAG_INIT);
if (!InitBuffer)
{
/* Bugcheck */
StringBuffer = InitBuffer->VersionBuffer;
BeginBuffer = StringBuffer;
EndBuffer = StringBuffer;
- Size = 256;
+ Remaining = sizeof(InitBuffer->VersionBuffer);
if (CmCSDVersionString.Length)
{
/* Print the version string */
Status = RtlStringCbPrintfExA(StringBuffer,
- 255,
+ Remaining,
&EndBuffer,
- &Size,
+ &Remaining,
0,
": %wZ",
&CmCSDVersionString);
else
{
/* No version */
- Size = 255;
+ *EndBuffer = ANSI_NULL; /* Null-terminate the string */
}
- /* Null-terminate the string */
- *EndBuffer++ = ANSI_NULL;
+ /* Skip over the null-terminator to start a new string */
+ ++EndBuffer;
+ --Remaining;
/* Build the version number */
StringBuffer = InitBuffer->VersionNumber;
Status = RtlStringCbPrintfA(StringBuffer,
- 24,
+ sizeof(InitBuffer->VersionNumber),
"%u.%u",
VER_PRODUCTMAJORVERSION,
VER_PRODUCTMINORVERSION);
{
/* Create the banner message */
Status = RtlStringCbPrintfA(EndBuffer,
- Size,
+ Remaining,
(PCHAR)MsgEntry->Text,
StringBuffer,
NtBuildNumber & 0xFFFF,
else
{
/* Use hard-coded banner message */
- Status = RtlStringCbCopyA(EndBuffer, Size, "REACTOS (R)\n");
+ Status = RtlStringCbCopyA(EndBuffer, Remaining, "REACTOS (R)\n");
if (!NT_SUCCESS(Status))
{
/* Bugcheck */
/* Create the string */
StringBuffer = InitBuffer->VersionBuffer;
Status = RtlStringCbPrintfA(StringBuffer,
- 256,
+ sizeof(InitBuffer->VersionBuffer),
NT_SUCCESS(MsgStatus) ?
(PCHAR)MsgEntry->Text :
"%u System Processor [%u MB Memory] %Z\n",
&KeyPartialInfo,
sizeof(KeyPartialInfo),
&Length);
- if (!NT_SUCCESS(Status)) AlternateShell = FALSE;
+ if (!(NT_SUCCESS(Status) || Status == STATUS_BUFFER_OVERFLOW))
+ {
+ AlternateShell = FALSE;
+ }
}
/* Create the option key */
InbvUpdateProgressBar(90);
/* Launch initial process */
+ DPRINT1("Free non-cache pages: %lx\n", MmAvailablePages + MiMemoryConsumers[MC_CACHE].PagesUsed);
ProcessInfo = &InitBuffer->ProcessInfo;
ExpLoadInitialProcess(InitBuffer, &ProcessParameters, &Environment);
ExpInitializationPhase++;
/* Free the boot buffer */
- ExFreePool(InitBuffer);
+ ExFreePoolWithTag(InitBuffer, TAG_INIT);
+ DPRINT1("Free non-cache pages: %lx\n", MmAvailablePages + MiMemoryConsumers[MC_CACHE].PagesUsed);
}
VOID