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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
Wuotan
 Аватар для Wuotan
0 / 0 / 0
Регистрация: 09.03.2014
Сообщений: 8
11.05.2014, 15:51     Работа с USB устройствами Visual Studio c++ #1
Здравствуйте. У меня задача такая: нужно найти конкретную флэшку по серийному номеру и записать туда данные в файл. В интернете искал естественно. На русских сайтах ничего толкового...Есть для 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++
Посмотрите здесь:

Работа с EditBox в Visual Studio 2006 C++
C++ Работа с Visual Studio
C++ Работа в Visual Studio
Работа с файлами в Visual studio 2005 C++
C++ Работа с матрицей С++ Visual Studio
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
4315 / 3736 / 1259
Регистрация: 14.04.2014
Сообщений: 14,642
11.05.2014, 18:04     Работа с USB устройствами Visual Studio c++ #2
А ты WDK установил? Там же даётся ссылка. Эти файлы из него.
Qazan
211 / 59 / 9
Регистрация: 30.04.2013
Сообщений: 780
Записей в блоге: 10
11.05.2014, 18:29     Работа с USB устройствами Visual Studio c++ #3
Creating a WMI Application Using C++ (MSDN)
Wuotan
 Аватар для 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
4315 / 3736 / 1259
Регистрация: 14.04.2014
Сообщений: 14,642
11.05.2014, 19:30     Работа с USB устройствами Visual Studio c++ #5
Вроде нет. Framework - совсем другое.
Wuotan
 Аватар для 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++
Ответ Создать тему
Опции темы

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