在项目中遇到要获取文件的扩展名与文件名,无奈FltGetFileNameInformation 得到的是文件的全路径信息,当然这个结构里面也可以获取文件扩展名,但有时好像不起作用(测试过),所以就自己写了个函数来处理这个字符串
字符串:\\Device\\HarddiskVolume2\\Windows\\explorer.exe
获取扩展名
//获取文件全路径的扩展名,没有扩展名就为空
VOID KuoZhan(WCHAR wch[],WCHAR cch[])
{
int j = 0;
int flag = 0;
for(int i = wcslen(wch)-1;i>=0;i--)
{
if (wch[i] == '\\')
{
break;
}
else if(wch[i]!='.')
{
cch[j] = wch[i];
j++;
}else
{
flag = 1;
break;
}
}
if(flag == 0)
{
cch[0] = '\0';
}
for(int i = 0,j=wcslen(cch)-1; i<j; i++,j--)
{
WCHAR tmp;
tmp = cch[i];
cch[i] = cch[j];
cch[j] = tmp;
}
return ;
}
以下是调用
WCHAR CchStyle[260] ={0};
KuoZhan(nameInfo->Name.Buffer,CchStyle); //nameInfo 是minifilter中解析出来的文件全路径信息
//以下是将获取到的扩展名转为UNICODE_STRING
UNICODE_STRING TEMP ;
RtlInitUnicodeString(&TEMP,CchStyle);
获取文件名
//从进程全路径中获取进程名
VOID GetProcessNameFromFullPath(wchar_t wch[],wchar_t cch[])
{
int j = 0;
for(int i = wcslen(wch)-1;i>=0;i--)
{
if (wch[i] == '\\')
{
break;
}
cch[j] = wch[i];
j++;
}
for(int i = 0,j=wcslen(cch)-1; i<j; i++,j--)
{
wchar_t tmp;
tmp = cch[i];
cch[i] = cch[j];
cch[j] = tmp;
}
cch[j+1] = '\0';
return ;
}
以下是调用
WCHAR tmpProcessName[260] ={0};
GetProcessNameFromFullPath(fullPath.Buffer,tmpProcessName);
UNICODE_STRING pName ;
RtlInitUnicodeString(&pName,tmpProcessName);
KdPrint(("pName = %wZ\n",&pName));
今天的文章获取字符串后缀_怎样显示文件类型扩展名[通俗易懂]分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/86050.html