mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 17:03:02 +00:00
[WLANCONF]
- Convert to UNICODE - rewrite CharToHex() svn path=/trunk/; revision=58339
This commit is contained in:
parent
005f4e783c
commit
9ca7108e72
1 changed files with 67 additions and 96 deletions
|
@ -25,8 +25,8 @@
|
||||||
BOOL bScan = FALSE;
|
BOOL bScan = FALSE;
|
||||||
|
|
||||||
BOOL bConnect = FALSE;
|
BOOL bConnect = FALSE;
|
||||||
char *sSsid = NULL;
|
WCHAR *sSsid = NULL;
|
||||||
char *sWepKey = NULL;
|
WCHAR *sWepKey = NULL;
|
||||||
BOOL bAdhoc = FALSE;
|
BOOL bAdhoc = FALSE;
|
||||||
|
|
||||||
BOOL bDisconnect = FALSE;
|
BOOL bDisconnect = FALSE;
|
||||||
|
@ -35,12 +35,12 @@ BOOL bDisconnect = FALSE;
|
||||||
the command prompt. */
|
the command prompt. */
|
||||||
VOID PrintResourceString(INT resID, ...)
|
VOID PrintResourceString(INT resID, ...)
|
||||||
{
|
{
|
||||||
TCHAR szMsgBuf[MAX_BUFFER_SIZE];
|
WCHAR szMsgBuf[MAX_BUFFER_SIZE];
|
||||||
va_list arg_ptr;
|
va_list arg_ptr;
|
||||||
|
|
||||||
va_start(arg_ptr, resID);
|
va_start(arg_ptr, resID);
|
||||||
LoadString(GetModuleHandle(NULL), resID, szMsgBuf, MAX_BUFFER_SIZE);
|
LoadStringW(GetModuleHandle(NULL), resID, szMsgBuf, MAX_BUFFER_SIZE);
|
||||||
_vtprintf(szMsgBuf, arg_ptr);
|
vwprintf(szMsgBuf, arg_ptr);
|
||||||
va_end(arg_ptr);
|
va_end(arg_ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -49,22 +49,22 @@ DWORD DoFormatMessage(DWORD ErrorCode)
|
||||||
LPVOID lpMsgBuf;
|
LPVOID lpMsgBuf;
|
||||||
DWORD RetVal;
|
DWORD RetVal;
|
||||||
|
|
||||||
if ((RetVal = FormatMessage(
|
if ((RetVal = FormatMessageW(
|
||||||
FORMAT_MESSAGE_ALLOCATE_BUFFER |
|
FORMAT_MESSAGE_ALLOCATE_BUFFER |
|
||||||
FORMAT_MESSAGE_FROM_SYSTEM |
|
FORMAT_MESSAGE_FROM_SYSTEM |
|
||||||
FORMAT_MESSAGE_IGNORE_INSERTS,
|
FORMAT_MESSAGE_IGNORE_INSERTS,
|
||||||
NULL,
|
NULL,
|
||||||
ErrorCode,
|
ErrorCode,
|
||||||
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), /* Default language */
|
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), /* Default language */
|
||||||
(LPTSTR) &lpMsgBuf,
|
(LPWSTR) &lpMsgBuf,
|
||||||
0,
|
0,
|
||||||
NULL )))
|
NULL )))
|
||||||
{
|
{
|
||||||
_tprintf(_T("%s"), (LPTSTR)lpMsgBuf);
|
printf("%S", (LPWSTR)lpMsgBuf);
|
||||||
|
|
||||||
LocalFree(lpMsgBuf);
|
LocalFree(lpMsgBuf);
|
||||||
|
|
||||||
/* return number of TCHAR's stored in output buffer
|
/* return number of WCHAR's stored in output buffer
|
||||||
* excluding '\0' - as FormatMessage does*/
|
* excluding '\0' - as FormatMessage does*/
|
||||||
return RetVal;
|
return RetVal;
|
||||||
}
|
}
|
||||||
|
@ -285,47 +285,18 @@ WlanDisconnect(HANDLE hAdapter, PIP_ADAPTER_INDEX_MAP IpInfo)
|
||||||
|
|
||||||
static
|
static
|
||||||
UCHAR
|
UCHAR
|
||||||
CharToHex(CHAR Char)
|
CharToHex(WCHAR Char)
|
||||||
{
|
{
|
||||||
Char = toupper(Char);
|
if ((Char >= L'0') && (Char <= L'9'))
|
||||||
|
return Char - L'0';
|
||||||
|
|
||||||
switch (Char)
|
if ((Char >= L'a') && (Char <= L'f'))
|
||||||
{
|
return Char - L'a' + 10;
|
||||||
case '0':
|
|
||||||
return 0x0;
|
if ((Char >= L'A') && (Char <= L'F'))
|
||||||
case '1':
|
return Char - L'A' + 10;
|
||||||
return 0x1;
|
|
||||||
case '2':
|
return 0;
|
||||||
return 0x2;
|
|
||||||
case '3':
|
|
||||||
return 0x3;
|
|
||||||
case '4':
|
|
||||||
return 0x4;
|
|
||||||
case '5':
|
|
||||||
return 0x5;
|
|
||||||
case '6':
|
|
||||||
return 0x6;
|
|
||||||
case '7':
|
|
||||||
return 0x7;
|
|
||||||
case '8':
|
|
||||||
return 0x8;
|
|
||||||
case '9':
|
|
||||||
return 0x9;
|
|
||||||
case 'A':
|
|
||||||
return 0xA;
|
|
||||||
case 'B':
|
|
||||||
return 0xB;
|
|
||||||
case 'C':
|
|
||||||
return 0xC;
|
|
||||||
case 'D':
|
|
||||||
return 0xD;
|
|
||||||
case 'E':
|
|
||||||
return 0xE;
|
|
||||||
case 'F':
|
|
||||||
return 0xF;
|
|
||||||
default:
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL
|
BOOL
|
||||||
|
@ -338,7 +309,7 @@ WlanPrintCurrentStatus(HANDLE hAdapter)
|
||||||
PNDIS_802_11_SSID SsidInfo;
|
PNDIS_802_11_SSID SsidInfo;
|
||||||
CHAR SsidBuffer[NDIS_802_11_LENGTH_SSID + 1];
|
CHAR SsidBuffer[NDIS_802_11_LENGTH_SSID + 1];
|
||||||
DWORD i;
|
DWORD i;
|
||||||
TCHAR szMsgBuf[128];
|
WCHAR szMsgBuf[128];
|
||||||
|
|
||||||
QueryOidSize = FIELD_OFFSET(NDISUIO_QUERY_OID, Data) + sizeof(NDIS_802_11_SSID);
|
QueryOidSize = FIELD_OFFSET(NDISUIO_QUERY_OID, Data) + sizeof(NDIS_802_11_SSID);
|
||||||
QueryOid = HeapAlloc(GetProcessHeap(), 0, QueryOidSize);
|
QueryOid = HeapAlloc(GetProcessHeap(), 0, QueryOidSize);
|
||||||
|
@ -393,19 +364,19 @@ WlanPrintCurrentStatus(HANDLE hAdapter)
|
||||||
PrintResourceString(IDS_MSG_CURRENT_WIRELESS);
|
PrintResourceString(IDS_MSG_CURRENT_WIRELESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
_tprintf(_T("SSID: %hs\n"), SsidBuffer);
|
printf("SSID: %s\n", SsidBuffer);
|
||||||
|
|
||||||
_tprintf(_T("BSSID: "));
|
printf("BSSID: ");
|
||||||
for (i = 0; i < sizeof(NDIS_802_11_MAC_ADDRESS); i++)
|
for (i = 0; i < sizeof(NDIS_802_11_MAC_ADDRESS); i++)
|
||||||
{
|
{
|
||||||
UINT BssidData = QueryOid->Data[i];
|
UINT BssidData = QueryOid->Data[i];
|
||||||
|
|
||||||
_tprintf(_T("%.2x"), BssidData);
|
printf("%.2x", BssidData);
|
||||||
|
|
||||||
if (i != sizeof(NDIS_802_11_MAC_ADDRESS) - 1)
|
if (i != sizeof(NDIS_802_11_MAC_ADDRESS) - 1)
|
||||||
_tprintf(_T(":"));
|
printf(":");
|
||||||
}
|
}
|
||||||
_tprintf(_T("\n"));
|
printf("\n");
|
||||||
|
|
||||||
HeapFree(GetProcessHeap(), 0, QueryOid);
|
HeapFree(GetProcessHeap(), 0, QueryOid);
|
||||||
QueryOidSize = sizeof(NDISUIO_QUERY_OID);
|
QueryOidSize = sizeof(NDISUIO_QUERY_OID);
|
||||||
|
@ -429,10 +400,10 @@ WlanPrintCurrentStatus(HANDLE hAdapter)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
LoadString(GetModuleHandle(NULL),
|
LoadStringW(GetModuleHandle(NULL),
|
||||||
*(PUINT)QueryOid->Data == Ndis802_11IBSS ? IDS_ADHOC : IDS_INFRASTRUCTURE,
|
*(PUINT)QueryOid->Data == Ndis802_11IBSS ? IDS_ADHOC : IDS_INFRASTRUCTURE,
|
||||||
szMsgBuf,
|
szMsgBuf,
|
||||||
COUNT_OF(szMsgBuf));
|
COUNT_OF(szMsgBuf));
|
||||||
PrintResourceString(IDS_MSG_NETWORK_MODE, szMsgBuf);
|
PrintResourceString(IDS_MSG_NETWORK_MODE, szMsgBuf);
|
||||||
|
|
||||||
QueryOid->Oid = OID_802_11_WEP_STATUS;
|
QueryOid->Oid = OID_802_11_WEP_STATUS;
|
||||||
|
@ -451,13 +422,13 @@ WlanPrintCurrentStatus(HANDLE hAdapter)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
LoadString(GetModuleHandle(NULL),
|
LoadStringW(GetModuleHandle(NULL),
|
||||||
*(PUINT)QueryOid->Data == Ndis802_11WEPEnabled ? IDS_YES : IDS_NO,
|
*(PUINT)QueryOid->Data == Ndis802_11WEPEnabled ? IDS_YES : IDS_NO,
|
||||||
szMsgBuf,
|
szMsgBuf,
|
||||||
COUNT_OF(szMsgBuf));
|
COUNT_OF(szMsgBuf));
|
||||||
PrintResourceString(IDS_MSG_WEP_ENABLED, szMsgBuf);
|
PrintResourceString(IDS_MSG_WEP_ENABLED, szMsgBuf);
|
||||||
|
|
||||||
_tprintf(_T("\n"));
|
printf("\n");
|
||||||
QueryOid->Oid = OID_802_11_RSSI;
|
QueryOid->Oid = OID_802_11_RSSI;
|
||||||
|
|
||||||
bSuccess = DeviceIoControl(hAdapter,
|
bSuccess = DeviceIoControl(hAdapter,
|
||||||
|
@ -471,7 +442,7 @@ WlanPrintCurrentStatus(HANDLE hAdapter)
|
||||||
if (bSuccess)
|
if (bSuccess)
|
||||||
{
|
{
|
||||||
/* This OID is optional */
|
/* This OID is optional */
|
||||||
_tprintf(_T("RSSI: %i dBm\n"), *(PINT)QueryOid->Data);
|
printf("RSSI: %i dBm\n", *(PINT)QueryOid->Data);
|
||||||
}
|
}
|
||||||
|
|
||||||
QueryOid->Oid = OID_802_11_TX_POWER_LEVEL;
|
QueryOid->Oid = OID_802_11_TX_POWER_LEVEL;
|
||||||
|
@ -490,7 +461,7 @@ WlanPrintCurrentStatus(HANDLE hAdapter)
|
||||||
PrintResourceString(IDS_MSG_TRANSMISSION_POWER, *(PUINT)QueryOid->Data);
|
PrintResourceString(IDS_MSG_TRANSMISSION_POWER, *(PUINT)QueryOid->Data);
|
||||||
}
|
}
|
||||||
|
|
||||||
_tprintf(_T("\n"));
|
printf("\n");
|
||||||
|
|
||||||
QueryOid->Oid = OID_802_11_NUMBER_OF_ANTENNAS;
|
QueryOid->Oid = OID_802_11_NUMBER_OF_ANTENNAS;
|
||||||
|
|
||||||
|
@ -548,7 +519,7 @@ WlanPrintCurrentStatus(HANDLE hAdapter)
|
||||||
PrintResourceString(IDS_MSG_RECEIVE_ANTENNA_ANY);
|
PrintResourceString(IDS_MSG_RECEIVE_ANTENNA_ANY);
|
||||||
}
|
}
|
||||||
|
|
||||||
_tprintf(_T("\n"));
|
printf("\n");
|
||||||
|
|
||||||
QueryOid->Oid = OID_802_11_FRAGMENTATION_THRESHOLD;
|
QueryOid->Oid = OID_802_11_FRAGMENTATION_THRESHOLD;
|
||||||
|
|
||||||
|
@ -584,7 +555,7 @@ WlanPrintCurrentStatus(HANDLE hAdapter)
|
||||||
|
|
||||||
HeapFree(GetProcessHeap(), 0, QueryOid);
|
HeapFree(GetProcessHeap(), 0, QueryOid);
|
||||||
|
|
||||||
_tprintf(_T("\n"));
|
printf("\n");
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -646,7 +617,7 @@ WlanConnect(HANDLE hAdapter)
|
||||||
|
|
||||||
SetOidSize = FIELD_OFFSET(NDISUIO_SET_OID, Data) +
|
SetOidSize = FIELD_OFFSET(NDISUIO_SET_OID, Data) +
|
||||||
FIELD_OFFSET(NDIS_802_11_WEP, KeyMaterial) +
|
FIELD_OFFSET(NDIS_802_11_WEP, KeyMaterial) +
|
||||||
(strlen(sWepKey) >> 1);
|
(wcslen(sWepKey) >> 1);
|
||||||
SetOid = HeapAlloc(GetProcessHeap(), 0, SetOidSize);
|
SetOid = HeapAlloc(GetProcessHeap(), 0, SetOidSize);
|
||||||
if (!SetOid)
|
if (!SetOid)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
@ -656,7 +627,7 @@ WlanConnect(HANDLE hAdapter)
|
||||||
WepData = (PNDIS_802_11_WEP)SetOid->Data;
|
WepData = (PNDIS_802_11_WEP)SetOid->Data;
|
||||||
|
|
||||||
WepData->KeyIndex = 0x80000000;
|
WepData->KeyIndex = 0x80000000;
|
||||||
WepData->KeyLength = strlen(sWepKey) >> 1;
|
WepData->KeyLength = wcslen(sWepKey) >> 1;
|
||||||
WepData->Length = FIELD_OFFSET(NDIS_802_11_WEP, KeyMaterial) + WepData->KeyLength;
|
WepData->Length = FIELD_OFFSET(NDIS_802_11_WEP, KeyMaterial) + WepData->KeyLength;
|
||||||
|
|
||||||
/* Assemble the hex key */
|
/* Assemble the hex key */
|
||||||
|
@ -735,8 +706,8 @@ WlanConnect(HANDLE hAdapter)
|
||||||
SetOid->Oid = OID_802_11_SSID;
|
SetOid->Oid = OID_802_11_SSID;
|
||||||
Ssid = (PNDIS_802_11_SSID)SetOid->Data;
|
Ssid = (PNDIS_802_11_SSID)SetOid->Data;
|
||||||
|
|
||||||
RtlCopyMemory(Ssid->Ssid, sSsid, strlen(sSsid));
|
RtlCopyMemory(Ssid->Ssid, sSsid, wcslen(sSsid));
|
||||||
Ssid->SsidLength = strlen(sSsid);
|
Ssid->SsidLength = wcslen(sSsid);
|
||||||
|
|
||||||
bSuccess = DeviceIoControl(hAdapter,
|
bSuccess = DeviceIoControl(hAdapter,
|
||||||
IOCTL_NDISUIO_SET_OID_VALUE,
|
IOCTL_NDISUIO_SET_OID_VALUE,
|
||||||
|
@ -766,7 +737,7 @@ WlanScan(HANDLE hAdapter)
|
||||||
DWORD QueryOidSize;
|
DWORD QueryOidSize;
|
||||||
PNDIS_802_11_BSSID_LIST BssidList;
|
PNDIS_802_11_BSSID_LIST BssidList;
|
||||||
DWORD i, j;
|
DWORD i, j;
|
||||||
TCHAR szMsgBuf[128];
|
WCHAR szMsgBuf[128];
|
||||||
|
|
||||||
SetOid.Oid = OID_802_11_BSSID_LIST_SCAN;
|
SetOid.Oid = OID_802_11_BSSID_LIST_SCAN;
|
||||||
|
|
||||||
|
@ -824,29 +795,29 @@ WlanScan(HANDLE hAdapter)
|
||||||
RtlCopyMemory(SsidBuffer, Ssid->Ssid, Ssid->SsidLength);
|
RtlCopyMemory(SsidBuffer, Ssid->Ssid, Ssid->SsidLength);
|
||||||
SsidBuffer[Ssid->SsidLength] = 0;
|
SsidBuffer[Ssid->SsidLength] = 0;
|
||||||
|
|
||||||
_tprintf(_T("\nSSID: %hs\n"), SsidBuffer);
|
printf("\nSSID: %s\n", SsidBuffer);
|
||||||
|
|
||||||
_tprintf(_T("BSSID: "));
|
printf("BSSID: ");
|
||||||
for (j = 0; j < sizeof(NDIS_802_11_MAC_ADDRESS); j++)
|
for (j = 0; j < sizeof(NDIS_802_11_MAC_ADDRESS); j++)
|
||||||
{
|
{
|
||||||
UINT BssidData = BssidInfo->MacAddress[j];
|
UINT BssidData = BssidInfo->MacAddress[j];
|
||||||
|
|
||||||
_tprintf(_T("%.2x"), BssidData);
|
printf("%.2x", BssidData);
|
||||||
|
|
||||||
if (j != sizeof(NDIS_802_11_MAC_ADDRESS) - 1)
|
if (j != sizeof(NDIS_802_11_MAC_ADDRESS) - 1)
|
||||||
_tprintf(_T(":"));
|
printf(":");
|
||||||
}
|
}
|
||||||
_tprintf(_T("\n"));
|
printf("\n");
|
||||||
|
|
||||||
LoadString(GetModuleHandle(NULL),
|
LoadStringW(GetModuleHandle(NULL),
|
||||||
BssidInfo->Privacy == 0 ? IDS_NO : IDS_YES,
|
BssidInfo->Privacy == 0 ? IDS_NO : IDS_YES,
|
||||||
szMsgBuf,
|
szMsgBuf,
|
||||||
COUNT_OF(szMsgBuf));
|
COUNT_OF(szMsgBuf));
|
||||||
PrintResourceString(IDS_MSG_ENCRYPTED, szMsgBuf);
|
PrintResourceString(IDS_MSG_ENCRYPTED, szMsgBuf);
|
||||||
LoadString(GetModuleHandle(NULL),
|
LoadStringW(GetModuleHandle(NULL),
|
||||||
NetworkType == Ndis802_11IBSS ? IDS_ADHOC : IDS_INFRASTRUCTURE,
|
NetworkType == Ndis802_11IBSS ? IDS_ADHOC : IDS_INFRASTRUCTURE,
|
||||||
szMsgBuf,
|
szMsgBuf,
|
||||||
COUNT_OF(szMsgBuf));
|
COUNT_OF(szMsgBuf));
|
||||||
PrintResourceString(IDS_MSG_NETWORK_TYPE, szMsgBuf);
|
PrintResourceString(IDS_MSG_NETWORK_TYPE, szMsgBuf);
|
||||||
PrintResourceString(IDS_MSG_RSSI, (int)Rssi);
|
PrintResourceString(IDS_MSG_RSSI, (int)Rssi);
|
||||||
PrintResourceString(IDS_MSG_SUPPORT_RATE);
|
PrintResourceString(IDS_MSG_SUPPORT_RATE);
|
||||||
|
@ -863,16 +834,16 @@ WlanScan(HANDLE hAdapter)
|
||||||
if (Rate & 0x01)
|
if (Rate & 0x01)
|
||||||
{
|
{
|
||||||
/* Bit 0 is set so we need to add 0.5 */
|
/* Bit 0 is set so we need to add 0.5 */
|
||||||
_tprintf(_T("%u.5 "), (Rate >> 1));
|
printf("%u.5 ", (Rate >> 1));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Bit 0 is clear so just print the conversion */
|
/* Bit 0 is clear so just print the conversion */
|
||||||
_tprintf(_T("%u "), (Rate >> 1));
|
printf("%u ", (Rate >> 1));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_tprintf(_T("\n"));
|
printf("\n");
|
||||||
|
|
||||||
/* Move to the next entry */
|
/* Move to the next entry */
|
||||||
BssidInfo = (PNDIS_WLAN_BSSID)((PUCHAR)BssidInfo + BssidInfo->Length);
|
BssidInfo = (PNDIS_WLAN_BSSID)((PUCHAR)BssidInfo + BssidInfo->Length);
|
||||||
|
@ -884,23 +855,23 @@ WlanScan(HANDLE hAdapter)
|
||||||
return bSuccess;
|
return bSuccess;
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL ParseCmdline(int argc, char *argv[])
|
BOOL ParseCmdline(int argc, WCHAR *argv[])
|
||||||
{
|
{
|
||||||
INT i;
|
INT i;
|
||||||
|
|
||||||
for (i = 1; i < argc; i++)
|
for (i = 1; i < argc; i++)
|
||||||
{
|
{
|
||||||
if (argv[i][0] == '-')
|
if (argv[i][0] == L'-')
|
||||||
{
|
{
|
||||||
switch (argv[i][1])
|
switch (argv[i][1])
|
||||||
{
|
{
|
||||||
case 's':
|
case L's':
|
||||||
bScan = TRUE;
|
bScan = TRUE;
|
||||||
break;
|
break;
|
||||||
case 'd':
|
case L'd':
|
||||||
bDisconnect = TRUE;
|
bDisconnect = TRUE;
|
||||||
break;
|
break;
|
||||||
case 'c':
|
case L'c':
|
||||||
if (i == argc - 1)
|
if (i == argc - 1)
|
||||||
{
|
{
|
||||||
PrintResourceString(IDS_USAGE);
|
PrintResourceString(IDS_USAGE);
|
||||||
|
@ -909,7 +880,7 @@ BOOL ParseCmdline(int argc, char *argv[])
|
||||||
bConnect = TRUE;
|
bConnect = TRUE;
|
||||||
sSsid = argv[++i];
|
sSsid = argv[++i];
|
||||||
break;
|
break;
|
||||||
case 'w':
|
case L'w':
|
||||||
if (i == argc - 1)
|
if (i == argc - 1)
|
||||||
{
|
{
|
||||||
PrintResourceString(IDS_USAGE);
|
PrintResourceString(IDS_USAGE);
|
||||||
|
@ -917,7 +888,7 @@ BOOL ParseCmdline(int argc, char *argv[])
|
||||||
}
|
}
|
||||||
sWepKey = argv[++i];
|
sWepKey = argv[++i];
|
||||||
break;
|
break;
|
||||||
case 'a':
|
case L'a':
|
||||||
bAdhoc = TRUE;
|
bAdhoc = TRUE;
|
||||||
break;
|
break;
|
||||||
default :
|
default :
|
||||||
|
@ -936,7 +907,7 @@ BOOL ParseCmdline(int argc, char *argv[])
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
int _tmain(int argc, char *argv[])
|
int wmain(int argc, WCHAR *argv[])
|
||||||
{
|
{
|
||||||
HANDLE hAdapter;
|
HANDLE hAdapter;
|
||||||
IP_ADAPTER_INDEX_MAP IpInfo;
|
IP_ADAPTER_INDEX_MAP IpInfo;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue