阅读:2450回复:6
windowsDDK怎么用?
由于本人语言的天分不高,虽曾苦学过专攻过英语,但至今功力不够
ddk安装上之后看不动他的英文使用说明,那位大哥帮帮小弟,请问windows98DDK怎么用? [编辑 - 6/5/02 by wangfei] |
|
板凳#
发布于:2002-06-06 22:13
请问windows98DDK是不是不支持vc6.0?
|
|
地板#
发布于:2002-06-06 22:08
大家好!我对usb所知甚少,却被人逼着开发一个usb双机互连应用程序,已经迷茫痛苦了将近一个月,可还一点头绪都没有,恳请那位高手能给小弟一点思路,帮小弟过这一关,小弟愿将不多的得分全部送上!
|
|
地下室#
发布于:2002-06-06 14:34
不给分你都不好意思。
-------------谢挺锋留. |
|
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 |
|
6楼#
发布于:2002-06-06 09:13
内容是“大大的多“,写出来会“大大的长“,所以,你还是要有“大大的耐心“!
|
|
|