实时获得USB磁盘(再次更新)

C# USB转串口突然拔出检测解决方案 最近做虚拟串口通讯程序(IRDA-USB-串口),由于是USB设备所以在通讯过程中有可能把串口拔出,程序需要实时检测到串口拔出。并把正在执行的任务结束关闭串口,给出提示。由于程序是C#做的,C#在操作底层比较不方便,需要调用较多的API函数。开始的方法是先捕获USB设备的拔出,再查找HKEY_LOCAL_MACHINE/HAEDWARE/DEVICEMAP/SERialCOM中的串口是否已经不存在 阅读详情

by czy

10分感谢sinister老大指点,程序流层:

先通过设备消息得到新加入的盘符并且排除映射盘(net use/subst).

然后通过DeviceIoControl函数发送IOCTL_STORAGE_BASE equ FILE_DEVICE_MASS_STORAGE得到盘符的总线类别,而不是通过一般的GetDirverTyte,或是网上有些人说的IOCTL_STORAGE_GET_MEDIA_TYPES.

最后通过GetDirverTyte排除USB光驱.

要注意的是调用CreateFile的时候如果文件名是//./x:形式的盘符第二三四个参数一定要为NULL
网上很多代码这儿都有问题.另外由于MASM的INC文件中没有winioctl所以有些常量得自定义:)


.386
.model flat, stdcall
option casemap :none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include        ../include/user32.inc
includelib    ../lib/user32.lib
include        ../include/kernel32.inc
includelib    ../lib/kernel32.lib
include        ../include/windows.inc


CheckUsbDisk    proto :dword

CTL_CODE MACRO DeviceType:=<0>, Function:=<0>, Method:=<0>, Access:=<0>
        EXITM %(((DeviceType) SHL 16) OR ((Access) SHL 14) OR ((Function) SHL 2) OR (Method))
ENDM

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Equ 等值定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
ICO_MAIN    equ    1000
DLG_MAIN    equ    1000
IDC_TEXT    equ    1001

DBT_DEVICEARRIVAL equ 8000h
DBT_DEVTYP_VOLUME equ 02h

_DEV_BROADCAST_HDR struct
dbch_size       dd ?
dbch_devicetype dd ?
dbch_reserved   dd ?
_DEV_BROADCAST_HDR ends   

_DEV_BROADCAST_VOLUME struct
dbcv_size       dd ?
dbcv_devicetype dd ?
dbcv_reserved   dd ?
dbcv_unitmask   dd ?
dbcv_flags      dw ?
_DEV_BROADCAST_VOLUME ends

DBTF_MEDIA      equ 01h
DBTF_NET        equ 02h ;网络映射盘符或subst命令映射的盘符


FILE_ANY_ACCESS                        equ 0
METHOD_BUFFERED         equ 0
FILE_DEVICE_MASS_STORAGE        equ 2dh ;from ntddk.inc
IOCTL_STORAGE_BASE equ FILE_DEVICE_MASS_STORAGE ;from ntddstor.inc
IOCTL_STORAGE_QUERY_PROPERTY        equ CTL_CODE(IOCTL_STORAGE_BASE, 500h, METHOD_BUFFERED, FILE_ANY_ACCESS)

BusTypeUsb equ 7

StorageDeviceProperty equ 0
PropertyStandardQuery equ 0

STORAGE_PROPERTY_QUERY struct
PropertyId     dd ?             ; 存储设备/适配器
QueryType      dd ?             ; 查询方式
AdditionalParameters dd ?       ; 额外的数据(仅定义了象征性的1个字节)
STORAGE_PROPERTY_QUERY ends

STORAGE_DEVICE_DESCRIPTOR struct
Version             dd ?        ; 版本
theSize             dd ?        ; 结构大小
DeviceType          db ?        ; 设备类型
DeviceTypeModifier  db ?        ; SCSI-2额外的设备类型
RemovableMedia      db ?        ; 是否可移动
CommandQueueing     db ?        ; 是否支持命令队列
VendorIdOffset      dd ?        ; 厂家设定值的偏移
ProductIdOffset     dd ?        ; 产品ID的偏移
ProductRevisionOffset   dd ?    ; 产品版本的偏移
SerialNumberOffset      dd ?    ; 序列号的偏移
BusType                 dd ?    ; 总线类型
RawPropertiesLength     dd ?    ; 额外的属性数据长度
RawDeviceProperties     dd ?    ; 额外的属性数据(仅定义了象征性的1个字节)
STORAGE_DEVICE_DESCRIPTOR ends


;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 数据段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
        .data
        disk3   db '//./',0
        mao     db ':',0
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

        .code

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ProcDlgMain    proc    uses ebx edi esi hWnd,wMsg,wParam,lParam
               
        mov    eax,wMsg
;********************************************************************
        .if    eax ==    WM_CLOSE
            invoke    EndDialog,hWnd,NULL
;********************************************************************
        .elseif    eax ==   WM_DEVICECHANGE  ;设备变化消息
            mov    eax,wParam
            .if    eax == DBT_DEVICEARRIVAL ;加入了可用的新设备
                   mov  eax,lParam
                   assume eax:ptr _DEV_BROADCAST_HDR
                   mov  eax,[eax].dbch_devicetype
                   assume eax:nothing
                   .if  eax == DBT_DEVTYP_VOLUME ;新设备添加了一个盘符
                        mov eax,lParam
                        assume eax:ptr _DEV_BROADCAST_VOLUME
                        mov edx,[eax].dbcv_unitmask
                        ;mov ecx,[eax].dbcv_flags
                        xor ebx,ebx
                        .while ebx<26
                        mov ecx,edx
                        and edx,01h
                        .if edx==1
                            mov cx,word ptr [eax].dbcv_flags
                            .if cx == 00h ;排除映射盘(subst或net use)
                            add ebx,65d ;盘符
                            invoke CheckUsbDisk,ebx
                            .endif
                            .break
                        .else
                            mov edx,ecx
                            shr edx,1
                        .endif
                        inc ebx
                        .endw
                        assume eax:nothing      
                   .endif
            .endif      
;********************************************************************
        .else
            mov    eax,FALSE
            ret
        .endif
        mov    eax,TRUE
        ret

_ProcDlgMain    endp

CheckUsbDisk        proc uses ebx esi edi disk:dword
                    LOCAL   buffer[128]:byte
                    LOCAL   hDisk:dword
                    LOCAL   notuse:dword
                    LOCAL   Query:STORAGE_PROPERTY_QUERY
                    LOCAL   DevDesc:STORAGE_DEVICE_DESCRIPTOR
               

                           invoke   lstrcpy,addr buffer,offset disk3   ;buffer=//./
                           invoke   lstrcat,addr buffer,addr   disk    ;buffer=//./X
                   invoke   lstrcat,addr buffer,offset mao     ;buffer=//./X:
                   invoke   CreateFile,addr buffer, NULL, NULL,NULL, OPEN_EXISTING, NULL,NULL
                   mov      hDisk,eax
                   .if eax !=INVALID_HANDLE_VALUE
                        mov Query.PropertyId,StorageDeviceProperty   
                        mov Query.QueryType,PropertyStandardQuery
                        invoke   DeviceIoControl,hDisk,IOCTL_STORAGE_QUERY_PROPERTY,addr Query, sizeof STORAGE_PROPERTY_QUERY,addr DevDesc,sizeof STORAGE_DEVICE_DESCRIPTOR,addr notuse, NULL
                        .if eax != NULL
                            mov eax,[ DevDesc.BusType]
                            .if eax == BusTypeUsb
                                invoke  lstrcpy,addr buffer,addr disk  ;buffer=X
                                invoke  lstrcat,addr buffer,offset mao ;buffer=X:
                                invoke        GetDriveType,addr buffer
                                .if eax != DRIVE_CDROM ;排除USB光驱
                                invoke  MessageBox,0,addr buffer,addr buffer,1
                                .endif
                            .endif      
                        .endif     
                   .endif     
                   invoke   CloseHandle,hDisk
                    ret
CheckUsbDisk        endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
        invoke    GetModuleHandle,NULL
        invoke    DialogBoxParam,eax,DLG_MAIN,NULL,offset _ProcDlgMain,NULL
        invoke    ExitProcess,NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
