原因
wcsstr是根据最后一个字符是否为NULL判断字符串是否完成的 ,而 UNICODE_STRING,并不是应用层开发意义上的字符串,也不一定是以NULL结束。
解决方案
RtlStringCbCopyNW 复制 buffer 到 wchar* 中,在进行比较
WCHAR pszDest[MAX_PATH] = { 0 };
if (STATUS_SUCCESS != RtlStringCbCopyW(pszDest, MAX_PATH, FltObjects->FileObject->FileName.Buffer))
{
goto _abort;
}
if (wcsstr(pszDest, L"passs.lnk") != 0)
{
DT_INFO("[LYSM] passs.lnk");
goto _abort;
}
2021-6-28
另一种方案
wchar_t str[256];
wcsncpy(str, punistr->Buffer, punistr->Length / 2);
str[punistr->Length / 2] = 0;