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
;
83 #define SOCKET_STATE_CREATED 0
84 #define SOCKET_STATE_BOUND 1
85 #define SOCKET_STATE_LISTENING 2
87 typedef struct IPSNMP_INFO
{
94 ULONG InUnknownProtos
;
98 ULONG RoutingDiscards
;
111 } IPSNMP_INFO
, *PIPSNMP_INFO
;
113 typedef struct IPADDR_ENTRY
{
121 } IPADDR_ENTRY
, *PIPADDR_ENTRY
;
124 #define TL_INSTANCE 0
126 #define IP_MIB_STATS_ID 0x1
127 #define IP_MIB_ADDRTABLE_ENTRY_ID 0x102
132 #define IOCTL_TCP_QUERY_INFORMATION_EX \
133 CTL_CODE(FILE_DEVICE_NETWORK, 0, METHOD_NEITHER, FILE_ANY_ACCESS)
135 #define IOCTL_TCP_SET_INFORMATION_EX \
136 CTL_CODE(FILE_DEVICE_NETWORK, 1, METHOD_BUFFERED, FILE_WRITE_ACCESS)
141 /* DWORD network to host byte order conversion for i386 */
143 ((((dw) & 0xFF000000L) >> 24) | \
144 (((dw) & 0x00FF0000L) >> 8) | \
145 (((dw) & 0x0000FF00L) << 8) | \
146 (((dw) & 0x000000FFL) << 24))
148 /* DWORD host to network byte order conversion for i386 */
150 ((((dw) & 0xFF000000L) >> 24) | \
151 (((dw) & 0x00FF0000L) >> 8) | \
152 (((dw) & 0x0000FF00L) << 8) | \
153 (((dw) & 0x000000FFL) << 24))
155 /* WORD network to host order conversion for i386 */
157 ((((w) & 0xFF00) >> 8) | \
158 (((w) & 0x00FF) << 8))
160 /* WORD host to network byte order conversion for i386 */
162 ((((w) & 0xFF00) >> 8) | \
163 (((w) & 0x00FF) << 8))
167 /* DWORD network to host byte order conversion for other architectures */
171 /* DWORD host to network byte order conversion for other architectures */
175 /* WORD network to host order conversion for other architectures */
179 /* WORD host to network byte order conversion for other architectures */
186 /* Prototypes from dispatch.c */
188 NTSTATUS
AfdDispBind(
190 PIO_STACK_LOCATION IrpSp
);
192 NTSTATUS
AfdDispListen(
194 PIO_STACK_LOCATION IrpSp
);
196 NTSTATUS
AfdDispSendTo(
198 PIO_STACK_LOCATION IrpSp
);
200 NTSTATUS
AfdDispRecvFrom(
202 PIO_STACK_LOCATION IrpSp
);
204 /* Prototypes from event.c */
206 NTSTATUS
AfdRegisterEventHandlers(
209 NTSTATUS
AfdDeregisterEventHandlers(
212 /* Prototypes from opnclose.c */
214 NTSTATUS STDCALL
AfdCreate(
215 PDEVICE_OBJECT DeviceObject
,
218 NTSTATUS STDCALL
AfdClose(
219 PDEVICE_OBJECT DeviceObject
,
222 /* Prototypes from rdwr.c */
224 NTSTATUS
AfdEventReceiveDatagramHandler(
225 IN PVOID TdiEventContext
,
226 IN LONG SourceAddressLength
,
227 IN PVOID SourceAddress
,
228 IN LONG OptionsLength
,
230 IN ULONG ReceiveDatagramFlags
,
231 IN ULONG BytesIndicated
,
232 IN ULONG BytesAvailable
,
233 OUT ULONG
* BytesTaken
,
235 OUT PIRP
* IoRequestPacket
);
237 NTSTATUS STDCALL
AfdRead(
238 PDEVICE_OBJECT DeviceObject
,
241 NTSTATUS STDCALL
AfdWrite(
242 PDEVICE_OBJECT DeviceObject
,
245 /* Prototypes from routines.c */
251 NTSTATUS
MergeWSABuffers(
258 /* Prototypes from tdi.c */
260 NTSTATUS
TdiCloseDevice(
262 PFILE_OBJECT FileObject
);
264 NTSTATUS
TdiOpenAddressFileIPv4(
265 PUNICODE_STRING DeviceName
,
267 PHANDLE AddressHandle
,
268 PFILE_OBJECT
*AddressObject
);
270 NTSTATUS
TdiOpenAddressFile(
271 PUNICODE_STRING DeviceName
,
273 PHANDLE AddressHandle
,
274 PFILE_OBJECT
*AddressObject
);
276 NTSTATUS
TdiSetEventHandler(
277 PFILE_OBJECT FileObject
,
282 NTSTATUS
TdiQueryDeviceControl(
283 PFILE_OBJECT FileObject
,
286 ULONG InputBufferLength
,
288 ULONG OutputBufferLength
,
291 NTSTATUS
TdiQueryInformationEx(
292 PFILE_OBJECT FileObject
,
299 PULONG OutputLength
);
301 NTSTATUS
TdiQueryAddress(
302 PFILE_OBJECT FileObject
,
306 PFILE_OBJECT TransportObject
,
310 NTSTATUS
TdiSendDatagram(
311 PFILE_OBJECT TransportObject
,