182 lines
4.5 KiB
C++
182 lines
4.5 KiB
C++
#pragma once
|
|
|
|
#if IL2CPP_TARGET_WINRT || IL2CPP_TARGET_XBOXONE
|
|
|
|
#include "os/Win32/WindowsHeaders.h"
|
|
#include <wrl.h>
|
|
|
|
#if WINDOWS_SDK_BUILD_VERSION < 16299 // This got readded on Windows 10 Fall Creators Update
|
|
#define MAX_COMPUTERNAME_LENGTH 31
|
|
#define GetComputerName GetComputerNameW
|
|
#endif
|
|
|
|
namespace il2cpp
|
|
{
|
|
namespace winrt
|
|
{
|
|
inline DWORD WIN32_FROM_HRESULT(HRESULT hr)
|
|
{
|
|
if ((hr & 0xFFFF0000) == MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, 0))
|
|
return HRESULT_CODE(hr);
|
|
if (hr == S_OK)
|
|
return HRESULT_CODE(hr);
|
|
return ERROR_SUCCESS;
|
|
}
|
|
|
|
inline static BOOL CopyHStringToBuffer(Microsoft::WRL::Wrappers::HString& source, LPWSTR target, LPDWORD targetSize)
|
|
{
|
|
unsigned int sourceLength;
|
|
auto sourceBuffer = source.GetRawBuffer(&sourceLength);
|
|
|
|
if (sourceLength + 1 > *targetSize)
|
|
{
|
|
SetLastError(ERROR_BUFFER_OVERFLOW);
|
|
*targetSize = sourceLength + 1;
|
|
return FALSE;
|
|
}
|
|
|
|
*targetSize = sourceLength;
|
|
|
|
if (target != nullptr)
|
|
{
|
|
memcpy(target, sourceBuffer, sourceLength * sizeof(wchar_t));
|
|
target[sourceLength] = L'\0';
|
|
return TRUE;
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
}
|
|
}
|
|
|
|
#if WINDOWS_SDK_BUILD_VERSION < 16299 // These APIs got readded on Windows 10 Fall Creators Update
|
|
|
|
extern "C"
|
|
{
|
|
inline BOOL WINAPI CopyFileW(LPCWSTR lpExistingFileName, LPCWSTR lpNewFileName, BOOL bFailIfExists)
|
|
{
|
|
COPYFILE2_EXTENDED_PARAMETERS params;
|
|
|
|
params.dwSize = sizeof(params);
|
|
params.dwCopyFlags = bFailIfExists ? COPY_FILE_FAIL_IF_EXISTS : 0;
|
|
params.pfCancel = FALSE;
|
|
params.pProgressRoutine = nullptr;
|
|
params.pvCallbackContext = nullptr;
|
|
|
|
auto hr = CopyFile2(lpExistingFileName, lpNewFileName, ¶ms);
|
|
if (FAILED(hr))
|
|
{
|
|
SetLastError(il2cpp::winrt::WIN32_FROM_HRESULT(hr));
|
|
return FALSE;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
inline UINT WINAPI GetACP()
|
|
{
|
|
return CP_ACP;
|
|
}
|
|
|
|
BOOL WINAPI GetComputerNameW(LPWSTR lpBuffer, LPDWORD nSize);
|
|
} // extern "C"
|
|
|
|
#endif
|
|
|
|
#if WINDOWS_SDK_BUILD_VERSION < 15063
|
|
|
|
extern "C"
|
|
{
|
|
typedef struct
|
|
{
|
|
char String[4 * 4];
|
|
} IP_ADDRESS_STRING, *PIP_ADDRESS_STRING, IP_MASK_STRING, *PIP_MASK_STRING;
|
|
|
|
typedef struct _IP_ADDR_STRING
|
|
{
|
|
struct _IP_ADDR_STRING* Next;
|
|
IP_ADDRESS_STRING IpAddress;
|
|
IP_MASK_STRING IpMask;
|
|
DWORD Context;
|
|
} IP_ADDR_STRING, *PIP_ADDR_STRING;
|
|
|
|
#define MAX_HOSTNAME_LEN 128
|
|
#define MAX_DOMAIN_NAME_LEN 128
|
|
#define MAX_SCOPE_ID_LEN 256
|
|
|
|
typedef struct
|
|
{
|
|
char HostName[MAX_HOSTNAME_LEN + 4];
|
|
char DomainName[MAX_DOMAIN_NAME_LEN + 4];
|
|
PIP_ADDR_STRING CurrentDnsServer;
|
|
IP_ADDR_STRING DnsServerList;
|
|
UINT NodeType;
|
|
char ScopeId[MAX_SCOPE_ID_LEN + 4];
|
|
UINT EnableRouting;
|
|
UINT EnableProxy;
|
|
UINT EnableDns;
|
|
} FIXED_INFO, *PFIXED_INFO;
|
|
|
|
DWORD WINAPI GetNetworkParams(PFIXED_INFO pFixedInfo, PULONG pOutBufLen);
|
|
} // extern "C"
|
|
|
|
#endif
|
|
|
|
#if IL2CPP_TARGET_WINRT
|
|
|
|
extern "C"
|
|
{
|
|
#if WINDOWS_SDK_BUILD_VERSION < 15063
|
|
|
|
#define MAX_INTERFACE_NAME_LEN 256
|
|
#define MAXLEN_PHYSADDR 8
|
|
|
|
typedef enum
|
|
{
|
|
IF_OPER_STATUS_NON_OPERATIONAL = 0,
|
|
IF_OPER_STATUS_UNREACHABLE = 1,
|
|
IF_OPER_STATUS_DISCONNECTED = 2,
|
|
IF_OPER_STATUS_CONNECTING = 3,
|
|
IF_OPER_STATUS_CONNECTED = 4,
|
|
IF_OPER_STATUS_OPERATIONAL = 5,
|
|
} INTERNAL_IF_OPER_STATUS;
|
|
|
|
#define MAXLEN_IFDESCR 256
|
|
|
|
typedef struct
|
|
{
|
|
WCHAR wszName[MAX_INTERFACE_NAME_LEN];
|
|
IF_INDEX dwIndex;
|
|
IFTYPE dwType;
|
|
DWORD dwMtu;
|
|
DWORD dwSpeed;
|
|
DWORD dwPhysAddrLen;
|
|
UCHAR bPhysAddr[MAXLEN_PHYSADDR];
|
|
DWORD dwAdminStatus;
|
|
INTERNAL_IF_OPER_STATUS dwOperStatus;
|
|
DWORD dwLastChange;
|
|
DWORD dwInOctets;
|
|
DWORD dwInUcastPkts;
|
|
DWORD dwInNUcastPkts;
|
|
DWORD dwInDiscards;
|
|
DWORD dwInErrors;
|
|
DWORD dwInUnknownProtos;
|
|
DWORD dwOutOctets;
|
|
DWORD dwOutUcastPkts;
|
|
DWORD dwOutNUcastPkts;
|
|
DWORD dwOutDiscards;
|
|
DWORD dwOutErrors;
|
|
DWORD dwOutQLen;
|
|
DWORD dwDescrLen;
|
|
UCHAR bDescr[MAXLEN_IFDESCR];
|
|
} MIB_IFROW, *PMIB_IFROW;
|
|
|
|
#endif
|
|
|
|
DWORD WINAPI GetIfEntry(PMIB_IFROW pIfRow);
|
|
} // extern "C"
|
|
|
|
#endif // IL2CPP_TARGET_WINRT
|
|
|
|
#endif
|