Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

проблема в использывании Api для USB

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> проблема в использывании Api для USB
Имя
Сообщение << Старые топики   Новые топики >>
проблема в использывании Api для USB - 2010-06-30 04:08:44.896666   
Different

Сообщений: 4
Оценки: 0
Присоединился: 2009-08-25 19:03:50.083333
Хочу реализовать прогу, которая при запуске будет запрашивать флешку. Если флешка не та – завершить прогу. Определение флешки по файлу или серийнику, но не могу найти Api для USB. Кто знает, подскажите литературу или варианты реализации. За основу хочу взять AntiAutoRun SLESHa
#include "windows.h" #include "stdio.h" #include "conio.h" // поиск участка памяти в буфере char * memmem(char *buf, char *pattern, size_t buflen, size_t len) { size_t i, j; char * bf=buf; char * pt = pattern; if (len&gt;buflen) return NULL; for (i = 0; i &lt;= (buflen - len); ++i) { for (j = 0; j &lt; len; ++j) { if (pt[j] != bf[i + j]) break; } if (j == len) return (bf + i); } return NULL; } int main(int argc, char* argv[]) { HANDLE h; char c; DWORD rb; char* p; int x; char buf[2048]; char VolumeName[256]; char tmp[256]; char FSName[256]; ULONG MaximumFNameLength,FileSystemFlags,SerialNum; printf("Anti AutoRun (C) SLESH\n"); if (argc==1) // если буква диск на введена { printf("Enter Driver Latter: "); c=getch(); // спросим букву диска printf("%c\n",c); sprintf(buf,"\\\\.\\%c:",c); sprintf(tmp,"%c:\\",c); } else // если буква диска введена в командной строке { sprintf(buf,"\\\\.\\%s:",argv[1]); sprintf(tmp,"%s:\\",argv[1]); c=0x00; } // получим тип ФС if (GetVolumeInformation(tmp,VolumeName, 256,&SerialNum,&MaximumFNameLength,&FileSystemFlags, FSName, 256)) { printf("FileSystem Type: %s\n",FSName); } else { printf("Get FileSystem Type Error\n"); return 0; } // проверим ФС if (strcmp(FSName,"FAT32")) { printf("UNSUPPORT FileSystem\n"); getch(); return 0; } strcat(tmp,"autorun.inf"); // создадим пустой файл autorun.inf h=CreateFile(tmp,GENERIC_WRITE,0, 0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0); if (h!=INVALID_HANDLE_VALUE) { CloseHandle(h); } //откроем диск h=CreateFile(buf,GENERIC_WRITE|GENERIC_READ,FILE_SHARE_READ|FILE_SHARE_WRITE, 0,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0); if (h==INVALID_HANDLE_VALUE) { printf("Open Drive Error\n"); } else { x=0; printf("Search File\n"); // читаем пока есть что читать while (ReadFile(h,buf,2048,&rb,NULL)&&rb==2048) { printf("%i\r",x); // ишем нужную нам запись if (p=memmem(buf,"AUTORUN INF",rb,11)) { if (p[11]==0x40) // если файл залочен { printf("Autorun.inf UNLOCKED\n"); p[11]=0x20; // разлочем его } else // сли незалочен { printf("Autorun.inf LOCKED\n"); p[11]=0x40; // залочим } SetFilePointer(h,x,NULL,FILE_BEGIN); // передвинем указатель на начало считанного блока WriteFile(h,buf,2048,&rb,NULL); // запишем измененные данные break; //прервем выполнение дальнейшего чтения } else x+=rb; // счетчик считанных байт } CloseHandle(h); // закроем дескриптор открытого диска } if (c) getch(); // если имя диска получили не в виде командной строки. Сделано это чтобы неисчезло сразу с экрана окошко return 0; }
Post #: 1
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> проблема в использывании Api для USB







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.