返回列表 发帖

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

全局动态调用笔记
0 g7 i. q# O5 c; bsvchost files工程->插入->类(Generic Class DTDY)->DTDY.cpp DTDY.h
  p2 p1 C3 R/ r----------------------------------------- ~% ]: Q7 _& l7 F
DTDY.h:% I, P5 g* I8 N$ o1 i
, H$ X8 X0 S1 q: L
#if _MSC_VER>1000* I/ S. Q' G# z, c
#pragma once; k5 L' Q, Y6 v7 V! H, z! \, d& l
#endif //_MSC_VER>1000
  T6 d; f5 I/ Q& i" u! S+ k- z#include<windows.h>
7 a" U) F6 O! G( }+ p) ]+ I
0 H* `3 v! `1 E; X9 Ptypedef DWORD (__stdcall *pGetModuleFileNameA)(HMODULE,LPSTR,DWORD);# I: Q4 `" o( Z
class DTDY
, T' o1 G& K3 Y# E& z/ T  `{/ M/ h  }% w0 P
public:
  A/ n# H6 S. _3 QDTDY();* n4 |- n5 e: A  |$ V  x9 A8 ?
virtual ~DTDY();' N- g+ j1 P! j% F' m
public:
9 R3 h; H, E" v+ Qstatic pGetModuleFileNameA MyGetModuleFileName;
& N% p1 `) u1 v" z5 Y1 ~8 ~static BOOL FunInitiallization();. c; ]4 z! G3 l2 r
};
' B, X% s: K. V+ \#endif9 [( J# v) l1 {! ]: q
----------------------------------------- ^2 y& t; v  M

/ l7 ~1 I! i$ t/ J8 LDTDY.cpp:
3 l4 F' @) ?* Z0 H0 l. d% a* q7 L1 m) Y: e
#include "DTDY.h"
% J  E; j/ K, |2 x9 S! ?6 qpGetModuleFileNameA DTDY::MyGetModuleFileName=NULL;5 c( B9 D+ |% h5 Y+ o9 b
DTDY:TDY()8 s6 u# v9 y- W) n5 n" Q  K2 Q. `+ h
{
5 S, d( b/ `  f; g, j}* ^( s# q  Q; r3 [- o9 \8 o
DTDY::~DTDY()7 X6 z% E5 R1 J* b0 ]
{- q0 n9 g. w2 Y% @; J
}8 l% n$ ^; M0 {) {; d  J7 b' d" j9 m+ I
BOOL DTDY::FunInitiallization()
# c. U2 e6 K# d* y- w{1 J( {6 A8 h! r) k& g, f) P' }# ~
HMODULE hModule=LoadLibrary("kernel32.dll");
0 k; m: c* j" YMyGetModuleFileName=(pGetModuleFileNameA)GetProcAddress(hModule,"GetModuleFileNameA");
/ u9 X8 Z' k9 F/ P$ O* wif(!MyGetModuleFileName=) return FALSE;4 g8 r. c0 i6 e0 L9 \* F, C6 M

8 l0 L3 ?2 M0 G, Y' x9 breturn TRUE;# ]$ y" M8 W' M0 Y, ~/ I
}0 c% d1 [4 v9 E
----------------------------------------0 |- m" H3 `" r9 W3 S% _: R" d) `6 A6 q
svchost.cpp:4 f( s! a! g) S7 i  k. j; k& B" L
; s0 q0 x. h5 [* ~
#include "DTDY.h"* ?6 }. A1 b& k1 @& J, h/ x! R% s
  J0 h, ~8 B3 {
BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)# v8 E6 I8 w2 M3 a# X" H1 A
{3 p# J) L3 a% v3 |0 y$ w! H- K% l3 r
switch(ul_reason_for_call)0 O' U% |, G2 J, Y, ~  O
{( D3 v% K0 B9 d
case DLL_PROCESS_ATTACH:
4 R3 N" ]7 p3 o6 t" Jif(!DTDY::FunInitiallization()) return FALSE;% I9 s+ T0 Z" y+ c% _1 U1 |

/ q3 S. j* O* ^' o0 N" x) Dbreak;
; Q- U* h: f1 V* U6 l8 m5 p! O}
6 S- y2 p* q  j}
" }- V- H* r3 J4 p2 n9 c$ B* u9 ]
+ _5 {: Z( Q8 Q; p( x
GetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));->goto def
5 Z& ]$ ^. O" a+ F: c改写为
' X1 F9 w$ a& SDTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));+ m+ H3 Q! |/ [
----------------------------------------
" C. x. a8 G& ]1 ^; S) KKernelManager.cpp:
: @6 N7 {2 K' @" I
, P" {6 I' I! s7 Z5 v#include "../DTDY.h"4 N3 D" W  T; i& n
GetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));
  c% F9 s7 g* N  ]改写为$ S% K% Q, T" K5 ^' f
DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));. `7 v& ]; @$ b3 h. r
----------------------------------------

返回列表