📄 uappcommontype.pas
字号:
unit UAppCommonType;
interface
uses
Windows;
const
CfgMgr32ModuleName = 'cfgmgr32.dll';
SetupApiModuleName = 'SetupApi.dll';
type
DEV_BROADCAST_DEVICEINTERFACE = record
dbcc_size: DWORD;
dbcc_devicetype: DWORD;
dbcc_reserved: DWORD;
dbcc_classguid: TGUID;
dbcc_name: short;
end;
DEV_BROADCAST_HDR = packed record
DBCH_Size: DWORD;
DBCH_DeviceType: DWORD;
dbch_reserved: DWORD;
end;
PDevBroadcastHdr = ^DEV_BROADCAST_HDR;
PDevBroadcastDeviceInterface = ^DEV_BROADCAST_DEVICEINTERFACE;
PDevBroadcastVolume = ^DEV_BROADCAST_VOLUME;
DEV_BROADCAST_VOLUME = packed record
dbch_size: DWORD;
dbch_devicetype: DWORD;
dbch_reserved: DWORD;
dbcv_unitmask: DWORD;
dbcv_flags: Word;
end;
STORAGE_DEVICE_NUMBER = record
DeviceType: Cardinal;
DeviceNumber: Cardinal;
PartitionNumber: Cardinal;
end;
TStorageDeviceNumber = STORAGE_DEVICE_NUMBER;
PSTORAGE_DEVICE_NUMBER = ^STORAGE_DEVICE_NUMBER;
PStorageDeviceNumber = ^TStorageDeviceNumber;
STORAGE_BUS_TYPE = (BusTypeUnknown = 00, BusTypeScsi, BusTypeAtapi,
BusTypeAta, BusType1394, BusTypeSsa, BusTypeFibre, BusTypeUsb, BusTypeRAID,
BusTypeMaxReserved = 255);
STORAGE_QUERY_TYPE = (
PropertyStandardQuery = 0, // 读取描述
PropertyExistsQuery, // 测试是否支持
PropertyMaskQuery, // 读取指定的描述
PropertyQueryMaxDefined // 验证数据
);
STORAGE_PROPERTY_ID = (
StorageDeviceProperty = 0, // 查询设备属性
StorageAdapterProperty, // 查询适配器属性
StorageDeviceIdProperty);
STORAGE_PROPERTY_QUERY = record
PropertyId: Cardinal;
QueryType: Cardinal;
AdditionalParameters: UCHAR;
end;
STORAGE_DEVICE_DESCRIPTOR = record
Version: ULONG;
Size: ULONG;
DeviceType: UCHAR;
DeviceTypeModifier: UCHAR;
RemovableMedia: Boolean;
CommandQueueing: Boolean;
VendorIdOffset: ULONG;
ProductIdOffset: ULONG;
ProductRevisionOffset: ULONG;
SerialNumberOffset: ULONG;
BusType: Cardinal;
RawPropertiesLength: ULONG;
RawDeviceProperties: UCHAR;
end;
PSTORAGE_DEVICE_DESCRIPTOR = ^STORAGE_DEVICE_DESCRIPTOR;
TUSBNotifyEvent = procedure (Sender: TObject; AUSBDevice: TObject) of object;
_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_VETO_TYPE = _PNP_VETO_TYPE;
PPNP_VETO_TYPE = ^_PNP_VETO_TYPE;
TPNPVetoType = _PNP_VETO_TYPE;
PPNPVetoType = PPNP_VETO_TYPE;
_DISK_EXTENT = record
DiskNumber: Cardinal;
StartingOffset: LARGE_INTEGER;
ExtentLength: LARGE_INTEGER;
end;
DISK_EXTENT = _DISK_EXTENT;
TDiskExtent = _DISK_EXTENT;
PDiskExtent = ^TDiskExtent;
_VOLUME_DISK_EXTENTS = record
NumberOfDiskExtents: Cardinal;
Extents: array[0..0] of TDiskExtent;
end;
VOLUME_DISK_EXTENTS = _VOLUME_DISK_EXTENTS;
TVolumeDiskExtents = _VOLUME_DISK_EXTENTS;
PVolumeDiskExtents = ^TVolumeDiskExtents;
function CM_Get_Parent(var pdnDevInst: DWORD; dnDevInst: DWORD; ulFlags: ULong):
DWord; stdcall;
external CfgMgr32ModuleName name 'CM_Get_Parent';
function CM_Get_Device_ID(dnDevInst: DWORD; Buffer: PChar; BufferLen: ULong;
ulFlags: ULong): DWord; stdcall;
external CfgMgr32ModuleName name 'CM_Get_Device_IDA';
function GetVolumeNameForVolumeMountPoint(lpszVolumeMountPoint: LPCSTR;
lpszVolumeName: LPSTR; cchBufferLength: DWORD): BOOL; stdcall;
external kernel32 name 'GetVolumeNameForVolumeMountPointA';
function CM_Get_DevNode_Status(pulStatus: PULong; pulProblemNumber: PULong;
dnDevInst: DWord; ulFlags: ULong): DWord; stdcall;
external CfgMgr32ModuleName name 'CM_Get_DevNode_Status';
function CM_Request_Device_Eject(dnDevInst: DWord; out pVetoType: TPNPVetoType;
pszVetoName: PChar; ulNameLength: ULong; ulFlags: ULong): DWord; stdcall;
external SetupApiModuleName name 'CM_Request_Device_EjectA';
function CM_Request_Device_Eject_NoUi(dnDevInst: DWord; pVetoType: PPNPVetoType;
pszVetoName: PChar; ulNameLength: ULong; ulFlags: ULong): DWord; stdcall;
external SetupApiModuleName name 'CM_Request_Device_EjectA';
const
GUID_DEVINTERFACE_VOLUME: TGUID = '{53F5630D-B6BF-11D0-94F2-00A0C91EFB8B}';
GUID_DEVINTERFACE_USB_DEVICE: TGUID =
'{A5DCBF10-6530-11D2-901F-00C04FB951ED}';
GUID_DEVINTERFACE_DISK: TGUID = '{53F56307-B6BF-11D0-94F2-00A0C91EFB8B}';
DBT_DEVICEARRIVAL = $8000; // system detected a new device
DBT_DEVICEREMOVECOMPLETE = $8004; // device is gone
DBT_DEVTYP_VOLUME = $00000002; // Logical volume
DBT_DEVTYP_DEVICEINTERFACE = $00000005; // device interface class
STORAGE_DEVICE_DESCRIPTOR_OTHERSIZE = 512;
INTERFACE_DETAIL_SIZE = 1024;
// SetupDiGetInterfaceDeviceDetail所需要的输出长度
METHOD_BUFFERED = 0;
FILE_ANY_ACCESS = 0;
FILE_DEVICE_MASS_STORAGE = $0000002D;
IOCTL_STORAGE_BASE = FILE_DEVICE_MASS_STORAGE;
IOCTL_STORAGE_QUERY_PROPERTY = ((IOCTL_STORAGE_BASE shl 16) or (FILE_ANY_ACCESS
shl 14) or ($0500 shl 2) or METHOD_BUFFERED);
IOCTL_STORAGE_GET_DEVICE_NUMBER = ((IOCTL_STORAGE_BASE shl 16) or
(FILE_ANY_ACCESS
shl 14) or ($0420 shl 2) or METHOD_BUFFERED);
IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS = $00560000;
MAX_DRIVES = 26;
CR_SUCCESS = $00000000;
CR_REMOVE_VETOED = $00000017;
DN_DISABLEABLE = $00002000; // Can be rebalanced
{$EXTERNALSYM DN_DISABLEABLE}
DN_REMOVABLE = $00004000; // Can be removed
{$EXTERNALSYM DN_REMOVABLE}
// matches cfmgr32.h CM_DEVCAP_* definitions
DEVICE_CAPABILITIES_UNKNOWN = $00000000;
DEVICE_CAPABILITIES_LOCKSUPPORTED = $00000001;
DEVICE_CAPABILITIES_EJECTSUPPORTED = $00000002;
DEVICE_CAPABILITIES_REMOVABLE = $00000004;
DEVICE_CAPABILITIES_DOCKDEVICE = $00000008;
DEVICE_CAPABILITIES_UNIQUEID = $00000010;
DEVICE_CAPABILITIES_SILENTINSTALL = $00000020;
DEVICE_CAPABILITIES_RAWDEVICEOK = $00000040;
DEVICE_CAPABILITIES_SURPRISEREMOVALOK = $00000080;
DEVICE_CAPABILITIES_HARDWAREDISABLED = $00000100;
DEVICE_CAPABILITIES_NONDYNAMIC = $00000200;
USBManagerGetDevicesSetupDiEnumDeviceInterfacesError =
'USBManager GetDevices SetupDiEnumDeviceInterfaces Error';
USBManagerGetDevicesSetupDiGetDeviceInterfaceDetailError =
'USBManager GetDevices SetupDiGetDeviceInterfaceDetail Error';
USBDiskEjectVetoFailInfo = 'USB设备弹出失败(Veto: %s)!';
USBDiskEjectFailInfo = 'USB设备弹出失败(%s)!';
USBDiskArrivalInfo = 'USB设备插入,驱动器为%s!';
USBDiskArrivalCopyConfirmInfo = '拷贝数据到USB设备吗?';
implementation
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -