如何得到一个打开的word文档的路径和此word文档的文件名!

解决方案 »

  1.   

    首先, 获得所有打开文件的句柄#define SystemHandleInformation 16
    ZwQuerySystemInformation(SystemHandleInformation,pBuffer,cbBuffer * sizeof(ULONG),&re);
    然后,尝试复制句柄到你的进程,注意,并不是所有的句柄都能够被复制BOOL WINAPI DuplicateHandle(
      __in          HANDLE hSourceProcessHandle,
      __in          HANDLE hSourceHandle,
      __in          HANDLE hTargetProcessHandle,
      __out         LPHANDLE lpTargetHandle,
      __in          DWORD dwDesiredAccess,
      __in          BOOL bInheritHandle,
      __in          DWORD dwOptions
    );最后查询句柄信息ULONG nSize;
    POBJECT_NAME_INFORMATION pObj;ZwQueryObject( hObject, 1, NULL, 0, &nSize);
    pObj = (POBJECT_NAME_INFORMATION) malloc(nSize);
    if(ZwQueryObject( hObject, 1, pObj, nSize, &nSize) == 0)
    {
    }
    很多内核API,可以GetProcAddress调用。获取文件名 参见: http://msdn.microsoft.com/en-us/library/aa366789(VS.85).aspx
      

  2.   

    用NtQuerySystemInformation获得内存中被打开的文件的句柄,然后查找。具体可用内存文件映射GetMappedFileName实现。