DrvFlushFile
DrvFlushFile
Aufruf beim Schreiben des Festplattencaches
Details
- Request
MessageId:_DrvReqFlushFileId des EreignissesItemHeader:_DrvItemHeaderKopf des DatenpaketsProtocolId:0xF3A49E52Id des verwendeten ProtokollsProtocolVersion:0x00040000Version des verwendeten ProtokollsItemAuthUserDomain:_DrvItemAuthUserDomainInformationsbereich des am Betriebssystem angemeldeten BenutzersUserName:alphaName des angemeldeten BenutzersDomainName:alphaDomäne des angemeldeten BenutzersItemFilePath:_DrvItemFilePathInformationsbereich für die DateiFilePath:alphaPfad und Dateiname (ohne Laufwerksbuchstabe)ItemFileCustom:_DrvItemFileCustomInformationsbereich für benutzerdefinierte DatenCustom01:alphaBenutzerdefinierte InformationenItemFileAttributes:_DrvItemFileAttributesInformationsbereich für DateiattributeFileAttributes:intDateiattributeItemFileTime:_DrvItemFileTimeInformationsbereich für Dateidatum und -uhrzeitCreationTime:bigintDatum und Uhrzeit der DateierzeugungLastAccessTime:bigintDatum und Uhrzeit des letzten ZugriffsLastWriteTime:bigintDatum und Uhrzeit der letzten ÄnderungItemFileContentDisk:_DrvItemFileContentDiskInformationsbereich für den Inhalt der DateiFilePath:alphaPfad 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:
-
ItemAuthUserDomainHier wird der beim Betriebssystem angemeldete Benutzer und die Domäne, in der er angemeldet ist, übergeben. -
ItemFilePathDer Pfad und Dateiname der Datei. Der Pfad wird ohne den Laufwerksbuchstaben angegeben. -
ItemFileCustomWurden für die Datei benutzerdefinierte Daten angegeben, befinden sich diese in diesem Bereich. -
ItemFileAttributesDer Wert in dem BereichFileAttributeskann mit folgenden Konstanten verglichen werden: -
_FsiAttrHidden: Versteckte Datei -
_FsiAttrSystem: Systemdatei -
_FsiAttrDir: Verzeichnis -
_FsiAttrArchive: Archivdatei -
ItemFileTimeIn 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);
-
ItemFileContentDiskDer Inhalt der Datei wird in einem temporären Verzeichnis gespeichert. Das Verzeichnis und der Dateiname dieser Datei befinden sich inFilePath. 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
-
ProtocolId0xF3A49E52- Id des verwendeten Protokolls
-
ProtocolVersion0x00040000- Version des verwendeten Protokolls
-
ItemFileCustom_DrvItemFileCustom- Informationsbereich für benutzerdefinierte Daten
-
Custom01alpha- Benutzerdefinierte Informationen
-
ItemFileHash_DrvItemFileHash- Informationsbereich der Prüfsumme
-
FileHashalpha- Hash der gespeicherten Datei
-
ItemFileSize_DrvItemFileSize- Informationsbereich der Dateigröße
-
FileSizebigint- Größe der Datei (in Bytes)
-
ItemFileAttributes_DrvItemFileAttributes- Informationsbereich für Dateiattribute
-
FileAttributesint- Dateiattribute
-
ItemFileTime_DrvItemFileTime- Informationsbereich für Dateidatum und -uhrzeit
-
CreationTimebigint- Zeitstempel der Erzeugung der Datei
-
LastAccessTimebigint- Zeitstempel des letzten Zugriffs
-
LastWriteTimebigint- Zeitstempel der letzten Änderung
-
ItemFileAuthorisation_DrvItemFileAuthorisation- Informationsbereich für Berechtigungen
-
UserIdint- Zugriffs-Id
-
Authorisationint- Berechtigungen
-
ItemResult_DrvItemResult- Ergebnis-Bereich
-
Resultint- 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();
}