返回列表 发帖

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

全局动态调用笔记
$ U9 B2 M' d* z/ }8 ^svchost files工程->插入->类(Generic Class DTDY)->DTDY.cpp DTDY.h$ Q, E$ C) b4 i
----------------------------------------+ D; }5 Y2 `4 l
DTDY.h:
4 |: g, h7 U% R; e# H
/ y7 _# R* s) T$ s" @#if _MSC_VER>1000
7 Q# s" [6 ]1 w9 k5 @#pragma once
; j. g0 F2 b  x' ^5 k# N#endif //_MSC_VER>1000
" K# A1 m5 [) A! d$ D5 h& W#include<windows.h># H" ~4 ~2 k, g5 i2 b! L# E

$ I0 M7 U& B2 F- ~' J- I" ptypedef DWORD (__stdcall *pGetModuleFileNameA)(HMODULE,LPSTR,DWORD);0 i8 W$ z0 ]4 f% ]
class DTDY8 }  A6 ?  l2 \' H5 C1 L, a
{
; `9 |- p0 l2 _2 Q+ |public:
* H' O9 A0 k0 T/ eDTDY();
6 O: \$ k1 o& ?$ X, wvirtual ~DTDY();
: O5 R- @- h3 Zpublic:
, F) m. W$ p6 ~( Q6 o1 Istatic pGetModuleFileNameA MyGetModuleFileName;0 v5 z; D6 f' ^
static BOOL FunInitiallization();
4 Q* ~# s1 e5 B2 o0 l+ q8 |# D, Y};
1 Q5 o/ W$ C$ o$ P: z. X* B#endif
+ g6 F/ c3 x+ t6 A1 W6 x& X8 H----------------------------------------
0 A8 g' j* \6 i
+ q; J/ A0 q0 p8 fDTDY.cpp:5 g8 h! {0 s' {. }$ I! t
8 R0 V" f" B4 l3 P/ B9 g
#include "DTDY.h"; k4 {$ \1 Q" J9 ]4 `* E$ ^
pGetModuleFileNameA DTDY::MyGetModuleFileName=NULL;
2 d0 O6 f& j/ s* J  W0 |$ _" GDTDY:TDY()
+ d  p8 L- T- k. d{$ I. q$ m/ x7 `6 [7 O
}
* T( d4 M- i9 b0 q) f6 WDTDY::~DTDY()
( j2 Y* g9 Y9 \5 [& [{4 A/ S( ]2 h1 I! h
}
8 H  v' g; l/ J1 s6 k# {+ kBOOL DTDY::FunInitiallization()
/ |. w, T' m% y% }: C6 h% k( K+ A' A5 n  o{
8 D. J! {, ?0 t# J9 {HMODULE hModule=LoadLibrary("kernel32.dll");
7 R3 \  }7 J: e& O; a3 c) ?MyGetModuleFileName=(pGetModuleFileNameA)GetProcAddress(hModule,"GetModuleFileNameA");) W5 x( m& D/ A$ C! @, B6 w" v' d
if(!MyGetModuleFileName=) return FALSE;
' N* f3 c0 V+ _2 S- c: ]
# h% K8 z1 |+ Oreturn TRUE;
! `& W( {8 j+ W. w: ?1 o% V}) ?& c% j: t) z% }3 `; c" q
----------------------------------------' v3 r' e% [; q# ^
svchost.cpp:
0 J2 \/ O3 d- z4 Q% ^! C9 R- i3 X4 }+ U
#include "DTDY.h"4 N/ Z# y5 ~" w
1 X* A# ~3 d- S
BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)& q% }# Y! ]5 K
{
4 }% {2 E+ ^$ O/ Z& @( k5 Z  wswitch(ul_reason_for_call)+ k+ P% y+ q, n
{6 C) a" t% b& }4 ]: b7 L
case DLL_PROCESS_ATTACH:
) X, u7 T$ \; k: u5 y* n# d" }if(!DTDY::FunInitiallization()) return FALSE;
& N* L& {2 O8 L3 ~4 A
, }3 f" I4 K# o8 Wbreak;& p; `# n1 k2 n: y; l* K
}
0 m! S# O0 g* j3 R}
* H) q7 e( f6 K0 d, r8 O/ O7 @8 M  L+ Z2 a# O6 |
1 j  I. l9 \$ `0 |
GetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));->goto def
2 D; H: H0 U% d) z! L. [2 D  H/ d改写为) W+ T  Q3 m' X0 i: N
DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));
$ p1 K* ^6 a2 _0 T8 d----------------------------------------, }' m6 H5 y8 {( \% C
KernelManager.cpp:
0 W$ W$ V! N$ q7 h5 t) `2 f; i/ O  n& f. h6 a
#include "../DTDY.h"
: J1 B+ |# N$ w4 }- J- sGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));1 U& C. z; z1 |4 X2 A  v4 w8 L
改写为
/ D" d9 H7 @  ^+ J: L8 e9 p, nDTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));9 E. L4 I# A: }# z6 u. b0 e
----------------------------------------

返回列表