社区
驱动开发/核心开发
帖子详情
关于SCSIOP_READ命令的一些疑问.
zhangvbcs
2007-12-05 08:59:11
在我对U盘做过滤的时候,得到当我在访问U盘的时候,
用到的是SCSIOP_READ命令,也就是说我是通过他来
访问U盘的,但是我U盘是通过什么方式或者说是哪个
命令把我要访问的内容返回给我的呀.???
请大家给解释一下.^_^
...全文
377
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
打赏
举报
回复
这么多天了,还是没有人回.自己顶一下.
os.path.dirname(__file__)、os.path.abspath(__file__)、os.path.join()使用
转:https://www.jianshu.com/p/a2e603571eba 我在C:\Users\owolf\Desktop目录下写了一个1.py文件,文件代码如下: import os #os.path.dirname(__file__)返回的是.py文件的目录 path1=os.path.dirname(__file__) print(path1) #os.path.abspat...
URIError: Failed to decode param '/%PUBLIC_URL%/favicon.ico'
今天搭建antd的项目结构,本来项目是一个基础react项目,结果执行 yarn create umi yarn yarn start 项目启动后访问突然报错URIError: Failed to decode param '/%PUBLIC_URL%/favicon.ico',搜索资料才知道,搭建node项目不能在一个项目上重新搭建,会出现统一库的多版本...
异常:pip._vendor.urllib3.exceptions.
Read
TimeoutError: HTTPSConnectionPool...已解决
不必慌张,造成这个问题的原因并不是我们的环境配置有问题,只是“连接超时”而已
解决在pycharm中,使用pytorch时出现 Cannot find reference ‘data‘ in ‘__init__.py‘
pytorch 1.7 import torch import torch.utils.data #如果不用这个就会出现pycharm不识别data的问题 ... trainloader = torch.utils.data.DataLoader(trainset, batch_size=4, shuffle=True, num_workers=2) 解决方法来源于https://github.com/pytorch/
__
read
_mostly的使用
在linux中好多内容被定义为__
read
_mostly,那么这有什么作用呢? 首先看一个使用: structr cpuinfo_mips cpu_data[NR_CPUS] __
read
_mostly 再看一下其定义: #define __
read
_mostly __attribute__((__section__(".data..
read
_mostly"))) 也就是说被__rea
驱动开发/核心开发
21,616
社区成员
21,711
社区内容
发帖
与我相关
我的任务
驱动开发/核心开发
硬件/嵌入开发 驱动开发/核心开发
复制链接
扫一扫
分享
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章