|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Подскажите, как реализовать программу (С++) |
|
C/C++ - Подскажите, как реализовать программу (С++)
|
Новый участник Сообщения: 5 |
Профиль | Отправить PM | Цитировать хочу реализовать программу которая должна:
1) небольшие системные файлы переносить из одной папки в другую 2) определять уникальный идентификатор Flash-накопителя VID 3) производить поиск в реестре и удалять нужные файлы желательны советы по реализации данных трёх пунктов на C++, можно с ссылкой на литературу если знаете, как реализовать данные функции на других языках (delphi i t.d) также прошу поделиться заранее спасибо |
|
Отправлено: 14:15, 25-03-2011 |
Старожил Сообщения: 154
|
Профиль | Отправить PM | Цитировать начнем с простого - п 3. есть отдельный стандартный класс для работы с реестром винды, находится в библиотеке windows.h, подробнее - тут
п.1. системный файл не отличается от обычного файла ничем, просто иногда нужны права админа чтобы его двигать. Опять же в winAPI, таже библиотека, есть стандартные функции на эту тему, подробнее ну скажем тут неплохо все расписано п.2. для работы с usb тоже скорее всего есть в winAPI чтонить типа перечислителя подключенных устройств, подробнее не скажу, такое не делал а искать лень уже. |
Отправлено: 16:57, 25-03-2011 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 5
|
Профиль | Отправить PM | Цитировать большое спасибо за 1 и 3 пункты, информация помогла для того чтобы начать реализовывать задуманное
если у кого-нибудь есть еще идеи по поводу реализации пункта 2 - определения vid накопителя, прошу поделиться |
Отправлено: 17:54, 25-03-2011 | #3 |
Старожил Сообщения: 435
|
Профиль | Отправить PM | Цитировать Информацию о железе можно получать через WMI
или можете попробовать разобраться с функцией DeviceIoControl. |
------- Отправлено: 00:06, 26-03-2011 | #4 |
Новый участник Сообщения: 5
|
Профиль | Отправить PM | Цитировать может есть у кого готовый листинг проги, которая определяет серийный номер Флешки?
|
|
Последний раз редактировалось azotvp, 26-03-2011 в 15:36. Отправлено: 09:09, 26-03-2011 | #5 |
Старожил Сообщения: 435
|
Профиль | Отправить PM | Цитировать Я так понимаю, что вы хотите отследить кто, что подключал к компьютеру.
Я бы делал так: 1. Обработал событие message WM_DEVICECHANGE и таким образом узнал, что подключено. Примеры обработки есть на диске к книге Агурова (DeviceMonitor.Delphi). 2. Если это логический диск, то через WMI из класса Win32_DiskDrive получил интересующие вас Caption и PNPDeviceID. procedure TForm1.GetAllMediaData; var SWbemLocator: TSWbemLocator; Service: ISWbemServices; DiskDrives, SWbemObjectSet: ISWbemObjectSet; SWbemObject: ISWbemObject; PropSet: ISWbemPropertySet; DriveEnum: IEnumVariant; Value: Cardinal; TempObj: OleVariant; begin Memo1.Lines.Add('======================'); SWbemLocator := TSWbemLocator.Create(Nil); try Service := SWbemLocator.ConnectServer('.', 'root\CIMV2', '', '', '', '', 0, Nil); DiskDrives := Service.ExecQuery( 'SELECT * FROM Win32_DiskDrive', 'WQL', 0, Nil); DriveEnum := (DiskDrives._NewEnum) as IEnumVariant; while DriveEnum.Next(1, TempObj, Value) = S_OK do begin SWbemObject := IUnknown(TempObj) as ISWbemObject; PropSet := SWbemObject.Properties_; if PropSet.Count > 0 then try Memo1.Lines.Add('======================'); Memo1.Lines.Add('DeviceID = ' + PropSet.Item('DeviceID', 0).Get_Value); Memo1.Lines.Add('SerialNumber = ' + PropSet.Item('SerialNumber', 0).Get_Value); Memo1.Lines.Add('Caption = ' + PropSet.Item('Caption', 0).Get_Value); Memo1.Lines.Add('Size = ' + IntToStr(PropSet.Item('Size', 0).Get_Value)); Memo1.Lines.Add('InterfaceType = ' + PropSet.Item('InterfaceType', 0).Get_Value); Memo1.Lines.Add('Manufacturer = ' + PropSet.Item('Manufacturer', 0).Get_Value); Memo1.Lines.Add('Model = ' + PropSet.Item('Model', 0).Get_Value); Memo1.Lines.Add('Name = ' + PropSet.Item('Name', 0).Get_Value); Memo1.Lines.Add('PNPDeviceID = ' + PropSet.Item('PNPDeviceID', 0).Get_Value); Memo1.Lines.Add(' '); except end; end; finally SWbemLocator.Free; Memo1.Lines.Add('======================'); end; end; |
------- Отправлено: 15:34, 26-03-2011 | #6 |
Новый участник Сообщения: 5
|
Профиль | Отправить PM | Цитировать я пытаюсь сделать блокиратор флэшек
суть: флешки, которые ранее подключались, работают нормально без какх - либо изменений. а те, которые ранее не подключались - блокируются. для этого мне и нужно определить серийный номер, и благодаря ему добавлять флешки в разрешенные устройства, и по этому номеру производить очистку реестра. сейчас нашел 2 API – функции: GetDriveType – определяет и возвращает тип носителя, GetVolumeInformation – определяет информацию о носителе, среди которой содержится серийный номер надеюсь я иду в верном направлении п.с. по прежнему буду благодарен за помощь |
Отправлено: 15:59, 26-03-2011 | #7 |
Старожил Сообщения: 435
|
Профиль | Отправить PM | Цитировать Серийник возвращаемый GetVolumeInformation - является серийником логического диска и меняется после каждого форматирования.
Так же не забудьте протестировать решение на телефоне, который определяется как флешка. Там может не все корректно отработать. А как вы собрались блокировать флешку? |
------- Отправлено: 16:29, 26-03-2011 | #8 |
Новый участник Сообщения: 5
|
Профиль | Отправить PM | Цитировать походу GetVolumeInformation не подходит =(
есть программа checkUDisk v5.3 - она определяет параметры подключенных дисков, веси около 200 кб, среди параметров Serial Number: P7XO8HVXRYF9M6NL - есть то что нужно, узнать бы по какому принципу она пашет а по поводу вопроса, как блокировать флешки: в папке %systemroot% / inf есть 2 системных файла usbstor.PNF и usbstor.inf при удалении этих файлов/перемещении, ос перестает опознавать любые носители которые ранее не подключались просто появляется сообщение: устройство не опознано и все, оно даже в диспетчере устройств не отобразится внимание: заблокированные флешки даже после возврата файлов на место не опознаются (покачто решения проблемы не нашел) любые другие флешки, которые не были заблокированы, после возврата файлов на место работают корректно. получается так: если вы удалите эти 2 файла usbstor.PNF и usbstor.inf - то работать будут только те флешки, информация о которых есть в реестре. если же вам нужно исключить одну из флешек, которой "разрешен доступ", то просто необходимо очистить все записи в реестре о ней. Очистку лучше производить по серийнику) делал все что я описал руками - все работает, хочу лишь чтобы все было цивиьно и выполнялось программой, и мог любой не просвещенный выполнить данную процедуру вродебы рассказал все что нужно знать для реализации такой программы. проблема остается в том, чтобы определить этот злосчастный серийный номер |
Отправлено: 16:56, 26-03-2011 | #9 |
Старожил Сообщения: 435
|
Профиль | Отправить PM | Цитировать Ну так получите через WMI PNPDeviceID = USBSTOR\DISK&VEN_JETFLASH&PROD_TS512MJF110&REV_0.00\68E739268F4717&0
и распарсите его выдрав серийник |
------- Отправлено: 00:06, 27-03-2011 | #10 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Медиа - Подскажите, как реализовать в виде программы переключение аналогового звука на цифр.? | mark4ever | AutoIt | 14 | 19-02-2011 14:16 | |
Прочее - Подскажите программу! | kreams | Сетевые технологии | 2 | 21-02-2010 19:38 | |
CMD/BAT - как реализовать по средствам cmd проверку на установленную программу? | smol84 | Скриптовые языки администрирования Windows | 1 | 15-10-2009 12:37 | |
Подскажите программу | vof44ik | Хочу все знать | 5 | 30-05-2009 08:17 | |
Подскажите программу | Andrew S | Программное обеспечение Linux и FreeBSD | 7 | 15-05-2005 17:57 |
|