Комментарии 8
Напомнило байку о том, что Майкрософт выпустила Виндовс 10 после 8.1, потому что Виндовс 9 некоторые программы могли принять за 9х и не запуститься.
а вот так развлекается Линус - https://www.securitylab.ru/news/265857.php
сейчас топ результатов поиска показывает эту статью, но вот нашёл кое-что: www.joelonsoftware.com/2004/06/13/how-microsoft-lost-the-api-war
Ещё раньше, 2000-ый год: https://www.joelonsoftware.com/2000/05/24/strategy-letter-ii-chicken-and-egg-problems/
Jon Ross, who wrote the original version of SimCity for Windows 3.x, told me that he accidentally left a bug in SimCity where he read memory that he had just freed. Yep. It worked fine on Windows 3.x, because the memory never went anywhere. Here’s the amazing part: On beta versions of Windows 95, SimCity wasn’t working in testing. Microsoft tracked down the bug and added specific code to Windows 95 that looks for SimCity. If it finds SimCity running, it runs the memory allocator in a special mode that doesn’t free memory right away.
К слову сказать были и попытки обратного эффекта - second party разработчики имели доступ напрямую к разработчикам winapi и без труда могли спросить "а как тут".
Более конкретный пример - Fury3, Microsoft Hellbender и Monster truck madness до сих пор работают на windows 10. За исключением пары косяков тут и там. Все потому что игры были полностью win32api compliant.
А вот шайтан коробки по типу The Nations вообще не работают. Даже с эмуляторами directx.
А почему сам патч не добавили в статью?
; sudeepb 11-May-1994
;
; This hackcheck is for simcity. Simcity does a GlobalSize on GDI.EXE and
; USER.EXE to figure out how much free resources are available. WOW's USER
; GDI have pretty small DGROUP, hence the size returns fails the check of
; this app. So we need to fake a bigger size.
;
cProc HackCheck,<PUBLIC,NEAR>
parmW handle
cBegin]
push es
SetKernelDS es
; first check in the TDB that the currently running app is SCW.
mov ax,curtdb
mov es,ax
xor ax,ax
cmp word ptr es:[0f2h],4353h ; SC (mod name in TDB at f2 offset)
jne hc5
cmp word ptr es:[0f4h],0057h ; W
jne hc5
; Its SCW. Now get the module table for the given handle and check if its
; for USER.EXE and GDI.EXE
cCall GetExePtr,<handle>
or ax,ax
jz hc5
mov ds,ax
mov si,ds:[ne_pfileinfo]
lea dx,[si].opFile ; DS:DX -> path
cCall WowCheckUserGdi,<ds,dx> ; Much easier to check this in 32bit land.
hc5:
pop es
cEnd
Разработчики рассказали о поддержке совместимости с играми в Windows 95