Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.84/74: Рейтинг темы: голосов - 74, средняя оценка - 4.84
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069

Запрет использования usb накопителей

10.03.2011, 08:49. Показов 14395. Ответов 52
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. Уважаемые опытные программисты, подскажите команду которая позволит запрещать использование usb накопителей (флешек и т.п), а также код который разрешит использование флешки, при этом все остальные usb устройства должны работать. Думаю можно сделать путем отключения или попключения драйвера ( USBstor.inf или usbstor.sys) который подключает "флешки".
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.03.2011, 08:49
Ответы с готовыми решениями:

Запрет использования dvd привода
Доброе утро! Кто нибудь подскажите надежный способ програмно запретить или разрешить исполбзование DVD привода? :) Своими силами такая...

Как обойти запрет программой DeviceLock использования USB-накопителей?
Операционная система Win7 работаю с правами админа. Программа DeviceLock запрещает использование usb-накопителей. Флешки видит, но доступ к...

Статистика текущего использования накопителей в Windows
Как узнать статистику текущего использования накопителей в Windows? Т.е. какой процесс на сколько процентов сейчас использует диск. ...

52
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
10.03.2011, 15:39  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от koldun Посмотреть сообщение
кстати при правке ключа в реестре, перегрузка не нужна

изменения вступают в силу моментально.
У меня флешки перестают рпботать только после перезагрузки.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
10.03.2011, 15:41
koldun, таки да - без перезагрузки твой код компу - пофиг...

Добавлено через 1 минуту
Samrisbe, оно теперь везде должно работать , и у меня 2011х7
1
145 / 100 / 6
Регистрация: 11.03.2010
Сообщений: 477
10.03.2011, 15:42
ну тогда брать топор в руки, и рубать на корню процесс explorer.exe

ток не нравится мне эта затея...

Не по теме:

Кстати толькочто проверил, на ХР пашет сразу, без перегрузки. вот по поводу Vista\7 тут наверно проблема начинается.

1
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
10.03.2011, 15:56  [ТС]
Цитата Сообщение от LK Посмотреть сообщение
koldun, таки да - без перезагрузки твой код компу - пофиг...

Добавлено через 1 минуту
Samrisbe, оно теперь везде должно работать , и у меня 2011х7
Настроение подять удалось на славу, я тут ухахатался

Попробую теперь команду от уважаемого LK

Добавлено через 10 минут
[QUOTE=LK;1436364]#include <Registry.hpp>
или
#include "Registry.hpp"
Слушай, ты NiTan'ову-то статью прочти, а то совсем уже наглость какая-то получается.

И шо-то я сильно подозреваю, что вот это
C++
1
2
3
4
5
HKEY_LOCAL_MACHINE;
reg->OpenKey("SYSTEM",true);
reg->OpenKey("CurrentControlSet",true);
reg->OpenKey("Services",true);
reg->OpenKey("USBSTOR",true);
на эту команду реакция такая
ошибка - [C++ Error] Unit1.cpp(23): E2451 Undefined symbol 'reg'
0
145 / 100 / 6
Регистрация: 11.03.2010
Сообщений: 477
10.03.2011, 16:03
а тут LK спецом допустил ошибку, что бы ты наконец прочел статью про работу с реестром, и начал думать немного самостоятельно.

P.S. на ХР пашет без перегрузки. Токачто у себя проверял. наверно проблема в семерке + Виста.
1
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
10.03.2011, 16:09  [ТС]
LK достаточно прямоленейный и если захочет послать, "пошлет по прямой ссылке"
У меня XP а всеравно без перезагрузки флешки канают.

Я читаю статью и одновременно здесь...:dance3:
0
145 / 100 / 6
Регистрация: 11.03.2010
Сообщений: 477
10.03.2011, 16:13
ну значит у нас разные ХР

у меня реально пашет отключение без перегрузки.

уточни еще 1 момент, ты после правки реестра, флешку передергивал ?
а то если она была воткнута, то она продолжит работать, а если ее небыло, то уже и не появится.
1
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
10.03.2011, 16:27  [ТС]
Цитата Сообщение от koldun Посмотреть сообщение
ну значит у нас разные ХР

у меня реально пашет отключение без перегрузки.

уточни еще 1 момент, ты после правки реестра, флешку передергивал ?
а то если она была воткнута, то она продолжит работать, а если ее небыло, то уже и не появится.
Пробовал конечно.

