c++ - 切割字符串的字符串安全方式(Windows 内核)

标签 c++ string kernel

我正在编写一个小型微过滤器,我需要从 UNICODE_STRING 中取出最后 3 个字符,以测试文件扩展名是否为“txt”。

目前,我的解决方案是手动修改UNICODE_STRING:

UNICODE_STRING fileName = fileNameInfos->Name; // get file name 
USHORT charsToRemove = fileName.Length / 2 - 3;
fileName.Length -= sizeof(WCHAR) * charsToRemove;
fileName.MaximumLength -= sizeof(WCHAR) * charsToRemove;
fileName.Buffer = fileName.Buffer + charsToRemove;

然后创建一个包含“txt”的新 UNICODE_STRING 来比较它:

RtlCreateUnicodeString(&compareString,L"txt");
if(RtlEqualUnicodeString(&compareString, &fileName))
{ // do stuff }

但我不认为手动修改缓冲区和 UNICODE_STRING 的参数是正确的方法。有没有人有一个字符串安全的解决方案来做到这一点?

提前致谢

最佳答案

实际上对于我的需要 FltParseFileNameInformation 就足够了:https://msdn.microsoft.com/en-us/library/windows/hardware/ff543417%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396

我希望有人能发现它有用

关于c++ - 切割字符串的字符串安全方式(Windows 内核),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31225595/

相关文章:

python - 创建新的 iPython Notebook 时内核死机。

c - i_zone[7]如何代表512个区 block ?

c++ - spirit SA属性编号

c++ - 从 P 帧和 B 帧创建 I 帧

c++ - Qt QDialog 每次关闭并再次显示时都会稍微移动位置

Python For i in range(len(str)) : last iteration prints None

java - 我们如何更改标签中的行?

java - Eclipse 提示以下 String.format 用法

linux - 内核利用 shellcode

c++ - "no member named ' qt_metatype_id '"用于 QFETCH