Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
Wuotan
0 / 0 / 0
Регистрация: 09.03.2014
Сообщений: 8
#1

Работа с USB устройствами Visual Studio c++ - C++

11.05.2014, 15:51. Просмотров 1430. Ответов 5
Метки нет (Все метки)

Здравствуйте. У меня задача такая: нужно найти конкретную флэшку по серийному номеру и записать туда данные в файл. В интернете искал естественно. На русских сайтах ничего толкового...Есть для c++builder примеры,но там досовские функции,а у меня основная программа на visual studio для windows 7 64. Функции должны быть в api и в wmi.Нашел это
http://oroboro.com/usb-serial-number/
но если код и рабочий, то библиотеку #include <api/usbioctl.h> не находит. Где её достать или чем заменить?
Api и wmi только буквально начал изучать, поэтому многого не знаю, а там очень много всего и времени у меня до сдачи этой программы мало. Ткните пальцем, пожалуйста, куда смотреть. Нужен вектор направления. Вторые сутки копаюсь в интернете и вижу фигу.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.05.2014, 15:51     Работа с USB устройствами Visual Studio c++
Посмотрите здесь:

C++ Лаба на Visual Studio С++. Работа с потоками.
C++ Работа с Visual Studio
Visual Studio Team Foundation Serverl или Visual Studio Professional C++
C++ Работа в Visual Studio
Работа с файлами в Visual studio 2005 C++
C++ Работа с матрицей С++ Visual Studio
Работа с текстовым файлом в Visual Studio C++
C++ Работа со строками (Visual Studio 2010 С++)
C++ Visual Studio, C++, работа с присоединённой БД
Работа в Microsoft Visual Studio 2013 C++
Имеются ли отличия в компиляторах у сред разработки Visual Studio 2006 и Visual Studio 2015 ? C++
Visual studio c++ Работа с графикой C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
4917 / 4255 / 1425
Регистрация: 14.04.2014
Сообщений: 16,728
11.05.2014, 18:04     Работа с USB устройствами Visual Studio c++ #2
А ты WDK установил? Там же даётся ссылка. Эти файлы из него.
Qazan
211 / 59 / 9
Регистрация: 30.04.2013
Сообщений: 797
Записей в блоге: 10
11.05.2014, 18:29     Работа с USB устройствами Visual Studio c++ #3
Creating a WMI Application Using C++ (MSDN)
Wuotan
0 / 0 / 0
Регистрация: 09.03.2014
Сообщений: 8
11.05.2014, 19:15  [ТС]     Работа с USB устройствами Visual Studio c++ #4
Я до этого комментария даже не знал о существовании WDK. По видимому нет... Я так понял там библиотеки и образцы для разработки дров. => Вопрос: там ddl прикреплять придется? Потом готовая программа никакого софта или файлов требовать не будет, на осях где wdk раньше не устанавливался? Например как ms .net framework...
nmcf
4917 / 4255 / 1425
Регистрация: 14.04.2014
Сообщений: 16,728
11.05.2014, 19:30     Работа с USB устройствами Visual Studio c++ #5
Вроде нет. Framework - совсем другое.
Wuotan
0 / 0 / 0
Регистрация: 09.03.2014
Сообщений: 8
12.05.2014, 02:16  [ТС]     Работа с USB устройствами Visual Studio c++ #6
WDK 8.1, который там предлагается, требует Visual Studio 2013, а у меня 2010. Ниже версия 7 для xp.
В общем на просторах я таки нашел рабочую альтернативу.
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
#define UNICODE
#define _UNICODE
#include <windows.h>
#include <stdio.h>
#include <locale.h>
#include <conio.h>
//#include <WinIoCtl.h>
 
WCHAR* GetElem(WCHAR *ptr,WCHAR delim,WCHAR *buf)
{
   WCHAR *ptr1=NULL;
   ptr1=wcschr(ptr,delim);
   if (ptr1)
   {
      wcsncpy(buf,ptr,(int)(ptr1-ptr));
      buf[(int)(ptr1-ptr)]=0;
      return (ptr1+1);
   }
   else
   {
      wcscpy(buf,ptr);
      return NULL;
   }
}
 
