[Back to NETWORK SWAG index]  [Back to Main SWAG index]  [Original]

{
            ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
            º     ÚËÍÍÍË¿ÚËÍÍÍË¿ÚËÍÍÍË¿ÚËÍ» Ë¿ÚËÍÍÍË¿ÚÉÍËÍ»¿   º
            º     ³ÌÍÍÍÊÙÃÎÍÍÍδÀÊÍÍÍË¿³º º º³ÃÎÍÍ      º      º
            º     ÀÊ     ÀÊ   ÊÙÀÊÍÍÍÊÙÀÊ ÈÍÊÙÀÊÍÍÍÊÙ   Ê      º
            º                                                  º
            º     NetWare 3.11 API Library for Turbo Pascal    º
            º                      by                          º
            º                 S.Perevoznik                     º
            º                     1996                         º
            ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
}

Unit NetBind;

Interface

Uses NetConv;



Const

  OT_UNKNOWN                      = $00;
  OT_USER                         = $01;
  OT_USER_GROUP                   = $02;
  OT_PRINT_QUEUE                  = $03;
  OT_FILE_SERVER                  = $04;
  OT_JOB_SERVER                   = $05;
  OT_GATEWAY                      = $06;
  OT_PRINT_SERVER                 = $07;
  OT_ARCHIVE_QUEUE                = $08;
  OT_ARCHIVE_SERVER               = $09;
  OT_JOB_QUEUE                    = $0A;
  OT_ADMINISTRATION               = $0B;

  OT_NAS_SNA_GATEWAY              = $21;  { }
  OT_REMOTE_BRIDGE_SERVER         = $24;  { }
  OT_TIME_SYNCHRONIZATION_SERVER  = $2D;  { }
  OT_ARCHIVE_SERVER_DYNAMIC_SAP   = $2E;  { }
  OT_ADVERTISING_PRINT_SERVER     = $47;  { }
  OT_BTRIEVE_VAP                  = $4B;  { }
  OT_PRINT_QUEUE_USER             = $53;  { }

Function ScanBinderyObject( searchObjectName : string;
                            searchObjectType : word;
                            Var objectID     : LongInt;
                            Var objectName   : string;
                            Var objectType   : word;
                            Var objectHasProperties  : byte;
                            Var objectFlag           : byte;
                            Var objectSecurity       : byte ) : byte;

Function ScanProperty( ObjectName           : string;
                       ObjectType           : word;
                       SearchPropertyName   : string;
                       Var SequenceNumber   : LongInt;
                       Var PropertyName     : string;
                       Var PropertyFlags    : byte;
                       Var PropertySecurity : byte;
                       Var PropertyHasValue : byte;
                       Var MoreProperties   : byte) : byte;


Function ReadPropertyValue(ObjectName       : string;
                           ObjectType       : word;
                           PropertyName     : string;
                           SegmentNumber    : byte;
                           Var PropertyValue: string;
                           Var MoreSegments : byte;
                           Var PropertyFlags: byte) : byte;

Implementation

Uses Dos;

Function ScanBinderyObject( searchObjectName : string;
                            searchObjectType : word;
                            Var objectID     : LongInt;
                            Var objectName   : string;
                            Var objectType   : word;
                            Var objectHasProperties  : byte;
                            Var objectFlag           : byte;
                            Var objectSecurity       : byte ) : byte;

 var
   r : registers;
   SendPacket  : array[0..57] of byte;
   ReplyPacket : array[0..59] of byte;
   WordPtr     : ^word;
   LongPtr     : ^longInt;

begin
   SendPacket[2] := 55;
   LongPtr  := addr(SendPacket[3]);
   LongPtr^ := GetLong(addr(ObjectID));
   WordPtr  := addr(SendPacket[7]);
   WordPtr^ := GetWord(addr(SearchObjectType));
   SendPacket[9] := Length(SearchObjectName);
   move(SearchObjectName[1],SendPacket[10],Length(SearchObjectName));
   WordPtr  := Addr(SendPacket);
   WordPtr^ := Length(SearchObjectName) + 8;
   WordPtr  := Addr(ReplyPacket);
   WordPtr^ := 57;
   r.AH := 227;
   r.BX := r.DS;
   r.DS := SEG(SendPacket);
   r.SI := OFS(SendPacket);
   r.ES := SEG(ReplyPacket);
   r.DI := OFS(ReplyPacket);
   intr($21,r);
   ScanBinderyObject := r.AL;
   r.DS := r.BX;
   if r.AL = 0 then
    begin
      ObjectID   := GetLong(addr(ReplyPacket[2]));
      ObjectType := GetWord(addr(ReplyPacket[6]));
      move(ReplyPacket[8],ObjectName[1],48);
      ObjectName[0]  := chr(48);
      ObjectFlag     := ReplyPacket[56];
      ObjectSecurity := ReplyPacket[57];
      ObjectHasProperties := ReplyPacket[58];
    end;
