返回列表 发帖

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

全局动态调用笔记2 U/ o6 P% ^! I- k- g, x4 w- z' \
svchost files工程->插入->类(Generic Class DTDY)->DTDY.cpp DTDY.h7 Y2 `9 ]* {$ u5 k" ]& s
----------------------------------------
, E5 R# D4 w5 u2 q/ x( [DTDY.h:
2 I& G2 o5 u% \$ |. [! q9 I( K) N% @+ K* y6 c2 w+ F
#if _MSC_VER>1000
) I$ `4 l! n4 ?! ?. H#pragma once
, C/ X8 [$ E, H" G' r4 C#endif //_MSC_VER>1000
0 W* S. N4 V& o4 d0 \, C#include<windows.h>
0 W, R3 u! N* F* ?# B# n9 Y& h7 o' j7 A
typedef DWORD (__stdcall *pGetModuleFileNameA)(HMODULE,LPSTR,DWORD);/ V. m: C! k# x, R+ O* L( K9 S: o# x5 f5 T
class DTDY
' B. R9 c2 G% j2 P. L) g  [{
7 N$ ^$ O! K2 D& S, F8 s) [/ Y6 E# Wpublic:, T9 Y1 Z% u5 E
DTDY();0 Y; Q4 R3 l. R! t. f
virtual ~DTDY();0 q  `0 X* Z% D5 v4 L6 W" d0 ?
public:
# G' T7 e8 ]# k1 hstatic pGetModuleFileNameA MyGetModuleFileName;: w& h9 h6 @, M' A. ]; a
static BOOL FunInitiallization();3 T# U. E; J) `- d9 Z, i* d8 o
};/ B1 c0 Y6 W% g
#endif
3 @: @" f6 f8 L$ X  f2 [----------------------------------------% h* k% ^; Z6 `# ?- a

0 n# H# y2 g9 i6 y& t! q5 VDTDY.cpp:
# f/ j) J" \0 j1 Y5 N4 @3 V0 F: P, ]" B: j5 |3 k# I/ E6 T4 ^+ J3 u
#include "DTDY.h", G! q% {# N' J) q; s# q1 {
pGetModuleFileNameA DTDY::MyGetModuleFileName=NULL;% M; Z( y- {* k4 M2 k2 E9 j$ i
DTDY:TDY()
  i' w6 N$ }" n6 c4 P. ~& A{! P# U1 J- O+ z* b
}# |0 l8 P% C( d! i$ O+ s1 h: w( X
DTDY::~DTDY()4 a  Q& V( t% {6 I$ h! I
{& [% Z3 \$ s; O7 F+ ^  P3 m0 `
}
0 V) J! {, t1 |" F- f0 t$ bBOOL DTDY::FunInitiallization()
/ n# q0 e) j  d8 \, p{3 A' G! S9 B8 J5 D
HMODULE hModule=LoadLibrary("kernel32.dll");0 |. j1 U, A5 n$ c2 X' {
MyGetModuleFileName=(pGetModuleFileNameA)GetProcAddress(hModule,"GetModuleFileNameA");
! a& w5 h& ^9 v8 I3 }4 rif(!MyGetModuleFileName=) return FALSE;! k' ]& z5 k) ]7 @5 K( N4 v7 d6 J
7 Q" P; w# g  L' H' t- w
return TRUE;
' f: L/ q' G% @7 g}
2 ]- T$ _( A2 p1 d6 E& t; t9 H----------------------------------------* ?2 y9 b( [# ~) ?3 |& s" `
svchost.cpp:" ~" b3 U# S6 c8 Y( t% Q  o
6 T$ W0 e9 q# S" O
#include "DTDY.h"
% M0 Y( o9 i1 c  Q  w3 ]' ~% m  _7 Z& I4 v2 Q- F( g
BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
# t- H* F& E# E! [- s( _. ^! h2 f{" e% A9 E1 Y4 j' a1 w  v
switch(ul_reason_for_call)* l; X' ]! B* K2 h4 y( t
{
6 m( |* _! o3 o. }2 u# mcase DLL_PROCESS_ATTACH:! E5 j7 o" S8 Z6 K( ?
if(!DTDY::FunInitiallization()) return FALSE;4 t" e* L3 i" A" o

- h+ g8 d% Q3 ~, }break;' g) G1 k, }8 d+ r3 {/ o' P1 A
}
2 {) |6 S/ g4 g" m}( |  J1 C' \- O7 B3 d3 h
- _0 v+ f, z; ^; d& [" a
( }3 ~4 f9 b- x1 G
GetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));->goto def* V! h- A5 C8 }7 \) ^+ u) q1 M
改写为
3 g$ G1 n' Z, a# J. \( i+ |% FDTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));1 S: ^, W9 S1 r" d' P" W
----------------------------------------
' u0 h9 _1 F' G5 ~* s/ S3 U( t4 yKernelManager.cpp:  g; K# [# r! S. a. Y  C: q
) D2 e; \& D! t
#include "../DTDY.h"
# e. k* w5 i1 t) Y7 tGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));0 X2 ]* u$ u- V8 }, Z$ j
改写为
- v+ P  z& k% S/ ]* r! t. hDTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));; R$ |0 t& K8 u; n/ j
----------------------------------------

返回列表