end    start
 

bin文件解析 02_H7TOOL再次迎来重大更新,全面支持USB和以太网两种脱机烧录文件配置和传输方式,并且都可以使用LUA功能了... 说明:1、这次上位机软件,BOOT,APP和eMMC磁盘文件全部进行了升级,PC软件版本: V1.4.1,STM32_APP固件版本: V1.44 ,STM32_BOOT固件版本: V1.02。2、经过本次升级后,H7-TOOL上位机软件实现管理一条龙,BOOT升级,APP升级和eMMC磁盘更新全部由上位机接管。3、上位机全面支持以太网、USB两种通信模式,USB连接也可以支持lua和测... 阅读详情

相关推荐

linux系统之禁用usb口

为了保护数据不被泄漏,我们使用软件和硬件防火墙来限制外部未经授权的访问,但是数据泄露也可能发生在内部。 为了消除这种可能性,机构会限制和监测访问互联网,同时禁用 USB 存储设备。 在本教程中,我们将讨论三种不同的方法来禁用 Linux 机器上的 USB 存储设备。所有这三种方法都在 CentOS 6&7 机器上通过测试。那么让我们一一讨论这三种方法。 方法 1 – 伪安装 在本方法中,我们往配置文件中添加一行 install usb-storage /bin/true, 这会让安装 usb-storage

灬紫荆灬 5941

DELPHI 查询硬盘厂商、型号、ID号

直接上代码,不是原创,我不过是扒老外衣,供自己取暖。需要注意的是,以下代码在D7完美运行,DELPHI XE10.2 ,需要改字符类型。也可完美运行,本人亲测。 引用单元 unit hddinfo; interface uses Windows, SysUtils, Classes; const   IOCTL_STORAGE_QUERY_PROPERTY = $2D1400; type TH...

qq457565758的博客 1170

Windows下用Wireshark+USBPcap抓包分析USB实时传输速率

USB协议是嵌入式与驱动开发中的基础通信标准,其传输速率受协议开销、总线仲裁和主机调度影响。通过抓包可捕获总线原始数据,分析帧间隔、端点通信与重传机制,从而定位性能瓶颈。在Windows平台,Wireshark结合USBPcap驱动能低成本实现USB协议解析,适用于设备调试、速率评估与兼容性测试。本文围绕USB抓包环境搭建、过滤器配置与速率计算,帮助开发者掌握从数据捕获到性能优化的完整方法。

weixin_34068198的博客 460

C#随手笔记——自动检测外部设备(U盘)的插拔

Windows系统下,每当外部设备有变动时都会向所有窗体发送一个消息,我们根据这点可以让程序检测出例如U盘插拔的信号,在C#代码中实现如下: [StructLayout(LayoutKind.Sequential)] struct DEV_BROADCAST_HDR { public UInt32 dbch_size;//...

轩阳俊的博客 3265

Win11 USB设备识别失败?5分钟搞定驱动更新与电源管理设置(附详细截图)

本文针对Windows 11系统中USB设备(如U盘、移动硬盘)识别失败的常见问题,提供了系统级的专业解决方案。文章深度剖析了驱动程序和电源管理两大核心原因,并附详细截图,手把手指导用户通过设备管理器更新驱动、禁用USB根集线器省电选项等步骤,在5分钟内快速修复问题,恢复设备正常连接与访问。

weixin_29285605的博客 1127

嵌入式RAM磁盘:纯内存USB大容量存储实现

RAM磁盘(RAM Disk)是一种将随机存取存储器(RAM)模拟为块设备的技术,其核心原理是通过线性内存映射实现512字节扇区到物理地址的直接对应,规避传统存储介质的机械延迟与寿命限制。该技术依托USB Mass Storage Class(MSC)和SCSI命令集,在嵌入式MCU上构建零持久化、高确定性、可复位的虚拟U盘。其技术价值在于提供毫秒级I/O响应、无擦写损耗、全内存可控调试能力,广泛应用于固件OTA升级、安全启动密钥交换、PLC参数同步及仿真器调试接口等场景。本文详解基于STM32的RAM_D

