ReactOS 0.4.17-dev-573-g8315b8c
wshtcpip.c
Go to the documentation of this file.
1/*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS WinSock Helper DLL for TCP/IP
4 * FILE: wshtcpip.c
5 * PURPOSE: DLL entry
6 * PROGRAMMERS: Casper S. Hornstrup (chorns@users.sourceforge.net)
7 * REVISIONS:
8 * CSH 01/09-2000 Created
9 */
10#include "wshtcpip.h"
11#define NDEBUG
12#include <debug.h>
13
14BOOL
16DllMain(HANDLE hInstDll,
19{
20 DPRINT("DllMain of wshtcpip.dll\n");
21
22 switch (dwReason) {
24 /* Don't need thread attach notifications
25 so disable them to improve performance */
27 break;
28
30 break;
31
33 break;
34
36 break;
37 }
38 return TRUE;
39}
40
41
42INT
46 IN INT AddressLength,
47 IN LPWSAPROTOCOL_INFOW ProtocolInfo OPTIONAL,
48 OUT LPWSTR AddressString,
49 IN OUT LPDWORD AddressStringLength)
50{
52
53 return NO_ERROR;
54}
55
56
57INT
60 IN LPINT lpiProtocols OPTIONAL,
61 IN LPWSTR lpTransportKeyName,
62 IN OUT LPVOID lpProtocolBuffer,
64{
66
67 return NO_ERROR;
68}
69
70
71INT
74 IN PVOID HelperDllSocketContext,
75 OUT PSOCKADDR Sockaddr,
76 OUT PINT SockaddrLength)
77{
78 INT Size = 2 * sizeof(UINT);
79
80 if (*SockaddrLength < Size)
81 {
82 DPRINT1("Socket address length too small: %d\n", *SockaddrLength);
83 return WSAEFAULT;
84 }
85
86 RtlZeroMemory(Sockaddr, *SockaddrLength);
87
88 Sockaddr->sa_family = AF_INET;
89 *((PUINT)Sockaddr->sa_data) = INADDR_BROADCAST;
90
91 /* *SockaddrLength = Size; */
92
93 return NO_ERROR;
94}
95
96
97INT
100 IN LPWSTR ProviderName,
101 OUT LPGUID ProviderGuid)
102{
104
105 return NO_ERROR;
106}
107
108
109/*
110Document from OSR how WSHGetSockaddrType works
111http://www.osronline.com/ddkx/network/37wshfun_5lyq.htm
112*/
113
114INT
115EXPORT
117 IN PSOCKADDR Sockaddr,
118 IN DWORD SockaddrLength,
119 OUT PSOCKADDR_INFO SockaddrInfo)
120{
121 PSOCKADDR_IN ipv4 = (PSOCKADDR_IN)Sockaddr;
122
123 if (!ipv4 || !SockaddrInfo || SockaddrLength < sizeof(SOCKADDR_IN) ||
124 ipv4->sin_family != AF_INET)
125 {
126 DPRINT1("Invalid parameter: %x %x %d %u\n", ipv4, SockaddrInfo, SockaddrLength, (ipv4 ? ipv4->sin_family : 0));
127 return WSAEINVAL;
128 }
129
130 switch (ntohl(ipv4->sin_addr.s_addr))
131 {
132 case INADDR_ANY:
133 SockaddrInfo->AddressInfo = SockaddrAddressInfoWildcard;
134 break;
135
136 case INADDR_BROADCAST:
137 SockaddrInfo->AddressInfo = SockaddrAddressInfoBroadcast;
138 break;
139
140 case INADDR_LOOPBACK:
141 SockaddrInfo->AddressInfo = SockaddrAddressInfoLoopback;
142 break;
143
144 default:
145 SockaddrInfo->AddressInfo = SockaddrAddressInfoNormal;
146 break;
147 }
148
149 if (ntohs(ipv4->sin_port) == 0)
150 SockaddrInfo->EndpointInfo = SockaddrEndpointInfoWildcard;
151 else if (ntohs(ipv4->sin_port) < IPPORT_RESERVED)
152 SockaddrInfo->EndpointInfo = SockaddrEndpointInfoReserved;
153 else
154 SockaddrInfo->EndpointInfo = SockaddrEndpointInfoNormal;
155
156 return NO_ERROR;
157}
158
159static
160void
162 _In_ INT Level,
163 _In_ INT OptionName,
164 _Out_ PULONG TdiType,
165 _Out_ PULONG TdiId)
166{
167 switch (Level)
168 {
169 case SOL_SOCKET:
170 *TdiType = INFO_TYPE_CONNECTION;
171 switch (OptionName)
172 {
173 case SO_KEEPALIVE:
174 *TdiId = TCP_SOCKET_KEEPALIVE;
175 return;
176 default:
177 break;
178 }
179 break;
180
181 case IPPROTO_IP:
182 *TdiType = INFO_TYPE_ADDRESS_OBJECT;
183 switch (OptionName)
184 {
185 case IP_TTL:
186 *TdiId = AO_OPTION_TTL;
187 return;
188
189 case IP_DONTFRAGMENT:
191 return;
192
193#if 0
195 *TdiId = AO_OPTION_BROADCAST;
196 return;
197#endif
198
199 case IP_HDRINCL:
200 *TdiId = AO_OPTION_IP_HDRINCL;
201 return;
202
203 default:
204 break;
205 }
206 break;
207
208 case IPPROTO_TCP:
209 *TdiType = INFO_TYPE_CONNECTION;
210 switch (OptionName)
211 {
212 case TCP_NODELAY:
213 *TdiId = TCP_SOCKET_NODELAY;
214 return;
215 default:
216 break;
217 }
218
219 default:
220 break;
221 }
222
223 DPRINT1("Unknown level/option name: %d %d\n", Level, OptionName);
224 *TdiType = 0;
225 *TdiId = 0;
226}
227
228INT
229EXPORT
231 IN PVOID HelperDllSocketContext,
232 IN SOCKET SocketHandle,
233 IN HANDLE TdiAddressObjectHandle,
234 IN HANDLE TdiConnectionObjectHandle,
235 IN INT Level,
236 IN INT OptionName,
237 OUT PCHAR OptionValue,
238 OUT LPINT OptionLength)
239{
241
242 DPRINT1("Get: Unknown level/option name: %d %d\n", Level, OptionName);
243
244 *OptionLength = 0;
245
246 return NO_ERROR;
247}
248
249
250INT
251EXPORT
253 IN PVOID HelperDllSocketContext,
254 OUT PSOCKADDR Sockaddr,
255 OUT PINT SockaddrLength)
256{
257 INT Size = 2 * sizeof(UINT);
258
259 if (*SockaddrLength < Size)
260 {
261 DPRINT1("Socket address length too small: %d\n", *SockaddrLength);
262 return WSAEFAULT;
263 }
264
265 RtlZeroMemory(Sockaddr, *SockaddrLength);
266
267 Sockaddr->sa_family = AF_INET;
268 *((PUINT)Sockaddr->sa_data) = INADDR_ANY;
269
270 /* *SockaddrLength = Size; */
271
272 return NO_ERROR;
273}
274
275
276DWORD
277EXPORT
280 IN DWORD MappingLength)
281{
282 DWORD Rows = 6;
283 DWORD Columns = 3;
284 DWORD Size = 2 * sizeof(DWORD) + Columns * Rows * sizeof(DWORD);
285
286 if (MappingLength < Size)
287 {
288 DPRINT1("Mapping length too small: %d\n", MappingLength);
289 return Size;
290 }
291
292 Mapping->Rows = Rows;
293 Mapping->Columns = Columns;
294
295 Mapping->Mapping[0].AddressFamily = AF_INET;
296 Mapping->Mapping[0].SocketType = SOCK_STREAM;
297 Mapping->Mapping[0].Protocol = 0;
298
299 Mapping->Mapping[1].AddressFamily = AF_INET;
300 Mapping->Mapping[1].SocketType = SOCK_STREAM;
301 Mapping->Mapping[1].Protocol = IPPROTO_TCP;
302
303 Mapping->Mapping[2].AddressFamily = AF_INET;
304 Mapping->Mapping[2].SocketType = SOCK_DGRAM;
305 Mapping->Mapping[2].Protocol = 0;
306
307 Mapping->Mapping[3].AddressFamily = AF_INET;
308 Mapping->Mapping[3].SocketType = SOCK_DGRAM;
309 Mapping->Mapping[3].Protocol = IPPROTO_UDP;
310
311 Mapping->Mapping[4].AddressFamily = AF_INET;
312 Mapping->Mapping[4].SocketType = SOCK_RAW;
313 Mapping->Mapping[4].Protocol = 0;
314
315 Mapping->Mapping[5].AddressFamily = AF_INET;
316 Mapping->Mapping[5].SocketType = SOCK_RAW;
317 Mapping->Mapping[5].Protocol = IPPROTO_ICMP;
318
319 return NO_ERROR;
320}
321
322
323INT
324EXPORT
326 IN LPWSTR ProviderName,
327 OUT LPWSAPROTOCOL_INFOW *ProtocolInfo,
328 OUT LPDWORD ProtocolInfoEntries)
329{
331
332 return NO_ERROR;
333}
334
335
336INT
337EXPORT
339 IN PVOID HelperDllSocketContext,
340 IN SOCKET SocketHandle,
341 IN HANDLE TdiAddressObjectHandle,
342 IN HANDLE TdiConnectionObjectHandle,
348 OUT LPDWORD NumberOfBytesReturned,
349 IN LPWSAOVERLAPPED Overlapped,
351 OUT LPBOOL NeedsCompletion)
352{
353 INT res;
354 PSOCKET_CONTEXT Context = HelperDllSocketContext;
356 PQUEUED_REQUEST Queued, NextQueued;
357
359 {
363 NumberOfBytesReturned,
364 NeedsCompletion);
365 return res;
366 }
368 {
369 if (!InputBuffer || InputBufferLength != sizeof(struct tcp_keepalive))
370 {
371 return WSAEINVAL;
372 }
373
375 if (!Info)
376 return WSAENOBUFS;
377
378 Info->ID.toi_entity.tei_entity = Context->AddrFileEntityType;
379 Info->ID.toi_entity.tei_instance = Context->AddrFileInstance;
380 Info->ID.toi_class = INFO_CLASS_PROTOCOL;
381 Info->ID.toi_type = INFO_TYPE_CONNECTION;
382 Info->ID.toi_id = TCP_SOCKET_KEEPALIVEVALS;
383 Info->BufferSize = InputBufferLength;
385
386 if (Context->SocketState == SocketStateCreated)
387 {
388 if (Context->RequestQueue)
389 {
390 Queued = Context->RequestQueue;
391 while ((NextQueued = Queued->Next))
392 {
393 Queued = NextQueued;
394 }
395
396 Queued->Next = HeapAlloc(GetProcessHeap(), 0, sizeof(QUEUED_REQUEST));
397 if (!Queued->Next)
398 {
400 return WSAENOBUFS;
401 }
402
403 NextQueued = Queued->Next;
404 NextQueued->Next = NULL;
405 NextQueued->Info = Info;
406 }
407 else
408 {
409 Context->RequestQueue = HeapAlloc(GetProcessHeap(), 0, sizeof(QUEUED_REQUEST));
410 if (!Context->RequestQueue)
411 {
413 return WSAENOBUFS;
414 }
415
416 Context->RequestQueue->Next = NULL;
417 Context->RequestQueue->Info = Info;
418 }
419
420 return 0;
421 }
422
423 res = SendRequest(Info, sizeof(*Info) + Info->BufferSize, IOCTL_TCP_SET_INFORMATION_EX);
424
426 return res;
427 }
428
430
431 DPRINT1("Ioctl: Unknown IOCTL code: %x\n", IoControlCode);
432
433 return WSAEINVAL;
434}
435
436
437INT
438EXPORT
440 IN PVOID HelperDllSocketContext,
441 IN SOCKET SocketHandle,
442 IN HANDLE TdiAddressObjectHandle,
443 IN HANDLE TdiConnectionObjectHandle,
444 IN PVOID LeafHelperDllSocketContext,
445 IN SOCKET LeafSocketHandle,
446 IN PSOCKADDR Sockaddr,
447 IN DWORD SockaddrLength,
448 IN LPWSABUF CallerData,
449 IN LPWSABUF CalleeData,
450 IN LPQOS SocketQOS,
451 IN LPQOS GroupQOS,
452 IN DWORD Flags)
453{
455
456 return NO_ERROR;
457}
458
459INT
463 IN DWORD IOCTL)
464{
466 HANDLE TcpCC;
468
470 return WSAEINVAL;
471
472 Success = DeviceIoControl(TcpCC,
473 IOCTL,
474 Request,
476 NULL,
477 0,
479 NULL);
480
481 closeTcpFile(TcpCC);
482
483 DPRINT("DeviceIoControl: %ld\n", (Success ? NO_ERROR : GetLastError()));
484
485 if (!Success)
486 return WSAEINVAL;
487
488 return NO_ERROR;
489}
490
491INT
492EXPORT
494 IN PVOID HelperDllSocketContext,
495 IN SOCKET SocketHandle,
496 IN HANDLE TdiAddressObjectHandle,
497 IN HANDLE TdiConnectionObjectHandle,
498 IN DWORD NotifyEvent)
499{
500 PSOCKET_CONTEXT Context = HelperDllSocketContext;
502 HANDLE TcpCC;
503 TDIEntityID *EntityIDs;
505 PQUEUED_REQUEST QueuedRequest, NextQueuedRequest;
506
507 switch (NotifyEvent)
508 {
509 case WSH_NOTIFY_CLOSE:
510 DPRINT("WSHNotify: WSH_NOTIFY_CLOSE\n");
511 QueuedRequest = Context->RequestQueue;
512 while (QueuedRequest)
513 {
514 NextQueuedRequest = QueuedRequest->Next;
515
516 HeapFree(GetProcessHeap(), 0, QueuedRequest->Info);
517 HeapFree(GetProcessHeap(), 0, QueuedRequest);
518
519 QueuedRequest = NextQueuedRequest;
520 }
521 HeapFree(GetProcessHeap(), 0, HelperDllSocketContext);
522 break;
523
524
525 case WSH_NOTIFY_BIND:
526 DPRINT("WSHNotify: WSH_NOTIFY_BIND\n");
528 if (Status != STATUS_SUCCESS)
529 return WSAEINVAL;
530
532 &EntityIDs,
533 &EntityCount);
534
535 closeTcpFile(TcpCC);
536
537 if (Status != STATUS_SUCCESS)
538 return WSAEINVAL;
539
540 for (i = 0; i < EntityCount; i++)
541 {
542 if (EntityIDs[i].tei_entity == CO_TL_ENTITY ||
543 EntityIDs[i].tei_entity == CL_TL_ENTITY ||
544 EntityIDs[i].tei_entity == ER_ENTITY)
545 {
546 Context->AddrFileInstance = EntityIDs[i].tei_instance;
547 Context->AddrFileEntityType = EntityIDs[i].tei_entity;
548 }
549 }
550
551 DPRINT("Instance: %lx Type: %lx\n", Context->AddrFileInstance, Context->AddrFileEntityType);
552
553 tdiFreeThingSet(EntityIDs);
554
555 Context->SocketState = SocketStateBound;
556
557 QueuedRequest = Context->RequestQueue;
558 while (QueuedRequest)
559 {
560 QueuedRequest->Info->ID.toi_entity.tei_entity = Context->AddrFileEntityType;
561 QueuedRequest->Info->ID.toi_entity.tei_instance = Context->AddrFileInstance;
562
563 SendRequest(QueuedRequest->Info,
564 sizeof(*QueuedRequest->Info) + QueuedRequest->Info->BufferSize,
566
567 NextQueuedRequest = QueuedRequest->Next;
568
569 HeapFree(GetProcessHeap(), 0, QueuedRequest->Info);
570 HeapFree(GetProcessHeap(), 0, QueuedRequest);
571
572 QueuedRequest = NextQueuedRequest;
573 }
574 Context->RequestQueue = NULL;
575 break;
576
577 default:
578 DPRINT1("Unwanted notification received! (%ld)\n", NotifyEvent);
579 break;
580 }
581
582 return NO_ERROR;
583}
584
585
586INT
587EXPORT
592 OUT PUNICODE_STRING TransportDeviceName,
593 OUT PVOID HelperDllSocketContext,
594 OUT PDWORD NotificationEvents)
595/*
596 * FUNCTION: Opens a socket
597 */
598{
601 Protocol,
602 0,
603 0,
604 TransportDeviceName,
605 HelperDllSocketContext,
606 NotificationEvents);
607}
608
609
610INT
611EXPORT
616 IN GROUP Group,
617 IN DWORD Flags,
618 OUT PUNICODE_STRING TransportDeviceName,
619 OUT PVOID *HelperDllSocketContext,
620 OUT PDWORD NotificationEvents)
621/*
622 * FUNCTION: Opens a socket
623 * ARGUMENTS:
624 * AddressFamily = Address of buffer with address family (updated)
625 * SocketType = Address of buffer with type of socket (updated)
626 * Protocol = Address of buffer with protocol number (updated)
627 * Group = Socket group
628 * Flags = Socket flags
629 * TransportDeviceName = Address of buffer to place name of transport device
630 * HelperDllSocketContext = Address of buffer to place socket context pointer
631 * NotificationEvents = Address of buffer to place flags for event notification
632 * RETURNS:
633 * Status of operation
634 * NOTES:
635 * Mapping tripple is returned in an canonicalized form
636 */
637{
643
644 DPRINT("WSHOpenSocket2 called\n");
645
646 switch (*SocketType) {
647 case SOCK_STREAM:
648 String = TcpDeviceName;
649 break;
650
651 case SOCK_DGRAM:
652 String = UdpDeviceName;
653 break;
654
655 case SOCK_RAW:
656 if ((*Protocol < 0) || (*Protocol > 255))
657 return WSAEINVAL;
658
659 String = RawDeviceName;
660 break;
661
662 default:
663 return WSAEINVAL;
664 }
665
666 RtlInitUnicodeString(TransportDeviceName, NULL);
667
668 TransportDeviceName->MaximumLength = String.Length + /* Transport device name */
669 (4 * sizeof(WCHAR) + /* Separator and protocol */
670 sizeof(UNICODE_NULL)); /* Terminating null */
671
672 TransportDeviceName->Buffer = HeapAlloc(
674 0,
675 TransportDeviceName->MaximumLength);
676
677 if (!TransportDeviceName->Buffer)
678 return WSAENOBUFS;
679
680 /* Append the transport device name */
681 RtlAppendUnicodeStringToString(TransportDeviceName, &String);
682
683 if (*SocketType == SOCK_RAW) {
684 /* Append a separator */
685 TransportDeviceName->Buffer[TransportDeviceName->Length / sizeof(WCHAR)] = OBJ_NAME_PATH_SEPARATOR;
686 TransportDeviceName->Length += sizeof(WCHAR);
687 TransportDeviceName->Buffer[TransportDeviceName->Length / sizeof(WCHAR)] = UNICODE_NULL;
688
689 /* Append the protocol number */
690 String.Buffer = TransportDeviceName->Buffer + (TransportDeviceName->Length / sizeof(WCHAR));
691 String.Length = 0;
692 String.MaximumLength = TransportDeviceName->MaximumLength - TransportDeviceName->Length;
693
695
696 TransportDeviceName->Length += String.Length;
697 }
698
699 /* Setup a socket context area */
700
702 if (!Context) {
703 RtlFreeUnicodeString(TransportDeviceName);
704 return WSAENOBUFS;
705 }
706
707 Context->AddressFamily = *AddressFamily;
708 Context->SocketType = *SocketType;
709 Context->Protocol = *Protocol;
710 Context->Flags = Flags;
711 Context->SocketState = SocketStateCreated;
712
713 *HelperDllSocketContext = Context;
714 *NotificationEvents = WSH_NOTIFY_CLOSE | WSH_NOTIFY_BIND;
715
716 return NO_ERROR;
717}
718
719INT
720EXPORT
722 IN PVOID HelperDllSocketContext,
723 IN SOCKET SocketHandle,
724 IN HANDLE TdiAddressObjectHandle,
725 IN HANDLE TdiConnectionObjectHandle,
726 IN INT Level,
727 IN INT OptionName,
728 IN PCHAR OptionValue,
729 IN INT OptionLength)
730{
731 PSOCKET_CONTEXT Context = HelperDllSocketContext;
732 ULONG TdiType, TdiId;
733 INT Status;
735 PQUEUED_REQUEST Queued, NextQueued;
736
737 DPRINT("WSHSetSocketInformation\n");
738
739 /* FIXME: We only handle address file object here */
740
741 switch (Level)
742 {
743 case SOL_SOCKET:
744 switch (OptionName)
745 {
746 case SO_DONTROUTE:
747 if (OptionLength < sizeof(BOOL))
748 {
749 return WSAEFAULT;
750 }
751 Context->DontRoute = *(BOOL*)OptionValue;
752 /* This is silently ignored on Windows */
753 return 0;
754
755 case SO_KEEPALIVE:
756 if (OptionLength < sizeof(DWORD))
757 {
758 return WSAEFAULT;
759 }
760 break;
761
762 default:
763 /* Invalid option */
764 DPRINT1("Set: Received unexpected SOL_SOCKET option %d\n", OptionName);
765 return WSAENOPROTOOPT;
766 }
767 break;
768
769 case IPPROTO_IP:
770 switch (OptionName)
771 {
772 case IP_TTL:
773 case IP_DONTFRAGMENT:
774 case IP_HDRINCL:
775 /* Send these to TCPIP */
776 break;
777
778 default:
779 /* Invalid option -- FIXME */
780 DPRINT1("Set: Received unsupported IPPROTO_IP option %d\n", OptionName);
781 return 0;
782 }
783 break;
784
785 case IPPROTO_TCP:
786 switch (OptionName)
787 {
788 case TCP_NODELAY:
789 if (OptionLength < sizeof(CHAR))
790 {
791 return WSAEFAULT;
792 }
793 break;
794
795 default:
796 /* Invalid option */
797 DPRINT1("Set: Received unexpected IPPROTO_TCP option %d\n", OptionName);
798 return 0;
799 }
800 break;
801
802 default:
803 DPRINT1("Set: Received unexpected %d option %d\n", Level, OptionName);
804 return 0;
805 }
806
807 /* If we get here, GetAddressOption must return something valid */
808 GetTdiTypeId(Level, OptionName, &TdiType, &TdiId);
809 ASSERT((TdiId != 0) && (TdiType != 0));
810
811 Info = HeapAlloc(GetProcessHeap(), 0, sizeof(*Info) + OptionLength);
812 if (!Info)
813 return WSAENOBUFS;
814
815 Info->ID.toi_entity.tei_entity = Context->AddrFileEntityType;
816 Info->ID.toi_entity.tei_instance = Context->AddrFileInstance;
817 Info->ID.toi_class = INFO_CLASS_PROTOCOL;
818 Info->ID.toi_type = TdiType;
819 Info->ID.toi_id = TdiId;
820 Info->BufferSize = OptionLength;
821 memcpy(Info->Buffer, OptionValue, OptionLength);
822
823 if (Context->SocketState == SocketStateCreated)
824 {
825 if (Context->RequestQueue)
826 {
827 Queued = Context->RequestQueue;
828 while ((NextQueued = Queued->Next))
829 {
830 Queued = NextQueued;
831 }
832
833 Queued->Next = HeapAlloc(GetProcessHeap(), 0, sizeof(QUEUED_REQUEST));
834 if (!Queued->Next)
835 {
837 return WSAENOBUFS;
838 }
839
840 NextQueued = Queued->Next;
841 NextQueued->Next = NULL;
842 NextQueued->Info = Info;
843 }
844 else
845 {
846 Context->RequestQueue = HeapAlloc(GetProcessHeap(), 0, sizeof(QUEUED_REQUEST));
847 if (!Context->RequestQueue)
848 {
850 return WSAENOBUFS;
851 }
852
853 Context->RequestQueue->Next = NULL;
854 Context->RequestQueue->Info = Info;
855 }
856
857 return 0;
858 }
859
860 Status = SendRequest(Info, sizeof(*Info) + Info->BufferSize, IOCTL_TCP_SET_INFORMATION_EX);
861
863
864 return Status;
865}
866
867
868INT
869EXPORT
871 IN LPWSTR AddressString,
873 IN LPWSAPROTOCOL_INFOW ProtocolInfo OPTIONAL,
875 IN OUT LPDWORD AddressStringLength)
876{
878
879 return NO_ERROR;
880}
881
882/* EOF */
unsigned char BOOLEAN
Definition: actypes.h:127
#define OBJ_NAME_PATH_SEPARATOR
Definition: arcname_tests.c:25
LONG NTSTATUS
Definition: precomp.h:26
static const COLUMN_LIST Columns[]
Definition: listview.c:19
@ Group
Definition: help.c:22
#define DPRINT1
Definition: precomp.h:8
DWORD dwReason
Definition: misc.cpp:135
#define UNIMPLEMENTED
Definition: ntoskrnl.c:15
#define NO_ERROR
Definition: dderror.h:5
BOOL WINAPI DeviceIoControl(IN HANDLE hDevice, IN DWORD dwIoControlCode, IN LPVOID lpInBuffer OPTIONAL, IN DWORD nInBufferSize OPTIONAL, OUT LPVOID lpOutBuffer OPTIONAL, IN DWORD nOutBufferSize OPTIONAL, OUT LPDWORD lpBytesReturned OPTIONAL, IN LPOVERLAPPED lpOverlapped OPTIONAL)
Definition: deviceio.c:136
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define RTL_CONSTANT_STRING(s)
Definition: combase.c:35
#define GetProcessHeap()
Definition: compat.h:736
#define DLL_THREAD_DETACH
Definition: compat.h:133
#define DLL_PROCESS_ATTACH
Definition: compat.h:131
#define DLL_PROCESS_DETACH
Definition: compat.h:130
#define HeapAlloc
Definition: compat.h:733
#define HeapFree(x, y, z)
Definition: compat.h:735
#define DLL_THREAD_ATTACH
Definition: compat.h:132
#define HEAP_ZERO_MEMORY
Definition: compat.h:134
BOOL WINAPI DisableThreadLibraryCalls(IN HMODULE hLibModule)
Definition: loader.c:85
#define IPPROTO_TCP
Definition: ip.h:197
#define IPPROTO_ICMP
Definition: ip.h:195
#define IPPROTO_UDP
Definition: ip.h:198
#define SOCK_STREAM
Definition: tcpip.h:118
#define AF_INET
Definition: tcpip.h:117
ULONG EntityCount
Definition: main.c:28
static PVOID Mapping[EMS_PHYSICAL_PAGES]
Definition: emsdrv.c:41
@ Success
Definition: eventcreate.c:712
unsigned int BOOL
Definition: ntddk_ex.h:94
unsigned long DWORD
Definition: ntddk_ex.h:95
Status
Definition: gdiplustypes.h:24
GLuint res
Definition: glext.h:9613
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
unsigned int UINT
Definition: sysinfo.c:13
INT WSHIoctl_GetInterfaceList(IN LPVOID OutputBuffer, IN DWORD OutputBufferLength, OUT LPDWORD NumberOfBytesReturned, OUT LPBOOL NeedsCompletion)
Definition: iflist.c:215
#define INADDR_BROADCAST
Definition: inet.h:82
#define INADDR_ANY
Definition: inet.h:80
#define INADDR_LOOPBACK
Definition: inet.h:78
BOOL * LPBOOL
Definition: minwindef.h:138
int * LPINT
Definition: minwindef.h:151
int * PINT
Definition: minwindef.h:150
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
#define ASSERT(a)
Definition: mode.c:44
#define ntohl(x)
Definition: module.h:205
#define ntohs(x)
Definition: module.h:210
#define SIO_KEEPALIVE_VALS
Definition: mstcpip.h:29
unsigned int * PUINT
Definition: ndis.h:50
IN PCO_ADDRESS_FAMILY AddressFamily
Definition: ndis.h:1906
#define _Out_
Definition: no_sal2.h:160
#define _In_
Definition: no_sal2.h:158
#define FILE_WRITE_DATA
Definition: nt_native.h:631
#define FILE_READ_DATA
Definition: nt_native.h:628
NTSYSAPI NTSTATUS NTAPI RtlAppendUnicodeStringToString(PUNICODE_STRING Destination, PUNICODE_STRING Source)
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
NTSYSAPI NTSTATUS NTAPI RtlIntegerToUnicodeString(ULONG Value, ULONG Base, PUNICODE_STRING String)
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
#define DWORD
Definition: nt_native.h:44
#define UNICODE_NULL
short WCHAR
Definition: pedump.c:58
DWORD * PDWORD
Definition: pedump.c:68
char CHAR
Definition: pedump.c:57
static WCHAR Address[46]
Definition: ping.c:68
static ULONG RequestSize
Definition: ping.c:63
VOID tdiFreeThingSet(PVOID things)
Definition: enum.c:118
NTSTATUS tdiGetEntityIDSet(HANDLE tcpFile, TDIEntityID **entitySet, PDWORD numEntities)
Definition: enum.c:122
NTSTATUS openTcpFile(PHANDLE tcpFile, ACCESS_MASK DesiredAccess)
Definition: handle.c:12
VOID closeTcpFile(HANDLE h)
Definition: handle.c:43
#define STATUS_SUCCESS
Definition: shellext.h:65
#define DPRINT
Definition: sndvol32.h:73
PULONG MinorVersion OPTIONAL
Definition: CrossNt.h:68
_In_ PVOID Context
Definition: storport.h:2269
PTCP_REQUEST_SET_INFORMATION_EX Info
Definition: wshtcpip.h:40
ULONG tei_entity
Definition: tdiinfo.h:31
ULONG tei_instance
Definition: tdiinfo.h:32
TDIEntityID toi_entity
Definition: tdiinfo.h:74
struct in_addr sin_addr
Definition: winsock.h:506
short sin_family
Definition: winsock.h:504
u_short sin_port
Definition: winsock.h:505
#define TCP_NODELAY
Definition: tcpdef.h:117
#define AO_OPTION_BROADCAST
Definition: tcpioctl.h:77
#define AO_OPTION_IP_DONTFRAGMENT
Definition: tcpioctl.h:75
#define TCP_SOCKET_KEEPALIVEVALS
Definition: tcpioctl.h:111
#define TCP_SOCKET_NODELAY
Definition: tcpioctl.h:107
#define TCP_SOCKET_KEEPALIVE
Definition: tcpioctl.h:110
#define AO_OPTION_TTL
Definition: tcpioctl.h:67
#define AO_OPTION_IP_HDRINCL
Definition: tcpioctl.h:78
#define INFO_TYPE_ADDRESS_OBJECT
Definition: tdiinfo.h:70
#define ER_ENTITY
Definition: tdiinfo.h:46
#define CL_TL_ENTITY
Definition: tdiinfo.h:43
#define INFO_CLASS_PROTOCOL
Definition: tdiinfo.h:65
#define CO_TL_ENTITY
Definition: tdiinfo.h:45
#define INFO_TYPE_CONNECTION
Definition: tdiinfo.h:71
#define IOCTL_TCP_SET_INFORMATION_EX
Definition: tditest.h:112
uint32_t * PULONG
Definition: typedefs.h:59
uint16_t * LPWSTR
Definition: typedefs.h:56
uint32_t * LPDWORD
Definition: typedefs.h:59
int32_t INT
Definition: typedefs.h:58
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:262
#define IN
Definition: typedefs.h:39
uint32_t ULONG
Definition: typedefs.h:59
#define OUT
Definition: typedefs.h:40
char * PCHAR
Definition: typedefs.h:51
_Must_inspect_result_ _In_ WDFCHILDLIST _In_ PWDF_CHILD_LIST_ITERATOR _Out_ WDFDEVICE _Inout_opt_ PWDF_CHILD_RETRIEVE_INFO Info
Definition: wdfchildlist.h:690
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
Definition: wdfdevice.h:4539
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFSTRING String
Definition: wdfdevice.h:2439
_In_ WDFREQUEST Request
Definition: wdfdevice.h:547
_In_ WDFREQUEST _In_ size_t _In_ size_t _In_ ULONG IoControlCode
Definition: wdfio.h:325
_In_ WDFREQUEST _In_ size_t OutputBufferLength
Definition: wdfio.h:320
_In_ WDFREQUEST _In_ size_t _In_ size_t InputBufferLength
Definition: wdfio.h:322
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_ ULONG _In_opt_ PWDF_MEMORY_DESCRIPTOR _In_opt_ PWDF_MEMORY_DESCRIPTOR _In_opt_ PWDF_REQUEST_SEND_OPTIONS _Out_opt_ PULONG_PTR BytesReturned
Definition: wdfiotarget.h:1052
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR OutputBuffer
Definition: wdfiotarget.h:863
_Must_inspect_result_ _In_ WDFIOTARGET _In_opt_ WDFREQUEST _In_opt_ PWDF_MEMORY_DESCRIPTOR InputBuffer
Definition: wdfiotarget.h:953
_In_ WDFREQUEST _In_opt_ PFN_WDF_REQUEST_COMPLETION_ROUTINE CompletionRoutine
Definition: wdfrequest.h:895
DWORD WINAPI GetLastError(void)
Definition: except.c:1042
_Reserved_ PVOID Reserved
Definition: winddi.h:3974
#define WSAEINVAL
Definition: winerror.h:2845
#define WSAENOBUFS
Definition: winerror.h:2871
#define WSAENOPROTOOPT
Definition: winerror.h:2858
#define WSAEFAULT
Definition: winerror.h:2844
_In_ _In_opt_ _Out_writes_bytes_to_opt_ lpdwBufferLength _Inout_ LPDWORD lpdwBufferLength
Definition: winhttp.h:1018
unsigned int GROUP
Definition: winsock2.h:634
void(CALLBACK * LPWSAOVERLAPPED_COMPLETION_ROUTINE)(IN DWORD dwError, IN DWORD cbTransferred, IN LPWSAOVERLAPPED lpOverlapped, IN DWORD dwFlags)
Definition: winsock2.h:716
#define IPPORT_RESERVED
Definition: winsock.h:284
#define SO_KEEPALIVE
Definition: winsock.h:175
#define IP_DONTFRAGMENT
Definition: winsock.h:320
#define SOCK_RAW
Definition: winsock.h:331
struct sockaddr_in * PSOCKADDR_IN
Definition: winsock.h:482
#define SO_DONTROUTE
Definition: winsock.h:176
#define SOCK_DGRAM
Definition: winsock.h:330
#define IP_TTL
Definition: winsock.h:318
UINT_PTR SOCKET
Definition: winsock.h:41
#define SOL_SOCKET
Definition: winsock.h:392
#define IPPROTO_IP
Definition: winsock.h:249
_IRQL_requires_same_ typedef _In_ ULONG _In_ UCHAR Level
Definition: wmitypes.h:56
#define IP_HDRINCL
Definition: ws2ipdef.h:28
#define SIO_GET_INTERFACE_LIST
Definition: ws2ipdef.h:62
#define IP_RECEIVE_BROADCAST
Definition: ws2ipdef.h:43
#define WSH_NOTIFY_CLOSE
Definition: wsahelp.h:17
@ SockaddrEndpointInfoReserved
Definition: wsahelp.h:32
@ SockaddrEndpointInfoNormal
Definition: wsahelp.h:30
@ SockaddrEndpointInfoWildcard
Definition: wsahelp.h:31
@ SockaddrAddressInfoNormal
Definition: wsahelp.h:24
@ SockaddrAddressInfoLoopback
Definition: wsahelp.h:27
@ SockaddrAddressInfoWildcard
Definition: wsahelp.h:25
@ SockaddrAddressInfoBroadcast
Definition: wsahelp.h:26
#define WSH_NOTIFY_BIND
Definition: wsahelp.h:10
INT EXPORT WSHGetProviderGuid(IN LPWSTR ProviderName, OUT LPGUID ProviderGuid)
Definition: wshtcpip.c:99
INT EXPORT WSHGetWSAProtocolInfo(IN LPWSTR ProviderName, OUT LPWSAPROTOCOL_INFOW *ProtocolInfo, OUT LPDWORD ProtocolInfoEntries)
Definition: wshtcpip.c:325
INT EXPORT WSHGetSockaddrType(IN PSOCKADDR Sockaddr, IN DWORD SockaddrLength, OUT PSOCKADDR_INFO SockaddrInfo)
Definition: wshtcpip.c:116
INT EXPORT WSHSetSocketInformation(IN PVOID HelperDllSocketContext, IN SOCKET SocketHandle, IN HANDLE TdiAddressObjectHandle, IN HANDLE TdiConnectionObjectHandle, IN INT Level, IN INT OptionName, IN PCHAR OptionValue, IN INT OptionLength)
Definition: wshtcpip.c:721
INT EXPORT WSHIoctl(IN PVOID HelperDllSocketContext, IN SOCKET SocketHandle, IN HANDLE TdiAddressObjectHandle, IN HANDLE TdiConnectionObjectHandle, IN DWORD IoControlCode, IN LPVOID InputBuffer, IN DWORD InputBufferLength, IN LPVOID OutputBuffer, IN DWORD OutputBufferLength, OUT LPDWORD NumberOfBytesReturned, IN LPWSAOVERLAPPED Overlapped, IN LPWSAOVERLAPPED_COMPLETION_ROUTINE CompletionRoutine, OUT LPBOOL NeedsCompletion)
Definition: wshtcpip.c:338
INT EXPORT WSHGetBroadcastSockaddr(IN PVOID HelperDllSocketContext, OUT PSOCKADDR Sockaddr, OUT PINT SockaddrLength)
Definition: wshtcpip.c:73
BOOL EXPORT DllMain(HANDLE hInstDll, ULONG dwReason, PVOID Reserved)
Definition: wshtcpip.c:16
INT EXPORT WSHNotify(IN PVOID HelperDllSocketContext, IN SOCKET SocketHandle, IN HANDLE TdiAddressObjectHandle, IN HANDLE TdiConnectionObjectHandle, IN DWORD NotifyEvent)
Definition: wshtcpip.c:493
DWORD EXPORT WSHGetWinsockMapping(OUT PWINSOCK_MAPPING Mapping, IN DWORD MappingLength)
Definition: wshtcpip.c:278
INT EXPORT WSHStringToAddress(IN LPWSTR AddressString, IN DWORD AddressFamily, IN LPWSAPROTOCOL_INFOW ProtocolInfo OPTIONAL, OUT LPSOCKADDR Address, IN OUT LPDWORD AddressStringLength)
Definition: wshtcpip.c:870
INT EXPORT WSHOpenSocket(IN OUT PINT AddressFamily, IN OUT PINT SocketType, IN OUT PINT Protocol, OUT PUNICODE_STRING TransportDeviceName, OUT PVOID HelperDllSocketContext, OUT PDWORD NotificationEvents)
Definition: wshtcpip.c:588
INT EXPORT WSHAddressToString(IN LPSOCKADDR Address, IN INT AddressLength, IN LPWSAPROTOCOL_INFOW ProtocolInfo OPTIONAL, OUT LPWSTR AddressString, IN OUT LPDWORD AddressStringLength)
Definition: wshtcpip.c:44
INT EXPORT WSHGetSocketInformation(IN PVOID HelperDllSocketContext, IN SOCKET SocketHandle, IN HANDLE TdiAddressObjectHandle, IN HANDLE TdiConnectionObjectHandle, IN INT Level, IN INT OptionName, OUT PCHAR OptionValue, OUT LPINT OptionLength)
Definition: wshtcpip.c:230
INT EXPORT WSHJoinLeaf(IN PVOID HelperDllSocketContext, IN SOCKET SocketHandle, IN HANDLE TdiAddressObjectHandle, IN HANDLE TdiConnectionObjectHandle, IN PVOID LeafHelperDllSocketContext, IN SOCKET LeafSocketHandle, IN PSOCKADDR Sockaddr, IN DWORD SockaddrLength, IN LPWSABUF CallerData, IN LPWSABUF CalleeData, IN LPQOS SocketQOS, IN LPQOS GroupQOS, IN DWORD Flags)
Definition: wshtcpip.c:439
INT EXPORT WSHGetWildcardSockaddr(IN PVOID HelperDllSocketContext, OUT PSOCKADDR Sockaddr, OUT PINT SockaddrLength)
Definition: wshtcpip.c:252
INT SendRequest(IN PVOID Request, IN DWORD RequestSize, IN DWORD IOCTL)
Definition: wshtcpip.c:460
INT EXPORT WSHOpenSocket2(OUT PINT AddressFamily, IN OUT PINT SocketType, IN OUT PINT Protocol, IN GROUP Group, IN DWORD Flags, OUT PUNICODE_STRING TransportDeviceName, OUT PVOID *HelperDllSocketContext, OUT PDWORD NotificationEvents)
Definition: wshtcpip.c:612
INT EXPORT WSHEnumProtocols(IN LPINT lpiProtocols OPTIONAL, IN LPWSTR lpTransportKeyName, IN OUT LPVOID lpProtocolBuffer, IN OUT LPDWORD lpdwBufferLength)
Definition: wshtcpip.c:59
static void GetTdiTypeId(_In_ INT Level, _In_ INT OptionName, _Out_ PULONG TdiType, _Out_ PULONG TdiId)
Definition: wshtcpip.c:161
#define DD_RAW_IP_DEVICE_NAME
Definition: wshtcpip.h:30
#define DD_UDP_DEVICE_NAME
Definition: wshtcpip.h:29
@ SocketStateBound
Definition: wshtcpip.h:34
@ SocketStateCreated
Definition: wshtcpip.h:33
#define DD_TCP_DEVICE_NAME
Definition: wshtcpip.h:28
_In_ USHORT SocketType
Definition: wsk.h:182
_Must_inspect_result_ _In_ ULONG Flags
Definition: wsk.h:170
_In_ ULONG Rows
Definition: haltypes.h:17