CreateFile

Aus API-Wiki
Version vom 26. Februar 2007, 17:49 Uhr von Philipp Stephani (Diskussion | Beiträge) (Gröbere Fehler korrigiert)
Zur Navigation springenZur Suche springen

Diese Funktion öffnet oder erstellt eine Datei, oder einen Datenkanal. Kanäle können ein COM- oder LPT-Port, ein Gerät, ein Dienst oder eine Console sein.

Sie gibt ein Handle zurück, welches den Zugriff ermöglicht.

Declare Function CreateFile Lib "kernel32" Alias "CreateFileA" ( _
                            ByVal lpFileName As String, _
                            ByVal dwDesiredAccess As Long,  _
                            ByVal dwShareMode As Long,  _
                            ByVal lpSecurityAttributes As Long, _
                            ByVal dwCreationDisposition As Long, _
                            ByVal dwFlagsAndAttributes As Long, _
                            ByVal hTemplateFile As Long) As Long


Parameter:

lpFileName [Übergabe]

Übergabe eines Pfades (maximale Länge meist Const MAX_PATH = 260).
Bei Zugriff auf einen COM-Anschluss wird nach dem Portnamen ein Doppelpunkt erwartet
z.B.: COM1:


dwDesiredAccess [Übergabe]

Übergabe der Zugriffsart.
GENERIC_READ, GENERIC_WRITE, GENERIC_EXECUTE, weitere Flags und Mischformen.[1]


dwShareMode [Übergabe]

Gibt das Verhalten der Datei gegenüber anderen Zugriffen an.
FILE_SHARE_DELETE, FILE_SHARE_READ, FILE_SHARE_WRITE und Mischformen.


lpSecurityAttributes [Übergabe]

Sicherheitsattribute der neu erstellten Datei. Meist wird ein Nullzeiger übergeben, dann wird ein Standard-Sicherheitsdeskriptor verwendet.


dwCreationDisposition [Übergabe]

Gibt an, wie sich CreateFile bei verschiedenen Situationen verhält. Ist die
Datei beispielsweise bereits vorhanden, so wird bei gesetztem Flag CREATE_ALWAYS die Datei
überschrieben.
Eine vollständige Liste der Flags findet sich in der MSDN Library[2]


dwFlagsAndAttributes [Übergabe]

Gibt an, mit welchen Dateiattributen die Datei erstellt werden soll. Gibt außerdem weitere Flags an.
Eine vollständige Liste der Flags findet sich in der MSDN Library[3]


hTemplateFile [Übergabe]

Ein Handle auf eine geöffnete Vorlagendatei, aus der die Dateiattribute kopiert werden. In den meisten Fällen wird ein Nullzeiger übergeben.


Rückgabewert(e):

Ein Dateihandle ungleich INVALID_HANDLE_VALUE ist ein Zeichen für den erfolgreichen Zugriff. Wenn die Datei hingegen schon vor dem Zugriff existiert hat, und der Flag CREATE_ALWAYS / OPEN_ALWAYS gesetzt wurde, so gibt GetLastError ERROR_ALREADY_EXISTS zurück, obgleich die Funktion erfolgreich war. Wenn die Datei noch nicht vorhanden war, so gibt GetLastError ERROR_SUCCESS zurück.

Um festzustellen, ob ein Dateihandle gültig ist, empfielt sich ein Vergleich mit Const INVALID_HANDLE_VALUE As Long = -1 durchzuführen.


Sonstige Hinweise:

Um ein Objekthandle wieder zu schließen (und das Objekt damit ggf. freizugeben), ist die CloseHandle-Funktion zu verwenden.

Weitere Hinweise, wie beispielsweise zur Verwendung mit FILE_FLAG_NO_BUFFERING finden sich in der MSDN[4]


Beispiel:

    FileHandle = CreateFile(Path, GENERIC_READ, FILE_SHARE_READ Or _
                            FILE_SHARE_WRITE, 0, OPEN_EXISTING, _
                            FILE_FLAG_NO_BUFFERING, 0)
    
    If FileHandle = INVALID_HANDLE_VALUE Then
        'Fehler beim Zugriff
    End If