18 DWORD MaxSubKeyLen = 0, MaxSubKeys = 0;
27 &MaxSubKeys, &MaxSubKeyLen,
32 MaxSubKeys, MaxSubKeyLen));
34 CharTotal = (
sizeof(
PCHAR) + MaxSubKeyLen + AppendLen) * (MaxSubKeys + 1);
37 AppendLen, CharTotal));
40 OutKeyName = ((
PCHAR)&
Out[MaxSubKeys+1]);
51 OutKeyName +=
strlen(OutKeyName) + 1;
68 if( Subkey &&
strlen(Subkey) ) {
71 }
else ValueKey =
Root;
93 if( SubOut ) {
free( SubOut ); SubOut =
NULL; }
95 if( ValueKey && ValueKey !=
Root ) {
108 "SYSTEM\\CurrentControlSet\\Control\\Class\\" 109 "{4D36E972-E325-11CE-BFC1-08002BE10318}";
110 PCHAR TargetKeyNameStart =
111 "SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces\\";
119 if( !EnumKeysLinkage || !EnumKeysTop )
goto cleanup;
125 for(
i = 0; EnumKeysLinkage[
i];
i++ ) {
127 (
EnumKey, EnumKeysLinkage[
i],
"RootDevice" );
133 strlen( RootDevice ) + 1);
134 if( !TargetKeyName )
goto cleanup;
135 sprintf( TargetKeyName,
"%s%s",
136 TargetKeyNameStart, RootDevice );
140 free( RootDevice ); RootDevice = 0;
145 if( RootDevice )
free( RootDevice );
146 if( EnumKeysLinkage )
free( EnumKeysLinkage );
147 if( EnumKeysTop )
free( EnumKeysTop );
148 if( TargetKeyName )
free( TargetKeyName );
215 char *ZeroAddress =
"0.0.0.0";
254 for (; AdapterInfo !=
NULL; AdapterInfo = AdapterInfo->
Next)
260 if (AdapterInfo ==
NULL)
298 int i, AdapterCount = 0, Broadcast;
320 for(
i =
Table->dwNumEntries - 1;
i >= 0;
i-- ) {
322 Table->table[
i].dwIndex));
376 sizeof(Adapter->
IfMib) );
406 (
const char *)&Broadcast,
453 }
else {
free( Adapter ); Adapter = 0; }
454 }
else {
free( Adapter ); Adapter = 0; }
458 Table->table[
i].dwIndex));
467 DPRINT(
"Stopping the discovery thread!\n");
476 DPRINT(
"Adapter discovery thread terminated! (Error: %d)\n",
Error);
504 ListEntry = ListEntry->
Flink ) {
518 ListEntry = ListEntry->
Flink ) {
532 ListEntry = ListEntry->
Flink ) {
546 ListEntry = ListEntry->
Flink) {
551 hlen))
return Adapter;
struct _LIST_ENTRY * PLIST_ENTRY
PDHCP_ADAPTER AdapterGetNext(PDHCP_ADAPTER This)
static LIST_ENTRY AdapterList
WCHAR wszName[MAX_INTERFACE_NAME_LEN]
VOID WINAPI DECLSPEC_HOTPATCH Sleep(IN DWORD dwMilliseconds)
_In_ ULONG _In_ ULONG _In_ ULONG Length
SOCKET WSAAPI socket(IN INT af, IN INT type, IN INT protocol)
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
char * strcat(char *DstString, const char *SrcString)
int read_client_conf(struct interface_info *ifi)
ACPI_SIZE strlen(const char *String)
#define ERROR_BUFFER_OVERFLOW
INT WSAAPI bind(IN SOCKET s, IN CONST struct sockaddr *name, IN INT namelen)
HANDLE StartAdapterDiscovery(HANDLE hStopEvent)
char * strncpy(char *DstString, const char *SrcString, ACPI_SIZE Count)
IP_ADDRESS_STRING IpAddress
INT WSAAPI WSACleanup(VOID)
IN PVOID IN PVOID IN USHORT IN USHORT Size
BOOL WINAPI DECLSPEC_HOTPATCH SetEvent(IN HANDLE hEvent)
void got_one(struct protocol *l)
static BOOL Append(LPWSTR *ppszText, DWORD *pdwTextLen, LPCWSTR pszAppendText, DWORD dwAppendLen)
#define DHCP_PANIC_TIMEOUT
PCHAR RegReadString(HKEY Root, PCHAR Subkey, PCHAR Value)
#define InsertTailList(ListHead, Entry)
struct _IP_ADAPTER_INFO IP_ADAPTER_INFO
PDHCP_ADAPTER AdapterFindName(const WCHAR *name)
_Must_inspect_result_ FORCEINLINE BOOLEAN IsListEmpty(_In_ const LIST_ENTRY *ListHead)
#define DHCP_DISCOVER_INTERVAL
void remove_protocol(struct protocol *proto)
void if_register_send(struct interface_info *ip)
FORCEINLINE BOOLEAN RemoveEntryList(_In_ PLIST_ENTRY Entry)
#define sprintf(buf, format,...)
DWORD WINAPI WaitForSingleObject(IN HANDLE hHandle, IN DWORD dwMilliseconds)
DWORD WINAPI GetIfTable(PMIB_IFTABLE pIfTable, PULONG pdwSize, BOOL bOrder)
INT WSAAPI setsockopt(IN SOCKET s, IN INT level, IN INT optname, IN CONST CHAR FAR *optval, IN INT optlen)
HANDLE WINAPI DECLSPEC_HOTPATCH CreateThread(IN LPSECURITY_ATTRIBUTES lpThreadAttributes, IN DWORD dwStackSize, IN LPTHREAD_START_ROUTINE lpStartAddress, IN LPVOID lpParameter, IN DWORD dwCreationFlags, OUT LPDWORD lpThreadId)
INT WINAPI WSAStartup(IN WORD wVersionRequested, OUT LPWSADATA lpWSAData)
#define DH_DbgPrint(_t_, _x_)
FORCEINLINE PLIST_ENTRY RemoveHeadList(_Inout_ PLIST_ENTRY ListHead)
#define DHCP_REBOOT_TIMEOUT
MIB_IPFORWARDROW RouterMib
PDHCP_ADAPTER AdapterFindInfo(struct interface_info *ip)
struct client_config DhclientConfig
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING _Out_opt_ PUSHORT _Inout_opt_ PUNICODE_STRING Value
struct _LIST_ENTRY * Flink
root entry for file system trees
struct protocol * find_protocol_by_adapter(struct interface_info *info)
INT WSAAPI WSAGetLastError(VOID)
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
void add_protocol(char *name, int fd, void(*handler)(struct protocol *), void *local)
HKEY FindAdapterKey(PDHCP_ADAPTER Adapter)
UCHAR bPhysAddr[MAXLEN_PHYSADDR]
static LONG WINAPI EnumKey(HANDLE hcKey, DWORD dwIndex, LPWSTR pszName, PDWORD pcchName, PFILETIME pftLastWriteTime, HANDLE hSpooler)
struct _MIB_IFTABLE MIB_IFTABLE
#define MIB_IF_TYPE_ETHERNET
void if_register_receive(struct interface_info *ip)
int InterfaceConnected(const MIB_IFROW *IfEntry)
BYTE bDescr[MAXLEN_IFDESCR]
PCHAR * GetSubkeyNames(PCHAR MainKeyName, PCHAR Append)
PDHCP_ADAPTER AdapterFindIndex(unsigned int indx)
struct interface_info DhclientInfo
#define memcpy(s1, s2, n)
struct client_state DhclientState
DWORD WINAPI NotifyAddrChange(PHANDLE Handle, LPOVERLAPPED overlapped)
struct _MIB_IFTABLE * PMIB_IFTABLE
PDHCP_ADAPTER AdapterFindByHardwareAddress(u_int8_t haddr[16], u_int8_t hlen)
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
PDHCP_ADAPTER AdapterGetFirst()
#define InitializeListHead(ListHead)
HANDLE hAdapterStateChangedEvent
DWORD WINAPI GetAdaptersInfo(PIP_ADAPTER_INFO pAdapterInfo, PULONG pOutBufLen)
void state_init(void *ipp)
int strcmp(const char *String1, const char *String2)
char * cleanup(char *str)
LONG WINAPI RegCreateKeyExA(_In_ HKEY hKey, _In_ LPCSTR lpSubKey, _In_ DWORD Reserved, _In_ LPSTR lpClass, _In_ DWORD dwOptions, _In_ REGSAM samDesired, _In_ LPSECURITY_ATTRIBUTES lpSecurityAttributes, _Out_ PHKEY phkResult, _Out_ LPDWORD lpdwDisposition)
BOOL PrepareAdapterForService(PDHCP_ADAPTER Adapter)
INTERNAL_IF_OPER_STATUS dwOperStatus
DWORD WINAPI AdapterDiscoveryThread(LPVOID Context)
#define HeapFree(x, y, z)
#define RegCloseKey(hKey)
struct _IP_ADAPTER_INFO * Next
struct sockaddr_in ListenAddr
IP_ADDR_STRING IpAddressList
#define HKEY_LOCAL_MACHINE
BOOL IsReconnectHackNeeded(PDHCP_ADAPTER Adapter, const MIB_IFROW *IfEntry)
#define ERROR_INSUFFICIENT_BUFFER
unsigned char recv_buf[1]