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

(ई: एक एसडी कार्ड है)भौतिक ड्राइव के लिए वॉल्यूम

DEVICENAME "\ डिवाइस \ HarddiskVolume3"

मैं कैसे कुछ करने के लिए "परिवर्तित" कि यह की तरह "\\.\PHYSICALDRIVE1"

+0

अपने लक्ष्य क्या है? आप इसे इस प्रारूप में क्यों परिवर्तित करना चाहते हैं? या आप बस डिवाइस की वैश्विक रूप से अद्वितीय अनुक्रमणिका प्राप्त करना चाहते हैं? –

+0

यह एक ड्राइव नहीं है, यह वास्तव में केवल एक मात्रा है। –

+0

मैं डब्लूएमआई के साथ कुछ जानकारी प्राप्त करने की कोशिश कर रहा हूं। मुझे यह जानने की ज़रूरत है कि मैं Win32_DiskDrive क्लास से DeviceID से मेल खा सकता हूं – Cornwell

उत्तर

15

वॉल्यूम एक या अधिक विभाजन से बने होते हैं, जो डिस्क पर रहते हैं। तो, ई: सिस्टम में एक डिस्क को जरूरी नहीं है (सॉफ्टवेयर RAID सोचें)।

जिस तरह से आप Win32 में भौतिक ड्राइव नामों के वॉल्यूम को मैप करते हैं, पहले वॉल्यूम खोलना है और फिर IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS भेजना है।

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

विस्तार उन में एक डिस्क नंबर है: यह आपको एक संरचना हर विभाजन के लिए एक DISK_EXTENT प्रविष्टि मात्रा तक फैला है दे देंगे

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

DiskNumber है क्या PhsyicalDriveX में चला जाता है लिंक, तो बस sprintf आप कर सकते हैं के साथ उस नंबर "\\। \ PhysicalDrive% d"

स्कॉट

2

के बाद से है आप वैसे भी WMI का उपयोग कर रहे हैं, Win32_LogicalDiskToPartition से शुरू करें। Win32_LogicalDisk तरफ, कैप्शन ड्राइव अक्षर होगा। फिर यह देखने के लिए कि भौतिक ड्राइव उस विभाजन को रखती है, Win32_DiskDriveToDiskPartition का उपयोग करें।

संबंधित मुद्दे