我做了一些思考和研究,我有一些问题需要提问,最好一起讨论。
1、sys文件就是一个dll文件,没有什么差别。
2、delphi编写驱动的问题我感觉主要是delphi的内存管理器使用了高层内存api,如果编写一个使用ddk api的内存管理器替换默认内存管理器就能解决问题。
3、还有就是ddk翻译的问题,ddk api的头文件没有pascal版本的,如果有一个翻译好的头文件那就太棒了。
4、object pascal不知道是否可以编译出合适的驱动程序,delphi产生的目标文件好像也包含obj文件用于连接的。
5、还有就是驱动程序安装工具,或者说产生工具,ini文件太复杂了。我们也可以定义一个自安装的dll,只要多一些引出函数就可以了。但是没有ini文件是不行的,驱动程序的种类太多了。
6、总结一下,delphi编写驱动程序需要解决的问题:内存管理器,ddk翻译,安装工具。谁可以补充或者批评,谢谢。

解决方案 »

  1.   

    不能用oo,驱动必然使用ddk的内存管理函数,然后就是系统预定义的一些回调指针,再有就是spinlock,用来管理并发,其他就没什么更多的了--除了自己需要处理的实际问题。
      

  2.   

    在DELPHI使用OO可以绕开DELPHI默认的内存管理的....
    参见我以前整理的一点东西.
    http://borland.mblogger.cn/halfyawn/posts/26893.aspx
      

  3.   

    看了blog的文章,类似于place new。
    用任何delphi的特性,就是一个 TA = class这个声明,也会有vtbl,但是驱动并不知道它。然后~~~dump。
      

  4.   

    Delphi要被卖了,如果Borland做不好他,希望后来的人可以接上,并且推出开发驱动程序的工具。想哭啊,Delphi终于要被卖了,如果没有买家,那就这样寿终正寝了吗?
      

  5.   

    Delphi编译器不支持DDK的
    就是不能生成NTDDK WDM的SYS文件MS只允许VC开发NTDDK如果MS收购了Delphi IDE可能将来不支持DDK的
    Delphi在Windows Mobile native开发,还一样是空白~
      

  6.   

    SYS文件好像和dll的结构是一样的,只是换了一个后缀,载入方式也是一样的,只是载入的位置不一样。只要制作一个符合DDK要求的DLL改掉后缀就可以了吧。因为很多的驱动程序书上都是这么说的,WDM的sys文件就是一个dll。里面有固定的几个引出函数,C的源文件都是一样的。
      

  7.   

    还有,DDK的编译器和SDK的是一样的吧,只是配置了一下编译环境。如果dll的定位方式不一样,最主要的在于link程序,如果Delphi编译出来的obj文件可以用于DDK的link,我想那也差不多吧。
      

  8.   

    我看不行。我试过的。主要是delphi会生成栈结构代码(你无法控制!),如果按照sys的方式load,堆栈就不对了。而且load是没有反应的。这比较奇怪,可能是tls的关系。
      

  9.   

    但是要是编译成obj然后用c/asm写个DriverEntry应该可以!
      

  10.   

    只要使用Delphi的.Exe,.Dll,或者BPL模块的内核最小化版本就可以编译出标准的.SYS文件,
    然后再修正一下编译好的SYS文件的输入表和CheckSum字段的值就可以使用了。可以参考
    http://rootkit.host.sk/download.php
      

  11.   

    我上面给的那个连接的里面的Delphi DDK包里面已经翻译好了头文件,它里面还提供了好几个例子。
      

  12.   

    驱动我基本用C写,用DELPHI写有太多不安全因素.并且还要自己来实现编写SYS的内核模块.