Привет всем. Заметил, что AppCompat shims не работают на Windows 10. Пореверсил apphelp.dll и %windir%\AppPatch\* и увидел, что shim-ы вообще отключили, судя по всему. Вырезали? Для тех, кто не в курсе, вкратце раскажу как все это работало: мы ставили sdb-базу, содержащую шим для <имя_процесса> (например, с помощью штатной sdbinst.exe), она прописывалась в HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Custom\<имя_процесса> и при создании процесса <имя_процесса> загружалась внутри CreateProcess(): CreateProcessInternalW() вызывает BasepQueryAppCompat(), которая читает sdb-файл и сохраняет пропарсенную информацию в PEB->pShimData создаваемого процесса. Так вот, в Win 10 ветка AppCompatFlags\Custom даже не читается (это видно в ProcMon), а если посмотреть на код kernel32!BasepQueryAppCompat, то там больше этого функционала нет.
jeer0, 10.0.10x, ntdll: Код (Text): .text:6A2C3DC8 mov eax, [eax+18h] .text:6A2C3DCB mov _g_pShimEngineModule, eax .text:6A2C3DD0 call LdrpGetShimEngineInterface .text:6A2C3DD5 mov esi, eax .text:6A2C3DD7 test esi, esi .text:6A2C3DD9 jns short loc_6A2C3E04 .text:6A2C3DDB mov eax, _ShowSnaps .text:6A2C3DE0 test al, 3 .text:6A2C3DE2 jz short loc_6A2C3DB2 .text:6A2C3DE4 push esi .text:6A2C3DE5 push offset aGettingTheShim ; "Getting the shim engine exports failed "... .text:6A2C3DEA push ebx .text:6A2C3DEB push offset aLdrpgetprocapp ; "LdrpGetProcApphelpCheckModule" .text:6A2C3DF0 push 0A73h .text:6A2C3DF5 push offset aMinkernelNtd_5 ; "minkernel\\ntdll\\ldrinit.c" .text:6A2C3DFA call _LdrpLogDbgPrint Так что не выпилили скорее, а изменили. Почему вы не посмотрели как это работает в вашей версии - хз, видимо не нужно.