wangfei
驱动牛犊
驱动牛犊
  • 注册日期2002-05-25
  • 最后登录2002-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2450回复:6

windowsDDK怎么用?

楼主#
更多 发布于:2002-06-05 13:03
由于本人语言的天分不高,虽曾苦学过专攻过英语,但至今功力不够
ddk安装上之后看不动他的英文使用说明,那位大哥帮帮小弟,请问windows98DDK怎么用?





[编辑 -  6/5/02 by  wangfei]
apmusb
游客
游客
沙发#
发布于:2002-06-06 22:21
windows98DDK绝对支持VC6.0
 :D :D :D :D :D :D :D :D
Nika
驱动牛犊
驱动牛犊
  • 注册日期2002-05-24
  • 最后登录2002-06-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-06-06 22:13
请问windows98DDK是不是不支持vc6.0?
wangfei
驱动牛犊
驱动牛犊
  • 注册日期2002-05-25
  • 最后登录2002-06-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-06-06 22:08
大家好!我对usb所知甚少,却被人逼着开发一个usb双机互连应用程序,已经迷茫痛苦了将近一个月,可还一点头绪都没有,恳请那位高手能给小弟一点思路,帮小弟过这一关,小弟愿将不多的得分全部送上!
飞天猩猩
驱动巨牛
驱动巨牛
  • 注册日期2001-09-24
  • 最后登录2008-06-17
  • 粉丝0
  • 关注0
  • 积分201分
  • 威望22点
  • 贡献值0点
  • 好评度21点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-06-06 14:34
不给分你都不好意思。

                    

                 -------------谢挺锋留.
yinzhongmin_777
驱动牛犊
驱动牛犊
  • 注册日期2002-04-17
  • 最后登录2002-07-31
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-06-06 14:10
先安装VC ++,在安装DDK。
安装DDK后,在DDK程序组下有Check和Free两个编译环境,Check环境用于编译带
调试信息的驱动程序,Free则是编译正式发布版本的环境。通常情况下设备驱动
程序的编译采用命令行的方式。通过一定的设置可以在VC ++的集成环境下编译。

  一般来说,成功编译一个最基本的设备驱动程序需要四个文件:
  第一个是驱动程序,即源程序文件(例如vdisk.c)
  第二个是RC文件(例如vdisk.rc)
  第三个是sources文件
  第四个文件是makefile文件
sources文件和makefile文件类似,用来指定需要编译的文件以及需要连接的库文件。
这三个辅助文件都很简单,在DDK samples的每个例程里都有三个这样的文件。

相关连接:

在《USB应用程序开发》中,我想和网友共同探讨USB应用程序开发问题。
http://www.driverdevelop.com/forum/html_9212.html

在《D12->C51驱动程序开发》中,我想和网友共同探讨USB硬件设备开发问题。
http://www.driverdevelop.com/forum/html_9154.html


[编辑 - 3/29/02 作者: plasma]




创建VC++驱动程序开发环境
  在VC中创建makefile工程

Debug 环境配置
命 令 行:nmakedrv checked
重建选项:-namak /a
输出文件名:文件名.sys

Release 环境配置
命 令 行:nmakedrv free
重建选项:-namak /a
输出文件名:文件名.sys





在工程目录中创建下列4个编译配置文件

文件:nmakedrv.bat

@echo off
if \"%1\"==\"\" goto exit
rem DDK安装路径
set mDDKDir=E:\\NTDDK

if not exist %mDDKDir%\\bin\\setenv.bat goto exit
call %mDDKDir%\\bin\\setenv %mDDKDir% %1

rem 转入工程目录
E:
cd \\temp1
build -b -w %2 %3 %4 %5 %6 %7 %8 %9
:exit

注:DDK安装路径、转入工程目录需自己修改

文件:Sources

TARGETNAME=temp1
TARGETTYPE=DRIVER
DRIVERTYPE=WDM
TARGETPATH=OBJ

INCLUDES=$(BASEDIR)\\inc;
TARGETLIBS=$(DDK_LIB_PATH)\\usbd.lib

USE_MAPSYM=1

SOURCES= \\
script1.rc \\
IusbDbg.c \\
IsoUsb.c \\
IsoPnP.c \\
IsoPwr.c \\
IoctlIso.c \\
IsoStrm.c \\
OcrwIso.c

NTTARGETFILES=PostBuildSteps

注:temp1 为自定义工程文件名;TARGETLIBS指用到的库列表;SOURCES源文件(不

要头文件),资源文件列表。这三处需自己修改。

下面两个文件不用修改,按此建好即可。

文件:MAKEFILE

#
# DO NOT EDIT THIS FILE!!! Edit .\\sources. if you want to add a new

source
# file to this component. This file merely indirects to the real make

file
# that is shared by all the driver components of the Windows NT DDK
#

!INCLUDE $(NTMAKEENV)\\makefile.def

文件:Makefile.inc

PostBuildSteps: $(TARGET)
!if \"$(DDKBUILDENV)\"==\"free\"
rebase -B 0x10000 -X . $(TARGET)
!endif
copy $(TARGET) $(WINDIR)\\system32\\drivers

注:此 copy 是将你的驱动程序复制到系统system32\\drivers目录;利于重新启动设

备时启动新的驱动程序。




生成设备接口代码GUID
利用VC++工具GUIDGEN.EXE,选择GUID Format选项2.DERINE_GUID(...),然后Copy,在粘贴到你的工程中。定义自己的标识符<<name>>。


