| 网站首页 | JAVA文章 | AppServers | Web开发 | 应用开发 | 资源下载 | 论坛
    想学好编程,学好外语很重要  [enadd  2006年12月25日]        
设为首页 加入收藏 联系站长
您现在的位置: 编程笔记网 >> 应用开发 >> delphi >> 入门技巧 >> 文章正文
用Delphi编写VxD设备驱动程序            【字体:
用Delphi编写VxD设备驱动程序
作者:-    文章来源:-    点击数:    更新时间:2006-12-31

作者:Emil Biserov(dinfo@mail.primorye.ru)(Russion)

英语翻译:Vitaly Zayko(zayko@vitsoftware.com)

中文翻译改编:Riceball(teditor@mailroom.com)

 

前言

  用 Delphi 3.0 编写 VxD 设备驱动程序,在Delphi 3 下编译通过,Delphi 2 下没有测试,Delphi 4 建立的 Object 文件 M$ Linker 5.12.8181 不能识别,这里使用的汇编器是M$的Macro Assembler ver. 6.11d ,联结器是M$ Incremental Linker ver. 5.12.8181 ,它们来自 Windows 98DDK(http://www.microsoft.com/ddk/ddk98.htm)。

 

介绍

  Windows 存在有两种类型的 VxD 设备驱动程序:

  1、静态(Static) VxD ,装入操作系统并永久的存在于内存中;

  2、动态(Dynamic) VxD,当需要时才调入内存,用完后关闭VxD即可释放内存。

  Inprise Delphi 有能力建立任何一种类型的 VxD 设备驱动程序,下面我们将介绍如何建立动态 VxD。

  当 Win32 应用程序打开一个 VxD “虚拟”设备时,VWIN32 使用 LoadDevice 将 VxD 装入内存,并建立消息W32_DEVICEIOCONTROL ,发向 VxD。

  也就是说,VxD 至少应该响应以下两个系统信息和编写以下的一个函数:

  SYS_DYNAMIC_DEVICE_INIT

  SYS_DYNAMIC_DEVICE_EXIT

  W32_DEVICEIOCONTROL 函数.

  消息 SYS_DYNAMIC_DEVICE_INIT 在尝试装入 VxD 时发送到 VxD ,消息 SYS_DYNAMIC_DEVICE_EXIT 在尝试动态交换时发送到 VxD ,消息的处理者在成功处理后,应该在寄存器 AX 中返回 VXD_SUCCESS 标志。

 

  W32_DEVICEIOCONTROL 的 dwService 参数有以下的值:

  DIOC_OPEN 当 VxD 通过 CreateFile() 函数尝试打开操作时发送(在 SYS_DYNAMIC_DEVICE_INIT 消息后),如果成功返回 NO_ERROR (0);

  DIOC_CLOSEHANDLE 当 VxD 通过 CloseHandle() 函数尝试关闭操作时发送(在 SYS_DYNAMIC_DEVICE_EXIT 前)

  所有其它的值 > 0 意味着不同的函数调用(由 dwIoControlCode 给出),当 VxD 被 DeviceIoControl 函数调用时。

 

启动模块(vxdmain.asm)

...

extrn SysDynamicDeviceInit :PROC

extrn SysDynamicDeviceExit :PROC

extrn W32DeviceIoControl :PROC

...

  PUBLIC DELPHIIO_DDB

  Public @@HandleFinally

  Public @initialization

...

Control_0 proc

  cmp eax, SYS_DYNAMIC_DEVICE_INIT

  jnz short chkSysDynExit

  call SysDynamicDeviceInit

  cmp eax, 1

  retn

;-------------

 

chkSysDynExit:

  cmp eax, SYS_DYNAMIC_DEVICE_EXIT

  jnz short chkDevIOCtl

  call SysDynamicDeviceExit

  cmp eax, 1

  retn

;-------------

chkDevIOCtl:

  cmp eax, W32_DEVICEIOCONTROL

  jnz short loc_ret

  push esi

  push edx

  push ebx

  push ecx

  call W32DeviceIoControl

  cmp eax, 1

  retn

[1] [2] [3] 下一页  

文章录入:enadd    责任编辑:enadd 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
  • 用友华表Cell组件报表工具:…

  • Cell组件/插件---实现报表复…

  • Cell组件插件报表工具-让报表…

  • 报表设计从C/S到B/S结构的一…

  • 用友华表,天涯之外谁的江湖…

  • 用友华表Cell插件,优秀的We…

  • 我与用友华表Cell产品的亲密…

  • 适用的就是最好的

  • 与用友华表共成长- Cell产品…

  • 用友华表Cell产品使用有感

  •   网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 管理登录 |