wfhaha
驱动牛犊
驱动牛犊
  • 注册日期2007-08-07
  • 最后登录2010-04-30
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望38点
  • 贡献值0点
  • 好评度24点
  • 原创分0分
  • 专家分0分
阅读:1814回复:5

关于重命名时FILE_OBJECT的FileName问题

楼主#
更多 发布于:2008-04-07 16:36
我在重命名时发现

case IRP_MJ_SET_INFORMATION:
            if( currentIrpStack->Parameters.SetFile.FileInformationClass ==
                FileRenameInformation && IsInDirSet(fullPathName)) {
                UNICODE_STRING uFile;
                                ANSI_STRING aFile;
                                pRenameInfo = (PFILE_RENAME_INFORMATION)(Irp->AssociatedIrp.SystemBuffer);
                                wchar_t* pFile = wcschr(pRenameInfo->FileName,L':');          //断点到此时,pRenameInfo->FileName在文件的全路径前加有\??\,而后面有时候出现\0x01这个字符。不知道是为什么!!!
                                pFile--;
                                RtlInitUnicodeString(&uFile,pFile);
                                RtlUnicodeStringToAnsiString(&aFile,&uFile,TRUE);

                                //.................
                }


请问这一段有什么错误吗?目前就是文件名总是多一点东西。(有时候是好的)
x-star
驱动小牛
驱动小牛
  • 注册日期2007-04-26
  • 最后登录2018-11-17
  • 粉丝0
  • 关注0
  • 积分65分
  • 威望664点
  • 贡献值1点
  • 好评度39点
  • 原创分1分
  • 专家分1分
  • 社区居民
沙发#
发布于:2008-04-08 07:33
前面肯定有\??\
后面会出现字符 可能后续的内存不为0 这样试试  wcsncpy(temp,pRenameInfo->FileName,pRenameInfo->FilenameLength)
alwaysrun
驱动小牛
驱动小牛
  • 注册日期2006-06-01
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分1059分
  • 威望752点
  • 贡献值1点
  • 好评度98点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2008-04-08 09:07
\??\ 是Window系统文件路径的前缀
一颗平常的心!
wfhaha
驱动牛犊
驱动牛犊
  • 注册日期2007-08-07
  • 最后登录2010-04-30
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望38点
  • 贡献值0点
  • 好评度24点
  • 原创分0分
  • 专家分0分
地板#
发布于:2008-04-09 09:15
pRenameInfo = (PFILE_RENAME_INFORMATION)(Irp->AssociatedIrp.SystemBuffer);
                pFile = wcschr(pRenameInfo->FileName,L':');
                pFile--;
                RtlZeroMemory(wtarget,256*sizeof(WCHAR));
                wcsncpy(wtarget,pFile,pRenameInfo->FileNameLength/2-4);

                RtlInitUnicodeString(&uFile,wtarget);
                RtlUnicodeStringToAnsiString(&aFile,&uFile,TRUE);
我是这样得到正确的全路径的~目前没有问题。请问这样对吗?
wfhaha
驱动牛犊
驱动牛犊
  • 注册日期2007-08-07
  • 最后登录2010-04-30
  • 粉丝0
  • 关注0
  • 积分4分
  • 威望38点
  • 贡献值0点
  • 好评度24点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2008-04-09 09:16
FileNameLength是我的宽字符个数的2倍。
x-star
驱动小牛
驱动小牛
  • 注册日期2007-04-26
  • 最后登录2018-11-17
  • 粉丝0
  • 关注0
  • 积分65分
  • 威望664点
  • 贡献值1点
  • 好评度39点
  • 原创分1分
  • 专家分1分
  • 社区居民
5楼#
发布于:2008-04-10 12:54
正确了
游客

返回顶部