怎么从IUnknown里获取到删除文件的完整路径?

四层楼 四层楼 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
参考的是这篇文章 WIN7 下 explorer 进行的文件移动COPY HOOK

在win7下我Hook到了的删除操作,回调函数里只有一个IUnknown类型的参数,怎么从这个参数里能解析出被删除文件的路径?

我打印了uFileCount值是正确的,就是获取不到路径。。

LPWSTR  __stdcall GetDeleteFileName(IUnknown* iUnknown)
{
UINT uFileCount = 0;

IDataObject* iDataObject = NULL;
HRESULT hr = iUnknown->QueryInterface(IID_IDataObject, (void**)& iDataObject); //通过iUnknown接口查找IDataObject接口

do
{
if (!SUCCEEDED(hr))
{
break;
}

FORMATETC fmt = { CF_HDROP, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL };
STGMEDIUM stg = { TYMED_HGLOBAL };

if (!SUCCEEDED(iDataObject->GetData(&fmt, &stg)))
{
break;
}

HDROP hDrop = (HDROP)GlobalLock(stg.hGlobal);

if (hDrop == NULL)
{
break;
}

uFileCount = DragQueryFile(hDrop, 0xFFFFFFFF, NULL, 0);

if (uFileCount <= 0)
{
break;
}


WPATH** ppPath = NULL;

*ppPath = new WPATH[uFileCount];

if (*ppPath != NULL)
{
for (UINT uIndex = 0; uIndex < uFileCount; uIndex++)
{
DragQueryFile(hDrop, uIndex, (*ppPath)[uIndex], MAX_PATH);
}
}
else
{
uFileCount = 0;
}

GlobalUnlock(stg.hGlobal);

ReleaseStgMedium(&stg);

return stg.lpszFileName;

} while (FALSE);

return NULL;
}
...全文

相关推荐

评论 7
收藏 已收藏
分享
返回顶部
四层楼
C++ 语言 65,214 成员 250,514 内容