锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 鎰熻涓嶉敊,欏朵笅.. 褰撲綔鏀寔 !!
鑳界粰鎴戞彁渚涜祫鏂欐枃绔犮佹垨鑰呯ず渚嬩唬鐮侀兘琛?鎼滅儲浜嗗ソ涔咃紝灝辨槸娌℃湁鎵懼埌鎯寵鐨勶紝浼拌鏄痩inux涓嶇啛鎮(zhèn)夛紝涓嶇煡閬撳拫鎼滅儲銆傝阿璋€?br />
鏀墮泦鍒拌祫鏂欏氨鎾ゃ傘?/span>
]]>
1 灝忓鍚憄olice瑙i噴鑷繁娌℃湁MaiYin錛氭垜鍙槸鎶婁袱鍏冪殑閬垮瓡濂楀崠鍒頒簡浜岀櫨鍏冿紝鏈澶氱畻鎶珮鐗╀環(huán)銆?
銆銆pol.ice錛氬悗鏉ュ憿錛?
銆銆灝忓璇達(dá)細(xì)鏁欎粬濡備綍浣跨敤錛屽睘浜庡敭鍚庢湇鍔°?
2銆銆婕斿嚭緇撴潫錛岄瀵間笂鍙版媺浣忔紓浜殑钂欏彜鏃忓コ婕斿憳鐨勬墜鍢樺瘨闂殩涓嶆斁鎵嬶紝榪樹竴涓姴鍦伴棶鍙粈涔堝悕瀛楋紵濂蟲紨鍛樻縺鍔ㄥ湴璇達(dá)細(xì)鐜涘嫆鏍肩ⅶ.
3銆鐢熸棩媧懼涓婅泲緋曞彧鍓╀笅涓鍧楋紝涓婇潰鎭板ソ鍐欑潃鐢熸棩涓や釜瀛椼傜敺瀛╁ぇ鏂瑰湴鎷胯搗鍒涓鍒嗕負(fù)浜岋紝娓╂煍鍦板濂沖璇達(dá)細(xì)“鎴戣礋璐?#8216;鏃?#8217;錛屼綘璐熻矗‘鐢?#8217;錛屽ソ鍚楋紵”
4銆銆浜虹敓鎰熻錛氬綋宸ヤ綔鍜?span class=t_tag onclick=tagshow(event) href="tag.php?name=%E7%88%B1%E6%83%85">鐖辨儏涓嶅鎰忔椂錛屽彲鎺忓嚭灝忓紵寮燂紝鍑濊瀹冦侀潤鎬濆畠鎵钑村惈涔嬬簿紲烇細(xì)鑳介暱鑳界煭錛岃兘綺楄兘緇嗭紝鑳戒幾鑳芥洸錛岃兘杞兘紜紝瀛﹀瀹冿紝鐪煎墠鐨勫洶闅劇畻涓笩錛?
5銆 涓騫煎効鍥殑灝忕牬瀛╄翰鍦ㄥ帟鎵閲屽惛鐑燂紝琚佸笀鎶撳埌錛岃佸笀闂粬涓轟粈涔堝惛鐑燂紝浠栦綆涓嬪ご錛屾繁娌夌殑鍥炵瓟錛氱鍥芥湭緇熶竴錛屽績鎯呭緢閮侀椃錛?
6銆銆澶勯暱涓庢紓浜殑澶勫コ璺寵垶錛岃垶鏇查珮娼椂澶勯暱鏈夌偣嬋鍔紝涓嬮潰鎸轟簡璧鋒潵錛屽濂沖療瑙夊悗濂藉鍦伴棶錛氫綘涓嬮潰鏄粈涔堬紵澶勯暱錛氭垜涓嬮潰鏄闀褲傚濂籌細(xì)瀹樹笉澶ц繕鎸虹‖
7銆銆濂沖競闀垮拰鐢蜂功璁板叡鍚岃蕩瀹達(dá)紝甯棿楂樺叴涔嬩綑錛屼功璁拌錛氫功璁頒竴鑸兘騫茶繃甯傞暱錛佸コ甯傞暱鏈虹伒鍦板簲絳旓細(xì)鏄殑錛屼功璁頒竴鑸槸甯傞暱鐢燂紙鍗囷級鐨勶紒
8銆銆鏈変漢璇達(dá)細(xì)鑱槑鐨勫コ浜哄彲浠ユ縺鍔辯敺浜?縐緹庣殑濂充漢鍙互榪鋒儜鐢蜂漢,鏈夋墠鍗庣殑濂充漢鍙互鍚稿紩鐢蜂漢,鏈夊湴浣嶇殑濂充漢鍙互鐜╄漿鐢蜂漢,浠涔堥兘鏈夌殑濂充漢鍙互鎼炴儴涓鎵圭敺浜?
9銆銆鏈変竴瀵圭敺濂寵繃妗ワ紝妗ヤ笂鏈変竴鍙佽檸鎬掔洰鑰岃錛屽コ鐣ユ濈儲鍚庤劚琛h岃繃銆傜敺涔熷鑴辮。鑰岃繃錛屽嵈琚佽檸鎵戝掋傜敺涓嶈В錛熻佽檸璇達(dá)細(xì)浣犱互涓轟綘鏈夋牴灝忔鍎垮氨鏄鏉句簡錛?
10銆銆鑰佸笀璁╁鐢熺敤“鐨辯汗”閫犲彞錛屼竴瀛︾敓鍐欙細(xì)鎴戠埜鐖哥殑铔嬩笂鏈夊緢澶氱毐綰癸紝鑰佸笀鎵硅瘎瀹墮暱涓嶈鍟ュ湴鏂歸兘璁╁瀛愮湅銆傚闀胯В閲婅錛氳繖瀛╁瓙浠庡皬綺楀績錛屽皯鍐欎竴涓?#8220;鑴?#8221;瀛椼備綘絎戜簡鍚?絎戜簡灝辮鍥炰釜璐村ソ鍚楋紵
]]>
C++鍗氬 Alex-Lee 2009-10-21
鍝堝笇緇撴瀯鍦ㄥ鐞嗗ぇ閲忔暟鎹椂鍏鋒湁寰堝ソ鐨勪紭鍔匡紝鍦ㄦ彃鍏ワ紝鏌ヨ錛屽垹闄ょ瓑鎿嶄綔涓婂叿鏈夊父閲忕殑鏃墮棿澶嶆潅搴(1)銆備嬌鐢ㄨ寖鍥存槸鏁版嵁闆嗗叿鏈夎嚜鐒舵暟涓婄殑鍏抽敭瀛楀煙錛堜笉鏄嚜鐒舵暟涔熼渶瑕佽兘澶熻漿涓鴻嚜鐒舵暟鍩燂級錛岄氳繃鍝堝笇鍑芥暟灝嗗叧閿瓧鏄犲皠鍒板鍧鏁扮粍鐨勬Ы銆傜敱浜庡叧閿瓧鍩烾[0...n]涓庡鍧鏁扮粍[0...m]涓紝鎬繪槸n>m錛屼篃灝辨槸璇達(dá)紝鎬繪湁澶氫釜鍏抽敭瀛楀搴斾竴涓Ы銆傝繖涓鎾炲氨闇瑕侀氳繃涓浜涙柟娉曟敼鍙樸傚彲浠ラ氳繃鎷夐摼娉曪紙閾捐〃娉曪級鍜屽紑鏀懼湴鍧娉曘傚浜庢媺閾炬硶涓紝閾捐〃涓嶈兘澶暱錛屽惁鍒欏獎鍝嶉熷害錛屾渶濂芥帶鍒跺湪10涓厓绱犱箣鍐咃紝榪欐牱灝辮鍘誨鍧鏁扮粍闀垮害m>= n/10錛岃繖鏍峰氨浼?xì)澶氭秷鑰椾簺絀洪棿銆備負(fù)浜嗚姣忎釜閾捐〃闀垮害鍩烘湰涓鑷達(dá)紝灝遍渶瑕?nbsp; 闃呰鍏ㄦ枃
]]>
C++鍗氬 Alex-Lee 2009-10-20
蹇熸帓搴忔槸鍒嗘不綆楁硶錛屽皢鏁扮粍鍒嗕負(fù)鍑犻儴鍒嗭紝鍦ㄥ悇閮ㄥ垎鍐呭畬鎴愭帓搴忥紝閫掑綊鎺掑簭銆傜畻娉曟椂闂村鏉傚害O(nlgn)銆傝繖鏄瘮杈冩帓搴忕畻娉曚腑閫熷害鏈蹇殑涓涓畻娉曚簡銆傝鏁版帓搴忋佸熀鏁版帓搴忋佹《鎺掑簭綆楁硶鏄潪姣旇緝鎺掑簭綆楁硶錛屼粬浠殑綆楁硶澶嶆潅搴︽槸O(n)銆傚揩閫熸帓搴忕畻娉曞湪閫夊彇鏀偣涓婅鏈夋妧宸э紝鏈濂借兘杈懼埌闅忓嵆瑕佹眰銆?
闃呰鍏ㄦ枃
]]>
C++鍗氬 Alex-Lee 2009-10-18
涓婄瘒闅忕瑪璋堝埌浜嗗爢緇撴瀯鐨勪竴涓簲鐢ㄥ氨鏄爢鎺掑簭綆楁硶錛岃櫧鐒跺爢鎺掑簭綆楁硶鎬ц兘涓嶉敊錛屼絾鏄瘮璧峰揩閫熸帓搴忕畻娉曡繕鏄湁浜涘樊璺濄備絾鏄爢緇撴瀯鐨勫彟澶栦竴涓簲璇ュ氨姣旇緝騫挎硾浜嗭紝灝辨槸浼樺厛綰ч槦鍒椼?
浼樺厛綰ч槦鍒楁湁3涓搷浣滐細(xì)鎻掑叆(O(lgn))錛屾渶澶ф渶灝忓?O(1)),鍒犲幓鏈澶ф渶灝忓?O(lgn))銆傚叾綆楁硶鎬ц兘寰堝ソ錛屽湪浼樺厛綰ц皟搴︿綔涓氫笂搴旂敤姣旇緝騫挎硾銆傚熀浜庝紭鍏堢駭鐨勮皟搴︾畻娉曚腑錛屽熀浜庡爢緇撴瀯鐨勫疄鐜扮畻娉曟槸涓涓瘮杈冨ソ閫夋嫨銆傚湪浜嬩歡椹卞姩鐨勪豢鐪熷櫒涓篃鏈夊簲鐢ㄣ?nbsp; 闃呰鍏ㄦ枃
]]>
---------- C++鍗氬 Alex-Lee 2009-10-15
錛堜簩鍙夛級鍫嗙粨鏋勬槸涓縐嶆暟緇勫璞★紝瀹冨彲浠ヨ瑙嗕負(fù)涓棰楀畬鍏ㄤ簩鍙夋爲(wèi)銆傜畻娉曟椂闂村鏉傚害O(nlgn)錛屽叿鏈夋彃鍏ユ帓搴忓拰鍚堝茍鎺掑簭鐨勪紭鐐廣傚爢緇撴瀯婊¤凍鍫嗘ц川錛氬闄ゆ牴浠ュ鐨勬瘡涓妭鐐筰,婊¤凍A[PARENT(i)] >= A[i]銆?
鍫嗘帓搴忕畻娉曞疄鐜版湁涓変釜閮ㄥ垎瀹屾垚錛?
1錛屼繚鎸佸爢鎬ц川鍑芥暟heap_ify;
2,鏋勫緩鍫嗗嚱鏁癰uild_heap;
3,鍫嗘帓搴忓嚱鏁?heap_sort;
鍙﹀錛屽湪浼樺厛綰ч槦鍒椾腑鏈塭xtract-max 榪囩▼鍜宨nsert榪囩▼錛屽湪浣滀笟闃熷垪涓父鐢紝姣斿娑堟伅闃熷垪銆傝繖閮ㄥ垎鍦ㄤ紭鍏堢駭鎺掑簭涓鏄庛?
闃呰鍏ㄦ枃
]]>
]]>
]]>
杞鑷細(xì)http://blog.csdn.net/hejinjiang/archive/2008/03/19/2197066.aspx
SetWindowsHookEx-HOOK 閽╁瓙璇︾粏浠嬬粛
鍩烘湰姒傚康
閽╁瓙(Hook)錛屾槸Windows娑堟伅澶勭悊鏈哄埗鐨勪竴涓鉤鍙?搴旂敤紼嬪簭鍙互鍦ㄤ笂闈㈣緗瓙紼嬩互鐩戣鎸囧畾紿楀彛鐨勬煇縐嶆秷鎭紝鑰屼笖鎵鐩戣鐨勭獥鍙e彲浠ユ槸鍏朵粬榪涚▼鎵鍒涘緩鐨勩傚綋娑堟伅鍒拌揪鍚庯紝鍦ㄧ洰鏍囩獥鍙e鐞嗗嚱鏁頒箣鍓嶅鐞嗗畠銆傞挬瀛愭満鍒跺厑璁稿簲鐢ㄧ▼搴忔埅鑾峰鐞唚indow娑堟伅鎴栫壒瀹氫簨浠躲?
閽╁瓙瀹為檯涓婃槸涓涓鐞嗘秷鎭殑紼嬪簭孌碉紝閫氳繃緋葷粺璋冪敤錛屾妸瀹冩寕鍏ョ郴緇熴傛瘡褰撶壒瀹氱殑娑堟伅鍙戝嚭錛屽湪娌℃湁鍒拌揪鐩殑紿楀彛鍓嶏紝閽╁瓙紼嬪簭灝卞厛鎹曡幏璇ユ秷鎭紝浜﹀嵆閽╁瓙鍑芥暟鍏堝緱鍒版帶鍒舵潈銆傝繖鏃墮挬瀛愬嚱鏁板嵆鍙互鍔犲伐澶勭悊錛堟敼鍙橈級璇ユ秷鎭紝涔熷彲浠ヤ笉浣滃鐞嗚岀戶緇紶閫掕娑堟伅錛岃繕鍙互寮哄埗緇撴潫娑堟伅鐨勪紶閫掋?br>--------------------------------------------------------------------------------
榪愯鏈哄埗
1銆侀挬瀛愰摼琛ㄥ拰閽╁瓙瀛愮▼錛?/p>
姣忎竴涓狧ook閮芥湁涓涓笌涔嬬浉鍏寵仈鐨勬寚閽堝垪琛紝縐頒箣涓洪挬瀛愰摼琛紝鐢辯郴緇熸潵緇存姢銆傝繖涓垪琛ㄧ殑鎸囬拡鎸囧悜鎸囧畾鐨勶紝搴旂敤紼?搴忓畾涔夌殑錛岃Hook瀛愮▼璋冪敤鐨勫洖璋冨嚱鏁幫紝涔熷氨鏄閽╁瓙鐨勫悇涓鐞嗗瓙紼嬨傚綋涓庢寚瀹氱殑Hook綾誨瀷鍏寵仈鐨勬秷鎭彂鐢熸椂錛岀郴緇熷氨鎶婅繖涓秷鎭紶閫掑埌Hook瀛愮▼銆?涓浜汬ook瀛愮▼鍙互鍙洃瑙嗘秷鎭紝鎴栬呬慨鏀規(guī)秷鎭紝鎴栬呭仠姝㈡秷鎭殑鍓嶈繘錛岄伩鍏嶈繖浜涙秷鎭紶閫掑埌涓嬩竴涓狧ook瀛愮▼鎴栬呯洰鐨勭獥鍙c傛渶榪戝畨瑁呯殑閽╁瓙鏀懼湪閾劇殑寮濮嬶紝 鑰屾渶鏃╁畨瑁呯殑閽╁瓙鏀懼湪鏈鍚庯紝涔熷氨鏄悗鍔犲叆鐨勫厛鑾峰緱鎺у埗鏉冦?/p>
Windows 騫朵笉瑕佹眰閽╁瓙瀛愮▼鐨勫嵏杞介『搴忎竴瀹氬緱鍜屽畨瑁呴『搴忕浉鍙嶃傛瘡褰撴湁涓涓挬瀛愯鍗歌澆錛學(xué)indows 渚塊噴鏀懼叾鍗犵敤鐨勫唴瀛橈紝騫舵洿鏂版暣涓狧ook閾捐〃銆傚鏋滅▼搴忓畨瑁呬簡閽╁瓙錛屼絾鏄湪灝氭湭鍗歌澆閽╁瓙涔嬪墠灝辯粨鏉熶簡錛岄偅涔堢郴緇熶細(xì)鑷姩涓哄畠鍋氬嵏杞介挬瀛愮殑鎿嶄綔銆?/p>
閽╁瓙瀛愮▼鏄竴涓簲鐢ㄧ▼搴忓畾涔夌殑鍥炶皟鍑芥暟(CALLBACK Function),涓嶈兘瀹氫箟鎴愭煇涓被鐨勬垚鍛樺嚱鏁幫紝鍙兘瀹氫箟涓烘櫘閫氱殑C鍑芥暟銆傜敤浠ョ洃瑙嗙郴緇熸垨鏌愪竴鐗瑰畾綾誨瀷鐨勪簨浠訛紝榪欎簺浜嬩歡鍙互鏄笌鏌愪竴鐗瑰畾綰跨▼鍏寵仈鐨勶紝涔熷彲浠ユ槸緋葷粺涓墍鏈夌嚎紼嬬殑浜嬩歡銆?/p>
閽╁瓙瀛愮▼蹇呴』鎸夌収浠ヤ笅鐨勮娉曪細(xì)
LRESULT CALLBACK HookProc
(
int nCode,
WPARAM wParam,
LPARAM lParam
);
HookProc鏄簲鐢ㄧ▼搴忓畾涔夌殑鍚嶅瓧銆?/p>
nCode鍙傛暟鏄疕ook浠g爜錛孒ook瀛愮▼浣跨敤榪欎釜鍙傛暟鏉ョ‘瀹氫換鍔°傝繖涓弬鏁扮殑鍊間緷璧栦簬Hook綾誨瀷錛屾瘡涓縐岺ook閮芥湁鑷繁鐨凥ook浠g爜鐗瑰緛瀛楃闆嗐?/p>
wParam鍜宭Param鍙傛暟鐨勫間緷璧栦簬Hook浠g爜錛屼絾鏄畠浠殑鍏稿瀷鍊兼槸鍖呭惈浜嗗叧浜庡彂閫佹垨鑰呮帴鏀舵秷鎭殑淇℃伅銆?/p>
2銆侀挬瀛愮殑瀹夎涓庨噴鏀撅細(xì)
浣跨敤API鍑芥暟SetWindowsHookEx()鎶婁竴涓簲鐢ㄧ▼搴忓畾涔夌殑閽╁瓙瀛愮▼瀹夎鍒伴挬瀛愰摼琛ㄤ腑銆?SetWindowsHookEx鍑芥暟鎬繪槸鍦℉ook閾劇殑寮澶村畨瑁匟ook瀛愮▼銆傚綋鎸囧畾綾誨瀷鐨凥ook鐩戣鐨勪簨浠跺彂鐢熸椂錛岀郴緇熷氨璋冪敤涓庤繖涓狧ook鍏寵仈鐨?Hook閾劇殑寮澶寸殑Hook瀛愮▼銆傛瘡涓涓狧ook閾句腑鐨凥ook瀛愮▼閮藉喅瀹氭槸鍚︽妸榪欎釜浜嬩歡浼犻掑埌涓嬩竴涓狧ook瀛愮▼銆侶ook瀛愮▼浼犻掍簨浠跺埌涓嬩竴涓?Hook瀛愮▼闇瑕佽皟鐢–allNextHookEx鍑芥暟銆?/p>
HHOOK SetWindowsHookEx(
int idHook, // 閽╁瓙鐨勭被鍨嬶紝鍗沖畠澶勭悊鐨勬秷鎭被鍨?br>HOOKPROC lpfn, // 閽╁瓙瀛愮▼鐨勫湴鍧鎸囬拡銆傚鏋渄wThreadId鍙傛暟涓?
// 鎴栨槸涓涓敱鍒殑榪涚▼鍒涘緩鐨勭嚎紼嬬殑鏍囪瘑錛?br> // lpfn蹇呴』鎸囧悜DLL涓殑閽╁瓙瀛愮▼銆?br> // 闄ゆ浠ュ錛宭pfn鍙互鎸囧悜褰撳墠榪涚▼鐨勪竴孌甸挬瀛愬瓙紼嬩唬鐮併?br> // 閽╁瓙鍑芥暟鐨勫叆鍙e湴鍧錛屽綋閽╁瓙閽╁埌浠諱綍娑堟伅鍚庝究璋冪敤榪欎釜鍑芥暟銆?br>HINSTANCE hMod, // 搴旂敤紼嬪簭瀹炰緥鐨勫彞鏌勩傛爣璇嗗寘鍚玪pfn鎵鎸囩殑瀛愮▼鐨?br>DLL銆?br> // 濡傛灉dwThreadId 鏍囪瘑褰撳墠榪涚▼鍒涘緩鐨勪竴涓嚎紼嬶紝
// 鑰屼笖瀛愮▼浠g爜浣嶄簬褰撳墠榪涚▼錛宧Mod蹇呴』涓篘ULL銆?br> // 鍙互寰堢畝鍗曠殑璁懼畾鍏朵負(fù)鏈簲鐢ㄧ▼搴忕殑瀹炰緥鍙ユ焺銆?br>DWORD dwThreadId // 涓庡畨瑁呯殑閽╁瓙瀛愮▼鐩稿叧鑱旂殑綰跨▼鐨勬爣璇嗙銆?br> // 濡傛灉涓?錛岄挬瀛愬瓙紼嬩笌鎵鏈夌殑綰跨▼鍏寵仈錛屽嵆涓哄叏灞閽╁瓙銆?br> );
銆銆鍑芥暟鎴愬姛鍒欒繑鍥為挬瀛愬瓙紼嬬殑鍙ユ焺錛屽け璐ヨ繑鍥濶ULL銆?/p>
銆銆浠ヤ笂鎵璇寸殑閽╁瓙瀛愮▼涓庣嚎紼嬬浉鍏寵仈鏄寚鍦ㄤ竴閽╁瓙閾捐〃涓彂緇欒綰跨▼鐨勬秷鎭悓鏃跺彂閫佺粰閽╁瓙瀛愮▼錛屼笖琚挬瀛愬瓙紼嬪厛澶勭悊銆?/p>
鍦ㄩ挬瀛愬瓙紼嬩腑璋冪敤寰楀埌鎺у埗鏉冪殑閽╁瓙鍑芥暟鍦ㄥ畬鎴愬娑堟伅鐨勫鐞嗗悗錛屽鏋滄兂瑕佽娑堟伅緇х畫浼犻掞紝閭d箞瀹冨繀欏昏皟鐢ㄥ彟澶栦竴涓?SDK涓殑API鍑芥暟CallNextHookEx鏉ヤ紶閫掑畠錛屼互鎵ц閽╁瓙閾捐〃鎵鎸囩殑涓嬩竴涓挬瀛愬瓙紼嬨傝繖涓嚱鏁版垚鍔熸椂榪斿洖閽╁瓙閾句腑涓嬩竴涓挬瀛愯繃紼嬬殑榪斿洖鍊鹼紝 榪斿洖鍊肩殑綾誨瀷渚濊禆浜庨挬瀛愮殑綾誨瀷銆傝繖涓嚱鏁扮殑鍘熷瀷濡備笅錛?/p>
LRESULT CallNextHookEx
(
HHOOK hhk;
int nCode;
WPARAM wParam;
LPARAM lParam;
);
hhk涓哄綋鍓嶉挬瀛愮殑鍙ユ焺錛岀敱SetWindowsHookEx()鍑芥暟榪斿洖銆?/p>
NCode涓轟紶緇欓挬瀛愯繃紼嬬殑浜嬩歡浠g爜銆?/p>
wParam鍜宭Param 鍒嗗埆鏄紶緇欓挬瀛愬瓙紼嬬殑wParam鍊鹼紝鍏跺叿浣撳惈涔変笌閽╁瓙綾誨瀷鏈夊叧銆?/p>
閽╁瓙鍑芥暟涔熷彲浠ラ氳繃鐩存帴榪斿洖TRUE鏉ヤ涪寮冭娑堟伅錛屽茍闃繪璇ユ秷鎭殑浼犻掋傚惁鍒欑殑璇濓紝鍏朵粬瀹夎浜嗛挬瀛愮殑搴旂敤紼嬪簭灝嗕笉浼?xì)鎺ユ敹鍒伴挬瀛愮殑閫氱煡鑰屼笖榪樻湁鍙兘浜х敓涓嶆紜殑緇撴灉銆?/p>
閽╁瓙鍦ㄤ嬌鐢ㄥ畬涔嬪悗闇瑕佺敤UnHookWindowsHookEx()鍗歌澆錛屽惁鍒欎細(xì)閫犳垚楹葷儲銆傞噴鏀鵑挬瀛愭瘮杈冪畝鍗曪紝UnHookWindowsHookEx()鍙湁涓涓弬鏁般傚嚱鏁板師鍨嬪涓嬶細(xì)
UnHookWindowsHookEx
(
HHOOK hhk;
);
鍑芥暟鎴愬姛榪斿洖TRUE錛屽惁鍒欒繑鍥濬ALSE銆?/p>
3銆佷竴浜涜繍琛屾満鍒訛細(xì)
鍦╓in16鐜涓紝DLL鐨勫叏灞鏁版嵁瀵規(guī)瘡涓澆鍏ュ畠鐨勮繘紼嬫潵璇撮兘鏄浉鍚岀殑錛涜屽湪Win32鐜涓紝鎯呭喌鍗村彂鐢熶簡鍙樺寲錛孌LL鍑芥暟涓殑浠g爜鎵鍒涘緩鐨勪換浣曞璞★紙鍖呮嫭鍙橀噺錛夐兘褰掕皟鐢ㄥ畠鐨勭嚎紼嬫垨榪涚▼鎵鏈夈傚綋榪涚▼鍦ㄨ澆鍏LL鏃訛紝鎿嶄綔緋葷粺鑷姩鎶奃LL鍦板潃鏄犲皠鍒拌榪涚▼鐨勭鏈夌┖闂達(dá)紝涔熷氨鏄繘紼嬬殑铏氭嫙鍦板潃絀洪棿錛岃屼笖涔熷鍒惰DLL鐨勫叏灞鏁版嵁鐨勪竴浠芥嫹璐濆埌璇ヨ繘紼嬬┖闂淬備篃灝辨槸璇存瘡涓繘紼嬫墍鎷ユ湁鐨勭浉鍚岀殑DLL鐨勫叏灞鏁版嵁錛屽畠浠殑鍚嶇О鐩稿悓錛屼絾鍏跺煎嵈騫朵笉涓瀹氭槸鐩稿悓鐨勶紝鑰屼笖鏄簰涓嶅共娑夌殑銆?/p>
鍥犳錛屽湪Win32鐜涓嬭鎯沖湪澶氫釜榪涚▼涓叡浜暟鎹紝灝卞繀欏昏繘琛屽繀瑕佺殑璁劇疆銆傚湪璁塊棶鍚屼竴涓狣ll鐨勫悇榪涚▼ 涔嬮棿鍏變韓瀛樺偍鍣ㄦ槸閫氳繃瀛樺偍鍣ㄦ槧灝勬枃浠舵妧鏈疄鐜扮殑銆備篃鍙互鎶婅繖浜涢渶瑕佸叡浜殑鏁版嵁鍒嗙鍑烘潵錛屾斁緗湪涓涓嫭绔嬬殑鏁版嵁孌甸噷錛屽茍鎶婅孌電殑灞炴ц緗負(fù)鍏變韓銆傚繀欏葷粰榪欎簺 鍙橀噺璧嬪垵鍊鹼紝鍚﹀垯緙栬瘧鍣ㄤ細(xì)鎶婃病鏈夎祴鍒濆鍊肩殑鍙橀噺鏀懼湪涓涓彨鏈鍒濆鍖栫殑鏁版嵁孌典腑銆?/p>
#pragma data_seg棰勫鐞嗘寚浠ょ敤浜庤緗叡浜暟鎹銆備緥濡傦細(xì)
#pragma data_seg("SharedDataName")
HHOOK hHook=NULL;
#pragma data_seg()
鍦?pragma data_seg("SharedDataName")鍜?pragma data_seg()涔嬮棿鐨勬墍鏈夊彉閲忓皢琚闂Dll鐨勬墍鏈夎繘紼嬬湅鍒板拰鍏變韓銆傚啀鍔犱笂涓鏉℃寚浠?pragma comment(linker,"/section:.SharedDataName,rws"),閭d箞榪欎釜鏁版嵁鑺備腑鐨勬暟鎹彲浠ュ湪鎵鏈塂LL鐨勫疄渚嬩箣闂村叡 浜傛墍鏈夊榪欎簺鏁版嵁鐨勬搷浣滈兘閽堝鍚屼竴涓疄渚嬬殑錛岃屼笉鏄湪姣忎釜榪涚▼鐨勫湴鍧絀洪棿涓兘鏈変竴浠姐?/p>
褰撹繘紼嬮殣寮忔垨鏄懼紡璋冪敤涓涓姩鎬佸簱閲岀殑鍑芥暟鏃訛紝緋葷粺閮借鎶婅繖涓姩鎬佸簱鏄犲皠鍒拌繖涓繘紼嬬殑铏氭嫙鍦板潃絀洪棿閲?浠ヤ笅綆縐?鍦板潃絀洪棿")銆傝繖浣垮緱DLL鎴愪負(fù)榪涚▼鐨勪竴閮ㄥ垎錛屼互榪欎釜榪涚▼鐨勮韓浠芥墽琛岋紝浣跨敤榪欎釜榪涚▼鐨勫爢鏍堛?/p>
4銆佺郴緇熼挬瀛愪笌綰跨▼閽╁瓙錛?/p>
SetWindowsHookEx()鍑芥暟鐨勬渶鍚庝竴涓弬鏁板喅瀹氫簡姝ら挬瀛愭槸緋葷粺閽╁瓙榪樻槸綰跨▼閽╁瓙銆?/p>
綰跨▼鍕懼瓙鐢ㄤ簬鐩戣鎸囧畾綰跨▼鐨勪簨浠舵秷鎭傜嚎紼嬪嬀瀛愪竴鑸湪褰撳墠綰跨▼鎴栬呭綋鍓嶇嚎紼嬫淳鐢熺殑綰跨▼鍐呫?/p>
緋葷粺鍕懼瓙鐩戣緋葷粺涓殑鎵鏈夌嚎紼嬬殑浜嬩歡娑堟伅銆傚洜涓虹郴緇熷嬀瀛愪細(xì)褰卞搷緋葷粺涓墍鏈夌殑搴旂敤紼嬪簭錛屾墍浠ュ嬀瀛愬嚱鏁板繀欏繪斁鍦ㄧ嫭绔嬬殑鍔ㄦ侀摼鎺ュ簱(DLL) 涓傜郴緇熻嚜鍔ㄥ皢鍖呭惈"閽╁瓙鍥炶皟鍑芥暟"鐨凞LL鏄犲皠鍒板彈閽╁瓙鍑芥暟褰卞搷鐨勬墍鏈夎繘紼嬬殑鍦板潃絀洪棿涓紝鍗沖皢榪欎釜DLL娉ㄥ叆浜嗛偅浜涜繘紼嬨?/p>
鍑犵偣璇存槑錛?/p>
錛?錛夊鏋滃浜庡悓涓浜嬩歡錛堝榧犳爣娑堟伅錛夋棦瀹夎浜嗙嚎紼嬪嬀瀛愬張瀹夎浜嗙郴緇熷嬀瀛愶紝閭d箞緋葷粺浼?xì)鑷姩鍏堣皟鐢ňU跨▼鍕懼瓙錛岀劧鍚庤皟鐢ㄧ郴緇熷嬀瀛愩?
錛?錛夊鍚屼竴浜嬩歡娑堟伅鍙畨瑁呭涓嬀瀛愬鐞嗚繃紼嬶紝榪欎簺鍕懼瓙澶勭悊榪囩▼褰㈡垚浜嗗嬀瀛愰摼銆傚綋鍓嶅嬀瀛愬鐞嗙粨鏉熷悗搴旀妸鍕懼瓙淇℃伅浼犻掔粰涓嬩竴涓嬀瀛愬嚱鏁般?
錛?錛夊嬀瀛愮壒鍒槸緋葷粺鍕懼瓙浼?xì)娑堣楁秷鎭鐞嗘椂闂達(dá)紝闄嶄綆緋葷粺鎬ц兘銆傚彧鏈夊湪蹇呰鐨勬椂鍊欐墠瀹夎鍕懼瓙錛屽湪浣跨敤瀹屾瘯鍚庤鍙婃椂鍗歌澆銆?/p>
--------------------------------------------------------------------------------
閽╁瓙綾誨瀷
姣忎竴縐嶇被鍨嬬殑Hook鍙互浣垮簲鐢ㄧ▼搴忚兘澶熺洃瑙嗕笉鍚岀被鍨嬬殑緋葷粺娑堟伅澶勭悊鏈哄埗銆備笅闈㈡弿榪版墍鏈夊彲浠ュ埄鐢ㄧ殑Hook綾誨瀷銆?/p>
1銆乄H_CALLWNDPROC鍜學(xué)H_CALLWNDPROCRET Hooks
WH_CALLWNDPROC鍜學(xué)H_CALLWNDPROCRET Hooks浣夸綘鍙互鐩戣鍙戦佸埌紿楀彛榪囩▼鐨勬秷鎭傜郴緇熷湪娑堟伅鍙戦佸埌鎺ユ敹紿楀彛榪囩▼涔嬪墠璋冪敤WH_CALLWNDPROC Hook瀛愮▼錛屽茍涓斿湪紿楀彛榪囩▼澶勭悊瀹屾秷鎭箣鍚庤皟鐢╓H_CALLWNDPROCRET Hook瀛愮▼銆?/p>
WH_CALLWNDPROCRET Hook浼犻掓寚閽堝埌CWPRETSTRUCT緇撴瀯錛屽啀浼犻掑埌Hook瀛愮▼銆?/p>
CWPRETSTRUCT緇撴瀯鍖呭惈浜嗘潵鑷鐞嗘秷鎭殑紿楀彛榪囩▼鐨勮繑鍥炲鹼紝鍚屾牱涔熷寘鎷簡涓庤繖涓秷鎭叧鑱旂殑娑堟伅鍙傛暟銆?/p>
2銆乄H_CBT Hook
鍦ㄤ互涓嬩簨浠朵箣鍓嶏紝緋葷粺閮戒細(xì)璋冪敤WH_CBT Hook瀛愮▼錛岃繖浜涗簨浠跺寘鎷細(xì)
1. 嬋媧伙紝寤虹珛錛岄攢姣侊紝鏈灝忓寲錛屾渶澶у寲錛岀Щ鍔紝鏀瑰彉灝哄絳夌獥鍙d簨浠訛紱
2. 瀹屾垚緋葷粺鎸囦護(hù)錛?/p>
3. 鏉ヨ嚜緋葷粺娑堟伅闃熷垪涓殑縐誨姩榧犳爣錛岄敭鐩樹簨浠訛紱
4. 璁劇疆杈撳叆鐒︾偣浜嬩歡錛?/p>
5. 鍚屾緋葷粺娑堟伅闃熷垪浜嬩歡銆?/p>
Hook瀛愮▼鐨勮繑鍥炲肩‘瀹氱郴緇熸槸鍚﹀厑璁告垨鑰呴槻姝㈣繖浜涙搷浣滀腑鐨勪竴涓?/p>
3銆乄H_DEBUG Hook
鍦ㄧ郴緇熻皟鐢ㄧ郴緇熶腑涓庡叾浠朒ook鍏寵仈鐨凥ook瀛愮▼涔嬪墠錛岀郴緇熶細(xì)璋冪敤WH_DEBUG Hook瀛愮▼銆備綘鍙互浣跨敤榪欎釜Hook鏉ュ喅瀹氭槸鍚﹀厑璁哥郴緇熻皟鐢ㄤ笌鍏朵粬Hook鍏寵仈鐨凥ook瀛愮▼銆?/p>
4銆乄H_FOREGROUNDIDLE Hook
褰撳簲鐢ㄧ▼搴忕殑鍓嶅彴綰跨▼澶勪簬絀洪棽鐘舵佹椂錛屽彲浠ヤ嬌鐢╓H_FOREGROUNDIDLE Hook鎵ц浣庝紭鍏堢駭鐨勪換鍔°傚綋搴旂敤紼嬪簭鐨勫墠鍙扮嚎紼嬪ぇ姒傝鍙樻垚絀洪棽鐘舵佹椂錛岀郴緇熷氨浼?xì)璋冪敤WH_FOREGROUNDIDLE Hook瀛愮▼銆?/p>
5銆乄H_GETMESSAGE Hook
搴旂敤紼嬪簭浣跨敤WH_GETMESSAGE Hook鏉ョ洃瑙嗕粠GetMessage or PeekMessage鍑芥暟榪斿洖鐨勬秷鎭備綘鍙互浣跨敤WH_GETMESSAGE Hook鍘葷洃瑙嗛紶鏍囧拰閿洏杈撳叆錛屼互鍙婂叾浠栧彂閫佸埌娑堟伅闃熷垪涓殑娑堟伅銆?/p>
6銆乄H_JOURNALPLAYBACK Hook
WH_JOURNALPLAYBACK Hook浣垮簲鐢ㄧ▼搴忓彲浠ユ彃鍏ユ秷鎭埌緋葷粺娑堟伅闃熷垪銆傚彲浠ヤ嬌鐢ㄨ繖涓狧ook鍥炴斁閫氳繃浣跨敤WH_JOURNALRECORD Hook璁板綍涓嬫潵鐨勮繛緇殑榧犳爣鍜岄敭鐩樹簨浠躲傚彧瑕乄H_JOURNALPLAYBACK Hook宸茬粡瀹夎錛屾甯哥殑榧犳爣鍜岄敭鐩樹簨浠跺氨鏄棤鏁堢殑銆?/p>
WH_JOURNALPLAYBACK Hook鏄叏灞Hook錛屽畠涓嶈兘璞$嚎紼嬬壒瀹欻ook涓鏍蜂嬌鐢ㄣ?/p>
WH_JOURNALPLAYBACK Hook榪斿洖瓚呮椂鍊鹼紝榪欎釜鍊煎憡璇夌郴緇熷湪澶勭悊鏉ヨ嚜鍥炴斁Hook褰撳墠娑堟伅涔嬪墠闇瑕佺瓑寰呭闀挎椂闂達(dá)紙姣錛夈傝繖灝變嬌Hook鍙互鎺у埗瀹炴椂浜嬩歡鐨勫洖鏀俱?/p>
WH_JOURNALPLAYBACK鏄痵ystem-wide local hooks錛屽畠鍊戜笉鏈冭娉ㄥ皠鍒頒換浣曡紼嬩綅鍧絀洪枔銆?/p>
7銆乄H_JOURNALRECORD Hook
WH_JOURNALRECORD Hook鐢ㄦ潵鐩戣鍜岃褰曡緭鍏ヤ簨浠躲傚吀鍨嬬殑錛屽彲浠ヤ嬌鐢ㄨ繖涓狧ook璁板綍榪炵畫鐨勯紶鏍囧拰閿洏浜嬩歡錛岀劧鍚庨氳繃浣跨敤WH_JOURNALPLAYBACK Hook鏉ュ洖鏀俱?/p>
WH_JOURNALRECORD Hook鏄叏灞Hook錛屽畠涓嶈兘璞$嚎紼嬬壒瀹欻ook涓鏍蜂嬌鐢ㄣ?/p>
WH_JOURNALRECORD鏄痵ystem-wide local hooks錛屽畠鍊戜笉鏈冭娉ㄥ皠鍒頒換浣曡紼嬩綅鍧絀洪枔銆?/p>
8銆乄H_KEYBOARD Hook
鍦ㄥ簲鐢ㄧ▼搴忎腑錛學(xué)H_KEYBOARD Hook鐢ㄦ潵鐩戣WM_KEYDOWN and WM_KEYUP娑堟伅錛岃繖浜涙秷鎭氳繃GetMessage or PeekMessage function榪斿洖銆傚彲浠ヤ嬌鐢ㄨ繖涓狧ook鏉ョ洃瑙嗚緭鍏ュ埌娑堟伅闃熷垪涓殑閿洏娑堟伅銆?/p>
9銆乄H_KEYBOARD_LL Hook
WH_KEYBOARD_LL Hook鐩戣杈撳叆鍒扮嚎紼嬫秷鎭槦鍒椾腑鐨勯敭鐩樻秷鎭?/p>
10銆乄H_MOUSE Hook
WH_MOUSE Hook鐩戣浠嶨etMessage 鎴栬?PeekMessage 鍑芥暟榪斿洖鐨勯紶鏍囨秷鎭備嬌鐢ㄨ繖涓狧ook鐩戣杈撳叆鍒版秷鎭槦鍒椾腑鐨勯紶鏍囨秷鎭?/p>
11銆乄H_MOUSE_LL Hook
WH_MOUSE_LL Hook鐩戣杈撳叆鍒扮嚎紼嬫秷鎭槦鍒椾腑鐨勯紶鏍囨秷鎭?/p>
12銆乄H_MSGFILTER 鍜?WH_SYSMSGFILTER Hooks
WH_MSGFILTER 鍜?WH_SYSMSGFILTER Hooks浣挎垜浠彲浠ョ洃瑙嗚彍鍗曪紝婊氬姩鏉★紝娑堟伅妗嗭紝瀵硅瘽妗嗘秷鎭茍涓斿彂鐜扮敤鎴蜂嬌鐢ˋLT+TAB or ALT+ESC 緇勫悎閿垏鎹㈢獥鍙c俉H_MSGFILTER Hook鍙兘鐩戣浼犻掑埌鑿滃崟錛屾粴鍔ㄦ潯錛屾秷鎭鐨勬秷鎭紝浠ュ強浼犻掑埌閫氳繃瀹夎浜咹ook瀛愮▼鐨勫簲鐢ㄧ▼搴忓緩绔嬬殑瀵硅瘽妗嗙殑娑堟伅銆俉H_SYSMSGFILTER Hook鐩戣鎵鏈夊簲鐢ㄧ▼搴忔秷鎭?/p>
WH_MSGFILTER 鍜?WH_SYSMSGFILTER Hooks浣挎垜浠彲浠ュ湪妯″紡寰幆鏈熼棿榪囨護(hù)娑堟伅錛岃繖絳変環(huán)浜庡湪涓繪秷鎭驚鐜腑榪囨護(hù)娑堟伅銆?/p>
閫氳繃璋冪敤CallMsgFilter function鍙互鐩存帴鐨勮皟鐢╓H_MSGFILTER Hook銆傞氳繃浣跨敤榪欎釜鍑芥暟錛屽簲鐢ㄧ▼搴忚兘澶熷湪妯″紡寰幆鏈熼棿浣跨敤鐩稿悓鐨勪唬鐮佸幓榪囨護(hù)娑堟伅錛屽鍚屽湪涓繪秷鎭驚鐜噷涓鏍楓?/p>
13銆乄H_SHELL Hook
澶栧3搴旂敤紼嬪簭鍙互浣跨敤WH_SHELL Hook鍘繪帴鏀墮噸瑕佺殑閫氱煡銆傚綋澶栧3搴旂敤紼嬪簭鏄縺媧葷殑騫朵笖褰撻《灞傜獥鍙e緩绔嬫垨鑰呴攢姣佹椂錛岀郴緇熻皟鐢╓H_SHELL Hook瀛愮▼銆?/p>
WH_SHELL 鍏辨湁錛曢挓鎯呮硜錛?/p>
1. 鍙鏈変釜top-level銆乽nowned 紿楀彛琚駭鐢熴佽搗浣滅敤銆佹垨鏄鎽ф瘉錛?/p>
2. 褰揟askbar闇瑕侀噸鐢繪煇涓寜閽紱
3. 褰撶郴緇熼渶瑕佹樉紺哄叧浜嶵askbar鐨勪竴涓▼搴忕殑鏈灝忓寲褰㈠紡錛?/p>
4. 褰撶洰鍓嶇殑閿洏甯冨眬鐘舵佹敼鍙橈紱
5. 褰撲嬌鐢ㄨ呮寜Ctrl+Esc鍘繪墽琛孴ask Manager錛堟垨鐩稿悓綰у埆鐨勭▼搴忥級銆?/p>
鎸夌収鎯緥錛屽澹沖簲鐢ㄧ▼搴忛兘涓嶆帴鏀禬H_SHELL娑堟伅銆傛墍浠ワ紝鍦ㄥ簲鐢ㄧ▼搴忚兘澶熸帴鏀禬H_SHELL娑堟伅涔嬪墠錛屽簲鐢ㄧ▼搴忓繀欏昏皟鐢⊿ystemParametersInfo function娉ㄥ唽瀹冭嚜宸便?br>