Winapi визначення типу носія і його серійного номера

Іноді в програмах необхідно використовувати можливість перевірки типу носія або його серійний номер. Причини можуть бути різними від банального контролю пристроїв в системі до засобів захистів використовують прив'язку до заліза. Зараз я вам покажу як за допомогою 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_RAMDISK - 6: віртуальний диск, створений в оперативній пам'яті

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

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

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

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

Схожі статті