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>buflen) return NULL;
for (i = 0; i <= (buflen - len); ++i)
{
for (j = 0; j < 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;
}
|