1 /* 2 * PROJECT: ReactOS Hostname Command 3 * LICENSE: LGPL-2.1+ (https://spdx.org/licenses/LGPL-2.1+) 4 * PURPOSE: Retrieves the current DNS host name of the computer. 5 * COPYRIGHT: Copyright 2005-2019 Emanuele Aliberti (ea@reactos.com) 6 * Copyright 2019 Hermes Belusca-Maito 7 */ 8 9 #include <stdlib.h> 10 #include <conio.h> 11 12 #include <windef.h> 13 #include <winbase.h> 14 #include <winuser.h> 15 16 #include "resource.h" 17 18 int wmain(int argc, WCHAR* argv[]) 19 { 20 WCHAR Msg[100]; 21 22 if (argc == 1) 23 { 24 BOOL bSuccess; 25 WCHAR LocalHostName[256] = L""; // MAX_COMPUTERNAME_LENGTH + 1 for NetBIOS name. 26 DWORD HostNameSize = _countof(LocalHostName); 27 PWSTR HostName = LocalHostName; 28 29 /* Try to retrieve the host name using the local buffer */ 30 bSuccess = GetComputerNameExW(ComputerNameDnsHostname, HostName, &HostNameSize); 31 if (!bSuccess && (GetLastError() == ERROR_MORE_DATA)) 32 { 33 /* Retry with a larger buffer since the local buffer was too small */ 34 HostName = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, HostNameSize * sizeof(WCHAR)); 35 if (HostName) 36 bSuccess = GetComputerNameExW(ComputerNameDnsHostname, HostName, &HostNameSize); 37 } 38 39 if (bSuccess) 40 { 41 /* Print out the host name */ 42 _cwprintf(L"%s\n", HostName); 43 } 44 45 /* If a larger buffer has been allocated, free it */ 46 if (HostName && (HostName != LocalHostName)) 47 HeapFree(GetProcessHeap(), 0, HostName); 48 49 if (!bSuccess) 50 { 51 /* Fail in case of error */ 52 LoadStringW(GetModuleHandle(NULL), IDS_ERROR, Msg, _countof(Msg)); 53 _cwprintf(L"%s %lu.\n", Msg, GetLastError()); 54 return 1; 55 } 56 } 57 else 58 { 59 if ((wcsicmp(argv[1], L"-s") == 0) || (wcsicmp(argv[1], L"/s") == 0)) 60 { 61 /* The program doesn't allow the user to set the host name */ 62 LoadStringW(GetModuleHandle(NULL), IDS_NOSET, Msg, _countof(Msg)); 63 _cwprintf(L"%s\n", Msg); 64 return 1; 65 } 66 else 67 { 68 /* Let the user know what the program does */ 69 LoadStringW(GetModuleHandle(NULL), IDS_USAGE, Msg, _countof(Msg)); 70 _cwprintf(L"\n%s\n\n", Msg); 71 } 72 } 73 74 return 0; 75 } 76 77 /* EOF */ 78