Zum Hauptinhalt springen

DrvFlushFile

DrvFlushFile

Aufruf beim Schreiben des Festplattencaches

Details

  • Request
  • MessageId: _DrvReqFlushFile Id des Ereignisses
  • ItemHeader: _DrvItemHeader Kopf des Datenpakets
  • ProtocolId: 0xF3A49E52 Id des verwendeten Protokolls
  • ProtocolVersion: 0x00040000 Version des verwendeten Protokolls
  • ItemAuthUserDomain: _DrvItemAuthUserDomain Informationsbereich des am Betriebssystem angemeldeten Benutzers
  • UserName: alpha Name des angemeldeten Benutzers
  • DomainName: alpha Domäne des angemeldeten Benutzers
  • ItemFilePath: _DrvItemFilePath Informationsbereich für die Datei
  • FilePath: alpha Pfad und Dateiname (ohne Laufwerksbuchstabe)
  • ItemFileCustom: _DrvItemFileCustom Informationsbereich für benutzerdefinierte Daten
  • Custom01: alpha Benutzerdefinierte Informationen
  • ItemFileAttributes: _DrvItemFileAttributes Informationsbereich für Dateiattribute
  • FileAttributes: int Dateiattribute
  • ItemFileTime: _DrvItemFileTime Informationsbereich für Dateidatum und -uhrzeit
  • CreationTime: bigint Datum und Uhrzeit der Dateierzeugung
  • LastAccessTime: bigint Datum und Uhrzeit des letzten Zugriffs
  • LastWriteTime: bigint Datum und Uhrzeit der letzten Änderung
  • ItemFileContentDisk: _DrvItemFileContentDisk Informationsbereich für den Inhalt der Datei
  • FilePath: alpha Pfad und Dateiname der Datei im temporären Pfad
  • Siehe: Verwandte Befehle

Das Ereignis wird ausgelöst, wenn die Datei aus dem Festplattencache auf das Laufwerk geschrieben wird. Die Datei bleibt weiterhin geöffnet. Das Schließen der Datei erfolgt in DrvCloseFile . Im Datenpaket befinden sich folgende Informationen:

  • ItemAuthUserDomain Hier wird der beim Betriebssystem angemeldete Benutzer und die Domäne, in der er angemeldet ist, übergeben.

  • ItemFilePath Der Pfad und Dateiname der Datei. Der Pfad wird ohne den Laufwerksbuchstaben angegeben.

  • ItemFileCustom Wurden für die Datei benutzerdefinierte Daten angegeben, befinden sich diese in diesem Bereich.

  • ItemFileAttributes Der Wert in dem Bereich FileAttributes kann mit folgenden Konstanten verglichen werden:

  • _FsiAttrHidden: Versteckte Datei

  • _FsiAttrSystem: Systemdatei

  • _FsiAttrDir: Verzeichnis

  • _FsiAttrArchive: Archivdatei

  • ItemFileTime In diesem Bereich befinden sich das Datum und die Uhrzeit für die Erstellung (CreationTime), den letzten Zugriff (LastAccessTime) und die letzte Änderung (LastWriteTime) der Datei. Der Wert wird als Zeitstempel angegeben, dieser kann mit folgender Anweisung gelesen werden:

tDrvMsxRead->MsxRead(_MsxData, tTimeStamp);
tCalTime # CnvCB(tTimeStamp);
  • ItemFileContentDisk Der Inhalt der Datei wird in einem temporären Verzeichnis gespeichert. Das Verzeichnis und der Dateiname dieser Datei befinden sich in FilePath. Die Datei darf in dem Pfad nicht gelöscht oder geändert werden. Die Werte der Datei (Hash, Dateigröße, ...) müssen in dem Antwortpaket übertragen werden.

  • Response

  • MessageId

    • _DrvResFlushFile
    • Id der Antwort
  • ItemHeader

    • _DrvItemHeader
    • Kopf des Datenpakets
  • ProtocolId

    • 0xF3A49E52
    • Id des verwendeten Protokolls
  • ProtocolVersion

    • 0x00040000
    • Version des verwendeten Protokolls
  • ItemFileCustom

  • Custom01

    • alpha
    • Benutzerdefinierte Informationen
  • ItemFileHash

  • FileHash

    • alpha
    • Hash der gespeicherten Datei
  • ItemFileSize

  • FileSize

    • bigint
    • Größe der Datei (in Bytes)
  • ItemFileAttributes

  • FileAttributes

    • int
    • Dateiattribute
  • ItemFileTime

  • CreationTime

    • bigint
    • Zeitstempel der Erzeugung der Datei
  • LastAccessTime

    • bigint
    • Zeitstempel des letzten Zugriffs
  • LastWriteTime

    • bigint
    • Zeitstempel der letzten Änderung
  • ItemFileAuthorisation

  • UserId

    • int
    • Zugriffs-Id
  • Authorisation

    • int
    • Berechtigungen
  • ItemResult

  • Result

    • int
    • Ergebniswert