//Входные данные:
// drive_letter - буква диска
void PrintFlashDriveInfo(WCHAR drive_letter)
{
   HKEY hk=NULL;
   LONG Ret=0;
   HANDLE hdrive=INVALID_HANDLE_VALUE;
   DWORD data_size,dtype;
   WCHAR *data=NULL,*buf1=NULL,*buf2=NULL;
   WCHAR *ptr1_1=NULL,*ptr1_2=NULL,*ptr2_1=NULL,*ptr2_2=NULL;
   WCHAR dos_link[50];
   WCHAR drive_name2[20];
 
   __try
   {
      //проверяем существует ли диск в системе
      wsprintf(drive_name2,L"\\\\.\\%c:",drive_letter);
      hdrive = CreateFileW(drive_name2,0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
      if (hdrive==INVALID_HANDLE_VALUE)
      {
         wprintf(L"Ошибка PrintFlashDriveInfo: Ошибка CreateFile: %u\n\n",GetLastError());
         __leave;
      }
      CloseHandle(hdrive);
 
      Ret = RegOpenKeyExW(HKEY_LOCAL_MACHINE,L"SYSTEM\\MountedDevices",0,KEY_READ,&hk);
      if (Ret!=ERROR_SUCCESS)
      {
         wprintf(L"Ошибка PrintFlashDriveInfo: Ошибка RegOpenKeyEx: %u\n\n",Ret);
         __leave;
      }
 
      wsprintf(dos_link,L"\\DosDevices\\%c:",drive_letter);
      Ret=RegQueryValueExW(hk,dos_link,NULL,&dtype,NULL,&data_size);
      if (Ret==ERROR_SUCCESS)
      {
         data=(WCHAR *)malloc(data_size+2);
         buf1=(WCHAR *)malloc(data_size+2);
         buf2=(WCHAR *)malloc(data_size+2);
         if (data==NULL||buf1==NULL||buf2==NULL)
         {
            wprintf(L"Ошибка PrintFlashDriveInfo: Ошибка malloc.\n\n");
            __leave;
         }
         memset(data,0,data_size+2);
 
         Ret=RegQueryValueExW(hk,dos_link,NULL,&dtype,(LPBYTE)data,&data_size);
         if (Ret!=ERROR_SUCCESS)
         {
            wprintf(L"Ошибка PrintFlashDriveInfo: Ошибка RegQueryValueEx: %u\n\n",Ret);
            __leave;
         }
         if(wcsstr(data,L"USBSTOR")!=NULL)
         {
            wprintf(L"Данные флеш-диска %c:\n",drive_letter);
            ptr1_1=GetElem(data,L'#',buf1);
            if (ptr1_1)
            {
               ptr1_2=GetElem(ptr1_1,L'#',buf1);
               ptr1_1=buf1;
               do
               {
                  ptr2_2=GetElem(ptr1_1,L'&',buf2);
                  if (wcsstr(buf2,L"Ven_"))
                     wprintf(L"Производитель: %s\n",buf2+4);
                  else if (wcsstr(buf2,L"Prod_"))
                     wprintf(L"Название продукта: %s\n",buf2+5);
                  ptr1_1=ptr2_2;
               } while (ptr2_2);
 
               ptr1_1=GetElem(ptr1_2,L'#',buf1);
               ptr1_1=buf1;
               do
               {
                  ptr2_2=GetElem(ptr1_1,L'&',buf2);
                  if (wcslen(buf2)>3)
                  {
                     wprintf(L"Серийный номер: %s\n",buf2);
                     break;
                  }
                  ptr1_1=ptr2_2;
               } while (ptr2_2);
            }
         }//if USBSTOR
         else
            wprintf(L"Диск %c: НЕ является флешкой\n",drive_letter);
      }
      else
         wprintf(L"Ошибка PrintFlashDriveInfo: Ошибка RegQueryValueEx: %u\n",Ret);
 
      wprintf(L"\n");
   }
   __finally
   {
      if (data!=NULL) free(data);
      if (buf1!=NULL) free(buf1);
      if (buf2!=NULL) free(buf2);
      if (hk!=NULL) RegCloseKey(hk);
   }
}
 
 
int wmain(int argc, WCHAR* argv[])
{
   setlocale(LC_ALL,"Russian");
 
   for (char letter='A';letter<='Z'; letter++){
       PrintFlashDriveInfo(letter);
   }
   wprintf(L"Нажмите любую клавишу...");
   _getch();
   return 0;
}
Yandex
Объявления
12.05.2014, 02:16     Работа с USB устройствами Visual Studio c++
Ответ Создать тему
Опции темы

Текущее время: 23:51. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru