阅读:1472回复:7
如何在WIN98下通过微软的UMSS例子驱动程序向U盘发送特殊命令?
我开发了一个U盘,在WIN98下使用微软的UMSS做为驱动程序,想在用户程序中向U盘发送特殊的IOCTL命令,如何实现?请各位大侠赐教!
|
|
沙发#
发布于:2004-02-19 12:29
我试一下,现在我正试通过VWIN32发送特殊命令的方法。
|
|
板凳#
发布于:2004-02-19 11:47
SetupDiEnumDeviceInterfaces(
IN HDEVINFO DeviceInfoSet, IN PSP_DEVINFO_DATA DeviceInfoData, OPTIONAL IN LPGUID InterfaceClassGuid, IN DWORD MemberIndex, OUT PSP_DEVICE_INTERFACE_DATA DeviceInterfaceData ); 通过MemberIndex,你可以枚举出所有使用此GUID的设备来,但不知道不同的MemberIndex所对应的设备是你插的哪个u盘 |
|
|
地板#
发布于:2004-02-19 09:29
能够区分出相同GUID的不同设备,那当然算,怎么做呢?
|
|
地下室#
发布于:2004-02-18 22:00
区分是可以,不过我没法对应你发命令的设备对应哪个盘符,不知算不算你的区分
|
|
|
5楼#
发布于:2004-02-18 16:38
我这种方式在2K下实现了,但是感觉不能对同一Guid的多个设备分别进行操作,后来就改做使用盘符打开设备发送特殊命令了,那么在98下能够以盘符打开设备直接向设备发送特殊命令吗?
我的QQ号是199614517,有时间请指教! |
|
6楼#
发布于:2004-02-18 16:32
谢谢larry。
用这种方式会不会存在这样一个问题:以Guid来打开设备的时候,如果机器上插了多个自己的设备,用这种方法还能够分别向不同的设备发送特殊命令吗? |
|
7楼#
发布于:2004-02-18 09:54
在UMSS_CreateDeviceObject中加入
ntStatus = IoRegisterDeviceInterface(PhysicalDeviceObject,&UMSS_GUID,NULL,iceLinkUnicodeString); if(NT_SUCCESS(ntStatus)) { ntStatus = IoSetDeviceInterfaceState(&deviceLinkUnicodeString, TRUE); if(!NT_SUCCESS(ntStatus)) { IoDeleteDevice(*DeviceObject); } RtlCopyMemory(deviceExtension->deviceLinkUnicodeString, deviceLinkUnicodeString.Buffer, deviceLinkUnicodeString.Length); } else { IoDeleteDevice(*DeviceObject); } umss_guid自己生成一个,ap中用它来打开device,再去定义你的ioctl,就行了 |
|
|