Der Bereich ItemFileCustom ist optional. Die benutzerdefinierten Informationen werden nur dann geändert, wenn dieser Bereich im Antwortdatenpaket enthalten ist. Zum Löschen der benutzerdefinierten Daten muss ein Leerstring angegeben werden.

Die Datei wird nur dann geschrieben, wenn in Result _ErrOk (0) angegeben wird. Durch das Setzen eines _ErrFsi...-Wertes können andere Fehlerzustände übermittelt werden.

Beispiel:

if (tDrvRequestMessageId = _DrvReqFlushFile)
{
tDrvMsxWrite # MsxOpen(_MsxSocket | _MsxWrite, tSck);

tDrvMsxWrite->MsxWrite(_MsxMessage, _DrvResFlushFile);
tDrvMsxWrite->MsxWrite(_MsxItem, _DrvItemHeader); // ItemHeader
tDrvMsxWrite->MsxWrite(_MsxData, 0xF3A49E52); // ProtocolId
tDrvMsxWrite->MsxWrite(_MsxData, 0x00040000); // ProtocolVersion

tDrvMsxWrite->MsxWrite(_MsxItem, _DrvItemFileCustom);
tDrvMsxWrite->MsxWrite(_MsxData, ''); // no custom data

tHash # StrCnv(StrCnv(FsiFileInfo(tRequestContentDiskFilePath, _FsiFileRMD160), _StrToUTF8), _StrFromANSI);
tDrvMsxWrite->MsxWrite(_MsxItem, _DrvItemFileHash); // set hash
tDrvMsxWrite->MsxWrite(_MsxData, tHash);
// File size
tDrvMsxWrite->MsxWrite(_MsxItem, _DrvItemFileSize); // set file size
tDrvMsxWrite->MsxWrite(_MsxData, tImportedFile->FsiSize64());

tDrvMsxWrite->MsxWrite(_MsxItem, _DrvItemFileAttributes); // set same attributes
tDrvMsxWrite->MsxWrite(_MsxData, tRequestFileAttributes);

tDrvMsxWrite->MsxWrite(_MsxItem, _DrvItemFileTime); // set file time
tDrvMsxWrite->MsxWrite(_MsxData, tRequestFileCreationTime);
tCalSystemTime->vmSystemTime();
tDrvMsxWrite->MsxWrite(_MsxData, CnvBC(tCalSystemTime));
tDrvMsxWrite->MsxWrite(_MsxData, CnvBC(tCalSystemTime));

tDrvMsxWrite->MsxWrite(_MsxItem, _DrvItemFileAuthorisation); // user authorisation for admins
tDrvMsxWrite->MsxWrite(_MsxData, 10);
tDrvMsxWrite->MsxWrite(_MsxData, _DrvAuthAll); // all rights

tDrvMsxWrite->MsxWrite(_MsxItem, _DrvItemFileAuthorisation); // user authorisation for everybody else
tDrvMsxWrite->MsxWrite(_MsxData, 12);
tDrvMsxWrite->MsxWrite(_MsxData, _DrvAuthList | _DrvAuthRead); // read only

tDrvMsxWrite->MsxWrite(_MsxItem, _DrvItemResult); // Write result
tDrvMsxWrite->MsxWrite(_MsxData, _ErrOk);
tDrvMsxWrite->MsxWrite(_MsxEnd, 0);

tDrvMsxWrite->MsxClose();
}