阅读:1532回复:5
模仿《10分钟做一个USB驱动程序》做了一个驱动,可为什么不能用啊?急求救!
我是个彻底的新手,在网上看到了一篇特别有名的文章叫《10分钟做一个USB驱动程序》,于是依样画葫芦做了一个,可出现了很多问题,也没得到文中说的结果。我把我的过程说一下,希望大侠们能帮我指出我的错误。谢谢!
我的系统Win2000server,先后安装了VC++ 6.0(windows默认路径)、win2000DDK(d:\\NTDDK)、driverstudio2.7(windows默认路径)。 我按文中所述,在driverstudio的tools中运行setDDKGo。在打开的VC++环境中打开工作区c:\\program files\\compuware\\driverstudio\\driverworks\\source\\VdwLibs.dsw,用工具栏中的\"Build with the DDK BUILD.EXE utility\"编译了VdwLibs.dsw得到了vdw_wdm.lib,应该到这就做好了准备工作了吧!?然后我就开始用driver wizard来生成代码了。 用driver wizard的过程与文中一模一样,甚至连名字、路径什么的都一样,在最后也用文中的那段代码替换了NTSTATUS TESTDevice::TEST_IOCTL_LED_Handler(KIrp I)。 代码生成后,我用VC++打开了Test_TEST.dsw工作区,编译运行,可出现了如下界面: Test application Test_TEST starting... EOORO opening device:(0)returned from CreateFile Exiting... 我觉得是不是没安装这个驱动啊,我就把我的U盘插上,更新驱动程序,TEST.inf内容是: ;; TEST.inf ;; ********* PLEASE READ *********** ;; The wizard cannot create exact INF files for all buses and device types. ;; You may have to make changes to this file in order to get your device to ;; install. In particular, hardware IDs and logical configurations require ;; intervention. ;; ;; The Windows DDK documentation contains an excellent INF reference. ;--------- Version Section --------------------------------------------------- [Version] Signature=\"$Windows 95$\" Provider=%ProviderName% ; If device fits one of the standard classes, use the name and GUID here, ; otherwise create your own device class and GUID as this example shows. Class=NewDeviceClass ClassGUID={ff646f80-8def-11d2-9449-00105a075f6b} ;--------- SourceDiskNames and SourceDiskFiles Section ----------------------- ; These sections identify source disks and files for installation. They are ; shown here as an example, but commented out. ;[SourceDisksNames] ;1 = \"Install Disk\",Disk1,, ;[SourceDisksFiles] ;TEST.sys = 1,, ;--------- ClassInstall/ClassInstall32 Section ------------------------------- ; Not necessary if using a standard class ; 9X Style [ClassInstall] Addreg=Class_AddReg ; NT Style [ClassInstall32] Addreg=Class_AddReg [Class_AddReg] HKR,,,,%DeviceClassName% HKR,,Icon,,\"-18\" ;--------- DestinationDirs Section ------------------------------------------- [DestinationDirs] TEST_Files_Driver = 10,System32\\Drivers ;--------- Manufacturer and Models Sections ---------------------------------- [Manufacturer] %MfgName%=Mfg0 [Mfg0] %DeviceDesc%=TEST_DDI, USB\\VID_0DD8&PID_D201 ;---------- DDInstall Sections ----------------------------------------------- ; --------- Windows 9X ----------------- ; Experimentation has shown that DDInstall root names greater than 19 characters ; cause problems in Windows 98 [TEST_DDI] CopyFiles=TEST_Files_Driver AddReg=TEST_9X_AddReg [TEST_9X_AddReg] HKR,,DevLoader,,*ntkern HKR,,NTMPDriver,,TEST.sys HKR, \"Parameters\", \"BreakOnEntry\", 0x00010001, 0 ; --------- Windows NT ----------------- [TEST_DDI.NT] CopyFiles=TEST_Files_Driver AddReg=TEST_NT_AddReg [TEST_DDI.NT.Services] Addservice = TEST, 0x00000002, TEST_AddService [TEST_AddService] DisplayName = %SvcDesc% ServiceType = 1 ; SERVICE_KERNEL_DRIVER StartType = 3 ; SERVICE_DEMAND_START ErrorControl = 1 ; SERVICE_ERROR_NORMAL ServiceBinary = %10%\\System32\\Drivers\\TEST.sys [TEST_NT_AddReg] HKLM, \"System\\CurrentControlSet\\Services\\TEST\\Parameters\",\\ \"BreakOnEntry\", 0x00010001, 0 ; --------- Files (common) ------------- [TEST_Files_Driver] TEST.sys ;--------- Strings Section --------------------------------------------------- [Strings] ProviderName=\"我\" MfgName=\"我\" DeviceDesc=\"自制USB驱动\" DeviceClassName=\"自制USB驱动\" SvcDesc=\"自制USB驱动\" 选择我上面的代码生成的TEST.sys,装是装上了,可前面有个小黄问号,这是为什么啊?而且在“我的电脑”里也看不到我的U盘了!是这个驱动有问题吗? 然后我再打开Test_TEST.dsw编译运行,出现了下面的界面: Test application Test_TEST starting... Device found,handle open. Usage:Test_TEST [r n][w n][i n] r initiates a read of specified number of bytes w initiates a write of specified number of bytes i initiates an IO Control Code message with specified index value IO control code index 0 is code TEST_IOCTL_LED [222000] Example: Test_TEST r 32 w 32 read 32 bytes,then write 32 bytes Exiting... 到底问题出在哪儿呢?怎么不出现预期的效果呢?不是说能控制LED灯的亮灭吗?什么操作都不能做,怎么控制LED灯的亮灭呢? 希望大侠们帮帮我,到底怎么才能让我自制的这个驱动正确安装,在“我的电脑”里对U盘进行操作,或是打开Test_TEST.dsw编译、运行Test_TEST.exe时能达到文章中说的那样控制LED灯的亮灭呢?真诚请教,万分感谢! |
|
沙发#
发布于:2005-03-27 12:52
这个需要硬件支持.
不同的硬件中的资源不一样. 那篇文章需要有本站以前的Zboard开发板才可以.不过现在没有卖了. |
|
|
板凳#
发布于:2005-03-27 14:26
哦,是这样啊,谢谢
我毕设的题目是做一个U盘驱动程序,那我具体应该怎样做呢? 用怎样的代码来生成一个能U盘驱动呢?让windows\"我的电脑\"下能看到U盘,能正常读写? |
|
地板#
发布于:2005-03-28 16:36
哦,是这样啊,谢谢 新手可以利用DDK自带的例子,修改一下; 也可以用ds依葫芦化瓢,感觉很是比较简单。 可能刚开始时会有点困难,多试几次就应该OK了。 |
|
|
地下室#
发布于:2005-03-30 23:04
首先谢谢您的回答
我怎么给你分啊,还是系统自动扣我的分给你啊?我是新来的:P什么都不懂.我的分也不多但还是肯给也希望给的,哈哈... 还有我对U盘驱动开发没有一个整体的把握,我都不知道这到底是干吗啊?但是我肯定会好好学,希望大侠们不吝赐教:) 象我上面提到的我的毕设的题目,您能给我一个具象的描述吗? 比如说: 是不是我用DS生成的代码就可以编译成一个U盘驱动,就象在Windows下自带的那个U盘驱动一样可以用啊?谢谢... 对新手来说,太抽象会迷茫的啊:( |
|
5楼#
发布于:2005-05-13 09:32
去买一本周立功的USB设备驱动程序开发书籍
|
|