Денисrf
|
|
« : 30-03-2010 16:50 » |
|
Всем доброго времени! У меня интересный вопрос. Как мне спалить подключение к USB устройства хранения данных, и если подключено оное, то скинуть туда инфу? Благодарю.
|
|
|
Записан
|
Your password is personal - do not share it with anyone and make sure it is not easy to crack.
|
|
|
resource
Молодой специалист
Offline
Пол:
|
|
« Ответ #1 : 30-03-2010 17:01 » |
|
У меня интересный вопрос Интереснее не бывает. Видимо вирус пишешь. ЗЫ вопрос скорее относится к WinAPI, нежели просто к C/C++
|
|
|
Записан
|
|
|
|
Денисrf
|
|
« Ответ #2 : 30-03-2010 17:17 » |
|
Пишу мммм систему аутентификации )) это последний модуль остался. Роюсь в МСДН но пока не нашел по поиску подключенных USB. Но правда вот через CreateFile(); можно к СОМ и LTP обращаться, а к USB?
|
|
|
Записан
|
Your password is personal - do not share it with anyone and make sure it is not easy to crack.
|
|
|
Денисrf
|
|
« Ответ #3 : 30-03-2010 17:47 » |
|
можно к СОМ и LTP обращаться, а к USB?
Ой LPT конечно же )))
|
|
|
Записан
|
Your password is personal - do not share it with anyone and make sure it is not easy to crack.
|
|
|
Денисrf
|
|
« Ответ #4 : 30-03-2010 18:50 » |
|
Вот как решил сделать: Просто буду считывать закоовки всех подрят окон, и если будет типа H:\ или G:\ ну и т.п. то буду туда копирываться.
Зацените! Итересно ваше мнение.
Чтобы узнавать об USB активности что-то функций не нейду, а драйвер писать особого желания НЕТ !!
|
|
|
Записан
|
Your password is personal - do not share it with anyone and make sure it is not easy to crack.
|
|
|
Вад
|
|
« Ответ #5 : 30-03-2010 19:15 » |
|
При чём тут драйвер? SetupDiEnumDeviceInfo - можно перебирать подключённые к USB девайсы и искать среди них тот, у которого корень "USBSTOR". А с помощью RegisterDeviceNotification можно подписаться на оконные нотификации, которые уведомляют о подключении-отключении девайса.
|
|
|
Записан
|
|
|
|
Денисrf
|
|
« Ответ #6 : 30-03-2010 19:25 » |
|
WINSETUPAPI BOOL WINAPI SetupDiEnumDeviceInfo( IN HDEVINFO DeviceInfoSet, IN DWORD MemberIndex, OUT PSP_DEVINFO_DATA DeviceInfoData );
Это?
|
|
« Последнее редактирование: 30-03-2010 19:35 от Денисrf »
|
Записан
|
Your password is personal - do not share it with anyone and make sure it is not easy to crack.
|
|
|
Денисrf
|
|
« Ответ #7 : 30-03-2010 19:45 » |
|
Об этом по русски где-нибудь пишут?
|
|
|
Записан
|
Your password is personal - do not share it with anyone and make sure it is not easy to crack.
|
|
|
Вад
|
|
« Ответ #8 : 30-03-2010 20:01 » |
|
Не знаю, пишут ли по-русски. Мне MSDN-а на английском было достаточно
|
|
|
Записан
|
|
|
|
Денисrf
|
|
« Ответ #9 : 30-03-2010 20:05 » |
|
Везет ))) а мне вот не хватает. С синтаксисом что то никак не разобраться
HDEVINFO InfStruct;
PSP_DEVINFO_DATA InfStructOut; InfStructOut->cbSize=sizeof(SP_DEVINFO_DATA);
DWORD Index;
SetupDiEnumDeviceInfo(InfStruct,Index,InfStructOut);
Я так делаю, но невыходит: 1>SelfCopy.obj : error LNK2001: неразрешенный внешний символ "__imp__SetupDiEnumDeviceInfo@12" 1>C:\Documents and Settings\Admin\Мои документы\Visual Studio 2008\Projects\SelfCopy\Debug\SelfCopy.exe : fatal error LNK1120: 1 неразрешенных внешних элементов
Если видно где туплю подскажи пожалуйста.
|
|
|
Записан
|
Your password is personal - do not share it with anyone and make sure it is not easy to crack.
|
|
|
Вад
|
|
« Ответ #10 : 30-03-2010 20:19 » |
|
Эта функция - из библиотеки Setupapi.lib, которая, очевидно, не прилинкована.
Но кроме того, всё равно аргументы некорректные. Поищи примеры использования. У меня это было в одном проекте больше полугода назад, когда надо было девайсы USB-шные отслеживать (в том числе и флешки), но деталей уже не помню, а код ещё искать надо.
|
|
|
Записан
|
|
|
|
Денисrf
|
|
« Ответ #11 : 01-04-2010 16:34 » |
|
Вот код по детектированию именений: LRESULT CALLBACK WindowProcedure(HWND hWnd, UINT uiMsg, WPARAM wParam, LPARAM lParam) { switch (uiMsg) { case WM_DEVICECHANGE: { PDEV_BROADCAST_HDR pHdr = (PDEV_BROADCAST_HDR) lParam; switch (wParam) { case DBT_DEVICEARRIVAL: MessageBox(hWnd, "A device has been inserted.", "USB Notice", MB_OK); break; case DBT_DEVICEREMOVECOMPLETE: MessageBox(hWnd, "A device has been removed.", "USB Notice", MB_OK); break; } } break; default: return DefWindowProc(hWnd, uiMsg, wParam, lParam); break; } return 0; }
У меня куча ошибок типа "необъявленный идентификатор". В какой библиотеке все эти имена? Я привентил: #include "stdafx.h" #include "fstream" #include "iostream" #include "stdio.h" #include "conio.h" #include "string.h" #include "windows.h" #include "tchar.h" #include "wincon.h" #include "setupapi.h" Проблема в общем, и исходник по этой теме не найти пока. Спасибо.
|
|
« Последнее редактирование: 01-04-2010 16:46 от Вад »
|
Записан
|
Your password is personal - do not share it with anyone and make sure it is not easy to crack.
|
|
|
Денисrf
|
|
« Ответ #12 : 02-04-2010 15:09 » |
|
Вот как сделал, оцените: void Main(void) { CreateWindow(_T("Message"),0,0,0,0,0,0,0,0,0,0); MSG msg; while(GetMessage(&msg,0,0,0)) { if(msg.message==WM_DEVICECHANGE) { //do something } } }
|
|
|
Записан
|
Your password is personal - do not share it with anyone and make sure it is not easy to crack.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #13 : 02-04-2010 15:36 » |
|
Денисrf, классика из мсдн: ... ... // Start the message loop. while( (bRet = GetMessage( &msg, NULL, 0, 0 )) != 0) { if (bRet == -1) { // handle the error and possibly exit } else { TranslateMessage(&msg); DispatchMessage(&msg); } } // Return the exit code to the system. return msg.wParam;
|
|
|
Записан
|
|
|
|
Денисrf
|
|
« Ответ #14 : 02-04-2010 16:06 » |
|
Ну может я что-то не допонял, но по суте после передачи полученного сообщения окну (своему) его еще придется на значение проверить (WM_DEVICECHANGE). Так? Сейчас еще поколдую и полее одробную инфу с USB-шников соберу
|
|
|
Записан
|
Your password is personal - do not share it with anyone and make sure it is not easy to crack.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #15 : 02-04-2010 16:16 » |
|
Денисrf, так проверяй, я тебе просто общую схему показал ) else {
//тут можно вставить свою функцию //... ...
//а это раскидывает сообщения по оконным процедурам процесса TranslateMessage(&msg); DispatchMessage(&msg); }
|
|
|
Записан
|
|
|
|
Денисrf
|
|
« Ответ #16 : 04-04-2010 16:06 » |
|
Перефразирую : простое враг хорошего Все немогу узнать об активности USB. Прошлый мой пример сообщает обо всех изменениях подрят, хотелось бы разграничивать по собщениям: DBT_DEVICEARRIVAL и DBT_DEVICEREMOVECOMPLETE. Написал .Dll с функцией: #include "stdafx.h" #include "tchar.h" #include <Dbt.h> #include <setupapi.h>
extern __declspec(dllexport)LRESULT CALLBACK Function(HWND hWnd, UINT uiMsg, WPARAM wParam, LPARAM lParam) { PDEV_BROADCAST_HDR pHdr = (PDEV_BROADCAST_HDR) lParam; switch (uiMsg) { case WM_DEVICECHANGE: {
switch (wParam) { case DBT_DEVICEARRIVAL: MessageBox( hWnd,_T("A device has been inserted."), _T("USB Notice"), MB_OK); break;
case DBT_DEVICEREMOVECOMPLETE: MessageBox( hWnd, _T("A device has been removed."), _T("USB Notice"), MB_OK); break; }
default: return DefWindowProc(hWnd, uiMsg, wParam, lParam); break; } } return 0; } Вызываю из консольного приложения так: void (*pFunction)(HWND, UINT, WPARAM, LPARAM);
(FARPROC &)pFunction=GetProcAddress(hHookDll,"?Function@@YGJPAUHWND__@@IIJ@Z"); if (!pFunction) { std::cout<<"Oshibka podkluchenia .DLL adres funkcii ne poluchen"<<std::endl; FreeLibrary(hHookDll); _getch(); return 0; } . . . CreateWindow(_T("Message"),0,0,0,0,0,0,0,0,0,0); MSG msgDet; msgDet.hwnd=hwnd; while(GetMessage(&msgDet,0,0,0)) { pFunction(msgDet.hwnd,msgDet.message, msgDet.wParam,msgDet.lParam); } Вот как ругается: Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention. Если кто-нибудь знает в чем может быть проблема поскажите пожалуйста. Благодарю!
|
|
|
Записан
|
Your password is personal - do not share it with anyone and make sure it is not easy to crack.
|
|
|
|