Zum Hauptinhalt springen

DrvInit

DrvInit

Aufruf beim Start des Laufwerkstreibers

Details

  • Request
  • MessageId: _DrvReqInit Id des Ereignisses
  • ItemHeader: _DrvItemHeader Kopf des Datenpakets
  • ProtocolId: 0xF3A49E52 Id des verwendeten Protokolls
  • ProtocolVersion: 0x00040000 Version des verwendeten Protokolls
  • ItemComputerName: _DrvItemComputerName Informationsbereich des Computers
  • ComputerName: alpha Name des Rechners auf dem der Laufwerkstreiber gestartet ist
  • ItemDriverData: _DrvItemDriverData Informationsbereich des Treibers
  • DriverData: alpha Versionsnummer des installierten Treibers
  • Siehe: Verwandte Befehle

Dieses Ereignis wird beim Start des Laufwerkstreibers aufgerufen. In dem übergebenen Datenpaket wird der Name des Rechners, auf dem der Laufwerkstreiber gestartet wurde (ComputerName), und die Version des Treibers (DriverVersion) übergeben.

Der Treiber erwartet folgendes Datenpaket:

  • Response
  • MessageId
    • _DrvResInit
    • Id der Antwort
  • ItemHeader
    • _DrvItemHeader
    • Kopf des Datenpakets
  • ProtocolId
    • 0xF3A49E52
    • Id des verwendeten Protokolls
  • ProtocolVersion
    • 0x00040000
    • Version des verwendeten Protokolls
  • ItemCfgMountLocal
  • DriveLetter
    • alpha
    • Der Laufwerksbuchstabe des lokalen Laufwerks
  • ItemCfgMountNetwork
  • ShareName
    • alpha
    • Freigabename des Laufwerks
  • ItemCfgCacheDisk
  • CacheMaxSize
    • bigint
    • Maximaler Festplattenspeicher, der zur Zwischenspeicherung der Inhalte verwendet wird. Es wird ein entsprechendes Verzeichnis im temporären Pfad des Betriebssystems angelegt.
  • CachePath
    • alpha
    • Laufwerk und Pfad für temporäre Dateien
  • ItemCfgIgnoreMaskRequest
  • FileMask
    • alpha
    • Hier kann eine Pipe-separierte Liste mit Dateimasken angegeben werden. Für die entsprechenden Dateien werden keine Dateiinformationen (siehe DrvGetFileInfo ) abgefragt.
  • ItemResult
  • Result
    • int
    • Ergebniswert

Damit ein Laufwerk erstellt werden kann, muss mindestens einer der Bereiche ItemCfgMountLocal oder ItemCfgMountNetwork angegeben werden. Wird nur eine Netzwerkfreigabe erzeugt, kann das Laufwerk auch noch zu einem späteren Zeitpunkt einem Laufwerksbuchstaben zugewiesen werden. Sind beide Bereiche angegeben, wird eine Netzwerkfreigabe erzeugt und der angegebene Laufwerksbuchstabe zugewiesen.

Ein freier Laufwerksbuchstabe kann mit der Anweisung FsiDiskInfo (..., _FsiDiskExists ) ermittelt werden.

Im Bereich ItemCfgCacheDisk wird die maximale Speichernutzung und der Pfad für temporäre Dateien angegeben. In dem Verzeichnis wird das Unterverzeichnis DRIVE_CACHE angelegt. Wird kein Pfad angegeben, erfolgt die Speicherung in dem Unterverzeichnis DRIVE_CACHE im Windows-Pfad für temporäre Dateien. Das Verzeichnis wird beim Beenden des Laufwerkstreibers entfernt.

info

Sind zu diesem Zeitpunkt noch veränderte Dateien geöffnet, kann das Verzeichnis nicht entfernt werden (siehe DrvTerm ).

info

Der Inhalt des Verzeichnisses wird beim Start vollständig geleert. Sollten dort Dateien (z. B. anderer Programme) enthalten sein, sind diese nach dem Start des Laufwerkstreibers nicht mehr vorhanden. Es ist daher wichtig, dass dieses Verzeichnis exklusiv dem Laufwerkstreiber zur Verfügung steht.

Die Angabe des Bereichs ItemCfgIgnoreMaskRequest ist optional.

Wird in Result _ErrOk angegeben, ist die Initialisierung erfolgreich. Bei _ErrDrvQuit wird der Laufwerkstreiber beendet. Wird ein anderer Fehlerwert angegeben, startet sich der Laufwerkstreiber nach einer Minute erneut.

Kann das angegebene Laufwerk oder die Netzwerkfreigabe nicht erzeugt werden, wird ein Fehler generiert und das Ereignis DrvError aufgerufen.

Beispiel:

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

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

tDrvMsxWrite->MsxWrite(_MsxItem, _DrvItemCfgMountLocal); // mount local drive
tDrvMsxWrite->MsxWrite(_MsxData, StrCnv(StrCnv('T', _StrToUTF8), _StrFromANSI)); // drive letter
tDrvMsxWrite->MsxWrite(_MsxItem, _DrvItemCfgCacheDisk); // define the cache size of the disc
tDrvMsxWrite->MsxWrite(_MsxData, 1000000000\b); // 1 GB
tDrvMsxWrite->MsxWrite(_MsxData, ''); // use default path

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

tDrvMsxWrite->MsxClose();
}

Werden mehrere Laufwerke eingerichtet, muss jedes Laufwerk einen eigenen Laufwerksbuchstaben und/oder Freigabenamen bekommen. Jedes Laufwerk benötigt einen eigene SOA-Task . Die Anfragen von den verschiedenen Laufwerken können dann über die Namen der Tasks unterschieden werden.

switch (aSvcHdl->spSvcName)
{
case 'DrvSoaSocketPicture' :
{
DrvSend:DrvCfgMountLocal('T');
DrvSend:DrvCfgMountNetwork('DbSharePic');
DrvSend:DrvCfgCacheDisk(1000000000\b, 'F:\Temp\Pic\');
}
case 'DrvSoaSocketData' :
{
DrvSend:DrvCfgMountLocal('Q');
DrvSend:DrvCfgMountNetwork('DbShareData');
DrvSend:DrvCfgCacheDisk(1000000000\b, 'F:\Temp\Data\');
}
}