https://git.reactos.org/?p=reactos.git;a=commitdiff;h=58b5cdc77c6bfdd1cae53…
commit 58b5cdc77c6bfdd1cae53706f35e9b75162c045b
Author: Eric Kohl <eric.kohl(a)reactos.org>
AuthorDate: Sun Apr 8 20:04:11 2018 +0200
Commit: Eric Kohl <eric.kohl(a)reactos.org>
CommitDate: Sun Apr 8 21:27:05 2018 +0200
[NET] Add the NET STATISTICS command
---
base/applications/network/net/CMakeLists.txt | 1 +
base/applications/network/net/cmdStatistics.c | 195 ++++++++++++++++++++++++++
base/applications/network/net/help.c | 3 +-
base/applications/network/net/lang/en-US.rc | 16 ++-
base/applications/network/net/lang/es-ES.rc | 15 +-
base/applications/network/net/lang/ro-RO.rc | 15 +-
base/applications/network/net/lang/ru-RU.rc | 15 +-
base/applications/network/net/lang/tr-TR.rc | 15 +-
base/applications/network/net/lang/zh-CN.rc | 15 +-
base/applications/network/net/lang/zh-TW.rc | 15 +-
base/applications/network/net/main.c | 2 +-
base/applications/network/net/net.h | 1 +
base/applications/network/net/resource.h | 41 +++---
13 files changed, 308 insertions(+), 41 deletions(-)
diff --git a/base/applications/network/net/CMakeLists.txt b/base/applications/network/net/CMakeLists.txt
index d6ce980d1c..3555509fa9 100644
--- a/base/applications/network/net/CMakeLists.txt
+++ b/base/applications/network/net/CMakeLists.txt
@@ -12,6 +12,7 @@ list(APPEND SOURCE
cmdLocalGroup.c
cmdPause.c
cmdStart.c
+ cmdStatistics.c
cmdStop.c
cmdUse.c
cmdUser.c
diff --git a/base/applications/network/net/cmdStatistics.c b/base/applications/network/net/cmdStatistics.c
new file mode 100644
index 0000000000..7a048c06da
--- /dev/null
+++ b/base/applications/network/net/cmdStatistics.c
@@ -0,0 +1,195 @@
+/*
+ * COPYRIGHT: See COPYING in the top level directory
+ * PROJECT: ReactOS net command
+ * FILE: base/applications/network/net/cmdStatistics.c
+ * PROGRAMMERS: Eric Kohl <eric.kohl(a)reactos.org>
+ */
+
+#include "net.h"
+
+static
+INT
+DisplayServerStatistics(VOID)
+{
+ PSERVER_INFO_100 ServerInfo = NULL;
+ PSTAT_SERVER_0 StatisticsInfo = NULL;
+ LARGE_INTEGER LargeValue;
+ 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;
+
+ ConResPrintf(StdOut, IDS_STATISTICS_SERVER_NAME, ServerInfo->sv100_name);
+
+ printf("Statistik since %lu\n\n\n", StatisticsInfo->sts0_start);
+
+ printf("Sessions accepted %lu\n", StatisticsInfo->sts0_sopens);
+ printf("Sessions timed-out %lu\n", StatisticsInfo->sts0_stimedout);
+ printf("Sessions errored-out %lu\n\n", StatisticsInfo->sts0_serrorout);
+
+ LargeValue.u.LowPart = StatisticsInfo->sts0_bytessent_low;
+ LargeValue.u.HighPart = StatisticsInfo->sts0_bytessent_high;
+ printf("Kilobytes sent %I64u\n", LargeValue.QuadPart / 1024);
+
+ LargeValue.u.LowPart = StatisticsInfo->sts0_bytesrcvd_low;
+ LargeValue.u.HighPart = StatisticsInfo->sts0_bytesrcvd_high;
+ printf("Kilobytes received %I64u\n\n", LargeValue.QuadPart / 1024);
+
+ printf("Mean response time (msec) %lu\n\n", StatisticsInfo->sts0_avresponse);
+
+ printf("System errors %lu\n", StatisticsInfo->sts0_syserrors);
+ printf("Permission violations %lu\n", StatisticsInfo->sts0_permerrors);
+ printf("Password violations %lu\n\n", StatisticsInfo->sts0_pwerrors);
+
+ printf("Files accessed %lu\n", StatisticsInfo->sts0_fopens);
+ printf("Communication devices accessed %lu\n", StatisticsInfo->sts0_devopens);
+ printf("Print jobs spooled %lu\n\n", StatisticsInfo->sts0_jobsqueued);
+
+ printf("Times buffers exhausted\n\n");
+ printf(" Big buffers %lu\n", StatisticsInfo->sts0_bigbufneed);
+ printf(" Request buffers %lu\n\n", StatisticsInfo->sts0_reqbufneed);
+
+done:
+ if (StatisticsInfo != NULL)
+ NetApiBufferFree(StatisticsInfo);
+
+ if (ServerInfo != NULL)
+ NetApiBufferFree(ServerInfo);
+
+ return 0;
+}
+
+
+static
+INT
+DisplayWorkstationStatistics(VOID)
+{
+ PWKSTA_INFO_100 WorkstationInfo = NULL;
+ PSTAT_WORKSTATION_0 StatisticsInfo = NULL;
+ 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;
+
+ ConResPrintf(StdOut, IDS_STATISTICS_WORKSTATION_NAME, WorkstationInfo->wki100_computername);
+
+ printf("Statistik since %I64u\n\n\n", StatisticsInfo->StatisticsStartTime.QuadPart);
+
+ printf("Bytes received %I64u\n", StatisticsInfo->BytesReceived.QuadPart);
+ printf("Server Message Blocks (SMBs) received %I64u\n", StatisticsInfo->SmbsReceived.QuadPart);
+ printf("Bytes transmitted %I64u\n", StatisticsInfo->BytesTransmitted.QuadPart);
+ printf("Server Message Blocks (SMBs) transmitted %I64u\n", StatisticsInfo->SmbsTransmitted.QuadPart);
+ printf("Read operations %lu\n", StatisticsInfo->ReadOperations);
+ printf("Write operations %lu\n", StatisticsInfo->WriteOperations);
+ printf("Raw reads denied %lu\n", StatisticsInfo->RawReadsDenied);
+ printf("Raw writes denied %lu\n\n", StatisticsInfo->RawWritesDenied);
+
+ printf("Network errors %lu\n", StatisticsInfo->NetworkErrors);
+ printf("Connections made %lu\n", StatisticsInfo->CoreConnects +
+ StatisticsInfo->Lanman20Connects +
+ StatisticsInfo->Lanman21Connects +
+ StatisticsInfo->LanmanNtConnects);
+ printf("Reconnections made %lu\n", StatisticsInfo->Reconnects);
+ printf("Server disconnects %lu\n\n", StatisticsInfo->ServerDisconnects);
+
+ printf("Sessions started %lu\n", StatisticsInfo->Sessions);
+ printf("Hung sessions %lu\n", StatisticsInfo->HungSessions);
+ printf("Failed sessions %lu\n", StatisticsInfo->FailedSessions);
+ printf("Failed operations %lu\n", StatisticsInfo->InitiallyFailedOperations +
+ StatisticsInfo->FailedCompletionOperations);
+ printf("Use count %lu\n", StatisticsInfo->UseCount);
+ printf("Failed use count %lu\n\n", StatisticsInfo->FailedUseCount);
+
+done:
+ if (StatisticsInfo != NULL)
+ NetApiBufferFree(StatisticsInfo);
+
+ if (WorkstationInfo != NULL)
+ NetApiBufferFree(WorkstationInfo);
+
+ return 0;
+}
+
+
+INT
+cmdStatistics(
+ INT argc,
+ WCHAR **argv)
+{
+ INT i, result = 0;
+ BOOL bServer = FALSE;
+ BOOL bWorkstation = FALSE;
+
+ for (i = 2; i < argc; i++)
+ {
+ if (_wcsicmp(argv[i], L"server") == 0)
+ {
+ if (bWorkstation == FALSE)
+ bServer = TRUE;
+ continue;
+ }
+
+ if (_wcsicmp(argv[i], L"workstation") == 0)
+ {
+ if (bServer == FALSE)
+ bWorkstation = TRUE;
+ continue;
+ }
+
+ if (_wcsicmp(argv[i], L"help") == 0)
+ {
+ /* Print short syntax help */
+ ConResPuts(StdOut, IDS_GENERIC_SYNTAX);
+ ConResPuts(StdOut, IDS_STATISTICS_SYNTAX);
+ return 0;
+ }
+
+ if (_wcsicmp(argv[i], L"/help") == 0)
+ {
+ /* Print full help text*/
+ ConResPuts(StdOut, IDS_GENERIC_SYNTAX);
+ ConResPuts(StdOut, IDS_STATISTICS_SYNTAX);
+ ConResPuts(StdOut, IDS_STATISTICS_HELP_1);
+ ConResPuts(StdOut, IDS_STATISTICS_HELP_2);
+ return 0;
+ }
+ }
+
+ if (bServer)
+ {
+ result = DisplayServerStatistics();
+ }
+ else if (bWorkstation)
+ {
+ result = DisplayWorkstationStatistics();
+ }
+ else
+ {
+ ConResPuts(StdOut, IDS_STATISTICS_TEXT);
+ }
+
+ if (result == 0)
+ ConResPuts(StdOut, IDS_ERROR_NO_ERROR);
+
+ return result;
+}
\ No newline at end of file
diff --git a/base/applications/network/net/help.c b/base/applications/network/net/help.c
index f354ee4f40..9398c45a1e 100644
--- a/base/applications/network/net/help.c
+++ b/base/applications/network/net/help.c
@@ -162,7 +162,8 @@ INT cmdHelp(INT argc, WCHAR **argv)
if (_wcsicmp(argv[2], L"STATISTICS") == 0)
{
ConResPuts(StdOut, IDS_STATISTICS_SYNTAX);
- ConResPuts(StdOut, IDS_STATISTICS_HELP);
+ ConResPuts(StdOut, IDS_STATISTICS_HELP_1);
+ ConResPuts(StdOut, IDS_STATISTICS_HELP_2);
return 0;
}
diff --git a/base/applications/network/net/lang/en-US.rc b/base/applications/network/net/lang/en-US.rc
index 3b89b498a7..f778c5a668 100644
--- a/base/applications/network/net/lang/en-US.rc
+++ b/base/applications/network/net/lang/en-US.rc
@@ -125,8 +125,13 @@ message and suggested actions you can take to solve the problem.\n\n"
IDS_START_HELP_3 "When typed at the command prompt, service name of two words or more must\n\
be enclosed in quotation marks. For example, NET START ""NET LOGON""\n\
starts the net logon service.\n\n"
- IDS_STATISTICS_SYNTAX "NET STATISTICS ...\n\n"
- IDS_STATISTICS_HELP "STATISTICS\n...\n\n"
+ IDS_STATISTICS_SYNTAX "NET STATISTICS [SERVER | WORKSTATION]\n\n"
+ IDS_STATISTICS_HELP_1 "NET STATISTICS displays the statisticslog for the local Workstation or\n\
+Server service. Used without parameters, NET STATISTICS displays\n\
+the services for which statistics are available.\n\n"
+ IDS_STATISTICS_HELP_2 "SERVER Displays the Server service statistics.\n\
+WORKSTATION Displays the Workstation service statistics.\n\n"
+
IDS_STOP_SYNTAX "NET STOP service\n\n"
IDS_STOP_HELP_1 "NET STOP stops services.\n\n"
IDS_STOP_HELP_2 "service The name of the service to be stopped.\n\n"
@@ -186,6 +191,11 @@ service can stop others. Some services cannot be stopped.\n\n"
IDS_LOCALGROUP_COMMENT "Comment"
IDS_LOCALGROUP_MEMBERS "Members"
+ IDS_STATISTICS_TEXT "Statistics are available for the following services:\n\n\
+ Server\n Workstation\n\n"
+ IDS_STATISTICS_SERVER_NAME "Server statistics for \\\\%s\n\n"
+ IDS_STATISTICS_WORKSTATION_NAME "Workstation statistics for \\\\%s\n\n"
+
IDS_USER_ACCOUNTS "User accounts for \\\\%s"
IDS_USER_NAME "User name"
IDS_USER_FULL_NAME "Full name"
@@ -227,5 +237,5 @@ service can stop others. Some services cannot be stopped.\n\n"
IDS_ERROR_OPTION_NOT_SUPPORTED "The %s option is not supported yet.\n"
IDS_ERROR_INVALID_OPTION_VALUE "You entered an invalid value for the %s option.\n"
IDS_ERROR_SYSTEM_ERROR "The system error %d happened.\n"
- IDS_ERROR_NO_ERROR "The command completed successfully.\n\n\n"
+ IDS_ERROR_NO_ERROR "The command completed successfully.\n\n"
END
diff --git a/base/applications/network/net/lang/es-ES.rc b/base/applications/network/net/lang/es-ES.rc
index 9db547f02e..54dbacf2c6 100644
--- a/base/applications/network/net/lang/es-ES.rc
+++ b/base/applications/network/net/lang/es-ES.rc
@@ -128,8 +128,12 @@ message and suggested actions you can take to solve the problem.\n\n"
IDS_START_HELP_3 "When typed at the command prompt, service name of two words or more must\n\
be enclosed in quotation marks. For example, NET START ""NET LOGON""\n\
starts the net logon service.\n\n"
- IDS_STATISTICS_SYNTAX "NET STATISTICS ...\n\n"
- IDS_STATISTICS_HELP "STATISTICS\n...\n\n"
+ IDS_STATISTICS_SYNTAX "NET STATISTICS [SERVER | WORKSTATION]\n\n"
+ IDS_STATISTICS_HELP_1 "NET STATISTICS displays the statisticslog for the local Workstation or\n\
+Server service. Used without parameters, NET STATISTICS displays\n\
+the services for which statistics are available.\n\n"
+ IDS_STATISTICS_HELP_2 "SERVER Displays the Server service statistics.\n\
+WORKSTATION Displays the Workstation service statistics.\n\n"
IDS_STOP_SYNTAX "NET STOP <nombre del servicio>\n\n"
IDS_STOP_HELP_1 "NET STOP stops services.\n\n"
IDS_STOP_HELP_2 "service The name of the service to be stopped.\n\n"
@@ -188,6 +192,11 @@ service can stop others. Some services cannot be stopped.\n\n"
IDS_LOCALGROUP_COMMENT "Comentario"
IDS_LOCALGROUP_MEMBERS "Miembros"
+ IDS_STATISTICS_TEXT "Statistics are available for the following services:\n\n\
+ Server\n Workstation\n\n"
+ IDS_STATISTICS_SERVER_NAME "Server statistics for \\\\%s\n\n"
+ IDS_STATISTICS_WORKSTATION_NAME "Workstation statistics for \\\\%s\n\n"
+
IDS_USER_ACCOUNTS "Cuentas de usuario en \\\\%s"
IDS_USER_NAME "Nombre de usuario"
IDS_USER_FULL_NAME "Nombre completo"
@@ -229,5 +238,5 @@ service can stop others. Some services cannot be stopped.\n\n"
IDS_ERROR_OPTION_NOT_SUPPORTED "La opción %s todavía no está disponible.\n"
IDS_ERROR_INVALID_OPTION_VALUE "El valor para la opción %s no es válido.\n"
IDS_ERROR_SYSTEM_ERROR "The system error %d happened.\n"
- IDS_ERROR_NO_ERROR "The command completed successfully.\n\n\n"
+ IDS_ERROR_NO_ERROR "The command completed successfully.\n\n"
END
diff --git a/base/applications/network/net/lang/ro-RO.rc b/base/applications/network/net/lang/ro-RO.rc
index 4f0e3e2456..a97a9b9dc8 100644
--- a/base/applications/network/net/lang/ro-RO.rc
+++ b/base/applications/network/net/lang/ro-RO.rc
@@ -131,8 +131,12 @@ message and suggested actions you can take to solve the problem.\n\n"
IDS_START_HELP_3 "When typed at the command prompt, service name of two words or more must\n\
be enclosed in quotation marks. For example, NET START ""NET LOGON""\n\
starts the net logon service.\n\n"
- IDS_STATISTICS_SYNTAX "NET STATISTICS ...\n\n"
- IDS_STATISTICS_HELP "STATISTICS\n...\n\n"
+ IDS_STATISTICS_SYNTAX "NET STATISTICS [SERVER | WORKSTATION]\n\n"
+ IDS_STATISTICS_HELP_1 "NET STATISTICS displays the statisticslog for the local Workstation or\n\
+Server service. Used without parameters, NET STATISTICS displays\n\
+the services for which statistics are available.\n\n"
+ IDS_STATISTICS_HELP_2 "SERVER Displays the Server service statistics.\n\
+WORKSTATION Displays the Workstation service statistics.\n\n"
IDS_STOP_SYNTAX "NET STOP <nume serviciu>\n\n"
IDS_STOP_HELP_1 "NET STOP stops services.\n\n"
IDS_STOP_HELP_2 "service The name of the service to be stopped.\n\n"
@@ -191,6 +195,11 @@ service can stop others. Some services cannot be stopped.\n\n"
IDS_LOCALGROUP_COMMENT "Comentariu"
IDS_LOCALGROUP_MEMBERS "Membri"
+ IDS_STATISTICS_TEXT "Statistics are available for the following services:\n\n\
+ Server\n Workstation\n\n"
+ IDS_STATISTICS_SERVER_NAME "Server statistics for \\\\%s\n\n"
+ IDS_STATISTICS_WORKSTATION_NAME "Workstation statistics for \\\\%s\n\n"
+
IDS_USER_ACCOUNTS "Conturi de utilizator pentru \\\\%s"
IDS_USER_NAME "Nume utilizator"
IDS_USER_FULL_NAME "Nume complet"
@@ -232,5 +241,5 @@ service can stop others. Some services cannot be stopped.\n\n"
IDS_ERROR_OPTION_NOT_SUPPORTED "Opțiunea %s încă nu este admisă.\n"
IDS_ERROR_INVALID_OPTION_VALUE "Ați introdus o valoare nevalidă pentru opțiunea %s.\n"
IDS_ERROR_SYSTEM_ERROR "A survenit eroarea de sistem %d.\n"
- IDS_ERROR_NO_ERROR "Comanda a fost executată cu succes.\n\n\n"
+ IDS_ERROR_NO_ERROR "Comanda a fost executată cu succes.\n\n"
END
diff --git a/base/applications/network/net/lang/ru-RU.rc b/base/applications/network/net/lang/ru-RU.rc
index f60c5ad118..87bb958e99 100644
--- a/base/applications/network/net/lang/ru-RU.rc
+++ b/base/applications/network/net/lang/ru-RU.rc
@@ -127,8 +127,12 @@ message and suggested actions you can take to solve the problem.\n\n"
IDS_START_HELP_3 "When typed at the command prompt, service name of two words or more must\n\
be enclosed in quotation marks. For example, NET START ""NET LOGON""\n\
starts the net logon service.\n\n"
- IDS_STATISTICS_SYNTAX "NET STATISTICS ...\n\n"
- IDS_STATISTICS_HELP "STATISTICS\n...\n\n"
+ IDS_STATISTICS_SYNTAX "NET STATISTICS [SERVER | WORKSTATION]\n\n"
+ IDS_STATISTICS_HELP_1 "NET STATISTICS displays the statisticslog for the local Workstation or\n\
+Server service. Used without parameters, NET STATISTICS displays\n\
+the services for which statistics are available.\n\n"
+ IDS_STATISTICS_HELP_2 "SERVER Displays the Server service statistics.\n\
+WORKSTATION Displays the Workstation service statistics.\n\n"
IDS_STOP_SYNTAX "NET STOP <имя_службы>\n\n"
IDS_STOP_HELP_1 "NET STOP stops services.\n\n"
IDS_STOP_HELP_2 "service The name of the service to be stopped.\n\n"
@@ -187,6 +191,11 @@ service can stop others. Some services cannot be stopped.\n\n"
IDS_LOCALGROUP_COMMENT "Комментарий"
IDS_LOCALGROUP_MEMBERS "Члены"
+ IDS_STATISTICS_TEXT "Statistics are available for the following services:\n\n\
+ Server\n Workstation\n\n"
+ IDS_STATISTICS_SERVER_NAME "Server statistics for \\\\%s\n\n"
+ IDS_STATISTICS_WORKSTATION_NAME "Workstation statistics for \\\\%s\n\n"
+
IDS_USER_ACCOUNTS "Учетные записи пользователей для \\\\%s"
IDS_USER_NAME "Имя пользователя"
IDS_USER_FULL_NAME "Полное имя"
@@ -228,5 +237,5 @@ service can stop others. Some services cannot be stopped.\n\n"
IDS_ERROR_OPTION_NOT_SUPPORTED "Опция %s в данный момент не поддерживается.\n"
IDS_ERROR_INVALID_OPTION_VALUE "Вы ввели неверный данные для данной опции %s.\n"
IDS_ERROR_SYSTEM_ERROR "Произошла системная ошибка: %d.\n"
- IDS_ERROR_NO_ERROR "Команда успешно выполнена.\n\n\n"
+ IDS_ERROR_NO_ERROR "Команда успешно выполнена.\n\n"
END
diff --git a/base/applications/network/net/lang/tr-TR.rc b/base/applications/network/net/lang/tr-TR.rc
index a9a3863424..3930ce709d 100644
--- a/base/applications/network/net/lang/tr-TR.rc
+++ b/base/applications/network/net/lang/tr-TR.rc
@@ -127,8 +127,12 @@ message and suggested actions you can take to solve the problem.\n\n"
IDS_START_HELP_3 "When typed at the command prompt, service name of two words or more must\n\
be enclosed in quotation marks. For example, NET START ""NET LOGON""\n\
starts the net logon service.\n\n"
- IDS_STATISTICS_SYNTAX "NET STATISTICS ...\n\n"
- IDS_STATISTICS_HELP "STATISTICS\n...\n\n"
+ IDS_STATISTICS_SYNTAX "NET STATISTICS [SERVER | WORKSTATION]\n\n"
+ IDS_STATISTICS_HELP_1 "NET STATISTICS displays the statisticslog for the local Workstation or\n\
+Server service. Used without parameters, NET STATISTICS displays\n\
+the services for which statistics are available.\n\n"
+ IDS_STATISTICS_HELP_2 "SERVER Displays the Server service statistics.\n\
+WORKSTATION Displays the Workstation service statistics.\n\n"
IDS_STOP_SYNTAX "NET STOP <Hizmet Adı>\n\n"
IDS_STOP_HELP_1 "NET STOP stops services.\n\n"
IDS_STOP_HELP_2 "service The name of the service to be stopped.\n\n"
@@ -187,6 +191,11 @@ service can stop others. Some services cannot be stopped.\n\n"
IDS_LOCALGROUP_COMMENT "Açıklama"
IDS_LOCALGROUP_MEMBERS "Üyeler"
+ IDS_STATISTICS_TEXT "Statistics are available for the following services:\n\n\
+ Server\n Workstation\n\n"
+ IDS_STATISTICS_SERVER_NAME "Server statistics for \\\\%s\n\n"
+ IDS_STATISTICS_WORKSTATION_NAME "Workstation statistics for \\\\%s\n\n"
+
IDS_USER_ACCOUNTS "\\\\%s için kullanıcı hesapları"
IDS_USER_NAME "Kullanıcı adı"
IDS_USER_FULL_NAME "Tüm ad"
@@ -228,5 +237,5 @@ service can stop others. Some services cannot be stopped.\n\n"
IDS_ERROR_OPTION_NOT_SUPPORTED "%s seçeneği daha desteklenmiyor.\n"
IDS_ERROR_INVALID_OPTION_VALUE "%s seçeneği için geçersiz bir değer girdiniz.\n"
IDS_ERROR_SYSTEM_ERROR "%d dizge hatâsı oldu.\n"
- IDS_ERROR_NO_ERROR "Komut başarılı bir şekilde çalıştırıldı.\n\n\n"
+ IDS_ERROR_NO_ERROR "Komut başarılı bir şekilde çalıştırıldı.\n\n"
END
diff --git a/base/applications/network/net/lang/zh-CN.rc b/base/applications/network/net/lang/zh-CN.rc
index a8946a0005..6c6a4693a6 100644
--- a/base/applications/network/net/lang/zh-CN.rc
+++ b/base/applications/network/net/lang/zh-CN.rc
@@ -127,8 +127,12 @@ message and suggested actions you can take to solve the problem.\n\n"
IDS_START_HELP_3 "When typed at the command prompt, service name of two words or more must\n\
be enclosed in quotation marks. For example, NET START ""NET LOGON""\n\
starts the net logon service.\n\n"
- IDS_STATISTICS_SYNTAX "NET STATISTICS ...\n\n"
- IDS_STATISTICS_HELP "STATISTICS\n...\n\n"
+ IDS_STATISTICS_SYNTAX "NET STATISTICS [SERVER | WORKSTATION]\n\n"
+ IDS_STATISTICS_HELP_1 "NET STATISTICS displays the statisticslog for the local Workstation or\n\
+Server service. Used without parameters, NET STATISTICS displays\n\
+the services for which statistics are available.\n\n"
+ IDS_STATISTICS_HELP_2 "SERVER Displays the Server service statistics.\n\
+WORKSTATION Displays the Workstation service statistics.\n\n"
IDS_STOP_SYNTAX "NET STOP service\n\n"
IDS_STOP_HELP_1 "NET STOP stops services.\n\n"
IDS_STOP_HELP_2 "service The name of the service to be stopped.\n\n"
@@ -187,6 +191,11 @@ service can stop others. Some services cannot be stopped.\n\n"
IDS_LOCALGROUP_COMMENT "注释"
IDS_LOCALGROUP_MEMBERS "成员"
+ IDS_STATISTICS_TEXT "Statistics are available for the following services:\n\n\
+ Server\n Workstation\n\n"
+ IDS_STATISTICS_SERVER_NAME "Server statistics for \\\\%s\n\n"
+ IDS_STATISTICS_WORKSTATION_NAME "Workstation statistics for \\\\%s\n\n"
+
IDS_USER_ACCOUNTS "\\\\%s 的用户帐户"
IDS_USER_NAME "用户名"
IDS_USER_FULL_NAME "全名"
@@ -228,5 +237,5 @@ service can stop others. Some services cannot be stopped.\n\n"
IDS_ERROR_OPTION_NOT_SUPPORTED "尚不支持 %s 选项。\n"
IDS_ERROR_INVALID_OPTION_VALUE "您输入了 %s 选项的无效的值。\n"
IDS_ERROR_SYSTEM_ERROR "发生了系统错误 %d。\n"
- IDS_ERROR_NO_ERROR "命令执行成功。\n\n\n"
+ IDS_ERROR_NO_ERROR "命令执行成功。\n\n"
END
diff --git a/base/applications/network/net/lang/zh-TW.rc b/base/applications/network/net/lang/zh-TW.rc
index 8f400f4be0..ff2c74c39e 100644
--- a/base/applications/network/net/lang/zh-TW.rc
+++ b/base/applications/network/net/lang/zh-TW.rc
@@ -127,8 +127,12 @@ message and suggested actions you can take to solve the problem.\n\n"
IDS_START_HELP_3 "When typed at the command prompt, service name of two words or more must\n\
be enclosed in quotation marks. For example, NET START ""NET LOGON""\n\
starts the net logon service.\n\n"
- IDS_STATISTICS_SYNTAX "NET STATISTICS ...\n\n"
- IDS_STATISTICS_HELP "STATISTICS\n...\n\n"
+ IDS_STATISTICS_SYNTAX "NET STATISTICS [SERVER | WORKSTATION]\n\n"
+ IDS_STATISTICS_HELP_1 "NET STATISTICS displays the statisticslog for the local Workstation or\n\
+Server service. Used without parameters, NET STATISTICS displays\n\
+the services for which statistics are available.\n\n"
+ IDS_STATISTICS_HELP_2 "SERVER Displays the Server service statistics.\n\
+WORKSTATION Displays the Workstation service statistics.\n\n"
IDS_STOP_SYNTAX "NET STOP <服務名稱>\n\n"
IDS_STOP_HELP_1 "NET STOP stops services.\n\n"
IDS_STOP_HELP_2 "service The name of the service to be stopped.\n\n"
@@ -187,6 +191,11 @@ service can stop others. Some services cannot be stopped.\n\n"
IDS_LOCALGROUP_COMMENT "評論"
IDS_LOCALGROUP_MEMBERS "成員"
+ IDS_STATISTICS_TEXT "Statistics are available for the following services:\n\n\
+ Server\n Workstation\n\n"
+ IDS_STATISTICS_SERVER_NAME "Server statistics for \\\\%s\n\n"
+ IDS_STATISTICS_WORKSTATION_NAME "Workstation statistics for \\\\%s\n\n"
+
IDS_USER_ACCOUNTS "使用者帳戶 \\\\%s"
IDS_USER_NAME "使用者名稱"
IDS_USER_FULL_NAME "全名"
@@ -228,5 +237,5 @@ service can stop others. Some services cannot be stopped.\n\n"
IDS_ERROR_OPTION_NOT_SUPPORTED "尚不支援 %s 選項。\n"
IDS_ERROR_INVALID_OPTION_VALUE "您輸入了無效的值為 %s 選項。\n"
IDS_ERROR_SYSTEM_ERROR "The system error %d happened.\n"
- IDS_ERROR_NO_ERROR "The command completed successfully.\n\n\n"
+ IDS_ERROR_NO_ERROR "The command completed successfully.\n\n"
END
diff --git a/base/applications/network/net/main.c b/base/applications/network/net/main.c
index 2b572b48d4..5b2ad60b78 100644
--- a/base/applications/network/net/main.c
+++ b/base/applications/network/net/main.c
@@ -36,7 +36,7 @@ COMMAND cmds[] =
{L"session", unimplemented},
{L"share", unimplemented},
{L"start", cmdStart},
- {L"statistics", unimplemented},
+ {L"statistics", cmdStatistics},
{L"stop", cmdStop},
{L"time", unimplemented},
{L"use", cmdUse},
diff --git a/base/applications/network/net/net.h b/base/applications/network/net/net.h
index 711528fb1e..a595166af5 100644
--- a/base/applications/network/net/net.h
+++ b/base/applications/network/net/net.h
@@ -53,6 +53,7 @@ INT cmdHelpMsg(INT argc, WCHAR **argv);
INT cmdLocalGroup(INT argc, WCHAR **argv);
INT cmdPause(INT argc, WCHAR **argv);
INT cmdStart(INT argc, WCHAR **argv);
+INT cmdStatistics(INT argc, WCHAR **argv);
INT cmdStop(INT argc, WCHAR **argv);
INT cmdUse(INT argc, WCHAR **argv);
INT cmdUser(INT argc, WCHAR **argv);
diff --git a/base/applications/network/net/resource.h b/base/applications/network/net/resource.h
index edcb94c7fe..0c53afc07a 100644
--- a/base/applications/network/net/resource.h
+++ b/base/applications/network/net/resource.h
@@ -56,20 +56,21 @@
#define IDS_START_HELP_2 153
#define IDS_START_HELP_3 154
#define IDS_STATISTICS_SYNTAX 155
-#define IDS_STATISTICS_HELP 156
-#define IDS_STOP_SYNTAX 157
-#define IDS_STOP_HELP_1 158
-#define IDS_STOP_HELP_2 159
-#define IDS_STOP_HELP_3 160
-#define IDS_TIME_SYNTAX 161
-#define IDS_TIME_HELP 162
-#define IDS_USE_SYNTAX 163
-#define IDS_USE_HELP 164
-#define IDS_USER_SYNTAX 165
-#define IDS_USER_HELP 166
-#define IDS_VIEW_SYNTAX 167
-#define IDS_VIEW_HELP 168
-#define IDS_NET_SYNTAX 169
+#define IDS_STATISTICS_HELP_1 156
+#define IDS_STATISTICS_HELP_2 157
+#define IDS_STOP_SYNTAX 158
+#define IDS_STOP_HELP_1 159
+#define IDS_STOP_HELP_2 160
+#define IDS_STOP_HELP_3 161
+#define IDS_TIME_SYNTAX 162
+#define IDS_TIME_HELP 163
+#define IDS_USE_SYNTAX 164
+#define IDS_USE_HELP 165
+#define IDS_USER_SYNTAX 166
+#define IDS_USER_HELP 167
+#define IDS_VIEW_SYNTAX 168
+#define IDS_VIEW_HELP 169
+#define IDS_NET_SYNTAX 170
#define IDS_ACCOUNTS_FORCE_LOGOFF 200
#define IDS_ACCOUNTS_LOGOFF_SECONDS 201
@@ -104,10 +105,14 @@
#define IDS_CONFIG_WORKSTATION_LOGON 245
-#define IDS_LOCALGROUP_ALIASES 300
-#define IDS_LOCALGROUP_ALIAS_NAME 301
-#define IDS_LOCALGROUP_COMMENT 302
-#define IDS_LOCALGROUP_MEMBERS 303
+#define IDS_LOCALGROUP_ALIASES 300
+#define IDS_LOCALGROUP_ALIAS_NAME 301
+#define IDS_LOCALGROUP_COMMENT 302
+#define IDS_LOCALGROUP_MEMBERS 303
+
+#define IDS_STATISTICS_TEXT 320
+#define IDS_STATISTICS_SERVER_NAME 321
+#define IDS_STATISTICS_WORKSTATION_NAME 322
#define IDS_USER_ACCOUNTS 449
#define IDS_USER_NAME 450