创建版本资源
在VC++集成开发环境中,选菜单:插入-〉资源-〉Version->新建



创建安装信息文件INF

详细内容打开DDK帮助文件DDK Documentation。

下面从应用出发介绍各节

[Version]
Signature=\"$CHICAGO$\"
Class=USB
ClassGUID={745a17a0-74d3-11d0-b6fe-00a0c90f57da}
Provider=%USBDBE%
DriverVer=11/12/2001,4.10.2222.12

注:
Signature指驱动程序类型,\"$Chicago$\"表示WDM型驱动,\"$Windows NT$\"表示非WDM型驱动。
Class 指所属类,如:USB,HID,1394
Provider 指驱动程序提供者,此信息显示在设备属性的“常规”页
DriverVer指版本信息,显示在驱动程序文件详细资料窗口
ClassGUID指驱动程序运行的驱动程序堆栈类属,它决定了驱动程序所能完成的功能。
缺省为虚拟设备。对于USB类:

ClassGUID={36FC9E60-C465-11CF-8056-444553540000}




代码内存管理
#pragma data_seg(\"INIT\")
//可废弃数据,程序运行后这部分程序或数据占用的内存被释放
#pragma data_seg ()

#pragma data_seg (\"PAGE\")
//可放入分页内存数据,程序运行后这部分程序或数据占用的内存可被移入硬盘虚拟内存中,
可以减少物理内存的占用,只是再次运行可能影响速度。
#pragma data_seg ()



驱动程序启动时的入口点函数DriverEntry主要工作是初始化DeviceObject的回调函数指针,
DeviceObject将保存在系统中。最主要应初始化四部分:

#pragma data_seg(\"INIT\")
NTSTATUS DriverEntry(
    IN PDRIVER_OBJECT DeviceObject,
    IN PUNICODE_STRING RegistryPath
)
{
    NTSTATUS ntStatus = STATUS_SUCCESS;
  
    // 卸载函数
    DriverObject->DriverUnload = Unload;

    // Windows应用程序交互函数
    DriverObject->MajorFunction[IRP_MJ_CREATE] = win32_Create;
    DriverObject->MajorFunction[IRP_MJ_WRITE] = win32_Write;
    DriverObject->MajorFunction[IRP_MJ_READ] = win32_Read;
    DriverObject->MajorFunction[IRP_MJ_CLOSE] = win32_Close;
    DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = win32_ProcessIOCTL;

    // 即插即用、电源管理、系统控制函数
    DriverObject->MajorFunction[IRP_MJ_SYSTEM_CONTROL] = sys_ProcessSysControlIrp;
    DriverObject->MajorFunction[IRP_MJ_PNP] = PnP_ProcessPnPIrp;
    DriverObject->MajorFunction[IRP_MJ_POWER] = pwr_ProcessPowerIrp;

    // 添加设备
    DriverObject->DriverExtension->AddDevice = PnPAddDevice;
    return ntStatus;
}
#pragma data_seg ()

附:

DriverExtension 结构

DRIVER_EXTENSION
{
    // Back pointer to Driver Object
    struct _DRIVER_OBJECT *DriverObject;

    PDRIVER_ADD_DEVICE AddDevice;

    ULONG Count;

    UNICODE_STRING ServiceKeyName;
    // Note: any new shared fields get added here.
}

DriverObject结构

DRIVER_OBJECT {
    CSHORT Type;
    CSHORT Size;

    PDEVICE_OBJECT DeviceObject;
    ULONG Flags;

    PVOID DriverStart;
    ULONG DriverSize;
    PVOID DriverSection;
    PDRIVER_EXTENSION DriverExtension;

    UNICODE_STRING DriverName;

    PUNICODE_STRING HardwareDatabase;

    PFAST_IO_DISPATCH FastIoDispatch;

    PDRIVER_INITIALIZE DriverInit;
    PDRIVER_STARTIO DriverStartIo;
    PDRIVER_UNLOAD DriverUnload;
    PDRIVER_DISPATCH MajorFunction[主功能函数码];
}

主功能函数码

IRP_MJ_CREATE
IRP_MJ_CREATE_NAMED_PIPE
IRP_MJ_CLOSE
IRP_MJ_READ
IRP_MJ_WRITE
IRP_MJ_QUERY_INFORMATION
IRP_MJ_SET_INFORMATION
IRP_MJ_QUERY_EA
IRP_MJ_SET_EA
IRP_MJ_FLUSH_BUFFERS
IRP_MJ_QUERY_VOLUME_INFORMATION
IRP_MJ_SET_VOLUME_INFORMATION
IRP_MJ_DIRECTORY_CONTROL
IRP_MJ_FILE_SYSTEM_CONTROL
IRP_MJ_DEVICE_CONTROL
IRP_MJ_INTERNAL_DEVICE_CONTROL
IRP_MJ_SHUTDOWN
IRP_MJ_LOCK_CONTROL
IRP_MJ_CLEANUP
IRP_MJ_CREATE_MAILSLOT
IRP_MJ_QUERY_SECURITY
IRP_MJ_SET_SECURITY
IRP_MJ_POWER
IRP_MJ_SYSTEM_CONTROL
IRP_MJ_DEVICE_CHANGE
IRP_MJ_QUERY_QUOTA
IRP_MJ_SET_QUOTA
IRP_MJ_PNP
注意:IRP_MJ_PNP_POWER 已并入 IRP_MJ_PNP

rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-06-06 09:13
内容是“大大的多“,写出来会“大大的长“,所以,你还是要有“大大的耐心“!
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
游客

返回顶部