首页
社区
课程
招聘
[求助]delphi写的驱动编译问题(已解决)
发表于: 2008-7-2 21:41 9387

[求助]delphi写的驱动编译问题(已解决)

2008-7-2 21:41
9387
看到 pathletboy 贴的一份代码

我就复制下来了 可是编译的时候出现了一个问题 改怎么解决呢?


error LNK2001: unresolved external symbol KeServiceDescriptorTable


该怎么解决呢?

用的编译工具包是KmdKit4D

unit driver;

interface

uses DDDK;

function _DriverEntry(DriverObject: PDriverObject; RegistryPath:
  PUnicodeString): NTSTATUS; stdcall;

var
  POldDebugActiveProcess: PLong;  //保存NTDebugActiveProcess函数在SSDT表中的指针。
  OldDebugActiveProcessAdd : PLong; //保存原来的NTDebugActiveProcess函数的地址。
implementation

function MyDebugActiveProcess(PID:ULong):Boolean;stdcall; //Hook函数
begin
        Result := False; 
end;

procedure DriverUnload(DriverObject: PDriverObject); stdcall;
begin
  asm   //关中断
                cli
                mov eax,cr0
                and eax,not $10000
                mov cr0,eax
  end;

  POldDebugActiveProcess^ := ULong(OldDebugActiveProcessAdd); //恢复SSDT

  asm   //开中断
    mov  eax,cr0
    or   eax,$10000
    mov  cr0,eax
    sti
  end;
  //DbgPrint('DriverUnload(DriverObject:0x%.8X)',[DriverObject]);
  //DbgPrint('DriverUnload(-)',[]);
end;

function _DriverEntry(DriverObject: PDriverObject; RegistryPath:
  PUnicodeString): NTSTATUS; stdcall;
begin

  DriverObject^.DriverUnload := @DriverUnload;
  POldDebugActiveProcess := Pointer(ULONG(KeServiceDescriptorTable.ServiceTableBase) + $39
    * 4); //$39为NTDebugActiveProcess在XP SP2中的服务号,可由IceSword查出。
  OldDebugActiveProcessAdd := Pointer(POldDebugActiveProcess^);//保存原来的NTDebugActiveProcess函数地址,以备驱动卸载时候恢复。

  asm  //关中断
                cli
                mov eax,cr0
                and eax,not $10000
                mov cr0,eax
  end;
  POldDebugActiveProcess^ := ULong(@MyDebugActiveProcess);//修改SSDT表,将服务号为$39的函数改为自己的钩子函数地址,以实现HOOK。

  asm   //开中断
    mov  eax,cr0
    or   eax,$10000
    mov  cr0,eax
    sti
  end;
  Result := STATUS_SUCCESS;


end;

end.


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (15)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
少了什么呢?还望高手明示
2008-7-2 21:42
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
自己顶
2008-7-3 12:09
0
雪    币: 1004
活跃值: (75)
能力值: ( LV9,RANK:570 )
在线值:
发帖
回帖
粉丝
4
KeServiceDescriptorTable是ntoskrnl.exe导出的一个变量,因为我从来没用,所以在旧的KmdKit4D里就没有声明。由于Delphi不支持引用外部变量,所以你只能把它声明成一个过程,具体做法如下:
1.在Interface部分
procedure KeServiceDescriptorTable;

2.在implementation部分加入
procedure KeServiceDescriptorTable; external NtKernel name '_KeServiceDescriptorTable';

还有不知道楼主用的是哪个版本的KmdKit4D,偶最新版的KmdKit4D里是有KeServiceDescriptorTable的声明的。

还有KeServiceDesctiptroTable是一个ServiceDescriptorEntry类型的变量,由于我们这里把它声明成了一个过程,所以你在使用时要做强制类型转换。
2008-7-4 09:07
0
雪    币: 8835
活跃值: (2404)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
5
用C/C++多方便,非用Delphi干啥~~
呵呵~~
2008-7-4 10:41
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
谢谢 mickeylan
原来如此
我昨天下了dddk编译没有问题 就是不知道KmdKit4D为何不能编译
这个原来还需要声明

在旧的KmdKit4D

我用的是3是不是又有新的要出来了  期待啊
2008-7-4 11:20
0
雪    币: 1004
活跃值: (75)
能力值: ( LV9,RANK:570 )
在线值:
发帖
回帖
粉丝
7
准备发布0.04版了
2008-7-4 15:57
0
雪    币: 204
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
什么时候发啊? 0.04能编译 SSDT Hook For Delphi 那个驱动不?
2008-7-13 16:07
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
和我的问题一样 现在已经编译成功
你看看
mickeylan
老大的
Delphi研究之驱动开发篇(一)--实现原理
你把ntddk.pas要用到的函数声明修改一下
2008-7-13 21:19
0
雪    币: 204
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
我弄了两天也没弄成功
能把你的Kmdkit4D环境和能编译通过的SSDT HOOK For Delphi
工程发一个给我吗? 我的邮箱是 895580361@qq.com
谢谢
2008-7-14 21:18
0
雪    币: 195
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
能不能先给个DISK的驱动例子
我要写一个磁盘驱动,但是读写是从http://或是ftp或是其它自定义Socket的
相当于加强版的"映射磁盘驱动器"

原想从FileDisk挂ISO的那个利子,或是MemDisk出发,可是在翻译sdk时,发现和你的sdk翻译的都不一样,有些同名的Record内容都不一样的
2008-8-2 00:30
0
雪    币: 222
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
不知道什么原因,编译成功了,可是加载后机器却蓝屏了
2008-8-2 09:52
0
雪    币: 1602
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
这个驱动我的机子也用不了。
2008-11-23 09:15
0
雪    币: 1602
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
能声明成函数不?我怎么看着都象函数。
2008-11-23 09:16
0
雪    币: 185
活跃值: (764)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
用那个delphi驱动编写工具直接生成 测试可用~
2008-11-23 17:58
0
雪    币: 1602
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
USES WINDOWS怎么用?没有这个东西啊
2008-11-24 10:21
0
游客
登录 | 注册 方可回帖
返回
//