[IPCONFIG] Get rid of tchar.h

This commit is contained in:
Eric Kohl
2025-07-26 15:25:08 +02:00
parent 4b53972724
commit e5b35337fd

View File

@@ -6,7 +6,6 @@
*/
/*
* TODO:
* fix renew / release
* implement registerdns, showclassid, setclassid
*/
@@ -20,7 +19,6 @@
#include <winreg.h>
#include <winnls.h>
#include <stdio.h>
#include <tchar.h>
#include <time.h>
#include <iphlpapi.h>
#include <ndk/rtlfuncs.h>
@@ -40,7 +38,7 @@
typedef struct _RECORDTYPE
{
WORD wRecordType;
LPTSTR pszRecordName;
LPWSTR pszRecordName;
} RECORDTYPE, *PRECORDTYPE;
#define GUID_LEN 40
@@ -50,67 +48,67 @@ HANDLE ProcessHeap;
RECORDTYPE TypeArray[] =
{
{DNS_TYPE_ZERO, _T("ZERO")},
{DNS_TYPE_A, _T("A")},
{DNS_TYPE_NS, _T("NS")},
{DNS_TYPE_MD, _T("MD")},
{DNS_TYPE_MF, _T("MF")},
{DNS_TYPE_CNAME, _T("CNAME")},
{DNS_TYPE_SOA, _T("SOA")},
{DNS_TYPE_MB, _T("MB")},
{DNS_TYPE_MG, _T("MG")},
{DNS_TYPE_MR, _T("MR")},
{DNS_TYPE_NULL, _T("NULL")},
{DNS_TYPE_WKS, _T("WKS")},
{DNS_TYPE_PTR, _T("PTR")},
{DNS_TYPE_HINFO, _T("HINFO")},
{DNS_TYPE_MINFO, _T("MINFO")},
{DNS_TYPE_MX, _T("MX")},
{DNS_TYPE_TEXT, _T("TXT")},
{DNS_TYPE_RP, _T("RP")},
{DNS_TYPE_AFSDB, _T("AFSDB")},
{DNS_TYPE_X25, _T("X25")},
{DNS_TYPE_ISDN, _T("ISDN")},
{DNS_TYPE_RT, _T("RT")},
{DNS_TYPE_NSAP, _T("NSAP")},
{DNS_TYPE_NSAPPTR, _T("NSAPPTR")},
{DNS_TYPE_SIG, _T("SIG")},
{DNS_TYPE_KEY, _T("KEY")},
{DNS_TYPE_PX, _T("PX")},
{DNS_TYPE_GPOS, _T("GPOS")},
{DNS_TYPE_AAAA, _T("AAAA")},
{DNS_TYPE_LOC, _T("LOC")},
{DNS_TYPE_NXT, _T("NXT")},
{DNS_TYPE_EID, _T("EID")},
{DNS_TYPE_NIMLOC, _T("NIMLOC")},
{DNS_TYPE_SRV, _T("SRV")},
{DNS_TYPE_ATMA, _T("ATMA")},
{DNS_TYPE_NAPTR, _T("NAPTR")},
{DNS_TYPE_KX, _T("KX")},
{DNS_TYPE_CERT, _T("CERT")},
{DNS_TYPE_A6, _T("A6")},
{DNS_TYPE_DNAME, _T("DNAME")},
{DNS_TYPE_SINK, _T("SINK")},
{DNS_TYPE_OPT, _T("OPT")},
{DNS_TYPE_UINFO, _T("UINFO")},
{DNS_TYPE_UID, _T("UID")},
{DNS_TYPE_GID, _T("GID")},
{DNS_TYPE_UNSPEC, _T("UNSPEC")},
{DNS_TYPE_ADDRS, _T("ADDRS")},
{DNS_TYPE_TKEY, _T("TKEY")},
{DNS_TYPE_TSIG, _T("TSIG")},
{DNS_TYPE_IXFR, _T("IXFR")},
{DNS_TYPE_AXFR, _T("AXFR")},
{DNS_TYPE_MAILB, _T("MAILB")},
{DNS_TYPE_MAILA, _T("MAILA")},
{DNS_TYPE_ALL, _T("ALL")},
{DNS_TYPE_ZERO, L"ZERO"},
{DNS_TYPE_A, L"A"},
{DNS_TYPE_NS, L"NS"},
{DNS_TYPE_MD, L"MD"},
{DNS_TYPE_MF, L"MF"},
{DNS_TYPE_CNAME, L"CNAME"},
{DNS_TYPE_SOA, L"SOA"},
{DNS_TYPE_MB, L"MB"},
{DNS_TYPE_MG, L"MG"},
{DNS_TYPE_MR, L"MR"},
{DNS_TYPE_NULL, L"NULL"},
{DNS_TYPE_WKS, L"WKS"},
{DNS_TYPE_PTR, L"PTR"},
{DNS_TYPE_HINFO, L"HINFO"},
{DNS_TYPE_MINFO, L"MINFO"},
{DNS_TYPE_MX, L"MX"},
{DNS_TYPE_TEXT, L"TXT"},
{DNS_TYPE_RP, L"RP"},
{DNS_TYPE_AFSDB, L"AFSDB"},
{DNS_TYPE_X25, L"X25"},
{DNS_TYPE_ISDN, L"ISDN"},
{DNS_TYPE_RT, L"RT"},
{DNS_TYPE_NSAP, L"NSAP"},
{DNS_TYPE_NSAPPTR, L"NSAPPTR"},
{DNS_TYPE_SIG, L"SIG"},
{DNS_TYPE_KEY, L"KEY"},
{DNS_TYPE_PX, L"PX"},
{DNS_TYPE_GPOS, L"GPOS"},
{DNS_TYPE_AAAA, L"AAAA"},
{DNS_TYPE_LOC, L"LOC"},
{DNS_TYPE_NXT, L"NXT"},
{DNS_TYPE_EID, L"EID"},
{DNS_TYPE_NIMLOC, L"NIMLOC"},
{DNS_TYPE_SRV, L"SRV"},
{DNS_TYPE_ATMA, L"ATMA"},
{DNS_TYPE_NAPTR, L"NAPTR"},
{DNS_TYPE_KX, L"KX"},
{DNS_TYPE_CERT, L"CERT"},
{DNS_TYPE_A6, L"A6"},
{DNS_TYPE_DNAME, L"DNAME"},
{DNS_TYPE_SINK, L"SINK"},
{DNS_TYPE_OPT, L"OPT"},
{DNS_TYPE_UINFO, L"UINFO"},
{DNS_TYPE_UID, L"UID"},
{DNS_TYPE_GID, L"GID"},
{DNS_TYPE_UNSPEC, L"UNSPEC"},
{DNS_TYPE_ADDRS, L"ADDRS"},
{DNS_TYPE_TKEY, L"TKEY"},
{DNS_TYPE_TSIG, L"TSIG"},
{DNS_TYPE_IXFR, L"IXFR"},
{DNS_TYPE_AXFR, L"AXFR"},
{DNS_TYPE_MAILB, L"MAILB"},
{DNS_TYPE_MAILA, L"MAILA"},
{DNS_TYPE_ALL, L"ALL"},
{0, NULL}
};
LPTSTR
LPWSTR
GetRecordTypeName(WORD wType)
{
static TCHAR szType[8];
static WCHAR szType[8];
INT i;
for (i = 0; ; i++)
@@ -122,7 +120,7 @@ GetRecordTypeName(WORD wType)
return TypeArray[i].pszRecordName;
}
_stprintf(szType, _T("%hu"), wType);
swprintf(szType, L"%hu", wType);
return szType;
}
@@ -140,12 +138,12 @@ PCHAR PrintMacAddr(PBYTE Mac)
/* convert time_t to localized string */
_Ret_opt_z_ PTSTR timeToStr(_In_ time_t TimeStamp)
_Ret_opt_z_ PWSTR timeToStr(_In_ time_t TimeStamp)
{
struct tm* ptm;
SYSTEMTIME SystemTime;
INT DateCchSize, TimeCchSize, TotalCchSize, i;
PTSTR DateTimeString, psz;
PWSTR DateTimeString, psz;
/* Convert Unix time to SYSTEMTIME */
/* localtime_s may be preferred if available */
@@ -162,12 +160,12 @@ _Ret_opt_z_ PTSTR timeToStr(_In_ time_t TimeStamp)
SystemTime.wSecond = ptm->tm_sec;
/* Get total size in characters required of buffer */
DateCchSize = GetDateFormat(LOCALE_USER_DEFAULT, DATE_LONGDATE, &SystemTime, NULL, NULL, 0);
DateCchSize = GetDateFormatW(LOCALE_USER_DEFAULT, DATE_LONGDATE, &SystemTime, NULL, NULL, 0);
if (!DateCchSize)
{
return NULL;
}
TimeCchSize = GetTimeFormat(LOCALE_USER_DEFAULT, 0, &SystemTime, NULL, NULL, 0);
TimeCchSize = GetTimeFormatW(LOCALE_USER_DEFAULT, 0, &SystemTime, NULL, NULL, 0);
if (!TimeCchSize)
{
return NULL;
@@ -176,23 +174,23 @@ _Ret_opt_z_ PTSTR timeToStr(_In_ time_t TimeStamp)
TotalCchSize = DateCchSize + TimeCchSize;
/* Allocate buffer and format datetime string */
DateTimeString = (PTSTR)HeapAlloc(ProcessHeap, 0, TotalCchSize * sizeof(TCHAR));
DateTimeString = (PTSTR)HeapAlloc(ProcessHeap, 0, TotalCchSize * sizeof(WCHAR));
if (!DateTimeString)
{
return NULL;
}
/* Get date string */
i = GetDateFormat(LOCALE_USER_DEFAULT, DATE_LONGDATE, &SystemTime, NULL, DateTimeString, TotalCchSize);
i = GetDateFormatW(LOCALE_USER_DEFAULT, DATE_LONGDATE, &SystemTime, NULL, DateTimeString, TotalCchSize);
if (i)
{
/* Append space and move pointer */
DateTimeString[i - 1] = _T(' ');
DateTimeString[i - 1] = L' ';
psz = DateTimeString + i;
TotalCchSize -= i;
/* Get time string */
if (GetTimeFormat(LOCALE_USER_DEFAULT, 0, &SystemTime, NULL, psz, TotalCchSize))
if (GetTimeFormatW(LOCALE_USER_DEFAULT, 0, &SystemTime, NULL, psz, TotalCchSize))
{
return DateTimeString;
}
@@ -211,17 +209,17 @@ VOID DoFormatMessage(LONG ErrorCode)
if (ErrorCode == 0)
ErrorCode = GetLastError();
if (FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER |
if (FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER |
FORMAT_MESSAGE_FROM_SYSTEM |
FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
ErrorCode,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), /* Default language */
(LPTSTR) &lpMsgBuf,
0,
NULL))
NULL,
ErrorCode,
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), /* Default language */
(LPWSTR)&lpMsgBuf,
0,
NULL))
{
_tprintf(_T("%s"), (LPTSTR)lpMsgBuf);
ConPuts(StdOut, (LPWSTR)lpMsgBuf);
LocalFree(lpMsgBuf);
}
}
@@ -336,17 +334,17 @@ PrintAdapterDescription(LPSTR lpClass)
HKEY hClassKey = NULL;
LPSTR lpKeyClass = NULL;
LPSTR lpConDesc = NULL;
LPTSTR lpPath = NULL;
TCHAR szPrePath[] = _T("SYSTEM\\CurrentControlSet\\Control\\Class\\{4D36E972-E325-11CE-BFC1-08002bE10318}\\");
LPWSTR lpPath = NULL;
WCHAR szPrePath[] = L"SYSTEM\\CurrentControlSet\\Control\\Class\\{4D36E972-E325-11CE-BFC1-08002bE10318}\\";
DWORD dwType;
DWORD dwDataSize;
INT i;
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,
szPrePath,
0,
KEY_READ,
&hBaseKey) != ERROR_SUCCESS)
if (RegOpenKeyExW(HKEY_LOCAL_MACHINE,
szPrePath,
0,
KEY_READ,
&hBaseKey) != ERROR_SUCCESS)
{
return;
}
@@ -355,17 +353,17 @@ PrintAdapterDescription(LPSTR lpClass)
{
DWORD PathSize;
LONG Status;
TCHAR szName[10];
WCHAR szName[10];
DWORD NameLen = 9;
if ((Status = RegEnumKeyEx(hBaseKey,
i,
szName,
&NameLen,
NULL,
NULL,
NULL,
NULL)) != ERROR_SUCCESS)
if ((Status = RegEnumKeyExW(hBaseKey,
i,
szName,
&NameLen,
NULL,
NULL,
NULL,
NULL)) != ERROR_SUCCESS)
{
if (Status == ERROR_NO_MORE_ITEMS)
{
@@ -377,22 +375,22 @@ PrintAdapterDescription(LPSTR lpClass)
continue;
}
PathSize = lstrlen(szPrePath) + lstrlen(szName) + 1;
lpPath = (LPTSTR)HeapAlloc(ProcessHeap,
PathSize = wcslen(szPrePath) + wcslen(szName) + 1;
lpPath = (LPWSTR)HeapAlloc(ProcessHeap,
0,
PathSize * sizeof(TCHAR));
PathSize * sizeof(WCHAR));
if (lpPath == NULL)
goto CLEANUP;
wsprintf(lpPath, _T("%s%s"), szPrePath, szName);
wsprintf(lpPath, L"%s%s", szPrePath, szName);
//MessageBox(NULL, lpPath, NULL, 0);
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,
lpPath,
0,
KEY_READ,
&hClassKey) != ERROR_SUCCESS)
if (RegOpenKeyExW(HKEY_LOCAL_MACHINE,
lpPath,
0,
KEY_READ,
&hClassKey) != ERROR_SUCCESS)
{
goto CLEANUP;
}
@@ -744,7 +742,7 @@ ShowInfo(
pIPAddr = pFixedInfo->DnsServerList.Next;
while (pIPAddr)
{
ConResPrintf(StdOut, IDS_EMPTYLINE, pIPAddr ->IpAddress.String);
ConResPrintf(StdOut, IDS_EMPTYLINE, pIPAddr->IpAddress.String);
pIPAddr = pIPAddr->Next;
}
@@ -756,15 +754,15 @@ ShowInfo(
if (pAdapter->DhcpEnabled && strcmp(pAdapter->DhcpServer.IpAddress.String, "255.255.255.255"))
{
PTSTR DateTimeString;
PWSTR DateTimeString;
DateTimeString = timeToStr(pAdapter->LeaseObtained);
ConResPrintf(StdOut, IDS_LEASEOBTAINED, DateTimeString ? DateTimeString : _T("N/A"));
ConResPrintf(StdOut, IDS_LEASEOBTAINED, DateTimeString ? DateTimeString : L"N/A");
if (DateTimeString)
{
HeapFree(ProcessHeap, 0, DateTimeString);
}
DateTimeString = timeToStr(pAdapter->LeaseExpires);
ConResPrintf(StdOut, IDS_LEASEEXPIRES, DateTimeString ? DateTimeString : _T("N/A"));
ConResPrintf(StdOut, IDS_LEASEEXPIRES, DateTimeString ? DateTimeString : L"N/A");
if (DateTimeString)
{
HeapFree(ProcessHeap, 0, DateTimeString);
@@ -861,7 +859,7 @@ Release(
pAdapterInfo = (IP_ADAPTER_INFO *)HeapAlloc(ProcessHeap, 0, adaptOutBufLen);
if (pAdapterInfo == NULL)
{
_tprintf(_T("memory allocation error"));
printf("memory allocation error");
return;
}
@@ -967,7 +965,7 @@ Renew(
pAdapterInfo = (IP_ADAPTER_INFO *)HeapAlloc(ProcessHeap, 0, adaptOutBufLen);
if (pAdapterInfo == NULL)
{
_tprintf(_T("memory allocation error"));
printf("memory allocation error");
return;
}
@@ -1059,7 +1057,7 @@ VOID
RegisterDns(VOID)
{
/* FIXME */
_tprintf(_T("\nSorry /registerdns is not implemented yet\n"));
printf("\nSorry /registerdns is not implemented yet\n");
}
static
@@ -1230,7 +1228,7 @@ VOID
ShowClassId(
LPWSTR pszAdapterName)
{
_tprintf(_T("\nSorry /showclassid adapter is not implemented yet\n"));
printf("\nSorry /showclassid adapter is not implemented yet\n");
}
VOID
@@ -1260,7 +1258,7 @@ SetClassId(
pAdapterInfo = (IP_ADAPTER_INFO *)HeapAlloc(ProcessHeap, 0, adaptOutBufLen);
if (pAdapterInfo == NULL)
{
_tprintf(_T("memory allocation error"));
printf("memory allocation error");
return;
}
@@ -1356,41 +1354,41 @@ int wmain(int argc, wchar_t *argv[])
ProcessHeap = GetProcessHeap();
/* Parse command line for options we have been given. */
if ((argc > 1) && (argv[1][0]=='/' || argv[1][0]=='-'))
if ((argc > 1) && (argv[1][0] == L'/' || argv[1][0] == L'-'))
{
if (!_tcsicmp(&argv[1][1], _T("?")))
if (!_wcsicmp(&argv[1][1], L"?"))
{
DoUsage = TRUE;
}
else if (!_tcsnicmp(&argv[1][1], _T("ALL"), _tcslen(&argv[1][1])))
else if (!_wcsnicmp(&argv[1][1], L"ALL", wcslen(&argv[1][1])))
{
DoAll = TRUE;
}
else if (!_tcsnicmp(&argv[1][1], _T("RELEASE"), _tcslen(&argv[1][1])))
else if (!_wcsnicmp(&argv[1][1], L"RELEASE", wcslen(&argv[1][1])))
{
DoRelease = TRUE;
}
else if (!_tcsnicmp(&argv[1][1], _T("RENEW"), _tcslen(&argv[1][1])))
else if (!_wcsnicmp(&argv[1][1], L"RENEW", wcslen(&argv[1][1])))
{
DoRenew = TRUE;
}
else if (!_tcsnicmp(&argv[1][1], _T("FLUSHDNS"), _tcslen(&argv[1][1])))
else if (!_wcsnicmp(&argv[1][1], L"FLUSHDNS", wcslen(&argv[1][1])))
{
DoFlushdns = TRUE;
}
else if (!_tcsnicmp(&argv[1][1], _T("FLUSHREGISTERDNS"), _tcslen(&argv[1][1])))
else if (!_wcsnicmp(&argv[1][1], L"FLUSHREGISTERDNS", wcslen(&argv[1][1])))
{
DoRegisterdns = TRUE;
}
else if (!_tcsnicmp(&argv[1][1], _T("DISPLAYDNS"), _tcslen(&argv[1][1])))
else if (!_wcsnicmp(&argv[1][1], L"DISPLAYDNS", wcslen(&argv[1][1])))
{
DoDisplaydns = TRUE;
}
else if (!_tcsnicmp(&argv[1][1], _T("SHOWCLASSID"), _tcslen(&argv[1][1])))
else if (!_wcsnicmp(&argv[1][1], L"SHOWCLASSID", wcslen(&argv[1][1])))
{
DoShowclassid = TRUE;
}
else if (!_tcsnicmp(&argv[1][1], _T("SETCLASSID"), _tcslen(&argv[1][1])))
else if (!_wcsnicmp(&argv[1][1], L"SETCLASSID", wcslen(&argv[1][1])))
{
DoSetclassid = TRUE;
}