Index: Include/Classes/System/IO/DriveInfo.ab
===================================================================
--- Include/Classes/System/IO/DriveInfo.ab	(revision 64)
+++ Include/Classes/System/IO/DriveInfo.ab	(revision 64)
@@ -0,0 +1,92 @@
+Enum DriveType
+	Unknown = 0
+	NoRootDirectory
+	Removable
+	Fixed
+	CDRom
+	Network
+	Ram
+End Enum
+
+Class DriveInfo
+	m_DriveName As String
+Public
+	Sub DriveInfo(driveName As String)
+		If driveName.Length <> 1 Then
+			'ArgumentException
+			debug
+		End If
+		driveName.ToUpper()
+		m_DriveName = driveName + ":\"
+	End Sub
+
+	Sub ~DriveInfo()
+	End Sub
+
+	'property
+	Function AvailableFreeSpace() As QWord
+		Dim availableFreeSpace As ULARGE_INTEGER
+		If GetDiskFreeSpaceEx(m_DriveName, availableFreeSpace, ByVal 0, ByVal 0) Then
+			Return (availableFreeSpace.HighPart << 32) Or availableFreeSpace.LowPart
+		Else
+			'IOException
+		End If
+	End Function
+
+	Function DriveFormat() As String
+		Dim systemName As String
+		systemName.ReSize(15)
+		If GetVolumeInformation(m_DriveName, NULL, NULL, NULL, NULL, NULL, systemName, 16) Then
+			Return systemName
+		Else
+			'IOException
+		End If
+	End Function
+
+	Function DriveType() As Long
+		Return GetDriveType(m_DriveName)
+	End Function
+
+	Function IsReady() As BOOL
+		If GetVolumeInformation(m_DriveName, NULL, NULL, NULL, NULL, NULL, NULL, NULL) Then
+			Return _System_TRUE
+		Else
+			Return _System_FALSE
+		End If
+	End Function
+
+	Function Name() As String
+		Return m_DriveName
+	End Function
+
+/*	Function RootDirectory() As DirectoryInfo
+	End Function*/
+
+	Function TotalFreeSpace() As QWord
+		Dim totalFreeSpace As ULARGE_INTEGER
+		If GetDiskFreeSpaceEx(m_DriveName, ByVal 0, ByVal 0, totalFreeSpace) Then
+			Return (totalFreeSpace.HighPart << 32) Or totalFreeSpace.LowPart
+		Else
+			'IOException
+		End If
+	End Function
+
+	Function TotalSize() As QWord
+		Dim totalSize As ULARGE_INTEGER
+		If GetDiskFreeSpaceEx(m_DriveName, ByVal 0, totalSize, ByVal 0) Then
+			Return (totalSize.HighPart << 32) Or totalSize.LowPart
+		Else
+			'IOException
+		End If
+	End Function
+
+	Function VolumeLabel() As String
+		Dim volumeName As String
+		volumeName.ReSize(63)
+		If GetVolumeInformation(m_DriveName, volumeName, 64, NULL, NULL, NULL, NULL, NULL) Then
+			Return volumeName
+		Else
+			'IOException
+		End If
+	End Function
+End Class
