Fix for the loading of the "KnownDlls" in SMSS. Patch by Hermès BÉLUSCA - MAÏTO.
The patch was applied without changes to comments, indentation and coding style. 

See issue #6159 for more details.

svn path=/trunk/; revision=51511
This commit is contained in:
Eric Kohl
2011-04-30 22:09:16 +00:00
parent a41476b164
commit a4b0bea539
2 changed files with 44 additions and 20 deletions
+1 -1
View File
@@ -30,10 +30,10 @@ struct {
{TRUE, SmInitDosDevices, "create dos device links"},
{TRUE, SmRunBootApplications, "run boot applications"},
{TRUE, SmProcessFileRenameList, "process the file rename list"},
{FALSE, SmUpdateEnvironment, "update environment variables"},
{FALSE, SmLoadKnownDlls, "preload system DLLs"},
{TRUE, SmCreatePagingFiles, "create paging files"},
{TRUE, SmInitializeRegistry, "initialize the registry"},
{FALSE, SmUpdateEnvironment, "update environment variables"},
{TRUE, SmInitializeClientManagement, "initialize client management"},
{TRUE, SmLoadSubsystems, "load subsystems"}
};
+43 -19
View File
@@ -227,10 +227,6 @@ SmSetEnvironmentVariables(VOID)
goto done;
}
done:
NtClose(EnvironmentKey);
/* Set the 'PROCESSOR_IDENTIFIER' system environment variable */
RtlInitUnicodeString(&Identifier, NULL);
RtlInitUnicodeString(&VendorIdentifier, NULL);
@@ -251,25 +247,37 @@ done:
QueryTable,
NULL,
NULL);
if (NT_SUCCESS(Status))
if (!NT_SUCCESS(Status))
{
DPRINT("SM: szIdentifier: %wZ\n", &Identifier);
DPRINT("SM: szVendorIdentifier: %wZ\n", &VendorIdentifier);
swprintf(Buffer, L"%wZ, %wZ", &Identifier, &VendorIdentifier);
RtlWriteRegistryValue(RTL_REGISTRY_CONTROL,
L"Session Manager\\Environment",
L"PROCESSOR_IDENTIFIER",
REG_SZ,
Buffer,
(wcslen(Buffer) + 1) * sizeof(WCHAR));
DPRINT1("SM: Failed to retrieve processor Identifier and/or VendorIdentifier (Status %08lx)", Status);
goto done;
}
RtlFreeUnicodeString(&Identifier);
RtlFreeUnicodeString(&VendorIdentifier);
DPRINT("SM: szIdentifier: %wZ\n" , &Identifier);
DPRINT("SM: szVendorIdentifier: %wZ\n", &VendorIdentifier);
return STATUS_SUCCESS;
RtlInitUnicodeString(&VariableName, L"PROCESSOR_IDENTIFIER");
swprintf(Buffer, L"%wZ, %wZ", &Identifier, &VendorIdentifier);
RtlFreeUnicodeString(&VendorIdentifier);
RtlFreeUnicodeString(&Identifier);
Status = NtSetValueKey(EnvironmentKey,
&VariableName,
0,
REG_SZ,
Buffer,
(wcslen(Buffer) + 1) * sizeof(WCHAR));
if (!NT_SUCCESS(Status))
{
DPRINT1("SM: Failed to set the PROCESSOR_IDENTIFIER environment variable (Status %08lx)", Status);
goto done;
}
done:
/* Close the handle */
NtClose(EnvironmentKey);
return Status;
}
@@ -282,6 +290,10 @@ SmUpdateEnvironment(VOID)
RTL_QUERY_REGISTRY_TABLE QueryTable[2];
WCHAR ValueBuffer[MAX_PATH];
NTSTATUS Status;
#ifndef NDEBUG
ULONG ii;
PWSTR envp;
#endif
/*
* The following environment variables must be set prior to reading
@@ -317,6 +329,18 @@ SmUpdateEnvironment(VOID)
&SmSystemEnvironment,
SmSystemEnvironment);
#ifndef NDEBUG
/* Print all environment varaibles */
ii = 0;
envp = SmSystemEnvironment;
DbgPrint("SmUpdateEnvironment:\n");
while (*envp)
{
DbgPrint(" %u: %S\n", ii++, envp);
envp += wcslen(envp) + 1;
}
#endif
return Status;
}