Есть ли в Windows эквивалент системы DiskArbitration в Mac OS?
Я пытаюсь написать инструмент, который монтирует некоторые внешние диски только для чтения, когда они подключены к машине. На MacOS это было довольно тривиально с платформой Disk Arbitration. Он отправляет уведомления из ОС, когда к машине подключен новый диск, и позволяет наложить вето, принять или изменить параметры монтирования (например, принудительное монтирование как доступное только для чтения и т. Д.). Есть ли аналог в Windows?
Заранее спасибо.
1 ответ
Там нет прямого эквивалента. Из соображений безопасности Windows не предоставляет коду пользовательского режима такой большой контроль (например, если вирус решит помешать вам подключить любой диск, который, как он подозревает, может содержать антивирусную программу).
WM_DEVICECHANGE
сообщение уведомляет приложения пользовательского режима о происходящем, но оно довольно ограничено - в частности, в то время как вы можете наложить вето на удаление устройства, вам не позволено много (вообще?) контролировать добавление устройства.
Вы также можете использовать RegisterDeviceNotification
для более полной информации, но я не верю, что она дает вам контроль, который вы ищете.
По крайней мере, насколько я знаю, .NET не поддерживает RegisterDeviceNotification
напрямую, поэтому, если вы хотите использовать его из C#, вам, вероятно, придется сделать это через P/Invoke.
Для большего контроля над устройствами, монтируемыми и размонтированными, вам придется написать код в режиме ядра, но, по крайней мере, из-за того, что может показаться вам немного интересным, по крайней мере, на данный момент.