返回列表 发帖

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

全局动态调用笔记
  V, i3 y7 B' z3 w5 {1 C) Dsvchost files工程->插入->类(Generic Class DTDY)->DTDY.cpp DTDY.h
9 u0 R* O8 j3 t& I; T9 L. v+ c----------------------------------------
) h. }# F4 D: aDTDY.h:
; ~6 ^! M0 X" j6 z+ U' e! R' m% x$ P( `# B& `( x% h2 y, k
#if _MSC_VER>10004 U% x/ w3 M/ L+ [$ b
#pragma once9 o" Z% ^- X' P
#endif //_MSC_VER>1000) P; D* J5 u  ]  e6 f
#include<windows.h>
% S8 `7 ~  L8 H7 J( \1 W4 s" `6 O
typedef DWORD (__stdcall *pGetModuleFileNameA)(HMODULE,LPSTR,DWORD);
! L; E9 m# i5 {0 e3 lclass DTDY) Q3 `$ T9 d0 r1 n  p( I7 p  j
{) t) X. ~8 k; y+ w. Q. e* g
public:
6 @4 [' Y' @1 y2 `' LDTDY();
! h; i% z9 ?) s/ ]" |virtual ~DTDY();7 v3 d) ~# {, p4 @- o) \
public:
" v% K$ T! [3 ?! estatic pGetModuleFileNameA MyGetModuleFileName;. h% {4 \' n$ n# f/ u; K8 W0 P
static BOOL FunInitiallization();# E2 [' v6 ?  m7 n  t
};
/ h( H8 j1 x$ |8 ~% d& L: S  y0 b* s#endif4 ]. E: a. R- X9 m
----------------------------------------; b6 p' s6 s  i- ~; O

1 _+ o* d9 W. M; z0 ]) R! q2 T# ?9 vDTDY.cpp:
; ~# y0 Q2 n9 [4 Y
8 g. j5 _9 D6 y; G#include "DTDY.h"5 @( X; d" m; e$ {5 D8 f5 I
pGetModuleFileNameA DTDY::MyGetModuleFileName=NULL;1 B  @4 N3 K: y+ u  _" U
DTDY:TDY()
: X$ v. ?$ `! x7 E{
) Z; U& L0 K/ P( u6 q- a! m}
: j  G5 ?  V5 W3 j  v4 j& t0 WDTDY::~DTDY()
& i$ Y5 z, K* c" C: g- {% U: k& P" R{1 w! L3 l( G1 Q. ?4 Y  o  L+ n
}
9 |/ |3 {$ `4 `BOOL DTDY::FunInitiallization(): T6 @: f# ^( V) F; _! D) v
{0 V+ _+ S' m# H1 Q& a. P
HMODULE hModule=LoadLibrary("kernel32.dll");
7 v2 @! w  f8 F4 PMyGetModuleFileName=(pGetModuleFileNameA)GetProcAddress(hModule,"GetModuleFileNameA");+ w; D. B! l* h9 h( M" o
if(!MyGetModuleFileName=) return FALSE;$ r, g+ [/ a8 o+ j2 p9 H
$ L9 X+ q; ?* L" n3 [
return TRUE;! h' o, G9 b0 c9 }' n; x; \- O
}
. U; e/ @# Q2 g, R! A2 {----------------------------------------
8 L3 i$ w$ \4 Z, E$ K0 k' e2 y) Csvchost.cpp:9 f" W+ N/ ?% y" j/ H/ Z

+ M8 j6 J! e( O3 A/ A, ?! g#include "DTDY.h"4 U% P2 z/ t. Z" I9 S' L( N' U+ X8 l
; `5 b  P: {8 @
BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved); P. H2 ?' b" c# \
{( n1 x5 s$ Q. [8 f  {
switch(ul_reason_for_call)
! W, i; \% }" |# U{
. o% |( ~0 e- h& r9 ecase DLL_PROCESS_ATTACH:6 `' O" R# _; ?1 _$ s) a3 t% H2 {
if(!DTDY::FunInitiallization()) return FALSE;
5 o6 N6 O- f* S* q  k3 k1 \9 z
5 J5 i  |# z4 b! X' xbreak;
, }# h4 c  i$ k2 |5 P4 Q* D+ h}/ q: |! H8 I3 L" X/ c; [3 k
}  ^# R  O' j! h$ _
/ |1 D- T1 n/ h5 I
, s" ?8 K3 Z# X( w, |# F- u+ K. {  r
GetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));->goto def3 S( {5 T8 I) n& O- |
改写为
; D2 c8 x9 u1 S7 M! M; A1 qDTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));% k, C& B0 K2 t! s
----------------------------------------
% Q9 h; c2 A( y0 I/ U7 cKernelManager.cpp:% k  |. f7 }# p. F5 L9 R3 z

  v9 M# q$ P8 L' F; {* p# k- S#include "../DTDY.h"
! C" o2 V- U8 u( C' S, x3 A( bGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));
/ ?- _6 T7 z8 F5 k$ i' P" G改写为
, `( _& |& K9 K: P& z' }1 hDTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));
( o) e# o, r3 r7 p9 }----------------------------------------

返回列表