Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

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

Имеются ли отличия в компиляторах у сред разработки Visual Studio 2006 и Visual Studio 2015 ? - C++
скажите а где найти среду 2006 года? или можно использовать 2015 год?

Работа в Visual Studio - C++
Подскажите, где можно почитать о приёмах работы и отладке программ в Visual Studio с самых базовых моментов, т.е. для новичков. Спасибо.

Работа с Visual Studio - C++
Пожалуйста, подскажите как компилить в этой среде. Да и вообще, урок-другой по среде &quot;Мелкомягких&quot; не помешает. Кстати, версия - 2010. ...

Работа с матрицей С++ Visual Studio - C++
Люди, помогите сделать задание с матрицей. Вобщем: Дана матрица натуральных чисел (Xij) порядка m*n. Упорядочить столбцы матрицы за...

Visual Studio, C++, работа с присоединённой БД - C++
во вкладке Server Explorer присоединил базу данных, подскажите пожалуйста, как с ней работать? Как к ней обратиться с запросом? ...

Visual studio c++ Работа с графикой - C++
Доброго времени суток! Пожалуйста подскажите какой библиотекой пользоваться для создания и работы с графикой в visual studio 2012 С++??

5
nmcf
6098 / 5409 / 1891
Регистрация: 14.04.2014
Сообщений: 22,541
11.05.2014, 18:04 #2
А ты WDK установил? Там же даётся ссылка. Эти файлы из него.
0
Qazan
213 / 61 / 9
Регистрация: 30.04.2013
Сообщений: 823
Записей в блоге: 10
11.05.2014, 18:29 #3
Creating a WMI Application Using C++ (MSDN)
0
Wuotan
0 / 0 / 0
Регистрация: 09.03.2014
Сообщений: 8
11.05.2014, 19:15  [ТС] #4
Я до этого комментария даже не знал о существовании WDK. По видимому нет... Я так понял там библиотеки и образцы для разработки дров. => Вопрос: там ddl прикреплять придется? Потом готовая программа никакого софта или файлов требовать не будет, на осях где wdk раньше не устанавливался? Например как ms .net framework...
0
nmcf
6098 / 5409 / 1891
Регистрация: 14.04.2014
Сообщений: 22,541
11.05.2014, 19:30 #5
Вроде нет. Framework - совсем другое.
0
Wuotan
0 / 0 / 0
Регистрация: 09.03.2014
Сообщений: 8
12.05.2014, 02:16  [ТС] #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;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.05.2014, 02:16
Привет! Вот еще темы с ответами:

Visual Studio Team Foundation Serverl или Visual Studio Professional - C++
Visual Studio Team Foundation Server 2010 Кто пользовался Visual Studio Team Foundation Server 2010, и чем она отличаеться от Visual...

Работа с файлами в Visual studio 2005 - C++
Необходимо в цикле сохранить в файл очень много элементов типа double. Затем необходимо после цикла воспользоваться данными из этого файла....

Работа в Microsoft Visual Studio 2013 - C++
Sub Main() MsgBox() using namespace std; int main() { char a , b, c, d, e, f; cout&lt;&lt; &quot;What is your name and...

Работа с текстовым файлом в Visual Studio - C++
Программа компилится, но не может открыть файл studenti.txt. Куда этот файл точно кидать, что бы программа его находила? #include...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru