123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301 |
- unit nb30;
- // This module contains the definitions for portable NetBIOS 3.0
- // support.
- interface
- uses windows;
- {***************************************************************
- * *
- * Data structure templates *
- * *
- ***************************************************************}
- const
- nbdllname = 'netapi32.dll';
- NCBNAMSZ = 16; { absolute length of a net name }
- MAX_LANA = 254; { lana's in range 0 to MAX_LANA inclusive }
- {
- * Network Control Block
- }
- Type
- PNCB = ^_NCB;
- NCB_post_type = procedure (p: PNCB); stdcall;
- _NCB = packed record
- ncb_command : UCHAR; { command code }
- ncb_retcode : UCHAR; { return code }
- ncb_lsn : UCHAR; { local session number }
- ncb_num : UCHAR; { number of our network name }
- ncb_buffer : PUCHAR; { address of message buffer }
- ncb_length : WORD; { size of message buffer }
- ncb_callname : array [0..NCBNAMSZ-1] of UCHAR; { blank-padded name of remote }
- ncb_name : array [0..NCBNAMSZ-1] of UCHAR; { our blank-padded netname }
- ncb_rto : UCHAR; { rcv timeout/retry count }
- ncb_sto : UCHAR; { send timeout/sys timeout }
- ncb_post : ncb_post_type; { POST routine address }
- ncb_lana_num : UCHAR; { lana (adapter) number }
- ncb_cmd_cplt : UCHAR; { $ff => commmand pending }
- {$ifdef WIN64}
- ncb_reserve : array[0..17] of UCHAR; { reserved, used by BIOS }
- {$else}
- ncb_reserve : array[0..9] of UCHAR; { reserved, used by BIOS }
- {$endif}
- ncb_event : THandle; { HANDLE to Win32 event which }
- { will be set to the signalled }
- { state when an ASYNCH command }
- { completes }
- end;
- NCB = _NCB;
- {
- * Structure returned to the NCB command NCBASTAT is ADAPTER_STATUS followed
- * by an array of NAME_BUFFER structures.
- }
- ADAPTER_STATUS = packed record
- adapter_address : Array [0..5] of UCHAR;
- rev_major : UCHAR;
- reserved0 : UCHAR;
- adapter_type : UCHAR;
- rev_minor : UCHAR;
- duration : WORD;
- frmr_recv : WORD;
- frmr_xmit : WORD;
- iframe_recv_err : WORD;
- xmit_aborts : WORD;
- xmit_success : DWORD;
- recv_success : DWORD;
- iframe_xmit_err : WORD;
- recv_buff_unavail : WORD;
- t1_timeouts : WORD;
- ti_timeouts : WORD;
- reserved1 : DWORD;
- free_ncbs : WORD;
- max_cfg_ncbs : WORD;
- max_ncbs : WORD;
- xmit_buf_unavail : WORD;
- max_dgram_size : WORD;
- pending_sess : WORD;
- max_cfg_sess : WORD;
- max_sess : WORD;
- max_sess_pkt_size : WORD;
- name_count : WORD;
- end;
- TADAPTER_STATUS = ADAPTER_STATUS;
- PADAPTER_STATUS = ^TADAPTER_STATUS;
- NAME_BUFFER = packed record
- name : array [0..NCBNAMSZ-1] of UCHAR;
- name_num : UCHAR;
- name_flags: UCHAR;
- end;
- TNAME_BUFFER = NAME_BUFFER;
- PNAME_BUFFER = ^NAME_BUFFER;
- // values for name_flags bits.
- Const
- NAME_FLAGS_MASK = $87;
- GROUP_NAME = $80;
- UNIQUE_NAME = $00;
- REGISTERING = $00;
- REGISTERED = $04;
- DEREGISTERED = $05;
- DUPLICATE = $06;
- DUPLICATE_DEREG = $07;
- Type
- {
- * Structure returned to the NCB command NCBSSTAT is SESSION_HEADER followed
- * by an array of SESSION_BUFFER structures. If the NCB_NAME starts with an
- * asterisk then an array of these structures is returned containing the
- * status for all names.
- }
- PSESSION_HEADER = ^TSESSION_HEADER;
- TSESSION_HEADER = packed record
- sess_name : UCHAR;
- num_sess : UCHAR;
- rcv_dg_outstanding : UCHAR;
- rcv_any_outstanding : UCHAR;
- end;
- PSESSION_BUFFER = ^TSESSION_BUFFER;
- TSESSION_BUFFER = packed record
- lsn : UCHAR;
- state : UCHAR;
- local_name : array[0..(NCBNAMSZ)-1] of UCHAR;
- remote_name : array[0..(NCBNAMSZ)-1] of UCHAR;
- rcvs_outstanding : UCHAR;
- sends_outstanding : UCHAR;
- end;
- // Values for state
- Const
- LISTEN_OUTSTANDING = $01;
- CALL_PENDING = $02;
- SESSION_ESTABLISHED = $03;
- HANGUP_PENDING = $04;
- HANGUP_COMPLETE = $05;
- SESSION_ABORTED = $06;
- {
- * Structure returned to the NCB command NCBENUM.
- *
- * On a system containing lana's 0, 2 and 3, a structure with
- * length =3, lana[0]=0, lana[1]=2 and lana[2]=3 will be returned.
- }
- Type
- PLANA_ENUM = ^TLANA_ENUM;
- TLANA_ENUM = packed record
- length : UCHAR; // Number of valid entries in lana[]
- lana : array[0..(MAX_LANA+1)-1] of UCHAR;
- end;
- {
- * Structure returned to the NCB command NCBFINDNAME is FIND_NAME_HEADER followed
- * by an array of FIND_NAME_BUFFER structures.
- }
- PFIND_NAME_HEADER = ^TFIND_NAME_HEADER;
- TFIND_NAME_HEADER = packed record
- node_count : WORD;
- reserved : UCHAR;
- unique_group : UCHAR;
- end;
- PFIND_NAME_BUFFER = ^TFIND_NAME_BUFFER;
- TFIND_NAME_BUFFER = packed record
- length : UCHAR;
- access_control : UCHAR;
- frame_control : UCHAR;
- destination_addr : array[0..5] of UCHAR;
- source_addr : array[0..5] of UCHAR;
- routing_info : array[0..17] of UCHAR;
- end;
- {
- * Structure provided with NCBACTION. The purpose of NCBACTION is to provide
- * transport specific extensions to netbios.
- }
- PACTION_HEADER = ^TACTION_HEADER;
- TACTION_HEADER = packed record
- transport_id : ULONG;
- action_code : USHORT;
- reserved : USHORT;
- end;
- // Values for transport_id
- const
- ALL_TRANSPORTS = 'M'#0#0#0;
- MS_NBF = 'MNBF'#0;
- {***************************************************************
- * *
- * Special values and constants *
- * *
- ***************************************************************}
- Const
- {
- * NCB Command codes
- }
- NCBCALL = $10; { NCB CALL }
- NCBLISTEN = $11; { NCB LISTEN }
- NCBHANGUP = $12; { NCB HANG UP }
- NCBSEND = $14; { NCB SEND }
- NCBRECV = $15; { NCB RECEIVE }
- NCBRECVANY = $16; { NCB RECEIVE ANY }
- NCBCHAINSEND = $17; { NCB CHAIN SEND }
- NCBDGSEND = $20; { NCB SEND DATAGRAM }
- NCBDGRECV = $21; { NCB RECEIVE DATAGRAM }
- NCBDGSENDBC = $22; { NCB SEND BROADCAST DATAGRAM }
- NCBDGRECVBC = $23; { NCB RECEIVE BROADCAST DATAGRAM }
- NCBADDNAME = $30; { NCB ADD NAME }
- NCBDELNAME = $31; { NCB DELETE NAME }
- NCBRESET = $32; { NCB RESET }
- NCBASTAT = $33; { NCB ADAPTER STATUS }
- NCBSSTAT = $34; { NCB SESSION STATUS }
- NCBCANCEL = $35; { NCB CANCEL }
- NCBADDGRNAME = $36; { NCB ADD GROUP NAME }
- NCBENUM = $37; { NCB ENUMERATE LANA NUMBERS }
- NCBUNLINK = $70; { NCB UNLINK }
- NCBSENDNA = $71; { NCB SEND NO ACK }
- NCBCHAINSENDNA = $72; { NCB CHAIN SEND NO ACK }
- NCBLANSTALERT = $73; { NCB LAN STATUS ALERT }
- NCBACTION = $77; { NCB ACTION }
- NCBFINDNAME = $78; { NCB FIND NAME }
- NCBTRACE = $79; { NCB TRACE }
- ASYNCH = $80; { high bit set == asynchronous }
- {
- * NCB Return codes
- }
- NRC_GOODRET = $00; { good return }
- { also returned when ASYNCH request accepted }
- NRC_BUFLEN = $01; { illegal buffer length }
- NRC_ILLCMD = $03; { illegal command }
- NRC_CMDTMO = $05; { command timed out }
- NRC_INCOMP = $06; { message incomplete, issue another command }
- NRC_BADDR = $07; { illegal buffer address }
- NRC_SNUMOUT = $08; { session number out of range }
- NRC_NORES = $09; { no resource available }
- NRC_SCLOSED = $0a; { session closed }
- NRC_CMDCAN = $0b; { command cancelled }
- NRC_DUPNAME = $0d; { duplicate name }
- NRC_NAMTFUL = $0e; { name table full }
- NRC_ACTSES = $0f; { no deletions, name has active sessions }
- NRC_LOCTFUL = $11; { local session table full }
- NRC_REMTFUL = $12; { remote session table full }
- NRC_ILLNN = $13; { illegal name number }
- NRC_NOCALL = $14; { no callname }
- NRC_NOWILD = $15; { cannot put * in NCB_NAME }
- NRC_INUSE = $16; { name in use on remote adapter }
- NRC_NAMERR = $17; { name deleted }
- NRC_SABORT = $18; { session ended abnormally }
- NRC_NAMCONF = $19; { name conflict detected }
- NRC_IFBUSY = $21; { interface busy, IRET before retrying }
- NRC_TOOMANY = $22; { too many commands outstanding, retry later }
- NRC_BRIDGE = $23; { ncb_lana_num field invalid }
- NRC_CANOCCR = $24; { command completed while cancel occurring }
- NRC_CANCEL = $26; { command not valid to cancel }
- NRC_DUPENV = $30; { name defined by anther local process }
- NRC_ENVNOTDEF = $34; { environment undefined. RESET required }
- NRC_OSRESNOTAV = $35; { required OS resources exhausted }
- NRC_MAXAPPS = $36; { max number of applications exceeded }
- NRC_NOSAPS = $37; { no saps available for netbios }
- NRC_NORESOURCES = $38; { requested resources are not available }
- NRC_INVADDRESS = $39; { invalid ncb address or length > segment }
- NRC_INVDDID = $3B; { invalid NCB DDID }
- NRC_LOCKFAIL = $3C; { lock of user area failed }
- NRC_OPENERR = $3f; { NETBIOS not loaded }
- NRC_SYSTEM = $40; { system error }
- NRC_PENDING = $ff; { asynchronous command is not yet finished }
- {***************************************************************
- * *
- * main user entry point for NetBIOS 3.0 *
- * *
- * Usage: result = Netbios( pncb ); *
- ***************************************************************}
- function Netbios(pncb : PNCB):UCHAR; stdcall; external nbdllname name 'Netbios';
- implementation
- end.
|