ReactOS  0.4.14-dev-552-g2fad488
format_common.cpp File Reference

Go to the source code of this file.

Functions

JS_DEVICE_TYPE CheckCDType (PCHAR m_szFile, PCHAR VendorId)
 Return CD-RW device type. More...
 
void InitDeviceList (HWND hDlg, HWND hwndControl, PADD_DEVICE CallBack)
 
HANDLE FmtAcquireDrive_ (PCHAR _Drive, CHAR Level)
 
HANDLE FmtAcquireDrive (PCHAR Drive, CHAR Level)
 
BOOLEAN FmtIsDriveAcquired (PCHAR Drive, CHAR Level)
 
VOID FmtReleaseDrive (HANDLE evt)
 

Variables

CHAR szDisc [4] = ""
 Initial drive selection from command line. More...
 
BOOL bChanger = FALSE
 

Function Documentation

◆ CheckCDType()

JS_DEVICE_TYPE CheckCDType ( PCHAR  m_szFile,
PCHAR  VendorId 
)

Return CD-RW device type.

Definition at line 13 of file format_common.cpp.

17 {
18  HANDLE hDevice;
19  CHAR szDeviceName[256];
20  CHAR ioBuf[4096];
21  ULONG RC;
22  BOOL DvdRW = false;
23  BOOL DvdpRW = false;
24  BOOL DvdRAM = false;
25  BOOL DvdpR = false;
26  BOOL DvdR = false;
27 
28  bChanger = FALSE;
29 
30  // Make string representing full path
31  sprintf(szDeviceName, "\\\\.\\%s", m_szFile);
32  if (szDeviceName[strlen(szDeviceName)-1] == '\\') szDeviceName[strlen(szDeviceName)-1] = '\0';
33 
34  // Open device volume
35  hDevice = OpenOurVolume(szDeviceName);
36 
37  if (hDevice == ((HANDLE)-1)) {
38  strcpy(VendorId,"");
39  return BUSY;
40  } else {
41 
42  // Get our cdrw.sys signature
44  &ioBuf,sizeof(GET_SIGNATURE_USER_OUT),
45  &ioBuf,sizeof(GET_SIGNATURE_USER_OUT),FALSE,NULL);
46 
47  if (RC == 1) {
48  // Get device information
50  &ioBuf,sizeof(GET_DEVICE_INFO_USER_OUT),
51  &ioBuf,sizeof(GET_DEVICE_INFO_USER_OUT),FALSE,NULL);
52  if (RC != 1) {
53  strcpy(VendorId,"Unknown Vendor");
54  } else {
55  if(((PGET_DEVICE_INFO_USER_OUT)&ioBuf)->Features & CDRW_FEATURE_CHANGER)
56  bChanger = TRUE;
57  strcpy(VendorId,(PCHAR)&(((PGET_DEVICE_INFO_USER_OUT)&ioBuf)->VendorId[0]));
58  if (((PGET_DEVICE_INFO_USER_OUT)&ioBuf)->Features & CDRW_FEATURE_GET_CFG) {
59  DvdRW = (((PGET_DEVICE_INFO_USER_OUT)&ioBuf)->Features2[0] >> PFNUM_DVDRW_RESTRICTED_OVERWRITE) & 1;
60  DvdRAM = (((PGET_DEVICE_INFO_USER_OUT)&ioBuf)->Features2[0] >> PFNUM_DVDRAM) & 1;
61  DvdpRW = (((PGET_DEVICE_INFO_USER_OUT)&ioBuf)->Features2[0] >> PFNUM_DVDpRW) & 1;
62  DvdR = (((PGET_DEVICE_INFO_USER_OUT)&ioBuf)->Features2[0] >> PFNUM_DVDR) & 1;
63  DvdpR = (((PGET_DEVICE_INFO_USER_OUT)&ioBuf)->Features2[0] >> PFNUM_DVDpR) & 1;
64  }
65  }
66 
67  // Get device capabilities
69  &ioBuf,sizeof(GET_CAPABILITIES_USER_OUT),
70  &ioBuf,sizeof(GET_CAPABILITIES_USER_OUT),FALSE,NULL);
71  if(RC != 1) {
72  CloseHandle(hDevice);
73  return OTHER;
74  }
75 
76  // Check capabilities
78  DvdRW || DvdpRW || DvdRAM) {
79 
80  if (DvdRAM || ((PGET_CAPABILITIES_USER_OUT)&ioBuf)->WriteCap & DevCap_write_dvd_ram) {
81  CloseHandle(hDevice);
82  return DVDRAM;
83  }
84 /* if (DvdR) {
85  CloseHandle(hDevice);
86  return DVDR;
87  }*/
88  if (DvdRW) {
89  CloseHandle(hDevice);
90  return DVDRW;
91  }
92  if (DvdpRW) {
93  CloseHandle(hDevice);
94  return DVDPRW;
95  }
96 /* if (DvdpR) {
97  CloseHandle(hDevice);
98  return DVDPR;
99  }*/
100  if (((PGET_CAPABILITIES_USER_OUT)&ioBuf)->WriteCap & DevCap_write_dvd_r) {
101  CloseHandle(hDevice);
102  return DVDR;
103  }
104  if (((PGET_CAPABILITIES_USER_OUT)&ioBuf)->WriteCap & DevCap_write_cd_rw) {
105  CloseHandle(hDevice);
106  return CDRW;
107  }
108  if (((PGET_CAPABILITIES_USER_OUT)&ioBuf)->WriteCap & DevCap_write_cd_r) {
109  CloseHandle(hDevice);
110  return CDR;
111  }
112  }
113  else {
114  CloseHandle(hDevice);
115  return OTHER;
116  }
117  } else {
118  strcpy(VendorId,"Unknown Vendor");
119  }
120  CloseHandle(hDevice);
121  }
122 
123  return OTHER;
124 } // end CheckCDType()
signed char * PCHAR
Definition: retypes.h:7
#define CDRW_FEATURE_CHANGER
Definition: cdrw_usr.h:1496
Definition: user_lib.h:39
#define TRUE
Definition: types.h:120
#define CloseHandle
Definition: compat.h:406
NTSTATUS NTAPI UDFPhSendIOCTL(IN ULONG IoControlCode, IN PDEVICE_OBJECT DeviceObject, IN PVOID InputBuffer, IN ULONG InputBufferLength, OUT PVOID OutputBuffer, IN ULONG OutputBufferLength, IN BOOLEAN OverrideVerify, OUT PIO_STATUS_BLOCK Iosb OPTIONAL)
Definition: env_spec.cpp:511
Definition: user_lib.h:34
Definition: user_lib.h:38
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
char CHAR
Definition: xmlstorage.h:175
#define CDRW_FEATURE_GET_CFG
Definition: cdrw_usr.h:1482
#define sprintf(buf, format,...)
Definition: sprintf.c:55
#define PFNUM_DVDR
Definition: cdrw_hw.h:3331
unsigned int BOOL
Definition: ntddk_ex.h:94
smooth NULL
Definition: ftsmooth.c:416
#define PFNUM_DVDRW_RESTRICTED_OVERWRITE
Definition: cdrw_hw.h:3333
#define PFNUM_DVDRAM
Definition: cdrw_hw.h:3332
#define DevCap_write_cd_r
Definition: cdrw_hw.h:3013
#define DevCap_write_dvd_r
Definition: cdrw_hw.h:3016
#define IOCTL_CDRW_GET_DEVICE_INFO
Definition: cdrw_usr.h:119
#define IOCTL_CDRW_GET_CAPABILITIES
Definition: cdrw_usr.h:82
#define DevCap_write_dvd_ram
Definition: cdrw_hw.h:3017
Definition: user_lib.h:35
static const WCHAR szDeviceName[]
Definition: provider.c:56
struct _GET_DEVICE_INFO_USER_OUT * PGET_DEVICE_INFO_USER_OUT
#define IOCTL_CDRW_GET_SIGNATURE
Definition: cdrw_usr.h:95
#define PFNUM_DVDpRW
Definition: cdrw_hw.h:3338
#define DevCap_write_cd_rw
Definition: cdrw_hw.h:3014
Definition: user_lib.h:47
char * strcpy(char *DstString, const char *SrcString)
Definition: utclib.c:388
unsigned int ULONG
Definition: retypes.h:1
BOOL bChanger
#define PFNUM_DVDpR
Definition: cdrw_hw.h:3339
HANDLE OpenOurVolume(PCHAR szDeviceName)
Definition: user_lib.cpp:780
Definition: user_lib.h:33

