Прив'язка до заліза

Іноді в програмах необхідно використовувати можливість перевірки типу носія або його серійний номер. Причини можуть бути різними від банального контролю пристроїв в системі до засобів захистів використовують прив'язку до заліза. Зараз я вам покажу як за допомогою API реалізувати цю просту задачу.

Нам знадобиться всього 2 API - функції:

  • GetDriveType - визначає і повертає тип носія;
  • GetVolumeInformation - визначає інформацію про носії, серед якої міститься серійний номер.

Розглянемо опис цих функцій для З ++ і Delphi. Першою буде функція GetDriveType, вона дуже проста і використовує всього один параметр - покажчик на те. Наприклад "c:", "a:" і т.д. Функція повертає одне з наступних значень:

  • DRIVE_UNKNOWN - 0. диск невизначений / не існує
  • DRIVE_NO_ROOT_DIR - 1. невірний шлях / шлях не вказує на те
  • DRIVE_REMOVABLE - 2. тип пристрою визначається як знімний (дискета, флешка і т.д.)
  • DRIVE_FIXED - 3. тип пристрою - фіксований диск (жорсткий диск)
  • DRIVE_REMOTE - 4. тип пристрою - віддалений (мережевий) диск
  • DRIVE_CDROM - 5. цей пристрій CD-ROM
  • DRIVE_RAMDISK - 6. віртуальний диск, створений в оперативній пам'яті

Зауваження: Якщо в якості параметра вказати для С / С ++ NULL, а для Delphi - nil то тип пристрою буде визначатися для поточного диска (з якого була запущена програма).

А тепер поглянемо на функцію GetVolumeInformation. Теж досить проста функція, однак використовує параметрів значно більше.

Зауваження: Якщо в якості першого параметра вказати для С / С ++ NULL, а для Delphi - nil то функція буде виконується для поточного диска (з якого була запущена програма).

Ну а тепер власне для більшого інтересу наведу приклад, як прив'язати програму до пристрою. В даному прикладі будемо прив'язувати програму до флешці. Дивимося приклад:

Зауваження: Може виникнути питання, а як дізнатися серійник диска, щоб знати з чим порівнювати? Дуже просто, для цього пишемо тестову прогу, в якій пишемо наступний код:

Схожі статті