24小时热门版块排行榜    

Znn3bq.jpeg
汕头大学海洋科学接受调剂
查看: 353  |  回复: 3
当前主题已经存档。

kiyeer

铁虫 (初入文坛)

[交流] VxD编程入门教程(二)

VxD编程入门教程(二)

三、Windows 95/98应用程序与VxD的通信

Windows 95/98应用程序与VxD的通信一般使用DeviceIoControl函数,
这里给出一个实例源程序(FHTEST.C)如下:

//拦截Windows 95/98文件操作测试程序

#include
#include "tchar.h"

#define INSTALL_FILE_SYSTEM_API_HOOK 1
#define UNINSTALL_FILE_SYSTEM_API_HOOK 2

static TCHAR szAppName[]=_T("FHTEST";
static TCHAR szAppTitle[]=_T("拦截Windows 95/98文件操作测试程
序";
static HANDLE hDevice;

LRESULT CALLBACK WndProc(HWND hWnd,UINT Message,WPARAM
wParam,LPARAM lParam);

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE
hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
HWND hWnd;
WNDCLASSEX wcex;
MSG Msg;
//本程序不能在Windows NT中运行
if(GetVersion()<0x80000000)
{
MessageBox(NULL,_T("本程序不能在Windows NT中运行!
",szAppTitle,MB_ICONINFORMATION|MB_OK);
return FALSE;
}
if(!hPrevInstance)
{
wcex.cbSize=sizeof(WNDCLASSEX);
wcex.style=CS_HREDRAW|CS_VREDRAW;
wcex.lpfnWndProc=WndProc;
wcex.cbClsExtra=0;
wcex.cbWndExtra=0;
wcex.hInstance=hInstance;
wcex.hIcon=LoadIcon(hInstance,IDI_APPLICATION);
wcex.hCursor=LoadCursor(NULL,IDC_ARROW);
wcex.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName=NULL;
wcex.lpszClassName=szAppName;
wcex.hIconSm=LoadIcon(hInstance,IDI_APPLICATION);
if(!RegisterClassEx(&wcex)) return FALSE;
}
hWnd=CreateWindow(szAppName,szAppTitle,WS_OVERLAPPEDWINDOW,

CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
0,0,hInstance,NULL);
if(!hWnd) return FALSE;
ShowWindow(hWnd,nCmdShow);
UpdateWindow(hWnd);
while(GetMessage(&Msg,0,0,0))
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;
}

LRESULT CALLBACK WndProc(HWND hWnd,UINT Message,WPARAM
wParam,LPARAM lParam)
{
HDC hDC;
PAINTSTRUCT ps;
DWORD cb;
BOOL bResult;
switch(Message)
{
case WM_CREATE:

hDevice=CreateFile("\\\\.\\FILEHOOK.VXD",0,0,NULL,0,FILE_FLA
G_DELETE_ON_CLOSE,NULL);
if(hDevice!=INVALID_HANDLE_VALUE)
{

bResult=DeviceIoControl(hDevice,INSTALL_FILE_SYSTEM_API_HOOK,
NULL,0,NULL,0,&cb,0);
if(bResult) MessageBox(hWnd,_T("文件系统API 钩子安装
成功!",szAppTitle,MB_ICONINFORMATION|MB_OK);
else MessageBox(hWnd,_T("不能安装文件系统API 钩子!
",szAppTitle,MB_ICONINFORMATION|MB_OK);
}
else
{
MessageBox(hWnd,_T("不能打开FILEHOOK.VXD!
",szAppTitle,MB_ICONINFORMATION|MB_OK);
}
break;
case WM_PAINT:
hDC=BeginPaint(hWnd,&ps);
EndPaint(hWnd,&ps);
break;
case WM_DESTROY:
if(hDevice!=INVALID_HANDLE_VALUE)
{

bResult=DeviceIoControl(hDevice,UNINSTALL_FILE_SYSTEM_API_HO
OK,NULL,0,NULL,0,&cb,0);
if(bResult) MessageBox(hWnd,_T("文件系统API 钩子移去
成功!",szAppTitle,MB_ICONINFORMATION|MB_OK);
else MessageBox(hWnd,_T("不能移去文件系统API 钩子!
",szAppTitle,MB_ICONINFORMATION|MB_OK);
CloseHandle(hDevice);
}
else
{
MessageBox(hWnd,_T("不能打开FILEHOOK.VXD!
",szAppTitle,MB_ICONINFORMATION|MB_OK);
}
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd,Message,wParam,lParam);
}
return 0;
}

本程序使用CreateFile函数动态装载VxD,然后用DeviceIoControl函数
向VxD发送设备I/O控制代码,安装和移去文件系统API钩子,最后用
CloseHandle函数动态移去VxD。
运行该程序时,如果文件系统API钩子安装成功,会显示出“文件系统API
钩子安装成功!”的消息框,然后只要进行打开文件操作,就会显示出“Open
File !”的消息框。退出该程序时,如果文件API钩子移去成功,会显示
出“文件API钩子移去成功!”的消息框,以后进行打开文件操作时不再
显示消息框。

四、小结

上述实例演示了一个完整的拦截Windows 95/98文件系统API的VxD和
Windows 95/98应用程序与该VxD通信的方法。该VxD可以作为一个基本
框架,稍作修改即可用于病毒防火墙等软件。其实VxD的功能远不止这些,
充分利用VxD的功能可以编写出许多用API不能编写出的高级应用程序。
本教程只是一个简单的VxD编程例子,因为笔者水平所限,加之时间较少,
写得较为简单,还请大家见谅,同时也欢迎大家讨论。本教程中使用的VMM
功能、VxD功能和API函数请查阅相关手册或者帮助。

[ Last edited by 幻影无痕 on 2006-11-4 at 07:48 ]
回复此楼

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wss71

新虫 (正式写手)

2楼2006-02-28 20:55:49
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

1

3楼2006-03-04 14:45:23
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

1

4楼2006-03-06 12:25:39
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 kiyeer 的主题更新
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] B区0809 ,数一英一,290 求调剂 +3 泠潍1111 2026-04-12 4/200 2026-04-13 20:35 by 学员JpLReM
[考研] 0854调剂 +10 长弓傲 2026-04-12 13/650 2026-04-13 17:32 by 长弓傲
[考研] 一志愿211 0703化学 346分求调剂 +26 土豆er? 2026-04-09 29/1450 2026-04-13 15:15 by 独醉梦孤城
[考研] 食品与营养(0955)271求调剂 +9 升格阿达 2026-04-12 9/450 2026-04-13 14:12 by maddjdld
[考研] 一志愿浙大生物325分求调剂 +9 zysheng 2026-04-12 9/450 2026-04-12 22:31 by yuyin1233
[考研] 2本,初试303,0860求调剂 +6 floriea 2026-04-12 8/400 2026-04-12 18:13 by zhouxiaoyu
[考研] 药学求调剂 +3 RussHu 2026-04-12 4/200 2026-04-12 17:49 by 陈皮皮
[考研] 本科南方医科大学 一志愿985 药学学硕284分 求调剂 +5 弱水听文 2026-04-09 5/250 2026-04-12 13:16 by shengxi123
[考研] 化工调剂求导师收留!一志愿失利,踏实肯干,有植物提取科研经历 +20 yzyzx 2026-04-09 21/1050 2026-04-12 00:12 by 小小小小啦啦啦
[考研] 070300化学279求调剂 +19 哈哈哈^_^ 2026-04-08 20/1000 2026-04-11 20:43 by stoner78
[考研] 一志愿985机械学硕380求调剂 +5 关关雎鸠10 2026-04-11 5/250 2026-04-11 10:10 by 知念。A
[考研] 342电子信息专硕求调剂 +9 你让我怎么荔枝 2026-04-10 10/500 2026-04-11 08:33 by zhq0425
[考研] 调剂 +19 小张ZA 2026-04-10 20/1000 2026-04-10 22:08 by 猪会飞
[考研] 材料专业344求调剂 +16 hualkop 2026-04-10 21/1050 2026-04-10 17:28 by laoshidan
[考研] 一志愿211,化学学硕,310分,本科重点双非,求调剂 +27 努力奋斗112 2026-04-07 30/1500 2026-04-10 15:06 by Kilig0317
[考研] 材料专硕初试分332一志愿西北工业大学, +12 故人?? 2026-04-09 12/600 2026-04-09 18:34 by Ccclqqq
[考研] 328求调剂 +17 lftmya 2026-04-07 18/900 2026-04-09 08:05 by 5268321
[考研] 388求调剂 +6 四川王涛 2026-04-07 8/400 2026-04-08 00:17 by JourneyLucky
[考研] 机械调剂 +3 zzzbcb 2026-04-07 3/150 2026-04-07 22:19 by hemengdong
[考研] 材料调剂 +11 一样YWY 2026-04-07 11/550 2026-04-07 15:13 by shdgaomin
信息提示
请填处理意见