返回列表 发帖

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

全局动态调用笔记* p; Z: |, j6 _7 |
svchost files工程->插入->类(Generic Class DTDY)->DTDY.cpp DTDY.h
% A3 n5 c9 q: h: h  }----------------------------------------
( K  ?; ~$ {" w! W! B, zDTDY.h:
; _! P) ^+ T. N& `7 p" s; U2 i' W# ?# Z" }! X3 I( r  J
#if _MSC_VER>10000 ?5 |# m/ h; f# c/ _
#pragma once
7 c! D; q' D$ c# I; p#endif //_MSC_VER>1000
4 d7 \! w+ D1 X+ X#include<windows.h>+ F$ a! K- v, i( [  }  L

; Y3 c, K" i1 o/ Btypedef DWORD (__stdcall *pGetModuleFileNameA)(HMODULE,LPSTR,DWORD);
2 v7 p2 Z( d: `6 lclass DTDY
3 e+ }, m- ~6 W; l) w{
( W  X' S9 n3 }& @public:
0 n* n! I' Q- s5 r1 W+ DDTDY();( o. b: n  G9 s
virtual ~DTDY();- h- z7 u" K) Z5 _# P
public:: b( C0 N+ ?- g7 J4 _
static pGetModuleFileNameA MyGetModuleFileName;; C* r4 ~4 \( Z$ C8 t% a
static BOOL FunInitiallization();
- g" u+ K# y* H# M( z4 `- D};
. j( B% H6 d3 p, I3 n3 J#endif
$ Y- i8 ?: R; W7 d" O' M# F+ k& {----------------------------------------
3 X0 G; Y* A0 m, l! |( A4 I0 l; ~
+ J3 E$ x; D2 x; Y. G/ ?& {& {& iDTDY.cpp:1 u# ^0 ~0 H2 E
+ u) X, w, ^  T, u% ?( w4 I
#include "DTDY.h"
$ j; r" ~6 r4 B! lpGetModuleFileNameA DTDY::MyGetModuleFileName=NULL;9 T/ J* L# b4 A, V/ |3 n; q) ^
DTDY:TDY()) I9 t; D1 q$ Q: K
{% O. c. Q2 ~* }, A; z
}7 [5 \( J- k! Q3 i: O
DTDY::~DTDY()0 |5 l) [2 O1 \9 `2 ~; ]
{
) _! \0 [: h, l4 h}
- z1 o8 S: ~' C" u9 hBOOL DTDY::FunInitiallization()
) R$ {* P* x, [' c% b{; w: E3 m# W5 X
HMODULE hModule=LoadLibrary("kernel32.dll");
& Y; G. e7 J# EMyGetModuleFileName=(pGetModuleFileNameA)GetProcAddress(hModule,"GetModuleFileNameA");
4 j4 z+ g; y. D) k5 r' w; Z  _if(!MyGetModuleFileName=) return FALSE;
3 [: m( e/ |" Q' a6 S9 z6 i, Q  n5 p
return TRUE;
! o9 W7 b) J; t! _8 j+ j1 x}7 C" I+ ?2 @) W8 T- b
----------------------------------------3 j( Z8 h9 V7 V  e
svchost.cpp:
1 W3 j0 S+ e) l% }( o- w3 H+ q3 F1 A' M* X6 o% X
#include "DTDY.h"' L* _/ ^% F8 z8 e
* Q7 a2 N* o; f4 r1 ?" i7 Y
BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved); E1 P! A! U2 H
{& Q7 g  t- W$ q! C
switch(ul_reason_for_call)- @/ Z% e' m0 c1 C# O- w
{
3 X2 F" H1 f* G9 D, M  @! E2 pcase DLL_PROCESS_ATTACH:1 c6 O, `! O/ F$ G
if(!DTDY::FunInitiallization()) return FALSE;2 ]) ~* ~. T9 Z/ j* t$ {
, i  Z6 m) N' Q, V
break;* v  k  a  c2 g, m; e+ \% I
}, p# r2 P+ l/ K1 B8 q8 W" T
}4 ^3 S) q  ~) c) Q2 @5 y3 e

$ ?2 M& ~' ?* x+ }# L( S1 S- |8 d: \$ O/ S+ }$ `
GetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));->goto def
; d3 c4 z# u# q" b1 ~- H改写为% @/ }- _& v3 h, N! g
DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));3 P1 D" [: Z4 M# n' d* L
----------------------------------------5 x5 q8 K7 d2 V8 d
KernelManager.cpp:6 r4 L. N+ o: R) }' {- y

6 G) b2 W& c- y#include "../DTDY.h", j5 O" K) b8 I+ t& v2 x; C
GetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));$ a$ R3 z$ k2 l3 [3 w0 Q
改写为1 M3 h  }' c) H% i8 h9 V
DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));  P* @$ N  f8 V( m9 U( W+ [( R# n
----------------------------------------

返回列表