http://bbs3.driverdevelop.com/simple/?t84347.html

  1. {
  2. BOOL status = ;
  3. DWORD accessMode = , shareMode = ;
  4. HANDLE fileHandle = NULL;
  5. //PUCHAR dataBuffer = NULL;
  6. SCSI_PASS_THROUGH_WITH_BUFFERS sptwb;
  7. SCSI_PASS_THROUGH_DIRECT_WITH_BUFFER sptdwb;
  8. UCHAR buffer[ ];
  9. UCHAR string[ ];
  10. ULONG length = , errorCode = ;
  11. DWORD returned = ;
  12.  
  13. strcpy(string, "\\\\.\\");
  14. strcat(string, "I:");
  15.  
  16. shareMode = FILE_SHARE_READ | FILE_SHARE_WRITE;//default
  17. accessMode = GENERIC_WRITE | GENERIC_READ;//default
  18.  
  19. fileHandle = CreateFile( string, accessMode, shareMode, NULL, OPEN_EXISTING, ,
  20. NULL );
  21.  
  22. if (fileHandle == INVALID_HANDLE_VALUE)
  23. {
  24. MessageBox(NULL, "Create file fail", "tester", MB_OK);
  25. return false;
  26. }
  27.  
  28. ZeroMemory(&sptwb, sizeof(SCSI_PASS_THROUGH_WITH_BUFFERS));
  29.  
  30. sptwb.spt.Length = sizeof(SCSI_PASS_THROUGH);
  31. sptwb.spt.PathId = ;
  32. sptwb.spt.TargetId = ;
  33. sptwb.spt.Lun = ;
  34. sptwb.spt.CdbLength = CDB6GENERIC_LENGTH;
  35. sptwb.spt.SenseInfoLength = ;
  36. sptwb.spt.DataIn = SCSI_IOCTL_DATA_IN;
  37. sptwb.spt.DataTransferLength = ;
  38. sptwb.spt.TimeOutValue = ;
  39. sptwb.spt.DataBufferOffset =
  40. offsetof(SCSI_PASS_THROUGH_WITH_BUFFERS,ucDataBuf);
  41. sptwb.spt.SenseInfoOffset =
  42. offsetof(SCSI_PASS_THROUGH_WITH_BUFFERS,ucSenseBuf);
  43. sptwb.spt.Cdb[] = SCSI_OPCODE_HWTEST_COMMAND; //SCSI_OPCODE_SIGMATEL_WRITE_COMMAND;//
  44. sptwb.spt.Cdb[] = HWTEST_DISPLAY_ID;//ALLOCATE_MEDIA;
  45. sptwb.spt.Cdb[] = ;
  46. length = offsetof( SCSI_PASS_THROUGH_WITH_BUFFERS, ucDataBuf )
  47. + sptwb.spt.DataTransferLength;
  48.  
  49. status = DeviceIoControl( fileHandle, IOCTL_SCSI_PASS_THROUGH, &sptwb,
  50. sizeof(SCSI_PASS_THROUGH), &sptwb, length, &returned, FALSE );
  51.  
  52. if (!status)
  53. {
  54. MessageBox(NULL, "Device I/0 control fail!", "tester", MB_OK);
  55. errorCode = GetLastError();
  56. ShowMessage(IntToStr(errorCode));
  57. PrintError(errorCode);
  58. CloseHandle(fileHandle);
  59. return false;
  60. }
  61.  
  62. CloseHandle( fileHandle );
  63. return true;
  64. }

