⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 emundisk.frm

📁 转载 EnumDisk.VB版的 转载 EnumDisk.VB版的
💻 FRM
📖 第 1 页 / 共 3 页
字号:
VERSION 5.00
Begin VB.Form FormMain 
   Caption         =   "Form1"
   ClientHeight    =   4545
   ClientLeft      =   60
   ClientTop       =   450
   ClientWidth     =   9435
   LinkTopic       =   "Form1"
   ScaleHeight     =   4545
   ScaleWidth      =   9435
   StartUpPosition =   3  '窗口缺省
   Begin VB.CommandButton Command1 
      Caption         =   "Command1"
      Height          =   375
      Left            =   3870
      TabIndex        =   1
      Top             =   90
      Width           =   1275
   End
   Begin VB.ListBox List1 
      Height          =   3840
      Left            =   135
      TabIndex        =   0
      Top             =   540
      Width           =   9165
   End
   Begin VB.Menu File 
      Caption         =   "&File"
      Visible         =   0   'False
      Begin VB.Menu SavetoText 
         Caption         =   "保存到文件(&S)"
      End
   End
End
Attribute VB_Name = "FormMain"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit

'*************************************************************************************************
'********************   作者: 南宫飘雪                 ******************************************
'********************   Email: Joforn@sohu.com          ******************************************
'********************   QQ:    42978116                 ******************************************
'*************************************************************************************************
                                            
'查询存储设备属性的类型
Private Enum STORAGE_QUERY_TYPE
    PropertyStandardQuery = 0           '读取描述
    PropertyExistsQuery                 '测试是否支持
    PropertyMaskQuery                   '读取指定的描述
    PropertyQueryMaxDefined             '验证数据
End Enum

'存储设备的总线类型
Private Enum STORAGE_BUS_TYPE
    BusTypeUnknown = 0&
    BusTypeScsi
    BusTypeAtapi
    BusTypeAta
    BusType1394
    BusTypeSsa
    BusTypeFibre
    BusTypeUsb
    BusTypeRAID
    BusTypeMaxReserved = &H7F
End Enum

Private Type GUID
    Data1 As Long
    Data2 As Integer
    Data3 As Integer
    Data4(0 To 7) As Byte
End Type

Private Type SP_DEVICE_INTERFACE_DETAIL_DATA
    cbSize As Long
    DevicePath As String * 260
End Type

Private Type SP_DEVICE_INTERFACE_DATA
    cbSize          As Long     'taille de la structure en octets
    InterfaceClassGuid As GUID  'GUID de la classe d'interface
    Flags           As Long     'options
    Reserved        As Long     'réservé
End Type

Private Type SP_DEVINFO_DATA
    cbSize          As Long     'taille de la structure en octets
    ClassGuid       As GUID     'GUID de la classe d'installation
    DevInst         As Long     'handle utilisable par certaine fonction CM_xxx
    Reserved        As Long     'réservé
End Type

Private Type STORAGE_DEVICE_NUMBER
    dwDeviceType        As Long
    dwDeviceNumber      As Long
    dwPartitionNumber   As Long
End Type

'Private Type OVERLAPPED
'    Internal        As Long     '保留给操作系统使用。用于保存系统状态,当GetOverLappedRseult的返回值中没有设置ERROR_IO_PENDING时,本域为有效。
'    InternalHigh    As Long     '成员保留给操作系统使用。用于保存异步传输数据的长度。当GetOverLappedRseult返回TRUE时,本域为有效。
'    offset          As Long     '指定开始进行异步传输的文件的一个位置。该位置是距离文件开头处的偏移值。在调用ReadFile或WriteFile之前,必须设置此分量。
'    OffsetHigh      As Long     '指定开始异步传输处的字节偏移的高位字部分。
'    hEvent          As Long     '指向一个事件的句柄,当传输完后将其设置为信号状态。
'End Type

Private Type STORAGE_ADAPTER_DESCRIPTOR
    Version               As Long
    Size                  As Long
    MaximumTransferLength As Long
    MaximumPhysicalPages  As Long
    AlignmentMask         As Long
    AdapterUsesPio        As Byte       'As Boolean
    AdapterScansDown      As Byte       'As Boolean
    CommandQueueing       As Byte       'As Boolean
    AcceleratedTransfer   As Byte       'As Boolean
    BusType               As Byte       'As STORAGE_BUS_TYPE
    BusMajorVersion       As Integer
    BusMinorVersion       As Integer
End Type

