关于由HANDLE获取文件名的问题

news/2024/7/7 7:34:32


问题:关于由HANDLE获取文件名的问题

PFILE_NAME_INFORMATION   pfni;    
  pfni=(PFILE_NAME_INFORMATION)ExAllocatePool(PagedPool,   sizeof(FILE_NAME_INFORMATION)   +   255   *   sizeof(WCHAR)   );  
  memset(pfni,0,sizeof(FILE_NAME_INFORMATION)   +   255   *   sizeof(WCHAR));  
  status=ZwQueryInformationFile(p1,&IoStatus,pfni,sizeof(OBJECT_NAME_INFORMATION),FileNameInformation);  
   
我是这样获取文件名的,问题是无法获取中文的文件名.  
    


回答1:
status=ZwQueryInformationFile(p1,&IoStatus,pfni,sizeof(OBJECT_NAME_INFORMATION),FileNameInformation);[/quote]  
   
  调用好像有问题,WDK里面是这样定义:  
  NTSTATUS    
      ZwQueryInformationFile(  
          IN   HANDLE     FileHandle,  
          OUT   PIO_STATUS_BLOCK     IoStatusBlock,  
          OUT   PVOID     FileInformation,  
          IN   ULONG     Length,  
          IN   FILE_INFORMATION_CLASS     FileInformationClass  
          );  
  Length:   The   size,   in   bytes,   of   the   buffer   pointed   to   by   FileInformation.    
 


回答2:
写错了应该是  
  status=ZwQueryInformationFile(p1,&IoStatus,pfni,sizeof(FILE_NAME_INFORMATION)   +   255   *   sizeof(WCHAR),FileNameInformation);  
   
  英文的文件名显示无问题,但是中午就是"??.xxx"这样,没有办法吗

回答3:
 okay,也就是说文件名是取出来了,但是显示不出来。你在哪里显示?


回答4:
这样:  
  DbgPrint("%S/n",pfni->FileName);//


回答5:
晕,这样显然不能显示中文阿...中文不是这么简单就能显示的,呵呵

回答6:

搞定了,
  RtlInitUnicodeString(&un,pfni->FileName);      
  RtlUnicodeStringToAnsiString(&an,&un,TRUE);
  DbgPrint("%s   %d/n",an.Buffer,an.Length);  
   
  把wchar转换成char就可以显示了
 


http://www.niftyadmin.cn/n/1995589.html

相关文章

AngularJS controller调用factory

1、定义 factory.js 文件 var appFactorys angular.module(starter.factorys, []) appFactorys.factory(HouseFactory, function () {var houseList [{ id: 0, title: 急售北二环 小区配套齐全 精装修, price: 88.0, describe: 2室1厅 120平米, img: img/ben.png },{ id: 1, …

Tapestry中Sumbit/ImageSubmit的属性selected和tag

Tapestry中Sumbit/ImageSubmit的属性selected和tag 个人认为Submit/ImageSubmit标准组件的两个属性selected和tag的设置比较罗嗦,可能是性能和灵活性的一种权衡吧。其中,selected指定页面类的一个属性,tag设置该页面属性的值。selected和tag…

centos虚拟机无法上网

centos虚拟机无法上网解决办法解决办法 首先确保使用的是nat模式 修改vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICEeth0 HWADDR00:0C:29:8D:E6:73 TYPEEthernet UUIDa81ecb00-6b42-4ff4-8895-170ab7a2672a ONBOOTyes #开机启动 NM_CONTROLLEDyes BOOTPROTOstatic# 修…

AngularJS controller调用services

1、定义 factory.js 文件 var appFactorys angular.module(starter.factorys, []) appFactorys.factory(GoodsFactory, function () {var goodsList [{ "id": 1, "title": "手机", "icon": "icon ion-android-phone-portrait c…

制作yum源

制作yum源创建一个文件夹,用来保存yum软件 mkdir /mnt/cdrom挂载 mount -t iso9660 -o ro /dev/cdrom /mnt/cdrom/修改每次重启之后都要重新挂载的问题 vi /etc/fstab 添加如下配置 /dev/cdrom /mnt/cdrom iso9660 defaults 0 …

Tapestry的数据校验功能-修改框架初试

Tapestry的数据校验功能-修改框架初试 不需要修改tapestry框架,但是前端javascript的校验功能丢失了。可以满足只需要后端校验的需要。本文对“配置一次,前后都用”的理想模式进行实现,经测试表明成功了!1,需要修改以…

经典话语03

一女子走夜路,突然看到一男张开双臂向她走来,做拥抱状,上前就是一脚.男子倒地大哭,说:都第三块了,我招谁惹谁了,带块玻璃回家就这么难么? 海龟酒量高,某天喝醉了,朋友问:你怎么还会喝醉?海龟答:唉,章鱼那孙子非要和爷划拳,丫的,那么多手,看都看不过来,真是输惨了! 一犯人被…

fastjson报错Can not find a deserializer

使用fastjson将string转成javabean异常信息解决办法异常信息 Can not find a deserializer解决办法 出现这个异常的原因是,实体类的字段类型不正确。如果string中的对应字段,还有下级元素即{key:{key:value}}的时候,实体类的字段…