用Delphi编写VxD设备驱动程序
来源:优易学  2011-10-10 10:01:12   【优易学:中国教育考试门户网】   资料下载   IT书店

 

  主 delphi 程序单元(vxdprocs.pas)
  ...
  procedure shellmessage(handle, flags : integer; const message, caption : pchar;
  callback, referencedata : pointer); stdcall; assembler;
  asm
  movebx, handle// virtual machine handle
  moveax, flags// message box flags
  movecx, message// address of message text
  movedi, caption// address of caption text
  movesi, callback// address of callback
  movedx, referencedata// reference data for callback
  int20h// 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);
  result := hvxdhandle <> invalid_handle_value;
  end;
  procedure tvxdtestform.closevxddriver;
  begin
  if hvxdhandle <> invalid_handle_value then begin
  closehandle(hvxdhandle);
  hvxdhandle := invalid_handle_value;
  end;
  end
  顺便说一下,delphi中有个编译选项可以控制程序加载的入口
  一般是0x00400000,你可以改。

上一页  [1] [2] 

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训