:pserver:cvsanon@mok.lvcm.com:/CVS/ReactOS reactos
[reactos.git] / include / afd / shared.h
1 /*
2  * COPYRIGHT:   See COPYING in the top level directory
3  * PROJECT:     ReactOS Ancillary Function Driver
4  * FILE:        include/afd/shared.h
5  * PURPOSE:     Shared definitions for AFD.SYS and MSAFD.DLL
6  */
7 #ifndef __AFD_SHARED_H
8 #define __AFD_SHARED_H
9
10 #define AfdSocket           "AfdSocket"
11 #define AFD_SOCKET_LENGTH   (sizeof(AfdSocket) - 1)
12
13 typedef struct _AFD_SOCKET_INFORMATION {
14   BOOL CommandChannel;
15   INT AddressFamily;
16   INT SocketType;
17   INT Protocol;
18   PVOID HelperContext;
19   DWORD NotificationEvents;
20   UNICODE_STRING TdiDeviceName;
21   SOCKADDR Name;
22 } __attribute__((packed)) AFD_SOCKET_INFORMATION, *PAFD_SOCKET_INFORMATION;
23
24
25 /* AFD IOCTL code definitions */
26
27 #define FSCTL_AFD_BASE     FILE_DEVICE_NAMED_PIPE // ???
28
29 #define AFD_CTL_CODE(Function, Method, Access) \
30   CTL_CODE(FSCTL_AFD_BASE, Function, Method, Access)
31
32 #define IOCTL_AFD_BIND \
33   AFD_CTL_CODE(0, METHOD_BUFFERED, FILE_ANY_ACCESS)
34
35 #define IOCTL_AFD_LISTEN \
36   AFD_CTL_CODE(1, METHOD_BUFFERED, FILE_ANY_ACCESS)
37
38 #define IOCTL_AFD_SENDTO \
39   AFD_CTL_CODE(2, METHOD_BUFFERED, FILE_ANY_ACCESS)
40
41 #define IOCTL_AFD_RECVFROM \
42   AFD_CTL_CODE(3, METHOD_BUFFERED, FILE_ANY_ACCESS)
43
44 #define IOCTL_AFD_SELECT \
45   AFD_CTL_CODE(4, METHOD_BUFFERED, FILE_ANY_ACCESS)
46
47 #define IOCTL_AFD_EVENTSELECT \
48   AFD_CTL_CODE(5, METHOD_BUFFERED, FILE_ANY_ACCESS)
49
50 #define IOCTL_AFD_ENUMNETWORKEVENTS \
51   AFD_CTL_CODE(6, METHOD_BUFFERED, FILE_ANY_ACCESS)
52
53 #define IOCTL_AFD_RECV \
54   AFD_CTL_CODE(7, METHOD_BUFFERED, FILE_ANY_ACCESS)
55
56 #define IOCTL_AFD_SEND \
57   AFD_CTL_CODE(8, METHOD_BUFFERED, FILE_ANY_ACCESS)
58
59 #define IOCTL_AFD_ACCEPT \
60   AFD_CTL_CODE(9, METHOD_BUFFERED, FILE_ANY_ACCESS)
61
62 #define IOCTL_AFD_CONNECT \
63   AFD_CTL_CODE(10, METHOD_BUFFERED, FILE_ANY_ACCESS)
64
65
66 typedef struct _FILE_REQUEST_BIND {
67   SOCKADDR Name;
68 } __attribute__((packed)) FILE_REQUEST_BIND, *PFILE_REQUEST_BIND;
69
70 typedef struct _FILE_REPLY_BIND {
71   INT Status;
72   HANDLE TdiAddressObjectHandle;
73   HANDLE TdiConnectionObjectHandle;
74 } __attribute__((packed)) FILE_REPLY_BIND, *PFILE_REPLY_BIND;
75
76 typedef struct _FILE_REQUEST_LISTEN {
77   INT Backlog;
78 } __attribute__((packed)) FILE_REQUEST_LISTEN, *PFILE_REQUEST_LISTEN;
79
80 typedef struct _FILE_REPLY_LISTEN {
81   INT Status;
82 } __attribute__((packed)) FILE_REPLY_LISTEN, *PFILE_REPLY_LISTEN;
83
84
85 typedef struct _FILE_REQUEST_SENDTO {
86   LPWSABUF Buffers;
87   DWORD BufferCount;
88   DWORD Flags;
89   SOCKADDR To;
90   INT ToLen;
91 } __attribute__((packed)) FILE_REQUEST_SENDTO, *PFILE_REQUEST_SENDTO;
92
93 typedef struct _FILE_REPLY_SENDTO {
94   INT Status;
95   DWORD NumberOfBytesSent;
96 } __attribute__((packed)) FILE_REPLY_SENDTO, *PFILE_REPLY_SENDTO;
97
98
99 typedef struct _FILE_REQUEST_RECVFROM {
100   LPWSABUF Buffers;
101   DWORD BufferCount;
102   LPDWORD Flags;
103   LPSOCKADDR From;
104   LPINT FromLen;
105 } __attribute__((packed)) FILE_REQUEST_RECVFROM, *PFILE_REQUEST_RECVFROM;
106
107 typedef struct _FILE_REPLY_RECVFROM {
108   INT Status;
109   DWORD NumberOfBytesRecvd;
110 } __attribute__((packed)) FILE_REPLY_RECVFROM, *PFILE_REPLY_RECVFROM;
111
112
113 typedef struct _FILE_REQUEST_SELECT {
114   LPFD_SET ReadFDSet;
115   LPFD_SET WriteFDSet;
116   LPFD_SET ExceptFDSet;
117   TIMEVAL Timeout;
118 } __attribute__((packed)) FILE_REQUEST_SELECT, *PFILE_REQUEST_SELECT;
119
120 typedef struct _FILE_REPLY_SELECT {
121   INT Status;
122   DWORD SocketCount;
123 } __attribute__((packed)) FILE_REPLY_SELECT, *PFILE_REPLY_SELECT;
124
125
126 typedef struct _FILE_REQUEST_EVENTSELECT {
127   WSAEVENT hEventObject;
128   LONG lNetworkEvents;
129 } __attribute__((packed)) FILE_REQUEST_EVENTSELECT, *PFILE_REQUEST_EVENTSELECT;
130
131 typedef struct _FILE_REPLY_EVENTSELECT {
132   INT Status;
133 } __attribute__((packed)) FILE_REPLY_EVENTSELECT, *PFILE_REPLY_EVENTSELECT;
134
135
136 typedef struct _FILE_REQUEST_ENUMNETWORKEVENTS {
137   WSAEVENT hEventObject;
138 } __attribute__((packed)) FILE_REQUEST_ENUMNETWORKEVENTS, *PFILE_REQUEST_ENUMNETWORKEVENTS;
139
140 typedef struct _FILE_REPLY_ENUMNETWORKEVENTS {
141   INT Status;
142   WSANETWORKEVENTS NetworkEvents;
143 } __attribute__((packed)) FILE_REPLY_ENUMNETWORKEVENTS, *PFILE_REPLY_ENUMNETWORKEVENTS;
144
145
146 typedef struct _FILE_REQUEST_RECV {
147   LPWSABUF Buffers;
148   DWORD BufferCount;
149   LPDWORD Flags;
150 } __attribute__((packed)) FILE_REQUEST_RECV, *PFILE_REQUEST_RECV;
151
152 typedef struct _FILE_REPLY_RECV {
153   INT Status;
154   DWORD NumberOfBytesRecvd;
155 } __attribute__((packed)) FILE_REPLY_RECV, *PFILE_REPLY_RECV;
156
157
158 typedef struct _FILE_REQUEST_SEND {
159   LPWSABUF Buffers;
160   DWORD BufferCount;
161   DWORD Flags;
162 } __attribute__((packed)) FILE_REQUEST_SEND, *PFILE_REQUEST_SEND;
163
164 typedef struct _FILE_REPLY_SEND {
165   INT Status;
166   DWORD NumberOfBytesSent;
167 } __attribute__((packed)) FILE_REPLY_SEND, *PFILE_REPLY_SEND;
168
169
170 typedef struct _FILE_REQUEST_ACCEPT {
171   LPSOCKADDR addr;
172   INT addrlen;
173   LPCONDITIONPROC lpfnCondition;
174   DWORD dwCallbackData;
175 } __attribute__((packed)) FILE_REQUEST_ACCEPT, *PFILE_REQUEST_ACCEPT;
176
177 typedef struct _FILE_REPLY_ACCEPT {
178   INT Status;
179   INT addrlen;
180   SOCKET Socket;
181 } __attribute__((packed)) FILE_REPLY_ACCEPT, *PFILE_REPLY_ACCEPT;
182
183
184 typedef struct _FILE_REQUEST_CONNECT {
185   LPSOCKADDR name;
186   INT namelen;
187   LPWSABUF lpCallerData;
188   LPWSABUF lpCalleeData;
189   LPQOS lpSQOS;
190   LPQOS lpGQOS;
191 } __attribute__((packed)) FILE_REQUEST_CONNECT, *PFILE_REQUEST_CONNECT;
192
193 typedef struct _FILE_REPLY_CONNECT {
194   INT Status;
195 } __attribute__((packed)) FILE_REPLY_CONNECT, *PFILE_REPLY_CONNECT;
196
197 #endif /*__AFD_SHARED_H */
198
199 /* EOF */