沒必要用#pragma pack(1), 自己定義結(jié)構(gòu)時記得對齊就是了,你看Windows里的絕大部分struct都是4字節(jié)對齊的(空位可以用reserved命名).
對齊肯定是有很多好處的,不然編譯器干嘛費心去對齊結(jié)構(gòu)里的字段.
re: 安全密碼框的設(shè)計 tanchuhan 2009-12-22 21:52
good,樓主寫的很好。
挑點小錯誤:
其實這是跟操作系統(tǒng)有關(guān)的,在WIN98下所用的進(jìn)程是共享一個4GB的虛擬內(nèi)存的,那個就沒什么你的我的了,所有的都是大家共有的,所以一個進(jìn)程對另一個進(jìn)程發(fā)送一個WM_GETEXT消息,應(yīng)為大家都是自己人所以密碼就告你了。但是到了NT后各個進(jìn)程就鬧分家了,每個進(jìn)程獨享4GB的虛擬內(nèi)存,各個進(jìn)程之間是互相隔離的,所以就沒人理你了。
---------------
Win95/98和NT都是一樣的進(jìn)程有各自的4G尋址空間(其中前面的1G/2G被系統(tǒng)保留,用來裝載系統(tǒng)DLL什么的)
WM_GETTEXT可以跨進(jìn)程獲取文本是微軟為了向后(win3x)兼容而作出特別處理的。照常理WM_GETTEXT的lParam非本進(jìn)程指針,直接寫數(shù)據(jù)會崩潰。而微軟檢查到這條消息后特別處理,先在本進(jìn)程new一段緩沖區(qū),等WM_GETTEXT接收者寫完后,再復(fù)制回發(fā)送者進(jìn)程的那段緩沖區(qū)。然后返回結(jié)果。
win9x和NT密碼框?qū)M_GETTEXT的不同反應(yīng)是因為后者考慮了安全性,而特意禁止的。
所以這和虛擬內(nèi)存是否共享無關(guān)。