Referenced by InitDeviceList().

◆ FmtAcquireDrive()

HANDLE FmtAcquireDrive ( PCHAR  Drive,
CHAR  Level 
)

Definition at line 223 of file format_common.cpp.

227 {
228  HANDLE evt;
229 
230  evt = FmtAcquireDrive_(Drive, Level);
231  if(!evt || evt == INVALID_HANDLE_VALUE) {
232  return NULL;
233  }
234  return evt;
235 } // end FmtAcquireDrive()
#define INVALID_HANDLE_VALUE
Definition: compat.h:399
_IRQL_requires_same_ typedef _In_ ULONG _In_ UCHAR Level
Definition: wmitypes.h:55
PWCHAR Drive
Definition: chkdsk.c:73
smooth NULL
Definition: ftsmooth.c:416
HANDLE FmtAcquireDrive_(PCHAR _Drive, CHAR Level)

◆ FmtAcquireDrive_()

HANDLE FmtAcquireDrive_ ( PCHAR  _Drive,
CHAR  Level 
)

Definition at line 199 of file format_common.cpp.

203 {
204  WCHAR LockName[32];
205  HANDLE evt;
206 
207  WCHAR Drive[1];
208  Drive[0] = _Drive[0] & ~('a' ^ 'A');
209 
210  swprintf(LockName, L"DwFmtLock_%1.1S%d", Drive, Level);
211  evt = CreatePublicEvent(LockName);
212  if(!evt) {
213  return NULL;
214  }
216  CloseHandle(evt);
217  return INVALID_HANDLE_VALUE;
218  }
219  return evt;
220 } // end FmtAcquireDrive_()
#define CloseHandle
Definition: compat.h:406
#define INVALID_HANDLE_VALUE
Definition: compat.h:399
DWORD WINAPI GetLastError(VOID)
Definition: except.c:1059
_IRQL_requires_same_ typedef _In_ ULONG _In_ UCHAR Level
Definition: wmitypes.h:55
PWCHAR Drive
Definition: chkdsk.c:73
smooth NULL
Definition: ftsmooth.c:416
HANDLE CreatePublicEvent(PWCHAR EventName)
Definition: user_lib.cpp:596
__wchar_t WCHAR
Definition: xmlstorage.h:180
#define swprintf(buf, format,...)
Definition: sprintf.c:56
static const WCHAR L[]
Definition: oid.c:1250
#define ERROR_ALREADY_EXISTS
Definition: disk.h:80

