GetVolumeInformationW зависает при быстром подключении и отключении USB - PullRequest
0 голосов
/ 10 сентября 2018

Я пытаюсь определить, доступна ли файловая система, прежде чем подключаться к ней, на примере microsofts minispy. Короче говоря, мне предоставлен путь к имени устройства, например \Device\HarddiskVolume4\. Я подумал, что мог бы использовать FilterGetDosName, чтобы получить корневой путь, который был бы непротиворечивым, а затем использовать GetVolumeInformationW, чтобы определить, действительно ли том был присоединен;

BOOL result = GetVolumeInformationW(rootPath, NULL, 0, NULL, NULL, NULL, NULL, 0);

Однако моя проблема заключается в том, что если я быстро вытащу и вытащу USB. Он застревает здесь, когда пытается получить данные, но том отключается. Как безопасно определить, подключен ли том перед подключением моего минифильтра?

1 Ответ

0 голосов
/ 17 сентября 2018

Существует функция с именем: GetLogicalDriveStringsW, чтобы получить путь к устройству, а не работать с неперспективным именем устройства, как указано в OP. После некоторой логики, которая обрабатывает каждый диск индивидуально и определяет различия, чтобы вы могли подключиться к новым устройствам, вы используете GetVolumeInformationW(letter.c_str(), NULL, NULL, NULL, NULL, NULL, NULL, NULL);

Мои другие ошибки, которые я получил при написании этого поста, не были связаны с этой проблемой. Точка: используйте GetLogicalDriveStringsW и GetVolumeInformationW.

...