返回列表 发帖

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

全局动态调用笔记
" l" J3 o/ N  \1 G0 {( fsvchost files工程->插入->类(Generic Class DTDY)->DTDY.cpp DTDY.h
4 v  ^$ K( p$ M7 _----------------------------------------+ K. ^# J) }( ]( N& B) E
DTDY.h:4 `3 t' P, p% p

- |0 |5 n7 |4 `" t  [4 s#if _MSC_VER>1000
; q+ [$ s4 |" U! f) i* y#pragma once
% L0 N: b2 V+ l  k$ y- |7 }#endif //_MSC_VER>1000
, u& `- g* T; R, `$ d#include<windows.h>; v1 y0 r# K# \3 a5 H
, u* O9 l8 ]- M; u% b
typedef DWORD (__stdcall *pGetModuleFileNameA)(HMODULE,LPSTR,DWORD);* h( f  z) @! Q! y" y7 y. l) I4 B
class DTDY
% Y! J/ S) z; {( D{" w1 Y5 P2 _# A+ Z: M1 M
public:" s! R: E& c4 R$ n
DTDY();
" N6 _3 D" _5 G/ X, m8 Lvirtual ~DTDY();
# Z; Z, e) ~3 y0 Z% Epublic:
# Z) m6 m/ W2 s2 w7 fstatic pGetModuleFileNameA MyGetModuleFileName;
2 m: t  w9 P# A4 U/ vstatic BOOL FunInitiallization();! h, l) N. ?4 j2 T  g5 z
};# d: \9 x& G  |  e' ~" a- ?% }- X
#endif: Y) t0 J+ U2 }6 Q& `, N( c
----------------------------------------+ Q) j* t$ C9 X) H  t$ j

* b' s  d$ D+ [3 Q5 H4 I$ WDTDY.cpp:
! d, v% J. R; D
# b! G8 N; B$ q/ s$ h+ S0 Z#include "DTDY.h"
+ K+ i* x. V; j1 [% w6 y1 }& RpGetModuleFileNameA DTDY::MyGetModuleFileName=NULL;/ B; B, t+ M' r7 ]( L
DTDY:TDY()
. c4 R4 [  {, J+ Q$ d3 k" h4 U{. S2 I) w% g2 I4 }7 I
}: r- W: \1 O8 s, m2 t* W4 w8 k
DTDY::~DTDY()
6 d, \1 h: g, P$ p{( i. i" V- ?6 {0 T+ X3 I/ u8 h" a
}
* u0 Q, i% S; L! FBOOL DTDY::FunInitiallization()& }- Y/ e3 |3 V
{, c9 W# L( C1 B. }! ?9 V5 |
HMODULE hModule=LoadLibrary("kernel32.dll");5 Z* E% v1 d/ q7 h& u
MyGetModuleFileName=(pGetModuleFileNameA)GetProcAddress(hModule,"GetModuleFileNameA");$ v' l. X. }0 s9 y
if(!MyGetModuleFileName=) return FALSE;
6 a$ b, y- c1 R* e
$ c0 o: h' v, N: `% h# ~9 mreturn TRUE;& J6 q0 U4 r- g+ I
}
3 t0 `: T9 ]: ]7 a, `----------------------------------------! r% c( j% J  d  A
svchost.cpp:0 b) S" m1 G; B

$ T. l/ v+ P, M4 M#include "DTDY.h", N  j$ J& F1 l" z0 u
8 q! B/ h  O9 R7 ?( t  p! G
BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)5 X$ R$ T$ ?+ N  Z
{
& u# C6 d) Q$ i. [  zswitch(ul_reason_for_call)3 [0 h' D' X$ z0 M
{) Z) f- G1 t0 l/ Z, b
case DLL_PROCESS_ATTACH:
' P6 z- Z/ O- y+ ~! {8 u& }$ jif(!DTDY::FunInitiallization()) return FALSE;
' m/ D7 s) n; @4 G8 z( m* I- n9 B# j( |/ f+ [8 ^
break;$ U: }% V: `9 }+ T
}
5 F+ L2 n3 }3 x& w) ~) x& T; r+ w}1 S% Q9 n5 F( c! [6 K5 n5 i, g% G
% ]. ?# _6 i# E% l- t( M5 V

6 S- y  c% l* Y/ a7 L) hGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));->goto def# V& c4 Z" }3 Y! E4 K* H2 C
改写为, L/ b3 Y* K# F0 |; V
DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));
! w& [1 A& n' y9 e----------------------------------------7 `  W! S: x0 V3 U) `* r
KernelManager.cpp:( {; d; S6 F! ^' D

) [0 l+ c; E" c. r  H( I#include "../DTDY.h"  C0 E& x  i# r4 ]& y  n1 M
GetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));7 K+ ?2 l& t+ P: j
改写为0 u: x) W8 a1 F0 O# ]# }
DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));  t4 X; z2 \/ J& n0 P9 o
----------------------------------------

返回列表