社区
驱动开发/核心开发
帖子详情
关于SCSIOP_READ命令的一些疑问.
zhangvbcs
2007-12-05 08:59:11
在我对U盘做过滤的时候,得到当我在访问U盘的时候,
用到的是SCSIOP_READ命令,也就是说我是通过他来
访问U盘的,但是我U盘是通过什么方式或者说是哪个
命令把我要访问的内容返回给我的呀.???
请大家给解释一下.^_^
...全文
388
8
打赏
收藏
关于SCSIOP_READ命令的一些疑问.
在我对U盘做过滤的时候,得到当我在访问U盘的时候, 用到的是SCSIOP_READ命令,也就是说我是通过他来 访问U盘的,但是我U盘是通过什么方式或者说是哪个 命令把我要访问的内容返回给我的呀.??? 请大家给解释一下.^_^
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
这么多天了,还是没有人回.自己顶一下.
Failed to resolve async component default: TypeError: __webpack_require__(...) is not a function
场景 laravel5.7项目默认的laravel-mix编译 异步路由,观察http异步组件加载成功,路由配置正确 前端没有显示 报错 3个警告 app.js:42886 [vue-router] Failed to resolve async component default: TypeError: Cannot
read
property ‘call’ of undefined ...
pip._vendor.urllib3.exceptions.
Read
TimeoutError: HTTPSConnectionPool(host=‘f 的解决办法
pip._vendor.urllib3.exceptions.
Read
TimeoutError: HTTPSConnectionPool(host='f 的解决办法 引言:当我们在用pip或者pycharm来安装模块的时候,经常会遇到
Read
Timeout错误,造成这个问题的原因就是网速问题。我的解决方法有两条,如下: 1.换个网络连接重新下载 可以看到下面在cmd中用pip安装的下载速度为几十KB/S,这已经算不错的速度。想想之前出现错误可都是几KB/S 2.使用
命令
pip --default-tim
解决pip._vendor.urllib3.exceptions.
Read
TimeoutError: HTTPSConnectionPool
解决问题解决问题使用
命令
安装。
pip安装第三方库报错pip._vendor.urllib3.exceptions.
Read
TimeoutError: HTTPSConnectionPool解决方法
在安装第三方库的时候,Python报错pip._vendor.urllib3.exceptions.
Read
TimeoutError: HTTPSConnectionPool(host=‘files.pythonhosted.org’, port=443):
Read
timed out. 解决方法如下: 输入指令: pip --default-timeout=100 install 库名称 -i http://pypi.douban.com/simple/ --trusted-host pypi.doub
关于“.bash_profile”和“.bashrc”区别的总结
关于“.bash_profile”和“.bashrc”区别的总结
驱动开发/核心开发
21,618
社区成员
21,708
社区内容
发帖
与我相关
我的任务
驱动开发/核心开发
硬件/嵌入开发 驱动开发/核心开发
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章