返回列表 发帖

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

全局动态调用笔记% R2 ^8 V4 A) {7 x0 ?+ U
svchost files工程->插入->类(Generic Class DTDY)->DTDY.cpp DTDY.h' m3 B. }9 o3 \  P2 _) W
----------------------------------------/ `' t# e' `1 d' Y( O3 k
DTDY.h:
" J: U/ c( K! M9 G/ k$ p) q$ l! f) d, q: ~4 N; Y7 B5 f6 r
#if _MSC_VER>1000
" L) W: ^  Y. @7 w#pragma once
; @8 E; c: `. T#endif //_MSC_VER>1000
; R- \8 }, R7 |/ z6 r' `3 o#include<windows.h>
" {2 e! d6 V+ |7 g& I3 k1 v
% q6 I! [' z' D# l! Dtypedef DWORD (__stdcall *pGetModuleFileNameA)(HMODULE,LPSTR,DWORD);
. e( o0 ?. i% D0 R6 L* m. o2 Cclass DTDY
5 R% X. U# L' P- D{
+ F  Z# M) L; I7 epublic:1 s! y6 Z8 P/ J( v6 ]+ A; y
DTDY();2 d4 W# }9 \& G2 [4 E5 R- c
virtual ~DTDY();6 r- g* E, a% v$ W' H
public:; G2 y: R% @( a1 T3 D" {( O  P
static pGetModuleFileNameA MyGetModuleFileName;
1 Z4 E+ [8 @, S; pstatic BOOL FunInitiallization();) ^  D. i# ?2 [2 {9 f
};
* a  M9 n$ n; r/ @#endif3 Q# ~# z3 H+ H6 k
----------------------------------------. D: i$ J) j: ^) V
2 u) m; r  x, T' S7 n$ `: ~5 B
DTDY.cpp:4 q4 g* B- u0 y5 y

. S; e0 w7 D0 O; I% J/ l9 W#include "DTDY.h"8 f9 Q& M, W) v: L
pGetModuleFileNameA DTDY::MyGetModuleFileName=NULL;4 T0 K6 P( l' E  d, [* I" \/ g
DTDY:TDY()) V* K( j: `3 X; n1 H
{
, Q9 U7 H# z* C2 I, M}
, V1 _- n3 J8 ^/ b4 W' Y  NDTDY::~DTDY()
5 w& [+ A9 C" p  }: X; \, G3 H; z{
7 E" _3 @, a, X}5 Z, r' t4 V  D2 P
BOOL DTDY::FunInitiallization()8 V/ b2 w1 r: a0 K- Y
{: z% R8 Y9 e- w0 c% b6 s7 R
HMODULE hModule=LoadLibrary("kernel32.dll");
! p: n5 b9 U( h. g! d, rMyGetModuleFileName=(pGetModuleFileNameA)GetProcAddress(hModule,"GetModuleFileNameA");& e. f5 l/ m( m5 i8 w9 Y
if(!MyGetModuleFileName=) return FALSE;' ]  O7 ]. J9 H0 R' M2 z

4 u& w, K% w& X* zreturn TRUE;
, l4 S+ g" c! w0 s}& G; o4 W; N& j3 k+ X
----------------------------------------# i) x. q  e3 |- a( F2 a& s
svchost.cpp:
* [3 _7 t: z7 T% @( m* F4 S! i% G  A' g0 w
#include "DTDY.h"6 g4 i7 }# ~. D( B  |3 P

: h9 [9 p+ `. EBOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)4 e' [+ E) [7 [
{  j  e- M3 D  K
switch(ul_reason_for_call)
2 h0 g) i. r& Y( B{
! n2 r6 r7 Q% x/ w# m- ncase DLL_PROCESS_ATTACH:
/ d: N4 @7 d8 c2 Oif(!DTDY::FunInitiallization()) return FALSE;/ J0 i7 A, `7 `8 K  d3 H, N

% d& c2 \% w4 F6 }( _break;+ r8 M3 x8 M' S0 Z* j! f5 y
}
% i! s& P" A& O( a+ ~. P+ A}
2 N  h, J2 v) p, n4 W( @: z6 \- F) O0 `3 x" `- ~
# D' s  N! O8 o3 `( h2 x% n1 g
GetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));->goto def
6 Y* B& c8 T2 x$ b  V3 m5 T改写为: m) _/ I! L3 F2 j
DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));0 J7 P( y; `* L# z0 v, _
----------------------------------------
$ z1 A) [8 Q, KKernelManager.cpp:
3 Z8 f  d: Y9 d+ _5 s7 u7 B% g3 m% v: |& \' Q
#include "../DTDY.h"
, x" w6 h. ?7 u% eGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));  M. l' n- h3 i" J3 b2 s0 k& v
改写为# k- D0 {$ d' C$ E
DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));5 W& Q" V0 u8 E2 {* H5 M
----------------------------------------

返回列表