驱动中如下代码,有时候会在wcsstr行蓝屏
if (wcsstr(file_obj->FileName.Buffer,L"abc.db"))
{
DbgPrint("open abc.db/n");
}
其中file_obj->FileName为Unicode_String类型,经分析,应该是FileName.Buffer并非以0结尾的字符串。所以改用自己实现的以下替代函数
#include "wchar.h"
//search string's substring
//str: Buffer to search from
//nLength: the character length of str
//returns a pointer to the first occurrence of strSearch in str.
//
char* __stdcall FindSubStringA(const char *str,int nLength,const char *strSearch)
{
char *cp=(char *)str;
char *s1, *s2;
if(!*strSearch)
return ((char *)str);
while(nLength && *cp )
{
s1 = cp;
s2 = (char*)strSearch;
while(*s1 && *s2 && !(*s1-*s2))
s1++, s2++;
if(!*s2)
return(cp);
cp++;
nLength--;
}
return (NULL);
}
wchar_t* __stdcall FindSubStringW(const wchar_t *str,int nLength,const wchar_t *strSearch)
{
wchar_t *cp=(wchar_t *)str;
wchar_t *s1, *s2;
if(!*strSearch)
return ((wchar_t *)str);
while(nLength && *cp )
{
s1 = cp;
s2 = (wchar_t*)strSearch;
while(*s1 && *s2 && !(*s1-*s2))
s1++, s2++;
if(!*s2)
return(cp);
cp++;
nLength--;
}
return(NULL);
}
代码改成如下后,蓝屏不再出现。
if (FindSubString(file_obj->FileName.Buffer,file_obj->FileName.Length/2,L"abc.db"))
{
DbgPrint("open abc.db/n");
}