RTlAppendUnicodeStringToString 时 NT 内核崩溃

问题描述 投票:0回答:0

最近在写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 );
c++ unicode driver windows-driver
© www.soinside.com 2019 - 2024. All rights reserved.