Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 2 сентября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Возможности языков семейства Си по истине безграничны, однако, в этой свободе кроются и недостатки: всегда нужно программисту держать ухо востро и контроллировать "переполнение буфера", чтобы потом программа не вылетала в "синий экран" на массе разнообразных версий Windows и железа у пользователей. Те же крэкеры и реверсеры специально ищут в коде программ на Си уязвимости, куда можно подсадить любой вирусный код, об этом более подробно автор рассказывал в своём видеокурсе здесь. Я там многое узнал и теперь мой код стал значительно более безопасный.

Получить список дисков и их параметры

Автор: OlegGG
Эта функция выдаст информацию по всем дискам:

 
 int n;
 
 bool Flag;
 
 DWORD dr = GetLogicalDrives(); // функция возвращает битовую маску
 
 
 
 for(int x=0;x<26;x++) // проходимся циклом по битам
 
 {
 
    n = ((dr>>x)&1); // узнаём значение текущего бита
 
    if(n) // если единица - диск с номером x есть
 
    {
 
 	  AnsiString dl = AnsiString((char)(65+x)); // получаем литеру диска
 
 	  AnsiString path = AnsiString((char)(65+x))+":\\";
 
 
 
 	  AnsiString out = "Диск " + dl + "\n";
 
 
 
 	  // здесь узнаём готово ли устройство
 
 	  WORD OldErrorMode;
 
 	  OldErrorMode = SetErrorMode(SEM_FAILCRITICALERRORS); // убираем показ ошибок
 
 	  bool ready = DirectoryExists(path); // пытаемcя открыть корневую директорию
 
 	  SetErrorMode(OldErrorMode); // восстанавливаем старый режим показа ошибок
 
 
 
 	  if (ready)
 
 	  {
 
 		 UINT drive_type = GetDriveType((dl+":\\").c_str()); // узнаём тип диска
 
 		 out += "\nТип диска: ";
 
 		 if (drive_type == DRIVE_REMOVABLE) out += "REMOVABLE";
 
 		 else if (drive_type == DRIVE_FIXED)	 out += "FIXED";
 
 		 else if (drive_type == DRIVE_REMOTE)	out += "REMOTE";
 
 		 else if (drive_type == DRIVE_CDROM)	 out += "CD-ROM";
 
 		 else if (drive_type == DRIVE_RAMDISK)   out += "RAMDISK";
 
 		 else out += "НЕИЗВЕСТНЫЙ_ТИП\n";
 
 
 
 		 // если это HDD - заприашиваем информацию о нем
 
 		 if (drive_type == DRIVE_FIXED)
 
 		 {
 
 			unsigned __int64 FreeBytesAvailable;
 
 			unsigned __int64 TotalNumberOfBytes;
 
 			unsigned __int64 TotalNumberOfFreeBytes;
 
 			char drive_label[30];
 
 			char drive_fat[30];
 
 			DWORD drive_sn;
 
 			DWORD drive_name_size = sizeof(drive_label);
 
 
 
 			// получаем данные о размерах
 
 			Flag = ::GetDiskFreeSpaceEx(path.c_str(),
 
 						   (PULARGE_INTEGER)&FreeBytesAvailable,
 
 						   (PULARGE_INTEGER)&TotalNumberOfBytes,
 
 						   (PULARGE_INTEGER)&TotalNumberOfFreeBytes
 
 						   );
 
 			if (Flag)
 
 			{
 
 			   out += "\nСвободно на диске: " + AnsiString(TotalNumberOfFreeBytes) + "\n";
 
 			   out += "Всего на диске: " + AnsiString(TotalNumberOfBytes) + "\n";
 
 			}
 
 			else
 
 			{
 
 			   out += "Ошибка в GetDiskFreeSpaceEx\n";
 
 			}
 
 
 
 			// получаем метку, серинийный номер и пр.
 
 			Flag = GetVolumeInformation(path.c_str(),
 
 						   drive_label,
 
 						   sizeof(drive_label),
 
 						   &drive_sn,
 
 						   &drive_name_size,
 
 						   NULL,
 
 						   drive_fat,
 
 						   sizeof(drive_fat)
 
 						   );
 
 			if (Flag)
 
 			{
 
 			   out += "\nМетка тома: " + AnsiString(drive_label) + "\n";
 
 			   out += "Сер.номер: " + AnsiString(drive_sn) + "\n";
 
 			   out += "Файловая система: " + AnsiString(drive_fat) + "\n";
 
 			}
 
 			else
 
 			{
 
 			   out += "Ошибка в GetVolumeInformation\n";
 
 			}
 
 		 }
 
 	  }
 
 	  else
 
 	  {
 
 		 out += "НЕ ГОТОВ";
 
 	  }
 
 	  ShowMessage(out);
 
    }
 
 }


<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS