1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
|
//*++
//
// Copyright (c) 1991-1996 Microsoft Corporation
//
// Module Name:
//
// nb30.h
//
// Abstract:
//
// This module contains the definitions for portable NetBIOS 3.0
// support.
//
//--*/
#ifndef NCB_INCLUDED
#define NCB_INCLUDED
#ifdef __cplusplus
extern "C" {
#endif
/****************************************************************
* *
* Data structure templates *
* *
****************************************************************/
#define NCBNAMSZ 16 /* absolute length of a net name */
#define MAX_LANA 254 /* lana's in range 0 to MAX_LANA inclusive */
/*
* Network Control Block
*/
typedef struct _NCB {
UCHAR ncb_command; /* command code */
UCHAR ncb_retcode; /* return code */
UCHAR ncb_lsn; /* local session number */
UCHAR ncb_num; /* number of our network name */
PUCHAR ncb_buffer; /* address of message buffer */
WORD ncb_length; /* size of message buffer */
UCHAR ncb_callname[NCBNAMSZ]; /* blank-padded name of remote */
UCHAR ncb_name[NCBNAMSZ]; /* our blank-padded netname */
UCHAR ncb_rto; /* rcv timeout/retry count */
UCHAR ncb_sto; /* send timeout/sys timeout */
void (CALLBACK *ncb_post)( struct _NCB * ); /* POST routine address */
UCHAR ncb_lana_num; /* lana (adapter) number */
UCHAR ncb_cmd_cplt; /* 0xff => commmand pending */
UCHAR ncb_reserve[10]; /* reserved, used by BIOS */
HANDLE ncb_event; /* HANDLE to Win32 event which */
/* will be set to the signalled */
/* state when an ASYNCH command */
/* completes */
} NCB, *PNCB;
/*
* Structure returned to the NCB command NCBASTAT is ADAPTER_STATUS followed
* by an array of NAME_BUFFER structures.
*/
typedef struct _ADAPTER_STATUS {
UCHAR adapter_address[6];
UCHAR rev_major;
UCHAR reserved0;
UCHAR adapter_type;
UCHAR rev_minor;
WORD duration;
WORD frmr_recv;
WORD frmr_xmit;
WORD iframe_recv_err;
WORD xmit_aborts;
DWORD xmit_success;
DWORD recv_success;
WORD iframe_xmit_err;
WORD recv_buff_unavail;
WORD t1_timeouts;
WORD ti_timeouts;
DWORD reserved1;
WORD 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;
} ADAPTER_STATUS, *PADAPTER_STATUS;
typedef struct _NAME_BUFFER {
UCHAR name[NCBNAMSZ];
UCHAR name_num;
UCHAR name_flags;
} NAME_BUFFER, *PNAME_BUFFER;
// values for name_flags bits.
#define NAME_FLAGS_MASK 0x87
#define GROUP_NAME 0x80
#define UNIQUE_NAME 0x00
#define REGISTERING 0x00
#define REGISTERED 0x04
#define DEREGISTERED 0x05
#define DUPLICATE 0x06
#define DUPLICATE_DEREG 0x07
/*
* 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.
*/
typedef struct _SESSION_HEADER {
UCHAR sess_name;
UCHAR num_sess;
UCHAR rcv_dg_outstanding;
UCHAR rcv_any_outstanding;
} SESSION_HEADER, *PSESSION_HEADER;
typedef struct _SESSION_BUFFER {
UCHAR lsn;
UCHAR state;
UCHAR local_name[NCBNAMSZ];
UCHAR remote_name[NCBNAMSZ];
UCHAR rcvs_outstanding;
UCHAR sends_outstanding;
} SESSION_BUFFER, *PSESSION_BUFFER;
// Values for state
#define LISTEN_OUTSTANDING 0x01
#define CALL_PENDING 0x02
#define SESSION_ESTABLISHED 0x03
#define HANGUP_PENDING 0x04
#define HANGUP_COMPLETE 0x05
#define SESSION_ABORTED 0x06
/*
* 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.
*/
typedef struct _LANA_ENUM {
UCHAR length; // Number of valid entries in lana[]
UCHAR lana[MAX_LANA+1];
} LANA_ENUM, *PLANA_ENUM;
/*
* Structure returned to the NCB command NCBFINDNAME is FIND_NAME_HEADER followed
* by an array of FIND_NAME_BUFFER structures.
*/
typedef struct _FIND_NAME_HEADER {
WORD node_count;
UCHAR reserved;
UCHAR unique_group;
} FIND_NAME_HEADER, *PFIND_NAME_HEADER;
typedef struct _FIND_NAME_BUFFER {
UCHAR length;
UCHAR access_control;
UCHAR frame_control;
UCHAR destination_addr[6];
UCHAR source_addr[6];
UCHAR routing_info[18];
} FIND_NAME_BUFFER, *PFIND_NAME_BUFFER;
/*
* Structure provided with NCBACTION. The purpose of NCBACTION is to provide
* transport specific extensions to netbios.
*/
typedef struct _ACTION_HEADER {
ULONG transport_id;
USHORT action_code;
USHORT reserved;
} ACTION_HEADER, *PACTION_HEADER;
// Values for transport_id
#define ALL_TRANSPORTS "M\0\0\0"
#define MS_NBF "MNBF"
/****************************************************************
* *
* Special values and constants *
* *
****************************************************************/
/*
* NCB Command codes
*/
#define NCBCALL 0x10 /* NCB CALL */
#define NCBLISTEN 0x11 /* NCB LISTEN */
#define NCBHANGUP 0x12 /* NCB HANG UP */
#define NCBSEND 0x14 /* NCB SEND */
#define NCBRECV 0x15 /* NCB RECEIVE */
#define NCBRECVANY 0x16 /* NCB RECEIVE ANY */
#define NCBCHAINSEND 0x17 /* NCB CHAIN SEND */
#define NCBDGSEND 0x20 /* NCB SEND DATAGRAM */
#define NCBDGRECV 0x21 /* NCB RECEIVE DATAGRAM */
#define NCBDGSENDBC 0x22 /* NCB SEND BROADCAST DATAGRAM */
#define NCBDGRECVBC 0x23 /* NCB RECEIVE BROADCAST DATAGRAM */
#define NCBADDNAME 0x30 /* NCB ADD NAME */
#define NCBDELNAME 0x31 /* NCB DELETE NAME */
#define NCBRESET 0x32 /* NCB RESET */
#define NCBASTAT 0x33 /* NCB ADAPTER STATUS */
#define NCBSSTAT 0x34 /* NCB SESSION STATUS */
#define NCBCANCEL 0x35 /* NCB CANCEL */
#define NCBADDGRNAME 0x36 /* NCB ADD GROUP NAME */
#define NCBENUM 0x37 /* NCB ENUMERATE LANA NUMBERS */
#define NCBUNLINK 0x70 /* NCB UNLINK */
#define NCBSENDNA 0x71 /* NCB SEND NO ACK */
#define NCBCHAINSENDNA 0x72 /* NCB CHAIN SEND NO ACK */
#define NCBLANSTALERT 0x73 /* NCB LAN STATUS ALERT */
#define NCBACTION 0x77 /* NCB ACTION */
#define NCBFINDNAME 0x78 /* NCB FIND NAME */
#define NCBTRACE 0x79 /* NCB TRACE */
#define ASYNCH 0x80 /* high bit set == asynchronous */
/*
* NCB Return codes
*/
#define NRC_GOODRET 0x00 /* good return */
/* also returned when ASYNCH request accepted */
#define NRC_BUFLEN 0x01 /* illegal buffer length */
#define NRC_ILLCMD 0x03 /* illegal command */
#define NRC_CMDTMO 0x05 /* command timed out */
#define NRC_INCOMP 0x06 /* message incomplete, issue another command */
#define NRC_BADDR 0x07 /* illegal buffer address */
#define NRC_SNUMOUT 0x08 /* session number out of range */
#define NRC_NORES 0x09 /* no resource available */
#define NRC_SCLOSED 0x0a /* session closed */
#define NRC_CMDCAN 0x0b /* command cancelled */
#define NRC_DUPNAME 0x0d /* duplicate name */
#define NRC_NAMTFUL 0x0e /* name table full */
#define NRC_ACTSES 0x0f /* no deletions, name has active sessions */
#define NRC_LOCTFUL 0x11 /* local session table full */
#define NRC_REMTFUL 0x12 /* remote session table full */
#define NRC_ILLNN 0x13 /* illegal name number */
#define NRC_NOCALL 0x14 /* no callname */
#define NRC_NOWILD 0x15 /* cannot put * in NCB_NAME */
#define NRC_INUSE 0x16 /* name in use on remote adapter */
#define NRC_NAMERR 0x17 /* name deleted */
#define NRC_SABORT 0x18 /* session ended abnormally */
#define NRC_NAMCONF 0x19 /* name conflict detected */
#define NRC_IFBUSY 0x21 /* interface busy, IRET before retrying */
#define NRC_TOOMANY 0x22 /* too many commands outstanding, retry later */
#define NRC_BRIDGE 0x23 /* ncb_lana_num field invalid */
#define NRC_CANOCCR 0x24 /* command completed while cancel occurring */
#define NRC_CANCEL 0x26 /* command not valid to cancel */
#define NRC_DUPENV 0x30 /* name defined by anther local process */
#define NRC_ENVNOTDEF 0x34 /* environment undefined. RESET required */
#define NRC_OSRESNOTAV 0x35 /* required OS resources exhausted */
#define NRC_MAXAPPS 0x36 /* max number of applications exceeded */
#define NRC_NOSAPS 0x37 /* no saps available for netbios */
#define NRC_NORESOURCES 0x38 /* requested resources are not available */
#define NRC_INVADDRESS 0x39 /* invalid ncb address or length > segment */
#define NRC_INVDDID 0x3B /* invalid NCB DDID */
#define NRC_LOCKFAIL 0x3C /* lock of user area failed */
#define NRC_OPENERR 0x3f /* NETBIOS not loaded */
#define NRC_SYSTEM 0x40 /* system error */
#define NRC_PENDING 0xff /* asynchronous command is not yet finished */
/****************************************************************
* *
* main user entry point for NetBIOS 3.0 *
* *
* Usage: result = Netbios( pncb ); *
****************************************************************/
UCHAR
APIENTRY
Netbios(
PNCB pncb
);
/****************************************************************
* *
* Prefix for callback routines *
* *
* Usage in a declaration: NCB_POST MyPostRoutine( PNCB pncb ); *
****************************************************************/
#define NCB_POST void CALLBACK
#ifdef __cplusplus
}
#endif
#endif /* NCB_INCLUDED */
|