blob: b0866f62edb8e86e2043be077c19d9f8c39ded0d (
plain) (
blame)
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
|
/*++
Copyright (c) 1991 Microsoft Corporation
Module Name:
netbios.h
Abstract:
This is the main include file for the component of netbios that runs
in the user process.
Author:
Colin Watson (ColinW) 24-Jun-91
Revision History:
--*/
#include <nt.h>
#include <ntrtl.h>
#include <nturtl.h>
#include <windows.h>
#include <nb30.h>
#include "nb30p.h"
//
// Internal version of the ncb layout that uses the reserved area to hold
// the list entry when passing ncb's to the worker thread and the IO status
// block used when the ncb is passed to the netbios device driver.
//
#pragma pack(1)
//
// Use packing to ensure that the cu union is not forced to word alignment.
// All elements of this structure are naturally aligned.
//
typedef struct _NCBI {
UCHAR ncb_command; /* command code */
volatile 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 */
union {
UCHAR ncb_callname[NCBNAMSZ];/* blank-padded name of remote */
struct _CHAIN_SEND {
WORD ncb_length2;
PUCHAR ncb_buffer2;
} ncb_chain;
} cu;
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 */
volatile UCHAR ncb_cmd_cplt; /* 0xff => commmand pending */
// Make driver specific use of the reserved area of the NCB.
WORD ncb_reserved; /* return to natural alignment */
union {
LIST_ENTRY ncb_next; /* queued to worker thread */
IO_STATUS_BLOCK ncb_iosb; /* used for Nt I/O interface */
} u;
HANDLE ncb_event; /* HANDLE to Win32 event */
} NCBI, *PNCBI;
#pragma pack()
VOID
QueueToWorker(
IN PNCBI pncb
);
DWORD
Worker(
IN LPVOID Parameter
);
VOID
SendNcbToDriver(
IN PNCBI pncb
);
VOID
PostRoutineCaller(
PVOID Context,
PIO_STATUS_BLOCK Status,
ULONG Reserved
);
VOID
ChainSendPostRoutine(
PVOID Context,
PIO_STATUS_BLOCK Status,
ULONG Reserved
);
VOID
HangupConnection(
PNCBI pUserNcb
);
#if DBG
VOID
DisplayNcb(
IN PNCBI pncbi
);
#define NbPrintf(String) NbPrint String;
VOID
NbPrint(
char *Format,
...
);
#else
// Dispose of debug statements in non-debug builds.
#define DisplayNcb( pncb ) {};
#define NbPrintf( String ) {};
#endif
// End of Debug related definitions
|