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 ++