Zergatik hausten den WinINet proxy laguntzaile zaharra 64 biteko konpilazioan
Ezagutu erakusleen mozketa C# proxy interop adibideetan, eta berrikusi egituren diseinua eta memoriaren jabetza berrerabili aurretik.
Bihurketa bakar batek itxuraz arrunta den proxy ezarpenen laguntzaile bat arkitekturaren araberako hutsegite bihur dezake:
current = (IntPtr)((int)current + optionSize);
Kode horrek jatorrizko helbidea 32 biteko osoko zenbaki bihurtzen du hurrengo egituraren tamaina gehitu aurretik. 64 biteko prozesu batek sartzen ez diren helbideak eduki ditzake. Bihurketa eta balioaren arabera, emaitza gainezkatze salbuespena edo baliogabeko helbidea izan daiteke. Konpilazioa x86ra itzultzeak akatsa ezkuta dezake, baina interop inplementazioa soluzio horren mendeko uzten du.
Mantendu helbideak erakuslearen tamainan. Adibidez, jada esleitutako array bat zeharkatzeko hau erabil daiteke:
IntPtr item = IntPtr.Add(buffer, checked(index * optionSize));
Desplazamendua osoko zenbaki izaten jarraitzen du; helbidea bera ez da horren bidez estutzen. Esleipenaren tamainak eta indizeak baliozkoak izan behar dute oraindik.
Ondoren, aztertu inguruko deklarazioak
WinINet-en konexio bakoitzeko aukerak DWORD bat, kate-erakusle bat eta FILETIME bat biltzen dituen batasun bat dauka. Erakusle-eremuek IntPtr behar dute; DWORD eremuek 32 bitekoak izaten jarraitzen dute. Jatorrizko lerrokatzea garrantzitsua da, beraz osoko zenbaki bakoitza 64 biteko osoko zenbaki batekin ordezkatzea edo paketatutako diseinua behartzea ez da konponketa sendoa.
Erabili egituraren tamaina marshaling ondoren arraya zeharkatzean, egin bat ANSI edo Unicode deklarazioarekin koherentziaz, eta jarraitu esleipen bakoitza bereizita. Aukera-egituren blokea askatzeak ez ditu automatikoki askatzen beste leku batean esleitutako eta egitura horiek erreferentziatutako kateak.
Azkenik, mantendu ezarpenen irismenaren gaia memoriaren zuzentasunetik bereizita. Bihurketa bat konpontzeak ez du frogatzen laguntzaile batek aukeratutako WinINet aukerak kontrol bakarrari, prozesu bakarrari edo uneko erabiltzailearen ezarpenei eragiten dienik. Egiaztatu API jokabide hori adibide zaharraren gainerakoa onartu aurretik. Freskatze-jakinarazpenak ere bidaltzen baditu, hautatu itzazu aurreikusitako irismenerako.