2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS Ancillary Function Driver
5 * PURPOSE: Main driver header
11 #include <ddk/ntddk.h>
12 #include <net/tdikrnl.h>
13 #include <net/tdiinfo.h>
14 #include <afd/shared.h>
17 /* Forward declarations */
20 typedef struct _DEVICE_EXTENSION
{
21 PDEVICE_OBJECT StorageDevice
;
22 KSPIN_LOCK FCBListLock
;
23 LIST_ENTRY FCBListHead
;
24 } DEVICE_EXTENSION
, *PDEVICE_EXTENSION
;
26 /* Context Control Block structure */
27 typedef struct _AFDCCB
{
30 PFILE_OBJECT FileObject
;
32 LARGE_INTEGER CurrentByteOffset
;
35 /* Flags for CCB structure */
36 #define CCB_CLEANED 0x00000001
38 /* Borrowed from http://www.acc.umu.se/~bosse/ntifs.h by Bo Branten */
39 typedef struct _FSRTL_COMMON_FCB_HEADER
{
43 UCHAR IsFastIoPossible
;
47 PERESOURCE PagingIoResource
;
48 LARGE_INTEGER AllocationSize
;
49 LARGE_INTEGER FileSize
;
50 LARGE_INTEGER ValidDataLength
;
51 } FSRTL_COMMON_FCB_HEADER
, *PFSRTL_COMMON_FCB_HEADER
;
53 typedef struct _FsdNTRequiredFCB
{
54 FSRTL_COMMON_FCB_HEADER CommonFCBHeader
;
55 SECTION_OBJECT_POINTERS SectionObject
;
56 ERESOURCE MainResource
;
57 ERESOURCE PagingIoResource
;
58 } FsdNTRequiredFCB
, *PFsdNTRequiredFCB
;
60 typedef struct _AFDFCB
{
61 FsdNTRequiredFCB NTRequiredFCB
;
63 PDEVICE_EXTENSION DeviceExt
;
64 SHARE_ACCESS ShareAccess
;
66 ULONG OpenHandleCount
;
67 HANDLE TdiAddressObjectHandle
;
68 PFILE_OBJECT TdiAddressObject
;
69 HANDLE TdiConnectionObjectHandle
;
70 PFILE_OBJECT TdiConnectionObject
;
71 LIST_ENTRY CCBListHead
;
76 DWORD NotificationEvents
;
77 UNICODE_STRING TdiDeviceName
;
82 #define SOCKET_STATE_CREATED 0
83 #define SOCKET_STATE_BOUND 1
84 #define SOCKET_STATE_LISTENING 2
86 typedef struct IPSNMP_INFO
{
93 ULONG InUnknownProtos
;
97 ULONG RoutingDiscards
;
110 } IPSNMP_INFO
, *PIPSNMP_INFO
;
112 typedef struct IPADDR_ENTRY
{
120 } IPADDR_ENTRY
, *PIPADDR_ENTRY
;
123 #define TL_INSTANCE 0
125 #define IP_MIB_STATS_ID 0x1
126 #define IP_MIB_ADDRTABLE_ENTRY_ID 0x102
131 #define IOCTL_TCP_QUERY_INFORMATION_EX \
132 CTL_CODE(FILE_DEVICE_NETWORK, 0, METHOD_NEITHER, FILE_ANY_ACCESS)
134 #define IOCTL_TCP_SET_INFORMATION_EX \
135 CTL_CODE(FILE_DEVICE_NETWORK, 1, METHOD_BUFFERED, FILE_WRITE_ACCESS)
140 /* DWORD network to host byte order conversion for i386 */
142 ((((dw) & 0xFF000000L) >> 24) | \
143 (((dw) & 0x00FF0000L) >> 8) | \
144 (((dw) & 0x0000FF00L) << 8) | \
145 (((dw) & 0x000000FFL) << 24))
147 /* DWORD host to network byte order conversion for i386 */
149 ((((dw) & 0xFF000000L) >> 24) | \
150 (((dw) & 0x00FF0000L) >> 8) | \
151 (((dw) & 0x0000FF00L) << 8) | \
152 (((dw) & 0x000000FFL) << 24))
154 /* WORD network to host order conversion for i386 */
156 ((((w) & 0xFF00) >> 8) | \
157 (((w) & 0x00FF) << 8))
159 /* WORD host to network byte order conversion for i386 */
161 ((((w) & 0xFF00) >> 8) | \
162 (((w) & 0x00FF) << 8))
166 /* DWORD network to host byte order conversion for other architectures */
170 /* DWORD host to network byte order conversion for other architectures */
174 /* WORD network to host order conversion for other architectures */
178 /* WORD host to network byte order conversion for other architectures */
185 /* Prototypes from dispatch.c */
187 NTSTATUS
AfdDispBind(
189 PIO_STACK_LOCATION IrpSp
);
191 NTSTATUS
AfdDispListen(
193 PIO_STACK_LOCATION IrpSp
);
195 NTSTATUS
AfdDispSendTo(
197 PIO_STACK_LOCATION IrpSp
);
199 NTSTATUS
AfdDispRecvFrom(
201 PIO_STACK_LOCATION IrpSp
);
203 /* Prototypes from event.c */
205 NTSTATUS
AfdRegisterEventHandlers(
208 NTSTATUS
AfdDeregisterEventHandlers(
211 /* Prototypes from opnclose.c */
214 PDEVICE_OBJECT DeviceObject
,
217 NTSTATUS
AfdCreateNamedPipe(
218 PDEVICE_OBJECT DeviceObject
,
222 PDEVICE_OBJECT DeviceObject
,
225 /* Prototypes from rdwr.c */
227 NTSTATUS
AfdEventReceiveDatagramHandler(
228 IN PVOID TdiEventContext
,
229 IN LONG SourceAddressLength
,
230 IN PVOID SourceAddress
,
231 IN LONG OptionsLength
,
233 IN ULONG ReceiveDatagramFlags
,
234 IN ULONG BytesIndicated
,
235 IN ULONG BytesAvailable
,
236 OUT ULONG
* BytesTaken
,
238 OUT PIRP
* IoRequestPacket
);
241 PDEVICE_OBJECT DeviceObject
,
245 PDEVICE_OBJECT DeviceObject
,
248 /* Prototypes from tdi.c */
250 NTSTATUS
TdiCloseDevice(
252 PFILE_OBJECT FileObject
);
254 NTSTATUS
TdiOpenAddressFileIPv4(
255 PUNICODE_STRING DeviceName
,
257 PHANDLE AddressHandle
,
258 PFILE_OBJECT
*AddressObject
);
260 NTSTATUS
TdiSetEventHandler(
261 PFILE_OBJECT FileObject
,
266 NTSTATUS
TdiQueryDeviceControl(
267 PFILE_OBJECT FileObject
,
270 ULONG InputBufferLength
,
272 ULONG OutputBufferLength
,
275 NTSTATUS
TdiQueryInformationEx(
276 PFILE_OBJECT FileObject
,
283 PULONG OutputLength
);
285 NTSTATUS
TdiQueryAddress(
286 PFILE_OBJECT FileObject
,
290 PFILE_OBJECT TransportObject
,
291 PFILE_REQUEST_SENDTO Request
);
293 NTSTATUS
TdiSendDatagram(
294 PFILE_OBJECT TransportObject
,