首页
社区
课程
招聘
[求助]KmdKit4D驱动编写软件怎么安装?
发表于: 2008-4-10 01:25 7334

[求助]KmdKit4D驱动编写软件怎么安装?

2008-4-10 01:25
7334
本人是用 Delphi 7 的, 用Delphi打开 pas文件。

工程里的 编译和生成 都是灰色的 怎么编译?

  我好像有直接编译成功过。 后来在打开都是灰色的 。不知道怎么回事。

大大能不能做个 .bat 或者做个编译环境如何搭建?

  偶菜菜,希望大大们体谅。

还有驱动学习需要什么必备工具能介绍下? Delphi环境下的,谢谢了哈!

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (11)
雪    币: 210
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
呵呵,和我一样的新手!
http://bbs.pediy.com/showthread.php?t=57762
瞅瞅这里老师的回复!
我建了QQ群:6414660来一起学习吧1
2008-4-10 16:08
0
雪    币: 217
活跃值: (91)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
首先将dll文件和exe放入delphi7目录的bin目录中,然后将include目录和source目录加入delphi的搜索目录中,在delphi的tool菜单下和加入包差不多。
现在编辑好pas文件后保存,在放了pas文件的目录中创建Makefile,可以用其他的修改一下
然后从cmd中到达这个目录,输入make就可以自动编译了
2008-4-11 16:15
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
还是不是很懂,,
delphi的搜索目录 是哪里?

pas所在目录没有 make啊。
2008-4-11 16:35
0
雪    币: 217
活跃值: (91)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
慢慢摸索吧。
make在delphi7目录的bin目录中,其中这个bin目录已经加入windows环境变量的path中了,所以可以直接运行make;
delphi的搜索目录见下图
上传的附件:
  • 0.jpg (45.02kb,234次下载)
2008-4-12 07:45
0
雪    币: 210
活跃值: (26)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
楼上说的不错!
2008-4-12 08:22
0
雪    币: 271
活跃值: (18)
能力值: ( LV12,RANK:370 )
在线值:
发帖
回帖
粉丝
7
Delphi研究之驱动开发篇[一](由mickeylan完成)
http://bbs1.pediy.com/showthread.php?t=57762
Delphi研究之驱动开发篇[二](由mickeylan完成)
http://bbs1.pediy.com/showthread.php?t=58070
Delphi研究之驱动开发篇[三](由mickeylan完成)
http://bbs1.pediy.com/showthread.php?t=58301
Delphi研究之驱动开发篇[四](由mickeylan完成)
http://bbs1.pediy.com/showthread.php?t=58608
Delphi研究之驱动开发篇[五](由mickeylan完成)
http://bbs1.pediy.com/showthread.php?t=59265
2008-4-12 10:13
0
雪    币: 217
活跃值: (91)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
由VC驱动改写的。

unit RESSDT;

interface

uses
  nt_status, ntoskrnl, native, winioctl, fcall, macros;

function _DriverEntry(pDriverObject: PDRIVER_OBJECT; RegistryPath: PUnicodeString): NTSTATUS; stdcall;

implementation

var
  DeviceName1, DeviceName2: UNICODE_STRING;

const
  IOCTL_SETPROC = $0022E14B;

function KeServiceDescriptorTable1: PServiceDescriptorEntry;
begin
  Result := PPointer(@KeServiceDescriptorTable)^;
end;

function DispatchCreateClose(p_DeviceObject: PDEVICE_OBJECT; p_Irp: PIRP): NTSTATUS; stdcall;
begin
  DbgPrint('DisPatchCreate!');
  p_Irp^.IoStatus.Status := STATUS_SUCCESS;
  p_Irp^.IoStatus.Information := 0;
  IofCompleteRequest(p_Irp, IO_NO_INCREMENT);
  result := STATUS_SUCCESS;
end;

function DispatchControl(p_DeviceObject: PDEVICE_OBJECT; p_Irp: PIRP): NTSTATUS; stdcall;
var
  status: NTSTATUS;
  pIrpStack: PIO_STACK_LOCATION;
  uIoControlCode: DWORD;
  pInputBuffer, pOutputBuffer: Pointer;
  uOutsize: Cardinal; //uInsize
  uIndex: ULONG;
  pBase: PULONG;
begin
  status := STATUS_INVALID_DEVICE_REQUEST; ;
  pIrpStack := IoGetCurrentIrpStackLocation(p_Irp); {È¡IRPµÄstack locationµÄÖ¸Õë}
  uIoControlCode := pIrpStack^.Parameters.DeviceIoControl.IoControlCode;
  pInputBuffer := pIrpStack^.Parameters.DeviceIoControl.Type3InputBuffer;
  pOutputBuffer := p_Irp^.UserBuffer;
//  uInsize := pIrpStack^.Parameters.DeviceIoControl.InputBufferLength;
  uOutsize := pIrpStack^.Parameters.DeviceIoControl.OutputBufferLength;
  DbgPrint('DispatchDeviceControl  Code:%X', uIoControlCode);
  case uIoControlCode of
    IOCTL_SETPROC:
      begin
        ProbeForRead(pInputBuffer, sizeof(ULONG), sizeof(ULONG));
        ProbeForWrite(pOutputBuffer, sizeof(ULONG), sizeof(ULONG));
        uIndex := PULONG(pInputBuffer)^;
        if (KeServiceDescriptorTable1^.NumberOfServices <= uIndex) then
        begin
          status := STATUS_INVALID_PARAMETER;
          Result := status;
          Exit;
        end;
        pBase := KeServiceDescriptorTable1^.ServiceTableBase;
        DbgPrint('0x%x 0x%x', uIndex, PULONG(pInputBuffer)^);
        asm //¹ØÖжÏ
        cli
        mov eax,cr0
        and eax,not $10000
        mov cr0,eax
        end;
