用 CreateFile 创建句柄,然后在传给别的函数(实际上是HOOK别的API),想从该函数所传入的 HANDLE 获取 CreateFile 时所指定的第一个参数 lpFileName 参数。有什么办法?
File I/O 函数GetFileInformationByHandle所获取的句柄信息并没有这个参数

解决方案 »

  1.   

    HANDLE hFileMap = CreateFileMapping(hFile, NULL, PAGE_READONLY,0, 1,NULL);
    HANDLE pMem;
    TCHAR szFileName[MAX_PATH];
    if (NULL!=hFileMap) 
    {
      pMem=MapViewOfFile(hFileMap, FILE_MAP_READ, 0, 0, 1);
      if(NULL!=pMem)
      {
         GetMappedFileName (GetCurrentProcess(), pMem, szFilename,MAX_PATH)) ;
         ...  }
    }
      

  2.   

    在N多情况下我们得到了一个被打开文件的句柄,但并不知道是哪个文件被打开,下面这段代码可能给你很多帮助,可以实现从文件Handle到文件名的转换,需要注意的是得到的文件名是UNICODE编码格式的。 void GetFileNameByHandle(HANDLE hFile, wchar_t *szFileName){ typedef NTSTATUS (WINAPI *PROCNTQIF)(HANDLE, PIO_STATUS_BLOCK, PVOID, ULONG, ULONG); PROCNTQIF NtQueryInformationFile = (PROCNTQIF)GetProcAddress(                                          GetModuleHandle("ntdll"),                                         "NtQueryInformationFile"                                         ); IO_STATUS_BLOCK Io
    转贴 http://tag.csdn.net/Article/9305b4bd-d7fe-4f5f-a15d-96a75dd62099.html