ожидаемое поведение (Windows 10):
[*] Метод инициализации называется один раз на клик (от Shell32.dll).
[*] После принятия решений в нашем методике настройка, превью работает как ожидалось, без ожидания. /> < /ul>
Проблема в Windows 11: < /strong> < /p>
Наш метод инициализации инициализации называется несколько раз из различных модулей, таких как Shell32.dll, Combase.dll и т. Д. Проблема не возникает в Windows 10 с одной и той же логикой. < /li>
< /ul>
Что я пробовал до сих пор: < /strong> < /p>
- vtable dectrating < /strong>:
после вызова оригинального инициализации, я возвращаю к выходу на основу. Это предотвращает сбою, но не останавливает наш метод, который был вызван при последующих кликах файлов. Окружающая среда: < /strong>
Windows 11 23h2 < /li>
Explorer Windows с включенной панелью предварительного просмотра < /li>
Cocreateinstance с использованием Minhook v1.3.4 < /li>
< /ul>
< /ol>
< /ol>
< /ol>
< /ul>
< /ol> < /ol> < /br /> < /ul>
< /li>
< /ul>
code: < /strong> < /p>
// Hooked CoCreateInstance
HRESULT Hooked_CoCreateInstance(...) {
if (riid == IID_IPreviewHandler) {
auto pInit = GetInitializeWithFile(instance);
if (pInit) {
SaveOriginalMethod(pInit);
OverwriteVTable(pInit, &CustomInitialize);
}
}
return Original_CoCreateInstance(...);
}
HRESULT CustomInitialize(LPCWSTR filepath, ...) {
if (CanAllowPreview(filepath)) {
RestoreOriginalVTable(); // Attempt to stop recursive calls
return OriginalInitialize(filepath);
} else {
return E_ACCESSDENIED;
}
}
< /code>
Вопросы < /strong>: < /p>
Почему iinitializewithfile :: инициализируется, что можно неоднократно в Windows 11, но не в Windows 10? Есть более надежный и поддерживаемый метод для предотвращения предварительных просмотров файлов на основе пользовательской логики без сбоя исследователя?
Подробнее здесь: https://stackoverflow.com/questions/795 ... ing-file-e