Referenced by FmtAcquireDrive(), and FmtIsDriveAcquired().

◆ FmtIsDriveAcquired()

BOOLEAN FmtIsDriveAcquired ( PCHAR  Drive,
CHAR  Level 
)

Definition at line 238 of file format_common.cpp.

242 {
243  HANDLE evt;
244 
245  evt = FmtAcquireDrive_(Drive, Level);
246  if(evt == INVALID_HANDLE_VALUE) {
247  return TRUE;
248  }
249  if(evt) {
250  CloseHandle(evt);
251  }
252  return FALSE;
253 } // end FmtIsDriveAcquired()
#define TRUE
Definition: types.h:120
#define CloseHandle
Definition: compat.h:406
#define INVALID_HANDLE_VALUE
Definition: compat.h:399
_IRQL_requires_same_ typedef _In_ ULONG _In_ UCHAR Level
Definition: wmitypes.h:55
PWCHAR Drive
Definition: chkdsk.c:73
HANDLE FmtAcquireDrive_(PCHAR _Drive, CHAR Level)

◆ FmtReleaseDrive()

VOID FmtReleaseDrive ( HANDLE  evt)

Definition at line 256 of file format_common.cpp.

259 {
260  if(evt) {
261  CloseHandle(evt);
262  }
263 } // end FmtReleaseDrive()
#define CloseHandle
Definition: compat.h:406

