返回列表 发帖

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

全局动态调用笔记/ s" D9 b7 `7 o( v: K
svchost files工程->插入->类(Generic Class DTDY)->DTDY.cpp DTDY.h
, e  [2 v! _, `5 b3 Z( x" L+ X----------------------------------------
& M" B5 D9 Y! h# z% z; WDTDY.h:
( \0 `8 L$ _) A. p0 y- d  n- J. _6 O; t
#if _MSC_VER>1000; E9 t5 |" s: ^) ?& v, H4 K& p" R+ p) c
#pragma once
; E) Y7 N" e( a#endif //_MSC_VER>1000
" D) |5 [$ c: v! ?( {#include<windows.h>; k1 e  Y. q" o
- H2 l% {6 C- t2 X, R4 s
typedef DWORD (__stdcall *pGetModuleFileNameA)(HMODULE,LPSTR,DWORD);
! \; }) P8 H$ |% b* Cclass DTDY! k5 p8 q$ N2 g  b
{
/ P# ?+ y- D4 B7 h- upublic:! e) j' z. A( {& b/ A
DTDY();
7 h$ U0 P7 p* X% V4 @# vvirtual ~DTDY();
, d! L( [* V. G- H3 ^public:
8 g, g4 Y- N; ostatic pGetModuleFileNameA MyGetModuleFileName;9 k. D9 e" F3 \9 c. H
static BOOL FunInitiallization();- M8 U% u" [' ]/ F' ~8 L
};
7 m4 s( L9 t7 J7 _9 U- C) ~- E) R#endif% c1 L9 B) T- Q: D/ u
----------------------------------------# Z/ n- I6 p/ J+ D+ ~
6 u2 K' S, t0 V! y
DTDY.cpp:( Y$ _* b; A) `$ q) Z
, C: _* r- x% M
#include "DTDY.h"
) N* f. G* c3 @* G5 {  spGetModuleFileNameA DTDY::MyGetModuleFileName=NULL;* W% b- {( G" N0 B$ m) o; R- k
DTDY:TDY()
, g0 C3 x+ v* ^5 D8 W: b/ T/ k9 O{. }+ i" a8 p8 J- G
}7 X1 c8 I9 Z3 |8 ?+ ~, ?8 d
DTDY::~DTDY(). I/ q+ T9 h! l7 Y
{
7 ^# c6 P$ ]0 G}
, Z1 Q0 i% v+ t) w: oBOOL DTDY::FunInitiallization()
8 ~. H8 x2 c2 d% I{* f& E$ F2 Z, D
HMODULE hModule=LoadLibrary("kernel32.dll");
  D  D% k% h5 h( _MyGetModuleFileName=(pGetModuleFileNameA)GetProcAddress(hModule,"GetModuleFileNameA");
9 `, X, U  V/ bif(!MyGetModuleFileName=) return FALSE;& z3 O# p4 I& _

! N1 G/ `7 E  S) b: G& Jreturn TRUE;
' ?+ x* h/ g+ y4 s" F/ D' R* t}
0 |# F7 j' X6 R8 r3 s, l0 R: L----------------------------------------4 b( r! F% ^0 C8 t' D/ u: M" i
svchost.cpp:$ y) m' _5 \/ F3 x4 A6 R0 N
1 u/ G' I& m! K  ^; J
#include "DTDY.h"
+ U. }" ~2 j2 a1 V' e. n
% n6 b6 {9 G2 T* r1 V. y- k" pBOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
; w- r- I  W% a{
# N4 b' J& B6 V# m$ D* o8 v# x9 l0 Dswitch(ul_reason_for_call)# N& D; k! u- Q# f6 g' m. H& U
{; a) l* ]# o" m9 N
case DLL_PROCESS_ATTACH:9 Z! e* ^' |3 N7 {7 B$ h+ V' O
if(!DTDY::FunInitiallization()) return FALSE;# `" l" h" E. R+ Q& n

  Z3 R  W& O5 ~8 G! V% S' f/ F/ ebreak;
6 N& ^8 A# ]& H}
! n! d) L( o9 u: j0 W# p, x}
1 J2 f3 @, `* R5 x/ b" K* J/ @! I) f5 ]5 Q% A( t
5 X; G7 I# G5 B7 U8 c
GetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));->goto def& \4 w) u# b' l" u
改写为# i7 y5 }6 r! I0 l
DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));1 N8 J+ |, d, n; p7 P
----------------------------------------
: D1 \- {  K7 P3 L8 nKernelManager.cpp:
9 U9 d" T* k+ E: }, B5 y- o3 f; i- ^5 k! t; d
#include "../DTDY.h"
# _5 c* q4 W) T' ^GetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));5 A  d; @5 M/ P; X& E& L
改写为3 f6 E  I# |2 c" b, `
DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));2 y' z" _) R1 j* C& r
----------------------------------------

返回列表