向USB设备发送SCSI命令的更多相关文章

  1. C# 如何捕获一个USB设备发送到PC的数据

    using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...

  2. 利用mass storage class 做免驱动usb设备.

    当需要使用usb bulk传输,想让设备像串口通讯那样和PC主机通信, 通常需要自己做一个PC端的驱动,比较麻烦. 为避免在pc上编写usb设备驱动的麻烦,可以将设备做成mass storage 类的 ...

  3. Linux USB驱动学习总结(二)---- USB设备驱动

    USB 设备驱动: 一.USB 描述符:(存在于USB 的E2PROM里面) 1.  设备描述符:struct usb_device_descriptor 2.  配置描述符:struct usb_c ...

  4. USB设备驱动模型

    嵌入式设备驱动的编写,基本上都要按照一定的驱动模型编写.不这么做的话,一旦设备发生了更新和改变,大部分的驱动代码都要推倒重来,代码的重用率低,不具备移植性.所以在新版linux2.6.22以后的内核版 ...

  5. Java访问USB设备

    最近在用Java访问RDing设备,使用的是Java HID API.使用过程中发现一个问题,由于是嵌入式小白,不知道如何向USB设备发送report.于是想到可以看看自带的软件如何访问USB的.找到 ...

  6. KVM客户机使用主机USB设备

    有些时候KVM客户机还是要使用USB设备,比如USB密钥等 KVM命令行参数 -usb 打开usb驱动程序,启动客户机usb支持 -usbdevice devname 为客户机增加usb设备,devn ...

  7. kvm云主机使用宿主机usb设备

    有些时候KVM客户机还是要使用USB设备,比如USB密钥等 KVM命令行参数 -usb 打开usb驱动程序,启动客户机usb支持-usbdevice devname 为客户机增加usb设备,devna ...

  8. USB设备---URB请求块

    1.urb 结构体 USB 请求块(USB request block,urb)是USB 设备驱动中用来描述与USB 设备通信所用的基本载体和核心数据结构,非常类似于网络设备驱动中的sk_buff 结 ...

  9. USB系列之八:透过ASPI执行SCSI命令

    在<USB系列之七>里我们介绍了ASPI的规范,并对一系列ASPI的命令做了测试,其中的02号命令是执行SCSI命令,我们专门在这篇文章中介绍,在<USB系列七>中,我们已经了 ...

随机推荐

  1. java基础44 IO流技术(输出字节流/缓冲输出字节流)和异常处理

    一.输出字节流 输出字节流的体系: -------| OutputStream:所有输出字节流的基类(抽象类) ----------| FileOutputStream:向文件输出数据的输出字节流(把 ...

  2. python之assert断言

    assert只是一个检查,为真不做任何事,不为真时,抛出异常,并包含错误信息 1.根据布尔值判断 2.判断是否相等 3.返回值是否为空 4.是否包含某值 x in y 其他方法,可以参考http:// ...

  3. No.9 selenium学习之路之CSS定位

    CSS定位方式: 元素中间加“.”表示是class 1.通过ID定位 driver.find_element_by_css_selector("#ID值") 2.通过class定位 ...

  4. UFLDL(五)自编码算法与稀疏性

    新教程内容太繁复,有空再看看,这节看的还是老教程: http://ufldl.stanford.edu/wiki/index.php/%E8%87%AA%E7%BC%96%E7%A0%81%E7%AE ...

  5. thinkphp框架if标签条件表达式

    eq 等于neq 不等于gt 大于egt 大于等于lt 小于elt 小于等于

  6. POJ 3376 Finding Palindromes(manacher求前后缀回文串+trie)

    题目链接:http://poj.org/problem?id=3376 题目大意:给你n个字符串,这n个字符串可以两两组合形成n*n个字符串,求这些字符串中有几个是回文串. 解题思路:思路参考了这里: ...

  7. C实现线程池

    简介:这里使用linux下的互斥锁和条件变量实现了一个线程池.代码由一个未知作者完成,第二任作者补充优化. 本人仅仅是做了一些注释工作. 代码如下: /*! .h */ #include <st ...

  8. CVE-2013-2729 Adobe Reader和Acrobat 数字错误漏洞

    这个洞是在论坛里看到的,感觉很有意思,来学习一下.个人感觉IE或者说是浏览器的洞和Adobe洞都是比较难调的,主要是有大量的类难以摸清之间的关系. 这个洞是一个整数溢出的洞,这个不是重点.重点是利用的 ...

  9. day1作业登录接口总结

    作业一:编写登陆接口 1.输入用户名和密码 2.认证成功后显示欢迎信息 3.输错三次后锁定 上面作业,用了几种思路来解决问题:但是本质上其实都是一样的:核心都是对文件的操作,文件的增删改查:并且这些操 ...

  10. linux 101 hacks 第一章cd命令

    本系列来源于<linux 101 hacks>,作者还写了其他101 hacks教程,读了几章,觉得技巧都还不错,很实用,做个总结收藏. cdpath 设置基目录 [ramesh@dev- ...