◆ InitDeviceList()

void InitDeviceList ( HWND  hDlg,
HWND  hwndControl,
PADD_DEVICE  CallBack 
)

Intialize asbtract device list via calls to CallBack function.

Parameters
hDlgNot used.
hwndControlPassed to the CallBack function. See PADD_DEVICE.
CallBackCallback function. Called on each CD device in system.

Definition at line 132 of file format_common.cpp.

137 {
138  char Buffer[MAX_PATH] = "";
139  char VendorId[25];
140  char seps[] = ",";
141  char* token;
142  char info[MAX_PATH];
143  bool add_drive = false;
144 
145  JS_DEVICE_TYPE drive_type;
146 
147  // Get all device letter in system
149  token = (char *)&Buffer;
150  // Replace all zeroes with comma.
151  while (token != NULL) {
152  token = (char *)memchr(Buffer,'\0',MAX_PATH);
153  if (token) {
154  if (*(token-1) == ',') {
155  token = NULL;
156  } else {
157  *token=',';
158  }
159  }
160  }
161  // Parse string of drive letters separated by comma
162  token = strtok((char *)&Buffer,seps);
163  while (token != NULL) {
164  add_drive = false;
165  switch (GetDriveType(token)) {
166 /*
167  case DRIVE_FIXED:
168  add_drive = true;
169  break;
170 */
171  case DRIVE_CDROM:
172  // Determine CD/DVD-ROM type (R,RW,RAM,other)
173  drive_type = CheckCDType(token,&VendorId[0]);
174  add_drive = true;
175  break;
176  }
177  if (add_drive) {
178 
179  // Append to drive letter VendorId
181  info[strlen(token)-1]='\0';
182  strcat(info," ");
183  strcat(info,VendorId);
184 
185  BOOL bSelect = !strcmp(strupr(szDisc),strupr(token));
186  if (drive_type != OTHER) {
187  CallBack(hwndControl,token,info,MediaTypeStrings[drive_type],bSelect);
188  } else {
189  CallBack(hwndControl,token,info,"[Unsupported]",FALSE);
190  }
191 
192  }
193  // Move to the next drive letter in string
194  token = strtok(NULL,seps);
195  }
196 } // end InitDeviceList()
char * strcat(char *DstString, const char *SrcString)
Definition: utclib.c:568
#define memchr(s, c, n)
Definition: mkisofs.h:875
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
#define GetDriveType
Definition: winbase.h:3646
char * strncpy(char *DstString, const char *SrcString, ACPI_SIZE Count)
Definition: utclib.c:427
#define GetLogicalDriveStrings
Definition: winbase.h:3656
TCHAR * MediaTypeStrings[]
Definition: user_lib.cpp:25
CHAR * LPTSTR
Definition: xmlstorage.h:192
unsigned int BOOL
Definition: ntddk_ex.h:94
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat token
Definition: glfuncs.h:210
smooth NULL
Definition: ftsmooth.c:416
Definition: bufpool.h:45
_CRTIMP char *__cdecl strupr(_Inout_z_ char *_Str)
#define MAX_PATH
Definition: compat.h:26
unsigned long DWORD
Definition: ntddk_ex.h:95
JS_DEVICE_TYPE CheckCDType(PCHAR m_szFile, PCHAR VendorId)
Return CD-RW device type.
CHAR szDisc[4]
Initial drive selection from command line.
#define DRIVE_CDROM
Definition: winbase.h:251
char * strtok(char *String, const char *Delimiters)
Definition: utclib.c:338
int strcmp(const char *String1, const char *String2)
Definition: utclib.c:469
Definition: user_lib.h:33
enum _JS_DEVICE_TYPE JS_DEVICE_TYPE
CD/DVD-RW device types.

Variable Documentation

◆ bChanger

BOOL bChanger = FALSE

Definition at line 9 of file format_common.cpp.

Referenced by CheckCDType().

◆ szDisc

CHAR szDisc[4] = ""

Initial drive selection from command line.

Definition at line 8 of file format_common.cpp.

Referenced by InitDeviceList().