В настоящее время я работаю с приложением, которое имеет логику ветвления в зависимости от того, вставлен ли в систему конкретный USB-накопитель. Это делается путем опроса всех букв дисков в поисках пути в корне каждого диска.
Это работает для большинства машин, но часто это приложение запускается при запуске со вставленным USB-накопителем. Кроме того, некоторые машины работают особенно медленно, и после загрузки Windows на загрузку USB-накопителя требуется хорошая минута. В этих машинах код достигает проверки, существует ли этот диск, он не может найти диск, и выполняется неправильная ветвь.
Перед проверкой дисков можно подождать минуту. Я бы предпочел, чтобы приложение ожидало загрузки всех USB-устройств (или просто только запоминающих устройств), прежде чем проверять диски, или что-то еще более интеллектуальное.
К сожалению, я не знаком с методами, необходимыми для ожидания завершения загрузки всех USB-устройств, и с DDK в целом. Я могу увидеть, что можно зарегистрировать окно для уведомлений устройства с помощью GUID_DEVINTERFACE_USB_DEVICE
< / a>, возможно получение сообщений типа _ 2_, _ 3_ и _ 4_, отличия которого я не знаю.
Однако USB-накопитель, скорее всего, уже будет вставлен и обнаружен (но без буквы диска) в системе до выполнения программы. Таким образом, регистрироваться для получения всех уведомлений об изменении устройства не имеет смысла. Если возможно идентифицировать устройства, которые вставлены, но не загружены (возможно, с помощью SetupDiEnumDeviceInterfaces
), а затем зарегистрируйтесь для получения" загруженных "уведомлений на всех этих устройствах, это может сработать. Я ничего не знаю об этом, поэтому указатели (или пример кода) были бы чрезвычайно полезны.