[WLANCONF]

- Convert to UNICODE
- rewrite CharToHex()

svn path=/trunk/; revision=58339
This commit is contained in:
Timo Kreuzer 2013-02-17 18:48:59 +00:00
parent 005f4e783c
commit 9ca7108e72

View file

@ -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;