Windows:文件对象ID到文件名

时间:2014-07-24 05:17:55

标签: windows file hook objectid

我正在开发探索器钩子,用于通过MTP协议监视数据到便携式设备。 我从接口IPortableDeviceContent挂钩了Delete()函数。此函数为我提供了需要删除的文件对象ID列表。 我想在这里知道发送删除请求的文件名是什么。 如果我可以从收到的文件对象中获取文件名,那么它将解决我的问题。

如果有人对此有任何解决方案,请告诉我。

1 个答案:

答案 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);

}