weixin_42497762的博客 576

检测USB设备插入和拔出

由于工作需要,前段时间一直在找关于在C#中如何检测USB设备的资料,其实C#中使用的函数也是引用的操作系统提供的API函数,还不如在C++中写方便,于是自己简单的写了一个检测USB设备插入和拔出的程序。 程序写完之后,将USB光驱、移动硬盘和优盘插入和拔出都是可以检测到的,就是有些内存卡插入的时候检测不到,于是又接着找资料,发现检测读卡器需要另外的方法。在本文中将分为两部分来解释这些是怎么实现的。

gc_2299的博客 6985

DELPHI获取硬盘物理ID源代码

DELPHI获取硬盘物理ID,全球唯一ID,无重复,DELPHI开发源代码

USB磁盘弹出器用户手册

USB-Disk-Ejector是一款专为Windows用户设计的轻量级程序,旨在提供快速安全地移除USB设备、Firewire硬盘以及记忆卡的功能。该工具适用于从XP到Windows 10(包含32位和64位)的所有Windows版本,以替代传统的“安全删除硬件”对话框,带来更高效便捷的体验。 ## 安装指南 USB-Disk-Ejector是便携式的,无需正式安装即可使用。只需下载最新版本...

gitblog_01273的博客 936

delphi非常好的 取得硬件ID

delphi非常好用的获得硬件ID。 uses u_MD5, Windows, ShellApi, Classes, SysUtils; {$I u_Const.pas} {$IFDEF NEWVER} //for Delphi2009 or higher function GetDllVer:PAnsiChar; stdcall; export; function GetHardwareID(HDD, NIC, CPU, BIOS: LongBool): PAnsiChar; stdcall; export; function GetHardwareID_vba(HDD, NIC, CPU, BIOS: LongBool; RegCode: PAnsiChar; retHardwareID: PAnsiChar): Integer; stdcall; export; function GetHardwareIDWithAppID(AppID: PAnsiChar; HDD, NIC, CPU, BIOS: LongBool): PAnsiChar; stdcall; export; function GetHardwareIDWithAppID_vba(AppID: PAnsiChar; HDD, NIC, CPU, BIOS: LongBool; RegCode: PAnsiChar; retHardwareID: PAnsiChar): Integer; stdcall; export; {$ELSE} //for delphi7/6/5 function GetDllVer:PChar; stdcall; export; function GetHardwareID(HDD, NIC, CPU, BIOS: LongBool): PChar; stdcall; export; function GetHardwareID_vba(HDD, NIC, CPU, BIOS: LongBool; RegCode: PChar; retHardwareID: PChar): Integer; stdcall; export; function GetHardwareIDWithAppID(AppID: PChar; HDD, NIC, CPU, BIOS: LongBool): PChar; stdcall; export; function GetHardwareIDWithAppID_vba(AppID: PChar; HDD, NIC, CPU, BIOS: LongBool; RegCode: PChar; retHardwareID: PChar): Integer; stdcall; export; {$ENDIF}

EDA虚拟机分享2020版本(Synopsys2020)

EDA虚拟机分享

亦安的数字小站 9195

USB磁盘弹出工具完全指南:告别繁琐操作,实现一键安全移除

在日常使用Windows系统时,USB设备的安全弹出总是让人头疼。传统的"安全移除硬件"操作步骤繁琐,而这款USB磁盘弹出工具正是为解决这一痛点而生。作为一款轻量级便携程序,它能快速安全地弹出USB磁盘、Firewire硬盘和记忆卡,让设备管理变得简单高效。 ## 🎯 为什么选择这款工具? ### 极致便捷体验 - ⚡ **双击即弹出**:无需复杂操作,直接点击目标设备即可完成安全弹出 -

gitblog_00424的博客 1071

dmx512协议c语言编程,DMX512协议+c程序代码.pdf

DMX512 协议1.协议简介DMX 是Digital MultipleX 的缩写 ,意为多路数字传输。DMX512 控制协议是美国舞台灯光协会(USITT)于1990 年发布的灯光控制器与灯具设备进行数据传输的工业标准 ,全称是 USITT DMX512(1990) ,包括电气特性、数据协议、数据格式等方面的内容。2. 电气特性和物理层2.1. 电气特...

