SCSI指令使用之弹带和加载磁带指令使用(实例演示)

SCSI指令:小型计算机系统接口(英语:Small Computer System Interface; 简写:SCSI),一种用于计算机和智能设备之间(硬盘、软驱、光驱、打印机、扫描仪等)系统级接口的独立处理器标准。 SCSI是一种智能的通用接口标准。

这里演示两个命令分别为:
弹出磁带IOCTL_STORAGE_EJECT_MEDIA 和 加载磁带IOCTL_STORAGE_LOAD_MEDIA命令。演示如下:

//弹带指令演示  IOCTL_STORAGE_EJECT_MEDIA
void CtestDlg::OnBnClickedEject()
{
	CString strMsg;
	CString m_strTapeDev = _T("\\\\.\\tape0");//这里指的是驱动器设备
	DWORD accessMode = 0, shareMode = 0;
	//使用CreateFile打开设备,获取句柄信息
	shareMode = FILE_SHARE_READ | FILE_SHARE_WRITE;  // default
    accessMode = GENERIC_WRITE | GENERIC_READ;       // default
	HANDLE m_devHandle =   CreateFile(m_strTapeDev,
						    accessMode,
						    shareMode,
						    NULL,
						    OPEN_EXISTING,
						    0,
						    NULL);

    if (m_devHandle == INVALID_HANDLE_VALUE) 
	{
		int err= GetLastError();
		strMsg.Format("Error opening %s. error = %d", m_strTapeDev, err);
		OutPutDebugString(strMsg);
        return;
    }
	else
	{
		strMsg.Format("Device \"%s\" Open OK!",m_strTapeDev);
		OutPutDebugString(strMsg);
	}
	
	BOOL status = 0;
	DWORD dwRet;
	if(m_devHandle == INVALID_HANDLE_VALUE || m_devHandle == NULL)
	{
		return;
	}
	status = DeviceIoControl(m_devHandle,
		IOCTL_STORAGE_EJECT_MEDIA,//弹带指令
		NULL,
		0,
		NULL,
		0,
		&dwRet,
		FALSE); 
	if(!status)
	{
		int err = GetLastError();//获取最后一条失败信息
		strMsg.Format( "Eject Media Error ; error = %d", syserr);
		OutPutDebugString(strMsg);//打印日志信息
	}
	else
	{
		strMsg.Format( "Eject Media OK!");
		OutPutDebugString(strMsg);
	}
	CloseHandle(m_devHandle );
	m_devHandle = NULL;
}
//加载磁带演示IOCTL_STORAGE_LOAD_MEDIA
void CtestDlg::OnBnClickedLoad()
{
	CString strMsg;
	CString m_strTapeDev = _T("\\\\.\\tape0");//这里指的是驱动器设备
	DWORD accessMode = 0, shareMode = 0;
	//使用CreateFile打开设备,获取句柄信息
	shareMode = FILE_SHARE_READ | FILE_SHARE_WRITE;  // default
    accessMode = GENERIC_WRITE | GENERIC_READ;       // default
	HANDLE m_devHandle =   CreateFile(m_strTapeDev,
						    accessMode,
						    shareMode,
						    NULL,
						    OPEN_EXISTING,
						    0,
						    NULL);

    if (m_devHandle == INVALID_HANDLE_VALUE) 
	{
		int err= GetLastError();
		strMsg.Format("Error opening %s. error = %d", m_strTapeDev, err);
		OutPutDebugString(strMsg);
        return;
    }
	else
	{
		strMsg.Format("Device \"%s\" Open OK!",m_strTapeDev);
		OutPutDebugString(strMsg);
	}
	BOOL status = 0;
	DWORD dwRet;
	if(m_devHandle == INVALID_HANDLE_VALUE || m_devHandle == NULL)
	{
		return;
	}
	status = DeviceIoControl(m_devHandle,
		IOCTL_STORAGE_LOAD_MEDIA,//加载磁带指令
		NULL,
		0,
		NULL,
		0,
		&dwRet,
		FALSE); 

	if(!status)
	{
		int syserr = GetLastError();
		strMsg.Format( "Load Media Error ; error = %d", syserr);
		OutPutDebugString(strMsg);
	}
	else
	{
		strMsg.Format( "Load Media OK!");
		OutPutDebugString(strMsg);
	}	
	CloseHandle(m_devHandle );
	m_devHandle = NULL;
}

MSDN函数DeviceIOControl地址:
https://msdn.microsoft.com/en-us/library/aa363216
MSDN函数CreateFile地址:
https://msdn.microsoft.com/en-us/library/windows/desktop/aa363858(v=vs.85).aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Coding13

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值