Tom: Locking beim DOS + Windows für NOVELL

Beitrag lesen

Hello,

Unter Windows bekommt Rechner/Prozess C eine Fehlermeldung (Sharing Violation) und muss den Zugriff selbständig wiederholen. Ein "Warte bis Datei freigegeben" gibt es unter Windows AFAIK nicht, wenn es nicht auf Anwendungsebene implementiert wird.

Ich weiß nur noch auswendig, wie es bei Windows 98 war, bzw beim Zusammenspiel von DOS und NOVELL.

Dos bekam durch die Netzwerkshell eine Erweiterung des Int 21h für die Netzwerkzugriffe. Diese wurden dann über die Shell an den Server gesandt und dort umgestezt. Ein Warten gab es nicht.

"Filemode 2" war der alte Öffnungsmode für rdwr-lock
Durch setzen des share-flags konnte man dann sagen, ich teile die Datei mit anderen und durch setzen der share bzw exclusive-Flags konnte man dann genau das erreichen, was man heute auch erreichen kann.

Und ein bisschen alten Code für eine eigene NOVELL-API auf DOS  habe ich auch noch  gefunden ;-)
Es gab also beim Record-Locking eine Wartezeit, die man in Ticks vorgeben konnte.
Hier ein kleiner Ausschnitt...

Function NewRecLock(Var DataBase : File;
                        Pos      : Longint;
                        Len      : Longint;
                        LOCK     : Boolean;
                        EXCL     : Boolean;
                        TIMEOUT  : Word ) :Word;
var
  Regs        : Registers;
  Flags       : Byte;
begin
  Regs.AH := $BC;       { Funktion Log Physical Record }

Flags := 0;
  If Lock then Flags := (Flags or 1);
  If not EXCL then Flags := (Flags or 2); { Bit 1 setzen für Non-Excl }
  Regs.AL := Flags;
  Regs.BX := FileRec(Database).Handle;

Regs.CX := DWord(Pos).HiWord;   { Position des Records im File }
  Regs.DX := DWord(Pos).LoWord;

Regs.SI := DWord(Len).HiWord;   { Länge des Records }
  Regs.DI := DWord(Len).LoWord;

Regs.BP := TimeOut;             { Wartezeit in Ticks, für Lockversuch }

MsDos(Regs);

case Regs.AL of
     0: NewRecLock := 0;
   $96: NewRecLock := 90;         { zu wenig dynamischer Speicher im Server }
   $FE: NewRecLock := 91;         { Time-Out-Fehler }
   $FF: NewRecLock := 92;         { Sperrversuch abgewiesesen, "FAILED" }
   else NewRecLock := 59;         { Nichterkundbarer Netzwerkfehler }
  end; { Case Regs.AL }
end;

Wenn ich noch ein bisschen weiterkrame, finde ich die Files für Windows (bis NT 4.0) sicher auch noch.

Harzliche Grüße vom Berg
http://bergpost.annerschbarrich.de

Tom

--
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau
Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)