//+---------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1992 - 2001 // // File: CompName.h // // Contents: Definitions for the computer name management code. // // History: 20-April-2001 EricB Created // //----------------------------------------------------------------------------- #include "pch.h" #pragma hdrstop #include "netdom.h" #include "CompName.h" //+---------------------------------------------------------------------------- // // Function: NetDomComputerNames // // Synopsis: Entry point for the computer name command. // // Arguments: [rgNetDomArgs] - The command line argument array. // //----------------------------------------------------------------------------- DWORD NetDomComputerNames(ARG_RECORD * rgNetDomArgs) { DWORD Win32Err = ERROR_SUCCESS; Win32Err = NetDompValidateSecondaryArguments(rgNetDomArgs, eObject, eCommUserNameO, eCommPasswordO, eCommUserNameD, eCommPasswordD, eCommAdd, eCommRemove, eCompNameMakePri, eCompNameEnum, eCommVerbose, eArgEnd); if (ERROR_SUCCESS != Win32Err) { DisplayHelp(ePriCompName); return Win32Err; } PWSTR pwzMachine = rgNetDomArgs[eObject].strValue; if (!pwzMachine) { DisplayHelp(ePriCompName); return ERROR_INVALID_PARAMETER; } // // Get the users and passwords if they were entered. // ND5_AUTH_INFO MachineUser = {0}, DomainUser = {0}; if (CmdFlagOn(rgNetDomArgs, eCommUserNameO)) { Win32Err = NetDompGetUserAndPasswordForOperation(rgNetDomArgs, eCommUserNameO, pwzMachine, &MachineUser); if (ERROR_SUCCESS != Win32Err) { DisplayHelp(ePriCompName); return Win32Err; } } if (CmdFlagOn(rgNetDomArgs, eCommUserNameD)) { Win32Err = NetDompGetUserAndPasswordForOperation(rgNetDomArgs, eCommUserNameD, pwzMachine, &DomainUser); if (ERROR_SUCCESS != Win32Err) { DisplayHelp(ePriCompName); goto CompNameExit; } } // // See which name operation is specified. // bool fHaveOp = false; PWSTR pwzOp = NULL; NETDOM_ARG_ENUM eOp = eArgNull, eBadOp = eArgNull; if (CmdFlagOn(rgNetDomArgs, eCommAdd)) { Win32Err = NetDompGetArgumentString(rgNetDomArgs, eCommAdd, &pwzOp); if (NO_ERROR == Win32Err) { eOp = eCommAdd; } } if (CmdFlagOn(rgNetDomArgs, eCommRemove)) { Win32Err = NetDompGetArgumentString(rgNetDomArgs, eCommRemove, &pwzOp); if (NO_ERROR == Win32Err) { if (eArgNull == eOp) { eOp = eCommRemove; } else { eBadOp = eCommRemove; } } } if (CmdFlagOn(rgNetDomArgs, eCompNameMakePri)) { Win32Err = NetDompGetArgumentString(rgNetDomArgs, eCompNameMakePri, &pwzOp); if (NO_ERROR == Win32Err) { if (eArgNull == eOp) { eOp = eCompNameMakePri; } else { eBadOp = eCompNameMakePri; } } } if (CmdFlagOn(rgNetDomArgs, eCompNameEnum)) { Win32Err = NetDompGetArgumentString(rgNetDomArgs, eCompNameEnum, &pwzOp); if (NO_ERROR == Win32Err) { if (eArgNull == eOp) { eOp = eCompNameEnum; } else { eBadOp = eCompNameEnum; } } } if (eArgNull != eBadOp) { ASSERT(rgNetDomArgs[eBadOp].strArg1); NetDompDisplayUnexpectedParameter(rgNetDomArgs[eBadOp].strArg1); DisplayHelp(ePriCompName); Win32Err = ERROR_INVALID_PARAMETER; goto CompNameExit; } if (eArgNull == eOp) { DisplayHelp(ePriCompName); Win32Err = ERROR_INVALID_PARAMETER; goto CompNameExit; } if (CmdFlagOn(rgNetDomArgs, eCommUserNameO)) { LOG_VERBOSE((MSG_VERBOSE_ESTABLISH_SESSION, pwzMachine)); Win32Err = NetpManageIPCConnect(pwzMachine, MachineUser.User, MachineUser.Password, NETSETUPP_CONNECT_IPC); } if (NO_ERROR != Win32Err) { goto CompNameExit; } // // Do the operation. // switch (eOp) { case eCommAdd: if (!rgNetDomArgs[eCommAdd].strValue || !wcslen(rgNetDomArgs[eCommAdd].strValue)) { DisplayHelp(ePriCompName); Win32Err = ERROR_INVALID_PARAMETER; goto CompNameExit; } Win32Err = NetAddAlternateComputerName(pwzMachine, rgNetDomArgs[eCommAdd].strValue, DomainUser.User, DomainUser.Password, 0); if (NO_ERROR == Win32Err) { NetDompDisplayMessage(MSG_COMPNAME_ADD, rgNetDomArgs[eCommAdd].strValue); } else { NetDompDisplayMessage(MSG_COMPNAME_ADD_FAIL, rgNetDomArgs[eCommAdd].strValue); NetDompDisplayErrorMessage(Win32Err); } break; case eCommRemove: if (!rgNetDomArgs[eCommRemove].strValue || !wcslen(rgNetDomArgs[eCommRemove].strValue)) { DisplayHelp(ePriCompName); Win32Err = ERROR_INVALID_PARAMETER; goto CompNameExit; } Win32Err = NetRemoveAlternateComputerName(pwzMachine, rgNetDomArgs[eCommRemove].strValue, DomainUser.User, DomainUser.Password, 0); if (NO_ERROR == Win32Err) { NetDompDisplayMessage(MSG_COMPNAME_REM, rgNetDomArgs[eCommRemove].strValue); } else { NetDompDisplayMessage(MSG_COMPNAME_REM_FAIL, rgNetDomArgs[eCommRemove].strValue); NetDompDisplayErrorMessage(Win32Err); } break; case eCompNameMakePri: if (!rgNetDomArgs[eCompNameMakePri].strValue || !wcslen(rgNetDomArgs[eCompNameMakePri].strValue)) { DisplayHelp(ePriCompName); Win32Err = ERROR_INVALID_PARAMETER; goto CompNameExit; } Win32Err = NetSetPrimaryComputerName(pwzMachine, rgNetDomArgs[eCompNameMakePri].strValue, DomainUser.User, DomainUser.Password, 0); if (NO_ERROR == Win32Err) { NetDompDisplayMessage(MSG_COMPNAME_MAKEPRI, rgNetDomArgs[eCompNameMakePri].strValue); } else { NetDompDisplayMessage(MSG_COMPNAME_MAKEPRI_FAIL, rgNetDomArgs[eCompNameMakePri].strValue); NetDompDisplayErrorMessage(Win32Err); } break; case eCompNameEnum: { NET_COMPUTER_NAME_TYPE NameType = NetAllComputerNames; WCHAR wzBuf[MAX_PATH+1]; DWORD dwMsgID = MSG_COMPNAME_ENUMALL; if (rgNetDomArgs[eCompNameEnum].strValue && wcslen(rgNetDomArgs[eCompNameEnum].strValue)) { if (!LoadString(g_hInstance, IDS_ENUM_ALT, wzBuf, MAX_PATH)) { Win32Err = GetLastError(); goto CompNameExit; } if (_wcsicmp(wzBuf, rgNetDomArgs[eCompNameEnum].strValue) == 0) { NameType = NetAlternateComputerNames; dwMsgID = MSG_COMPNAME_ENUMALT; } else { if (!LoadString(g_hInstance, IDS_ENUM_PRI, wzBuf, MAX_PATH)) { Win32Err = GetLastError(); goto CompNameExit; } if (_wcsicmp(wzBuf, rgNetDomArgs[eCompNameEnum].strValue) == 0) { NameType = NetPrimaryComputerName; dwMsgID = MSG_COMPNAME_ENUMPRI; } else { if (!LoadString(g_hInstance, IDS_ENUM_ALL, wzBuf, MAX_PATH)) { Win32Err = GetLastError(); goto CompNameExit; } if (_wcsicmp(wzBuf, rgNetDomArgs[eCompNameEnum].strValue) == 0) { NameType = NetAllComputerNames; dwMsgID = MSG_COMPNAME_ENUMALL; } else { NetDompDisplayUnexpectedParameter(rgNetDomArgs[eCompNameEnum].strValue); DisplayHelp(ePriCompName); Win32Err = ERROR_INVALID_PARAMETER; goto CompNameExit; } } } } DWORD dwCount = 0; PWSTR * rgpwzNames = NULL; DBG_VERBOSE(("NetEnumerateComputerNames(%ws, %d, 0, etc)\n", pwzMachine, NameType)); Win32Err = NetEnumerateComputerNames(pwzMachine, NameType, 0, &dwCount, &rgpwzNames); if (NO_ERROR != Win32Err) { NetDompDisplayErrorMessage(Win32Err); goto CompNameExit; } NetDompDisplayMessage(dwMsgID); for (DWORD i = 0; i < dwCount; i++) { ASSERT(rgpwzNames[i]); printf("%ws\n", rgpwzNames[i]); } if (rgpwzNames) { NetApiBufferFree(rgpwzNames); } } break; default: ASSERT(FALSE); Win32Err = ERROR_INVALID_PARAMETER; goto CompNameExit; } CompNameExit: if (CmdFlagOn(rgNetDomArgs, eCommUserNameO)) { LOG_VERBOSE((MSG_VERBOSE_DELETE_SESSION, pwzMachine)); NetpManageIPCConnect(pwzMachine, MachineUser.User, MachineUser.Password, NETSETUPP_DISCONNECT_IPC); } NetDompFreeAuthIdent(&MachineUser); NetDompFreeAuthIdent(&DomainUser); return Win32Err; }