阅读:1814回复:5
关于重命名时FILE_OBJECT的FileName问题
我在重命名时发现
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); //................. } 请问这一段有什么错误吗?目前就是文件名总是多一点东西。(有时候是好的) |
|
沙发#
发布于:2008-04-08 07:33
前面肯定有\??\
后面会出现字符 可能后续的内存不为0 这样试试 wcsncpy(temp,pRenameInfo->FileName,pRenameInfo->FilenameLength) |
|
板凳#
发布于:2008-04-08 09:07
\??\ 是Window系统文件路径的前缀
|
|
|
地板#
发布于: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); 我是这样得到正确的全路径的~目前没有问题。请问这样对吗? |
|
地下室#
发布于:2008-04-09 09:16
FileNameLength是我的宽字符个数的2倍。
|
|
5楼#
发布于:2008-04-10 12:54
正确了
|
|