最近在写Windows驱动的时候遇到了问题。使用 RtlAppendUnicodeStringToString 连续串联多个 UNICODE_STRING 会导致内核崩溃。我已经把问题锁定在下面的代码中,请帮我解决这个问题,谢谢
KeStackAttachProcess( Process, &apcstate );
PPEB peb = PsGetProcessPeb( Process );
if ( peb != NULL )
{
UNICODE_STRING NewBuffer = RTL_CONSTANT_STRING( L"\"" );
UNICODE_STRING Buffer = peb->ProcessParameters->ImagePathName;
UNICODE_STRING suffix = RTL_CONSTANT_STRING( L"\" --DEBUGMODE" );
NewBuffer.MaximumLength = Buffer.MaximumLength + NewBuffer.MaximumLength;
RtlAppendUnicodeStringToString( &NewBuffer, &Buffer );
NewBuffer.MaximumLength = suffix.MaximumLength + NewBuffer.MaximumLength;
RtlAppendUnicodeStringToString( &NewBuffer, &suffix );
peb->ProcessParameters->CommandLine.MaximumLength = NewBuffer.MaximumLength;
peb->ProcessParameters->CommandLine = NewBuffer;
}
KeUnstackDetachProcess( &apcstate );
如果我用下面的代码替换上面有问题的代码,它工作正常,但它没有做我想要的
KeStackAttachProcess( Process, &apcstate );
PPEB peb = PsGetProcessPeb( Process );
if ( peb != NULL )
{
UNICODE_STRING Buffer = peb->ProcessParameters->ImagePathName;
UNICODE_STRING suffix = RTL_CONSTANT_STRING( L" --DEBUGMODE" );
Buffer.MaximumLength = suffix.MaximumLength + Buffer.MaximumLength;
RtlAppendUnicodeStringToString( &Buffer, &suffix );
peb->ProcessParameters->CommandLine.MaximumLength = Buffer.MaximumLength;
peb->ProcessParameters->CommandLine = Buffer;
}
KeUnstackDetachProcess( &apcstate );