wsdgs
驱动牛犊
驱动牛犊
  • 注册日期2006-01-12
  • 最后登录2012-07-15
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望18点
  • 贡献值0点
  • 好评度16点
  • 原创分1分
  • 专家分0分
阅读:2803回复:3

HOOK ZwCreateSection,怎么得到文件名

楼主#
更多 发布于:2007-03-28 17:46
我HOOK了ZwCreateSection,现在居然无法读到文件名
不知道是那个文件要启动

ZwCreateSection (
    OUT PHANDLE             SectionHandle,
    IN ACCESS_MASK          DesiredAccess,
    IN POBJECT_ATTRIBUTES   ObjectAttributes OPTIONAL,
    IN PLARGE_INTEGER       MaximumSize OPTIONAL,
    IN ULONG                SectionPageProtection,
    IN ULONG                AllocationAttributes,
    IN HANDLE               FileHandle OPTIONAL
);


这个结构里面唯一有希望得到文件名的是FileHandle,再如何得到?
NtQueryInformationFile?
wsdgs
驱动牛犊
驱动牛犊
  • 注册日期2006-01-12
  • 最后登录2012-07-15
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望18点
  • 贡献值0点
  • 好评度16点
  • 原创分1分
  • 专家分0分
沙发#
发布于:2007-03-28 17:47
自己顶一下,NtQueryInformationFile我用过了,无法得到结果,网上有些代码不是无法编译就是根本得不到!哪位大哥发个完整的代码
wsdgs
驱动牛犊
驱动牛犊
  • 注册日期2006-01-12
  • 最后登录2012-07-15
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望18点
  • 贡献值0点
  • 好评度16点
  • 原创分1分
  • 专家分0分
板凳#
发布于:2007-03-28 19:34
好不容易得到了文件名,晕死,前面少个盘符,5555555
wsdgs
驱动牛犊
驱动牛犊
  • 注册日期2006-01-12
  • 最后登录2012-07-15
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望18点
  • 贡献值0点
  • 好评度16点
  • 原创分1分
  • 专家分0分
地板#
发布于:2007-03-29 09:05
自己搞定了,来总结一下
BOOL GetPathByHandle(HANDLE hFile, LPWSTR lpBuf, DWORD nBuf)
{
    ULONG m, n;
    WCHAR lpPath[MAX_PATH+4];
    WCHAR lpDrive[MAX_PATH];
    WCHAR lpDevName[MAX_PATH];
    pZwQueryObject ZwQueryObject = NULL;
     HMODULE ntdll = NULL;

    ntdll = LoadLibrary("ntdll.dll");
    ZwQueryObject = (pZwQueryObject)GetProcAddress(ntdll, "ZwQueryObject");


    if (ZwQueryObject(hFile, 1, lpPath, MAX_PATH+4, &m) >= 0 &&
        (m = GetLogicalDriveStringsW(MAX_PATH, lpDrive)) && m < MAX_PATH)
    {
        WCHAR *p = lpDrive;
        while (m = wcslen(p))
        {
            p[m-1] = L'\0';
            n = QueryDosDeviceW(p, lpDevName, MAX_PATH);
            if (n && n < MAX_PATH)
            {
                n = wcslen(lpDevName);
                if (!wcsnicmp(lpPath+4, lpDevName, n))
                {
                    wcsncpy(lpBuf, p, nBuf);
                    if (nBuf > 2) wcsncpy(lpBuf+2, lpPath+4+n, nBuf-2);
                    return TRUE;
                }
            }
            p += m + 1;
        }
    }
    return FALSE;
}
游客

返回顶部