00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #include "stdafx.h"
00033 #include "cdrom.h"
00034
00035 CDROM::CDROM(void)
00036 : mDriveHandle(INVALID_HANDLE_VALUE)
00037 {
00038 }
00039
00040 CDROM::~CDROM(void)
00041 {
00042 }
00043
00044
00045
00046 DISK_GEOMETRY* CDROM::getDiskGeom() {
00047
00048 if (mDriveHandle == INVALID_HANDLE_VALUE) {
00049 return NULL;
00050 }
00051
00052 DWORD locBytesRead = 0;
00053
00054 BOOL locRet = DeviceIoControl( mDriveHandle,
00055 IOCTL_CDROM_GET_DRIVE_GEOMETRY,
00056 NULL,
00057 0,
00058 &mGeom,
00059 sizeof(mGeom),
00060 &locBytesRead,
00061 NULL);
00062
00063 if (locRet == FALSE) {
00064 CloseHandle(mDriveHandle);
00065 mDriveHandle = INVALID_HANDLE_VALUE;
00066 return NULL;
00067 }
00068
00069 return &mGeom;
00070
00071 }
00072 int CDROM::ejectDraw() {
00073 if (mDriveHandle == INVALID_HANDLE_VALUE) {
00074 return NO_DRIVE_HANDLE;
00075 }
00076
00077 DWORD locBytesRead = 0;
00078 BOOL locRet = DeviceIoControl( mDriveHandle,
00079 IOCTL_STORAGE_EJECT_MEDIA,
00080 NULL,
00081 0,
00082 NULL,
00083 0,
00084 &locBytesRead,
00085 NULL);
00086
00087 if (locRet == FALSE) {
00088 CloseHandle(mDriveHandle);
00089 mDriveHandle = INVALID_HANDLE_VALUE;
00090 return READ_TOC_FAILED;
00091 }
00092 return 0;
00093 }
00094 int CDROM::closeDraw() {
00095 return 0;
00096 }
00097
00098
00099 int CDROM::initDrive(string inDrive) {
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112 if ((inDrive.length() != 2) || (inDrive[1] != ':')) {
00113 return INVALID_DRIVE_STRING;
00114 }
00115
00116 if (mDriveHandle != INVALID_HANDLE_VALUE) {
00117 CloseHandle(mDriveHandle);
00118 mDriveHandle = INVALID_HANDLE_VALUE;
00119 }
00120
00121 string locDeviceString = "\\\\.\\"+inDrive;
00122
00123 mDriveHandle = CreateFile( locDeviceString.c_str(),
00124 GENERIC_READ,
00125 FILE_SHARE_READ,
00126 NULL,
00127 OPEN_EXISTING,
00128 FILE_ATTRIBUTE_READONLY,
00129 NULL);
00130
00131 if (mDriveHandle == INVALID_HANDLE_VALUE) {
00132 return CREATE_HANDLE_FAILED;
00133 }
00134
00135
00136 return 0;
00137 }
00138
00139 int CDROM::readTOC() {
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163 if (mDriveHandle == INVALID_HANDLE_VALUE) {
00164 return NO_DRIVE_HANDLE;
00165 }
00166
00167 DWORD locBytesRead = 0;
00168 BOOL locRet = DeviceIoControl( mDriveHandle,
00169 IOCTL_CDROM_READ_TOC,
00170 NULL,
00171 0,
00172 &mTOC,
00173 sizeof(CDROM_TOC),
00174 &locBytesRead,
00175 NULL);
00176
00177 if (locRet == FALSE) {
00178 CloseHandle(mDriveHandle);
00179 mDriveHandle = INVALID_HANDLE_VALUE;
00180 return READ_TOC_FAILED;
00181 }
00182
00183 return 0;
00184
00185
00186 }
00187
00188 CDROM_TOC* CDROM::getTOC() {
00189 return &mTOC;
00190
00191
00192 }