INT cmdContinue(INT argc, WCHAR **argv) { SC_HANDLE hManager = NULL; SC_HANDLE hService = NULL; SERVICE_STATUS status; INT nError = 0; INT i; if (argc != 3) { ConResPuts(StdOut, IDS_GENERIC_SYNTAX); ConResPuts(StdOut, IDS_CONTINUE_SYNTAX); return 1; } for (i = 2; i < argc; i++) { if (_wcsicmp(argv[i], L"/help") == 0) { ConResPuts(StdOut, IDS_GENERIC_SYNTAX); ConResPuts(StdOut, IDS_CONTINUE_SYNTAX); ConResPuts(StdOut, IDS_CONTINUE_HELP_1); ConResPuts(StdOut, IDS_CONTINUE_HELP_2); ConResPuts(StdOut, IDS_GENERIC_PAGE); return 1; } } hManager = OpenSCManager(NULL, SERVICES_ACTIVE_DATABASE, SC_MANAGER_ENUMERATE_SERVICE); if (hManager == NULL) { ConPrintf(StdErr, L"[OpenSCManager] Error: %ld\n", GetLastError()); nError = 1; goto done; } hService = OpenService(hManager, argv[2], SERVICE_PAUSE_CONTINUE); if (hService == NULL) { ConPrintf(StdErr, L"[OpenService] Error: %ld\n", GetLastError()); nError = 1; goto done; } if (!ControlService(hService, SERVICE_CONTROL_CONTINUE, &status)) { ConPrintf(StdErr, L"[ControlService] Error: %ld\n", GetLastError()); nError = 1; } done: if (hService != NULL) CloseServiceHandle(hService); if (hManager != NULL) CloseServiceHandle(hManager); return nError; }
static VOID PrintDateTime(DWORD dwSeconds) { LARGE_INTEGER Time; FILETIME FileTime; SYSTEMTIME SystemTime; WCHAR DateBuffer[80]; WCHAR TimeBuffer[80]; RtlSecondsSince1970ToTime(dwSeconds, &Time); FileTime.dwLowDateTime = Time.u.LowPart; FileTime.dwHighDateTime = Time.u.HighPart; FileTimeToLocalFileTime(&FileTime, &FileTime); FileTimeToSystemTime(&FileTime, &SystemTime); GetDateFormatW(LOCALE_USER_DEFAULT, DATE_SHORTDATE, &SystemTime, NULL, DateBuffer, 80); GetTimeFormatW(LOCALE_USER_DEFAULT, TIME_NOSECONDS, &SystemTime, NULL, TimeBuffer, 80); ConPrintf(StdOut, L"%s %s", DateBuffer, TimeBuffer); }
VOID ConOutPrintf (LPTSTR szFormat, ...) { va_list arg_ptr; va_start (arg_ptr, szFormat); ConPrintf(szFormat, arg_ptr, STD_OUTPUT_HANDLE); va_end (arg_ptr); }
VOID ConErrPrintf (LPTSTR szFormat, ...) { va_list arg_ptr; va_start (arg_ptr, szFormat); ConPrintf(szFormat, arg_ptr, STD_ERROR_HANDLE); va_end (arg_ptr); }
static NET_API_STATUS EnumerateUsers(VOID) { PUSER_INFO_0 pBuffer = NULL; PSERVER_INFO_100 pServer = NULL; DWORD dwRead = 0, dwTotal = 0; DWORD i; DWORD_PTR ResumeHandle = 0; NET_API_STATUS Status; Status = NetServerGetInfo(NULL, 100, (LPBYTE*)&pServer); if (Status != NERR_Success) return Status; ConPuts(StdOut, L"\n"); ConResPrintf(StdOut, IDS_USER_ACCOUNTS, pServer->sv100_name); ConPuts(StdOut, L"\n\n"); PrintPadding(L'-', 79); ConPuts(StdOut, L"\n"); NetApiBufferFree(pServer); do { Status = NetUserEnum(NULL, 0, 0, (LPBYTE*)&pBuffer, MAX_PREFERRED_LENGTH, &dwRead, &dwTotal, &ResumeHandle); if ((Status != NERR_Success) && (Status != ERROR_MORE_DATA)) return Status; qsort(pBuffer, dwRead, sizeof(PUSER_INFO_0), CompareInfo); for (i = 0; i < dwRead; i++) { if (pBuffer[i].usri0_name) ConPrintf(StdOut, L"%s\n", pBuffer[i].usri0_name); } NetApiBufferFree(pBuffer); pBuffer = NULL; } while (Status == ERROR_MORE_DATA); return NERR_Success; }
VOID ConErrResPrintf (UINT resID, ...) { TCHAR szMsg[RC_STRING_MAX_SIZE]; va_list arg_ptr; va_start (arg_ptr, resID); LoadString(CMD_ModuleHandle, resID, szMsg, RC_STRING_MAX_SIZE); ConPrintf(szMsg, arg_ptr, STD_ERROR_HANDLE); va_end (arg_ptr); }
/* Print either with or without paging, depending on /P switch */ static INT DirPrintf(LPDIRSWITCHFLAGS lpFlags, LPTSTR szFormat, ...) { INT iReturn = 0; va_list arg_ptr; va_start(arg_ptr, szFormat); if (lpFlags->bPause) iReturn = ConPrintfPaging(FALSE, szFormat, arg_ptr, STD_OUTPUT_HANDLE); else ConPrintf(szFormat, arg_ptr, STD_OUTPUT_HANDLE); va_end(arg_ptr); return iReturn; }
int wmain(int argc, WCHAR **argv) { WCHAR szDllBuffer[MAX_PATH]; PCOMMAND cmdptr; int nResult = 0; BOOL bRun = FALSE; /* Initialize the Console Standard Streams */ ConInitStdStreams(); /* Load netmsg.dll */ GetSystemDirectoryW(szDllBuffer, ARRAYSIZE(szDllBuffer)); wcscat(szDllBuffer, L"\\netmsg.dll"); hModuleNetMsg = LoadLibrary(szDllBuffer); if (hModuleNetMsg == NULL) { ConPrintf(StdErr, L"Failed to load netmsg.dll\n"); return 1; } if (argc < 2) { nResult = 1; goto done; } /* Scan the command table */ for (cmdptr = cmds; cmdptr->name; cmdptr++) { if (_wcsicmp(argv[1], cmdptr->name) == 0) { nResult = cmdptr->func(argc, argv); bRun = TRUE; break; } } done: if (bRun == FALSE) { PrintMessageString(4381); ConPuts(StdOut, L"\n"); PrintNetMessage(MSG_NET_SYNTAX); } if (hModuleNetMsg != NULL) FreeLibrary(hModuleNetMsg); return nResult; }
byte *MyReadFile (char *name, int *size) { FILE *f; byte *data = NULL; if (f = fopen(name, "r")) { *size = filelength(f); data = (byte *)malloc(sizeof(byte) * *size); if (data) fread (data, sizeof(byte), *size, f); return data; } else { ConPrintf("Error: Cant open %s\n", name); *size = 0; return NULL; } }
VOID PrintNetMessage( DWORD dwMessage) { PWSTR pBuffer; FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_IGNORE_INSERTS, GetModuleHandleW(NULL), dwMessage, LANG_USER_DEFAULT, (LPWSTR)&pBuffer, 0, NULL); if (pBuffer) { ConPrintf(StdOut, L"%s\n", pBuffer); LocalFree(pBuffer); pBuffer = NULL; } }
void VidInit (void) { ConPrintf("VidInit\n"); ghdc = GetDC(ghWnd); bSetupPixelFormat(ghdc); ghrc = wglCreateContext( ghdc ); if (!ghrc) { MessageBox(NULL, "Could not initialize GL", "ERROR", MB_OK); // quit } if (!wglMakeCurrent( ghdc, ghrc )) { MessageBox(NULL, "wglMakeCurrent failed", "ERROR", MB_OK); // quit } VidInitFullScreen(ghInstance); if (current_vidmode.fullscreen) VidGoFullScreen(); }
INT cmdStop(INT argc, WCHAR **argv) { SC_HANDLE hManager = NULL; SC_HANDLE hService = NULL; SERVICE_STATUS ServiceStatus; DWORD dwError = ERROR_SUCCESS; INT nError = 0; INT i; if (argc != 3) { ConResPuts(StdOut, IDS_GENERIC_SYNTAX); ConResPuts(StdOut, IDS_STOP_SYNTAX); return 1; } for (i = 2; i < argc; i++) { if (_wcsicmp(argv[i], L"/help") == 0) { ConResPuts(StdOut, IDS_GENERIC_SYNTAX); ConResPuts(StdOut, IDS_STOP_SYNTAX); ConResPuts(StdOut, IDS_STOP_HELP_1); ConResPuts(StdOut, IDS_STOP_HELP_2); ConResPuts(StdOut, IDS_STOP_HELP_3); return 1; } } hManager = OpenSCManagerW(NULL, SERVICES_ACTIVE_DATABASE, SC_MANAGER_ENUMERATE_SERVICE); if (hManager == NULL) { dwError = GetLastError(); nError = 1; goto done; } hService = OpenServiceW(hManager, argv[2], SERVICE_STOP); if (hService == NULL) { dwError = GetLastError(); nError = 1; goto done; } if (!ControlService(hService, SERVICE_CONTROL_STOP, &ServiceStatus)) { dwError = GetLastError(); nError = 1; goto done; } done: if (hService != NULL) CloseServiceHandle(hService); if (hManager != NULL) CloseServiceHandle(hManager); if (dwError != ERROR_SUCCESS) { /* FIXME: Print proper error message */ ConPrintf(StdErr, L"Error: %lu\n", dwError); } return nError; }
static INT DisplayWorkstationStatistics(VOID) { PWKSTA_INFO_100 WorkstationInfo = NULL; PSTAT_WORKSTATION_0 StatisticsInfo = NULL; LARGE_INTEGER LargeValue; FILETIME FileTime, LocalFileTime; SYSTEMTIME SystemTime; WORD wHour; INT nPaddedLength = 47; NET_API_STATUS Status; Status = NetWkstaGetInfo(NULL, 100, (PBYTE*)&WorkstationInfo); if (Status != NERR_Success) goto done; Status = NetStatisticsGet(NULL, SERVICE_SERVER, 0, 0, (LPBYTE*)&StatisticsInfo); if (Status != NERR_Success) goto done; PrintMessageStringV(4623, WorkstationInfo->wki100_computername); ConPrintf(StdOut, L"\n\n"); RtlSecondsSince1970ToTime(StatisticsInfo->StatisticsStartTime.u.LowPart, &LargeValue); FileTime.dwLowDateTime = LargeValue.u.LowPart; FileTime.dwHighDateTime = LargeValue.u.HighPart; FileTimeToLocalFileTime(&FileTime, &LocalFileTime); FileTimeToSystemTime(&LocalFileTime, &SystemTime); wHour = SystemTime.wHour; if (wHour == 0) { wHour = 12; } else if (wHour > 12) { wHour = wHour - 12; } PrintMessageString(4600); ConPrintf(StdOut, L" %d/%d/%d %d:%02d %s\n\n\n", SystemTime.wMonth, SystemTime.wDay, SystemTime.wYear, wHour, SystemTime.wMinute, (SystemTime.wHour >= 1 && SystemTime.wHour < 13) ? L"AM" : L"PM"); PrintPaddedMessageString(4630, nPaddedLength); ConPrintf(StdOut, L"%I64u\n", StatisticsInfo->BytesReceived.QuadPart); PrintPaddedMessageString(4631, nPaddedLength); ConPrintf(StdOut, L"%I64u\n", StatisticsInfo->SmbsReceived.QuadPart); PrintPaddedMessageString(4632, nPaddedLength); ConPrintf(StdOut, L"%I64u\n", StatisticsInfo->BytesTransmitted.QuadPart); PrintPaddedMessageString(4633, nPaddedLength); ConPrintf(StdOut, L"%I64u\n", StatisticsInfo->SmbsTransmitted.QuadPart); PrintPaddedMessageString(4634, nPaddedLength); ConPrintf(StdOut, L"%lu\n", StatisticsInfo->ReadOperations); PrintPaddedMessageString(4635, nPaddedLength); ConPrintf(StdOut, L"%lu\n", StatisticsInfo->WriteOperations); PrintPaddedMessageString(4636, nPaddedLength); ConPrintf(StdOut, L"%lu\n", StatisticsInfo->RawReadsDenied); PrintPaddedMessageString(4637, nPaddedLength); ConPrintf(StdOut, L"%lu\n\n", StatisticsInfo->RawWritesDenied); PrintPaddedMessageString(4638, nPaddedLength); ConPrintf(StdOut, L"%lu\n", StatisticsInfo->NetworkErrors); PrintPaddedMessageString(4639, nPaddedLength); ConPrintf(StdOut, L"%lu\n", StatisticsInfo->CoreConnects + StatisticsInfo->Lanman20Connects + StatisticsInfo->Lanman21Connects + StatisticsInfo->LanmanNtConnects); PrintPaddedMessageString(4640, nPaddedLength); ConPrintf(StdOut, L"%lu\n", StatisticsInfo->Reconnects); PrintPaddedMessageString(4641, nPaddedLength); ConPrintf(StdOut, L"%lu\n\n", StatisticsInfo->ServerDisconnects); PrintPaddedMessageString(4642, nPaddedLength); ConPrintf(StdOut, L"%lu\n", StatisticsInfo->Sessions); PrintPaddedMessageString(4643, nPaddedLength); ConPrintf(StdOut, L"%lu\n", StatisticsInfo->HungSessions); PrintPaddedMessageString(4644, nPaddedLength); ConPrintf(StdOut, L"%lu\n", StatisticsInfo->FailedSessions); PrintPaddedMessageString(4645, nPaddedLength); ConPrintf(StdOut, L"%lu\n", StatisticsInfo->InitiallyFailedOperations + StatisticsInfo->FailedCompletionOperations); PrintPaddedMessageString(4646, nPaddedLength); ConPrintf(StdOut, L"%lu\n", StatisticsInfo->UseCount); PrintPaddedMessageString(4647, nPaddedLength); ConPrintf(StdOut, L"%lu\n\n", StatisticsInfo->FailedUseCount); done: if (StatisticsInfo != NULL) NetApiBufferFree(StatisticsInfo); if (WorkstationInfo != NULL) NetApiBufferFree(WorkstationInfo); return 0; }
INT cmdUser( INT argc, WCHAR **argv) { INT i, j; INT result = 0; BOOL bAdd = FALSE; BOOL bDelete = FALSE; #if 0 BOOL bDomain = FALSE; #endif BOOL bRandomPassword = FALSE; LPWSTR lpUserName = NULL; LPWSTR lpPassword = NULL; PUSER_INFO_4 pUserInfo = NULL; USER_INFO_4 UserInfo; LPWSTR pWorkstations = NULL; LPWSTR p; LPWSTR endptr; DWORD value; BOOL bPasswordAllocated = FALSE; NET_API_STATUS Status; i = 2; if ((i < argc) && (argv[i][0] != L'/')) { lpUserName = argv[i]; // ConPrintf(StdOut, L"User: %s\n", lpUserName); i++; } if ((i < argc) && (argv[i][0] != L'/')) { lpPassword = argv[i]; // ConPrintf(StdOut, L"Password: %s\n", lpPassword); i++; } for (j = i; j < argc; j++) { if (_wcsicmp(argv[j], L"/help") == 0) { PrintNetMessage(MSG_USER_HELP); return 0; } else if (_wcsicmp(argv[j], L"/add") == 0) { bAdd = TRUE; } else if (_wcsicmp(argv[j], L"/delete") == 0) { bDelete = TRUE; } else if (_wcsicmp(argv[j], L"/domain") == 0) { ConPuts(StdErr, L"The /DOMAIN option is not supported yet.\n"); #if 0 bDomain = TRUE; #endif } else if (_wcsicmp(argv[j], L"/random") == 0) { bRandomPassword = TRUE; GenerateRandomPassword(&lpPassword, &bPasswordAllocated); } } if (lpUserName == NULL && lpPassword == NULL) { Status = EnumerateUsers(); ConPrintf(StdOut, L"Status: %lu\n", Status); return 0; } else if (lpUserName != NULL && lpPassword == NULL) { Status = DisplayUser(lpUserName); ConPrintf(StdOut, L"Status: %lu\n", Status); return 0; } if (bAdd && bDelete) { result = 1; goto done; } /* Interactive password input */ if (lpPassword != NULL && wcscmp(lpPassword, L"*") == 0) { ReadPassword(&lpPassword, &bPasswordAllocated); } if (!bAdd && !bDelete) { /* Modify the user */ Status = NetUserGetInfo(NULL, lpUserName, 4, (LPBYTE*)&pUserInfo); if (Status != NERR_Success) { ConPrintf(StdOut, L"Status: %lu\n", Status); result = 1; goto done; } } else if (bAdd && !bDelete) { /* Add the user */ ZeroMemory(&UserInfo, sizeof(USER_INFO_4)); UserInfo.usri4_name = lpUserName; UserInfo.usri4_password = lpPassword; UserInfo.usri4_flags = UF_SCRIPT | UF_NORMAL_ACCOUNT; UserInfo.usri4_acct_expires = TIMEQ_FOREVER; UserInfo.usri4_primary_group_id = DOMAIN_GROUP_RID_USERS; pUserInfo = &UserInfo; } for (j = i; j < argc; j++) { if (_wcsnicmp(argv[j], L"/active:", 8) == 0) { p = &argv[i][8]; if (_wcsicmp(p, L"yes") == 0) { pUserInfo->usri4_flags &= ~UF_ACCOUNTDISABLE; } else if (_wcsicmp(p, L"no") == 0) { pUserInfo->usri4_flags |= UF_ACCOUNTDISABLE; } else { PrintMessageStringV(3952, L"/ACTIVE"); result = 1; goto done; } } else if (_wcsnicmp(argv[j], L"/comment:", 9) == 0) { pUserInfo->usri4_comment = &argv[j][9]; } else if (_wcsnicmp(argv[j], L"/countrycode:", 13) == 0) { p = &argv[i][13]; value = wcstoul(p, &endptr, 10); if (*endptr != 0) { PrintMessageStringV(3952, L"/COUNTRYCODE"); result = 1; goto done; } /* Verify the country code */ if (GetCountryFromCountryCode(value, 0, NULL)) pUserInfo->usri4_country_code = value; } else if (_wcsnicmp(argv[j], L"/expires:", 9) == 0) { p = &argv[i][9]; if (_wcsicmp(p, L"never") == 0) { pUserInfo->usri4_acct_expires = TIMEQ_FOREVER; } else if (!ParseDate(p, &pUserInfo->usri4_acct_expires)) { PrintMessageStringV(3952, L"/EXPIRES"); result = 1; goto done; } } else if (_wcsnicmp(argv[j], L"/fullname:", 10) == 0) { pUserInfo->usri4_full_name = &argv[j][10]; } else if (_wcsnicmp(argv[j], L"/homedir:", 9) == 0) { pUserInfo->usri4_home_dir = &argv[j][9]; } else if (_wcsnicmp(argv[j], L"/passwordchg:", 13) == 0) { p = &argv[i][13]; if (_wcsicmp(p, L"yes") == 0) { pUserInfo->usri4_flags &= ~UF_PASSWD_CANT_CHANGE; } else if (_wcsicmp(p, L"no") == 0) { pUserInfo->usri4_flags |= UF_PASSWD_CANT_CHANGE; } else { PrintMessageStringV(3952, L"/PASSWORDCHG"); result = 1; goto done; } } else if (_wcsnicmp(argv[j], L"/passwordreq:", 13) == 0) { p = &argv[i][13]; if (_wcsicmp(p, L"yes") == 0) { pUserInfo->usri4_flags &= ~UF_PASSWD_NOTREQD; } else if (_wcsicmp(p, L"no") == 0) { pUserInfo->usri4_flags |= UF_PASSWD_NOTREQD; } else { PrintMessageStringV(3952, L"/PASSWORDREQ"); result = 1; goto done; } } else if (_wcsnicmp(argv[j], L"/profilepath:", 13) == 0) { pUserInfo->usri4_profile = &argv[j][13]; } else if (_wcsnicmp(argv[j], L"/scriptpath:", 12) == 0) { pUserInfo->usri4_script_path = &argv[j][12]; } else if (_wcsnicmp(argv[j], L"/times:", 7) == 0) { /* FIXME */ ConPuts(StdErr, L"The /TIMES option is not supported yet.\n"); } else if (_wcsnicmp(argv[j], L"/usercomment:", 13) == 0) { pUserInfo->usri4_usr_comment = &argv[j][13]; } else if (_wcsnicmp(argv[j], L"/workstations:", 14) == 0) { p = &argv[i][14]; if (wcscmp(p, L"*") == 0 || wcscmp(p, L"") == 0) { pUserInfo->usri4_workstations = NULL; } else { Status = BuildWorkstationsList(&pWorkstations, p); if (Status == NERR_Success) { pUserInfo->usri4_workstations = pWorkstations; } else { ConPrintf(StdOut, L"Status %lu\n\n", Status); result = 1; goto done; } } } } if (!bAdd && !bDelete) { /* Modify the user */ Status = NetUserSetInfo(NULL, lpUserName, 4, (LPBYTE)pUserInfo, NULL); ConPrintf(StdOut, L"Status: %lu\n", Status); } else if (bAdd && !bDelete) { /* Add the user */ Status = NetUserAdd(NULL, 4, (LPBYTE)pUserInfo, NULL); ConPrintf(StdOut, L"Status: %lu\n", Status); } else if (!bAdd && bDelete) { /* Delete the user */ Status = NetUserDel(NULL, lpUserName); ConPrintf(StdOut, L"Status: %lu\n", Status); } if (Status == NERR_Success && lpPassword != NULL && bRandomPassword == TRUE) { PrintMessageStringV(3968, lpUserName, lpPassword); } done: if (pWorkstations != NULL) HeapFree(GetProcessHeap(), 0, pWorkstations); if ((bPasswordAllocated == TRUE) && (lpPassword != NULL)) HeapFree(GetProcessHeap(), 0, lpPassword); if (!bAdd && !bDelete && pUserInfo != NULL) NetApiBufferFree(pUserInfo); if (result != 0) { PrintMessageString(4381); ConPuts(StdOut, L"\n"); PrintNetMessage(MSG_USER_SYNTAX); } return result; }
static INT DisplayWorkstationConfig(VOID) { PWKSTA_INFO_100 WorkstationInfo = NULL; PWKSTA_USER_INFO_1 UserInfo = NULL; PWKSTA_TRANSPORT_INFO_0 TransportInfo = NULL; DWORD dwRead = 0, dwTotal = 0, i; INT nPaddedLength = 38; NET_API_STATUS Status; Status = NetWkstaGetInfo(NULL, 100, (PBYTE*)&WorkstationInfo); if (Status != NERR_Success) goto done; Status = NetWkstaUserGetInfo(NULL, 1, (PBYTE*)&UserInfo); if (Status != NERR_Success) goto done; Status = NetWkstaTransportEnum(NULL, 0, (PBYTE*)&TransportInfo, MAX_PREFERRED_LENGTH, &dwRead, &dwTotal, NULL); if (Status != NERR_Success) goto done; PrintPaddedMessageString(4450, nPaddedLength); ConPrintf(StdOut, L"\\\\%s\n", WorkstationInfo->wki100_computername); PrintPaddedMessageString(4468, nPaddedLength); ConPuts(StdOut, L"...\n"); PrintPaddedMessageString(4451, nPaddedLength); ConPrintf(StdOut, L"%s\n", UserInfo->wkui1_username); ConPuts(StdOut, L"\n"); PrintPaddedMessageString(4453, nPaddedLength); ConPuts(StdOut, L"\n"); for (i = 0; i < dwRead; i++) { ConPrintf(StdOut, L" %s (%s)\n", &TransportInfo[i].wkti0_transport_name[8], TransportInfo[i].wkti0_transport_address); } ConPuts(StdOut, L"\n"); PrintPaddedMessageString(4452, nPaddedLength); ConPrintf(StdOut, L"%lu.%lu\n", WorkstationInfo->wki100_ver_major, WorkstationInfo->wki100_ver_minor); ConPuts(StdOut, L"\n"); PrintPaddedMessageString(4455, nPaddedLength); ConPrintf(StdOut, L"%s\n", WorkstationInfo->wki100_langroup); PrintPaddedMessageString(4469, nPaddedLength); ConPuts(StdOut, L"...\n"); PrintPaddedMessageString(4456, nPaddedLength); ConPrintf(StdOut, L"%s\n", UserInfo->wkui1_logon_domain); ConPuts(StdOut, L"\n"); PrintPaddedMessageString(4458, nPaddedLength); ConPuts(StdOut, L"...\n"); PrintPaddedMessageString(4459, nPaddedLength); ConPuts(StdOut, L"...\n"); PrintPaddedMessageString(4460, nPaddedLength); ConPuts(StdOut, L"...\n"); done: if (TransportInfo != NULL) NetApiBufferFree(TransportInfo); if (UserInfo != NULL) NetApiBufferFree(UserInfo); if (WorkstationInfo != NULL) NetApiBufferFree(WorkstationInfo); return 0; }
INT ConPrintfPaging(BOOL NewPage, LPTSTR szFormat, va_list arg_ptr, DWORD nStdHandle) { INT len; CONSOLE_SCREEN_BUFFER_INFO csbi; TCHAR szOut[OUTPUT_BUFFER_SIZE]; DWORD dwWritten; HANDLE hOutput = GetStdHandle(nStdHandle); /* used to count number of lines since last pause */ static int LineCount = 0; /* used to see how big the screen is */ int ScreenLines = 0; /* chars since start of line */ int CharSL; int from = 0, i = 0; if(NewPage == TRUE) LineCount = 0; /* rest LineCount and return if no string have been given */ if (szFormat == NULL) return 0; //get the size of the visual screen that can be printed too if (!GetConsoleScreenBufferInfo(hOutput, &csbi)) { // we assuming its a file handle ConPrintf(szFormat, arg_ptr, nStdHandle); return 0; } //subtract 2 to account for "press any key..." and for the blank line at the end of PagePrompt() ScreenLines = (csbi.srWindow.Bottom - csbi.srWindow.Top) - 4; CharSL = csbi.dwCursorPosition.X; //make sure they didnt make the screen to small if(ScreenLines<4) { ConPrintf(szFormat, arg_ptr, nStdHandle); return 0; } len = _vstprintf (szOut, szFormat, arg_ptr); while (i < len) { // Search until the end of a line is reached if (szOut[i++] != _T('\n') && ++CharSL < csbi.dwSize.X) continue; LineCount++; CharSL=0; if(LineCount >= ScreenLines) { WriteConsole(hOutput, &szOut[from], i-from, &dwWritten, NULL); from = i; if(PagePrompt() != PROMPT_YES) { return 1; } //reset the number of lines being printed LineCount = 0; } } WriteConsole(hOutput, &szOut[from], i-from, &dwWritten, NULL); return 0; }
static NET_API_STATUS DisplayUser(LPWSTR lpUserName) { PUSER_MODALS_INFO_0 pUserModals = NULL; PUSER_INFO_4 pUserInfo = NULL; PLOCALGROUP_USERS_INFO_0 pLocalGroupInfo = NULL; PGROUP_USERS_INFO_0 pGroupInfo = NULL; DWORD dwLocalGroupRead, dwLocalGroupTotal; DWORD dwGroupRead, dwGroupTotal; DWORD dwLastSet; DWORD i; INT nPaddedLength = 29; NET_API_STATUS Status; /* Modify the user */ Status = NetUserGetInfo(NULL, lpUserName, 4, (LPBYTE*)&pUserInfo); if (Status != NERR_Success) return Status; Status = NetUserModalsGet(NULL, 0, (LPBYTE*)&pUserModals); if (Status != NERR_Success) goto done; Status = NetUserGetLocalGroups(NULL, lpUserName, 0, 0, (LPBYTE*)&pLocalGroupInfo, MAX_PREFERRED_LENGTH, &dwLocalGroupRead, &dwLocalGroupTotal); if (Status != NERR_Success) goto done; Status = NetUserGetGroups(NULL, lpUserName, 0, (LPBYTE*)&pGroupInfo, MAX_PREFERRED_LENGTH, &dwGroupRead, &dwGroupTotal); if (Status != NERR_Success) goto done; PrintPaddedResourceString(IDS_USER_NAME, nPaddedLength); ConPrintf(StdOut, L"%s\n", pUserInfo->usri4_name); PrintPaddedResourceString(IDS_USER_FULL_NAME, nPaddedLength); ConPrintf(StdOut, L"%s\n", pUserInfo->usri4_full_name); PrintPaddedResourceString(IDS_USER_COMMENT, nPaddedLength); ConPrintf(StdOut, L"%s\n", pUserInfo->usri4_comment); PrintPaddedResourceString(IDS_USER_USER_COMMENT, nPaddedLength); ConPrintf(StdOut, L"%s\n", pUserInfo->usri4_usr_comment); PrintPaddedResourceString(IDS_USER_COUNTRY_CODE, nPaddedLength); ConPrintf(StdOut, L"%03ld ()\n", pUserInfo->usri4_country_code); PrintPaddedResourceString(IDS_USER_ACCOUNT_ACTIVE, nPaddedLength); if (pUserInfo->usri4_flags & UF_ACCOUNTDISABLE) ConResPuts(StdOut, IDS_GENERIC_NO); else if (pUserInfo->usri4_flags & UF_LOCKOUT) ConResPuts(StdOut, IDS_GENERIC_LOCKED); else ConResPuts(StdOut, IDS_GENERIC_YES); ConPuts(StdOut, L"\n"); PrintPaddedResourceString(IDS_USER_ACCOUNT_EXPIRES, nPaddedLength); if (pUserInfo->usri4_acct_expires == TIMEQ_FOREVER) ConResPuts(StdOut, IDS_GENERIC_NEVER); else PrintDateTime(pUserInfo->usri4_acct_expires); ConPuts(StdOut, L"\n\n"); PrintPaddedResourceString(IDS_USER_PW_LAST_SET, nPaddedLength); dwLastSet = GetTimeInSeconds() - pUserInfo->usri4_password_age; PrintDateTime(dwLastSet); PrintPaddedResourceString(IDS_USER_PW_EXPIRES, nPaddedLength); if ((pUserInfo->usri4_flags & UF_DONT_EXPIRE_PASSWD) || pUserModals->usrmod0_max_passwd_age == TIMEQ_FOREVER) ConResPuts(StdOut, IDS_GENERIC_NEVER); else PrintDateTime(dwLastSet + pUserModals->usrmod0_max_passwd_age); ConPuts(StdOut, L"\n"); PrintPaddedResourceString(IDS_USER_PW_CHANGEABLE, nPaddedLength); PrintDateTime(dwLastSet + pUserModals->usrmod0_min_passwd_age); PrintPaddedResourceString(IDS_USER_PW_REQUIRED, nPaddedLength); ConResPuts(StdOut, (pUserInfo->usri4_flags & UF_PASSWD_NOTREQD) ? IDS_GENERIC_NO : IDS_GENERIC_YES); ConPuts(StdOut, L"\n"); PrintPaddedResourceString(IDS_USER_CHANGE_PW, nPaddedLength); ConResPuts(StdOut, (pUserInfo->usri4_flags & UF_PASSWD_CANT_CHANGE) ? IDS_GENERIC_NO : IDS_GENERIC_YES); ConPuts(StdOut, L"\n\n"); PrintPaddedResourceString(IDS_USER_WORKSTATIONS, nPaddedLength); if (pUserInfo->usri4_workstations == NULL || wcslen(pUserInfo->usri4_workstations) == 0) ConResPuts(StdOut, IDS_GENERIC_ALL); else ConPrintf(StdOut, L"%s", pUserInfo->usri4_workstations); ConPuts(StdOut, L"\n"); PrintPaddedResourceString(IDS_USER_LOGON_SCRIPT, nPaddedLength); ConPrintf(StdOut, L"%s\n", pUserInfo->usri4_script_path); PrintPaddedResourceString(IDS_USER_PROFILE, nPaddedLength); ConPrintf(StdOut, L"%s\n", pUserInfo->usri4_profile); PrintPaddedResourceString(IDS_USER_HOME_DIR, nPaddedLength); ConPrintf(StdOut, L"%s\n", pUserInfo->usri4_home_dir); PrintPaddedResourceString(IDS_USER_LAST_LOGON, nPaddedLength); if (pUserInfo->usri4_last_logon == 0) ConResPuts(StdOut, IDS_GENERIC_NEVER); else PrintDateTime(pUserInfo->usri4_last_logon); ConPuts(StdOut, L"\n\n"); PrintPaddedResourceString(IDS_USER_LOGON_HOURS, nPaddedLength); if (pUserInfo->usri4_logon_hours == NULL) ConResPuts(StdOut, IDS_GENERIC_ALL); ConPuts(StdOut, L"\n\n"); ConPuts(StdOut, L"\n"); PrintPaddedResourceString(IDS_USER_LOCAL_GROUPS, nPaddedLength); if (dwLocalGroupTotal != 0 && pLocalGroupInfo != NULL) { for (i = 0; i < dwLocalGroupTotal; i++) { if (i != 0) PrintPadding(L' ', nPaddedLength); ConPrintf(StdOut, L"*%s\n", pLocalGroupInfo[i].lgrui0_name); } } else { ConPuts(StdOut, L"\n"); } PrintPaddedResourceString(IDS_USER_GLOBAL_GROUPS, nPaddedLength); if (dwGroupTotal != 0 && pGroupInfo != NULL) { for (i = 0; i < dwGroupTotal; i++) { if (i != 0) PrintPadding(L' ', nPaddedLength); ConPrintf(StdOut, L"*%s\n", pGroupInfo[i].grui0_name); } } else { ConPuts(StdOut, L"\n"); } done: if (pGroupInfo != NULL) NetApiBufferFree(pGroupInfo); if (pLocalGroupInfo != NULL) NetApiBufferFree(pLocalGroupInfo); if (pUserModals != NULL) NetApiBufferFree(pUserModals); if (pUserInfo != NULL) NetApiBufferFree(pUserInfo); return NERR_Success; }
//---------------------------------------------------------------------- // // Writes the last error as both text and error code to the console. // //---------------------------------------------------------------------- VOID DisplayError(DWORD dwError) { ConMsgPuts(StdErr, FORMAT_MESSAGE_FROM_SYSTEM, NULL, dwError, LANG_USER_DEFAULT); ConPrintf(StdErr, L"Error code: %lu\n", dwError); }
VOID PrintErrorMessage( DWORD dwError) { WCHAR szErrorBuffer[16]; PWSTR pBuffer; PWSTR pErrorInserts[2] = {NULL, NULL}; if (dwError >= MIN_LANMAN_MESSAGE_ID && dwError <= MAX_LANMAN_MESSAGE_ID) { FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_IGNORE_INSERTS, hModuleNetMsg, dwError, LANG_USER_DEFAULT, (LPWSTR)&pBuffer, 0, NULL); if (pBuffer) { ConPrintf(StdErr, L"%s\n", pBuffer); LocalFree(pBuffer); pBuffer = NULL; } } else { FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dwError, LANG_USER_DEFAULT, (LPWSTR)&pBuffer, 0, NULL); if (pBuffer) { ConPrintf(StdErr, L"%s\n", pBuffer); LocalFree(pBuffer); pBuffer = NULL; } } if (dwError != ERROR_SUCCESS) { /* Format insert for the 3514 message */ swprintf(szErrorBuffer, L"%lu", dwError); pErrorInserts[0] = szErrorBuffer; /* Format and print the 3514 message */ FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_HMODULE | FORMAT_MESSAGE_ARGUMENT_ARRAY, hModuleNetMsg, 3514, LANG_USER_DEFAULT, (LPWSTR)&pBuffer, 0, (va_list *)pErrorInserts); if (pBuffer) { ConPrintf(StdErr, L"%s\n", pBuffer); LocalFree(pBuffer); pBuffer = NULL; } } }
static NET_API_STATUS DisplayUser(LPWSTR lpUserName) { PUSER_MODALS_INFO_0 pUserModals = NULL; PUSER_INFO_4 pUserInfo = NULL; PLOCALGROUP_USERS_INFO_0 pLocalGroupInfo = NULL; PGROUP_USERS_INFO_0 pGroupInfo = NULL; DWORD dwLocalGroupRead, dwLocalGroupTotal; DWORD dwGroupRead, dwGroupTotal; DWORD dwLastSet; DWORD i; WCHAR szCountry[40]; INT nPaddedLength = 36; NET_API_STATUS Status; /* Modify the user */ Status = NetUserGetInfo(NULL, lpUserName, 4, (LPBYTE*)&pUserInfo); if (Status != NERR_Success) return Status; Status = NetUserModalsGet(NULL, 0, (LPBYTE*)&pUserModals); if (Status != NERR_Success) goto done; Status = NetUserGetLocalGroups(NULL, lpUserName, 0, 0, (LPBYTE*)&pLocalGroupInfo, MAX_PREFERRED_LENGTH, &dwLocalGroupRead, &dwLocalGroupTotal); if (Status != NERR_Success) goto done; Status = NetUserGetGroups(NULL, lpUserName, 0, (LPBYTE*)&pGroupInfo, MAX_PREFERRED_LENGTH, &dwGroupRead, &dwGroupTotal); if (Status != NERR_Success) goto done; PrintPaddedMessageString(4411, nPaddedLength); ConPrintf(StdOut, L"%s\n", pUserInfo->usri4_name); PrintPaddedMessageString(4412, nPaddedLength); ConPrintf(StdOut, L"%s\n", pUserInfo->usri4_full_name); PrintPaddedMessageString(4413, nPaddedLength); ConPrintf(StdOut, L"%s\n", pUserInfo->usri4_comment); PrintPaddedMessageString(4414, nPaddedLength); ConPrintf(StdOut, L"%s\n", pUserInfo->usri4_usr_comment); PrintPaddedMessageString(4416, nPaddedLength); GetCountryFromCountryCode(pUserInfo->usri4_country_code, ARRAYSIZE(szCountry), szCountry); ConPrintf(StdOut, L"%03ld (%s)\n", pUserInfo->usri4_country_code, szCountry); PrintPaddedMessageString(4419, nPaddedLength); if (pUserInfo->usri4_flags & UF_ACCOUNTDISABLE) PrintMessageString(4301); else if (pUserInfo->usri4_flags & UF_LOCKOUT) PrintMessageString(4440); else PrintMessageString(4300); ConPuts(StdOut, L"\n"); PrintPaddedMessageString(4420, nPaddedLength); if (pUserInfo->usri4_acct_expires == TIMEQ_FOREVER) PrintMessageString(4305); else PrintDateTime(pUserInfo->usri4_acct_expires); ConPuts(StdOut, L"\n\n"); PrintPaddedMessageString(4421, nPaddedLength); dwLastSet = GetTimeInSeconds() - pUserInfo->usri4_password_age; PrintDateTime(dwLastSet); ConPuts(StdOut, L"\n"); PrintPaddedMessageString(4422, nPaddedLength); if ((pUserInfo->usri4_flags & UF_DONT_EXPIRE_PASSWD) || pUserModals->usrmod0_max_passwd_age == TIMEQ_FOREVER) PrintMessageString(4305); else PrintDateTime(dwLastSet + pUserModals->usrmod0_max_passwd_age); ConPuts(StdOut, L"\n"); PrintPaddedMessageString(4423, nPaddedLength); PrintDateTime(dwLastSet + pUserModals->usrmod0_min_passwd_age); ConPuts(StdOut, L"\n"); PrintPaddedMessageString(4437, nPaddedLength); PrintMessageString((pUserInfo->usri4_flags & UF_PASSWD_NOTREQD) ? 4301 : 4300); ConPuts(StdOut, L"\n"); PrintPaddedMessageString(4438, nPaddedLength); PrintMessageString((pUserInfo->usri4_flags & UF_PASSWD_CANT_CHANGE) ? 4301 : 4300); ConPuts(StdOut, L"\n\n"); PrintPaddedMessageString(4424, nPaddedLength); if (pUserInfo->usri4_workstations == NULL || wcslen(pUserInfo->usri4_workstations) == 0) PrintMessageString(4302); else ConPrintf(StdOut, L"%s", pUserInfo->usri4_workstations); ConPuts(StdOut, L"\n"); PrintPaddedMessageString(4429, nPaddedLength); ConPrintf(StdOut, L"%s\n", pUserInfo->usri4_script_path); PrintPaddedMessageString(4439, nPaddedLength); ConPrintf(StdOut, L"%s\n", pUserInfo->usri4_profile); PrintPaddedMessageString(4436, nPaddedLength); ConPrintf(StdOut, L"%s\n", pUserInfo->usri4_home_dir); PrintPaddedMessageString(4430, nPaddedLength); if (pUserInfo->usri4_last_logon == 0) PrintMessageString(4305); else PrintDateTime(pUserInfo->usri4_last_logon); ConPuts(StdOut, L"\n\n"); PrintPaddedMessageString(4432, nPaddedLength); if (pUserInfo->usri4_logon_hours == NULL) PrintMessageString(4302); ConPuts(StdOut, L"\n\n"); ConPuts(StdOut, L"\n"); PrintPaddedMessageString(4427, nPaddedLength); if (dwLocalGroupTotal != 0 && pLocalGroupInfo != NULL) { for (i = 0; i < dwLocalGroupTotal; i++) { if (i != 0) PrintPadding(L' ', nPaddedLength); ConPrintf(StdOut, L"*%s\n", pLocalGroupInfo[i].lgrui0_name); } } else { ConPuts(StdOut, L"\n"); } PrintPaddedMessageString(4431, nPaddedLength); if (dwGroupTotal != 0 && pGroupInfo != NULL) { for (i = 0; i < dwGroupTotal; i++) { if (i != 0) PrintPadding(L' ', nPaddedLength); ConPrintf(StdOut, L"*%s\n", pGroupInfo[i].grui0_name); } } else { ConPuts(StdOut, L"\n"); } done: if (pGroupInfo != NULL) NetApiBufferFree(pGroupInfo); if (pLocalGroupInfo != NULL) NetApiBufferFree(pLocalGroupInfo); if (pUserModals != NULL) NetApiBufferFree(pUserModals); if (pUserInfo != NULL) NetApiBufferFree(pUserInfo); return NERR_Success; }
static INT DisplayServerConfig( PSERVER_INFO_102 ServerInfo) { PSERVER_TRANSPORT_INFO_0 TransportInfo = NULL; DWORD dwRead, dwTotal, i; INT nPaddedLength = 38; NET_API_STATUS Status; Status = NetServerTransportEnum(NULL, 0, (PBYTE*)&TransportInfo, MAX_PREFERRED_LENGTH, &dwRead, &dwTotal, NULL); if (Status != NERR_Success) goto done; PrintPaddedMessageString(4481, nPaddedLength); ConPrintf(StdOut, L"\\\\%s\n", ServerInfo->sv102_name); PrintPaddedMessageString(4482, nPaddedLength); ConPrintf(StdOut, L"%s\n\n", ServerInfo->sv102_comment); PrintPaddedMessageString(4484, nPaddedLength); ConPrintf(StdOut, L"%lu.%lu\n", ServerInfo->sv102_version_major, ServerInfo->sv102_version_minor); PrintPaddedMessageString(4489, nPaddedLength); ConPuts(StdOut, L"\n"); for (i = 0; i < dwRead; i++) { ConPrintf(StdOut, L" %s (%s)\n", &TransportInfo[i].svti0_transportname[8], TransportInfo[i].svti0_networkaddress); } ConPuts(StdOut, L"\n"); PrintPaddedMessageString(4492, nPaddedLength); PrintMessageString((ServerInfo->sv102_hidden == SV_HIDDEN) ? 4300 : 4301); ConPuts(StdOut, L"\n"); PrintPaddedMessageString(4506, nPaddedLength); ConPrintf(StdOut, L"%lu\n", ServerInfo->sv102_users); PrintPaddedMessageString(4511, nPaddedLength); ConPuts(StdOut, L"...\n\n"); PrintPaddedMessageString(4520, nPaddedLength); if (ServerInfo->sv102_disc == SV_NODISC) PrintMessageString(4306); else ConPrintf(StdOut, L"%lu\n", ServerInfo->sv102_disc); done: if (TransportInfo != NULL) NetApiBufferFree(TransportInfo); return 0; }
INT cmdUser( INT argc, WCHAR **argv) { INT i, j; INT result = 0; BOOL bAdd = FALSE; BOOL bDelete = FALSE; #if 0 BOOL bDomain = FALSE; #endif LPWSTR lpUserName = NULL; LPWSTR lpPassword = NULL; PUSER_INFO_4 pUserInfo = NULL; USER_INFO_4 UserInfo; LPWSTR p; LPWSTR endptr; DWORD value; BOOL bPasswordAllocated = FALSE; NET_API_STATUS Status; if (argc == 2) { Status = EnumerateUsers(); ConPrintf(StdOut, L"Status: %lu\n", Status); return 0; } else if (argc == 3) { Status = DisplayUser(argv[2]); ConPrintf(StdOut, L"Status: %lu\n", Status); return 0; } i = 2; if (argv[i][0] != L'/') { lpUserName = argv[i]; // ConPrintf(StdOut, L"User: %s\n", lpUserName); i++; } if (argv[i][0] != L'/') { lpPassword = argv[i]; // ConPrintf(StdOut, L"Password: %s\n", lpPassword); i++; } for (j = i; j < argc; j++) { if (_wcsicmp(argv[j], L"/help") == 0) { ConResPuts(StdOut, IDS_USER_HELP); return 0; } else if (_wcsicmp(argv[j], L"/add") == 0) { bAdd = TRUE; } else if (_wcsicmp(argv[j], L"/delete") == 0) { bDelete = TRUE; } else if (_wcsicmp(argv[j], L"/domain") == 0) { ConResPrintf(StdErr, IDS_ERROR_OPTION_NOT_SUPPORTED, L"/DOMAIN"); #if 0 bDomain = TRUE; #endif } } if (bAdd && bDelete) { result = 1; goto done; } /* Interactive password input */ if (lpPassword != NULL && wcscmp(lpPassword, L"*") == 0) { ReadPassword(&lpPassword, &bPasswordAllocated); } if (!bAdd && !bDelete) { /* Modify the user */ Status = NetUserGetInfo(NULL, lpUserName, 4, (LPBYTE*)&pUserInfo); if (Status != NERR_Success) { ConPrintf(StdOut, L"Status: %lu\n", Status); result = 1; goto done; } } else if (bAdd && !bDelete) { /* Add the user */ ZeroMemory(&UserInfo, sizeof(USER_INFO_4)); UserInfo.usri4_name = lpUserName; UserInfo.usri4_password = lpPassword; UserInfo.usri4_flags = UF_SCRIPT | UF_NORMAL_ACCOUNT; pUserInfo = &UserInfo; } for (j = i; j < argc; j++) { if (_wcsnicmp(argv[j], L"/active:", 8) == 0) { p = &argv[i][8]; if (_wcsicmp(p, L"yes") == 0) { pUserInfo->usri4_flags &= ~UF_ACCOUNTDISABLE; } else if (_wcsicmp(p, L"no") == 0) { pUserInfo->usri4_flags |= UF_ACCOUNTDISABLE; } else { ConResPrintf(StdErr, IDS_ERROR_INVALID_OPTION_VALUE, L"/ACTIVE"); result = 1; goto done; } } else if (_wcsnicmp(argv[j], L"/comment:", 9) == 0) { pUserInfo->usri4_comment = &argv[j][9]; } else if (_wcsnicmp(argv[j], L"/countrycode:", 13) == 0) { p = &argv[i][13]; value = wcstoul(p, &endptr, 10); if (*endptr != 0) { ConResPrintf(StdErr, IDS_ERROR_INVALID_OPTION_VALUE, L"/COUNTRYCODE"); result = 1; goto done; } /* FIXME: verify the country code */ pUserInfo->usri4_country_code = value; } else if (_wcsnicmp(argv[j], L"/expires:", 9) == 0) { p = &argv[i][9]; if (_wcsicmp(p, L"never") == 0) { pUserInfo->usri4_acct_expires = TIMEQ_FOREVER; } else { /* FIXME: Parse the date */ ConResPrintf(StdErr, IDS_ERROR_OPTION_NOT_SUPPORTED, L"/EXPIRES"); } } else if (_wcsnicmp(argv[j], L"/fullname:", 10) == 0) { pUserInfo->usri4_full_name = &argv[j][10]; } else if (_wcsnicmp(argv[j], L"/homedir:", 9) == 0) { pUserInfo->usri4_home_dir = &argv[j][9]; } else if (_wcsnicmp(argv[j], L"/passwordchg:", 13) == 0) { p = &argv[i][13]; if (_wcsicmp(p, L"yes") == 0) { pUserInfo->usri4_flags &= ~UF_PASSWD_CANT_CHANGE; } else if (_wcsicmp(p, L"no") == 0) { pUserInfo->usri4_flags |= UF_PASSWD_CANT_CHANGE; } else { ConResPrintf(StdErr, IDS_ERROR_INVALID_OPTION_VALUE, L"/PASSWORDCHG"); result = 1; goto done; } } else if (_wcsnicmp(argv[j], L"/passwordreq:", 13) == 0) { p = &argv[i][13]; if (_wcsicmp(p, L"yes") == 0) { pUserInfo->usri4_flags &= ~UF_PASSWD_NOTREQD; } else if (_wcsicmp(p, L"no") == 0) { pUserInfo->usri4_flags |= UF_PASSWD_NOTREQD; } else { ConResPrintf(StdErr, IDS_ERROR_INVALID_OPTION_VALUE, L"/PASSWORDREQ"); result = 1; goto done; } } else if (_wcsnicmp(argv[j], L"/profilepath:", 13) == 0) { pUserInfo->usri4_profile = &argv[j][13]; } else if (_wcsnicmp(argv[j], L"/scriptpath:", 12) == 0) { pUserInfo->usri4_script_path = &argv[j][12]; } else if (_wcsnicmp(argv[j], L"/times:", 7) == 0) { /* FIXME */ ConResPrintf(StdErr, IDS_ERROR_OPTION_NOT_SUPPORTED, L"/TIMES"); } else if (_wcsnicmp(argv[j], L"/usercomment:", 13) == 0) { pUserInfo->usri4_usr_comment = &argv[j][13]; } else if (_wcsnicmp(argv[j], L"/workstations:", 14) == 0) { /* FIXME */ ConResPrintf(StdErr, IDS_ERROR_OPTION_NOT_SUPPORTED, L"/WORKSTATIONS"); } } if (!bAdd && !bDelete) { /* Modify the user */ Status = NetUserSetInfo(NULL, lpUserName, 4, (LPBYTE)pUserInfo, NULL); ConPrintf(StdOut, L"Status: %lu\n", Status); } else if (bAdd && !bDelete) { /* Add the user */ Status = NetUserAdd(NULL, 4, (LPBYTE)pUserInfo, NULL); ConPrintf(StdOut, L"Status: %lu\n", Status); } else if (!bAdd && bDelete) { /* Delete the user */ Status = NetUserDel(NULL, lpUserName); ConPrintf(StdOut, L"Status: %lu\n", Status); } done: if (bPasswordAllocated == TRUE && lpPassword != NULL) HeapFree(GetProcessHeap(), 0, lpPassword); if (!bAdd && !bDelete && pUserInfo != NULL) NetApiBufferFree(pUserInfo); if (result != 0) ConResPuts(StdOut, IDS_USER_SYNTAX); return result; }
static INT DisplayServerStatistics(VOID) { PSERVER_INFO_100 ServerInfo = NULL; PSTAT_SERVER_0 StatisticsInfo = NULL; LARGE_INTEGER LargeValue; FILETIME FileTime, LocalFileTime; SYSTEMTIME SystemTime; WORD wHour; INT nPaddedLength = 35; NET_API_STATUS Status; Status = NetServerGetInfo(NULL, 100, (PBYTE*)&ServerInfo); if (Status != NERR_Success) goto done; Status = NetStatisticsGet(NULL, SERVICE_SERVER, 0, 0, (LPBYTE*)&StatisticsInfo); if (Status != NERR_Success) goto done; PrintMessageStringV(4624, ServerInfo->sv100_name); ConPrintf(StdOut, L"\n\n"); RtlSecondsSince1970ToTime(StatisticsInfo->sts0_start, &LargeValue); FileTime.dwLowDateTime = LargeValue.u.LowPart; FileTime.dwHighDateTime = LargeValue.u.HighPart; FileTimeToLocalFileTime(&FileTime, &LocalFileTime); FileTimeToSystemTime(&LocalFileTime, &SystemTime); wHour = SystemTime.wHour; if (wHour == 0) { wHour = 12; } else if (wHour > 12) { wHour = wHour - 12; } PrintMessageString(4600); ConPrintf(StdOut, L" %d/%d/%d %d:%02d %s\n\n\n", SystemTime.wMonth, SystemTime.wDay, SystemTime.wYear, wHour, SystemTime.wMinute, (SystemTime.wHour >= 1 && SystemTime.wHour < 13) ? L"AM" : L"PM"); PrintPaddedMessageString(4601, nPaddedLength); ConPrintf(StdOut, L"%lu\n", StatisticsInfo->sts0_sopens); PrintPaddedMessageString(4602, nPaddedLength); ConPrintf(StdOut, L"%lu\n", StatisticsInfo->sts0_stimedout); PrintPaddedMessageString(4603, nPaddedLength); ConPrintf(StdOut, L"%lu\n\n", StatisticsInfo->sts0_serrorout); LargeValue.u.LowPart = StatisticsInfo->sts0_bytessent_low; LargeValue.u.HighPart = StatisticsInfo->sts0_bytessent_high; PrintPaddedMessageString(4604, nPaddedLength); ConPrintf(StdOut, L"%I64u\n", LargeValue.QuadPart / 1024); LargeValue.u.LowPart = StatisticsInfo->sts0_bytesrcvd_low; LargeValue.u.HighPart = StatisticsInfo->sts0_bytesrcvd_high; PrintPaddedMessageString(4605, nPaddedLength); ConPrintf(StdOut, L"%I64u\n", LargeValue.QuadPart / 1024); PrintPaddedMessageString(4606, nPaddedLength); ConPrintf(StdOut, L"%lu\n\n", StatisticsInfo->sts0_avresponse); PrintPaddedMessageString(4610, nPaddedLength); ConPrintf(StdOut, L"%lu\n", StatisticsInfo->sts0_syserrors); PrintPaddedMessageString(4612, nPaddedLength); ConPrintf(StdOut, L"%lu\n", StatisticsInfo->sts0_permerrors); PrintPaddedMessageString(4611, nPaddedLength); ConPrintf(StdOut, L"%lu\n\n", StatisticsInfo->sts0_pwerrors); PrintPaddedMessageString(4608, nPaddedLength); ConPrintf(StdOut, L"%lu\n", StatisticsInfo->sts0_fopens); PrintPaddedMessageString(4613, nPaddedLength); ConPrintf(StdOut, L"%lu\n", StatisticsInfo->sts0_devopens); PrintPaddedMessageString(4609, nPaddedLength); ConPrintf(StdOut, L"%lu\n\n", StatisticsInfo->sts0_jobsqueued); PrintMessageString(4620); ConPrintf(StdOut, L"\n"); ConPrintf(StdOut, L" "); PrintPaddedMessageString(4621, nPaddedLength - 2); ConPrintf(StdOut, L"%lu\n", StatisticsInfo->sts0_bigbufneed); ConPrintf(StdOut, L" "); PrintPaddedMessageString(4622, nPaddedLength - 2); ConPrintf(StdOut, L"%lu\n\n", StatisticsInfo->sts0_reqbufneed); done: if (StatisticsInfo != NULL) NetApiBufferFree(StatisticsInfo); if (ServerInfo != NULL) NetApiBufferFree(ServerInfo); return 0; }