znsoft
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2023-10-25
  • 粉丝300
  • 关注6
  • 积分910分
  • 威望14796点
  • 贡献值7点
  • 好评度2410点
  • 原创分5分
  • 专家分100分
  • 社区居民
  • 最爱沙发
  • 社区明星
阅读:1764回复:1

通过句柄查询文件名或设备名

楼主#
更多 发布于:2012-06-21 19:20
BOOL CKlAntiApiCall::GetFileNameFromHandle(HANDLE hFile,TCHAR * pszFilename) 
 {
  BOOL bSuccess=FALSE;
  POBJECT_NAME_INFORMATION oni = NULL;
  oni= (POBJECT_NAME_INFORMATION) new WCHAR[256];
  if(oni)
  {
   ULONG rt=0;
   
   HMODULE hModule=LoadLibrary(_T("ntdll.dll"));
   if( !hModule)
   {
     delete [](WCHAR *)oni;
    return FALSE;
   }
  m_PZwQueryObject=(P_ZWQUERYOBJECT)GetProcAddress(hModule,"ZwQueryObject");
   if(m_PZwQueryObject)
   {
  
    NTSTATUS status = m_PZwQueryObject(hFile,
     ObjectNameInformation,
     oni,
     256*sizeof(WCHAR),
     &rt);
    if(NT_SUCCESS(status))
    {
     RtlCopyMemory(pszFilename,oni->Name.Buffer,oni->Name.Length);
     bSuccess =TRUE;
    }
   
     }
  delete [](WCHAR *)oni;
  FreeLibrary(hModule);
  }

  
 
  return(bSuccess);
 }

 
 
 注意szFileName必须保证大于256字符,否则发生意外,恕不承担。当然,你也可以改进一下函数调用,输入缓冲区长度。
 
http://www.zndev.com 免费源码交换网 ----------------------------- 软件创造价值,驱动提供力量! 淡泊以明志,宁静以致远。 ---------------------------------- 勤用搜索,多查资料,先搜再问。
songbei6
驱动牛犊
驱动牛犊
  • 注册日期2012-02-09
  • 最后登录2020-09-03
  • 粉丝2
  • 关注3
  • 积分116分
  • 威望251点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2012-09-17 21:32
顶楼主。。。。
游客

返回顶部