WOW64 File System Redirection

Michal psal ve svem zakysniku pred par mesici o systemovych adresarich v 64-bitovych Windows. Dovolim si ve zkratce zopakovat jak se chova System32: Microsoft nemohl pouzit pristup, ktery fungoval pri prechodu z Win16 na Win32, neboli pro 64-bitove knihovny udelat novy adresar system64, protoze spousta programatoru nedba dobrych rad, a za systemovy adresar povazuje (v lepsim pripade) %WinDir%\System32. Jeho zmena by prinesla vyrazny problem pri portovani aplikaci, ktere je jinak velmi primocare (Win16 a Win32 si byly, rekneme, "trosicku podobne", kdezto Win32 a Win64 je prakticky totez s jinou sirkou pointeru).

Resenim se stal File System Redirector, ktery vybrane adresare v 32-bit programech bezicich na 64-bitovych Windows presmerovava. Konkretne v opravdickem System32 jsou 64-bit knihovny, a v SysWOW64 jsou 32-bitove. WOW64 proces pak v System32 vidi obsah SysWOW64. Vetsinu casu toto funguje vyborne, ale obcas preci jen nejaky 32-bitovy proces potrebuje psat do opravdickeho, 64-bitoveho System32. Uz od prvnich Windows XP Professional x64 Edition byly k dispozici funkce Wow64DisableWow64FsRedirection a spol., ktere pro volajici thread redirektor vypnuly. To je sice hezke reseni pro 32-bitovy instalator, ktery potrebuje nainstalovat 64-bitove knihovny, ale pokud mate nejaky 32-bitovy program, ktery nemuzete zmenit (treba Visual Studio), a chcete v nem otevrit soubor v System32 (treba \Windows\System32\InetSrv\applicationHost.config), moc vam to nepomuze.

Pokud mate Windows Vista nebo Windows Server 2008, nemusite zoufat. WOW64 nyni podporuje takova zadni vratka, adresar SysNative, ktery v 32-bit procesech predstavuje 64-bitovy System32. Malou nevyhodou je, ze jelikoz jde o jakysi virtualni adrear, API pro vypisovani obsahu adrearu ho nevraci, a tudiz ani neni videt v common file dialozich. To se da ale snadno obejit kdyz v 64-bitovem procesu ten adresar vytvorite. Tim padem v 64-bitovych procesech bude prazdny, a v 32-bitovych procesech v nem uvidite obsah 64-bitoveho System32.

Zveřejněno 13 listopadu 07 07:00 by jachymko
Vedeno pod: , , ,

Komentář

# VasekB said on listopadu 13, 2007 22:11:

kdyby nechali prasacky napsane programy nefunkcni, tak udelali lepe, nez v tom delat takovy bordel

# jachymko said on listopadu 14, 2007 3:01:

VasekB: a nasrali by spoustu zakazniku, coz je presne to co chces udelat, pokud chces aby si od tebe v budoucnu jeste neco koupili. :-)

# rado said on listopadu 14, 2007 16:16:

takto ich nasrali az vo viste ;-)

# rob said on listopadu 14, 2007 17:37:

Jasně. Je to geniální, jednoduché, přehledné řešení:

System32 obsahuje 64 bit knihovny

SysWOW64 obsahuje 32 bit knihovny

Nemám slov. Víc zamotat už to asi nešlo...

# jachymko said on listopadu 15, 2007 16:22:

rob: tak proc nenastartujes svuj stroj casu, nezaletis do Redmondu roku 1988, a nereknes Cutlerovi & spol jaky zmatky za 20 let zpusobi jejich rozliseni 16-bitovych a 32-bitovych knihoven?

aha, zadnej stroj casu nemame? a lepsi reseni nas nenapada, tak budem aspon drskovat na blozich...

# rob said on listopadu 16, 2007 14:43:

jachymko: Tvuj nekriticky obdiv mne opravdu prekvapuje. Cekal bych trochu konstruktivnejsi diskusi. O tom ostatne blog je, ne? Rozsirit si obzory, zjistit nazory druhych. Jestli blog beres jako propagaci sveho jedineho pravdiveho (promicrosoftiho) svetonazoru tak to je trochu skoda.

Konstruktivne:

