Разграничение прав доступа к внешним устройствам
Стоит задача сделать программу разграничения доступа к внешним устройствам (USB-накопителям, CD/DVD-дискам и т. д.).
Имеется список пользователей: User1, User2.... User1, например, должен обладать правами только на чтение ВСЕХ внешних носителей, User2 - только на запись и т. д. То есть, нет разграничения на конкретные носители. Права доступа распространяются для конкретного пользователя на все носители.
Второстепенная задача - запрет/разрешение вывода на печать.
Предположительно программа будет разрабатываться как служба Windows на Microsoft Visual Studio 2010 на C# (но это не обязательно, если другими средствами данная задача будет выполняться значительно проще).
У кого есть какие идеи по реализации данных функций?
В MSDN также спрашивал. Нужны ещё мнения. Там советуют использовать групповые политики.
social.msdn.microsoft.com
Накопал материал, теперь создаю в HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows раздел RemovableStorageDevices, а в нём создаю раздел {53f5630d-b6bf-11d0-94f2-00a0c91efb8b} (он характеризует класс устройств Removable Disks, есть ещё другие, но пока на флешках экспериментирую), а там создаю 2 параметра типа DWORD: Deny_Read (1 - чтение запрещено, 0 - чтение разрешено) и Deny_Write (1 - запись запрещена, 0 - запись разрешена).
Столкнулся с некоторыми трудностями:
1) изменение значений действует для всех пользователей (это ещё не так страшно, так как при входе в систему можно определить, какой пользователь выполнил вход и внести соответствующие изменения в реестр согласно политике разграничения доступа, и не так важно, что эти изменения коснутся всех пользователей, так как предполагается, что 2 и более пользователей одновременно в системе не будут работать);
2) чтобы изменения адекватно вступили в силу, потребуется перезагрузка или выход из системы и вход под тем же пользователем (то есть User1 входит в систему, программа вносит изменения в реестр и принудительно выходит из системы, User1 опять должен войти в систему, а это несколько "коряво");
3) испробовал все 4 варианта возможных значений Deny_Read и Deny_Write, все отработали на ура кроме одного: когда Deny_Read = 1, а Deny_Write = 0, то запись всё равно запрещена, то есть при запрещённом чтении, но разрешённой записи, запись всё равно нельзя производить.
Какие способы реализации данной задачи, а также способы преодоления описанных трудностей вы можете предложить?
Ну если спецы самого лучшего софта не могли Вам дать вразумительного ответа, то куда нам.