weixin_39928993的博客 2547

USB磁盘弹出工具完整指南:告别繁琐操作,一键安全移除设备

还在为Windows系统繁琐的USB设备安全弹出操作而烦恼吗?USB-Disk-Ejector正是您需要的解决方案。这款轻量级便携程序能够快速安全地弹出USB磁盘、Firewire硬盘和记忆卡,让设备管理变得前所未有的简单高效。无论您是普通用户还是IT专业人士,这款工具都将彻底改变您处理可移动存储设备的方式。 ## 🎯 为什么选择USB-Disk-Ejector? ### 极致的便捷体验 -

gitblog_00921的博客 686

电路课设-音响分频器电路设计

(一)题目简介 1.一阶分频器电路设计 假定高音和低音扬声器均等效为 16 欧姆电阻,设计如图 2 的简单分频器电 路,要求高低频分界(两个滤波器的截止频率)为 5kHz。 1) 写出高音扬声器和低音扬声器电压对于 vs 的传递函数,确定电路中电 容 C 和电感 L 的元件值;2)利用 AC 频率扫描分析求出两个扬声器电压的频率响应曲线,验证计算 结果。用包含高低频成分的电压 vs 激励进行测量验证。 3)计算并利用 EWB 仿真证明从 vs 看进去的阻抗为一常数 16 欧姆。

weixin_53507617的博客 1万+

禅道18.3版本二开避坑指南:手把手教你扩展自定义报表功能

本文详细介绍了禅道18.3版本的二次开发实践,重点讲解如何扩展自定义报表功能。通过zentaoPHP框架的深度定制,从开发环境搭建到核心数据模型扩展,再到可视化配置和性能优化,手把手教你构建多维报表分析系统,满足企业级项目管理需求。

day7的博客 371

禁用usb磁盘将安全进行到底

 一般来说不管是大公司还是中小企业都会非常重视自己的网络安全,根据可靠资料显示表明造成计算机安全隐患的最主要原因有两个,一个是操作系统自身的漏洞以及使用者下载非法程序造成的,而另一种则是因为使用者使用带有病毒的移动介质(诸如U盘,移动硬盘,MP3,数码相机等)造成的,当用户把移动介质插在计算机上后病毒会迅速从移动设备上传播到本地计算机硬盘中。    第一种情况我们可以通过启用系统更新来避免,而

Execute的专栏 2831

UE5抗锯齿实战:如何用TAA解决闪烁问题(附参数优化指南)

本文深入探讨了UE5中TAA(时间性抗锯齿)技术如何有效解决画面闪烁问题,并提供了详细的参数优化指南。通过基础参数配置、高级优化技巧以及材质层面的策略,帮助开发者显著提升视觉质量。文章还介绍了诊断工具链,助力快速定位并解决顽固闪烁问题。

solidity8miner的博客 428

c# 再次尝试 连接失败_[图]连接USB或者SD卡的PC将阻止升级Windows 10 May 2019功能更新...

如果设备在连接外部USB设备或者读卡器的时候,计算机将会阻止升级Windows 10 May 2019(Version 1903)功能更新。在4月24日发布的技术咨询中,微软解释称当连接外部USB设备或者SD卡读卡器的时候会导致更新Windows 10新版失败。微软表示会跳出以下错误:“此PC无法升级至最新Windows10系统。当前所使用PC中存在尚不支持Windows 10新版的硬件。现在不需...

weixin_33246707的博客 121

Python爬虫实战:亚马逊中国模拟登录与二次验证全解析(2026最新版)

在数据驱动的商业时代,亚马逊作为全球最大的电商平台,其商品数据、价格波动、评论信息、库存状态等对市场分析、竞品研究、价格监控具有极高的价值。然而,亚马逊的反爬虫机制堪称行业标杆——从请求指纹校验、动态令牌、行为分析到二次验证(2FA),层层设防。本篇文章将带你从零开始,使用2026年最新的Python技术栈,完整实现亚马逊中国(z.cn)的模拟登录,并攻克二次验证难题。郑重声明:本文仅限技术研究与个人学习用途,严禁用于批量抓取、价格劫持、账户爆破等违法违规行为。

