Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: USB подключение  (Прочитано 18397 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Денисrf
Постоялец

ru
Offline Offline
Пол: Мужской

« : 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
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 30-03-2010 17:01 » 

Цитата: Денисrf
У меня интересный вопрос
Интереснее не бывает. Видимо вирус пишешь.

ЗЫ вопрос скорее относится к WinAPI, нежели просто к C/C++
Записан
Денисrf
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #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
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #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
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #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.
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 30-03-2010 19:15 » 

При чём тут драйвер? SetupDiEnumDeviceInfo - можно перебирать подключённые к USB девайсы и искать среди них тот, у которого корень "USBSTOR". А с помощью RegisterDeviceNotification можно подписаться на оконные нотификации, которые уведомляют о подключении-отключении девайса.
Записан
Денисrf
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #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
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #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.
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 30-03-2010 20:01 » 

Не знаю, пишут ли по-русски. Мне MSDN-а на английском было достаточно Улыбаюсь
Записан
Денисrf
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #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.
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #10 : 30-03-2010 20:19 » 

Эта функция - из библиотеки Setupapi.lib, которая, очевидно, не прилинкована.

Но кроме того, всё равно аргументы некорректные. Поищи примеры использования. У меня это было в одном проекте больше полугода назад, когда надо было девайсы USB-шные отслеживать (в том числе и флешки), но деталей уже не помню, а код ещё искать надо.
Записан
Денисrf
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #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
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #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.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline 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
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #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.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #15 : 02-04-2010 16:16 » 

Денисrf, так проверяй, я тебе просто общую схему показал )

Код:
        else
        {

//тут можно вставить свою функцию
//...
...

//а это раскидывает сообщения по оконным процедурам процесса
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }

Записан

Денисrf
Постоялец

ru
Offline Offline
Пол: Мужской

« Ответ #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.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines