阅读:1356回复:1
已知文件名柄,只能取得路径名(无法得到盘符),如何取得文件的完整路径?
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 |
|
沙发#
发布于:2007-09-21 09:35
pFileObj中还有一个成员DeviceObject,可以通过如下代码取得盘符:
UNICODE_STRING volumeDosName; RtlInitEmptyUnicodeString( &volumeDosName, NULL, 0 ); RtlVolumeDeviceToDosName( pFileOb->DeviceObject, &volumeDosName ); 再把两部分拼起来就行了。 |
|