返回列表 发帖

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

全局动态调用笔记
, T3 F( |0 |3 d/ msvchost files工程->插入->类(Generic Class DTDY)->DTDY.cpp DTDY.h/ ]3 s1 T( x. ~7 j& |
----------------------------------------
' s! J1 X) Y; v& jDTDY.h:
8 V3 c1 Q& `9 G& M0 Y7 Y- k4 @' U  O, J8 s2 `
#if _MSC_VER>1000: u& |" }+ o* J* n: k
#pragma once
& L! N+ U' ~0 i#endif //_MSC_VER>10002 m) Z( R1 A( |& |! s! p
#include<windows.h>
& {! C& O- M: u5 I
7 ~0 K* A( @) `& W# f: A& Y2 Etypedef DWORD (__stdcall *pGetModuleFileNameA)(HMODULE,LPSTR,DWORD);' [+ ~) [, {: f
class DTDY8 G4 ]; A$ M3 Q
{# Y5 E: r* q3 ?7 u3 i
public:* p6 f0 L% @8 Z; J: R6 _6 L) x1 |+ v# H
DTDY();
2 F# F) q" v7 @$ tvirtual ~DTDY();7 Z5 x0 x: K+ G  l  V: ~/ a
public:
' N% _. s% B7 lstatic pGetModuleFileNameA MyGetModuleFileName;$ d2 K' u3 ~7 z+ Q; d* u1 S
static BOOL FunInitiallization();& ]3 M+ r  y  c( O1 m
};
3 l- i: f+ n* `6 }" u6 i#endif7 v6 a' G$ i3 g7 E/ D7 H4 Y2 G
----------------------------------------
" i* ^- P' m# {2 T$ p+ w( u2 z1 P; Y* G
DTDY.cpp:
1 |/ e9 m) C5 g6 O
1 y* v, V* p" y) `9 ]) k#include "DTDY.h") ~+ R4 }% M- Z# g5 h! k5 ~/ [, C
pGetModuleFileNameA DTDY::MyGetModuleFileName=NULL;& n# r/ h3 ?7 h6 @* b: K7 {
DTDY:TDY()
9 A2 e/ @) Z! H- X! x9 w2 e: X! s{: w, X6 K& c# Q: w+ a
}
6 L. f. `0 z1 s" ~8 r& _DTDY::~DTDY()
& k. g. h) `& M: P6 n! ~{
, D* T& I( X! R6 w8 ^, r7 r}
* [9 N; o, z8 i1 yBOOL DTDY::FunInitiallization()- d3 f  c- q: a, d3 v' z
{; j( S9 z" E! X, D" k6 y
HMODULE hModule=LoadLibrary("kernel32.dll");
% P+ S# w/ f$ [5 k0 ], \! MMyGetModuleFileName=(pGetModuleFileNameA)GetProcAddress(hModule,"GetModuleFileNameA");* r7 l# G' ^) A% K. b
if(!MyGetModuleFileName=) return FALSE;
- x& m8 B7 p. @' v8 `) `
6 q6 {# _  Z3 t4 v" d  ~return TRUE;
4 _' v' e' g, O' j}  Y' h  _7 e! }0 E( Q) u: R
----------------------------------------' w' s$ ]( w6 n; i8 u
svchost.cpp:& }9 i& k" w  m7 }& H8 l+ ^

* o; D5 @, {* A: U" q/ }2 c#include "DTDY.h"
2 P2 ^, R: m: \, f3 c: P1 ]4 \: A5 C6 W  [: Z2 N( g& I$ W6 b
BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)* Y# r/ M% o" W2 e& I2 s. t
{
  m0 h' h: z- c3 ]$ mswitch(ul_reason_for_call)
0 c1 f$ F( f" q  N1 Z{
+ a4 a  d: r5 z' V$ Fcase DLL_PROCESS_ATTACH:
* u( _1 Q* V) x1 R& B- j7 wif(!DTDY::FunInitiallization()) return FALSE;
# u8 @* i/ Q, r1 ?  F' _# h% J$ S: M  [
break;
, k$ g  h7 L2 g: h0 O' X; Q- P% T- [}
) u; H1 {6 m4 d4 C6 A- Z}
2 L3 H! |  M( q; J4 X( A$ n: B4 J3 J$ ]. d7 z
0 g4 x5 d0 b' X; l
GetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));->goto def9 A; p1 ?  E& b* Q& ?+ O
改写为+ ~( Y) _1 y2 m, C3 |1 D
DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));) B( U+ E$ z6 U0 [, m/ v
----------------------------------------
$ b8 i  g+ V$ X: M7 IKernelManager.cpp:7 y& S( e" f7 W& I) C. t
1 G+ g9 c) C( L2 W/ B4 d! _8 U- e. r, \
#include "../DTDY.h"
% {! E$ }+ p, UGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));. D6 o2 k/ T5 @7 {# C) h7 v4 j2 e
改写为
  E. c7 S) S* b! \9 T& x5 rDTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));5 ?1 {' v; R7 D7 t( Q# ?0 U
----------------------------------------

返回列表