zoukankan      html  css  js  c++  java
  • 读"U盘小偷"有感

    作者: sudami

    嘿嘿,今天终于有时间学习自己喜欢的东西了,在kanxue里看到一篇关于U盘小偷的文章:http://bbs.pediy.com/showthread.php?p=381656#post381656读了其源码,学到一些东西:

    (1) 判断移动设备的插入/拔出

    嘿嘿, 以前一直觉得很神秘的"判断是否有U盘插入"其实就是这么一回事!

    下面照搬作者本人的注解吧:

    1.Message==WM_DEVICECHANGE

    当设备被插入/拔出的时候,WINDOWS会向每个窗体发送WM_DEVICECHANGE 消息,

    当消息的wParam 值等于DBT_DEVICEARRIVAL 时,表示Media设备被插入并且已经可用;

    如果wParam值等于DBT_DEVICEREMOVECOMPLETE,表示Media设备已经被移出。

    它们的lParam都指向一个 DEV_BROADCAST_HDR结构体,其原形如下:

    typedef struct _DEV_BROADCAST_HDR {
    DWORD dbch_size;
    DWORD dbch_devicetype;
    DWORD dbch_reserved;
    } DEV_BROADCAST_HDR, 
    *PDEV_BROADCAST_HDR;


    这个结构体仅仅是一个“头”(HDR),其后还有附加数据,

    dbch_size表示结构体实例的字节数,当其中的dbch_devicetype字段值等于DBT_DEVTYP_VOLUME时,表示当前设备是逻辑驱动器,且lParam实际上指向的应该是DEV_BROADCAST_VOLUME 结构体实例

    typedef struct _DEV_BROADCAST_VOLUME {
    DWORD dbcv_size;
    DWORD dbcv_devicetype;
    DWORD dbcv_reserved;
    DWORD dbcv_unitmask;
    WORD dbcv_flags;
    } DEV_BROADCAST_VOLUME, 
    *PDEV_BROADCAST_VOLUME;

    其中dbcv_unitmask 字段表示当前改变的驱动器掩码,第一位表示驱动器号A,第二位表示驱动器号B,第三位表示驱动器号C,以此类推……

    dbcv_flags 表示驱动器的类别,如果等于1,则是光盘驱动器;如果是2,则是网络驱动器;如果是硬盘、U盘则都等于0

     
     
     
     
     
     
     
  • 相关阅读:
    用ruby抓取网页
    [转] 从项目管理角度看敏捷开发
    ruby学习笔记(9)
    [转] 从项目管理角度看敏捷开发
    ruby学习笔记(8)
    ruby学习笔记(7)
    [转] 什么是敏捷开发
    netbeans tomcat
    maven
    jersey
  • 原文地址:https://www.cnblogs.com/huhu0013/p/4551478.html
Copyright © 2011-2022 走看看