В конце концов, я узнал, где я ошибался с подходом № 2.
Оказывается, по какой-то причине я неправильно установил желаемый доступ при открытии дескриптора тома с помощью CreateFile.
Правильный режим доступа - GENERIC_READ | GENERIC_WRITE
, и я проезжал 0
.После исправления ошибки я смог успешно извлечь устройство, используя DeviceIoControl - IOCTL_STORAGE_EJECT_MEDIA, а также метод # 1, используя CM_Request_Device_Eject.
Наконец, оказывается, что метод № 2 действительно является методом, используемымФункция «Извлечь» из контекстного меню оболочки.Используя этот метод, устройство реагирует правильно.