首页 > 其他分享 >QT 之 USB SCSI指令0x2A对USB设备进行写有问题

QT 之 USB SCSI指令0x2A对USB设备进行写有问题

时间:2024-07-22 18:10:43浏览次数:13  
标签:NULL USB winioctl VOLUME FSCTL SCSI 0x2A QT

  要: 使用QT进行SCSI指令操作时遇到问题,0x28读取正常,但0x2A写入失败,原因是系统对0x2A命令的写入权限控制严格。解决方法是通过FSCTL_LOCK_VOLUME实现独占访问,实现对USB设备的写操作。   问题参考:https://blog.csdn.net/kifea/article/details/103696099 0x2A命令参考: https://www.usbzh.com/article/detail-1014.html   问题:使用SCSI指令0x28读可以,0x2A进行写不成功,抓包看根本没有下发0x2A命令 原因:Win7之后,系统对2A命令写要求严格,设备必须加锁或者卸载卷才能操作。   解决方案: 独占访问,即通过FSCTL_LOCK_VOLUME 来设置独占访问。(相应的也解除独占访问设置 FSCTL_UNLOCK_VOLUME )。 (1). FSCTL_LOCK_VOLUME 的设置,参考:https://learn.microsoft.com/zh-cn/windows/win32/api/winioctl/ni-winioctl-fsctl_lock_volume 正常情况下 DeviceIoControl 函数返回1, lpBytesReturned 返回0

BOOL DeviceIoControl(
  (HANDLE) hVolume,            // handle to a volume
  (DWORD) FSCTL_LOCK_VOLUME,   // dwIoControlCode
  NULL,                        // lpInBuffer
  0,                           // nInBufferSize
  NULL,                        // lpOutBuffer
  0,                           // nOutBufferSize
  (LPDWORD) lpBytesReturned,   // number of bytes returned
  NULL                         // OVERLAPPED structure
);
(2). FSCTL_UNLOCK_VOLUME 的设置,参考:https://learn.microsoft.com/zh-cn/windows/win32/api/winioctl/ni-winioctl-fsctl_unlock_volume
BOOL DeviceIoControl(
  (HANDLE) hDevice,            // handle to a volume
  FSCTL_UNLOCK_VOLUME,         // dwIoControlCode
  NULL,                        // lpInBuffer
  0,                           // nInBufferSize
  NULL,                        // lpOutBuffer
  0,                           // nOutBufferSize
  (LPDWORD) lpBytesReturned,   // number of bytes returned
  (LPOVERLAPPED) lpOverlapped  // OVERLAPPED structure
);

  

 

标签:NULL,USB,winioctl,VOLUME,FSCTL,SCSI,0x2A,QT
From: https://www.cnblogs.com/-tbd-/p/18316600

相关文章

  • Qt实现简易CAD软件的开发:技术解析与实现
    文章目录简易CAD软件的开发:技术解析与实现引言项目概述程序入口主窗口的实现主窗口类定义(mainwindow.h)主窗口类实现(mainwindow.cpp)自定义绘图视图自定义绘图视图类定义(myqgraphicsview.h)自定义绘图视图类实现(myqgraphicsview.cpp)用户界面资源管理实现细节1.处理用户绘......
  • 如何在没有 USB 的情况下将文件从手机传输到笔记本电脑
    我们经常需要在不同设备间传输文件,而不再局限于使用传统的USB线连接。无线技术的进步为手机与笔记本电脑之间的文件传输提供了便捷、高效的解决方案。无论是跨越房间还是位于网络覆盖的不同位置,以下方法将指导您如何在没有USB线的情况下,轻松实现手机与笔记本电脑间的数据传输。......
  • USB_IAP例程讲解及移植步骤
    IAP是InApplicationProgramming的缩写,‌含义为应用编程技术,此方式允许用户在自己的程序运行过程中对Flash存储器的部分区域进行烧写,‌方便地通过预留的通信口对产品中的固件程序进行更新升级。‌此外,USB_IAPDemo中的两个工程可通过预留的jumpApp接口和jumpToIap接口进行地址指......
  • 通过QT进行服务器和客户端之间的网络通信
    客户端client.pro#-------------------------------------------------##ProjectcreatedbyQtCreator2024-07-02T14:11:20##-------------------------------------------------QT+=coreguinetwork#网络通信greaterThan(QT_MAJOR_VERSION,4):QT+......
  • 在 PyQt6 中,为小部件制作动画背景的好方法是什么?
    在QT中,您可以使用QLabel和QMovie来播放gif。我希望其他小部件位于动画背景前面,但您不能将其他小部件放置在QLabel中。例如,我有这个对话框。每个小部件都放置在QFramemain_frame中这就是我想要实现的目标,这里我使用静态图像作为main_frame上的背景。我想获得相......
  • Python:定期检测断开故障的USB设备并重新初始化实例
    我有一个USB设备,有时会通过USB端口发送串行数据。问题是设备出现故障,有时会无缘无故地断开连接并再次连接到电脑。问题不大,但在这些情况下我需要重新初始化serial.Serial(port)实例,这有点烦人。该设备没有可以从我那里收到的任何命令,我可以验证它是否已连接。我可以......
  • Qt+OpenCascade开发笔记(一):occ的windows开发环境搭建(一):OpenCascade介绍、下载和安装过
    前言  OpenCASCADE是由OpenCascadeSAS公司开发和支持的开源软件开发平台,旨在为特定领域快速开发程序而设计。它是一个面向对象的C++类库,提供了丰富的几何造型、数据交换和可视化等功能,成为许多CAD软件的核心组件。  本篇描述下载和安装过程。 OpenCascade(OCC)概......
  • 嵌入式C++、FreeRTOS、MySQL、Spring Boot和MQTT协议:智能零售系统详细流程介绍(代码示
    项目概述随着科技的发展,零售行业正经历着一场数字化转型。智能零售系统通过集成嵌入式技术和大数据分析,为商家提供了高效的运营管理工具。该系统的核心目标是提升顾客体验、优化库存管理、降低运营成本以及实现精准营销。本项目将结合多种技术栈,包括嵌入式硬件、嵌入式软件、......
  • 嵌入式C++、STM32F103、MQTT、InfluxDB存储和Grafana可视化:工厂设备的实时监控和数据
    1.项目概述随着工业4.0的推进,智能制造已成为制造业发展的必然趋势。本文介绍了一套基于STM32和MQTT协议的小型工厂设备监控系统,可实现对工厂设备的实时监控和数据分析,有效提高生产效率和安全性。系统主要包括三个部分:设备端:使用STM32MCU连接各种传感器,采集设备运行......
  • 嵌入式C++、InfluxDB、Spark、MQTT协议、和Dash:树莓派集群物联网数据中心设计与实现(代
    1.项目概述随着物联网技术的快速发展,如何高效地收集、存储和分析海量IoT设备数据成为一个重要课题。本文介绍了一个基于树莓派集群搭建的小型物联网数据中心,实现了从数据采集到分析可视化的完整流程。该系统采用轻量级组件,适合资源受限的边缘计算环境。主要功能包括:通......