First instance of DHCP client API.  Not tested yet.  Next, the control
panel.
Added: trunk/reactos/lib/dhcpcapi/
Added: trunk/reactos/lib/dhcpcapi/dhcpcapi.c
Added: trunk/reactos/lib/dhcpcapi/dhcpcapi.def
Added: trunk/reactos/lib/dhcpcapi/dhcpcapi.rc
Added: trunk/reactos/lib/dhcpcapi/makefile

Added: trunk/reactos/lib/dhcpcapi/dhcpcapi.c
--- trunk/reactos/lib/dhcpcapi/dhcpcapi.c	2005-04-12 23:23:26 UTC (rev 14599)
+++ trunk/reactos/lib/dhcpcapi/dhcpcapi.c	2005-04-12 23:25:14 UTC (rev 14600)
@@ -0,0 +1,140 @@
+/* $Id: dllmain.c 12852 2005-01-06 13:58:04Z mf $
+ *
+ * COPYRIGHT:       See COPYING in the top level directory
+ * PROJECT:         ReactOS system libraries
+ * FILE:            lib/dhcpcapi/dhcpcapi.c
+ * PURPOSE:         Client API for DHCP
+ * PROGRAMMER:      arty (ayerkes@speakeasy.net)
+ * UPDATE HISTORY:
+ *                  Created 12/04/2005
+ */
+
+#include <roscfg.h>
+#include <winsock2.h>
+#include <dhcpcsdk.h>
+#include <rosdhcp_public.h>
+
+#define DHCP_TIMEOUT 1000
+
+#define EXPORT __declspec(dllexport) WINAPI
+
+DWORD EXPORT DhcpCApiInitialize(LPDWORD Version) {
+    *Version = 2;
+    return 0;
+}
+
+VOID EXPORT DhcpCApiCleanup() {
+}
+
+DWORD EXPORT DhcpQueryHWInfo( DWORD AdapterIndex,
+                                     PDWORD MediaType, 
+                                     PDWORD Mtu, 
+                                     PDWORD Speed ) {
+    COMM_DHCP_REQ Req;
+    COMM_DHCP_REPLY Reply;
+    DWORD BytesRead;
+    BOOL Result;
+
+    Req.Type = DhcpReqQueryHWInfo;
+    Req.AdapterIndex = AdapterIndex;
+
+    Result = CallNamedPipe
+        ( DHCP_PIPE_NAME, &Req, sizeof(Req), &Reply, sizeof(Reply),
+          &BytesRead, DHCP_TIMEOUT );
+
+    if( !Reply.Reply ) return 0;
+    else {
+        *MediaType = Reply.QueryHWInfo.MediaType;
+        *Mtu = Reply.QueryHWInfo.Mtu;
+        *Speed = Reply.QueryHWInfo.Speed;
+        return 1;
+    }
+}
+
+DWORD EXPORT DhcpLeaseIpAddress( DWORD AdapterIndex ) {   
+    COMM_DHCP_REQ Req;
+    COMM_DHCP_REPLY Reply;
+    DWORD BytesRead;
+    BOOL Result;
+
+    Req.Type = DhcpReqLeaseIpAddress;
+    Req.AdapterIndex = AdapterIndex;
+
+    Result = CallNamedPipe
+        ( DHCP_PIPE_NAME, &Req, sizeof(Req), &Reply, sizeof(Reply),
+          &BytesRead, DHCP_TIMEOUT );
+
+    return Reply.Reply;
+}
+
+DWORD EXPORT DhcpReleaseIpAddressLease( DWORD AdapterIndex ) {
+    COMM_DHCP_REQ Req;
+    COMM_DHCP_REPLY Reply;
+    DWORD BytesRead;
+    BOOL Result;
+
+    Req.Type = DhcpReqReleaseIpAddress;
+    Req.AdapterIndex = AdapterIndex;
+
+    Result = CallNamedPipe
+        ( DHCP_PIPE_NAME, &Req, sizeof(Req), &Reply, sizeof(Reply),
+          &BytesRead, DHCP_TIMEOUT );
+
+    return Reply.Reply;
+}
+
+DWORD EXPORT DhcpRenewIpAddressLease( DWORD AdapterIndex ) {
+    COMM_DHCP_REQ Req;
+    COMM_DHCP_REPLY Reply;
+    DWORD BytesRead;
+    BOOL Result;
+
+    Req.Type = DhcpReqRenewIpAddress;
+    Req.AdapterIndex = AdapterIndex;
+
+    Result = CallNamedPipe
+        ( DHCP_PIPE_NAME, &Req, sizeof(Req), &Reply, sizeof(Reply),
+          &BytesRead, DHCP_TIMEOUT );
+
+    return Reply.Reply;
+}
+
+DWORD EXPORT DhcpStaticRefreshParams( DWORD AdapterIndex, 
+                                             DWORD Address, 
+                                             DWORD Netmask ) {
+    COMM_DHCP_REQ Req;
+    COMM_DHCP_REPLY Reply;
+    DWORD BytesRead;
+    BOOL Result;
+
+    Req.Type = DhcpReqStaticRefreshParams;
+    Req.AdapterIndex = AdapterIndex;
+    Req.Body.StaticRefreshParams.IPAddress = Address;
+    Req.Body.StaticRefreshParams.Netmask = Netmask;
+
+    Result = CallNamedPipe
+        ( DHCP_PIPE_NAME, &Req, sizeof(Req), &Reply, sizeof(Reply),
+          &BytesRead, DHCP_TIMEOUT );
+
+    return Reply.Reply;
+}
+
+INT STDCALL
+DllMain(PVOID hinstDll,
+	ULONG dwReason,
+	PVOID reserved)
+{
+   switch (dwReason)
+     {
+     case DLL_PROCESS_ATTACH:
+	DisableThreadLibraryCalls(hinstDll);
+	break;
+
+     case DLL_PROCESS_DETACH:
+	break;
+     }
+
+   return TRUE;
+}
+
+/* EOF */

