【问题标题】:Getting the disk signature as negative将磁盘签名设为负数
【发布时间】:2017-11-13 07:06:59
【问题描述】:
import wmi
wmi_connector = wmi.WMI()
def get_win_drive_mappings_locally(drivemappings):

        for physical_disk in wmi_connector.Win32_DiskDrive():
            for partition in physical_disk.associators("Win32_DiskDriveToDiskPartition"):
                for logical_disk in partition.associators("Win32_LogicalDiskToPartition"):
                 print (physical_disk.Signature)

我正在使用 wmi 来获取磁盘和签名的信息。 当我打印物理磁盘的实例时,输出如下:

instance of Win32_DiskDrive
{
        BytesPerSector = 512;
        Capabilities = {3, 4};
        CapabilityDescriptions = {"Random Access", "Supports Writing"};
        Caption = "XXXXX SCSI Disk Device";
        ConfigManagerErrorCode = 0;
        ConfigManagerUserConfig = FALSE;
        CreationClassName = "Win32_DiskDrive";
        Description = "Disk drive";
        DeviceID = "\\\\.\\PHYSICALDRIVE1";
        FirmwareRevision = "0   ";
        Index = 1;
        InterfaceType = "SCSI";
        Manufacturer = "(Standard disk drives)";
        MediaLoaded = TRUE;
        MediaType = "Fixed hard disk media";
        Model = "XXXX  SCSI Disk Device";
        Name = "\\\\.\\PHYSICALDRIVE1";
        Partitions = 1;
        PNPDeviceID = "SCSI\\DISK&XXXXX&PROD_K\\4&5393C0A&0&000100";
        SCSIBus = 0;
        SCSILogicalUnit = 0;
        SCSIPort = 2;
        SCSITargetId = 1;
        SectorsPerTrack = 63;
        SerialNumber = "XXXXX";
        Signature = **3908409726**;
        Size = "107372805120";
        Status = "OK";
        SystemCreationClassName = "Win32_ComputerSystem";
        SystemName = "SQLSERVER";
        TotalCylinders = "13054";
        TotalHeads = 255;
        TotalSectors = "209712510";
        TotalTracks = "3328770";
        TracksPerCylinder = 255;
};

但是当我打印 physical_disk.Signature 时,输出是: -386557570,我不明白哪里出了问题,预期输出是 3908409726

【问题讨论】:

    标签: windows wmi wmi-query wmic get-wmiobject


    【解决方案1】:

    -386557570 确实是 3908409726 解释为 32 位 有符号 整数(在 2 的补码算法中);可能 Python WMI 连接器将所有 32 位值解释为有符号。

    要将其解释为无符号值,请检查它是否为负数,在这种情况下添加1<<32

    def as_uint32(v):
        if v<0:
            return v + (1<<32)
        return v
    
    # ...
    print (as_uint32(physical_disk.Signature)) 
    

    【讨论】:

      猜你喜欢
      • 2012-08-27
      • 2016-05-29
      • 2012-11-16
      • 1970-01-01
      • 2013-06-11
      • 2015-02-26
      • 1970-01-01
      • 2012-03-28
      • 1970-01-01
      相关资源
      最近更新 更多