[ntoskrnl] Never suppose that buffer in UNICODE_STRING is null terminated. Fixes display artifacts on list of loaded drivers

svn path=/trunk/; revision=46193
This commit is contained in:
Hervé Poussineau 2010-03-13 23:19:05 +00:00
parent c709d2abc9
commit c39812d1b6
2 changed files with 14 additions and 28 deletions

View file

@ -158,35 +158,22 @@ IopGetDriverObject(
VOID
FASTCALL
INIT_FUNCTION
IopDisplayLoadingMessage(PVOID ServiceName,
BOOLEAN Unicode)
IopDisplayLoadingMessage(PUNICODE_STRING ServiceName)
{
CHAR TextBuffer[256];
PCHAR Extra = ".sys";
if (ExpInTextModeSetup) return;
if (Unicode)
{
if (wcsstr(_wcsupr(ServiceName), L".SYS")) Extra = "";
sprintf(TextBuffer,
"%s%s%s\\%S%s\n",
KeLoaderBlock->ArcBootDeviceName,
KeLoaderBlock->NtBootPathName,
"System32\\Drivers",
(PWCHAR)ServiceName,
Extra);
}
RtlUpcaseUnicodeString(ServiceName, ServiceName, FALSE);
snprintf(TextBuffer, sizeof(TextBuffer),
"%s%s%s\\%wZ",
KeLoaderBlock->ArcBootDeviceName,
KeLoaderBlock->NtBootPathName,
"System32\\Drivers",
ServiceName);
if (!strstr(TextBuffer, ".sys"))
strcat(TextBuffer, ".sys\n");
else
{
if (strstr(_strupr(ServiceName), ".SYS")) Extra = "";
sprintf(TextBuffer,
"%s%s%s\\%s%s\n",
KeLoaderBlock->ArcBootDeviceName,
KeLoaderBlock->NtBootPathName,
"System32\\Drivers",
(PCHAR)ServiceName,
Extra);
}
strcat(TextBuffer, "\n");
HalDisplayString(TextBuffer);
}
@ -788,7 +775,7 @@ IopInitializeBuiltinDriver(IN PLDR_DATA_TABLE_ENTRY LdrEntry)
/*
* Display 'Loading XXX...' message
*/
IopDisplayLoadingMessage(ModuleName->Buffer, TRUE);
IopDisplayLoadingMessage(ModuleName);
InbvIndicateProgress();
/*

View file

@ -48,8 +48,7 @@ extern BOOLEAN NoGuiBoot;
VOID
FASTCALL
INIT_FUNCTION
IopDisplayLoadingMessage(PVOID ServiceName,
BOOLEAN Unicode);
IopDisplayLoadingMessage(PUNICODE_STRING ServiceName);
/* PRIVATE FUNCTIONS **********************************************************/
@ -416,7 +415,7 @@ IopLoadDriver(PSERVICE Service)
{
NTSTATUS Status = STATUS_UNSUCCESSFUL;
IopDisplayLoadingMessage(Service->ServiceName.Buffer, TRUE);
IopDisplayLoadingMessage(&Service->ServiceName);
Status = ZwLoadDriver(&Service->RegistryPath);
IopBootLog(&Service->ImagePath, NT_SUCCESS(Status) ? TRUE : FALSE);
if (!NT_SUCCESS(Status))