'查询存储设备还是适配器属性
Private Enum STORAGE_PROPERTY_ID
  StorageDeviceProperty = 0&            '查询设备属性
  StorageAdapterProperty                '查询适配器属性
End Enum
    
'查询属性输入的数据结构
Private Type STORAGE_PROPERTY_QUERY
    PropertyId  As Integer              'As STORAGE_PROPERTY_ID '设备/适配器
    QueryType   As Integer              'As STORAGE_QUERY_TYPE '查询类型
    AdditionalParameters(7) As Byte     '额外的数据(仅定义了象徵性的1个字节)
End Type
    
'查询属性输出的数据结构
Private Type STORAGE_DEVICE_DESCRIPTOR
    Version             As Long         '版本
    Size                As Long         '结构大小
    DeviceType          As Byte         '设备类型
    DeviceTypeModifier  As Byte         'SCSI-2额外的设备类型
    RemovableMedia      As Byte         '是否可移动(原类型为BOOLEAN)
    CommandQueueing     As Byte         '是否支持命令队列(原类型为BOOLEAN)
    VendorIdOffset      As Long         '厂家设定值的偏移
    ProductIdOffset     As Long         '产品ID的偏移
    ProductRevisionOffset   As Long     '产品版本的偏移
    SerialNumberOffset      As Long     '序列号的偏移
    BusType             As Long         '总线类型(原类型为Integer)
    RawPropertiesLength As Long         '额外的属性数据长度
    RawDeviceProperties(0)  As Byte     '额外的属性数据(仅定义了象徵性的1个字节)
End Type

Private Type SCSI_PASS_THROUGH
    Length              As Integer
    ScsiStatus          As Byte
    PathId              As Byte
    TargetId            As Byte
    Lun                 As Byte
    CdbLength           As Byte
    SenseInfoLength     As Byte
    DataIn              As Long
    DataTransferLength  As Long
    TimeOutValue        As Long
    DataBufferOffset    As Long
    SenseInfoOffset     As Long
    Cdb(15)             As Byte
End Type

Private Type SCSI_PASS_THROUGH_WITH_BUFFERS
    SPT                 As SCSI_PASS_THROUGH
    Filler              As Long
    SenseBuf(32)        As Byte
    DataBuf(512)        As Byte
End Type

Private Enum PNP_VETO_TYPE
    PNP_VetoTypeUnknown
    PNP_VetoLegacyDevice
    PNP_VetoPendingClose
    PNP_VetoWindowsApp
    PNP_VetoWindowsService
    PNP_VetoOutstandingOpen
    PNP_VetoDevice
    PNP_VetoDriver
    PNP_VetoIllegalDeviceRequest
    PNP_VetoInsufficientPower
    PNP_VetoNonDisableable
    PNP_VetoLegacyDriver
    PNP_VetoInsufficientRights
End Enum

Private Const DebugLevel = 1

Private Const IntDevicePathLenght = 512
'Private Const DIGCF_DEFAULT = &H1           ' only valid with DIGCF_DEVICEINTERFACE
Private Const DIGCF_PRESENT = &H2
'Private Const DIGCF_ALLCLASSES = &H4
'Private Const DIGCF_PROFILE = &H8
Private Const DIGCF_DEVICEINTERFACE = &H10
Private Const DIGCF_INTERFACEDEVICE = 16
Private Const GENERIC_READ = &H80000000     '允许对设备进行读访问
Private Const GENERIC_WRITE = &H40000000    '允许对设备进行写访问
Private Const FILE_SHARE_READ = &H1         '允许读取共享
Private Const OPEN_EXISTING = 3             '文件必须已经存在。由设备提出要求
Private Const FILE_SHARE_WRITE = &H2        '允许对文件进行共享访问
Private Const IOCTL_STORAGE_BASE = &H2D&
Private Const METHOD_BUFFERED = 0&

Private Const FILE_ANY_ACCESS = 0&
Private Const FILE_READ_ACCESS = 1&
Private Const FILE_WRITE_ACCESS = 2&

Private Const CDB6GENERIC_LENGTH As Byte = 6
Private Const CDB10GENERIC_LENGTH As Byte = 10

Private Const SCSI_IOCTL_DATA_OUT As Byte = 0
Private Const SCSI_IOCTL_DATA_IN As Byte = 1
Private Const SCSI_IOCTL_DATA_UNSPECIFIED = 2
Private Const IOCTL_SCSI_PASS_THROUGH = &H4D004
Private Const IOCTL_STORAGE_QUERY_PROPERTY = &H2D1400
Private Const SCSIOP_INQUIRY = &H12&

Private Const ERROR_INVALID_DATA = 13&
Private Const ERROR_NO_MORE_ITEMS = 259&
Private Const ERROR_INSUFFICIENT_BUFFER = 122&
Private Const INVALID_HANDLE_VALUE = -1&

Private Const FORMAT_MESSAGE_FROM_SYSTEM As Long = &H1000

Private Declare Function SetupDiEnumDeviceInfo Lib "setupapi.dll" (ByVal DeviceInfoSet As Long, ByVal MemberIndex As Long, ByRef DeviceInfoData As SP_DEVINFO_DATA) As Boolean

Private Declare Function SetupDiGetDeviceRegistryProperty Lib "setupapi" Alias "SetupDiGetDeviceRegistryPropertyA" (ByVal DeviceInfoSet As Long, DeviceInfoData As SP_DEVINFO_DATA, ByVal Property As Long, ByRef PropertyRegDataType As Long, ByVal PropertyBuffer As Long, ByVal PropertyBufferSize As Long, RequiredSize As Long) As Long
Private Const SPDRP_DEVICEDESC                   As Long = (&H0)        '// DeviceDesc (R/W)
Private Const SPDRP_HARDWAREID                   As Long = (&H1)        '// HardwareID (R/W)
Private Const SPDRP_COMPATIBLEIDS                As Long = (&H2)        '// CompatibleIDs (R/W)
Private Const SPDRP_UNUSED0                      As Long = (&H3)        '// unused
Private Const SPDRP_SERVICE                      As Long = (&H4)        '// Service (R/W)
Private Const SPDRP_UNUSED1                      As Long = (&H5)        '// unused
Private Const SPDRP_UNUSED2                      As Long = (&H6)        '// unused
Private Const SPDRP_CLASS                        As Long = (&H7)        '// Class (R--tied to ClassGUID)
Private Const SPDRP_CLASSGUID                    As Long = (&H8)        '// ClassGUID (R/W)
Private Const SPDRP_DRIVER                       As Long = (&H9)        '// Driver (R/W)
Private Const SPDRP_CONFIGFLAGS                  As Long = (&HA)        '// ConfigFlags (R/W)
Private Const SPDRP_MFG                          As Long = (&HB)        '// Mfg (R/W)
Private Const SPDRP_FRIENDLYNAME                 As Long = (&HC)        '// FriendlyName (R/W)
Private Const SPDRP_LOCATION_INFORMATION         As Long = (&HD)        '// LocationInformation (R/W)
Private Const SPDRP_PHYSICAL_DEVICE_OBJECT_NAME As Long = (&HE)         '// PhysicalDeviceObjectName (R)
Private Const SPDRP_CAPABILITIES                 As Long = (&HF)        '// Capabilities (R)
Private Const SPDRP_UI_NUMBER                    As Long = (&H10)       '// UiNumber (R)
Private Const SPDRP_UPPERFILTERS                 As Long = (&H11)       '// UpperFilters (R/W)
Private Const SPDRP_LOWERFILTERS                 As Long = (&H12)       '// LowerFilters (R/W)
Private Const SPDRP_BUSTYPEGUID                  As Long = (&H13)       '// BusTypeGUID (R)
Private Const SPDRP_LEGACYBUSTYPE                As Long = (&H14)       '// LegacyBusType (R)
Private Const SPDRP_BUSNUMBER                    As Long = (&H15)       '// BusNumber (R)
Private Const SPDRP_ENUMERATOR_NAME              As Long = (&H16)       '// Enumerator Name (R)
Private Const SPDRP_SECURITY                     As Long = (&H17)       '// Security (R/W, binary form)
Private Const SPDRP_SECURITY_SDS                 As Long = (&H18)       '// Security (W, SDS form)
Private Const SPDRP_DEVTYPE                      As Long = (&H19)       '// Device Type (R/W)
Private Const SPDRP_EXCLUSIVE                    As Long = (&H1A)       '// Device is exclusive-access (R/W)
Private Const SPDRP_CHARACTERISTICS              As Long = (&H1B)       '// Device Characteristics (R/W)
Private Const SPDRP_ADDRESS                      As Long = (&H1C)       '// Device Address (R)
Private Const SPDRP_UI_NUMBER_DESC_FORMAT        As Long = (&H1D)       '// UiNumberDescFormat (R/W)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -