Cilt

2010-09-29 18 views
5
QueryDosDevice(L"E:", DeviceName, MAX_PATH); 

(E: bir SD kart)Cilt

DeviceName ben yana "\\.\PHYSICALDRIVE1"

+0

hedefiniz nedir? Neden böyle bir formata dönüştürmek istiyorsunuz? Yoksa sadece cihazın global endeksini elde etmek mi istiyorsunuz? –

+0

Bu bir sürücü değil, gerçekten sadece bir hacim. –

+0

WMI ile bazı bilgileri almaya çalışıyorum. Ben bilmek gerekir ki ben DeviceID ile Win32_DiskDrive sınıfından eşleştirebilirim – Cornwell

cevap

15

Birimler, disklerde bulunan bir veya daha fazla bölümden oluşur. Yani, E: sistemdeki tek bir diske mutlaka eşleşmiyor (yazılım RAID'i düşünün).

Win32'daki PhysicalDrive adlarına birimleri eşleme biçiminiz, önce birimi açıp IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS adresine gönderilir. PhsyicalDriveX gider ne

typedef struct _DISK_EXTENT { 
    DWORD   DiskNumber; 
    LARGE_INTEGER StartingOffset; 
    LARGE_INTEGER ExtentLength; 
} DISK_EXTENT, *PDISK_EXTENT; 

disknumber geçerli:

typedef struct _VOLUME_DISK_EXTENTS { 
    DWORD  NumberOfDiskExtents; 
    DISK_EXTENT Extents[ANYSIZE_ARRAY]; 
} VOLUME_DISK_EXTENTS, *PVOLUME_DISK_EXTENTS; 

kapsamlarını onları bir disk numarası vardır: Bu, hacim yayılan her bölüm için bir DISK_EXTENT giriş olan bir yapı kazandıracaktır bağlantı yapabilirsiniz yüzden sadece sprintf ile bu sayı "\\. \ PhysicalDrive% d"

-Scott

2

gibi bir sunucu "dönüştürmek" nasıl "HarddiskVolume3 \ \ Aygıt"

olduğunu Yine de WMI kullanıyorsunuz, Win32_LogicalDiskToPartition ile başlayın. Win32_LogicalDisk tarafında, Başlık, sürücü harfi olacaktır. Sonra hangi fiziksel sürücünün bu bölümü tuttuğunu görmek için Win32_DiskDriveToDiskPartition kullanın.