Есть програмка devais lock бачут, так вот у нее принцип такой, узер запрещает или разрешает подключать устройства исходя из того какой символ был присвоен подключенному устройства, например запрет F будет означать что диск F не будет запускаться а следом подключенный диск D при этом работать будет.
Да если по этому поводу тоже есть статья с удовольствием прочту.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
10.03.2011, 17:59
в данном случае достаточно определить тип диска : GetDriveType - DRIVE_REMOVABLE - также можно определить и букву диска - было в разделе совсем недавно, и его метку, хотя для ЮСБ это нам побоку, и запретить к нему доступ , или банально сделать его HIDDEN .
1
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
11.03.2011, 02:51  [ТС]
В итоге я так и не понял чтоб отключать или подключать usb без перезагрузки варианты есть?
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
11.03.2011, 03:01
не парься - пусть брат по окончанию работы на компе тюкает кнопку "Отключить" - и вопрос решен, сам он с флешки целыми днями не работает, я вот свою не помню, когда вставлял с этим интернетом.

Добавлено через 3 минуты
или , как вариант, сделать автозагрузку программы, при выключении компа вырубать флешку автоматом или с запросом. танцы с бубном, конечно, но если не коммерческое приложение, сойдет, думаю.
у нас ведь как :
Сидит чукча с удочкой за берегу Тихого океана ловит рыбу, всплывает америкаская подводная лодка. Капитан открывает люк и спрашивает:
" Чукча, не видел советскую подводную лодку?"
Чукча отвечает "
Нет."
Капитан командует " Курс норд-вест." Погружается и уходят. Через минуту сплывает советская подводная лодка. Открывается люк и капитан спрашивает:
" Чукча ты не видел американскую подводную лодку?."
Чукча отвечает
"Видел"
" А куда она уплыла?"
Чукча отвечает:
"Курс норд-вест"
Какитан подумал немного, покрутил компас и говорит:
" Чукча ты не выделывайся, лучше пальцем покажи."
это я относительно решения проблем средствами Embarcadero C++ Builder ...
1
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
11.03.2011, 05:43  [ТС]
Коммерческий вариант программы тоже не исключен, и всетаки может подскажете подходящий код, я уверен что такая команда есть.



Вот это я сделал (с вашей помощью) для себя и ради интереса выложил в интернет, за две недели больше 10000 просмотров, для первого раза пойдет.
Вложения
Тип файла: rar Timer 1.51.rar (316.0 Кб, 110 просмотров)
0
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
11.03.2011, 06:15  [ТС]
Как мне сделать чтоб эта сессия заработала Session->AddPassword(PassWrd); , ато пароль ввожу а проверки на правильность пароля нет. Если есть полная заготовка функции проверки пароля, мне она тоже поможет.
0
145 / 100 / 6
Регистрация: 11.03.2010
Сообщений: 477
11.03.2011, 10:18
Цитата Сообщение от Samrisbe Посмотреть сообщение
В итоге я так и не понял чтоб отключать или подключать usb без перезагрузки варианты есть?
я реально устал уже тебе говорить про это...

находиш процес explorer.exe и убиваешь его!

после этого у тебя пропадает весь рабочий стол и все открытые проводники(возможно и программы не помню).

система сама его запустит заново( иногда достаточно долгое время).

но можно его запустить и самому:

Ctrl+Alt+Del -> taskmangr -> run -> type: explorer -> press Enter
1
 Аватар для AlexSt
61 / 60 / 9
Регистрация: 13.01.2009
Сообщений: 322
11.03.2011, 10:57
Цитата Сообщение от LK Посмотреть сообщение
в данном случае достаточно определить тип диска : GetDriveType - DRIVE_REMOVABLE - также можно определить и букву диска - было в разделе совсем недавно, и его метку, хотя для ЮСБ это нам побоку, и запретить к нему доступ , или банально сделать его HIDDEN .
Я бы сделал так.
1
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
11.03.2011, 10:58  [ТС]
Устал отдохни
Это вариант для опытного узера, я вроде как пишу удобную программу для любого пользователя, а не инструкцию для програмиста
0
 Аватар для AlexSt
