середу, 21 квітня 2010 р.

Функція WinAPI CreateFile в Delphi

Функція створює вказівник на новий пристрій типу:
•    файл;
•    канал;
•    mailslot (поштовий канал);
•    комунікаційний ресурс (наприклад COM порт);
•    дискові пристрої (тільки для Windows NT);
•    консолі;
•    директорії (відкриває їх).

Знаходиться в: Win16, Win32, Win NT
Для Delphi в модулі windows.

Об'явлення:
  function CreateFile(
   lpFileName: PChar;   // Вказівник на ім'я файлу (пристрою)
   dwDesiredAccess,     //Параметри доступу
   dwShareMode: DWORD;  //Доступ, який розділяється
   lpSecurityAttributes: PSecurityAttributes; //безпека
   dwCreationDisposition,       // Опис
   dwFlagsAndAttributes: DWORD; // Атрибути файлу
   hTemplateFile: THandle       // Файл шаблона
   ): THandle; stdcall; 

Детальний розгляд параметрів:

lpFileName - Вказівник на строку, яка містить ім'я створюваного файлу чи пристрою.
dwDesiredAccess - тип доступу. Може приймати значення (можна використовувати одне чи зразу декілька):
    1) 0 - запит. Функція не дасть реального доступу до файлу, а виконається як тест можливості створення чи відкриття файлу (пристрою);
    2) GENERIC_READ - отримати доступ на читання;
    3) GENERIC_WRITE - отримати доступ на запис.
dwShareMode - флаги, які вказують на те, як створюваний об'єкт повинен розділяти доступ між процесами. Це значить, як буде ділится доступ до файлу з іншими програмами якщо вони теж спробують відкрити цей файл. Параметр може приймати значення (можна використовувати одне чи зразу декілька значень):
    1) FILE_SHARE_DELETE - іншим процесам дозволяється доступ до файлу тільки якщо потрібен доступ на видалення (підтримується тільки в Windows NT).
    2) FILE_SHARE_READ - іншим процесам дозволяється тільки читати файл.
    3) FILE_SHARE_WRITE - іншим процесам дозволяється тільки писати в файл.
lpSecurityAttributes - вказівник на структуру типу SECURITY_ATTRIBUTES. Цей параметр використовується тільки в Windows NT.
dwCreationDistribution - описує, що робити з файлом якщо він уже існиує чи його ще немає. Параметр може приймати тільки одне з наступних значень (комбінація не допускається):
    1) CREATE_NEW - створює новий файл. Якщо він вже існує, то виникне помилка;
    2) CREATE_ALWAYS - завжди створює новий файл. Якщо файл існує, то він буде перезаписаний (обнулений);
    3) OPEN_EXISTING - відкрити існуючий файл (пристрій). Якщо файлу немає, то виникне помилка;
    4) OPEN_ALWAYS - відкриває файл в будь-якому випадку. Якщо файлу немає, то він буде створений так само як і при CREATE_NEW.
    5) TRUNCATE_EXISTING - відкрити файл і обрізати його розмір до нуля. Параметр dwDesiredAccess має мати значення GENERIC_WRITE. Якщо файлу немає, то виникне помилка.
dwFlagsAndAttributes - атрибути файлу, який створюється. Параметр може приймати комбінацію з значень:
    1) FILE_ATTRIBUTE_NORMAL:
        а) FILE_ATTRIBUTE_ARCHIVE - архівний
        б) FILE_ATTRIBUTE_COMPRESSED - стиснутий
        в) FILE_ATTRIBUTE_HIDDEN - прихований
        г) FILE_ATTRIBUTE_NORMAL - нормальний
        д) FILE_ATTRIBUTE_OFFLINE - дані файлу недоступні
        е) FILE_ATTRIBUTE_READONLY - тільки для читання
        є) FILE_ATTRIBUTE_SYSTEM - системний
        ж) FILE_ATTRIBUTE_TEMPORARY - тимчасовий
    2) FILE_FLAG_WRITE_THROUGH - можливість запису в файл через кеш;
    3) FILE_FLAG_NO_BUFFERING - не можна використовувати буфер чи кеш;
    4) FILE_FLAG_RANDOM_ACCESS - випадковий доступ. Використовується для оптимізації кешу;
    5) FILE_FLAG_SEQUENTIAL_SCAN - доступ до файлу може бути послідовним від початку до кінця;
    6) FILE_FLAG_DELETE_ON_CLOSE - операційна система має видалити файл, коли всі вказівник на файл будуть закриті;
    7) FILE_FLAG_BACKUP_SEMANTICS - Backup файл, тобто файл резервного копіювання;
    8) FILE_FLAG_POSIX_SEMANTICS - доступ виконується в POSIX стандарті;
    9) SECURITY_SQOS_PRESENT:
        а) SECURITY_ANONYMOUS - анонімний доступ
        б) SECURITY_IDENTIFICATION - ідентифікаційний доступ
        в) SECURITY_IMPERSONATION - персональний доступ
        г) SECURITY_DELEGATION - колективний доступ
        д) SECURITY_CONTEXT_TRACKING - динамічний режим доступу
        е) SECURITY_EFFECTIVE_ONLY - обмеження груп і привілеїв
hTemplateFile - файл шаблону.

Якщо функція виконалась без проблем, то вона повертає вказівник на відкритий (створений) пристрій. Через цей вказівник отримується доступ до файлу.
Якщо виникла помилка, то функція поверне INVALID_HANDLE_VALUE.

Немає коментарів:

Дописати коментар