twm68
驱动牛犊
驱动牛犊
  • 注册日期2003-06-05
  • 最后登录2004-05-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1456回复:7

如何在WIN98下通过微软的UMSS例子驱动程序向U盘发送特殊命令?

楼主#
更多 发布于:2004-02-17 16:15
我开发了一个U盘,在WIN98下使用微软的UMSS做为驱动程序,想在用户程序中向U盘发送特殊的IOCTL命令,如何实现?请各位大侠赐教!
larryhh
驱动小牛
驱动小牛
  • 注册日期2001-10-12
  • 最后登录2004-09-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于: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,就行了
larry
twm68
驱动牛犊
驱动牛犊
  • 注册日期2003-06-05
  • 最后登录2004-05-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-02-18 16:32
谢谢larry。
用这种方式会不会存在这样一个问题:以Guid来打开设备的时候,如果机器上插了多个自己的设备,用这种方法还能够分别向不同的设备发送特殊命令吗?
twm68
驱动牛犊
驱动牛犊
  • 注册日期2003-06-05
  • 最后登录2004-05-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-02-18 16:38
我这种方式在2K下实现了,但是感觉不能对同一Guid的多个设备分别进行操作,后来就改做使用盘符打开设备发送特殊命令了,那么在98下能够以盘符打开设备直接向设备发送特殊命令吗?
我的QQ号是199614517,有时间请指教!
larryhh
驱动小牛
驱动小牛
  • 注册日期2001-10-12
  • 最后登录2004-09-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-02-18 22:00
区分是可以,不过我没法对应你发命令的设备对应哪个盘符,不知算不算你的区分
larry
twm68
驱动牛犊
驱动牛犊
  • 注册日期2003-06-05
  • 最后登录2004-05-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-02-19 09:29
能够区分出相同GUID的不同设备,那当然算,怎么做呢?
larryhh
驱动小牛
驱动小牛
  • 注册日期2001-10-12
  • 最后登录2004-09-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于: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盘
larry
twm68
驱动牛犊
驱动牛犊
  • 注册日期2003-06-05
  • 最后登录2004-05-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-02-19 12:29
我试一下,现在我正试通过VWIN32发送特殊命令的方法。
游客

返回顶部