http://www.jubao163.com/it/bianchengwendang/2007-06-17/14948.shtml

typedef struct _SCSI_PASS_THROUGH
{
USHORT Length;
UCHAR ScsiStatus;
UCHAR PathId;
UCHAR TargetId;
UCHAR Lun;
UCHAR CdbLength;
UCHAR SenseInfoLength;
UCHAR DataIn;
ULONG DataTransferLength;
ULONG TimeOutValue;
ULONG_PTR DataBufferOffset;
ULONG SenseInfoOffset;
UCHAR Cdb[ ];
} SCSI_PASS_THROUGH, *PSCSI_PASS_THROUGH; typedef struct _SCSI_PASS_THROUGH_WITH_BUFFERS
{
SCSI_PASS_THROUGH Spt;
ULONG Filler;
UCHAR SenseBuf[ ];
UCHAR DataBuf[ ];
} SCSI_PASS_THROUGH_WITH_BUFFERS, *PSCSI_PASS_THROUGH_WITH_BUFFERS; // 判断设备是否可写
// 返回该设备是否可写
BOOL CanWrite( HANDLE hDevice ) // hDevice(设备句柄)
{
SCSI_PASS_THROUGH_WITH_BUFFERS sptwb;
UCHAR CDReader, CDwriter, DVDReader, DVDwriter;
ULONG returned = ; ZeroMemory( &sptwb, sizeof(SCSI_PASS_THROUGH_WITH_BUFFERS) ); sptwb.Spt.Length = sizeof(SCSI_PASS_THROUGH);
sptwb.Spt.PathId = ;
sptwb.Spt.TargetId = ;
sptwb.Spt.Lun = ;
sptwb.Spt.CdbLength = ;
sptwb.Spt.SenseInfoLength = ;
sptwb.Spt.DataIn = ;
sptwb.Spt.DataTransferLength = ;
sptwb.Spt.TimeOutValue = ;
sptwb.Spt.DataBufferOffset = offsetof( SCSI_PASS_THROUGH_WITH_BUFFERS,
DataBuf );
sptwb.Spt.SenseInfoOffset = offsetof( SCSI_PASS_THROUGH_WITH_BUFFERS,
SenseBuf );
sptwb.Spt.Cdb[ ] = 0x1A;
sptwb.Spt.Cdb[ ] = 0x08;
sptwb.Spt.Cdb[ ] = 0x2A;
sptwb.Spt.Cdb[ ] = ; ULONG length = offsetof( SCSI_PASS_THROUGH_WITH_BUFFERS, DataBuf )
+ sptwb.Spt.DataTransferLength; BOOL status = DeviceIoControl( hDevice, IOCTL_SCSI_PASS_THROUGH, &sptwb,
sizeof(SCSI_PASS_THROUGH), &sptwb, length, &returned, FALSE ); if ( !status )
{
return false;
} if ( sptwb.Spt.ScsiStatus )
{
return false;
}
else
{
if ( CDwriter = ( ( sptwb.DataBuf[ ] & 0x01 )
|| ( sptwb.DataBuf[ ] & 0x02 ) ) )
{
return true;
}
if ( DVDwriter = ( ( sptwb.DataBuf[ ] & 0x10 )
|| ( sptwb.DataBuf[ ] & 0x20 ) ) )
{
return true;
}
}
return false; }

