/*
This file is part of GNUnet.
- (C) 2001, 2002, 2003, 2004, 2005 Christian Grothoff (and other contributing authors)
+ Copyright (C) 2001, 2002, 2003, 2004, 2005 GNUnet e.V.
GNUnet is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published
- by the Free Software Foundation; either version 2, or (at your
+ by the Free Software Foundation; either version 3, or (at your
option) any later version.
GNUnet is distributed in the hope that it will be useful, but
You should have received a copy of the GNU General Public License
along with GNUnet; see the file COPYING. If not, write to the
- Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA.
+ Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ Boston, MA 02110-1301, USA.
*/
/**
- * @file util/winproc.h
- * @brief Definitions for MS Windows
* @author Nils Durner
- **/
+ *
+ * @file
+ * Definitions for MS Windows
+ */
#ifndef _WINPROC_H
#define _WINPROC_H
#include <sys/timeb.h>
#include <time.h>
#include <dirent.h>
+#ifndef FD_SETSIZE
+#define FD_SETSIZE 1024
+#endif
+#include <winsock2.h>
+#include <ws2tcpip.h>
#include <windows.h>
-#include <winsock.h>
#include <winerror.h>
#include <iphlpapi.h>
#include <shlobj.h>
#include <objbase.h>
#include <sys/param.h> /* #define BYTE_ORDER */
-#include <Ntsecapi.h>
+#include <ntsecapi.h>
#include <lm.h>
-#include <Aclapi.h>
+#include <aclapi.h>
#ifdef __cplusplus
#define MAX_NAME_LENGTH 25
#endif
- typedef DWORD WINAPI (*TNtQuerySystemInformation) (int, PVOID, ULONG,
- PULONG);
+ typedef DWORD WINAPI (*TNtQuerySystemInformation) (int, PVOID, ULONG, PULONG);
typedef DWORD WINAPI (*TGetIfEntry) (PMIB_IFROW pIfRow);
typedef DWORD WINAPI (*TGetIpAddrTable) (PMIB_IPADDRTABLE pIpAddrTable,
PULONG pdwSize, BOOL bOrder);
typedef DWORD WINAPI (*TGetIfTable) (PMIB_IFTABLE pIfTable, PULONG pdwSize,
BOOL bOrder);
+ typedef DWORD WINAPI (*TGetBestInterfaceEx) (struct sockaddr *, PDWORD);
+ /* TODO: Explicitly import -A variants (i.e. TCreateHardLinkA) or -W
+ * variants (TCreateHardLinkW), etc.
+ */
typedef DWORD WINAPI (*TCreateHardLink) (LPCTSTR lpFileName,
LPCTSTR lpExistingFileName,
LPSECURITY_ATTRIBUTES
typedef SC_HANDLE WINAPI (*TOpenService) (SC_HANDLE hSCManager,
LPCTSTR lpServiceName,
DWORD dwDesiredAccess);
- typedef DWORD WINAPI (*TGetBestInterface) (IPAddr dwDestAddr,
- PDWORD pdwBestIfIndex);
typedef DWORD WINAPI (*TGetAdaptersInfo) (PIP_ADAPTER_INFO pAdapterInfo,
PULONG pOutBufLen);
- typedef NET_API_STATUS WINAPI (*TNetUserAdd) (LPCWSTR, DWORD, PBYTE,
- PDWORD);
+ typedef NET_API_STATUS WINAPI (*TNetUserAdd) (LPCWSTR, DWORD, PBYTE, PDWORD);
typedef NET_API_STATUS WINAPI (*TNetUserSetInfo) (LPCWSTR servername,
LPCWSTR username,
DWORD level, LPBYTE buf,
- LPDWORD parm_err);
+ LPDWORD param_err);
typedef NTSTATUS NTAPI (*TLsaOpenPolicy) (PLSA_UNICODE_STRING,
- PLSA_OBJECT_ATTRIBUTES,
- ACCESS_MASK, PLSA_HANDLE);
+ PLSA_OBJECT_ATTRIBUTES, ACCESS_MASK,
+ PLSA_HANDLE);
typedef NTSTATUS NTAPI (*TLsaAddAccountRights) (LSA_HANDLE, PSID,
PLSA_UNICODE_STRING, ULONG);
- typedef NTSTATUS NTAPI (*TLsaRemoveAccountRights) (LSA_HANDLE, PSID,
- BOOLEAN,
+ typedef NTSTATUS NTAPI (*TLsaRemoveAccountRights) (LSA_HANDLE, PSID, BOOLEAN,
PLSA_UNICODE_STRING,
ULONG);
typedef NTSTATUS NTAPI (*TLsaClose) (LSA_HANDLE);
LPBOOL lpbDaclPresent,
PACL * pDacl,
LPBOOL lpbDaclDefaulted);
- typedef BOOL WINAPI (*TGetAclInformation) (PACL pAcl,
- LPVOID pAclInformation,
+ typedef BOOL WINAPI (*TGetAclInformation) (PACL pAcl, LPVOID pAclInformation,
DWORD nAclInformationLength,
ACL_INFORMATION_CLASS
dwAclInformationClass);
PSID psidGroup, PACL pDacl,
PACL pSacl);
+ extern TGetBestInterfaceEx GNGetBestInterfaceEx;
extern TNtQuerySystemInformation GNNtQuerySystemInformation;
extern TGetIfEntry GNGetIfEntry;
extern TGetIpAddrTable GNGetIpAddrTable;
extern TStartServiceCtrlDispatcher GNStartServiceCtrlDispatcher;
extern TControlService GNControlService;
extern TOpenService GNOpenService;
- extern TGetBestInterface GNGetBestInterface;
- extern TGetAdaptersInfo GGetAdaptersInfo;
+ extern TGetAdaptersInfo GNGetAdaptersInfo;
extern TNetUserAdd GNNetUserAdd;
extern TNetUserSetInfo GNNetUserSetInfo;
extern TLsaOpenPolicy GNLsaOpenPolicy;
BOOL CreateShortcut (const char *pszSrc, const char *pszDest);
BOOL DereferenceShortcut (char *pszShortcut);
- long QueryRegistry (HKEY hMainKey, char *pszKey, char *pszSubKey,
+ long QueryRegistry (HKEY hMainKey, const char *pszKey, const char *pszSubKey,
char *pszBuffer, long *pdLength);
- int ListNICs (void (*callback) (const char *, int, void *), void *cls);
+ int ListNICs (void (*callback) (void *, const char *, int), void *cls);
BOOL AddPathAccessRights (char *lpszFileName, char *lpszAccountName,
DWORD dwAccessMask);
char *winErrorStr (const char *prefix, int dwErr);
-
- void GNInitWinEnv ();
+ void EnumNICs (PMIB_IFTABLE * pIfTable, PMIB_IPADDRTABLE * pAddrTable);
+
+#define ENUMNICS3_MASK_OK 0x01
+#define ENUMNICS3_BCAST_OK 0x02
+
+ struct EnumNICs3_results
+ {
+ unsigned char flags;
+ int is_default;
+ char pretty_name[1001];
+ size_t addr_size;
+ SOCKADDR_STORAGE address;
+ SOCKADDR_STORAGE mask;
+ SOCKADDR_STORAGE broadcast;
+ };
+
+ int EnumNICs3 (struct EnumNICs3_results **, int *EnumNICs3_results_count);
+ void EnumNICs3_free (struct EnumNICs3_results *);
+ int GNInitWinEnv ();
void GNShutdownWinEnv ();
+ BOOL SafeTerminateProcess (HANDLE hProcess, UINT uExitCode, DWORD dwTimeout);
#ifdef __cplusplus
}
#endif