ReactOS Fundraising Campaign 2012
 
€ 3,303 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

msafd.h

Go to the documentation of this file.
00001 /*
00002  * COPYRIGHT:   See COPYING in the top level directory
00003  * PROJECT:     ReactOS Ancillary Function Driver DLL
00004  * FILE:        include/msafd.h
00005  * PURPOSE:     Ancillary Function Driver DLL header
00006  */
00007 #ifndef __MSAFD_H
00008 #define __MSAFD_H
00009 
00010 #include <stdio.h>
00011 #include <stdlib.h>
00012 
00013 #define WIN32_NO_STATUS
00014 #include <winsock2.h>
00015 #include <windows.h>
00016 #include <ws2spi.h>
00017 #define NTOS_MODE_USER
00018 #include <ndk/exfuncs.h>
00019 #include <ndk/iofuncs.h>
00020 #include <ndk/obfuncs.h>
00021 #include <ndk/rtlfuncs.h>
00022 
00023 /* This includes ntsecapi.h so it needs to come after the NDK */
00024 #include <wsahelp.h>
00025 #include <tdi.h>
00026 #include <afd/shared.h>
00027 #include <helpers.h>
00028 
00029 #include <debug.h>
00030 
00031 extern HANDLE GlobalHeap;
00032 extern WSPUPCALLTABLE Upcalls;
00033 extern LPWPUCOMPLETEOVERLAPPEDREQUEST lpWPUCompleteOverlappedRequest;
00034 extern LIST_ENTRY SockHelpersListHead;
00035 extern HANDLE SockEvent;
00036 extern HANDLE SockAsyncCompletionPort;
00037 extern BOOLEAN SockAsyncSelectCalled;
00038 
00039 typedef enum _SOCKET_STATE {
00040     SocketOpen,
00041     SocketBound,
00042     SocketBoundUdp,
00043     SocketConnected,
00044     SocketClosed
00045 } SOCKET_STATE, *PSOCKET_STATE;
00046 
00047 typedef struct _SOCK_SHARED_INFO {
00048     SOCKET_STATE                State;
00049     INT                         AddressFamily;
00050     INT                         SocketType;
00051     INT                         Protocol;
00052     INT                         SizeOfLocalAddress;
00053     INT                         SizeOfRemoteAddress;
00054     struct linger               LingerData;
00055     ULONG                       SendTimeout;
00056     ULONG                       RecvTimeout;
00057     ULONG                       SizeOfRecvBuffer;
00058     ULONG                       SizeOfSendBuffer;
00059     struct {
00060         BOOLEAN                 Listening:1;
00061         BOOLEAN                 Broadcast:1;
00062         BOOLEAN                 Debug:1;
00063         BOOLEAN                 OobInline:1;
00064         BOOLEAN                 ReuseAddresses:1;
00065         BOOLEAN                 ExclusiveAddressUse:1;
00066         BOOLEAN                 NonBlocking:1;
00067         BOOLEAN                 DontUseWildcard:1;
00068         BOOLEAN                 ReceiveShutdown:1;
00069         BOOLEAN                 SendShutdown:1;
00070         BOOLEAN                 UseDelayedAcceptance:1;
00071         BOOLEAN                 UseSAN:1;
00072     }; // Flags
00073     DWORD                       CreateFlags;
00074     DWORD                       CatalogEntryId;
00075     DWORD                       ServiceFlags1;
00076     DWORD                       ProviderFlags;
00077     GROUP                       GroupID;
00078     DWORD                       GroupType;
00079     INT                         GroupPriority;
00080     INT                         SocketLastError;
00081     HWND                        hWnd;
00082     LONG                        Unknown;
00083     DWORD                       SequenceNumber;
00084     UINT                        wMsg;
00085     LONG                        AsyncEvents;
00086     LONG                        AsyncDisabledEvents;
00087 } SOCK_SHARED_INFO, *PSOCK_SHARED_INFO;
00088 
00089 typedef struct _SOCKET_INFORMATION {
00090     ULONG RefCount;
00091     SOCKET Handle;
00092     SOCK_SHARED_INFO SharedData;
00093     DWORD HelperEvents;
00094     PHELPER_DATA HelperData;
00095     PVOID HelperContext;
00096     PSOCKADDR LocalAddress;
00097     PSOCKADDR RemoteAddress;
00098     HANDLE TdiAddressHandle;
00099     HANDLE TdiConnectionHandle;
00100     PVOID AsyncData;
00101     HANDLE EventObject;
00102     LONG NetworkEvents;
00103     CRITICAL_SECTION Lock;
00104     PVOID SanData;
00105     BOOL TrySAN;
00106     SOCKADDR WSLocalAddress;
00107     SOCKADDR WSRemoteAddress;
00108     struct _SOCKET_INFORMATION *NextSocket;
00109 } SOCKET_INFORMATION, *PSOCKET_INFORMATION;
00110 
00111 
00112 typedef struct _SOCKET_CONTEXT {
00113     SOCK_SHARED_INFO SharedData;
00114     ULONG SizeOfHelperData;
00115     ULONG Padding;
00116     SOCKADDR LocalAddress;
00117     SOCKADDR RemoteAddress;
00118     /* Plus Helper Data */
00119 } SOCKET_CONTEXT, *PSOCKET_CONTEXT;
00120 
00121 typedef struct _ASYNC_DATA {
00122     PSOCKET_INFORMATION ParentSocket;
00123     DWORD SequenceNumber;
00124     IO_STATUS_BLOCK IoStatusBlock;
00125     AFD_POLL_INFO AsyncSelectInfo;
00126 } ASYNC_DATA, *PASYNC_DATA;
00127 
00128 SOCKET
00129 WSPAPI
00130 WSPAccept(
00131     IN      SOCKET s,
00132     OUT     LPSOCKADDR addr,
00133     IN OUT  LPINT addrlen,
00134     IN      LPCONDITIONPROC lpfnCondition,
00135     IN      DWORD dwCallbackData,
00136     OUT     LPINT lpErrno);
00137 
00138 INT
00139 WSPAPI
00140 WSPAddressToString(
00141     IN      LPSOCKADDR lpsaAddress,
00142     IN      DWORD dwAddressLength,
00143     IN      LPWSAPROTOCOL_INFOW lpProtocolInfo,
00144     OUT     LPWSTR lpszAddressString,
00145     IN OUT  LPDWORD lpdwAddressStringLength,
00146     OUT     LPINT lpErrno);
00147 
00148 INT
00149 WSPAPI
00150 WSPAsyncSelect(
00151     IN  SOCKET s,
00152     IN  HWND hWnd,
00153     IN  UINT wMsg,
00154     IN  LONG lEvent,
00155     OUT LPINT lpErrno);
00156 
00157 INT
00158 WSPAPI WSPBind(
00159     IN  SOCKET s,
00160     IN  CONST SOCKADDR *name,
00161     IN  INT namelen,
00162     OUT LPINT lpErrno);
00163 
00164 INT
00165 WSPAPI
00166 WSPCancelBlockingCall(
00167     OUT LPINT lpErrno);
00168 
00169 INT
00170 WSPAPI
00171 WSPCleanup(
00172     OUT LPINT lpErrno);
00173 
00174 INT
00175 WSPAPI
00176 WSPCloseSocket(
00177     IN  SOCKET s,
00178     OUT LPINT lpErrno);
00179 
00180 INT
00181 WSPAPI
00182 WSPConnect(
00183     IN  SOCKET s,
00184     IN  CONST SOCKADDR *name,
00185     IN  INT namelen,
00186     IN  LPWSABUF lpCallerData,
00187     OUT LPWSABUF lpCalleeData,
00188     IN  LPQOS lpSQOS,
00189     IN  LPQOS lpGQOS,
00190     OUT LPINT lpErrno);
00191 
00192 INT
00193 WSPAPI
00194 WSPDuplicateSocket(
00195     IN  SOCKET s,
00196     IN  DWORD dwProcessId,
00197     OUT LPWSAPROTOCOL_INFOW lpProtocolInfo,
00198     OUT LPINT lpErrno);
00199 
00200 INT
00201 WSPAPI
00202 WSPEnumNetworkEvents(
00203     IN  SOCKET s,
00204     IN  WSAEVENT hEventObject,
00205     OUT LPWSANETWORKEVENTS lpNetworkEvents,
00206     OUT LPINT lpErrno);
00207 
00208 INT
00209 WSPAPI
00210 WSPEventSelect(
00211     IN  SOCKET s,
00212     IN  WSAEVENT hEventObject,
00213     IN  LONG lNetworkEvents,
00214     OUT LPINT lpErrno);
00215 
00216 BOOL
00217 WSPAPI
00218 WSPGetOverlappedResult(
00219     IN  SOCKET s,
00220     IN  LPWSAOVERLAPPED lpOverlapped,
00221     OUT LPDWORD lpcbTransfer,
00222     IN  BOOL fWait,
00223     OUT LPDWORD lpdwFlags,
00224     OUT LPINT lpErrno);
00225 
00226 INT
00227 WSPAPI
00228 WSPGetPeerName(
00229     IN      SOCKET s,
00230     OUT     LPSOCKADDR name,
00231     IN OUT  LPINT namelen,
00232     OUT     LPINT lpErrno);
00233 
00234 BOOL
00235 WSPAPI
00236 WSPGetQOSByName(
00237     IN      SOCKET s,
00238     IN OUT  LPWSABUF lpQOSName,
00239     OUT     LPQOS lpQOS,
00240     OUT     LPINT lpErrno);
00241 
00242 INT
00243 WSPAPI
00244 WSPGetSockName(
00245     IN      SOCKET s,
00246     OUT     LPSOCKADDR name,
00247     IN OUT  LPINT namelen,
00248     OUT     LPINT lpErrno);
00249 
00250 INT
00251 WSPAPI
00252 WSPGetSockOpt(
00253     IN      SOCKET s,
00254     IN      INT level,
00255     IN      INT optname,
00256     OUT     CHAR FAR* optval,
00257     IN OUT  LPINT optlen,
00258     OUT     LPINT lpErrno);
00259 
00260 INT
00261 WSPAPI
00262 WSPIoctl(
00263     IN  SOCKET s,
00264     IN  DWORD dwIoControlCode,
00265     IN  LPVOID lpvInBuffer,
00266     IN  DWORD cbInBuffer,
00267     OUT LPVOID lpvOutBuffer,
00268     IN  DWORD cbOutBuffer,
00269     OUT LPDWORD lpcbBytesReturned,
00270     IN  LPWSAOVERLAPPED lpOverlapped,
00271     IN  LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
00272     IN  LPWSATHREADID lpThreadId,
00273     OUT LPINT lpErrno);
00274 
00275 SOCKET
00276 WSPAPI
00277 WSPJoinLeaf(
00278     IN  SOCKET s,
00279     IN  CONST SOCKADDR *name,
00280     IN  INT namelen,
00281     IN  LPWSABUF lpCallerData,
00282     OUT LPWSABUF lpCalleeData,
00283     IN  LPQOS lpSQOS,
00284     IN  LPQOS lpGQOS,
00285     IN  DWORD dwFlags,
00286     OUT LPINT lpErrno);
00287 
00288 INT
00289 WSPAPI
00290 WSPListen(
00291     IN  SOCKET s,
00292     IN  INT backlog,
00293     OUT LPINT lpErrno);
00294 
00295 INT
00296 WSPAPI
00297 WSPRecv(
00298     IN      SOCKET s,
00299     IN OUT  LPWSABUF lpBuffers,
00300     IN      DWORD dwBufferCount,
00301     OUT     LPDWORD lpNumberOfBytesRecvd,
00302     IN OUT  LPDWORD lpFlags,
00303     IN      LPWSAOVERLAPPED lpOverlapped,
00304     IN      LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
00305     IN      LPWSATHREADID lpThreadId,
00306     OUT     LPINT lpErrno);
00307 
00308 INT
00309 WSPAPI
00310 WSPRecvDisconnect(
00311     IN  SOCKET s,
00312     OUT LPWSABUF lpInboundDisconnectData,
00313     OUT LPINT lpErrno);
00314 
00315 INT
00316 WSPAPI
00317 WSPRecvFrom(
00318     IN      SOCKET s,
00319     IN OUT  LPWSABUF lpBuffers,
00320     IN      DWORD dwBufferCount,
00321     OUT     LPDWORD lpNumberOfBytesRecvd,
00322     IN OUT  LPDWORD lpFlags,
00323     OUT     LPSOCKADDR lpFrom,
00324     IN OUT  LPINT lpFromlen,
00325     IN      LPWSAOVERLAPPED lpOverlapped,
00326     IN      LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
00327     IN      LPWSATHREADID lpThreadId,
00328     OUT     LPINT lpErrno);
00329 
00330 INT
00331 WSPAPI
00332 WSPSelect(
00333     IN      INT nfds,
00334     IN OUT  fd_set *readfds,
00335     IN OUT  fd_set *writefds,
00336     IN OUT  fd_set *exceptfds,
00337     IN      CONST struct timeval *timeout,
00338     OUT     LPINT lpErrno);
00339 
00340 INT
00341 WSPAPI
00342 WSPSend(
00343     IN  SOCKET s,
00344     IN  LPWSABUF lpBuffers,
00345     IN  DWORD dwBufferCount,
00346     OUT LPDWORD lpNumberOfBytesSent,
00347     IN  DWORD dwFlags,
00348     IN  LPWSAOVERLAPPED lpOverlapped,
00349     IN  LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
00350     IN  LPWSATHREADID lpThreadId,
00351     OUT LPINT lpErrno);
00352 
00353 INT
00354 WSPAPI
00355 WSPSendDisconnect(
00356     IN  SOCKET s,
00357     IN  LPWSABUF lpOutboundDisconnectData,
00358     OUT LPINT lpErrno);
00359 
00360 INT
00361 WSPAPI
00362 WSPSendTo(
00363     IN  SOCKET s,
00364     IN  LPWSABUF lpBuffers,
00365     IN  DWORD dwBufferCount,
00366     OUT LPDWORD lpNumberOfBytesSent,
00367     IN  DWORD dwFlags,
00368     IN  CONST SOCKADDR *lpTo,
00369     IN  INT iTolen,
00370     IN  LPWSAOVERLAPPED lpOverlapped,
00371     IN  LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine,
00372     IN  LPWSATHREADID lpThreadId,
00373     OUT LPINT lpErrno);
00374 
00375 INT
00376 WSPAPI
00377 WSPSetSockOpt(
00378     IN  SOCKET s,
00379     IN  INT level,
00380     IN  INT optname,
00381     IN  CONST CHAR FAR* optval,
00382     IN  INT optlen,
00383     OUT LPINT lpErrno);
00384 
00385 INT
00386 WSPAPI
00387 WSPShutdown(
00388     IN  SOCKET s,
00389     IN  INT how,
00390     OUT LPINT lpErrno);
00391 
00392 SOCKET
00393 WSPAPI
00394 WSPSocket(
00395     IN  INT af,
00396     IN  INT type,
00397     IN  INT protocol,
00398     IN  LPWSAPROTOCOL_INFOW lpProtocolInfo,
00399     IN  GROUP g,
00400     IN  DWORD dwFlags,
00401     OUT LPINT lpErrno);
00402 
00403 INT
00404 WSPAPI
00405 WSPStringToAddress(
00406     IN      LPWSTR AddressString,
00407     IN      INT AddressFamily,
00408     IN      LPWSAPROTOCOL_INFOW lpProtocolInfo,
00409     OUT     LPSOCKADDR lpAddress,
00410     IN OUT  LPINT lpAddressLength,
00411     OUT     LPINT lpErrno);
00412 
00413 
00414 PSOCKET_INFORMATION GetSocketStructure(
00415     SOCKET Handle
00416 );
00417 
00418 INT TranslateNtStatusError( NTSTATUS Status );
00419 
00420 VOID DeleteSocketStructure( SOCKET Handle );
00421 
00422 int GetSocketInformation(
00423     PSOCKET_INFORMATION Socket,
00424     ULONG               AfdInformationClass,
00425     PBOOLEAN            Boolean      OPTIONAL,
00426     PULONG              Ulong        OPTIONAL,
00427     PLARGE_INTEGER      LargeInteger OPTIONAL
00428 );
00429 
00430 int SetSocketInformation(
00431     PSOCKET_INFORMATION Socket,
00432     ULONG               AfdInformationClass,
00433     PBOOLEAN            Boolean      OPTIONAL,
00434     PULONG              Ulong        OPTIONAL,
00435     PLARGE_INTEGER      LargeInteger OPTIONAL
00436 );
00437 
00438 int CreateContext(
00439     PSOCKET_INFORMATION Socket
00440 );
00441 
00442 int SockAsyncThread(
00443     PVOID ThreadParam
00444 );
00445 
00446 VOID
00447 SockProcessAsyncSelect(
00448     PSOCKET_INFORMATION Socket,
00449     PASYNC_DATA AsyncData
00450 );
00451 
00452 VOID
00453 SockAsyncSelectCompletionRoutine(
00454     PVOID Context,
00455     PIO_STATUS_BLOCK IoStatusBlock
00456 );
00457 
00458 BOOLEAN
00459 SockCreateOrReferenceAsyncThread(
00460     VOID
00461 );
00462 
00463 BOOLEAN SockGetAsyncSelectHelperAfdHandle(
00464     VOID
00465 );
00466 
00467 VOID SockProcessQueuedAsyncSelect(
00468     PVOID Context,
00469     PIO_STATUS_BLOCK IoStatusBlock
00470 );
00471 
00472 VOID
00473 SockReenableAsyncSelectEvent (
00474     IN PSOCKET_INFORMATION Socket,
00475     IN ULONG Event
00476     );
00477 
00478 typedef VOID (*PASYNC_COMPLETION_ROUTINE)(PVOID Context, PIO_STATUS_BLOCK IoStatusBlock);
00479 
00480 DWORD
00481 FORCEINLINE
00482 MsafdReturnWithErrno(NTSTATUS Status,
00483                      LPINT Errno,
00484                      DWORD Received,
00485                      LPDWORD ReturnedBytes)
00486 {
00487     if (Errno)
00488     {
00489         *Errno = TranslateNtStatusError(Status);
00490 
00491         if (ReturnedBytes)
00492             *ReturnedBytes = (*Errno == 0) ? Received : 0;
00493 
00494         return (*Errno == 0) ? 0 : SOCKET_ERROR;
00495     }
00496     else
00497     {
00498         DbgPrint("%s: Received invalid lpErrno pointer!\n", __FUNCTION__);
00499 
00500         if (ReturnedBytes)
00501             *ReturnedBytes = (Status == STATUS_SUCCESS) ? Received : 0;
00502 
00503         return (Status == STATUS_SUCCESS) ? 0 : SOCKET_ERROR;
00504     }
00505 }
00506 
00507 #endif /* __MSAFD_H */
00508 
00509 /* EOF */

Generated on Tue May 15 04:47:07 2012 for ReactOS by doxygen 1.6.3

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.