mirror of
https://github.com/reactos/reactos.git
synced 2024-09-30 14:37:45 +00:00
[LDR] Add initial LOAD_CONFIG support
This commit is contained in:
parent
f1e5bc3d74
commit
1e0f359fa7
|
@ -1872,11 +1872,40 @@ LdrpInitializeProcess(IN PCONTEXT Context,
|
||||||
HeapParameters.Length = sizeof(HeapParameters);
|
HeapParameters.Length = sizeof(HeapParameters);
|
||||||
|
|
||||||
/* Check if we have Configuration Data */
|
/* Check if we have Configuration Data */
|
||||||
if ((LoadConfig) && (ConfigSize == sizeof(IMAGE_LOAD_CONFIG_DIRECTORY)))
|
#define VALID_CONFIG_FIELD(Name) (ConfigSize >= (FIELD_OFFSET(IMAGE_LOAD_CONFIG_DIRECTORY, Name) + sizeof(LoadConfig->Name)))
|
||||||
|
/* The 'original' load config ends after SecurityCookie */
|
||||||
|
if ((LoadConfig) && ConfigSize && (VALID_CONFIG_FIELD(SecurityCookie) || ConfigSize == LoadConfig->Size))
|
||||||
{
|
{
|
||||||
/* FIXME: Custom heap settings and misc. */
|
if (ConfigSize != sizeof(IMAGE_LOAD_CONFIG_DIRECTORY))
|
||||||
DPRINT1("We don't support LOAD_CONFIG data yet\n");
|
DPRINT1("WARN: Accepting different LOAD_CONFIG size!\n");
|
||||||
|
else
|
||||||
|
DPRINT1("Applying LOAD_CONFIG\n");
|
||||||
|
|
||||||
|
if (VALID_CONFIG_FIELD(GlobalFlagsSet) && LoadConfig->GlobalFlagsSet)
|
||||||
|
Peb->NtGlobalFlag |= LoadConfig->GlobalFlagsSet;
|
||||||
|
|
||||||
|
if (VALID_CONFIG_FIELD(GlobalFlagsClear) && LoadConfig->GlobalFlagsClear)
|
||||||
|
Peb->NtGlobalFlag &= ~LoadConfig->GlobalFlagsClear;
|
||||||
|
|
||||||
|
if (VALID_CONFIG_FIELD(CriticalSectionDefaultTimeout) && LoadConfig->CriticalSectionDefaultTimeout)
|
||||||
|
RtlpTimeout.QuadPart = Int32x32To64(LoadConfig->CriticalSectionDefaultTimeout, -10000000);
|
||||||
|
|
||||||
|
if (VALID_CONFIG_FIELD(DeCommitFreeBlockThreshold) && LoadConfig->DeCommitFreeBlockThreshold)
|
||||||
|
HeapParameters.DeCommitFreeBlockThreshold = LoadConfig->DeCommitFreeBlockThreshold;
|
||||||
|
|
||||||
|
if (VALID_CONFIG_FIELD(DeCommitTotalFreeThreshold) && LoadConfig->DeCommitTotalFreeThreshold)
|
||||||
|
HeapParameters.DeCommitTotalFreeThreshold = LoadConfig->DeCommitTotalFreeThreshold;
|
||||||
|
|
||||||
|
if (VALID_CONFIG_FIELD(MaximumAllocationSize) && LoadConfig->MaximumAllocationSize)
|
||||||
|
HeapParameters.MaximumAllocationSize = LoadConfig->MaximumAllocationSize;
|
||||||
|
|
||||||
|
if (VALID_CONFIG_FIELD(VirtualMemoryThreshold) && LoadConfig->VirtualMemoryThreshold)
|
||||||
|
HeapParameters.VirtualMemoryThreshold = LoadConfig->VirtualMemoryThreshold;
|
||||||
|
|
||||||
|
if (VALID_CONFIG_FIELD(ProcessHeapFlags) && LoadConfig->ProcessHeapFlags)
|
||||||
|
HeapFlags = LoadConfig->ProcessHeapFlags;
|
||||||
}
|
}
|
||||||
|
#undef VALID_CONFIG_FIELD
|
||||||
|
|
||||||
/* Check for custom affinity mask */
|
/* Check for custom affinity mask */
|
||||||
if (Peb->ImageProcessAffinityMask)
|
if (Peb->ImageProcessAffinityMask)
|
||||||
|
|
Loading…
Reference in a new issue