2201_76125261的博客 378

[DevExpress]GridControl拖拽行记录排序

DevExpress的GridControl拖拽行记录排序需求效果代码 需求 现在用户对按钮点击排序不满意了, 希望拖拽排序。 重载GridControl控件,对MouseMove、MouseDown、MouseUp事件修改一下。 效果 代码 using System; using System.Drawing; using System.Windows.Forms; using xiaoid.forms; using System.Data; using System.Collections.Gener

德仔 1563

USB磁盘弹出终极指南:告别繁琐操作,实现一键安全移除

还在为Windows系统中USB设备的安全弹出而烦恼吗?这款USB磁盘弹出工具正是您需要的解决方案!作为一款专为Windows用户设计的轻量级程序,它能够快速、安全地弹出USB磁盘、Firewire硬盘和各类存储卡,彻底告别传统"安全移除硬件"的繁琐步骤,让设备管理变得前所未有的简单高效。😊 ## 🎯 为什么这款工具值得您选择? ### 极致便捷的操作体验 - ⚡ **点击即弹出**:无需

gitblog_00477的博客 478

YOLOv11在RK3588芯片上的NPU加速与INT8量化部署全面指南

RK3588 NPU适配YOLOv11的关键技术要点 摘要:本文详细分析了Rockchip RK3588 NPU的硬件架构特性及其对YOLOv11模型的适配优化方案。RK3588 NPU采用三核设计,具备6TOPS算力,包含192个MAC单元和128KB专用SRAM。YOLOv11作为最新目标检测模型,其CSPNet-v5骨干网络、PANet特征金字塔和SiLU激活函数需要特殊适配处理。文章系统介绍了从PyTorch模型导出、ONNX优化到RKNN模型转换的完整流程,重点阐述了NPU不支持的算子处理方案和量

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1361

计算机磁盘管理给优盘分区,如何在win7中对USB磁盘进行分区|如何在win7中对USB磁盘进行分区...

‍U盘是使用USB接口且不需要物理驱动器的微型大容量移动存储产品. 它紧凑且易于携带. 如今,USB闪存驱动器的容量越来越大,因此有许多win7版想要对USB闪存驱动器进行分区. 如何在win7中对USB闪存盘进行分区?通常,U盘分区无效,但是编辑器找到了解决方案. 下面,编辑器将介绍如何在win7中对USB磁盘进行分区.将U盘设置为本地磁盘:1. 首先,准备可以将U盘识别为硬盘的驱动器“ cfa...

weixin_29029731的博客 1166

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

在用PyQt5制作界面时,如何创建一个创建一个进程实时监控USB盘的插入情况,并把盘符返回给界面

由于设备检测是一个长期运行的任务,你需要将它放入一个独立的线程或进程中,以免阻塞 PyQt5 的主线程。使用 Python 的。:可以通过 PyQt 的信号槽机制,将盘符插入信息传递回主界面,动态更新。提供了对磁盘信息的获取,可以用来监控 USB 盘的插拔。设置为每秒检查一次设备,你可以根据实际需求调整检测频率。库来检测系统中的 USB 设备插入情况,模块可以实现这一点。

kuixiang_yin的博客 768

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

usb大容量存储设备驱动_如何在新版本Windows10中强制使用USB驱动器的"性能更好"模式...

在最新的Windows 10 1809中,Microsoft更改了默认的USB驱动器传输设置,以支持快速删除而不是更好的性能。虽然自Windows7以来,"快速删除"一直是某些驱动器格式(如FAT32)的默认策略,但Windows 101809更新现在使其成为所有驱动器格式(包括NTFS和ExFat)的默认策略。有些格式以前默认为"更好的性能"设置,该设置将写入操作缓存到USB驱动器以获得更好的系...

weixin_39907939的博客 1516

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

上一篇: 一个内核级的SHELL工具源代码
下一篇: 应用层InLine Hook
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值