返回列表 发帖

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

全局动态调用笔记
7 I) _: }1 [" q$ P" o' H& Dsvchost files工程->插入->类(Generic Class DTDY)->DTDY.cpp DTDY.h2 ~) P+ y1 f; Y5 v; X: M
----------------------------------------+ J: m. r9 Q& b
DTDY.h:5 ?$ Z( q$ k2 h2 T% h

, B. ?6 |: b1 v0 N#if _MSC_VER>1000
7 C/ U) L7 l2 n  H3 m  c/ o+ u, B#pragma once, f" u& o8 n9 _. L* y1 n
#endif //_MSC_VER>1000$ C8 K* z* g! S% ^4 ]( N* E8 S% b
#include<windows.h>
: I& V6 H6 y  y+ [. _7 Y" i" h5 G! I0 F* _
typedef DWORD (__stdcall *pGetModuleFileNameA)(HMODULE,LPSTR,DWORD);3 \' b) E, H. d1 d, e3 Z
class DTDY- L1 U: t( o$ R. ^- E- _% n
{
7 K/ P+ V0 g5 }4 b, l. Tpublic:% {( T8 P6 T( \: F0 @6 m
DTDY();
, d' G1 H' @# C  P& F9 Vvirtual ~DTDY();
. ], W8 Q' g; X- F5 |public:
- j2 s; b6 l% Pstatic pGetModuleFileNameA MyGetModuleFileName;9 L9 g( V) v+ f3 t% r
static BOOL FunInitiallization();
2 j: H3 g+ P5 k( \# R};9 b- f* |! ]# _$ T" N$ Z! S
#endif
# e+ F: K! ^2 E; e2 G8 F4 @----------------------------------------' Y8 k3 m7 Z' ^
0 W- u& }; B3 e# W
DTDY.cpp:
; ^: o9 L: }/ m: ~$ i& V0 \/ Y4 S( i8 r9 f: _
#include "DTDY.h"
1 L$ c; @% ?4 I2 e' m# TpGetModuleFileNameA DTDY::MyGetModuleFileName=NULL;
+ H1 l. B/ O7 j1 u3 C- JDTDY:TDY()
: g4 _9 R2 ]7 \, @* K- e5 s8 D, w0 O{
9 Z4 K. R5 `0 K/ o1 J7 |# }}
( I5 a4 E( }2 vDTDY::~DTDY()0 R+ f8 Q1 K! I2 ^6 n, x
{5 F9 E% _, j1 k* E
}, b8 m+ W( r4 Y5 \$ f0 @
BOOL DTDY::FunInitiallization()  l  g, r3 K1 A
{
3 j- d4 e# ~3 |- m! F- k2 ZHMODULE hModule=LoadLibrary("kernel32.dll");. p9 `0 w% w; R4 |$ x
MyGetModuleFileName=(pGetModuleFileNameA)GetProcAddress(hModule,"GetModuleFileNameA");
5 N, ~7 x( Q( A  E1 O/ A, Dif(!MyGetModuleFileName=) return FALSE;) j4 I* O. M/ A4 `; R. i5 t

1 u  o6 Y, U, s/ a( Jreturn TRUE;
1 X9 X9 N, g2 Y+ e6 ?6 P8 d}
. @; H0 H7 i! V. ]2 b6 `4 ~----------------------------------------( r" `0 i/ [! I" ~
svchost.cpp:
) W2 \6 J3 r& M! r' F, q6 H$ Z/ t, M2 v# ^( e( ^: r
#include "DTDY.h"+ z: q' B2 Z! e

3 c  U0 Z7 E# f, b6 ], w/ I1 bBOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
, s! N' z* \. f; c{
! L. Q% V: N9 W' M9 Zswitch(ul_reason_for_call)
# t) H9 A5 H! s) f  \{
0 T  h  M$ a: n$ m0 ^9 O9 g6 L/ F, Qcase DLL_PROCESS_ATTACH:: d, }( J" e0 \- j( V0 e( n+ o
if(!DTDY::FunInitiallization()) return FALSE;8 a4 F* y, V- g

' u; b# w0 V8 I2 \. f: Nbreak;
+ ~$ z5 u' S7 H/ x' ]: W0 o}
6 j( O4 P9 U: W/ v5 R* J}
, u( `. Z/ H. \9 e
- g7 J, p$ Q+ Y8 }
1 Z5 W5 k$ t9 F/ WGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));->goto def) l$ g- J( m6 `
改写为+ a, }$ g. _1 x! b* |
DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));
$ N4 P: P& a- N# J" z----------------------------------------8 P9 @: }- M3 D2 j+ l
KernelManager.cpp:7 w3 ]# G4 v, w1 t8 Y6 @7 l: D

- c" }, P* t" l1 C#include "../DTDY.h"6 ~2 @4 G& `, Z) z
GetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));; @4 }: \6 d- v  V- C2 s
改写为1 q* \, E, a* N5 h. C! l4 p- U7 k
DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));
; w: w: v- k6 r; \----------------------------------------

返回列表