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

Ваш аккаунт

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

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

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

программно отмонтировать USB

86K
10 декабря 2013 года
mixa-1748
9 / / 10.12.2013
такая ситуация, у меня есть серийный номер флешки ввиде строки -

\\?\usb#vid_13fe&pid_4100#070c28670e74be11#{a5dcbf10-6530-11d2-901f-00c04fb951ed}

и есть буква этой флешки которую ей назначила система (в моем случае это F). теперь мне нужно получить дескриптор этой флешки и удалить ее, пишу следующий код:

H1 =CreateFile("\\?\usb#vid_13fe&pid_4100#070c28670e74be11#{ a5dcbf10-6530-11d2-901f-00c04fb951ed}",GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FI LE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
//H1 =CreateFile("\\.\F:",GENERIC_READ|GENERIC_WRITE,FILE_SHAR E_READ|FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);

unsigned long ReturnedBytes;
if(DeviceIoControl(H1, FSCTL_DISMOUNT_VOLUME,NULL, 0, NULL, 0, &ReturnedBytes, NULL))
{ShowMessage("USB демонтирован"); }
else
{ShowMessage (SysErrorMessage(GetLastError()));}



так вот, когда я получаю дескриптор моей флешки, подставляя туда букву флешки (закоментированая строчка), то все проходит нормально и флешка демонтируется, а когда в место буквы подставляю строчку -
\\?\usb#vid_13fe&pid_4100#070c28670e74be11#{a5dcbf10-6530-11d2-901f-00c04fb951ed}, то получается ошибка "неправильная функция". обе строчки соответствуют одной и той же флешке. что тут не так?Непонимающий?
326
10 декабря 2013 года
sadovoya
757 / / 19.11.2005
Обратные слеши не надо удваивать?
86K
10 декабря 2013 года
mixa-1748
9 / / 10.12.2013
они удвоены, просто здесь не отображается
326
11 декабря 2013 года
sadovoya
757 / / 19.11.2005
 
Код:
H1 = CreateFileA("\\\\?\\Volume{a5dcbf10-6530-11d2-901f-00c04fb951ed}",
                     GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ|FILE_SHARE_WRITE, NULL,  OPEN_EXISTING,
                     FILE_ATTRIBUTE_NORMAL, 0);
86K
11 декабря 2013 года
mixa-1748
9 / / 10.12.2013
в таком случае говорит, что неверный дискриптор.
326
12 декабря 2013 года
sadovoya
757 / / 19.11.2005
Мне рабочий дискриптор дает.
Делал так: с помощью GetVolumeNameForVolumeMountPointA() получал имя, передав букву флехи. Потом имя без завершающего слеша (так надо для CreateFile) подставлял. Проверьте, что вам выдает GetVolumeNameForVolumeMountPointA().
У меня с вашим кодом несмотря на сообщение об отмонтировании реально флеха не размонтируется (не гаснет в списке дисков).
326
13 декабря 2013 года
sadovoya
757 / / 19.11.2005
Кстати
Volume{a5dcbf10-6530-11d2-901f-00c04fb951ed}
-- не серийный номер флешки. На разных компах он будет разным.
Если мы говорим об одном и том же..
86K
19 декабря 2013 года
mixa-1748
9 / / 10.12.2013
пришли плз фрагмент кода где получалось имя с помощью GetVolumeNameForVolumeMountPointA() .
86K
19 декабря 2013 года
mixa-1748
9 / / 10.12.2013
под серийным номером я имею ввиду то что выделено жирным \?usb#vid_13fe&pid_4100#070c28670e74be11#{a5dcbf10-6530-11d2-901f-00c04fb951ed}.
326
19 декабря 2013 года
sadovoya
757 / / 19.11.2005
 
Код:
char guid_name[51];
if(GetVolumeNameForVolumeMountPointA("I:\\", guid_name, 51))
        cout << guid_name << endl;
else...
86K
21 декабря 2013 года
mixa-1748
9 / / 10.12.2013
да, если получать имя с помощью GetVolumeNameForVolumeMountPointA(), то у меня тоже не отмонтируется, хотя пишет что отмонтировалось...

а вообще задача сводится к следующему: по имеющейся букве флешки определить ее серийник (выше описано что я имею ввиду под серийником), либо наоборот, из строки с серийником (см. выше ) получить букув вставленной флешки.

я могу получить отдельно и букву вставленной флешки и серийник, но сопоставить одно другому не получается, т.е. если вставить две флешки, например они определятся как f и g и я определю оба серийника, то какой серийник какой букве принадлежит я определить не могу.

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