To nemohli ten redirektor udelat tak, ze 32 bit aplikace uvidi obsah slozky System32 obsahujici 32 bit knihovny. A 64 bit aplikace uvidi ve slozkach System32 i System64 stejny obsah tj. 64 bit knihovny? Odpoved je, ze zcela urcite mohli, ale neco (nevim co) je vedlo k tomu, ze to tak neudelali.

Jestli to vis tak tady nikoho nenapadej, ale vysvetli to. Jestli to nevis tak vubec nechapu jak muzes takhle reagovat...

# jachymko said on listopadu 16, 2007 15:00:

Omlouvam se za to jak jsem vyjel, ale radoby ironicky narazky, navic nedomysleny do konce me dokazou vytocit.

Ten problem jde hloubeji. Nejde jenom o adresar System32, ale o vsechny DLLka, ktere maji v nazvu 32. To co navrhujes by samozrejme slo, ale nic by to nevyresilo. Porad by byl potreba nejaky SysWOW64, ve kterem by 64-bit aplikace videly 32-bit verze (treba chces spustit 32-bit cmd.exe).

Takze by akorat vznikl novy adresar System64, ktery by VUBEC nikdo nepouzival, aspon v nejblizsich letech ne, protoze vetsina programu se z jednech zdrojaku kompiluje jak pro x86 tak x64, a nikdo nema zajem udelat zbytecnej branch a v nem menit vsechny importy z kernel32 na kernel64, hledat jestli nekde nahodou nema natvrdo napsano system32, atd.

Neboli to co navrhujes by byl akorat vetsi zmatek.

Udelali chybu kdyz tehda do jmena knihovny dali jeji bitovost, jenze to bylo pred patnacti lety velmi rozumny reseni. A nikdo tenkrat nemohl vedet, kdy a jak bude vypadat prechod na 64-bitu, a dneska to uz opravit nejde.

# pbouda said on listopadu 20, 2007 17:59:

Mně to přijde jako krásný příklad toho, kam vedou dobře míněné kompromisy - k řešení, které je sice funkční, ale naprosto kontraituitivní, takže vyžaduje poměrně značné mentální úsilí při použítí a esoterickou znalost a na oplátku nabízí spoustu prostor pro vznik chyb.

A proč? Aby se zákazníkům vyšlo vstříc a dodalo se jim to, co chtějí. Jenže já si vždycky myslel, že skutečná profesionalita spočívá v tom dodat co zákazník potřebuje, a ne co chce.

Myslím, že kdyby Microsoft tak nelpěl na zpětné kompatibilitě, mohl být dnes mnohem dál.

Proč to neřešit třeba virtualizaci? Pro 32bit pustím virtuální stroj a nemusím v 64bitu dělat takové zmatky.

# jachymko said on listopadu 20, 2007 18:18:

> Proč to neřešit třeba virtualizaci? Pro 32bit pustím
> virtuální stroj a nemusím v 64bitu dělat takové
> zmatky.

Vsak WOW64 _je_ virtualni stroj (i kdyz mnohem vice high-level nez rekneme Virtual PC). Tohle je ale ciste 64-bit problem. Ve WOW64 je vsechno jako driv: vsechno je 32-bitove a jmenuje se something32.dll.

> Myslím, že kdyby Microsoft tak nelpěl na zpětné
> kompatibilitě, mohl být dnes mnohem dál.

sice by mozna byl "dal", co se tyce pojmenovani adresaru a dalsich podruznosti, ale byl by bez zakazniku.

a k tomu, aby clovek na dalsi verzi Windows neupgradoval, staci jenom jeden nekompatibilni program, ktery shodou okolnosti nutne potrebuje.

> A proč? Aby se zákazníkům vyšlo vstříc a dodalo se
> jim to, co chtějí. Jenže já si vždycky myslel, že
> skutečná profesionalita spočívá v tom dodat co
> zákazník potřebuje, a ne co chce.

a v tomto pripade zakaznik, nezavisly vyvojar, chce svuj program nabidnout i v 64-bit verzi. a potrebuje to udelat s co nejnizsimi naklady, idealne tak aby mohl jedny zdrojaky kompilovat pro obe platformy. coz by mu prejmenovani vsech systemovych knihoven a adresaru moc neulehcilo.

Neregistrovaní uživatele nemužou přidávat komentáře.
Vyvojar.cz na prodej!