Zum Hauptinhalt springen

DrvCreateFile

Dieses Ereignis wird aufgerufen, wenn eine Datei oder ein Verzeichnis auf dem Laufwerk erzeugt wird. In dem Request wird der am Betriebssystem angemeldete Benutzer übergeben. In FilePath befindet sich der Pfad (ohne Laufwerksbuchstaben) und der Dateiname der neu angelegten Datei. Der Inhalt von FsiFlags kann mit folgenden Konstanten, oder Kombinationen davon, verglichen werden:

Die Dateiattribute stehen in FileAttributes und können mit folgenden Konstanten verglichen werden:

  • _FsiAttrHidden: Versteckte Datei

  • _FsiAttrSystem: Systemdatei

  • _FsiAttrDir: Verzeichnis

  • _FsiAttrArchive: Archivdatei

  • Response

  • MessageId

    • _DrvResCreateFile
    • 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
  • ItemFileAuthorisation

  • UserId

    • int
    • Zugriffs-Id
  • Authorisation

    • int
    • Berechtigungen
  • ItemResult

  • Result

    • int
    • Ergebniswert

Der Bereich ItemFileCustom ist optional. Die übergebenen Informationen in Custom01 werden bei jeder Dateioperation wieder übertragen. Hier können vom Programmierer Informationen zur späteren Verarbeitung angegeben werden.

Der Bereich ItemFileAuthorisation muss für jede Zugriffs-Id angegeben werden. Können sich Benutzer mit zwei unterschiedlichen Zugriffs-Ids anmelden (siehe DrvLoginDomainUser), müssen hier zwei Bereiche mit den entsprechenden Berechtigungen angegeben werden. Die Berechtigungen werden als ODER-Kombination folgender Konstanten übergeben:

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

Beispiel:

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

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

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

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();
}