能够区分光驱的类型么?比如CDROM、DVD还是CD-RW的更多相关文章

  1. vmware安装win7*64位时,安装不成功的关键点是光驱接口类型选择为IDE模式

    mware 安装win7*64时,找不到光盘,后来在xin7*64的虚拟机下的编辑虚拟机设置 找到光驱,点击高级,并选择IDE即可,这样就可以进入虚拟机找到光驱和硬盘到了.进入winpe后可以看到各种 ...

  2. springmvc全局异常处理ControllerAdvice区分返回响应类型是页面还是JSON

    思路: 加一个拦截器,在preHandler中取得HandlerMethod,判断其方法的返回类型,以及方法的注解和类的注解. 如果返回是json,收到异常则返回默认的异常包装类型. 如果返回是页面, ...

  3. iOS中使用 Reachability 检测网络区分手机网络类型 WiFi 和2 3 4 G

    如果你想在iOS程序中提供一仅在wifi网络下使用(Reeder),或者在没有网络状态下提供离线模式(Evernote).那么你会使用到Reachability来实现网络检测. 写本文的目的 了解Re ...

  4. Linux-vmware tools安装与cdrom挂载

    前述 昨天想直接复制虚拟机centos系统中命令行的内容到主机的txt文档上进行保存,发现不能实现虚拟机与主机之间的直接通讯,后来查资料发现原来是由于我的虚拟机没有安装vwmare tools的缘故. ...

  5. Linux-vmware tools安装与cdrom挂载(转)

    昨天想直接复制虚拟机centos系统中命令行的内容到主机的txt文档上进行保存,发现不能实现虚拟机与主机之间的直接通讯,后来查资料发现原来是由于我的虚拟机没有安装vwmare tools的缘故. 一个 ...

  6. inux读取ISO文件或是光驱的方法--挂载

    inux读取ISO文件或是光驱的方法--挂载 首先在虚拟机选项的设置里设置CD/DVD选项,勾选:Connect at power on 再在连接中选择:Use ISO image file即选择镜像 ...

  7. linux文件系统的类型

    文件系统的类型 兄弟连介绍-Linux有四种基本文件系统类型:普通文件.目录文件.连接文件和特殊文件,可用file命令来识别. 普通文件:如文本文件.C语言元代码.SHELL脚本.二进制的可执行文件等 ...

  8. .NET基础拾遗(1)类型语法基础和内存管理基础

    Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开发基 ...

  9. 廖雪峰js教程笔记7 基本类型和包装类型

    在JavaScript的世界里,一切都是对象. 但是某些对象还是和其他对象不太一样.为了区分对象的类型,我们用typeof操作符获取对象的类型,它总是返回一个字符串: typeof 123; // ' ...

随机推荐

  1. Python_oldboy_自动化运维之路_全栈考试(七)

    1. 计算100-300之间所有能被3和7整除的所有数之和 # -*- coding: UTF-8 -*- #blog:http://www.cnblogs.com/linux-chenyang/ c ...

  2. java基础81 jsp的内置对象(网页知识)

    1.什么是内置对象? 在jsp开发中,会频繁使用到一些对象,如:HttpSession,ServletContext,HttpServletRequest.      如果每次使用这些对象时,都要去创 ...

  3. SP_attach_db 添加数据库文件

    SP_attach_db   用法如下:       EXEC   SP_attach_db   @dbname   =   N'目标数据库名',           //这是你要引入后的数据库名. ...

  4. win7下scheme环境配置

    运行lisp方言--scheme,在windows下,用eclipse. 1.eclipse装好 2.eclipse安装插件scheme48 development took, http://www. ...

  5. Windows 10利用自带的 Hyper-v 安装Linux

    Linux由于其众多独特的优势(可参见Linux系统的优势),而被很多人所喜爱.而要使用Linux那首先要做的工作就是安装Linux系统了.这里给出在 win10 下利用虚拟机 Hyper-v 安装 ...

  6. 微信接口问题(The underlying connection was closed: An unexpected error occurred on a send)

    突然在调用微信接口是报:The underlying connection was closed: An unexpected error occurred on a send错误,跟踪了半天,是因为 ...

  7. 破损的键盘(UVa 11988)

    s[] 数组用来保存原有的字符序列 nex[] 数组记录打印的下标顺序 C++11 代码如下: #include<iostream> #include<cstring> usi ...

  8. 教你如何清除 MyEclipse/Eclipse 中 Web Browser 和 Switch Workspace 的历史记录

    有些许强迫症的开发人员可能会因为 MyEclipse/Eclipse 中 Web Browser 和 Switch Workspace 冗余的历史记录而感到苦恼,下面的方法就可以有效的帮助解决你的痛点 ...

  9. C# 中从网络上下载文件保存到本地文件

    下面是C#中常用的从Internet上下载文件保存到本地的一些方法,没有太多的技巧. 1.通过  WebClient  类下载文件 WebClient webClient = new WebClien ...

  10. Bootstrap进阶三:jQuery插件概览

    单个还是全部引入 JavaScript 插件可以单个引入(使用 Bootstrap 提供的单个 *.js 文件),或者一次性全部引入(使用 bootstrap.js 或压缩版的 bootstrap.m ...