我正在开发探索器钩子,用于通过MTP协议监视数据到便携式设备。 我从接口IPortableDeviceContent挂钩了Delete()函数。此函数为我提供了需要删除的文件对象ID列表。 我想在这里知道发送删除请求的文件名是什么。 如果我可以从收到的文件对象中获取文件名,那么它将解决我的问题。
如果有人对此有任何解决方案,请告诉我。
答案 0 :(得分:1)
HookDelete()是为IPortableDeviceContent :: Delete()挂钩的函数。 下面是上面问题的答案。虽然它没有给我完整的路径..至少它给出了文件名。
HRESULT STDMETHODCALLTYPE PortableDeviceInternalHook::HookDelete(
IPortableDeviceContent *pTHIS,
const DWORD dwOptions,
IPortableDevicePropVariantCollection *pObjectIDs,
IPortableDevicePropVariantCollection **ppResults
) {
DWORD count;
if(S_OK == pObjectIDs->GetCount(&count))
{
HRESULT result = S_FALSE;
bool blockOperation;
CComPtr<IPortableDeviceProperties> spProperties;
result = pTHIS->Properties(&spProperties);
if(S_OK == result)
{
for (unsigned int i = 0; i < count; i++)
{
HRESULT propertyValueResult;
PROPVARIANT propertyValue = {0};
propertyValueResult = pObjectIDs->GetAt(i, &propertyValue);
CComPtr<IPortableDeviceValues> spDeviceValues;
result = S_FALSE;
if(S_OK == propertyValueResult)
{
result = spProperties->GetValues(propertyValue.pwszVal, NULL, &spDeviceValues);
PropVariantClear(&propertyValue);
}
if(S_OK == result)
{
HRESULT hResult;
LPWSTR pFileName = NULL;
hResult = spDeviceValues->GetStringValue(WPD_OBJECT_ORIGINAL_FILE_NAME, &pFileName);
}
}
}
}
return m_pFnTrueDelete(pTHIS, dwOptions, pObjectIDs, ppResults);
}