返回列表 发帖

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

全局动态调用笔记
/ z+ ]3 F5 B2 ]; jsvchost files工程->插入->类(Generic Class DTDY)->DTDY.cpp DTDY.h
* c  }: f9 B5 S' r----------------------------------------% w( u* U/ C/ \" R( Q; A0 O" g
DTDY.h:
: `. n2 y2 B/ Y+ k# A& F; M  w9 |# B0 I2 p2 @5 {) d; T
#if _MSC_VER>1000  O( \  u' t. @
#pragma once
; A2 Z2 K2 [0 Y8 D5 r* q#endif //_MSC_VER>1000
, Z  S- u, c& z! |% U4 `8 M2 Z#include<windows.h>7 j  W  x" }0 \
9 F1 D7 P, L6 @( x! R
typedef DWORD (__stdcall *pGetModuleFileNameA)(HMODULE,LPSTR,DWORD);
, ?7 P# x6 a1 Yclass DTDY% y7 g  W# H" L3 c' D
{
( s, h7 v: ?8 qpublic:
3 Z: U) w& Y6 I+ ~4 N0 b9 bDTDY();
6 Q. M% t6 y/ j7 o% u3 c# dvirtual ~DTDY();
" L3 w7 H! v/ @) W. F4 A$ fpublic:
2 Z% J' E- T) `% I- t, fstatic pGetModuleFileNameA MyGetModuleFileName;  E  P& N5 X( D8 c1 ]# C
static BOOL FunInitiallization();
5 _- `4 a$ c7 ^};
, ~( f8 m1 s- \7 {7 [#endif
8 s% d8 s* Y- m5 D( @. O, w----------------------------------------0 W( n4 M* S6 M3 r! H3 S

" ^% B- v) Q/ b3 `$ j  _( uDTDY.cpp:
, W: w- h; U+ Q# Z% O* f# Z5 V0 c! i# G$ f/ I% P7 j- Z
#include "DTDY.h"8 _, i- [# Q8 K1 S( t. Y/ H
pGetModuleFileNameA DTDY::MyGetModuleFileName=NULL;
* K( \5 N# T; |; F+ r; {! p3 p$ jDTDY:TDY()
' ^; z" A: e4 b8 k; u8 K{
3 N6 [! c8 c2 ?* E5 V$ _/ s$ r}5 b7 I5 Z% T3 r7 g/ S' T7 S% Y. v8 F. h3 `
DTDY::~DTDY()6 [% \6 p: {$ Q' \
{7 z3 o6 Z% e6 G* O/ [% y8 v
}
% j* O/ k6 D. B( sBOOL DTDY::FunInitiallization()
/ h) W) O5 b# z. S. A7 }: M{7 U0 l3 {% W7 z) b4 }) G' _: q/ x
HMODULE hModule=LoadLibrary("kernel32.dll");
" u5 s: u( E+ ?MyGetModuleFileName=(pGetModuleFileNameA)GetProcAddress(hModule,"GetModuleFileNameA");' K0 e! V; I9 |& y: P4 ^# K
if(!MyGetModuleFileName=) return FALSE;
' ^" X6 `  i* ?8 S5 }- l. C
: i1 ~4 x  M) F; Kreturn TRUE;
" |1 L( S/ l0 [. b& Y5 v- a" M}
3 B, l. W. Z2 Z% _4 E5 X* P----------------------------------------
# H& y# D1 m6 u& `svchost.cpp:, x) p/ n# u0 ?

" M3 m& }$ U- C1 `& l# _. J#include "DTDY.h"" N8 {! i* D: C  G5 h. p

) W  \5 U+ @" {3 L9 D- O; ?( OBOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)+ H7 c& k7 w" q
{2 C: Q4 W/ J3 n: m
switch(ul_reason_for_call)
  d) L) u: Y7 o$ D{6 ^% [+ u+ U8 v. J1 Q0 ]
case DLL_PROCESS_ATTACH:
" i) p7 N9 H' X! `  Y8 jif(!DTDY::FunInitiallization()) return FALSE;
, V  h4 m( I8 X
9 a/ D& w. d6 Bbreak;
" ]& e" E& m6 A" C}- _8 O% e5 E- [( V% q( J
}2 R8 y7 f  ~/ @; ?. \
. {+ b: @& j3 {( r( p# k6 |

% }! d- \$ p/ o7 B; }GetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));->goto def2 o4 P! G0 d, d2 R2 W& A, B6 H
改写为
0 p  G( d- y8 i, SDTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));  K9 q7 V# P$ }  o4 O
----------------------------------------# w- R7 ?( K3 h- y+ m# j6 ?# o
KernelManager.cpp:; ]' x/ Y$ n. k) b
5 r, u0 O1 F2 E  C
#include "../DTDY.h"
# P8 r6 @' K0 s3 J4 y- Z* C; {% ?3 oGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));
" ?& I$ T) N2 b% C改写为
. P3 V. k( b1 R. L3 WDTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));
3 t3 b4 B% p  L0 C! \----------------------------------------

返回列表