网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > DELPHI > 正文
用Delphi编写VxD设备驱动程序
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/12
下载{$ArticleTitle}原创论文样式


_ltext  ends  
            end  

 delphi 会为单元的 initialization/finalization 建立代码调用外部过程 handlefinaly 和 initialization ,即使 initialization/finalization 在单元中不存在。因此我们在汇编的启动文件中建立空的外部过程入口。  

主 delphi 程序单元(vxdprocs.pas) 
  
procedure shellmessage(handle, flags : integer; const message, caption : pchar; 
  callback, referencedata : pointer); stdcall; assembler;  
asm  
 mov  ebx, handle    // virtual machine handle  
 mov  eax, flags    // message box flags  
 mov  ecx, message    // address of message text  
 mov  edi, caption    // address of caption text  
 mov  esi, callback    // address of callback  
 mov  edx, referencedata    // reference data for callback  

 int  20h      // vxdcall  
 dd   170004h      // shell_message  
end;  

function sysdynamicdeviceinit : integer;  
begin  
 shellmessage(0, $10, copyright, ’sysdyninit: hello from delphi vxd !!!’, nil, nil);  
 result := vxd_success;  
end;  

function sysdynamicdeviceexit : integer;  
begin  
 shellmessage(0, $10, copyright, ’sysdyndevexit: bye from delphi vxd !!!’, nil, nil);  
 result := vxd_success;  
end;  

function w32deviceiocontrol(dwservice : integer;  
              dwddb : integer;  
              hdevice : integer;  
              lpdiocparms : pointer) : integer;  
begin  
 shellmessage(0, $10, copyright, ’w32devioctl’, nil, nil);  

 if (dwservice = dioc_open) then  
 begin  
   result := no_error;  
 end  
 else if (dwservice = dioc_closehandle) then  
 begin  
   result := vxd_success;  
 end  
 else if (dwservice > max_pasvxd_w32_api) then  
 begin  
   result := error_not_supported;  
 end  
  else  
 begin  
   result := vxd_success; 
 end;  
end;  
  


[译者:好了,简单的 vxd 设备驱动程序编写完毕了。你可以将它当作一个写 vxd 设备驱动程序模板。]  

附一:make.bat  
d:\visual~1\98ddk\bin\win98\ml -coff -dbld_coff -dis_32 -w2 -c -cx -zm -dmasm6 vxdmain.asm  
call dcc3.bat -j vxdprocs.pas  
d:\visual~1\98ddk\bin\link /def:vxddef.def /vxd vxdmain.obj vxdprocs /out:delphiio.vxd  

附二:  
现在让我们来编写对该 vxd 的测试程序,两个按钮:一个打开 vxd;一个关闭 vxd。  

const  
vxdname = ’\\.\delphiio.vxd’;  

  

function tvxdtestform.openvxddriver: boolean;  
begin  
hvxdhandle := createfile(vxdname,0,0,nil,0,file_flag_delete_on_close,0);&
  • 上一篇资讯: Delphi中RichEdit的奥妙
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号