返回列表 发帖

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

全局动态调用笔记) T* [. P- }4 p( ^4 W
svchost files工程->插入->类(Generic Class DTDY)->DTDY.cpp DTDY.h* V, c( r  ^4 g- ^5 {; I# X" [
----------------------------------------
) n. t0 T" J( t/ l& u' tDTDY.h:* G! K. s& y+ e6 _
, g# t9 X4 K8 Y+ E$ ]9 }
#if _MSC_VER>1000$ R1 ]( A( c4 {1 b, H0 B( `4 v
#pragma once: z% d( g5 w' j! P' [& z
#endif //_MSC_VER>1000$ O  F! M6 g7 t) c. Q6 ~0 l
#include<windows.h>2 [  r1 r/ Y3 ^. C
0 D$ M! `& R; v* S3 z5 d  E
typedef DWORD (__stdcall *pGetModuleFileNameA)(HMODULE,LPSTR,DWORD);  ?1 K7 j. t0 p& O: p7 O9 C
class DTDY
( O% ?4 I4 d/ z. i  {( @{
4 Y0 F7 o6 v& M$ apublic:
9 I5 c2 [/ y; U( yDTDY();
- W$ M7 y% U1 I( q1 Y8 nvirtual ~DTDY();# ?3 q+ A: T$ K7 e6 M) L
public:
+ @' Q% f7 A& x* Rstatic pGetModuleFileNameA MyGetModuleFileName;, l+ _9 G9 b* v& _1 E' z
static BOOL FunInitiallization();5 d2 I+ z  B# ~9 b
};7 c9 O6 C  F% T( A8 K' g
#endif' l/ ^7 H! p8 t  T3 j  V( _
----------------------------------------
! I- B7 @( d3 [1 L5 r% K
, n' l' z3 g$ j+ C+ D4 p( W1 ~DTDY.cpp:, |- t9 U% w! K' V# k' J9 |' y5 U
* T% `. j3 W' y6 D. O5 l
#include "DTDY.h"
0 x5 u# _. h+ Y- j5 [+ Y2 LpGetModuleFileNameA DTDY::MyGetModuleFileName=NULL;
4 m% j2 M5 g& H  k* I5 JDTDY:TDY()) C$ X/ B; n! b
{
) e7 }1 w3 f) K" e, s}6 P# E2 m4 c  N8 x7 I% Z# h, w* m
DTDY::~DTDY()
$ Q$ W$ G, e9 `1 b" s{& M2 e/ Z8 i9 v
}+ B( l6 B3 h4 R1 P
BOOL DTDY::FunInitiallization()
* d; o' D: n* W& P{% q" y1 ~8 U/ b; V& c
HMODULE hModule=LoadLibrary("kernel32.dll");8 r* b; I+ _6 |' {8 |
MyGetModuleFileName=(pGetModuleFileNameA)GetProcAddress(hModule,"GetModuleFileNameA");* u) u: @# r  \; o; X; H/ v& s
if(!MyGetModuleFileName=) return FALSE;1 c. S; r: L4 K, Q
2 L- H. }0 [- E; l# I) q
return TRUE;' Y; O, l5 C+ A% Z4 F+ C. [3 I% U
}8 N9 X, H; [$ m4 b: I  V9 g* n
----------------------------------------/ K' l0 _# F' y# T
svchost.cpp:
* ?7 \% u" o5 Q- `, H/ B; _
# S/ r$ {5 ^0 M" J0 q4 a#include "DTDY.h"% y& B9 c) t) w
3 ], t& [% H+ J. o
BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved), W6 ?& K: o& V% ]3 Z
{
8 w' i" U1 O5 c+ Tswitch(ul_reason_for_call)
& y. P4 \7 l9 [) i5 m: q6 N{/ ^* e% O; N9 }7 g8 M; W0 b
case DLL_PROCESS_ATTACH:- j* F2 D8 R7 |0 A, G8 X8 d0 M! O
if(!DTDY::FunInitiallization()) return FALSE;8 H# Y7 D+ ^1 R
- x) ~7 b2 ~' ]
break;
/ S( s$ i) O! D# X, S3 b}0 W' c; L" \6 B" ?( q+ X
}
( p! V8 A2 c; X* P$ j
1 o' O/ h( z& j: x3 K7 o. v# a1 O( [0 z6 ^$ I) p
GetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));->goto def4 A, ^/ U- K0 L1 H
改写为. n) ~7 e1 m( {
DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));, G: a7 |& @7 y9 G8 C
----------------------------------------
& v& Q* O3 }" _KernelManager.cpp:
8 {  D( C! V* A9 M  }( |0 o5 Z5 R( S. H5 f5 ~7 w2 H! _0 s' D
#include "../DTDY.h"- y! [. `! D. A. U# l7 k5 B! X
GetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));' o3 E, ?6 ^2 v: i% q
改写为+ ?" O- [, V: J9 s! `
DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));. e5 y, ]9 K; n9 Y- ]  U4 D: M7 a5 K* W$ U
----------------------------------------

返回列表