<br />
<b>Warning</b>:  Undefined array key "HTTP_ACCEPT_LANGUAGE" in <b>/www/wwwroot/01xj.net/wp-content/plugins/wp-ue/main.php</b> on line <b>13</b><br />
{"id":323,"date":"2012-07-25T13:31:09","date_gmt":"2012-07-25T13:31:09","guid":{"rendered":"http:\/\/www.01xj.net\/0\/?p=323"},"modified":"2012-07-25T13:31:09","modified_gmt":"2012-07-25T13:31:09","slug":"%e7%ba%afvb%e4%bb%a3%e7%a0%81%e5%8f%96%e5%be%97%e7%a1%ac%e7%9b%98%e7%9a%84%e7%89%a9%e7%90%86%e5%ba%8f%e5%88%97%e5%8f%b7","status":"publish","type":"post","link":"https:\/\/www.01xj.net\/?p=323","title":{"rendered":"\u7eafVB\u4ee3\u7801\u53d6\u5f97\u786c\u76d8\u7684\u7269\u7406\u5e8f\u5217\u53f7"},"content":{"rendered":"<p>\u7f51\u4e0a\u6709\u5f88\u591a\u83b7\u53d6\u786c\u76d8\u5e8f\u5217\u53f7\u7684\u4ee3\u7801\uff0c\u4f46\u5927\u90e8\u5206\u90fd\u53ea\u80fd\u53d6\u5f97\u903b\u8f91\u5206\u533a\u7684\u5e8f\u5217\u53f7\uff0c\u800c\u4e0d\u80fd\u53d6\u5f97\u786c\u76d8\u7684\u7269\u7406\u5e8f\u5217\u53f7\u3002\u6211\u4eec\u77e5\u9053\uff0c\u903b\u8f91\u5206\u533a\u7684\u5e8f\u5217\u53f7\u662fFORMAT\u65f6\u4ea7\u751f\u7684\uff0c\u91cd\u65b0FORMAT\u5c06\u4f1a\u6539\u53d8\u3002\u8fd9\u5bf9\u4e8e\u8981\u6c42\u552f\u4e00\u8bc6\u522b\u7801\u7684\u7a0b\u5f0f\u6765\u8bf4\u662f\u81f4\u547d\u7684\u3002\u8fd9\u6bb5\u4ee3\u7801\u5229\u7528API\u53ef\u4ee5\u53d6\u5f97\u7269\u7406\u786c\u76d8\u7684\u5f88\u591a\u7279\u6027\uff0c\u5305\u62ec\u786c\u76d8\u51fa\u5382\u65f6\u7684\u552f\u4e00\u7f16\u53f7\u3002\u8fd9\u6bb5\u4ee3\u7801\u6211\u662f\u4eceCSDN\u8bba\u575b\u83b7\u5f97\uff0c\u539f\u4f5c\u8005\u4e0d\u8be6\u3002\u6211\u5c06\u5176\u7a0d\u505a\u4fee\u6539\u548c\u589e\u6dfb\uff0c\u72ec\u7acb\u51fa\u4e24\u4e2a\u5e38\u7528\u7684\u51fd\u6570\uff1aGetDiskVolume \u3001GetHardDiskInfo\u00a0 &#8230;&#8230;<\/p>\n<p>&#8216;============================================<br \/>\n&#8216;\u6a21\u5757\u529f\u80fd: \u53d6\u5f97\u786c\u76d8\u7684\u4fe1\u606f<br \/>\n&#8216;\u7f16\u00a0\u00a0\u00a0 \u7a0b\uff1a\u6765\u81ea\u4e92\u8054\u7f51\uff0c\u963f\u52c7\u4fee\u6539<br \/>\n&#8216;\u66f4\u65b0\u65e5\u671f\uff1a2005\/7\/8<br \/>\n&#8216;\u8c03\u7528\u65b9\u6cd5:<br \/>\n&#8216;\u00a0\u00a0 GetDiskVolume() \u53d6\u5f97\u903b\u8f91\u76d8\u7684\u5e8f\u5217\u53f7<br \/>\n&#8216;\u00a0\u00a0 GetHardDiskInfo() \u53d6\u5f97\u7269\u7406\u76d8\u7684\u578b\u53f7\u6216\u5e8f\u5217\u53f7<br \/>\n&#8216;============================================<\/p>\n<p>Private Const MAX_IDE_DRIVES As Long = 4\u00a0\u00a0 &#8216; Max number of drives assuming primary\/secondary, master\/slave topology<br \/>\nPrivate Const READ_ATTRIBUTE_BUFFER_SIZE As Long = 512<br \/>\nPrivate Const IDENTIFY_BUFFER_SIZE As Long = 512<br \/>\nPrivate Const READ_THRESHOLD_BUFFER_SIZE As Long = 512<br \/>\nPrivate Const DFP_GET_VERSION As Long = &amp;H74080<br \/>\nPrivate Const DFP_SEND_DRIVE_COMMAND As Long = &amp;H7C084<br \/>\nPrivate Const DFP_RECEIVE_DRIVE_DATA As Long = &amp;H7C088<\/p>\n<p>Private Type GETVERSIONOUTPARAMS<br \/>\n\u00a0\u00a0\u00a0 bVersion As Byte\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &#8216; Binary driver version.<br \/>\n\u00a0\u00a0\u00a0 bRevision As Byte\u00a0\u00a0\u00a0\u00a0\u00a0 &#8216; Binary driver revision.<br \/>\n\u00a0\u00a0\u00a0 bReserved As Byte\u00a0\u00a0\u00a0\u00a0\u00a0 &#8216; Not used.<br \/>\n\u00a0\u00a0\u00a0 bIDEDeviceMap As Byte\u00a0 &#8216; Bit map of IDE devices.<br \/>\n\u00a0\u00a0\u00a0 fCapabilities As Long\u00a0 &#8216; Bit mask of driver capabilities.<br \/>\n\u00a0\u00a0\u00a0 dwReserved(3) As Long\u00a0 &#8216; For future use.<br \/>\nEnd Type<\/p>\n<p>Private Const CAP_IDE_ID_FUNCTION As Long = 1\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &#8216; ATA ID command supported<br \/>\nPrivate Const CAP_IDE_ATAPI_ID As Long = 2\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &#8216; ATAPI ID command supported<br \/>\nPrivate Const CAP_IDE_EXECUTE_SMART_FUNCTION As Long = 4\u00a0\u00a0\u00a0 &#8216; SMART commannds supported<\/p>\n<p>Private Type IDEREGS<br \/>\n\u00a0\u00a0\u00a0 bFeaturesReg As Byte\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &#8216; Used for specifying SMART &#8220;commands&#8221;.<br \/>\n\u00a0\u00a0\u00a0 bSectorCountReg As Byte\u00a0\u00a0\u00a0 &#8216; IDE sector count register<br \/>\n\u00a0\u00a0\u00a0 bSectorNumberReg As Byte\u00a0\u00a0 &#8216; IDE sector number register<br \/>\n\u00a0\u00a0\u00a0 bCylLowReg As Byte\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &#8216; IDE low order cylinder value<br \/>\n\u00a0\u00a0\u00a0 bCylHighReg As Byte\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &#8216; IDE high order cylinder value<br \/>\n\u00a0\u00a0\u00a0 bDriveHeadReg As Byte\u00a0\u00a0\u00a0\u00a0\u00a0 &#8216; IDE drive\/head register<br \/>\n\u00a0\u00a0\u00a0 bCommandReg As Byte\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &#8216; Actual IDE command.<br \/>\n\u00a0\u00a0\u00a0 bReserved As Byte\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &#8216; reserved for future use.\u00a0 Must be zero.<br \/>\nEnd Type<\/p>\n<p>Private Type SENDCMDINPARAMS<br \/>\n\u00a0\u00a0\u00a0 cBufferSize As Long\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &#8216; Buffer size in bytes<br \/>\n\u00a0\u00a0\u00a0 irDriveRegs As IDEREGS\u00a0\u00a0\u00a0\u00a0 &#8216; Structure with drive register values.<br \/>\n\u00a0\u00a0\u00a0 bDriveNumber As Byte\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &#8216; Physical drive number to send<br \/>\n\u00a0\u00a0\u00a0 &#8216; command to (0,1,2,3).<br \/>\n\u00a0\u00a0\u00a0 bReserved(2) As Byte\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &#8216; Reserved for future expansion.<br \/>\n\u00a0\u00a0\u00a0 dwReserved(3) As Long\u00a0\u00a0\u00a0\u00a0\u00a0 &#8216; For future use.<br \/>\n\u00a0\u00a0\u00a0 bBuffer(0) As Byte\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &#8216; Input buffer.<br \/>\nEnd Type<\/p>\n<p>Private Const IDE_ATAPI_ID As Long = &amp;HA1\u00a0 &#8216; Returns ID sector for ATAPI.<br \/>\nPrivate Const IDE_ID_FUNCTION As Long = &amp;HEC\u00a0 &#8216; Returns ID sector for ATA.<br \/>\nPrivate Const IDE_EXECUTE_SMART_FUNCTION As Long = &amp;HB0\u00a0 &#8216; Performs SMART cmd.<br \/>\nPrivate Const SMART_CYL_LOW As Long = &amp;H4F<br \/>\nPrivate Const SMART_CYL_HI As Long = &amp;HC2<\/p>\n<p>Private Type DRIVERSTATUS<br \/>\n\u00a0\u00a0\u00a0 bDriverError As Byte\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &#8216; Error code from driver,<br \/>\n\u00a0\u00a0\u00a0 bIDEStatus As Byte\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &#8216; Contents of IDE Error register.<br \/>\n\u00a0\u00a0\u00a0 bReserved(1) As Byte\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &#8216; Reserved for future expansion.<br \/>\n\u00a0\u00a0\u00a0 dwReserved(1) As Long\u00a0\u00a0\u00a0\u00a0\u00a0 &#8216; Reserved for future expansion.<br \/>\nEnd Type<\/p>\n<p>Private Const SMART_NO_ERROR As Long = 0\u00a0 &#8216; No error<br \/>\nPrivate Const SMART_IDE_ERROR As Long = 1\u00a0 &#8216; Error from IDE controller<br \/>\nPrivate Const SMART_INVALID_FLAG As Long = 2\u00a0 &#8216; Invalid command flag<br \/>\nPrivate Const SMART_INVALID_COMMAND As Long = 3\u00a0 &#8216; Invalid command byte<br \/>\nPrivate Const SMART_INVALID_BUFFER As Long = 4\u00a0 &#8216; Bad buffer (null, invalid addr..)<br \/>\nPrivate Const SMART_INVALID_DRIVE As Long = 5\u00a0 &#8216; Drive number not valid<br \/>\nPrivate Const SMART_INVALID_IOCTL As Long = 6\u00a0\u00a0 &#8216; Invalid IOCTL<br \/>\nPrivate Const SMART_ERROR_NO_MEM As Long = 7\u00a0 &#8216; Could not lock user&#8217;s buffer<br \/>\nPrivate Const SMART_INVALID_REGISTER As Long = 8\u00a0 &#8216; Some IDE Register not valid<br \/>\nPrivate Const SMART_NOT_SUPPORTED As Long = 9\u00a0 &#8216; Invalid cmd flag set<br \/>\nPrivate Const SMART_NO_IDE_DEVICE As Long = 10 &#8216; Cmd issued to device not present<\/p>\n<p>Private Type SENDCMDOUTPARAMS<br \/>\n\u00a0\u00a0\u00a0 cBufferSize As Long\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &#8216; Size of bBuffer in bytes<br \/>\n\u00a0\u00a0\u00a0 drvStatus As DRIVERSTATUS\u00a0 &#8216; Driver status structure.<br \/>\n\u00a0\u00a0\u00a0 bBuffer(0) As Byte\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &#8216; Buffer of arbitrary length in which to store the data read from the\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &#8216; drive.<br \/>\nEnd Type<\/p>\n<p>Private Const SMART_READ_ATTRIBUTE_VALUES As Long = &amp;HD0\u00a0\u00a0\u00a0 &#8216; ATA4: Renamed<br \/>\nPrivate Const SMART_READ_ATTRIBUTE_THRESHOLDS As Long = &amp;HD1\u00a0\u00a0\u00a0 &#8216; Obsoleted in ATA4!<br \/>\nPrivate Const SMART_ENABLE_DISABLE_ATTRIBUTE_AUTOSAVE As Long = &amp;HD2<br \/>\nPrivate Const SMART_SAVE_ATTRIBUTE_VALUES As Long = &amp;HD3<br \/>\nPrivate Const SMART_EXECUTE_OFFLINE_IMMEDIATE As Long = &amp;HD4\u00a0\u00a0\u00a0 &#8216; ATA4<br \/>\nPrivate Const SMART_ENABLE_SMART_OPERATIONS As Long = &amp;HD8<br \/>\nPrivate Const SMART_DISABLE_SMART_OPERATIONS As Long = &amp;HD9<br \/>\nPrivate Const SMART_RETURN_SMART_STATUS As Long = &amp;HDA<\/p>\n<p>Private Type DRIVEATTRIBUTE<br \/>\n\u00a0\u00a0\u00a0 bAttrID As Byte\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &#8216; Identifies which attribute<br \/>\n\u00a0\u00a0\u00a0 wStatusFlags As Integer\u00a0\u00a0\u00a0 &#8216; see bit definitions below<br \/>\n\u00a0\u00a0\u00a0 bAttrValue As Byte\u00a0\u00a0\u00a0\u00a0 &#8216; Current normalized value<br \/>\n\u00a0\u00a0\u00a0 bWorstValue As Byte\u00a0\u00a0\u00a0 &#8216; How bad has it ever been?<br \/>\n\u00a0\u00a0\u00a0 bRawValue(5) As Byte\u00a0\u00a0 &#8216; Un-normalized value<br \/>\n\u00a0\u00a0\u00a0 bReserved As Byte\u00a0\u00a0\u00a0\u00a0\u00a0 &#8216; &#8230;<br \/>\nEnd Type<\/p>\n<p>Private Type ATTRTHRESHOLD<br \/>\n\u00a0\u00a0\u00a0 bAttrID As Byte\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &#8216; Identifies which attribute<br \/>\n\u00a0\u00a0\u00a0 bWarrantyThreshold As Byte &#8216; Triggering value<br \/>\n\u00a0\u00a0\u00a0 bReserved(9) As Byte\u00a0\u00a0\u00a0\u00a0\u00a0 &#8216; &#8230;<br \/>\nEnd Type<\/p>\n<p>Private Type IDSECTOR<br \/>\n\u00a0\u00a0\u00a0 wGenConfig As Integer<br \/>\n\u00a0\u00a0\u00a0 wNumCyls As Integer<br \/>\n\u00a0\u00a0\u00a0 wReserved As Integer<br \/>\n\u00a0\u00a0\u00a0 wNumHeads As Integer<br \/>\n\u00a0\u00a0\u00a0 wBytesPerTrack As Integer<br \/>\n\u00a0\u00a0\u00a0 wBytesPerSector As Integer<br \/>\n\u00a0\u00a0\u00a0 wSectorsPerTrack As Integer<br \/>\n\u00a0\u00a0\u00a0 wVendorUnique(2) As Integer<br \/>\n\u00a0\u00a0\u00a0 sSerialNumber(19) As Byte<br \/>\n\u00a0\u00a0\u00a0 wBufferType As Integer<br \/>\n\u00a0\u00a0\u00a0 wBufferSize As Integer<br \/>\n\u00a0\u00a0\u00a0 wECCSize As Integer<br \/>\n\u00a0\u00a0\u00a0 sFirmwareRev(7) As Byte<br \/>\n\u00a0\u00a0\u00a0 sModelNumber(39) As Byte<br \/>\n\u00a0\u00a0\u00a0 wMoreVendorUnique As Integer<br \/>\n\u00a0\u00a0\u00a0 wDoubleWordIO As Integer<br \/>\n\u00a0\u00a0\u00a0 wCapabilities As Integer<br \/>\n\u00a0\u00a0\u00a0 wReserved1 As Integer<br \/>\n\u00a0\u00a0\u00a0 wPIOTiming As Integer<br \/>\n\u00a0\u00a0\u00a0 wDMATiming As Integer<br \/>\n\u00a0\u00a0\u00a0 wBS As Integer<br \/>\n\u00a0\u00a0\u00a0 wNumCurrentCyls As Integer<br \/>\n\u00a0\u00a0\u00a0 wNumCurrentHeads As Integer<br \/>\n\u00a0\u00a0\u00a0 wNumCurrentSectorsPerTrack As Integer<br \/>\n\u00a0\u00a0\u00a0 ulCurrentSectorCapacity(3) As Byte\u00a0\u00a0\u00a0 &#8216;\u8fd9\u91cc\u53ea\u80fd\u7528byte\uff0c\u56e0\u4e3aVB\u6ca1\u6709\u65e0\u7b26\u53f7\u7684LONG\u578b\u53d8\u91cf<br \/>\n\u00a0\u00a0\u00a0 wMultSectorStuff As Integer<br \/>\n\u00a0\u00a0\u00a0 ulTotalAddressableSectors(3) As Byte\u00a0\u00a0 &#8216;\u8fd9\u91cc\u53ea\u80fd\u7528byte\uff0c\u56e0\u4e3aVB\u6ca1\u6709\u65e0\u7b26\u53f7\u7684LONG\u578b\u53d8\u91cf<br \/>\n\u00a0\u00a0\u00a0 wSingleWordDMA As Integer<br \/>\n\u00a0\u00a0\u00a0 wMultiWordDMA As Integer<br \/>\n\u00a0\u00a0\u00a0 bReserved(127) As Byte<br \/>\nEnd Type<\/p>\n<p>Private Const ATTR_INVALID As Long = 0<br \/>\nPrivate Const ATTR_READ_ERROR_RATE As Long = 1<br \/>\nPrivate Const ATTR_THROUGHPUT_PERF As Long = 2<br \/>\nPrivate Const ATTR_SPIN_UP_TIME As Long = 3<br \/>\nPrivate Const ATTR_START_STOP_COUNT As Long = 4<br \/>\nPrivate Const ATTR_REALLOC_SECTOR_COUNT As Long = 5<br \/>\nPrivate Const ATTR_READ_CHANNEL_MARGIN As Long = 6<br \/>\nPrivate Const ATTR_SEEK_ERROR_RATE As Long = 7<br \/>\nPrivate Const ATTR_SEEK_TIME_PERF As Long = 8<br \/>\nPrivate Const ATTR_POWER_ON_HRS_COUNT As Long = 9<br \/>\nPrivate Const ATTR_SPIN_RETRY_COUNT As Long = 10<br \/>\nPrivate Const ATTR_CALIBRATION_RETRY_COUNT As Long = 11<br \/>\nPrivate Const ATTR_POWER_CYCLE_COUNT As Long = 12<\/p>\n<p>Private Const PRE_FAILURE_WARRANTY As Long = &amp;H1<br \/>\nPrivate Const ON_LINE_COLLECTION As Long = &amp;H2<br \/>\nPrivate Const PERFORMANCE_ATTRIBUTE As Long = &amp;H4<br \/>\nPrivate Const ERROR_RATE_ATTRIBUTE As Long = &amp;H8<br \/>\nPrivate Const EVENT_COUNT_ATTRIBUTE As Long = &amp;H10<br \/>\nPrivate Const SELF_PRESERVING_ATTRIBUTE As Long = &amp;H20<\/p>\n<p>Private Const NUM_ATTRIBUTE_STRUCTS As Long = 30<br \/>\nPrivate Const INVALID_HANDLE_VALUE As Long = -1<\/p>\n<p>Private Const VER_PLATFORM_WIN32s As Long = 0<br \/>\nPrivate Const VER_PLATFORM_WIN32_WINDOWS As Long = 1<br \/>\nPrivate Const VER_PLATFORM_WIN32_NT As Long = 2<\/p>\n<p>Private Type OSVERSIONINFO<br \/>\n\u00a0\u00a0\u00a0 dwOSVersionInfoSize As Long<br \/>\n\u00a0\u00a0\u00a0 dwMajorVersion As Long<br \/>\n\u00a0\u00a0\u00a0 dwMinorVersion As Long<br \/>\n\u00a0\u00a0\u00a0 dwBuildNumber As Long<br \/>\n\u00a0\u00a0\u00a0 dwPlatformId As Long<br \/>\n\u00a0\u00a0\u00a0 szCSDVersion As String * 128\u00a0\u00a0\u00a0\u00a0\u00a0 &#8216;\u00a0 Maintenance string for PSS usage<br \/>\nEnd Type<\/p>\n<p>Private Const CREATE_NEW As Long = 1<br \/>\nPrivate Const GENERIC_READ As Long = &amp;H80000000<br \/>\nPrivate Const GENERIC_WRITE As Long = &amp;H40000000<br \/>\nPrivate Const FILE_SHARE_READ As Long = &amp;H1<br \/>\nPrivate Const FILE_SHARE_WRITE As Long = &amp;H2<br \/>\nPrivate Const OPEN_EXISTING\u00a0 As Long = 3<\/p>\n<p>Private m_DiskInfo As IDSECTOR<\/p>\n<p>Private Declare Function GetVersionEx Lib &#8220;kernel32&#8221; Alias &#8220;GetVersionExA&#8221; (lpVersionInformation As OSVERSIONINFO) As Long<br \/>\nPrivate Declare Function CreateFile Lib &#8220;kernel32&#8221; Alias &#8220;CreateFileA&#8221; (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByVal lpSecurityAttributes As Long, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long<br \/>\nPrivate Declare Function DeviceIoControl Lib &#8220;kernel32&#8221; (ByVal hDevice As Long, ByVal dwIoControlCode As Long, lpInBuffer As Any, ByVal nInBufferSize As Long, lpOutBuffer As Any, ByVal nOutBufferSize As Long, lpBytesReturned As Long, ByVal lpOverlapped As Long) As Long<br \/>\nPrivate Declare Function CloseHandle Lib &#8220;kernel32&#8221; (ByVal hObject As Long) As Long<br \/>\nPrivate Declare Sub CopyMemory Lib &#8220;kernel32&#8221; Alias &#8220;RtlMoveMemory&#8221; (Destination As Any, Source As Any, ByVal Length As Long)<\/p>\n<p>Private Declare Function GetVolumeInformation Lib &#8220;kernel32&#8221; Alias &#8220;GetVolumeInformationA&#8221; (ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long) As Long<\/p>\n<p>&#8216;\u4fe1\u606f\u7c7b\u578b\u679a\u4e3e<br \/>\nEnum eumInfoType<br \/>\n\u00a0\u00a0\u00a0 hdmodelsn = 0<br \/>\n\u00a0\u00a0\u00a0 hdOnlyModel = 1<br \/>\n\u00a0\u00a0\u00a0 hdOnlySN = 2<br \/>\nEnd Enum<\/p>\n<p>&#8216;\u78c1\u76d8\u901a\u9053\u679a\u4e3e<br \/>\nEnum eumDiskNo<br \/>\n\u00a0\u00a0\u00a0 hdPrimaryMaster = 0<br \/>\n\u00a0\u00a0\u00a0 hdPrimarySlave = 1<br \/>\n\u00a0\u00a0\u00a0 hdSecondaryMaster = 2<br \/>\n\u00a0\u00a0\u00a0 hdSecondarySlave = 3<br \/>\nEnd Enum<\/p>\n<p>&#8216;\u53d6\u5f97\u903b\u8f91\u76d8\u5e8f\u5217\u53f7 (\u975e\u552f\u4e00)<br \/>\nFunction GetDiskVolume(Optional ByVal strDiskName = &#8220;C&#8221;) As String<br \/>\n\u00a0\u00a0\u00a0 Dim TempStr1 As String * 256, TempStr2 As String * 256<br \/>\n\u00a0\u00a0\u00a0 Dim TempLon1 As Long, TempLon2 As Long, GetVal As Long<br \/>\n\u00a0\u00a0\u00a0<br \/>\n\u00a0\u00a0\u00a0 Dim tmpVol As String<br \/>\n\u00a0\u00a0\u00a0<br \/>\n\u00a0\u00a0\u00a0 Call GetVolumeInformation(strDiskName &amp; &#8220;:\/&#8221;, TempStr1, 256, GetVal, TempLon1, TempLon2, TempStr2, 256)<br \/>\n\u00a0\u00a0\u00a0 If GetVal = 0 Then<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 tmpVol = &#8220;&#8221;<br \/>\n\u00a0\u00a0\u00a0 Else<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 tmpVol = Hex(GetVal)<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 tmpVol = String(8 &#8211; Len(tmpVol), &#8220;0&#8221;) &amp; tmpVol<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 tmpVol = Left(tmpVol, 4) &amp; &#8220;-&#8221; &amp; Right(tmpVol, 4)<br \/>\n\u00a0\u00a0\u00a0 End If<br \/>\n\u00a0\u00a0\u00a0 GetDiskVolume = tmpVol<br \/>\nEnd Function<\/p>\n<p>&#8216;\u53d6\u5f97\u786c\u76d8\u4fe1\u606f\uff1a\u578b\u53f7\/\u7269\u7406\u7cfb\u5217\u53f7\uff08\u552f\u4e00\uff09<br \/>\nFunction GetHardDiskInfo(Optional ByVal numDisk As eumDiskNo = hdPrimaryMaster, Optional ByVal numType As eumInfoType = hdOnlySN) As String<\/p>\n<p>\u00a0\u00a0\u00a0 If GetDiskInfo(numDisk) = 1 Then<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Dim pSerialNumber As String, pModelNumber As String<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 pSerialNumber = StrConv(m_DiskInfo.sSerialNumber, vbUnicode)<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 pModelNumber = StrConv(m_DiskInfo.sModelNumber, vbUnicode)<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Select Case numType<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Case hdOnlyModel\u00a0 &#8216;\u4ec5\u578b\u53f7<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 GetHardDiskInfo = Trim(pModelNumber)<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Case hdOnlySN\u00a0 &#8216;\u4ec5\u7cfb\u5217\u53f7<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 GetHardDiskInfo = Trim(pSerialNumber)<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Case Else\u00a0\u00a0 &#8216;\u578b\u53f7,\u7cfb\u5217\u53f7<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 GetHardDiskInfo = Trim(pModelNumber) &amp; &#8220;,&#8221; &amp; Trim(pSerialNumber)<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 End Select<br \/>\n\u00a0\u00a0\u00a0\u00a0 End If<\/p>\n<p>End Function<\/p>\n<p>Private Function OpenSMART(ByVal nDrive As Byte) As Long<br \/>\n\u00a0 Dim hSMARTIOCTL As Long<br \/>\n\u00a0 Dim hd As String<br \/>\n\u00a0 Dim VersionInfo As OSVERSIONINFO<\/p>\n<p>\u00a0\u00a0\u00a0 hSMARTIOCTL = INVALID_HANDLE_VALUE<br \/>\n\u00a0\u00a0\u00a0 VersionInfo.dwOSVersionInfoSize = Len(VersionInfo)<br \/>\n\u00a0\u00a0\u00a0 GetVersionEx VersionInfo<br \/>\n\u00a0\u00a0\u00a0 Select Case VersionInfo.dwPlatformId<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0 Case VER_PLATFORM_WIN32s<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 OpenSMART = hSMARTIOCTL<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0 Case VER_PLATFORM_WIN32_WINDOWS<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 hSMARTIOCTL = CreateFile(&#8220;<a href=\"file:\/\/\/\/.\/SMARTVSD\">\/\/.\/SMARTVSD<\/a>&#8220;, 0, 0, 0, CREATE_NEW, 0, 0)<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0 Case VER_PLATFORM_WIN32_NT<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 If nDrive &lt; MAX_IDE_DRIVES Then<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 hd = &#8220;<a href=\"file:\/\/\/\/.\/PhysicalDrive\">\/\/.\/PhysicalDrive<\/a>&#8221; &amp; nDrive<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 hSMARTIOCTL = CreateFile(hd, GENERIC_READ Or GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0)<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 End If<br \/>\n\u00a0\u00a0\u00a0 End Select<br \/>\n\u00a0\u00a0\u00a0 OpenSMART = hSMARTIOCTL<\/p>\n<p>End Function<\/p>\n<p>Private Function DoIDENTIFY(ByVal hSMARTIOCTL As Long, pSCIP As SENDCMDINPARAMS, pSCOP() As Byte, ByVal bIDCmd As Byte, ByVal bDriveNum As Byte, lpcbBytesReturned As Long) As Boolean<br \/>\n\u00a0\u00a0\u00a0 pSCIP.cBufferSize = IDENTIFY_BUFFER_SIZE<\/p>\n<p>\u00a0\u00a0\u00a0 pSCIP.irDriveRegs.bFeaturesReg = 0<br \/>\n\u00a0\u00a0\u00a0 pSCIP.irDriveRegs.bSectorCountReg = 1<br \/>\n\u00a0\u00a0\u00a0 pSCIP.irDriveRegs.bSectorNumberReg = 1<br \/>\n\u00a0\u00a0\u00a0 pSCIP.irDriveRegs.bCylLowReg = 0<br \/>\n\u00a0\u00a0\u00a0 pSCIP.irDriveRegs.bCylHighReg = 0<\/p>\n<p>\u00a0\u00a0\u00a0 pSCIP.irDriveRegs.bDriveHeadReg = &amp;HA0 Or ((bDriveNum And 1) * 2 ^ 4)<br \/>\n\u00a0\u00a0\u00a0 &#8216;<br \/>\n\u00a0\u00a0\u00a0 pSCIP.irDriveRegs.bCommandReg = bIDCmd<br \/>\n\u00a0\u00a0\u00a0 pSCIP.bDriveNumber = bDriveNum<br \/>\n\u00a0\u00a0\u00a0 pSCIP.cBufferSize = IDENTIFY_BUFFER_SIZE<br \/>\n\u00a0\u00a0 DoIDENTIFY = CBool(DeviceIoControl(hSMARTIOCTL, DFP_RECEIVE_DRIVE_DATA, _<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 pSCIP, 32, _<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 pSCOP(0), 528, _<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 lpcbBytesReturned, 0))<\/p>\n<p>End Function<\/p>\n<p>Private Function DoEnableSMART(ByVal hSMARTIOCTL As Long, pSCIP As SENDCMDINPARAMS, pSCOP As SENDCMDOUTPARAMS, ByVal bDriveNum As Byte, lpcbBytesReturned As Long) As Boolean<br \/>\n\u00a0\u00a0\u00a0 pSCIP.cBufferSize = 0<\/p>\n<p>\u00a0\u00a0\u00a0 pSCIP.irDriveRegs.bFeaturesReg = SMART_ENABLE_SMART_OPERATIONS<br \/>\n\u00a0\u00a0\u00a0 pSCIP.irDriveRegs.bSectorCountReg = 1<br \/>\n\u00a0\u00a0\u00a0 pSCIP.irDriveRegs.bSectorNumberReg = 1<br \/>\n\u00a0\u00a0\u00a0 pSCIP.irDriveRegs.bCylLowReg = SMART_CYL_LOW<br \/>\n\u00a0\u00a0\u00a0 pSCIP.irDriveRegs.bCylHighReg = SMART_CYL_HI<br \/>\n\u00a0\u00a0\u00a0 pSCIP.irDriveRegs.bDriveHeadReg = &amp;HA0 Or ((bDriveNum And 1) * 2 ^ 4)<br \/>\n\u00a0\u00a0\u00a0 pSCIP.irDriveRegs.bCommandReg = IDE_EXECUTE_SMART_FUNCTION<br \/>\n\u00a0\u00a0\u00a0 pSCIP.bDriveNumber = bDriveNum<\/p>\n<p>\u00a0\u00a0\u00a0 DoEnableSMART = CBool(DeviceIoControl(hSMARTIOCTL, DFP_SEND_DRIVE_COMMAND, _<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 pSCIP, LenB(pSCIP) &#8211; 1, _<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 pSCOP, LenB(pSCOP) &#8211; 1, _<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 lpcbBytesReturned, 0))<\/p>\n<p>End Function<\/p>\n<p>&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br \/>\n&#8216;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br \/>\nPrivate Sub ChangeByteOrder(szString() As Byte, ByVal uscStrSize As Integer)<\/p>\n<p>\u00a0 Dim i As Integer<br \/>\n\u00a0 Dim bTemp As Byte<\/p>\n<p>\u00a0\u00a0\u00a0 For i = 0 To uscStrSize &#8211; 1 Step 2<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 bTemp = szString(i)<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 szString(i) = szString(i + 1)<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 szString(i + 1) = bTemp<br \/>\n\u00a0\u00a0\u00a0 Next i<\/p>\n<p>End Sub<\/p>\n<p>Private Sub DisplayIdInfo(pids As IDSECTOR, pSCIP As SENDCMDINPARAMS, ByVal bIDCmd As Byte, ByVal bDfpDriveMap As Byte, ByVal bDriveNum As Byte)<\/p>\n<p>\u00a0\u00a0\u00a0 ChangeByteOrder pids.sModelNumber, UBound(pids.sModelNumber) + 1<\/p>\n<p>\u00a0\u00a0\u00a0 ChangeByteOrder pids.sFirmwareRev, UBound(pids.sFirmwareRev) + 1<\/p>\n<p>\u00a0\u00a0\u00a0 ChangeByteOrder pids.sSerialNumber, UBound(pids.sSerialNumber) + 1<\/p>\n<p>End Sub<\/p>\n<p>Public Function GetDiskInfo(ByVal nDrive As Byte) As Long<\/p>\n<p>\u00a0 Dim hSMARTIOCTL As Long<br \/>\n\u00a0 Dim cbBytesReturned As Long<br \/>\n\u00a0 Dim VersionParams As GETVERSIONOUTPARAMS<br \/>\n\u00a0 Dim scip As SENDCMDINPARAMS<br \/>\n\u00a0 Dim scop() As Byte<br \/>\n\u00a0 Dim OutCmd As SENDCMDOUTPARAMS<br \/>\n\u00a0 Dim bDfpDriveMap As Byte<br \/>\n\u00a0 Dim bIDCmd As Byte\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &#8216; IDE or ATAPI IDENTIFY cmd<br \/>\n\u00a0 Dim uDisk As IDSECTOR<\/p>\n<p>\u00a0\u00a0\u00a0 m_DiskInfo = uDisk<br \/>\n\u00a0\u00a0\u00a0 &#8216;<br \/>\n\u00a0\u00a0\u00a0 &#8216;<br \/>\n\u00a0\u00a0\u00a0 hSMARTIOCTL = OpenSMART(nDrive)<br \/>\n\u00a0\u00a0\u00a0 If hSMARTIOCTL &lt;&gt; INVALID_HANDLE_VALUE Then<\/p>\n<p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Call DeviceIoControl(hSMARTIOCTL, DFP_GET_VERSION, ByVal 0, 0, VersionParams, Len(VersionParams), cbBytesReturned, 0)<\/p>\n<p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 If Not (VersionParams.bIDEDeviceMap \/ 2 ^ nDrive And &amp;H10) Then<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 If DoEnableSMART(hSMARTIOCTL, scip, OutCmd, nDrive, cbBytesReturned) Then<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 bDfpDriveMap = bDfpDriveMap Or 2 ^ nDrive<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 End If<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 End If<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 bIDCmd = IIf((VersionParams.bIDEDeviceMap \/ 2 ^ nDrive And &amp;H10), IDE_ATAPI_ID, IDE_ID_FUNCTION)<\/p>\n<p>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ReDim scop(LenB(OutCmd) + IDENTIFY_BUFFER_SIZE &#8211; 1) As Byte<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 If DoIDENTIFY(hSMARTIOCTL, scip, scop, bIDCmd, nDrive, cbBytesReturned) Then<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 CopyMemory m_DiskInfo, scop(LenB(OutCmd) &#8211; 4), LenB(m_DiskInfo)<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Call DisplayIdInfo(m_DiskInfo, scip, bIDCmd, bDfpDriveMap, nDrive)<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 CloseHandle hSMARTIOCTL<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 GetDiskInfo = 1<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 Exit Function &#8216;&gt;&#8212;&gt; Bottom<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 End If<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 CloseHandle hSMARTIOCTL<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 GetDiskInfo = 0<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0 Else &#8216;NOT HSMARTIOCTL&#8230;<br \/>\n\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 GetDiskInfo = -1<br \/>\n\u00a0\u00a0\u00a0 End If<\/p>\n<p>End Function<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u7f51\u4e0a\u6709\u5f88\u591a\u83b7\u53d6\u786c\u76d8\u5e8f\u5217\u53f7\u7684\u4ee3\u7801\uff0c\u4f46\u5927\u90e8\u5206\u90fd\u53ea\u80fd\u53d6\u5f97\u903b\u8f91\u5206\u533a\u7684\u5e8f\u5217\u53f7\uff0c&#46;&#46;&#46;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[21],"tags":[],"class_list":["post-323","post","type-post","status-publish","format-standard","hentry","category-vb"],"_links":{"self":[{"href":"https:\/\/www.01xj.net\/index.php?rest_route=\/wp\/v2\/posts\/323","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.01xj.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.01xj.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.01xj.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.01xj.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=323"}],"version-history":[{"count":2,"href":"https:\/\/www.01xj.net\/index.php?rest_route=\/wp\/v2\/posts\/323\/revisions"}],"predecessor-version":[{"id":325,"href":"https:\/\/www.01xj.net\/index.php?rest_route=\/wp\/v2\/posts\/323\/revisions\/325"}],"wp:attachment":[{"href":"https:\/\/www.01xj.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=323"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.01xj.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=323"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.01xj.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=323"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}