VxD编程入门教程(2)

2016-02-19 16:41 7 1 收藏

图老师设计创意栏目是一个分享最好最实用的教程的社区,我们拥有最用心的各种教程,今天就给大家分享VxD编程入门教程(2)的教程,热爱PS的朋友们快点看过来吧!

【 tulaoshi.com - 编程语言 】

三、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_FLAG_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_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);
  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函数请查阅相关手册或者帮助。

来源:http://www.tulaoshi.com/n/20160219/1612762.html

延伸阅读
第2章:安装指南 2.1 安装前的准备 1、收集系统资料:为了能够顺利安装和设置Linux系统,你必须将以下资料记录在案,以备系统安装时使用: 硬盘:数量, 容量和类型; 内存:您的计算机所装内存的数量; CD-ROM:接口类型(IDE, SCSI); SCSI卡:卡的型号; 网卡:网卡的型号; 鼠标:鼠标的类型(...
标签: Web开发
在什么地方插入 JavaScript JavaScript 可以出现在 HTML 的任意地方。使用标记script/script,你可以在 HTML 文档的任意地方插入 JavaScript,甚至在HTML之前插入也不成问题。不过如果要在声明框架的网页(框架网页)中插入,就一定要在frameset之前插入,否则不会运行。 基本格式 script !-- ... (JavaScript代码) ... //-- /scrip...
文字排版入门教程
标签: Java JAVA基础
        JavaServer Pages (JSP)是基于Java的技术,用于创建可支持跨平台及跨Web服务器的动态网页。 JSP可与微软的Active Server Pages (ASP)相媲美,但JSP使用的是类似于HTML的标记和Java 代码片段而不是用VBScript。当你使用不提供ASP本地支持的Web服务器(例如 Apache或Netscape服务器)时,你就可以考虑使...
标签: Java JAVA基础
  第二课:用HTML表单 大多数情况下,商业的网站都要有一些表单,比如说输入一下消费者的姓名啦,地址啦,或者敲一个词来用搜索引擎来查一下啦,或者市场人员从来访者处收集一些数据供参考什么的。 那些表单传回的数据怎么处理的? 来访者通过表单向JSP引擎输入了数据,并保存在了request对象中,那么接下来怎么办? 图2-1向你展...

经验教程

245

收藏

25
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部