Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

CD/DVD программный eject

262
10 февраля 2006 года
Iktomy
1.2K / / 11.10.2004
Мож кто нить сталкивался? Есть такой обработчик нажатия кнопки:
Код:
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;  
}

И подключенный хедер - Winioctl.h

При нажатии кнопки, когда ожидается выезд лотка привода для компашек, выдается ошибка: инструкция по адресу 0x0012fe97 обратилась к памяти по адресу 0x00000002, память не может быть "written".
Мож все от того, что у меня еще два виртуальных привода?
324
10 февраля 2006 года
AndreySar
532 / / 01.08.2004
Цитата:
Originally posted by Iktomy
Мож кто нить сталкивался? Есть такой обработчик нажатия кнопки:
Код:
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;  
}

И подключенный хедер - Winioctl.h

При нажатии кнопки, когда ожидается выезд лотка привода для компашек, выдается ошибка: инструкция по адресу 0x0012fe97 обратилась к памяти по адресу 0x00000002, память не может быть "written".
Мож все от того, что у меня еще два виртуальных привода?



А тебе именно так надо открывать лоток CD? Потому что есть "стандартные" способы для этого.

262
10 февраля 2006 года
Iktomy
1.2K / / 11.10.2004
Цитата:
Originally posted by AndreySar
А тебе именно так надо открывать лоток CD? Потому что есть "стандартные" способы для этого.


Что ты подрозумаваешь под "стандартными" способами? Просвети уж меня неразумного.

351
10 февраля 2006 года
PitxBull
633 / / 22.12.2004
Цитата:
Originally posted by Iktomy
Мож кто нить сталкивался? Есть такой обработчик нажатия кнопки:
Код:
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;  
}

И подключенный хедер - Winioctl.h

При нажатии кнопки, когда ожидается выезд лотка привода для компашек, выдается ошибка: инструкция по адресу 0x0012fe97 обратилась к памяти по адресу 0x00000002, память не может быть "written".
Мож все от того, что у меня еще два виртуальных привода?


так ты посмотри в отладке в какой именно строке твоего кода выдается эта ошибка. Наверняка это никак не связано с кол-вом приводов.

351
10 февраля 2006 года
PitxBull
633 / / 22.12.2004
Цитата:
Originally posted by Iktomy
Мож кто нить сталкивался? Есть такой обработчик нажатия кнопки:
Код:
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;  
}

И подключенный хедер - Winioctl.h

При нажатии кнопки, когда ожидается выезд лотка привода для компашек, выдается ошибка: инструкция по адресу 0x0012fe97 обратилась к памяти по адресу 0x00000002, память не может быть "written".
Мож все от того, что у меня еще два виртуальных привода?



у меня твой сампл прекрасно работает. Виртуальные приводы у меня тоже есть. Наверняка ты просто путь неправильно указал. Проверь.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог