BOOL CMyDlg::OnEject(char *path)
{
HANDLE hDisk;
DWORD dwRc;
TCHAR tsz[8];
SECURITY_ATTRIBUTES sa;
wsprintf(tsz, TEXT("\\\\.\\%c:"), TEXT('@') + toupper(path[0]) - 'A' + 1);
sa.nLength = sizeof(sa);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;
hDisk = CreateFile(tsz, GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,&sa,
OPEN_EXISTING, FILE_FLAG_WRITE_THROUGH, NULL);
if (hDisk != INVALID_HANDLE_VALUE)
{
FlushFileBuffers(hDisk);
return DeviceIoControl(hDisk, IOCTL_DISK_EJECT_MEDIA, NULL, 0, NULL, 0,&dwRc, NULL);
}
return FALSE;
}
CD/DVD программный eject
Код:
И подключенный хедер - Winioctl.h
При нажатии кнопки, когда ожидается выезд лотка привода для компашек, выдается ошибка: инструкция по адресу 0x0012fe97 обратилась к памяти по адресу 0x00000002, память не может быть "written".
Мож все от того, что у меня еще два виртуальных привода?
Цитата:
Originally posted by Iktomy
Мож кто нить сталкивался? Есть такой обработчик нажатия кнопки:
И подключенный хедер - Winioctl.h
При нажатии кнопки, когда ожидается выезд лотка привода для компашек, выдается ошибка: инструкция по адресу 0x0012fe97 обратилась к памяти по адресу 0x00000002, память не может быть "written".
Мож все от того, что у меня еще два виртуальных привода?
Мож кто нить сталкивался? Есть такой обработчик нажатия кнопки:
Код:
BOOL CMyDlg::OnEject(char *path)
{
HANDLE hDisk;
DWORD dwRc;
TCHAR tsz[8];
SECURITY_ATTRIBUTES sa;
wsprintf(tsz, TEXT("\\\\.\\%c:"), TEXT('@') + toupper(path[0]) - 'A' + 1);
sa.nLength = sizeof(sa);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;
hDisk = CreateFile(tsz, GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,&sa,
OPEN_EXISTING, FILE_FLAG_WRITE_THROUGH, NULL);
if (hDisk != INVALID_HANDLE_VALUE)
{
FlushFileBuffers(hDisk);
return DeviceIoControl(hDisk, IOCTL_DISK_EJECT_MEDIA, NULL, 0, NULL, 0,&dwRc, NULL);
}
return FALSE;
}
{
HANDLE hDisk;
DWORD dwRc;
TCHAR tsz[8];
SECURITY_ATTRIBUTES sa;
wsprintf(tsz, TEXT("\\\\.\\%c:"), TEXT('@') + toupper(path[0]) - 'A' + 1);
sa.nLength = sizeof(sa);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;
hDisk = CreateFile(tsz, GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,&sa,
OPEN_EXISTING, FILE_FLAG_WRITE_THROUGH, NULL);
if (hDisk != INVALID_HANDLE_VALUE)
{
FlushFileBuffers(hDisk);
return DeviceIoControl(hDisk, IOCTL_DISK_EJECT_MEDIA, NULL, 0, NULL, 0,&dwRc, NULL);
}
return FALSE;
}
И подключенный хедер - Winioctl.h
При нажатии кнопки, когда ожидается выезд лотка привода для компашек, выдается ошибка: инструкция по адресу 0x0012fe97 обратилась к памяти по адресу 0x00000002, память не может быть "written".
Мож все от того, что у меня еще два виртуальных привода?
А тебе именно так надо открывать лоток CD? Потому что есть "стандартные" способы для этого.
Цитата:
Originally posted by AndreySar
А тебе именно так надо открывать лоток CD? Потому что есть "стандартные" способы для этого.
А тебе именно так надо открывать лоток CD? Потому что есть "стандартные" способы для этого.
Что ты подрозумаваешь под "стандартными" способами? Просвети уж меня неразумного.
Цитата:
Originally posted by Iktomy
Мож кто нить сталкивался? Есть такой обработчик нажатия кнопки:
И подключенный хедер - Winioctl.h
При нажатии кнопки, когда ожидается выезд лотка привода для компашек, выдается ошибка: инструкция по адресу 0x0012fe97 обратилась к памяти по адресу 0x00000002, память не может быть "written".
Мож все от того, что у меня еще два виртуальных привода?
Мож кто нить сталкивался? Есть такой обработчик нажатия кнопки:
Код:
BOOL CMyDlg::OnEject(char *path)
{
HANDLE hDisk;
DWORD dwRc;
TCHAR tsz[8];
SECURITY_ATTRIBUTES sa;
wsprintf(tsz, TEXT("\\\\.\\%c:"), TEXT('@') + toupper(path[0]) - 'A' + 1);
sa.nLength = sizeof(sa);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;
hDisk = CreateFile(tsz, GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,&sa,
OPEN_EXISTING, FILE_FLAG_WRITE_THROUGH, NULL);
if (hDisk != INVALID_HANDLE_VALUE)
{
FlushFileBuffers(hDisk);
return DeviceIoControl(hDisk, IOCTL_DISK_EJECT_MEDIA, NULL, 0, NULL, 0,&dwRc, NULL);
}
return FALSE;
}
{
HANDLE hDisk;
DWORD dwRc;
TCHAR tsz[8];
SECURITY_ATTRIBUTES sa;
wsprintf(tsz, TEXT("\\\\.\\%c:"), TEXT('@') + toupper(path[0]) - 'A' + 1);
sa.nLength = sizeof(sa);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;
hDisk = CreateFile(tsz, GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,&sa,
OPEN_EXISTING, FILE_FLAG_WRITE_THROUGH, NULL);
if (hDisk != INVALID_HANDLE_VALUE)
{
FlushFileBuffers(hDisk);
return DeviceIoControl(hDisk, IOCTL_DISK_EJECT_MEDIA, NULL, 0, NULL, 0,&dwRc, NULL);
}
return FALSE;
}
И подключенный хедер - Winioctl.h
При нажатии кнопки, когда ожидается выезд лотка привода для компашек, выдается ошибка: инструкция по адресу 0x0012fe97 обратилась к памяти по адресу 0x00000002, память не может быть "written".
Мож все от того, что у меня еще два виртуальных привода?
так ты посмотри в отладке в какой именно строке твоего кода выдается эта ошибка. Наверняка это никак не связано с кол-вом приводов.
Цитата:
Originally posted by Iktomy
Мож кто нить сталкивался? Есть такой обработчик нажатия кнопки:
И подключенный хедер - Winioctl.h
При нажатии кнопки, когда ожидается выезд лотка привода для компашек, выдается ошибка: инструкция по адресу 0x0012fe97 обратилась к памяти по адресу 0x00000002, память не может быть "written".
Мож все от того, что у меня еще два виртуальных привода?
Мож кто нить сталкивался? Есть такой обработчик нажатия кнопки:
Код:
BOOL CMyDlg::OnEject(char *path)
{
HANDLE hDisk;
DWORD dwRc;
TCHAR tsz[8];
SECURITY_ATTRIBUTES sa;
wsprintf(tsz, TEXT("\\\\.\\%c:"), TEXT('@') + toupper(path[0]) - 'A' + 1);
sa.nLength = sizeof(sa);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;
hDisk = CreateFile(tsz, GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,&sa,
OPEN_EXISTING, FILE_FLAG_WRITE_THROUGH, NULL);
if (hDisk != INVALID_HANDLE_VALUE)
{
FlushFileBuffers(hDisk);
return DeviceIoControl(hDisk, IOCTL_DISK_EJECT_MEDIA, NULL, 0, NULL, 0,&dwRc, NULL);
}
return FALSE;
}
{
HANDLE hDisk;
DWORD dwRc;
TCHAR tsz[8];
SECURITY_ATTRIBUTES sa;
wsprintf(tsz, TEXT("\\\\.\\%c:"), TEXT('@') + toupper(path[0]) - 'A' + 1);
sa.nLength = sizeof(sa);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;
hDisk = CreateFile(tsz, GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,&sa,
OPEN_EXISTING, FILE_FLAG_WRITE_THROUGH, NULL);
if (hDisk != INVALID_HANDLE_VALUE)
{
FlushFileBuffers(hDisk);
return DeviceIoControl(hDisk, IOCTL_DISK_EJECT_MEDIA, NULL, 0, NULL, 0,&dwRc, NULL);
}
return FALSE;
}
И подключенный хедер - Winioctl.h
При нажатии кнопки, когда ожидается выезд лотка привода для компашек, выдается ошибка: инструкция по адресу 0x0012fe97 обратилась к памяти по адресу 0x00000002, память не может быть "written".
Мож все от того, что у меня еще два виртуальных привода?
у меня твой сампл прекрасно работает. Виртуальные приводы у меня тоже есть. Наверняка ты просто путь неправильно указал. Проверь.