end;

Function ScanProperty( ObjectName           : string;
                       ObjectType           : word;
                       SearchPropertyName   : string;
                       Var SequenceNumber   : LongInt;
                       Var PropertyName     : string;
                       Var PropertyFlags    : byte;
                       Var PropertySecurity : byte;
                       Var PropertyHasValue : byte;
                       Var MoreProperties   : byte) : byte;

 var
   r : registers;
   SendPacket  : array[0..57] of byte;
   ReplyPacket : array[0..59] of byte;
   WordPtr     : ^word;
   LongPtr     : ^longInt;

begin
   SendPacket[2] := 60;
   WordPtr  := addr(SendPacket[3]);
   WordPtr^ := GetWord(addr(ObjectType));
   SendPacket[5] := Length(ObjectName);
   move(ObjectName[1],SendPacket[6],Length(ObjectName));
   LongPtr  := Addr(SendPacket[Length(ObjectName)+6]);
   LongPtr^ := GetLong(addr(SequenceNumber));
   SendPacket[Length(ObjectName) + 10] := Length(SearchpropertyName);
   move(SearchPropertyName[1],SendPacket[Length(ObjectName) + 11],
        Length(searchPropertyName));
   WordPtr  := Addr(SendPacket);
   WordPtr^ := Length(ObjectName) + Length(SearchPropertyName) + 9;
   WordPtr  := Addr(ReplyPacket);
   WordPtr^ := 26;
   r.AH := 227;
   r.BX := r.DS;
   r.DS := SEG(SendPacket);
   r.SI := OFS(SendPacket);
   r.ES := SEG(ReplyPacket);
   r.DI := OFS(ReplyPacket);
   intr($21,r);
   ScanProperty := r.AL;
   r.DS := r.BX;
   if r.AL = 0 then
    begin
      move(ReplyPacket[2],PropertyName[1],16);
      PropertyName[0]  := chr(16);
      PropertyFlags    := ReplyPacket[18];
      PropertySecurity := ReplyPacket[19];
      SequenceNumber   := GetLong(addr(ReplyPacket[20]));
      PropertyHasValue := ReplyPacket[24];
      MoreProperties   := ReplyPacket[25];
    end;
end;

Function ReadPropertyValue(ObjectName       : string;
                           ObjectType       : word;
                           PropertyName     : string;
                           SegmentNumber    : byte;
                           Var PropertyValue: string;
                           Var MoreSegments : byte;
                           Var PropertyFlags: byte) : byte;
 var
   r : registers;
   SendPacket  : array[0..70] of byte;
   ReplyPacket : array[0..132] of byte;
   WordPtr     : ^word;
   LongPtr     : ^longInt;
   i           : byte;
begin
    SendPacket[2] := 61;
    WordPtr  := addr(SendPacket[3]);
    WordPtr^ := GetWord(addr(ObjectType));
    SendPacket[5] := Length(ObjectName);
    move(ObjectName[1],SendPacket[6],Length(ObjectName));
    SendPacket[Length(ObjectName) + 6] := SegmentNumber;
    SendPacket[Length(ObjectName) + 7] := Length(PropertyName);
    move(PropertyName[1],SendPacket[Length(ObjectName) + 8],
         Length(PropertyName));
   WordPtr  := Addr(SendPacket);
   WordPtr^ := Length(ObjectName) + Length(PropertyName) + 6;
   WordPtr  := Addr(ReplyPacket);
   WordPtr^ := 130;
   r.AH := 227;
   r.BX := r.DS;
   r.DS := SEG(SendPacket);
   r.SI := OFS(SendPacket);
   r.ES := SEG(ReplyPacket);
   r.DI := OFS(ReplyPacket);
   intr($21,r);
   ReadPropertyValue := r.AL;
   if r.AL = 0 then
    begin
      move(ReplyPacket[2],PropertyValue[1],128);
      PropertyValue[0] := chr(128);
      i := Pos(chr(0),PropertyValue);
      PropertyValue[0] := chr(i);
      MoreSegments  := ReplyPacket[130];
      PropertyFlags := ReplyPacket[131];
    end;
end;



end.

[Back to NETWORK SWAG index]  [Back to Main SWAG index]  [Original]