61 / 60 / 9
Регистрация: 13.01.2009
Сообщений: 322
11.03.2011, 11:20
C++
1
2
3
4
5
6
7
8
9
10
11
12
void searcheresult()
{
String sim;
char * drive = new char[255];
for (int i=97;i<123;i++){
sim=char(i);
sim=sim+":\\";
if (GetDriveType(sim.c_str())==3) // если  тип драйва  удовлетворяет флешки
{
ShowMessage(sim); // то тут делаю что хочу с драйвом.
}
}
типы драйвов

незабываем подключить необходимые библиотеки

Добавлено через 14 минут
Вот в инете нашел под 2000 вин, непроверял лень копать

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
//*************************************************************
BOOL IsUSBDevice(DWORD DevInst)
{
 //****
 DWORD      size;
 
 LPBYTE     pData;
 
 BOOL       usb = FALSE;
 
 if( CM_Get_Device_ID_Size(&size,DevInst,0) == CR_SUCCESS )
 {
    if( size )
    {
        pData = (LPBYTE)GlobalAlloc(GPTR,size+1);
        if( pData )
        {
            if( CM_Get_Device_ID(DevInst,(PCHAR)pData,size+1,0) == CR_SUCCESS )
            {
                *(pData+7) = 0x00;
                if( !strcmp((char *)pData,"USBSTOR") ) usb = TRUE;
            }
 
            GlobalFree(pData);
        }
    }
 }
 
 return usb;
}
 
//*************************************************************
BOOL RemoveUSBDevice(DWORD DevInst)
{
 //****
 DWORD  Parent;
 
 CHAR   info[MAX_TEXT_SIZE];
 //
 if( IsUSBDevice(DevInst) && (CM_Get_Parent(&Parent,DevInst,0) == CR_SUCCESS) )
 {
    //
    wsprintf(info,"");
    if( CM_Request_Device_Eject(Parent,NULL,info,MAX_TEXT_SIZE,0) == CR_SUCCESS )
    {
        if( !strlen(info) ) return TRUE;
    }
 }
 
 return FALSE;
}
 
//*************************************************************
//* 
//* 
//* 
//*************************************************************
BOOL GetDriveInfo(CHAR DriveLetter, LPDWORD pDriveInstance, LPSTR pDriveName)
{
 //****
 GUID                               DiskGUID = { 0x53F56307, 0xB6BF, 0x11D0, 0x94,0xF2,0x00,0xA0,0xC9,0x1E,0xFB,0x8B };
 
 HDEVINFO                           hDevices;
 HANDLE                             hDrive; 
 HANDLE                             hVolume;
 
 CHAR                               name[MAX_TEXT_SIZE];
 BYTE                               data[MAX_TEXT_SIZE];
 
 PSP_DEVICE_INTERFACE_DETAIL_DATA   pDevInterDetailData = (PSP_DEVICE_INTERFACE_DETAIL_DATA)data;
 SP_DEVICE_INTERFACE_DATA           DevInterData;
 SP_DEVINFO_DATA                    DevInfoData;
 STORAGE_DEVICE_NUMBER              VolumeStorageDevNumber;
 STORAGE_DEVICE_NUMBER              DeviceStorageDevNumber;
 
 DWORD                              type;
 DWORD                              size;
 
 DWORD                              i;
 
 UINT                               DriveType;
 
 
 //
 wsprintf(name,"%c:\\",DriveLetter);
 DriveType = GetDriveType(name);
 if( (DriveType == DRIVE_REMOVABLE) || (DriveType == DRIVE_FIXED) )
 {
    //
    wsprintf(name,"\\\\.\\%c:",DriveLetter);
    hVolume = CreateFile(name,0,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,NULL);
    if( hVolume != INVALID_HANDLE_VALUE )
    {
        //
        if( DeviceIoControl(hVolume,IOCTL_STORAGE_GET_DEVICE_NUMBER,NULL,0,&VolumeStorageDevNumber,sizeof(STORAGE_DEVICE_NUMBER),&(size=0),NULL) )
        {
 
            //
            //
            //
 
            //
            hDevices = SetupDiGetClassDevs(&DiskGUID,NULL,NULL,DIGCF_PRESENT|DIGCF_DEVICEINTERFACE);
            if( hDevices != INVALID_HANDLE_VALUE)
            {
                //
                DevInterData.cbSize = sizeof(SP_DEVICE_INTERFACE_DATA);
 
                //
                for( i=0; SetupDiEnumDeviceInterfaces(hDevices,NULL,&DiskGUID,i,&DevInterData); i++ )
                {
                    //
                    SetupDiGetDeviceInterfaceDetail(hDevices,&DevInterData,NULL,0,&(size=0),NULL);
                    if( size && (size <= MAX_TEXT_SIZE) )
                    {
                        //
                        pDevInterDetailData->cbSize = sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA);
                        memset((void *)&DevInfoData, 0, sizeof(SP_DEVINFO_DATA));
                        DevInfoData.cbSize = sizeof(SP_DEVINFO_DATA);
 
                        //
                        if( SetupDiGetDeviceInterfaceDetail(hDevices,&DevInterData,pDevInterDetailData,size,&size,&DevInfoData) )
                        {
                            //
                            hDrive = CreateFile(pDevInterDetailData->DevicePath,0,FILE_SHARE_READ | FILE_SHARE_WRITE,NULL, OPEN_EXISTING, 0, NULL);
                            if( hDrive != INVALID_HANDLE_VALUE )
                            {
                                //
                                if( DeviceIoControl(hDrive,IOCTL_STORAGE_GET_DEVICE_NUMBER,NULL,0,&DeviceStorageDevNumber,sizeof(STORAGE_DEVICE_NUMBER),&(size=0),NULL) )
                                {
                                    //
                                    if( VolumeStorageDevNumber.DeviceNumber == DeviceStorageDevNumber.DeviceNumber )
                                    {
           
                                        //
                                        if( IsUSBDevice(DevInfoData.DevInst) )
                                        {
                                            if( SetupDiGetDeviceRegistryProperty(hDevices,&DevInfoData,SPDRP_FRIENDLYNAME,&(type=0),(BYTE *)name,MAX_TEXT_SIZE,&(size=0)) ) wsprintf(pDriveName,"%s",name);
                                            else if( SetupDiGetDeviceRegistryProperty(hDevices,&DevInfoData,SPDRP_DEVICEDESC,&(type=0),(BYTE *)name,MAX_TEXT_SIZE,&(size=0)) ) wsprintf(pDriveName,"%s",name);
                                            else wsprintf(pDriveName,"");
 
                                            CloseHandle(hDrive);
                                            SetupDiDestroyDeviceInfoList(hDevices);
                                            CloseHandle(hVolume);
 
                                            //
                                            *(pDriveInstance) = DevInfoData.DevInst;
 
                                            return TRUE;
                                        }
 
                                        else
                                        {
                                            CloseHandle(hDrive);
                                            SetupDiDestroyDeviceInfoList(hDevices);
                                            CloseHandle(hVolume);
 
                                            return FALSE;
                                        }
                                    }
                                }
 
                                CloseHandle(hDrive);
                            }
                        }
                    }
                }
 
                SetupDiDestroyDeviceInfoList(hDevices);
            }
 
            //
            //
            //
 
        }
 
        //
        CloseHandle(hVolume);
    }
 }
 
 return FALSE;
}
 
//*************************************************************
//* 
//* Старт программы
//* 
//*************************************************************
int main(int Count, char ** pArguments)
{
 //****
 DWORD      instance;
 CHAR       name[MAX_TEXT_SIZE];
 
 //
 for( CHAR d='A'; d<='Z'; d++ )
 {
    //
    if( GetDriveInfo(d,&instance,name) ) printf("%c: - %s\n",d,name);
 }
 
 return 0;
}
2
 Аватар для Samrisbe
1365 / 732 / 67
Регистрация: 28.01.2011
Сообщений: 2,069
11.03.2011, 11:56  [ТС]
Спасибо. После запуска программы ставлю флешку и ни чего не происходит, может скрипт кудато в определенное место надо вписать?


Я проверю дополнение и отпишусь. Спасибо.
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
11.03.2011, 21:01
Цитата Сообщение от Samrisbe Посмотреть сообщение
Вот это я сделал...
Для первого раза ты кой-чего не предусмотрел - см. картинку ниже - вырубилось только через ALT+CTRL+DEL - так быть не должно. Если программа работает, это не значит, что она работает всегда.
Миниатюры
Запрет использования usb накопителей  
1
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
11.03.2011, 21:08
Цитата Сообщение от Samrisbe Посмотреть сообщение
1. Устал отдохни
2. Это вариант для опытного узера, я вроде как пишу удобную программу для любого пользователя, а не инструкцию для програмиста
1. Человек тебе дело советует.
2. Он же, koldun, указал пальцем
находиш процес explorer.exe и убиваешь его!
- программно, естественно, в твоей программе, а пользователь должен видеть только пимпочку.
Хотя, имхо, в данном случае это не самый лучший вариант.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.03.2011, 21:08
Помогаю со студенческими работами здесь

Блокировка USB накопителей
Добрый день. Нужна помощь. Пишу программу на С++. Задача такая: Нужно блокировать все usb накопители (только накопители, клавиатура/мышь...

ACDSee и автозапуск usb-накопителей
Такая проблема, что на windows XP программа ACDSee отключает автозапуск usb-устройств, на мой взгляд проблема не то, чтобы не должна...

Обход блокировки usb накопителей
В компьютер подключаются только накопители, предварительно &quot;зарегистрированные&quot; в IT службе. Вопрос, как компьютер может...

База USB накопителей с проверкой
Задумал навоять маленькую базу учета USB накопителей и решил сразу в этой базе сделать возможность проверки компов на подключение...

Мониторинг USB накопителей в локальной сети
Всем привет. Работаю над одним приложением. Приложение состоит из одной серверной части и много клиентской. На ПК клиента устанавливается...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru