Process Monitor zeigt die Dispositions-Option für die CreateFile-Operation als "Open", "OpenIf", "Overwrite", "OverwriteIf" (kann auch etwas anderes sein) an. Wie unterscheiden sich die Optionen, die "If" enthalten, von denen, die es nicht tun? Und welchen CreateFile WinAPI-Funktionsflags entsprechen sie?
Antworten
Zu viele Anzeigen?CreateFile() ist die WinAPI-Funktion. Process Monitor patcht jedoch das native Betriebssystem, es ähnelt nur oberflächlich der WinAPI. Es ist ziemlich ähnlich zu VMS, dem Betriebssystem, das Dave Cutler entworfen hat, als er noch bei DEC arbeitete. Process Monitor hookt NtCreateFile, folgen Sie dem Link, um die dokumentierten Werte des CreateDisposition-Arguments zu sehen. Kopiert:
FILE_SUPERSEDE
. Wenn die Datei bereits existiert, ersetzen Sie sie durch die angegebene Datei. Wenn nicht, erstellen Sie die angegebene Datei.FILE_CREATE
. Wenn die Datei bereits existiert, schlagen Sie die Anforderung fehl und erstellen oder öffnen Sie die angegebene Datei nicht. Wenn nicht, erstellen Sie die angegebene Datei.FILE_OPEN
. Wenn die Datei bereits existiert, öffnen Sie sie anstelle von Erstellen einer neuen Datei. Wenn nicht, schlagen Sie die Anforderung fehl und erstellen Sie keine neue Datei.FILE_OPEN_IF
. Wenn die Datei bereits existiert, öffnen Sie sie. Wenn nicht, erstellen Sie die angegebene Datei.FILE_OVERWRITE
. Wenn die Datei bereits existiert, öffnen Sie sie und überschreiben Sie sie. Wenn nicht, schlagen Sie die Anforderung fehl.FILE_OVERWRITE_IF
. Wenn die Datei bereits existiert, öffnen Sie sie und überschreiben Sie sie. Wenn nicht, erstellen Sie die angegebene Datei.
CreateFile dwCreationDisposition
NtCreateFile CreateDisposition
Process Monitor Disposition
n/a
FILE_SUPERSEDE (0)
Ersetzen (?)
OPEN_EXISTING (3)
FILE_OPEN (1)
Öffnen
TRUNCATE_EXISTING (5)
FILE_OPEN (1)
Öffnen
CREATE_NEW (1)
FILE_CREATE (2)
Erstellen
OPEN_ALWAYS (4)
FILE_OPEN_IF (3)
ÖffnenWenn
n/a
FILE_OVERWRITE (4)
Überschreiben (?)
CREATE_ALWAYS (2)
FILE_OVERWRITE_IF (5)
ÜberschreibenWenn