Added: trunk/reactos/lib/dhcpcapi/dhcpcapi.def
--- trunk/reactos/lib/dhcpcapi/dhcpcapi.def	2005-04-12 23:23:26 UTC (rev 14599)
+++ trunk/reactos/lib/dhcpcapi/dhcpcapi.def	2005-04-12 23:25:14 UTC (rev 14600)
@@ -0,0 +1,16 @@
+; $Id: dhcpcapi.def 14337 2005-03-26 22:10:04Z $
+;
+; dhcpcapi.def
+;
+; ReactOS Operating System
+;
+LIBRARY dhcpcapi.dll
+EXPORTS
+DhcpCApiInitialize@4
+DhcpCApiCleanup@0
+DhcpQueryHWInfo@16
+DhcpLeaseIpAddress@4
+DhcpReleaseIpAddressLease@4
+DhcpRenewIpAddressLease@4
+DhcpStaticRefreshParams@12
+; EOF

Added: trunk/reactos/lib/dhcpcapi/dhcpcapi.rc
--- trunk/reactos/lib/dhcpcapi/dhcpcapi.rc	2005-04-12 23:23:26 UTC (rev 14599)
+++ trunk/reactos/lib/dhcpcapi/dhcpcapi.rc	2005-04-12 23:25:14 UTC (rev 14600)
@@ -0,0 +1,7 @@
+#include <defines.h>
+
+#define REACTOS_VERSION_DLL
+#define REACTOS_STR_FILE_DESCRIPTION	"DHCP Client API\0"
+#define REACTOS_STR_INTERNAL_NAME	"dhcpcapi\0"
+#define REACTOS_STR_ORIGINAL_FILENAME	"dhcpcapi.dll\0"
+#include <reactos/version.rc>

Added: trunk/reactos/lib/dhcpcapi/makefile
--- trunk/reactos/lib/dhcpcapi/makefile	2005-04-12 23:23:26 UTC (rev 14599)
+++ trunk/reactos/lib/dhcpcapi/makefile	2005-04-12 23:25:14 UTC (rev 14600)
@@ -0,0 +1,27 @@
+# $Id: makefile 12852 2005-01-06 13:58:04Z mf $
+
+PATH_TO_TOP = ../..
+
+TARGET_TYPE = dynlink
+
+TARGET_NAME = dhcpcapi
+
+TARGET_CFLAGS = -Wall -Werror \
+                -D__USE_W32API \
+                -D_WIN32_IE=0x0500 \
+                -D_WIN32_WINNT=0x501 \
+                -DWINVER=0x600 \
+
+TARGET_LFLAGS = -nostartfiles -nostdlib
+
+TARGET_SDKLIBS = ntdll.a kernel32.a
+
+TARGET_OBJECTS = dhcpcapi.o
+
+DEP_OBJECTS = $(TARGET_OBJECTS)
+
+include $(PATH_TO_TOP)/rules.mak
+
+include $(TOOLS_PATH)/helper.mk
+
+include $(TOOLS_PATH)/depend.mk