Fixed the loading of the global flag.
Modified: trunk/reactos/lib/ntdll/ldr/startup.c
_____
Modified: trunk/reactos/lib/ntdll/ldr/startup.c
--- trunk/reactos/lib/ntdll/ldr/startup.c 2005-08-11 19:44:36 UTC
(rev 17296)
+++ trunk/reactos/lib/ntdll/ldr/startup.c 2005-08-11 19:46:39 UTC
(rev 17297)
@@ -66,14 +66,35 @@
NTSTATUS Status = STATUS_SUCCESS;
ULONG Value = 0;
UNICODE_STRING ValueString;
+ UNICODE_STRING ImageName;
+ UNICODE_STRING ImagePathName;
WCHAR ValueBuffer[64];
ULONG ValueSize;
if (Peb->ProcessParameters &&
Peb->ProcessParameters->ImagePathName.Length > 0)
{
+ DPRINT("%wZ\n", &Peb->ProcessParameters->ImagePathName);
+
+ ImagePathName = Peb->ProcessParameters->ImagePathName;
+ ImageName.Buffer = ImagePathName.Buffer + ImagePathName.Length
/ sizeof(WCHAR);
+ ImageName.Length = 0;
+ while (ImagePathName.Buffer < ImageName.Buffer)
+ {
+ ImageName.Buffer--;
+ if (*ImageName.Buffer == L'\\')
+ {
+ ImageName.Buffer++;
+ break;
+ }
+ }
+ ImageName.Length = ImagePathName.Length - (ImageName.Buffer -
ImagePathName.Buffer) * sizeof(WCHAR);
+ ImageName.MaximumLength = ImageName.Length +
ImagePathName.MaximumLength - ImagePathName.Length;
+
+ DPRINT("%wZ\n", &ImageName);
+
/* global flag */
- Status = LdrQueryImageFileExecutionOptions
(&Peb->ProcessParameters->ImagePathName,
+ Status = LdrQueryImageFileExecutionOptions (&ImageName,
L"GlobalFlag",
REG_SZ,
(PVOID)ValueBuffer,
@@ -81,12 +102,15 @@
&ValueSize);
if (NT_SUCCESS(Status))
{
- ValueString.Buffer = ValueBuffer + 1;
- ValueString.Length = ValueSize - 2 * sizeof(WCHAR);
+ ValueString.Buffer = ValueBuffer;
+ ValueString.Length = ValueSize - sizeof(WCHAR);
ValueString.MaximumLength = sizeof(ValueBuffer);
- RtlUnicodeStringToInteger(&ValueString, 16, &Value);
- Peb->NtGlobalFlag |= Value;
- DPRINT("GlobalFlag: Key='%S', Value=%08x\n", ValueBuffer,
Value);
+ Status = RtlUnicodeStringToInteger(&ValueString, 16,
&Value);
+ if (NT_SUCCESS(Status))
+ {
+ Peb->NtGlobalFlag |= Value;
+ DPRINT("GlobalFlag: Key='%S', Value=%08x\n",
ValueBuffer, Value);
+ }
}
/*
* FIXME: