unknown_love
驱动牛犊
驱动牛犊
  • 注册日期2007-07-24
  • 最后登录2007-12-25
  • 粉丝0
  • 关注0
  • 积分160分
  • 威望17点
  • 贡献值0点
  • 好评度16点
  • 原创分0分
  • 专家分0分
阅读:1356回复:1

已知文件名柄,只能取得路径名(无法得到盘符),如何取得文件的完整路径?

楼主#
更多 发布于:2007-09-16 11:12
HANDLE hFile; //已知的文件句柄
PFILE_OBJECT pFileObj=NULL;
OBJECT_HANDLE_INFORMATION info;
ANSI_STRING str;
char* buff;

ObReferenceObjectByHandle(hFile,0,0,KernelMode,(PVOID)&pFileObj,&info);

if (!pFile)
    return;
RtlUnicodeStringToAnsiString(&str,&pFile->FileName,1);
buff=str.Buffer;

DbgPrint("FilePath:%s\n",buff);  //输出结果: FilePath:\abc.exe
                                                         //而实际路径为:d:\abc.exe


RtlFreeAnsiString(&str);
ObDereferenceObject(pFile);

请高手指教怎样实现输出结果为: FilePath:d:\abc.exe




MyLifeStyle
驱动牛犊
驱动牛犊
  • 注册日期2007-08-01
  • 最后登录2009-09-25
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望16点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-09-21 09:35
pFileObj中还有一个成员DeviceObject,可以通过如下代码取得盘符:

UNICODE_STRING volumeDosName;
RtlInitEmptyUnicodeString( &volumeDosName, NULL, 0 );
RtlVolumeDeviceToDosName( pFileOb->DeviceObject, &volumeDosName );

再把两部分拼起来就行了。
游客

返回顶部