切割字符串的字符串安全方式(Windows 内核)
String safe way to cut a string (Windows 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
希望有人能发现它有用
我正在编写一个小型微过滤器,我需要从 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
希望有人能发现它有用