Я пытаюсь подключить функцию enumobjects в Ishellfolder. Я делаю это, потому что хочу отображать пользователю несуществующие файлы в проводнике. Мне удалось подключить FindNextFile и FindFirstFile, но, к сожалению, эта функция не всегда вызывается проводником в соответствии с этим вопросом exe-in-windows-7-to-list-files">Какие API используются программой explorer.exe в Windows 7 для вывода списка файлов?
Теперь я пытаюсь перехватить IShellFolder::EnumObjects, поэтому я перехватываю
MyCoCreateInstance(REFCLSID rclsid, LPUNKNOWN pUnkOuter, DWORD dwClsContext, REFIID riid, LPVOID *ppv)
И внутри этой функции у меня есть следующий код:
if (IsEqualCLSID(rclsid, (REFGUID) __uuidof (IShellFolder)) ||
IsEqualCLSID(rclsid, (REFGUID) __uuidof (IShellFolder2)) ||
IsEqualCLSID(rclsid, (REFGUID) CLSID_ShellDesktop) ||
IsEqualCLSID(rclsid, (REFGUID) IID_IShellFolder) )
{
PDEBUG(L"IID_IShellFolder.2");
IShellFolderCast *shellFolder = (IShellFolderCast *) *ppv;
orig_EnumObjects = (type_EnumObjects) GetInterfaceMethod(shellFolder->lpVtbl, 4);
if (!Mhook_SetHook((void **) &orig_EnumObjects, MyEnumObjects))
{
PDEBUG(L". CoCreateInstance. Failed to set EnumObjects!");
}else
{
PDEBUG(L". CoCreateInstance. success to set EnumObjects!");
}
}
но это никогда не входит внутрь, если кто-нибудь знает, почему?