//      PULONG(DWORD(pBase) + uIndex)^ := PULONG(pInputBuffer)^;
        PULONG(DWORD(pBase) + uIndex * SizeOf(ULONG))^ := PULONG(pInputBuffer)^;
//      Inc(pBase, uIndex);
//      pBase^ := PULONG(pInputBuffer)^;
        asm   //¿ªÖжÏ
        mov  eax,cr0
        or   eax,$10000
        mov  cr0,eax
        sti
        end;
        status := STATUS_SUCCESS;
      end;
  else
    begin
      Result := status;
      Exit;
    end;
  end;
  if status = STATUS_SUCCESS then
    p_Irp^.IoStatus.Information := uOutsize
  else
    p_Irp^.IoStatus.Information := 0;
  p_Irp^.IoStatus.Status := status;
  IoCompleteRequest(p_Irp, IO_NO_INCREMENT);
  Result := status;
end;

procedure DriverUnload(p_DriverObject: PDRIVER_OBJECT); stdcall;
begin
  if IoDeleteSymbolicLink(@DeviceName2) <> STATUS_SUCCESS then
    DbgPrint('DeleteSymbolicLink Fail!');
  IoDeleteDevice(p_DriverObject^.DeviceObject);
end;

function _DriverEntry(pDriverObject: PDRIVER_OBJECT; RegistryPath: PUnicodeString): NTSTATUS; stdcall;
var
  status: NTSTATUS;
  pDeviceObject: TDeviceObject;
begin

  asm
  pushad
  xor eax, ebx
  sub ebx, ecx
  add ecx, edx
  xor ebx, eax
  popad
  end;

  status := STATUS_DEVICE_CONFIGURATION_ERROR;
  RtlInitUnicodeString(DeviceName1, '\Device\RESSDT');
  RtlInitUnicodeString(DeviceName2, '\??\RESSDTDOS');
  if (IoCreateDevice(pDriverObject, 0, @DeviceName1, FILE_DEVICE_UNKNOWN, 0, FALSE, pDeviceObject) = STATUS_SUCCESS) then
  begin
    if (IoCreateSymbolicLink(@DeviceName2, @DeviceName1) = STATUS_SUCCESS) then
    begin
      pDriverObject^.MajorFunction[IRP_MJ_CREATE] := @DispatchCreateClose;
      pDriverObject^.MajorFunction[IRP_MJ_CLOSE] := @DispatchCreateClose;
      pDriverObject^.MajorFunction[IRP_MJ_DEVICE_CONTROL] := @DispatchControl;
      pDriverObject^.DriverUnload := @DriverUnload;
      status := STATUS_SUCCESS;
    end else
    begin
      DbgPrint('IoCreateSymbolicLink fail!');
      IoDeleteDevice(@pDeviceObject);
    end;
  end else
    DbgPrint('IoCreateDevice Fail!');
  result := status;
end;

end.
2008-4-12 11:06
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
C:\KmdKit4D\samples\basic>cmd.exe
Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.

C:\KmdKit4D\samples\basic>make
MAKE Version 5.2  Copyright (c) 1987, 2000 Borland
        rmcoff driver.obj
RMCOFF 1.0 COFF utility toolkit for KmdKit4D(Delphi & BCB)
OMF2D,OMF2COFF,RMCOFF 3 in 1
Copyright (C) 2008 LanHua(mickeylan)     mickeylan@163.com
Usage: rmcoff <input obj> [output obj]

Error: Invalid OMF format!
        link /NOLOGO /ALIGN:32 /BASE:0x10000 /SUBSYSTEM:NATIVE /DRIVER /LIBPATH:
C:\KmdKit4D\lib /FORCE:UNRESOLVED /FORCE:MULTIPLE /ENTRY:DriverEntry ntoskrnl.li
b hal.lib win32k.lib ntdll.lib ntutils.lib /out:driver.sys driver.obj

** error -1073741819 ** deleting driver.sys

C:\KmdKit4D\samples\basic>

还是不行  冷啊!

原装代码只是改了一下makefile 文件而已

需要的make 和 link(DDDK) 都放到Delphi 的BIN目录  还有tool里面的文件

makefile

NAME=driver
DCC=dcc32
INCLUDE=C:\KmdKit4D\include
LIB_PATH=C:\KmdKit4D\lib
DCCFLAGS=-U$(INCLUDE) -B -CG -JP -$A-,C-,D-,G-,H-,I-,L-,P-,V-,W+,Y- -O+
LIBS=ntoskrnl.lib hal.lib win32k.lib ntdll.lib ntutils.lib
LINKFLAGS=/NOLOGO /ALIGN:32 /BASE:0x10000 /SUBSYSTEM:NATIVE /DRIVER /LIBPATH:$(LIB_PATH) /FORCE:UNRESOLVED /FORCE:MULTIPLE /ENTRY:DriverEntry

all : $(NAME).sys

$(NAME).sys : $(NAME).obj
rmcoff $(NAME).obj
link $(LINKFLAGS) $(LIBS) /out:$(NAME).sys $(NAME).obj

$(NAME).obj : $(NAME).pas
$(DCC) $(DCCFLAGS) $(NAME).pas

clean :
del *.obj
del *.dcu
del *.sys
2008-4-12 21:06
0
雪    币: 220
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
好帖子,应该把论坛的驱动教程收集下
2008-4-12 21:28
0
雪    币: 8
活跃值: (2626)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
哈哈,大大们出手了
2008-4-14 09:52
0
雪    币: 217
活跃值: (91)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
12
to:有点累了<>看看这个bin目录是否加入windows环境变量的path中。
2008-4-14 11:05
0
游客
登录 | 注册 方可回帖
返回
//