社区
驱动开发/核心开发
帖子详情
关于SCSIOP_READ命令的一些疑问.
zhangvbcs
2007-12-05 08:59:11
在我对U盘做过滤的时候,得到当我在访问U盘的时候,
用到的是SCSIOP_READ命令,也就是说我是通过他来
访问U盘的,但是我U盘是通过什么方式或者说是哪个
命令把我要访问的内容返回给我的呀.???
请大家给解释一下.^_^
...全文
380
8
打赏
收藏
关于SCSIOP_READ命令的一些疑问.
在我对U盘做过滤的时候,得到当我在访问U盘的时候, 用到的是SCSIOP_READ命令,也就是说我是通过他来 访问U盘的,但是我U盘是通过什么方式或者说是哪个 命令把我要访问的内容返回给我的呀.??? 请大家给解释一下.^_^
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zhangvbcs
2007-12-13
打赏
举报
回复
我做了一下条件判断.
但是还是有时候蓝屏!
也不知道是什么时候.
rayyang2000
2007-12-13
打赏
举报
回复
有看过psrb->DataTransferLength吗?估计是超过IoInfo的buffer size了
zhangvbcs
2007-12-12
打赏
举报
回复
谢谢楼上各位的指点.
我感觉所读取的数据是不是放到了SCSI_REQUEST_BLOCK中的DataBuffer里面了.
我就用下面的方式把里面的数据放到一个内存区域中:
PSCSI_REQUEST_BLOCK psrb;
UCHAR IoInfo[512*0x80];
RtlZeroMemory(IoInfo,512*0x80);
RtlCopyMemory(IoInfo,psrb->DataBuffer,psrb->DataTransferLength);//执行到这一句出现蓝屏.IRQL的问题.
而这个错误也不是每次都蓝屏,有的时候就能成功.
请各位再给指点一下这是怎么回事.
谢谢.
井底蛙
2007-12-12
打赏
举报
回复
你下SCSI指令是会有BUFFER, DATA放在BUFFER内.
请参考.
#include "ntddscsi.h"
#include "Winioctl.h"
UCHAR szBuffer[512*0x80]; //64k/////////////////////// DATA BUFFER
SCSI_PASS_THROUGH_WITH_BUFFERS sptwb;
bool CSCSICommand::SCSI_READ_10(DWORD ucAddress, WORD wBlock, UINT uiBlockSize )
{
PreCMD();
sptwb.Spt.DataIn = SCSI_IOCTL_DATA_IN;
sptwb.Spt.DataTransferLength = wBlock * uiBlockSize;
sptwb.Spt.Cdb[0] = 0x28;
sptwb.Spt.Cdb[1] = 0x00;
sptwb.Spt.Cdb[2] = (ucAddress & 0xFF000000) >> 24;
sptwb.Spt.Cdb[3] = (ucAddress & 0x00FF0000) >> 16;
sptwb.Spt.Cdb[4] = (ucAddress & 0x0000FF00) >> 8;
sptwb.Spt.Cdb[5] = (ucAddress & 0x000000FF) >> 0;
sptwb.Spt.Cdb[6] = 0x00;
sptwb.Spt.Cdb[7] = (wBlock & 0xFF00) >> 8;
sptwb.Spt.Cdb[8] = (wBlock & 0x00FF) >> 0;
sptwb.Spt.Cdb[9] = 0x00;
sptwb.Spt.Cdb[10] = 0x00;
sptwb.Spt.Cdb[11] = 0x00;
return SedCMD();
}
void CSCSICommand::PreCMD(void)
{
ZeroMemory(&sptwb, sizeof(SCSI_PASS_THROUGH_WITH_BUFFERS));
sptwb.Spt.Length = sizeof(SCSI_PASS_THROUGH);
sptwb.Spt.PathId = 0;
sptwb.Spt.TargetId = 1;
sptwb.Spt.Lun = 0;
sptwb.Spt.CdbLength = 12;
sptwb.Spt.SenseInfoLength = sizeof(sptwb.SenseBuf);
sptwb.Spt.TimeOutValue = TIME_OUT;
sptwb.Spt.DataBufferOffset = offsetof(SCSI_PASS_THROUGH_WITH_BUFFERS,DataBuf);
sptwb.Spt.SenseInfoOffset = offsetof(SCSI_PASS_THROUGH_WITH_BUFFERS,SenseBuf);
}
bool CSCSICommand::SedCMD(void)
{
ULONG returned;
ULONG length = sizeof(SCSI_PASS_THROUGH_WITH_BUFFERS);
if (sptwb.Spt.DataIn == SCSI_IOCTL_DATA_IN)
ZeroMemory(szBuffer, sptwb.Spt.DataTransferLength);
if (sptwb.Spt.DataIn == SCSI_IOCTL_DATA_OUT)
memcpy(&sptwb.DataBuf[0],&szBuffer[0],sptwb.Spt.DataTransferLength);
//QueryPerformanceCounter(&Lstart_time1);
BOOL status = DeviceIoControl(hDevice,
IOCTL_SCSI_PASS_THROUGH,
&sptwb,
length,
&sptwb,
length,
&returned,
FALSE);
//QueryPerformanceCounter(&Lend_time1);
//Ldiff_time1.QuadPart = (Lend_time1.QuadPart - Lstart_time1.QuadPart);
if ((! status) || (sptwb.Spt.ScsiStatus))
{
memcpy(ucSenseKey, sptwb.SenseBuf,sizeof(sptwb.SenseBuf));
return false;
}
else
{
if (sptwb.Spt.DataIn == SCSI_IOCTL_DATA_IN)
memcpy(&szBuffer[0],&sptwb.DataBuf[0],sptwb.Spt.DataTransferLength);
return true;
}
}
fantasyofwind
2007-12-11
打赏
举报
回复
我的qq是110315652
fantasyofwind
2007-12-11
打赏
举报
回复
你加我的qq了吗?
流水时间
2007-12-10
打赏
举报
回复
建议看DDK的书! 我只知道关心了一下网络过滤没有关心U盘过滤,你可以看一下!
zhangvbcs
2007-12-09
打赏
举报
回复
这么多天了,还是没有人回.自己顶一下.
pip._vendor.urllib3.exceptions.
Read
TimeoutError: HTTPSConnectionPool(host=‘f 的解决办法
pip._vendor.urllib3.exceptions.
Read
TimeoutError: HTTPSConnectionPool(host='f 的解决办法 引言:当我们在用pip或者pycharm来安装模块的时候,经常会遇到
Read
Timeout错误,造成这个问题的原因就是网速问题。我的...
成功解决WARNING:tensorflow:From :
read
_data_sets (from tensorflow.contrib.learn.python.learn.
成功解决WARNING:tensorflow:From :
read
_data_sets (from tensorflow.contrib.learn.python.learn. 目录 解决问题 解决思路 解决方法 解决问题 WARNING:tensorflow:From 190403.py:6: ...
raise
Read
TimeoutError(self._pool, None, “
Read
timed out.“) pip._vendor.urllib3.exceptions.
Read
Time
raise
Read
TimeoutError(self._pool, None, "
Read
timed out.") pip._vendor.urllib3.exceptions.
Read
TimeoutError: HTTPSConnectionPool(host='files.pythonhosted.org', port=443):
Read
timed ou t. 此时,...
Python之sys._getframe()
import sys ... print sys._getframe().f_code.co_filename #当前文件名,可以通过__file__获得 print sys._getframe(0).f_code.co_name #当前函数名 print sys._getframe(1).f_code.co_name
python header=none_pandas.
read
_csv()函数读取文件时,关于“header=None”影响读取列数区间的右闭合总结...
对于一个没有字段名标题的数据,如data.csv1....import pandas as pd# 读取数据df = pd.
read
_csv("../data/data.csv")print(df)为了解决这个问题,我们添加“header=None”,告诉函数,我们读取的原始文件数据没...
驱动开发/核心开发
21,619
社区成员
21,710
社区内容
发帖
与我相关
我的任务
驱动开发/核心开发
硬件/嵌入开发 驱动开发/核心开发
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章