mirror of
https://github.com/SoftEtherVPN/SoftEtherVPN.git
synced 2025-07-06 15:54:57 +03:00
Merge pull request #1318 from davidebeatrici/minimum-version-windows-vista
Cedar, Mayaqua: Set minimum Windows version to Vista
This commit is contained in:
@ -28,7 +28,18 @@ if(WIN32)
|
||||
COMPILE_PDB_OUTPUT_DIRECTORY "${BUILD_DIRECTORY}"
|
||||
)
|
||||
|
||||
target_link_libraries(mayaqua PRIVATE setupapi.lib winmm.lib)
|
||||
target_link_libraries(mayaqua
|
||||
PRIVATE
|
||||
"DbgHelp.Lib"
|
||||
"dwmapi.lib"
|
||||
"iphlpapi.lib"
|
||||
"newdev.lib"
|
||||
"Psapi.Lib"
|
||||
"Secur32.Lib"
|
||||
"setupapi.lib"
|
||||
"winmm.lib"
|
||||
"WtsApi32.Lib"
|
||||
)
|
||||
endif()
|
||||
|
||||
if(UNIX)
|
||||
|
@ -612,15 +612,8 @@ void HashInstanceName(char *name, UINT size, char *instance_name)
|
||||
|
||||
Format(name, size, "VPN-%s", key);
|
||||
|
||||
if (OS_IS_WINDOWS_NT(GetOsInfo()->OsType))
|
||||
{
|
||||
if (GET_KETA(GetOsInfo()->OsType, 100) >= 2 ||
|
||||
GetOsInfo()->OsType == OSTYPE_WINDOWS_NT_4_TERMINAL_SERVER)
|
||||
{
|
||||
StrCpy(tmp, sizeof(tmp), name);
|
||||
Format(name, size, "Global\\%s", tmp);
|
||||
}
|
||||
}
|
||||
StrCpy(tmp, sizeof(tmp), name);
|
||||
Format(name, size, "Global\\%s", tmp);
|
||||
}
|
||||
void HashInstanceNameLocal(char *name, UINT size, char *instance_name)
|
||||
{
|
||||
@ -643,15 +636,8 @@ void HashInstanceNameLocal(char *name, UINT size, char *instance_name)
|
||||
|
||||
Format(name, size, "VPN-%s", key);
|
||||
|
||||
if (OS_IS_WINDOWS_NT(GetOsInfo()->OsType))
|
||||
{
|
||||
if (GET_KETA(GetOsInfo()->OsType, 100) >= 2 ||
|
||||
GetOsInfo()->OsType == OSTYPE_WINDOWS_NT_4_TERMINAL_SERVER)
|
||||
{
|
||||
StrCpy(tmp, sizeof(tmp), name);
|
||||
Format(name, size, "Local\\%s", tmp);
|
||||
}
|
||||
}
|
||||
StrCpy(tmp, sizeof(tmp), name);
|
||||
Format(name, size, "Local\\%s", tmp);
|
||||
}
|
||||
|
||||
// Run the process
|
||||
|
@ -252,11 +252,9 @@ typedef unsigned int SOCKET;
|
||||
|
||||
// OS discrimination macro
|
||||
#define GET_KETA(t, i) (((t) % (i * 10)) / i)
|
||||
#define OS_IS_WINDOWS_9X(t) (GET_KETA(t, 1000) == 1)
|
||||
#define OS_IS_WINDOWS_NT(t) (GET_KETA(t, 1000) == 2)
|
||||
#define OS_IS_WINDOWS(t) (OS_IS_WINDOWS_9X(t) || OS_IS_WINDOWS_NT(t))
|
||||
#define OS_IS_SERVER(t) (OS_IS_WINDOWS_NT(t) && GET_KETA(t, 10))
|
||||
#define OS_IS_WORKSTATION(t) ((OS_IS_WINDOWS_NT(t) && (!(GET_KETA(t, 10)))) || OS_IS_WINDOWS_9X(t))
|
||||
#define OS_IS_WINDOWS(t) ((GET_KETA(t, 1000) == 1) || (GET_KETA(t, 1000) == 2))
|
||||
#define OS_IS_SERVER(t) (OS_IS_WINDOWS(t) && GET_KETA(t, 10))
|
||||
#define OS_IS_WORKSTATION(t) (OS_IS_WINDOWS(t) && !(GET_KETA(t, 10))
|
||||
#define OS_IS_UNIX(t) (GET_KETA(t, 1000) == 3)
|
||||
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -47,9 +47,6 @@ typedef unsigned long DWORD;
|
||||
#define SVC_ARG_SERVICE "/service"
|
||||
#define SVC_ARG_SETUP_INSTALL "/setup_install"
|
||||
#define SVC_ARG_SETUP_UNINSTALL "/setup_uninstall"
|
||||
#define SVC_ARG_WIN9X_SERVICE "/win9x_service"
|
||||
#define SVC_ARG_WIN9X_INSTALL "/win9x_install"
|
||||
#define SVC_ARG_WIN9X_UNINSTALL "/win9x_uninstall"
|
||||
#define SVC_ARG_TCP "/tcp"
|
||||
#define SVC_ARG_TCP_UAC "/tcp_uac"
|
||||
#define SVC_ARG_TCP_UAC_W L"/tcp_uac"
|
||||
@ -92,19 +89,12 @@ typedef unsigned long DWORD;
|
||||
#define SVC_MODE_SERVICE 7
|
||||
#define SVC_MODE_SETUP_INSTALL 8
|
||||
#define SVC_MODE_SETUP_UNINSTALL 9
|
||||
#define SVC_MODE_WIN9X_SERVICE 10
|
||||
#define SVC_MODE_WIN9X_INSTALL 11
|
||||
#define SVC_MODE_WIN9X_UNINSTALL 12
|
||||
#define SVC_MODE_TCP 13
|
||||
#define SVC_MODE_TCPSETUP 14
|
||||
#define SVC_MODE_TRAFFIC 15
|
||||
#define SVC_MODE_UIHELP 16
|
||||
#define SVC_MODE_TCP_UAC 17
|
||||
|
||||
|
||||
#define WIN9X_SVC_REGKEY_1 "Software\\Microsoft\\Windows\\CurrentVersion\\RunServices"
|
||||
#define WIN9X_SVC_REGKEY_2 "Software\\Microsoft\\Windows\\CurrentVersion\\Run"
|
||||
|
||||
#define VISTA_MMCSS_KEYNAME "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Multimedia\\SystemProfile\\Tasks"
|
||||
#define VISTA_MMCSS_FILENAME "mmcss_backup.dat"
|
||||
|
||||
@ -138,69 +128,23 @@ typedef unsigned long DWORD;
|
||||
|
||||
#define DRIVER_DEVICE_ID_TAG "NeoAdapter_%s"
|
||||
|
||||
|
||||
#if (defined(MICROSOFT_C) || defined(NETWORK_C)) && (defined(OS_WIN32))
|
||||
|
||||
typedef enum __TCP_TABLE_CLASS {
|
||||
_TCP_TABLE_BASIC_LISTENER,
|
||||
_TCP_TABLE_BASIC_CONNECTIONS,
|
||||
_TCP_TABLE_BASIC_ALL,
|
||||
_TCP_TABLE_OWNER_PID_LISTENER,
|
||||
_TCP_TABLE_OWNER_PID_CONNECTIONS,
|
||||
_TCP_TABLE_OWNER_PID_ALL,
|
||||
_TCP_TABLE_OWNER_MODULE_LISTENER,
|
||||
_TCP_TABLE_OWNER_MODULE_CONNECTIONS,
|
||||
_TCP_TABLE_OWNER_MODULE_ALL
|
||||
} _TCP_TABLE_CLASS, *_PTCP_TABLE_CLASS;
|
||||
|
||||
// A pointer to the network related Win32 API function
|
||||
typedef struct NETWORK_WIN32_FUNCTIONS
|
||||
{
|
||||
HINSTANCE hIpHlpApi32;
|
||||
HINSTANCE hIcmp;
|
||||
DWORD (WINAPI *DeleteIpForwardEntry)(PMIB_IPFORWARDROW);
|
||||
DWORD (WINAPI *CreateIpForwardEntry)(PMIB_IPFORWARDROW);
|
||||
DWORD (WINAPI *GetIpForwardTable)(PMIB_IPFORWARDTABLE, PULONG, BOOL);
|
||||
DWORD (WINAPI *GetNetworkParams)(PFIXED_INFO, PULONG);
|
||||
ULONG (WINAPI *GetAdaptersAddresses)(ULONG, ULONG, PVOID, PIP_ADAPTER_ADDRESSES, PULONG);
|
||||
DWORD (WINAPI *GetIfTable)(PMIB_IFTABLE, PULONG, BOOL);
|
||||
DWORD (WINAPI *GetIfTable2)(void **);
|
||||
void (WINAPI *FreeMibTable)(PVOID);
|
||||
DWORD (WINAPI *IpRenewAddress)(PIP_ADAPTER_INDEX_MAP);
|
||||
DWORD (WINAPI *IpReleaseAddress)(PIP_ADAPTER_INDEX_MAP);
|
||||
DWORD (WINAPI *GetInterfaceInfo)(PIP_INTERFACE_INFO, PULONG);
|
||||
DWORD (WINAPI *GetAdaptersInfo)(PIP_ADAPTER_INFO, PULONG);
|
||||
DWORD (WINAPI *GetExtendedTcpTable)(PVOID, PDWORD, BOOL, ULONG, _TCP_TABLE_CLASS, ULONG);
|
||||
DWORD (WINAPI *AllocateAndGetTcpExTableFromStack)(PVOID *, BOOL, HANDLE, DWORD, DWORD);
|
||||
DWORD (WINAPI *GetTcpTable)(PMIB_TCPTABLE, PULONG, BOOL);
|
||||
DWORD (WINAPI *NotifyRouteChange)(PHANDLE, LPOVERLAPPED);
|
||||
BOOL (WINAPI *CancelIPChangeNotify)(LPOVERLAPPED);
|
||||
DWORD (WINAPI *NhpAllocateAndGetInterfaceInfoFromStack)(IP_INTERFACE_NAME_INFO **,
|
||||
PDWORD, BOOL, HANDLE, DWORD);
|
||||
HANDLE (WINAPI *IcmpCreateFile)();
|
||||
BOOL (WINAPI *IcmpCloseHandle)(HANDLE);
|
||||
DWORD (WINAPI *IcmpSendEcho)(HANDLE, IPAddr, LPVOID, WORD, PIP_OPTION_INFORMATION,
|
||||
LPVOID, DWORD, DWORD);
|
||||
} NETWORK_WIN32_FUNCTIONS;
|
||||
#endif
|
||||
|
||||
#ifdef MICROSOFT_C
|
||||
#ifdef MICROSOFT_C
|
||||
// WCM related code on Windows 8
|
||||
typedef enum _MS_WCM_PROPERTY
|
||||
{
|
||||
ms_wcm_global_property_domain_policy,
|
||||
ms_wcm_global_property_minimize_policy,
|
||||
ms_wcm_global_property_roaming_policy,
|
||||
ms_wcm_global_property_roaming_policy,
|
||||
ms_wcm_global_property_powermanagement_policy,
|
||||
ms_wcm_intf_property_connection_cost, //used to set/get cost level and flags for the connection
|
||||
ms_wcm_intf_property_dataplan_status, //used by MNO to indicate plan data associated with new cost
|
||||
ms_wcm_intf_property_hotspot_profile, //used to store hotspot profile (WISPr credentials)
|
||||
} MS_WCM_PROPERTY, *MS_PWCM_PROPERTY;
|
||||
} MS_WCM_PROPERTY, * MS_PWCM_PROPERTY;
|
||||
|
||||
typedef struct _MS_WCM_POLICY_VALUE {
|
||||
BOOL fValue;
|
||||
BOOL fIsGroupPolicy;
|
||||
} MS_WCM_POLICY_VALUE, *MS_PWCM_POLICY_VALUE;
|
||||
} MS_WCM_POLICY_VALUE, * MS_PWCM_POLICY_VALUE;
|
||||
|
||||
#define MS_WCM_MAX_PROFILE_NAME 256
|
||||
|
||||
@ -212,21 +156,20 @@ typedef enum _MS_WCM_MEDIA_TYPE
|
||||
ms_wcm_media_mbn,
|
||||
ms_wcm_media_invalid,
|
||||
ms_wcm_media_max
|
||||
} MS_WCM_MEDIA_TYPE, *MS_PWCM_MEDIA_TYPE;
|
||||
} MS_WCM_MEDIA_TYPE, * MS_PWCM_MEDIA_TYPE;
|
||||
|
||||
typedef struct _MS_WCM_PROFILE_INFO {
|
||||
WCHAR strProfileName[MS_WCM_MAX_PROFILE_NAME];
|
||||
GUID AdapterGUID;
|
||||
MS_WCM_MEDIA_TYPE Media;
|
||||
} MS_WCM_PROFILE_INFO, *MS_PWCM_PROFILE_INFO;
|
||||
} MS_WCM_PROFILE_INFO, * MS_PWCM_PROFILE_INFO;
|
||||
|
||||
typedef struct _MS_WCM_PROFILE_INFO_LIST {
|
||||
UINT dwNumberOfItems;
|
||||
|
||||
MS_WCM_PROFILE_INFO ProfileInfo[1];
|
||||
|
||||
} MS_WCM_PROFILE_INFO_LIST, *MS_PWCM_PROFILE_INFO_LIST;
|
||||
|
||||
} MS_WCM_PROFILE_INFO_LIST, * MS_PWCM_PROFILE_INFO_LIST;
|
||||
|
||||
// Internal structure
|
||||
typedef struct MS
|
||||
@ -235,7 +178,6 @@ typedef struct MS
|
||||
HINSTANCE hKernel32;
|
||||
bool IsNt;
|
||||
bool IsAdmin;
|
||||
struct NT_API *nt;
|
||||
HANDLE hCurrentProcess;
|
||||
UINT CurrentProcessId;
|
||||
bool MiniDumpEnabled;
|
||||
@ -294,112 +236,11 @@ typedef struct MS
|
||||
bool IsWine;
|
||||
} MS;
|
||||
|
||||
// For Windows NT API
|
||||
typedef struct NT_API
|
||||
{
|
||||
HINSTANCE hAdvapi32;
|
||||
HINSTANCE hShell32;
|
||||
HINSTANCE hNewDev;
|
||||
HINSTANCE hSetupApi;
|
||||
HINSTANCE hWtsApi32;
|
||||
HINSTANCE hPsApi;
|
||||
HINSTANCE hKernel32;
|
||||
HINSTANCE hSecur32;
|
||||
HINSTANCE hUser32;
|
||||
HINSTANCE hDbgHelp;
|
||||
HINSTANCE hWcmapi;
|
||||
HINSTANCE hDwmapi;
|
||||
BOOL (WINAPI *OpenProcessToken)(HANDLE, DWORD, PHANDLE);
|
||||
BOOL (WINAPI *LookupPrivilegeValue)(char *, char *, PLUID);
|
||||
BOOL (WINAPI *AdjustTokenPrivileges)(HANDLE, BOOL, PTOKEN_PRIVILEGES, DWORD, PTOKEN_PRIVILEGES, PDWORD);
|
||||
BOOL (WINAPI *InitiateSystemShutdown)(LPTSTR, LPTSTR, DWORD, BOOL, BOOL);
|
||||
BOOL (WINAPI *LogonUserW)(wchar_t *, wchar_t *, wchar_t *, DWORD, DWORD, HANDLE *);
|
||||
BOOL (WINAPI *LogonUserA)(char *, char *, char *, DWORD, DWORD, HANDLE *);
|
||||
BOOL (WINAPI *UpdateDriverForPlugAndPlayDevicesW)(HWND hWnd, LPCWSTR hardware_id, LPCWSTR inf_path, DWORD flag, PBOOL need_reboot);
|
||||
DWORD (WINAPI *CM_Get_DevNode_Status_Ex)(PULONG, PULONG, DWORD, ULONG, HANDLE);
|
||||
DWORD (WINAPI *CM_Get_Device_ID_ExA)(DWORD, LPSTR, ULONG, ULONG, HANDLE);
|
||||
BOOL (WINAPI *WTSQuerySessionInformation)(HANDLE, DWORD, WTS_INFO_CLASS, wchar_t *, DWORD *);
|
||||
void (WINAPI *WTSFreeMemory)(void *);
|
||||
BOOL (WINAPI *WTSDisconnectSession)(HANDLE, DWORD, BOOL);
|
||||
BOOL (WINAPI *WTSEnumerateSessions)(HANDLE, DWORD, DWORD, PWTS_SESSION_INFO *, DWORD *);
|
||||
BOOL (WINAPI *WTSRegisterSessionNotification)(HWND, DWORD);
|
||||
BOOL (WINAPI *WTSUnRegisterSessionNotification)(HWND);
|
||||
SC_HANDLE (WINAPI *OpenSCManager)(LPCTSTR, LPCTSTR, DWORD);
|
||||
SC_HANDLE (WINAPI *CreateServiceA)(SC_HANDLE, LPCTSTR, LPCTSTR, DWORD, DWORD, DWORD, DWORD, LPCTSTR, LPCTSTR, LPDWORD, LPCTSTR, LPCTSTR, LPCTSTR);
|
||||
SC_HANDLE (WINAPI *CreateServiceW)(SC_HANDLE, LPCWSTR, LPCWSTR, DWORD, DWORD, DWORD, DWORD, LPCWSTR, LPCWSTR, LPDWORD, LPCWSTR, LPCWSTR, LPCWSTR);
|
||||
BOOL (WINAPI *ChangeServiceConfig2)(SC_HANDLE, DWORD, LPVOID);
|
||||
BOOL (WINAPI *CloseServiceHandle)(SC_HANDLE);
|
||||
SC_HANDLE (WINAPI *OpenService)(SC_HANDLE, LPCTSTR, DWORD);
|
||||
BOOL (WINAPI *QueryServiceStatus)(SC_HANDLE, LPSERVICE_STATUS);
|
||||
BOOL (WINAPI *StartService)(SC_HANDLE, DWORD, LPCTSTR);
|
||||
BOOL (WINAPI *ControlService)(SC_HANDLE, DWORD, LPSERVICE_STATUS);
|
||||
BOOL (WINAPI *SetServiceStatus)(SERVICE_STATUS_HANDLE, LPSERVICE_STATUS);
|
||||
SERVICE_STATUS_HANDLE (WINAPI *RegisterServiceCtrlHandler)(LPCTSTR, LPHANDLER_FUNCTION);
|
||||
BOOL (WINAPI *StartServiceCtrlDispatcher)(CONST LPSERVICE_TABLE_ENTRY);
|
||||
BOOL (WINAPI *DeleteService)(SC_HANDLE);
|
||||
BOOL (WINAPI *EnumProcesses)(DWORD *, DWORD, DWORD *);
|
||||
BOOL (WINAPI *EnumProcessModules)(HANDLE, HMODULE *, DWORD, DWORD *);
|
||||
DWORD (WINAPI *GetModuleFileNameExA)(HANDLE, HMODULE, LPSTR, DWORD);
|
||||
DWORD (WINAPI *GetModuleFileNameExW)(HANDLE, HMODULE, LPWSTR, DWORD);
|
||||
DWORD (WINAPI *GetProcessImageFileNameA)(HANDLE, LPSTR, DWORD);
|
||||
DWORD (WINAPI *GetProcessImageFileNameW)(HANDLE, LPWSTR, DWORD);
|
||||
BOOL (WINAPI *QueryFullProcessImageNameA)(HANDLE, DWORD, LPSTR, PDWORD);
|
||||
BOOL (WINAPI *QueryFullProcessImageNameW)(HANDLE, DWORD, LPWSTR, PDWORD);
|
||||
LONG (WINAPI *RegDeleteKeyExA)(HKEY, LPCTSTR, REGSAM, DWORD);
|
||||
BOOL (WINAPI *IsWow64Process)(HANDLE, BOOL *);
|
||||
void (WINAPI *GetNativeSystemInfo)(SYSTEM_INFO *);
|
||||
BOOL (WINAPI *DuplicateTokenEx)(HANDLE, DWORD, SECURITY_ATTRIBUTES *, SECURITY_IMPERSONATION_LEVEL, TOKEN_TYPE, HANDLE *);
|
||||
BOOL (WINAPI *ConvertStringSidToSidA)(LPCSTR, PSID *);
|
||||
BOOL (WINAPI *SetTokenInformation)(HANDLE, TOKEN_INFORMATION_CLASS, void *, DWORD);
|
||||
BOOL (WINAPI *GetTokenInformation)(HANDLE, TOKEN_INFORMATION_CLASS, void *, DWORD, PDWORD);
|
||||
BOOL (WINAPI *CreateProcessAsUserA)(HANDLE, LPCSTR, LPSTR, LPSECURITY_ATTRIBUTES, LPSECURITY_ATTRIBUTES, BOOL, DWORD, void *, LPCSTR, LPSTARTUPINFOA, LPPROCESS_INFORMATION);
|
||||
BOOL (WINAPI *CreateProcessAsUserW)(HANDLE, LPCWSTR, LPWSTR, LPSECURITY_ATTRIBUTES, LPSECURITY_ATTRIBUTES, BOOL, DWORD, void *, LPCWSTR, LPSTARTUPINFOW, LPPROCESS_INFORMATION);
|
||||
BOOL (WINAPI *LookupAccountSidA)(LPCSTR,PSID,LPSTR,LPDWORD,LPSTR,LPDWORD,PSID_NAME_USE);
|
||||
BOOL (WINAPI *LookupAccountNameA)(LPCSTR,LPCSTR,PSID,LPDWORD,LPSTR,LPDWORD,PSID_NAME_USE);
|
||||
BOOL (WINAPI *GetUserNameExA)(EXTENDED_NAME_FORMAT, LPSTR, PULONG);
|
||||
BOOL (WINAPI *GetUserNameExW)(EXTENDED_NAME_FORMAT, LPWSTR, PULONG);
|
||||
BOOL (WINAPI *SwitchDesktop)(HDESK);
|
||||
HDESK (WINAPI *OpenDesktopA)(LPTSTR, DWORD, BOOL, ACCESS_MASK);
|
||||
BOOL (WINAPI *CloseDesktop)(HDESK);
|
||||
BOOL (WINAPI *SetProcessShutdownParameters)(DWORD, DWORD);
|
||||
HANDLE (WINAPI *RegisterEventSourceW)(LPCWSTR, LPCWSTR);
|
||||
BOOL (WINAPI *ReportEventW)(HANDLE, WORD, WORD, DWORD, PSID, WORD, DWORD, LPCWSTR *, LPVOID);
|
||||
BOOL (WINAPI *DeregisterEventSource)(HANDLE);
|
||||
BOOL (WINAPI *Wow64DisableWow64FsRedirection)(void **);
|
||||
BOOLEAN (WINAPI *Wow64EnableWow64FsRedirection)(BOOLEAN);
|
||||
BOOL (WINAPI *Wow64RevertWow64FsRedirection)(void *);
|
||||
BOOL (WINAPI *GetFileInformationByHandle)(HANDLE, LPBY_HANDLE_FILE_INFORMATION);
|
||||
HANDLE (WINAPI *GetProcessHeap)();
|
||||
BOOL (WINAPI *MiniDumpWriteDump)(HANDLE, DWORD, HANDLE, MINIDUMP_TYPE,
|
||||
PMINIDUMP_EXCEPTION_INFORMATION, PMINIDUMP_USER_STREAM_INFORMATION,
|
||||
PMINIDUMP_CALLBACK_INFORMATION);
|
||||
BOOL (WINAPI *AllocateLocallyUniqueId)(PLUID);
|
||||
NTSTATUS (NTAPI *LsaConnectUntrusted)(PHANDLE);
|
||||
NTSTATUS (NTAPI *LsaLookupAuthenticationPackage)(HANDLE, PLSA_STRING, PULONG);
|
||||
NTSTATUS (NTAPI *LsaLogonUser)(HANDLE, PLSA_STRING, SECURITY_LOGON_TYPE, ULONG,
|
||||
PVOID, ULONG, PTOKEN_GROUPS, PTOKEN_SOURCE, PVOID, PULONG, PLUID, PHANDLE,
|
||||
PQUOTA_LIMITS, PNTSTATUS);
|
||||
NTSTATUS (NTAPI *LsaDeregisterLogonProcess)(HANDLE);
|
||||
NTSTATUS (NTAPI *LsaFreeReturnBuffer)(PVOID);
|
||||
DWORD (WINAPI *WcmQueryProperty)(const GUID *, LPCWSTR, MS_WCM_PROPERTY, PVOID, PDWORD, PBYTE *);
|
||||
DWORD (WINAPI *WcmSetProperty)(const GUID *, LPCWSTR, MS_WCM_PROPERTY, PVOID, DWORD, const BYTE *);
|
||||
void (WINAPI *WcmFreeMemory)(PVOID);
|
||||
DWORD (WINAPI *WcmGetProfileList)(PVOID, MS_WCM_PROFILE_INFO_LIST **ppProfileList);
|
||||
DWORD (WINAPI *SetNamedSecurityInfoW)(LPWSTR, DWORD, SECURITY_INFORMATION, PSID, PSID, PACL, PACL);
|
||||
BOOL (WINAPI *AddAccessAllowedAceEx)(PACL, DWORD, DWORD, DWORD, PSID);
|
||||
HRESULT (WINAPI *DwmIsCompositionEnabled)(BOOL *);
|
||||
BOOL (WINAPI *GetComputerNameExW)(COMPUTER_NAME_FORMAT, LPWSTR, LPDWORD);
|
||||
LONG (WINAPI *RegLoadKeyW)(HKEY, LPCWSTR, LPCWSTR);
|
||||
LONG (WINAPI *RegUnLoadKeyW)(HKEY, LPCWSTR);
|
||||
} NT_API;
|
||||
|
||||
typedef struct MS_EVENTLOG
|
||||
{
|
||||
HANDLE hEventLog;
|
||||
} MS_EVENTLOG;
|
||||
|
||||
extern NETWORK_WIN32_FUNCTIONS *w32net;
|
||||
|
||||
typedef struct MS_USERMODE_SVC_PULSE_THREAD_PARAM
|
||||
{
|
||||
void *hWnd;
|
||||
@ -613,7 +454,6 @@ bool MsRegDeleteValueEx2(UINT root, char *keyname, char *valuename, bool force32
|
||||
bool MsRegLoadHive(UINT root, wchar_t *keyname, wchar_t *filename);
|
||||
bool MsRegUnloadHive(UINT root, wchar_t *keyname);
|
||||
|
||||
bool MsIsNt();
|
||||
bool MsIsAdmin();
|
||||
bool MsIsWine();
|
||||
bool MsEnablePrivilege(char *name, bool enable);
|
||||
@ -740,10 +580,7 @@ bool MsIsUserMode();
|
||||
void MsTestOnly();
|
||||
void MsPlaySound(char *name);
|
||||
void MsSetThreadSingleCpu();
|
||||
void MsWin9xTest();
|
||||
bool MsCheckVLanDeviceIdFromRootEnum(char *name);
|
||||
bool MsInstallVLan9x(char *instance_name, MS_DRIVER_VER *ver);
|
||||
void MsUpdateCompatibleIDs(char *instance_name);
|
||||
LIST *MsGetProcessList();
|
||||
LIST *MsGetProcessList9x();
|
||||
LIST *MsGetProcessListNt();
|
||||
@ -825,9 +662,6 @@ LIST *EnumAllChildWindowEx(HWND hWnd, bool no_recursion, bool include_ipcontrol,
|
||||
LIST *EnumAllTopWindow();
|
||||
|
||||
bool MsExecDriverInstaller(char *arg);
|
||||
bool MsIsVista();
|
||||
bool MsIsWin2000OrGreater();
|
||||
bool MsIsWinXPOrGreater();
|
||||
void MsRegistWindowsFirewallEx(char *title, char *exe);
|
||||
void MsRegistWindowsFirewallEx2(char *title, char *exe, char *dir);
|
||||
bool MsIs64BitWindows();
|
||||
@ -937,8 +771,6 @@ UINT64 MsGetSuspendModeBeginTick();
|
||||
|
||||
LONG CALLBACK MsExceptionHandler(struct _EXCEPTION_POINTERS *ExceptionInfo);
|
||||
HKEY MsGetRootKeyFromInt(UINT root);
|
||||
NT_API *MsLoadNtApiFunctions();
|
||||
void MsFreeNtApiFunctions(NT_API *nt);
|
||||
void MsDestroyDevInfo(HDEVINFO info);
|
||||
HDEVINFO MsGetDevInfoFromDeviceId(SP_DEVINFO_DATA *dev_info_data, char *device_id);
|
||||
bool MsStartDevice(HDEVINFO info, SP_DEVINFO_DATA *dev_info_data);
|
||||
|
@ -14,8 +14,8 @@
|
||||
|
||||
#ifdef WIN32
|
||||
// Include windows.h for Socket API
|
||||
#define _WIN32_WINNT 0x0502
|
||||
#define WINVER 0x0502
|
||||
#define _WIN32_WINNT 0x0600
|
||||
#define WINVER 0x0600
|
||||
#include <Ws2tcpip.h>
|
||||
#include <Wspiapi.h>
|
||||
#include <winsock2.h>
|
||||
@ -48,15 +48,14 @@
|
||||
#include <sys/event.h>
|
||||
#endif // UNIX_MACOS
|
||||
|
||||
#ifdef OS_WIN32
|
||||
NETWORK_WIN32_FUNCTIONS *w32net;
|
||||
#ifdef OS_WIN32
|
||||
struct ROUTE_CHANGE_DATA
|
||||
{
|
||||
OVERLAPPED Overlapped;
|
||||
HANDLE Handle;
|
||||
UINT NumCalled;
|
||||
};
|
||||
#endif // OS_WIN32
|
||||
#endif
|
||||
|
||||
// Whether the blocking occurs in SSL
|
||||
#if defined(UNIX_BSD) || defined(UNIX_MACOS)
|
||||
@ -6031,7 +6030,7 @@ void IcmpApiFreeResult(ICMP_RESULT *ret)
|
||||
// Send an ICMP Echo using ICMP API
|
||||
ICMP_RESULT *IcmpApiEchoSend(IP *dest_ip, UCHAR ttl, UCHAR *data, UINT size, UINT timeout)
|
||||
{
|
||||
#ifdef OS_WIN32
|
||||
#ifdef OS_WIN32
|
||||
// Validate arguments
|
||||
if (dest_ip == NULL || IsIP4(dest_ip) == false || (size != 0 && data == NULL))
|
||||
{
|
||||
@ -6042,7 +6041,7 @@ ICMP_RESULT *IcmpApiEchoSend(IP *dest_ip, UCHAR ttl, UCHAR *data, UINT size, UIN
|
||||
ttl = 127;
|
||||
}
|
||||
|
||||
if (IsIcmpApiSupported())
|
||||
if (true)
|
||||
{
|
||||
HANDLE h;
|
||||
DWORD dw;
|
||||
@ -6052,7 +6051,7 @@ ICMP_RESULT *IcmpApiEchoSend(IP *dest_ip, UCHAR ttl, UCHAR *data, UINT size, UIN
|
||||
ICMP_RESULT *ret = NULL;
|
||||
IP_OPTION_INFORMATION opt;
|
||||
|
||||
h = w32net->IcmpCreateFile();
|
||||
h = IcmpCreateFile();
|
||||
|
||||
if (h == INVALID_HANDLE_VALUE)
|
||||
{
|
||||
@ -6067,7 +6066,7 @@ ICMP_RESULT *IcmpApiEchoSend(IP *dest_ip, UCHAR ttl, UCHAR *data, UINT size, UIN
|
||||
reply_size = sizeof(*reply) + size + 64;
|
||||
reply = ZeroMalloc(reply_size);
|
||||
|
||||
dw = w32net->IcmpSendEcho(h, dest_addr, data, size, &opt, reply, reply_size, timeout);
|
||||
dw = IcmpSendEcho(h, dest_addr, data, size, &opt, reply, reply_size, timeout);
|
||||
|
||||
ret = ZeroMalloc(sizeof(ICMP_RESULT));
|
||||
|
||||
@ -6130,7 +6129,7 @@ ICMP_RESULT *IcmpApiEchoSend(IP *dest_ip, UCHAR ttl, UCHAR *data, UINT size, UIN
|
||||
|
||||
Free(reply);
|
||||
|
||||
w32net->IcmpCloseHandle(h);
|
||||
IcmpCloseHandle(h);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@ -6144,21 +6143,6 @@ ICMP_RESULT *IcmpApiEchoSend(IP *dest_ip, UCHAR ttl, UCHAR *data, UINT size, UIN
|
||||
#endif // OS_WIN32
|
||||
}
|
||||
|
||||
// Detect whether the ICMP API is supported
|
||||
bool IsIcmpApiSupported()
|
||||
{
|
||||
#ifdef OS_WIN32
|
||||
if (w32net->IcmpCloseHandle != NULL &&
|
||||
w32net->IcmpCreateFile != NULL &&
|
||||
w32net->IcmpSendEcho != NULL)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
#endif // OS_WIN32
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// Initialize the routing table change detector
|
||||
ROUTE_CHANGE *NewRouteChange()
|
||||
{
|
||||
@ -6194,24 +6178,13 @@ ROUTE_CHANGE *Win32NewRouteChange()
|
||||
ROUTE_CHANGE *r;
|
||||
BOOL ret;
|
||||
|
||||
if (MsIsNt() == false)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (w32net->CancelIPChangeNotify == NULL ||
|
||||
w32net->NotifyRouteChange == NULL)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
r = ZeroMalloc(sizeof(ROUTE_CHANGE));
|
||||
|
||||
r->Data = ZeroMalloc(sizeof(ROUTE_CHANGE_DATA));
|
||||
|
||||
r->Data->Overlapped.hEvent = CreateEventA(NULL, false, true, NULL);
|
||||
|
||||
ret = w32net->NotifyRouteChange(&r->Data->Handle, &r->Data->Overlapped);
|
||||
ret = NotifyRouteChange(&r->Data->Handle, &r->Data->Overlapped);
|
||||
if (!(ret == NO_ERROR || ret == WSA_IO_PENDING || WSAGetLastError() == WSA_IO_PENDING))
|
||||
{
|
||||
Free(r->Data);
|
||||
@ -6231,7 +6204,7 @@ void Win32FreeRouteChange(ROUTE_CHANGE *r)
|
||||
return;
|
||||
}
|
||||
|
||||
w32net->CancelIPChangeNotify(&r->Data->Overlapped);
|
||||
CancelIPChangeNotify(&r->Data->Overlapped);
|
||||
CloseHandle(r->Data->Overlapped.hEvent);
|
||||
|
||||
Free(r->Data);
|
||||
@ -6253,7 +6226,7 @@ bool Win32IsRouteChanged(ROUTE_CHANGE *r)
|
||||
|
||||
if (WaitForSingleObject(r->Data->Overlapped.hEvent, 0) == WAIT_OBJECT_0)
|
||||
{
|
||||
w32net->NotifyRouteChange(&r->Data->Handle, &r->Data->Overlapped);
|
||||
NotifyRouteChange(&r->Data->Handle, &r->Data->Overlapped);
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -8758,9 +8731,7 @@ void UnixFreeSocketLibrary()
|
||||
|
||||
#endif // OS_UNIX
|
||||
|
||||
#ifdef OS_WIN32 // Code for Windows
|
||||
|
||||
NETWORK_WIN32_FUNCTIONS *w32net;
|
||||
#ifdef OS_WIN32 // Code for Windows
|
||||
|
||||
// Comparison of IP_ADAPTER_INDEX_MAP
|
||||
int CompareIpAdapterIndexMap(void *p1, void *p2)
|
||||
@ -8817,12 +8788,8 @@ bool Win32RenewAddress(void *a)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (w32net->IpRenewAddress == NULL)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
ret = w32net->IpRenewAddress(a);
|
||||
ret = IpRenewAddress(a);
|
||||
|
||||
if (ret == NO_ERROR)
|
||||
{
|
||||
@ -8844,12 +8811,12 @@ bool Win32ReleaseAddress(void *a)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (w32net->IpReleaseAddress == NULL)
|
||||
if (IpReleaseAddress == NULL)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
ret = w32net->IpReleaseAddress(a);
|
||||
ret = IpReleaseAddress(a);
|
||||
|
||||
if (ret == NO_ERROR)
|
||||
{
|
||||
@ -9004,23 +8971,19 @@ bool Win32GetAdapterFromGuid(void *a, char *guid)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (w32net->GetInterfaceInfo == NULL)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
UniFormat(tmp, sizeof(tmp), L"\\DEVICE\\TCPIP_%S", guid);
|
||||
|
||||
size = sizeof(IP_INTERFACE_INFO);
|
||||
info = ZeroMallocFast(size);
|
||||
|
||||
if (w32net->GetInterfaceInfo(info, &size) == ERROR_INSUFFICIENT_BUFFER)
|
||||
if (GetInterfaceInfo(info, &size) == ERROR_INSUFFICIENT_BUFFER)
|
||||
{
|
||||
Free(info);
|
||||
info = ZeroMallocFast(size);
|
||||
}
|
||||
|
||||
if (w32net->GetInterfaceInfo(info, &size) != NO_ERROR)
|
||||
if (GetInterfaceInfo(info, &size) != NO_ERROR)
|
||||
{
|
||||
Free(info);
|
||||
return false;
|
||||
@ -9078,13 +9041,13 @@ void Win32RenewDhcp9x(UINT if_id)
|
||||
size = sizeof(IP_INTERFACE_INFO);
|
||||
info = ZeroMallocFast(size);
|
||||
|
||||
if (w32net->GetInterfaceInfo(info, &size) == ERROR_INSUFFICIENT_BUFFER)
|
||||
if (GetInterfaceInfo(info, &size) == ERROR_INSUFFICIENT_BUFFER)
|
||||
{
|
||||
Free(info);
|
||||
info = ZeroMallocFast(size);
|
||||
}
|
||||
|
||||
if (w32net->GetInterfaceInfo(info, &size) != NO_ERROR)
|
||||
if (GetInterfaceInfo(info, &size) != NO_ERROR)
|
||||
{
|
||||
Free(info);
|
||||
return;
|
||||
@ -9134,13 +9097,13 @@ void Win32ReleaseDhcp9x(UINT if_id, bool wait)
|
||||
size = sizeof(IP_INTERFACE_INFO);
|
||||
info = ZeroMallocFast(size);
|
||||
|
||||
if (w32net->GetInterfaceInfo(info, &size) == ERROR_INSUFFICIENT_BUFFER)
|
||||
if (GetInterfaceInfo(info, &size) == ERROR_INSUFFICIENT_BUFFER)
|
||||
{
|
||||
Free(info);
|
||||
info = ZeroMallocFast(size);
|
||||
}
|
||||
|
||||
if (w32net->GetInterfaceInfo(info, &size) != NO_ERROR)
|
||||
if (GetInterfaceInfo(info, &size) != NO_ERROR)
|
||||
{
|
||||
Free(info);
|
||||
return;
|
||||
@ -9195,7 +9158,7 @@ RETRY:
|
||||
size_needed = 0;
|
||||
|
||||
// Examine the needed size
|
||||
ret = w32net->GetIfTable(p, &size_needed, 0);
|
||||
ret = GetIfTable(p, &size_needed, 0);
|
||||
if (ret == ERROR_INSUFFICIENT_BUFFER)
|
||||
{
|
||||
// Re-allocate the memory block of the needed size
|
||||
@ -9211,7 +9174,7 @@ FAILED:
|
||||
}
|
||||
|
||||
// Actually get
|
||||
ret = w32net->GetIfTable(p, &size_needed, FALSE);
|
||||
ret = GetIfTable(p, &size_needed, FALSE);
|
||||
if (ret != NO_ERROR)
|
||||
{
|
||||
// Acquisition failure
|
||||
@ -9276,7 +9239,7 @@ RETRY:
|
||||
size_needed = 0;
|
||||
|
||||
// Examine the needed size
|
||||
ret = w32net->GetIfTable(p, &size_needed, 0);
|
||||
ret = GetIfTable(p, &size_needed, 0);
|
||||
if (ret == ERROR_INSUFFICIENT_BUFFER)
|
||||
{
|
||||
// Re-allocate the memory block of the needed size
|
||||
@ -9293,7 +9256,7 @@ FAILED:
|
||||
}
|
||||
|
||||
// Actually get
|
||||
ret = w32net->GetIfTable(p, &size_needed, FALSE);
|
||||
ret = GetIfTable(p, &size_needed, FALSE);
|
||||
if (ret != NO_ERROR)
|
||||
{
|
||||
// Acquisition failure
|
||||
@ -9358,19 +9321,15 @@ bool Win32GetDnsSuffix(char *domain, UINT size)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (w32net->GetAdaptersAddresses == NULL)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
info_size = 0;
|
||||
info = ZeroMalloc(sizeof(IP_ADAPTER_ADDRESSES_XP));
|
||||
if (w32net->GetAdaptersAddresses(AF_INET, 0, NULL, info, &info_size) == ERROR_BUFFER_OVERFLOW)
|
||||
if (GetAdaptersAddresses(AF_INET, 0, NULL, info, &info_size) == ERROR_BUFFER_OVERFLOW)
|
||||
{
|
||||
Free(info);
|
||||
info = ZeroMalloc(info_size);
|
||||
}
|
||||
if (w32net->GetAdaptersAddresses(AF_INET, 0, NULL, info, &info_size) != NO_ERROR)
|
||||
if (GetAdaptersAddresses(AF_INET, 0, NULL, info, &info_size) != NO_ERROR)
|
||||
{
|
||||
Free(info);
|
||||
return false;
|
||||
@ -9408,18 +9367,15 @@ bool Win32GetDefaultDns(IP *ip, char *domain, UINT size)
|
||||
return false;
|
||||
}
|
||||
Zero(ip, sizeof(IP));
|
||||
if (w32net->GetNetworkParams == NULL)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
info_size = 0;
|
||||
info = ZeroMallocFast(sizeof(FIXED_INFO));
|
||||
if (w32net->GetNetworkParams(info, &info_size) == ERROR_BUFFER_OVERFLOW)
|
||||
if (GetNetworkParams(info, &info_size) == ERROR_BUFFER_OVERFLOW)
|
||||
{
|
||||
Free(info);
|
||||
info = ZeroMallocFast(info_size);
|
||||
}
|
||||
if (w32net->GetNetworkParams(info, &info_size) != NO_ERROR)
|
||||
if (GetNetworkParams(info, &info_size) != NO_ERROR)
|
||||
{
|
||||
Free(info);
|
||||
return false;
|
||||
@ -9464,9 +9420,7 @@ void Win32DeleteRouteEntry(ROUTE_ENTRY *e)
|
||||
p = ZeroMallocFast(sizeof(MIB_IPFORWARDROW));
|
||||
Win32RouteEntryToIpForwardRow(p, e);
|
||||
|
||||
// Delete
|
||||
w32net->DeleteIpForwardEntry(p);
|
||||
|
||||
DeleteIpForwardEntry(p);
|
||||
Free(p);
|
||||
}
|
||||
|
||||
@ -9492,8 +9446,7 @@ bool Win32AddRouteEntry(ROUTE_ENTRY *e, bool *already_exists)
|
||||
p = ZeroMallocFast(sizeof(MIB_IPFORWARDROW));
|
||||
Win32RouteEntryToIpForwardRow(p, e);
|
||||
|
||||
// Adding
|
||||
err = w32net->CreateIpForwardEntry(p);
|
||||
err = CreateIpForwardEntry(p);
|
||||
if (err != 0)
|
||||
{
|
||||
if (err == ERROR_OBJECT_ALREADY_EXISTS)
|
||||
@ -9535,7 +9488,7 @@ RETRY:
|
||||
size_needed = 0;
|
||||
|
||||
// Examine the needed size
|
||||
ret = w32net->GetIpForwardTable(p, &size_needed, 0);
|
||||
ret = GetIpForwardTable(p, &size_needed, 0);
|
||||
if (ret == ERROR_INSUFFICIENT_BUFFER)
|
||||
{
|
||||
// Re-allocate the memory block of the needed size
|
||||
@ -9552,7 +9505,7 @@ FAILED:
|
||||
}
|
||||
|
||||
// Actually get
|
||||
ret = w32net->GetIpForwardTable(p, &size_needed, FALSE);
|
||||
ret = GetIpForwardTable(p, &size_needed, FALSE);
|
||||
if (ret != NO_ERROR)
|
||||
{
|
||||
// Acquisition failure
|
||||
@ -9655,16 +9608,8 @@ void Win32RouteEntryToIpForwardRow(void *ip_forward_row, ROUTE_ENTRY *entry)
|
||||
}
|
||||
// Metric
|
||||
r->dwForwardMetric1 = entry->Metric;
|
||||
|
||||
if (MsIsVista() == false)
|
||||
{
|
||||
r->dwForwardMetric2 = r->dwForwardMetric3 = r->dwForwardMetric4 = r->dwForwardMetric5 = INFINITE;
|
||||
}
|
||||
else
|
||||
{
|
||||
r->dwForwardMetric2 = r->dwForwardMetric3 = r->dwForwardMetric4 = r->dwForwardMetric5 = 0;
|
||||
r->dwForwardAge = 163240;
|
||||
}
|
||||
r->dwForwardMetric2 = r->dwForwardMetric3 = r->dwForwardMetric4 = r->dwForwardMetric5 = 0;
|
||||
r->dwForwardAge = 163240;
|
||||
|
||||
// Interface ID
|
||||
r->dwForwardIfIndex = entry->InterfaceID;
|
||||
@ -9725,144 +9670,11 @@ void Win32InitSocketLibrary()
|
||||
WSADATA data;
|
||||
Zero(&data, sizeof(data));
|
||||
WSAStartup(MAKEWORD(2, 2), &data);
|
||||
|
||||
// Load the DLL functions
|
||||
w32net = ZeroMalloc(sizeof(NETWORK_WIN32_FUNCTIONS));
|
||||
w32net->hIpHlpApi32 = LoadLibrary("iphlpapi.dll");
|
||||
w32net->hIcmp = LoadLibrary("icmp.dll");
|
||||
|
||||
if (w32net->hIpHlpApi32 != NULL)
|
||||
{
|
||||
w32net->CreateIpForwardEntry =
|
||||
(DWORD (__stdcall *)(PMIB_IPFORWARDROW))
|
||||
GetProcAddress(w32net->hIpHlpApi32, "CreateIpForwardEntry");
|
||||
|
||||
w32net->DeleteIpForwardEntry =
|
||||
(DWORD (__stdcall *)(PMIB_IPFORWARDROW))
|
||||
GetProcAddress(w32net->hIpHlpApi32, "DeleteIpForwardEntry");
|
||||
|
||||
w32net->GetIfTable =
|
||||
(DWORD (__stdcall *)(PMIB_IFTABLE, PULONG, BOOL))
|
||||
GetProcAddress(w32net->hIpHlpApi32, "GetIfTable");
|
||||
|
||||
w32net->GetIfTable2 =
|
||||
(DWORD (__stdcall *)(void **))
|
||||
GetProcAddress(w32net->hIpHlpApi32, "GetIfTable2");
|
||||
|
||||
w32net->FreeMibTable =
|
||||
(void (__stdcall *)(PVOID))
|
||||
GetProcAddress(w32net->hIpHlpApi32, "FreeMibTable");
|
||||
|
||||
w32net->GetIpForwardTable =
|
||||
(DWORD (__stdcall *)(PMIB_IPFORWARDTABLE, PULONG, BOOL))
|
||||
GetProcAddress(w32net->hIpHlpApi32, "GetIpForwardTable");
|
||||
|
||||
w32net->GetNetworkParams =
|
||||
(DWORD (__stdcall *)(PFIXED_INFO,PULONG))
|
||||
GetProcAddress(w32net->hIpHlpApi32, "GetNetworkParams");
|
||||
|
||||
w32net->GetAdaptersAddresses =
|
||||
(ULONG (__stdcall *)(ULONG,ULONG,PVOID,PIP_ADAPTER_ADDRESSES,PULONG))
|
||||
GetProcAddress(w32net->hIpHlpApi32, "GetAdaptersAddresses");
|
||||
|
||||
w32net->IpRenewAddress =
|
||||
(DWORD (__stdcall *)(PIP_ADAPTER_INDEX_MAP))
|
||||
GetProcAddress(w32net->hIpHlpApi32, "IpRenewAddress");
|
||||
|
||||
w32net->IpReleaseAddress =
|
||||
(DWORD (__stdcall *)(PIP_ADAPTER_INDEX_MAP))
|
||||
GetProcAddress(w32net->hIpHlpApi32, "IpReleaseAddress");
|
||||
|
||||
w32net->GetInterfaceInfo =
|
||||
(DWORD (__stdcall *)(PIP_INTERFACE_INFO, PULONG))
|
||||
GetProcAddress(w32net->hIpHlpApi32, "GetInterfaceInfo");
|
||||
|
||||
w32net->GetAdaptersInfo =
|
||||
(DWORD (__stdcall *)(PIP_ADAPTER_INFO, PULONG))
|
||||
GetProcAddress(w32net->hIpHlpApi32, "GetAdaptersInfo");
|
||||
|
||||
w32net->GetExtendedTcpTable =
|
||||
(DWORD (__stdcall *)(PVOID,PDWORD,BOOL,ULONG,_TCP_TABLE_CLASS,ULONG))
|
||||
GetProcAddress(w32net->hIpHlpApi32, "GetExtendedTcpTable");
|
||||
|
||||
w32net->AllocateAndGetTcpExTableFromStack =
|
||||
(DWORD (__stdcall *)(PVOID *,BOOL,HANDLE,DWORD,DWORD))
|
||||
GetProcAddress(w32net->hIpHlpApi32, "AllocateAndGetTcpExTableFromStack");
|
||||
|
||||
w32net->GetTcpTable =
|
||||
(DWORD (__stdcall *)(PMIB_TCPTABLE,PDWORD,BOOL))
|
||||
GetProcAddress(w32net->hIpHlpApi32, "GetTcpTable");
|
||||
|
||||
w32net->NotifyRouteChange =
|
||||
(DWORD (__stdcall *)(PHANDLE,LPOVERLAPPED))
|
||||
GetProcAddress(w32net->hIpHlpApi32, "NotifyRouteChange");
|
||||
|
||||
w32net->CancelIPChangeNotify =
|
||||
(BOOL (__stdcall *)(LPOVERLAPPED))
|
||||
GetProcAddress(w32net->hIpHlpApi32, "CancelIPChangeNotify");
|
||||
|
||||
w32net->NhpAllocateAndGetInterfaceInfoFromStack =
|
||||
(DWORD (__stdcall *)(IP_INTERFACE_NAME_INFO **,PDWORD,BOOL,HANDLE,DWORD))
|
||||
GetProcAddress(w32net->hIpHlpApi32, "NhpAllocateAndGetInterfaceInfoFromStack");
|
||||
|
||||
w32net->IcmpCreateFile =
|
||||
(HANDLE (__stdcall *)())
|
||||
GetProcAddress(w32net->hIpHlpApi32, "IcmpCreateFile");
|
||||
|
||||
w32net->IcmpCloseHandle =
|
||||
(BOOL (__stdcall *)(HANDLE))
|
||||
GetProcAddress(w32net->hIpHlpApi32, "IcmpCloseHandle");
|
||||
|
||||
w32net->IcmpSendEcho =
|
||||
(DWORD (__stdcall *)(HANDLE,IPAddr,LPVOID,WORD,PIP_OPTION_INFORMATION,LPVOID,DWORD,DWORD))
|
||||
GetProcAddress(w32net->hIpHlpApi32, "IcmpSendEcho");
|
||||
}
|
||||
|
||||
if (w32net->hIcmp != NULL)
|
||||
{
|
||||
if (w32net->IcmpCreateFile == NULL || w32net->IcmpCloseHandle == NULL || w32net->IcmpSendEcho == NULL)
|
||||
{
|
||||
w32net->IcmpCreateFile =
|
||||
(HANDLE (__stdcall *)())
|
||||
GetProcAddress(w32net->hIcmp, "IcmpCreateFile");
|
||||
|
||||
w32net->IcmpCloseHandle =
|
||||
(BOOL (__stdcall *)(HANDLE))
|
||||
GetProcAddress(w32net->hIcmp, "IcmpCloseHandle");
|
||||
|
||||
w32net->IcmpSendEcho =
|
||||
(DWORD (__stdcall *)(HANDLE,IPAddr,LPVOID,WORD,PIP_OPTION_INFORMATION,LPVOID,DWORD,DWORD))
|
||||
GetProcAddress(w32net->hIcmp, "IcmpSendEcho");
|
||||
}
|
||||
}
|
||||
|
||||
if (w32net->IcmpCreateFile == NULL || w32net->IcmpCloseHandle == NULL || w32net->IcmpSendEcho == NULL)
|
||||
{
|
||||
w32net->IcmpCreateFile = NULL;
|
||||
w32net->IcmpCloseHandle = NULL;
|
||||
w32net->IcmpSendEcho = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
// Release of the socket library
|
||||
void Win32FreeSocketLibrary()
|
||||
{
|
||||
if (w32net != NULL)
|
||||
{
|
||||
if (w32net->hIpHlpApi32 != NULL)
|
||||
{
|
||||
FreeLibrary(w32net->hIpHlpApi32);
|
||||
}
|
||||
|
||||
if (w32net->hIcmp != NULL)
|
||||
{
|
||||
FreeLibrary(w32net->hIcmp);
|
||||
}
|
||||
|
||||
Free(w32net);
|
||||
w32net = NULL;
|
||||
}
|
||||
|
||||
WSACleanup();
|
||||
}
|
||||
|
||||
@ -10694,16 +10506,6 @@ ROUTE_ENTRY *GetBestRouteEntryFromRouteTableEx(ROUTE_TABLE *table, IP *ip, UINT
|
||||
dest = IPToUINT(&tmp->DestIP);
|
||||
gateway = IPToUINT(&tmp->GatewayIP);
|
||||
mask = IPToUINT(&tmp->DestMask);
|
||||
if ((dest & mask) == (gateway & mask))
|
||||
{
|
||||
#ifdef OS_WIN32
|
||||
if (MsIsVista() == false)
|
||||
{
|
||||
// Adjust for Windows
|
||||
ret->PPPConnection = true;
|
||||
}
|
||||
#endif // OS_WIN32
|
||||
}
|
||||
}
|
||||
|
||||
return ret;
|
||||
@ -13256,14 +13058,6 @@ SOCK *ListenEx62(UINT port, bool local_only, bool enable_ca)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#ifdef OS_WIN32
|
||||
if (MsIsVista() == false)
|
||||
{
|
||||
// Disable the Conditional Accept due to a bug in Windows
|
||||
enable_ca = false;
|
||||
}
|
||||
#endif // OS_WIN32
|
||||
|
||||
// Initialization
|
||||
Zero(&addr, sizeof(addr));
|
||||
Zero(&in, sizeof(in));
|
||||
@ -13302,17 +13096,13 @@ SOCK *ListenEx62(UINT port, bool local_only, bool enable_ca)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#ifdef OS_WIN32
|
||||
#ifdef OS_WIN32
|
||||
if (enable_ca)
|
||||
{
|
||||
if (MsIsWinXPOrGreater())
|
||||
{
|
||||
setsockopt(s, SOL_SOCKET, SO_CONDITIONAL_ACCEPT, (char *)&true_flag, sizeof(bool));
|
||||
|
||||
backlog = 1;
|
||||
}
|
||||
setsockopt(s, SOL_SOCKET, SO_CONDITIONAL_ACCEPT, (char *)&true_flag, sizeof(bool));
|
||||
backlog = 1;
|
||||
}
|
||||
#endif // OS_WIN32
|
||||
#endif
|
||||
|
||||
if (listen(s, backlog))
|
||||
{
|
||||
@ -13361,14 +13151,6 @@ SOCK *ListenEx2(UINT port, bool local_only, bool enable_ca, IP *listen_ip)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#ifdef OS_WIN32
|
||||
if (MsIsVista() == false)
|
||||
{
|
||||
// Disable the Conditional Accept due to a bug in Windows
|
||||
enable_ca = false;
|
||||
}
|
||||
#endif // OS_WIN32
|
||||
|
||||
// Initialization
|
||||
Zero(&addr, sizeof(addr));
|
||||
Zero(&in, sizeof(in));
|
||||
@ -13416,12 +13198,8 @@ SOCK *ListenEx2(UINT port, bool local_only, bool enable_ca, IP *listen_ip)
|
||||
#ifdef OS_WIN32
|
||||
if (enable_ca)
|
||||
{
|
||||
if (MsIsWinXPOrGreater())
|
||||
{
|
||||
setsockopt(s, SOL_SOCKET, SO_CONDITIONAL_ACCEPT, (char *)&true_flag, sizeof(bool));
|
||||
|
||||
backlog = 1;
|
||||
}
|
||||
setsockopt(s, SOL_SOCKET, SO_CONDITIONAL_ACCEPT, (char *)&true_flag, sizeof(bool));
|
||||
backlog = 1;
|
||||
}
|
||||
#endif // OS_WIN32
|
||||
|
||||
@ -13853,7 +13631,6 @@ int connect_timeout(SOCKET s, struct sockaddr *addr, int size, int timeout, bool
|
||||
UINT zero = 0;
|
||||
UINT tmp = 0;
|
||||
DWORD ret_size = 0;
|
||||
bool is_nt = false;
|
||||
// Validate arguments
|
||||
if (s == INVALID_SOCKET || addr == NULL)
|
||||
{
|
||||
@ -13864,8 +13641,6 @@ int connect_timeout(SOCKET s, struct sockaddr *addr, int size, int timeout, bool
|
||||
timeout = TIMEOUT_TCP_PORT_CHECK;
|
||||
}
|
||||
|
||||
is_nt = OS_IS_WINDOWS_NT(GetOsInfo()->OsType);
|
||||
|
||||
// Create an event
|
||||
hEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
|
||||
|
||||
@ -13890,7 +13665,7 @@ int connect_timeout(SOCKET s, struct sockaddr *addr, int size, int timeout, bool
|
||||
int err = WSAGetLastError();
|
||||
//Debug("err=%u\n", err);
|
||||
//Debug("cancel_flag=%u\n", *cancel_flag);
|
||||
if (timeouted && ((err == WSAEALREADY) || (err == WSAEWOULDBLOCK && !is_nt)))
|
||||
if (timeouted && err == WSAEALREADY)
|
||||
{
|
||||
// Time-out
|
||||
ok = false;
|
||||
@ -13902,12 +13677,12 @@ int connect_timeout(SOCKET s, struct sockaddr *addr, int size, int timeout, bool
|
||||
ok = false;
|
||||
break;
|
||||
}
|
||||
if (err == WSAEISCONN || (err == WSAEINVAL && is_nt))
|
||||
if (err == WSAEISCONN || err == WSAEINVAL)
|
||||
{
|
||||
ok = true;
|
||||
break;
|
||||
}
|
||||
if (((start_time + (UINT64)timeout) <= Tick64()) || (err != WSAEWOULDBLOCK && err != WSAEALREADY && (is_nt || err != WSAEINVAL)))
|
||||
if (((start_time + (UINT64)timeout) <= Tick64()) || (err != WSAEWOULDBLOCK && err != WSAEALREADY))
|
||||
{
|
||||
// Failure (timeout)
|
||||
break;
|
||||
|
@ -976,7 +976,7 @@ void RUDPAddIpToValidateList(RUDP_STACK *r, IP *ip);
|
||||
bool GetBestLocalIpForTarget(IP *local_ip, IP *target_ip);
|
||||
SOCK *NewUDP4ForSpecificIp(IP *target_ip, UINT port);
|
||||
|
||||
#ifdef OS_WIN32
|
||||
#ifdef OS_WIN32
|
||||
|
||||
// Function prototype for Win32
|
||||
void Win32InitSocketLibrary();
|
||||
@ -1004,7 +1004,6 @@ void Win32CleanupSockEvent(SOCK_EVENT *event);
|
||||
bool Win32WaitSockEvent(SOCK_EVENT *event, UINT timeout);
|
||||
bool Win32GetDefaultDns(IP *ip, char *domain, UINT size);
|
||||
bool Win32GetDnsSuffix(char *domain, UINT size);
|
||||
void Win32RenewDhcp9x(UINT if_id);
|
||||
void Win32ReleaseDhcp9x(UINT if_id, bool wait);
|
||||
void Win32FlushDnsCache();
|
||||
int CompareIpAdapterIndexMap(void *p1, void *p2);
|
||||
@ -1403,7 +1402,6 @@ void InjectNewReverseSocketToAccept(SOCK *listen_sock, SOCK *s, IP *client_ip, U
|
||||
bool NewTcpPair(SOCK **s1, SOCK **s2);
|
||||
SOCK *ListenAnyPortEx2(bool local_only, bool disable_ca);
|
||||
|
||||
bool IsIcmpApiSupported();
|
||||
ICMP_RESULT *IcmpApiEchoSend(IP *dest_ip, UCHAR ttl, UCHAR *data, UINT size, UINT timeout);
|
||||
void IcmpApiFreeResult(ICMP_RESULT *ret);
|
||||
|
||||
|
@ -630,22 +630,6 @@ char *GetTableStr(char *name)
|
||||
return "";
|
||||
}
|
||||
|
||||
#ifdef OS_WIN32
|
||||
if (StrCmpi(name, "DEFAULT_FONT") == 0)
|
||||
{
|
||||
if (_II("LANG") == 2)
|
||||
{
|
||||
UINT os_type = GetOsType();
|
||||
if (OS_IS_WINDOWS_9X(os_type) ||
|
||||
GET_KETA(os_type, 100) <= 4)
|
||||
{
|
||||
// Use the SimSun font in Windows 9x, Windows NT 4.0, Windows 2000, Windows XP, and Windows Server 2003
|
||||
return "SimSun";
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif // OS_WIN32
|
||||
|
||||
// Search
|
||||
t = FindTable(name);
|
||||
if (t == NULL)
|
||||
|
@ -9,8 +9,8 @@
|
||||
|
||||
#ifdef WIN32
|
||||
|
||||
#define _WIN32_WINNT 0x0502
|
||||
#define WINVER 0x0502
|
||||
#define _WIN32_WINNT 0x0600
|
||||
#define WINVER 0x0600
|
||||
#include <winsock2.h>
|
||||
#include <windows.h>
|
||||
#include <Dbghelp.h>
|
||||
@ -501,7 +501,7 @@ DIRLIST *Win32EnumDirExW(wchar_t *dirname, COMPARE *compare)
|
||||
CombinePathW(fullpath, sizeof(fullpath), dirname2, f->FileNameW);
|
||||
|
||||
// Attempt to get the file information
|
||||
if (MsIsNt())
|
||||
if (true)
|
||||
{
|
||||
HANDLE h = CreateFileW(fullpath, 0,
|
||||
FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE,
|
||||
@ -913,7 +913,7 @@ void Win32GetOsInfo(OS_INFO *info)
|
||||
|
||||
info->OsType = Win32GetOsType();
|
||||
info->OsServicePack = os.wServicePackMajor;
|
||||
if (OS_IS_WINDOWS_NT(info->OsType))
|
||||
if (true)
|
||||
{
|
||||
char *s;
|
||||
char *keyname = "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion";
|
||||
@ -951,19 +951,6 @@ void Win32GetOsInfo(OS_INFO *info)
|
||||
}
|
||||
info->KernelVersion = CopyStr(tmp);
|
||||
}
|
||||
else
|
||||
{
|
||||
OSVERSIONINFO os;
|
||||
Zero(&os, sizeof(os));
|
||||
os.dwOSVersionInfoSize = sizeof(os);
|
||||
GetVersionEx(&os);
|
||||
Format(tmp, sizeof(tmp), "Build %u %s", LOWORD(os.dwBuildNumber), os.szCSDVersion);
|
||||
Trim(tmp);
|
||||
info->OsVersion = CopyStr(tmp);
|
||||
info->OsSystemName = CopyStr("Windows");
|
||||
info->KernelName = CopyStr("Windows 9x Kernel");
|
||||
info->KernelVersion = CopyStr(tmp);
|
||||
}
|
||||
|
||||
info->OsProductName = CopyStr(OsTypeToStr(info->OsType));
|
||||
info->OsVendorName = CopyStr("Microsoft Corporation");
|
||||
|
Reference in New Issue
Block a user