whar字符串路径获取扩展名与文件名(C语言,windows内核)

在项目中遇到要获取文件的扩展名与文件名,无奈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));

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值