Commit 40bc5f64 authored by André Hentschel's avatar André Hentschel Committed by Alexandre Julliard

ntdll: Add more error codes.

parent 80e85cdb
...@@ -3,6 +3,7 @@ ...@@ -3,6 +3,7 @@
* *
* Copyright 2000 Alexandre Julliard * Copyright 2000 Alexandre Julliard
* Copyright 2002 Andriy Palamarchuk * Copyright 2002 Andriy Palamarchuk
* Copyright 2010 André Hentschel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
...@@ -210,10 +211,10 @@ static const DWORD table_00000102[32] = ...@@ -210,10 +211,10 @@ static const DWORD table_00000102[32] =
ERROR_DS_MEMBERSHIP_EVALUATED_LOCALLY /* 00000121 (STATUS_DS_MEMBERSHIP_EVALUATED_LOCALLY) */ ERROR_DS_MEMBERSHIP_EVALUATED_LOCALLY /* 00000121 (STATUS_DS_MEMBERSHIP_EVALUATED_LOCALLY) */
}; };
static const DWORD table_40000002[12] = static const DWORD table_40000002[36] =
{ {
ERROR_INVALID_PARAMETER, /* 40000002 (STATUS_WORKING_SET_LIMIT_RANGE) */ ERROR_INVALID_PARAMETER, /* 40000002 (STATUS_WORKING_SET_LIMIT_RANGE) */
0, /* 40000003 (STATUS_IMAGE_NOT_AT_BASE) */ ERROR_IMAGE_NOT_AT_BASE, /* 40000003 (STATUS_IMAGE_NOT_AT_BASE) */
0, /* 40000004 (STATUS_RXACT_STATE_CREATED) */ 0, /* 40000004 (STATUS_RXACT_STATE_CREATED) */
0, /* 40000005 (STATUS_SEGMENT_NOTIFICATION) */ 0, /* 40000005 (STATUS_SEGMENT_NOTIFICATION) */
ERROR_LOCAL_USER_SESSION_KEY, /* 40000006 (STATUS_LOCAL_USER_SESSION_KEY) */ ERROR_LOCAL_USER_SESSION_KEY, /* 40000006 (STATUS_LOCAL_USER_SESSION_KEY) */
...@@ -223,7 +224,31 @@ static const DWORD table_40000002[12] = ...@@ -223,7 +224,31 @@ static const DWORD table_40000002[12] =
0, /* 4000000a (STATUS_FT_READ_RECOVERY_FROM_BACKUP) */ 0, /* 4000000a (STATUS_FT_READ_RECOVERY_FROM_BACKUP) */
0, /* 4000000b (STATUS_FT_WRITE_RECOVERY) */ 0, /* 4000000b (STATUS_FT_WRITE_RECOVERY) */
ERROR_COUNTER_TIMEOUT, /* 4000000c (STATUS_SERIAL_COUNTER_TIMEOUT) */ ERROR_COUNTER_TIMEOUT, /* 4000000c (STATUS_SERIAL_COUNTER_TIMEOUT) */
ERROR_NULL_LM_PASSWORD /* 4000000d (STATUS_NULL_LM_PASSWORD) */ ERROR_NULL_LM_PASSWORD, /* 4000000d (STATUS_NULL_LM_PASSWORD) */
ERROR_IMAGE_MACHINE_TYPE_MISMATCH, /* 4000000e (STATUS_IMAGE_MACHINE_TYPE_MISMATCH) */
ERROR_RECEIVE_PARTIAL, /* 4000000f (STATUS_RECEIVE_PARTIAL) */
ERROR_RECEIVE_EXPEDITED, /* 40000010 (STATUS_RECEIVE_EXPEDITED) */
ERROR_RECEIVE_PARTIAL_EXPEDITED, /* 40000011 (STATUS_RECEIVE_PARTIAL_EXPEDITED) */
ERROR_EVENT_DONE, /* 40000012 (STATUS_EVENT_DONE) */
ERROR_EVENT_PENDING, /* 40000013 (STATUS_EVENT_PENDING) */
ERROR_CHECKING_FILE_SYSTEM, /* 40000014 (STATUS_CHECKING_FILE_SYSTEM) */
ERROR_FATAL_APP_EXIT, /* 40000015 (STATUS_FATAL_APP_EXIT) */
ERROR_PREDEFINED_HANDLE, /* 40000016 (STATUS_PREDEFINED_HANDLE) */
ERROR_WAS_UNLOCKED, /* 40000017 (STATUS_WAS_UNLOCKED) */
ERROR_SERVICE_NOTIFICATION, /* 40000018 (STATUS_SERVICE_NOTIFICATION) */
ERROR_WAS_LOCKED, /* 40000019 (STATUS_WAS_LOCKED) */
ERROR_LOG_HARD_ERROR, /* 4000001a (STATUS_LOG_HARD_ERROR) */
ERROR_ALREADY_WIN32, /* 4000001b (STATUS_ALREADY_WIN32) */
0, /* 4000001c (STATUS_WX86_UNSIMULATE) */
0, /* 4000001d (STATUS_WX86_CONTINUE) */
0, /* 4000001e (STATUS_WX86_SINGLE_STEP) */
0, /* 4000001f (STATUS_WX86_BREAKPOINT) */
0, /* 40000020 (STATUS_WX86_EXCEPTION_CONTINUE) */
0, /* 40000021 (STATUS_WX86_EXCEPTION_LASTCHANCE) */
0, /* 40000022 (STATUS_WX86_EXCEPTION_CHAIN) */
ERROR_IMAGE_MACHINE_TYPE_MISMATCH_EXE, /* 40000023 (STATUS_IMAGE_MACHINE_TYPE_MISMATCH_EXE) */
ERROR_NO_YIELD_PERFORMED, /* 40000024 (STATUS_NO_YIELD_PERFORMED) */
ERROR_TIMER_RESUME_IGNORED /* 40000025 (STATUS_TIMER_RESUME_IGNORED) */
}; };
static const DWORD table_40000370[1] = static const DWORD table_40000370[1] =
...@@ -699,11 +724,11 @@ static const DWORD table_c0000001[411] = ...@@ -699,11 +724,11 @@ static const DWORD table_c0000001[411] =
ERROR_TIME_SKEW, /* c0000133 (STATUS_TIME_DIFFERENCE_AT_DC) */ ERROR_TIME_SKEW, /* c0000133 (STATUS_TIME_DIFFERENCE_AT_DC) */
0, /* c0000134 (STATUS_SYNCHRONIZATION_REQUIRED) */ 0, /* c0000134 (STATUS_SYNCHRONIZATION_REQUIRED) */
ERROR_MOD_NOT_FOUND, /* c0000135 (STATUS_DLL_NOT_FOUND) */ ERROR_MOD_NOT_FOUND, /* c0000135 (STATUS_DLL_NOT_FOUND) */
0, /* c0000136 (STATUS_OPEN_FAILED) */ ERROR_NET_OPEN_FAILED, /* c0000136 (STATUS_OPEN_FAILED) */
0, /* c0000137 (STATUS_IO_PRIVILEGE_FAILED) */ ERROR_IO_PRIVILEGE_FAILED, /* c0000137 (STATUS_IO_PRIVILEGE_FAILED) */
ERROR_INVALID_ORDINAL, /* c0000138 (STATUS_ORDINAL_NOT_FOUND) */ ERROR_INVALID_ORDINAL, /* c0000138 (STATUS_ORDINAL_NOT_FOUND) */
ERROR_PROC_NOT_FOUND, /* c0000139 (STATUS_ENTRYPOINT_NOT_FOUND) */ ERROR_PROC_NOT_FOUND, /* c0000139 (STATUS_ENTRYPOINT_NOT_FOUND) */
0, /* c000013a (STATUS_CONTROL_C_EXIT) */ ERROR_CONTROL_C_EXIT, /* c000013a (STATUS_CONTROL_C_EXIT) */
ERROR_NETNAME_DELETED, /* c000013b (STATUS_LOCAL_DISCONNECT) */ ERROR_NETNAME_DELETED, /* c000013b (STATUS_LOCAL_DISCONNECT) */
ERROR_NETNAME_DELETED, /* c000013c (STATUS_REMOTE_DISCONNECT) */ ERROR_NETNAME_DELETED, /* c000013c (STATUS_REMOTE_DISCONNECT) */
ERROR_REM_NOT_LIST, /* c000013d (STATUS_REMOTE_RESOURCES) */ ERROR_REM_NOT_LIST, /* c000013d (STATUS_REMOTE_RESOURCES) */
...@@ -712,18 +737,18 @@ static const DWORD table_c0000001[411] = ...@@ -712,18 +737,18 @@ static const DWORD table_c0000001[411] =
ERROR_UNEXP_NET_ERR, /* c0000140 (STATUS_INVALID_CONNECTION) */ ERROR_UNEXP_NET_ERR, /* c0000140 (STATUS_INVALID_CONNECTION) */
ERROR_UNEXP_NET_ERR, /* c0000141 (STATUS_INVALID_ADDRESS) */ ERROR_UNEXP_NET_ERR, /* c0000141 (STATUS_INVALID_ADDRESS) */
ERROR_DLL_INIT_FAILED, /* c0000142 (STATUS_DLL_INIT_FAILED) */ ERROR_DLL_INIT_FAILED, /* c0000142 (STATUS_DLL_INIT_FAILED) */
0, /* c0000143 (STATUS_MISSING_SYSTEMFILE) */ ERROR_MISSING_SYSTEMFILE, /* c0000143 (STATUS_MISSING_SYSTEMFILE) */
0, /* c0000144 (STATUS_UNHANDLED_EXCEPTION) */ ERROR_UNHANDLED_EXCEPTION, /* c0000144 (STATUS_UNHANDLED_EXCEPTION) */
0, /* c0000145 (STATUS_APP_INIT_FAILURE) */ ERROR_APP_INIT_FAILURE, /* c0000145 (STATUS_APP_INIT_FAILURE) */
0, /* c0000146 (STATUS_PAGEFILE_CREATE_FAILED) */ ERROR_PAGEFILE_CREATE_FAILED, /* c0000146 (STATUS_PAGEFILE_CREATE_FAILED) */
0, /* c0000147 (STATUS_NO_PAGEFILE) */ ERROR_NO_PAGEFILE, /* c0000147 (STATUS_NO_PAGEFILE) */
ERROR_INVALID_LEVEL, /* c0000148 (STATUS_INVALID_LEVEL) */ ERROR_INVALID_LEVEL, /* c0000148 (STATUS_INVALID_LEVEL) */
ERROR_INVALID_PASSWORD, /* c0000149 (STATUS_WRONG_PASSWORD_CORE) */ ERROR_INVALID_PASSWORD, /* c0000149 (STATUS_WRONG_PASSWORD_CORE) */
0, /* c000014a (STATUS_ILLEGAL_FLOAT_CONTEXT) */ ERROR_ILLEGAL_FLOAT_CONTEXT, /* c000014a (STATUS_ILLEGAL_FLOAT_CONTEXT) */
ERROR_BROKEN_PIPE, /* c000014b (STATUS_PIPE_BROKEN) */ ERROR_BROKEN_PIPE, /* c000014b (STATUS_PIPE_BROKEN) */
ERROR_BADDB, /* c000014c (STATUS_REGISTRY_CORRUPT) */ ERROR_BADDB, /* c000014c (STATUS_REGISTRY_CORRUPT) */
ERROR_REGISTRY_IO_FAILED, /* c000014d (STATUS_REGISTRY_IO_FAILED) */ ERROR_REGISTRY_IO_FAILED, /* c000014d (STATUS_REGISTRY_IO_FAILED) */
0, /* c000014e (STATUS_NO_EVENT_PAIR) */ ERROR_NO_EVENT_PAIR, /* c000014e (STATUS_NO_EVENT_PAIR) */
ERROR_UNRECOGNIZED_VOLUME, /* c000014f (STATUS_UNRECOGNIZED_VOLUME) */ ERROR_UNRECOGNIZED_VOLUME, /* c000014f (STATUS_UNRECOGNIZED_VOLUME) */
ERROR_SERIAL_NO_DEVICE, /* c0000150 (STATUS_SERIAL_NO_DEVICE_INITED) */ ERROR_SERIAL_NO_DEVICE, /* c0000150 (STATUS_SERIAL_NO_DEVICE_INITED) */
ERROR_NO_SUCH_ALIAS, /* c0000151 (STATUS_NO_SUCH_ALIAS) */ ERROR_NO_SUCH_ALIAS, /* c0000151 (STATUS_NO_SUCH_ALIAS) */
...@@ -739,7 +764,7 @@ static const DWORD table_c0000001[411] = ...@@ -739,7 +764,7 @@ static const DWORD table_c0000001[411] =
ERROR_LOGON_TYPE_NOT_GRANTED, /* c000015b (STATUS_LOGON_TYPE_NOT_GRANTED) */ ERROR_LOGON_TYPE_NOT_GRANTED, /* c000015b (STATUS_LOGON_TYPE_NOT_GRANTED) */
ERROR_NOT_REGISTRY_FILE, /* c000015c (STATUS_NOT_REGISTRY_FILE) */ ERROR_NOT_REGISTRY_FILE, /* c000015c (STATUS_NOT_REGISTRY_FILE) */
ERROR_NT_CROSS_ENCRYPTION_REQUIRED, /* c000015d (STATUS_NT_CROSS_ENCRYPTION_REQUIRED) */ ERROR_NT_CROSS_ENCRYPTION_REQUIRED, /* c000015d (STATUS_NT_CROSS_ENCRYPTION_REQUIRED) */
0, /* c000015e (STATUS_DOMAIN_CTRLR_CONFIG_ERROR) */ ERROR_DOMAIN_CTRLR_CONFIG_ERROR, /* c000015e (STATUS_DOMAIN_CTRLR_CONFIG_ERROR) */
ERROR_IO_DEVICE, /* c000015f (STATUS_FT_MISSING_MEMBER) */ ERROR_IO_DEVICE, /* c000015f (STATUS_FT_MISSING_MEMBER) */
0, /* c0000160 (STATUS_ILL_FORMED_SERVICE_ENTRY) */ 0, /* c0000160 (STATUS_ILL_FORMED_SERVICE_ENTRY) */
0, /* c0000161 (STATUS_ILLEGAL_CHARACTER) */ 0, /* c0000161 (STATUS_ILLEGAL_CHARACTER) */
...@@ -1465,7 +1490,7 @@ static const DWORD table_c0150001[39] = ...@@ -1465,7 +1490,7 @@ static const DWORD table_c0150001[39] =
static const struct error_table error_table[] = static const struct error_table error_table[] =
{ {
{ 0x00000102, 0x00000122, table_00000102 }, { 0x00000102, 0x00000122, table_00000102 },
{ 0x40000002, 0x4000000e, table_40000002 }, { 0x40000002, 0x40000026, table_40000002 },
{ 0x40000370, 0x40000371, table_40000370 }, { 0x40000370, 0x40000371, table_40000370 },
{ 0x40020056, 0x40020057, table_40020056 }, { 0x40020056, 0x40020057, table_40020056 },
{ 0x400200af, 0x400200b0, table_400200af }, { 0x400200af, 0x400200b0, table_400200af },
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
* Unit tests for RtlNtStatusToDosError function * Unit tests for RtlNtStatusToDosError function
* *
* Copyright (c) 2002 Andriy Palamarchuk * Copyright (c) 2002 Andriy Palamarchuk
* Copyright (c) 2010 André Hentschel
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public * modify it under the terms of the GNU Lesser General Public
...@@ -156,6 +157,8 @@ static void run_error_tests(void) ...@@ -156,6 +157,8 @@ static void run_error_tests(void)
cmp(STATUS_CHILD_MUST_BE_VOLATILE, ERROR_CHILD_MUST_BE_VOLATILE); cmp(STATUS_CHILD_MUST_BE_VOLATILE, ERROR_CHILD_MUST_BE_VOLATILE);
cmp(STATUS_REGISTRY_CORRUPT, ERROR_BADDB); cmp(STATUS_REGISTRY_CORRUPT, ERROR_BADDB);
cmp(STATUS_DLL_NOT_FOUND, ERROR_MOD_NOT_FOUND); cmp(STATUS_DLL_NOT_FOUND, ERROR_MOD_NOT_FOUND);
cmp2(STATUS_OPEN_FAILED, ERROR_NET_OPEN_FAILED);
cmp2(STATUS_IO_PRIVILEGE_FAILED, ERROR_IO_PRIVILEGE_FAILED);
cmp(STATUS_DLL_INIT_FAILED, ERROR_DLL_INIT_FAILED); cmp(STATUS_DLL_INIT_FAILED, ERROR_DLL_INIT_FAILED);
cmp2(STATUS_INVALID_IMPORT_OF_NON_DLL, ERROR_INVALID_IMPORT_OF_NON_DLL); cmp2(STATUS_INVALID_IMPORT_OF_NON_DLL, ERROR_INVALID_IMPORT_OF_NON_DLL);
cmp(STATUS_ORDINAL_NOT_FOUND, ERROR_INVALID_ORDINAL); cmp(STATUS_ORDINAL_NOT_FOUND, ERROR_INVALID_ORDINAL);
...@@ -465,6 +468,23 @@ static void run_error_tests(void) ...@@ -465,6 +468,23 @@ static void run_error_tests(void)
cmp(STATUS_NO_QUOTAS_FOR_ACCOUNT, ERROR_NO_QUOTAS_FOR_ACCOUNT); cmp(STATUS_NO_QUOTAS_FOR_ACCOUNT, ERROR_NO_QUOTAS_FOR_ACCOUNT);
cmp(STATUS_LOCAL_USER_SESSION_KEY, ERROR_LOCAL_USER_SESSION_KEY); cmp(STATUS_LOCAL_USER_SESSION_KEY, ERROR_LOCAL_USER_SESSION_KEY);
cmp(STATUS_NULL_LM_PASSWORD, ERROR_NULL_LM_PASSWORD); cmp(STATUS_NULL_LM_PASSWORD, ERROR_NULL_LM_PASSWORD);
cmp2(STATUS_IMAGE_MACHINE_TYPE_MISMATCH, ERROR_IMAGE_MACHINE_TYPE_MISMATCH);
cmp2(STATUS_RECEIVE_PARTIAL, ERROR_RECEIVE_PARTIAL);
cmp2(STATUS_RECEIVE_EXPEDITED, ERROR_RECEIVE_EXPEDITED);
cmp2(STATUS_RECEIVE_PARTIAL_EXPEDITED, ERROR_RECEIVE_PARTIAL_EXPEDITED);
cmp2(STATUS_EVENT_DONE, ERROR_EVENT_DONE);
cmp2(STATUS_EVENT_PENDING, ERROR_EVENT_PENDING);
cmp2(STATUS_CHECKING_FILE_SYSTEM, ERROR_CHECKING_FILE_SYSTEM);
cmp2(STATUS_FATAL_APP_EXIT, ERROR_FATAL_APP_EXIT);
cmp2(STATUS_PREDEFINED_HANDLE, ERROR_PREDEFINED_HANDLE);
cmp2(STATUS_WAS_UNLOCKED, ERROR_WAS_UNLOCKED);
cmp2(STATUS_SERVICE_NOTIFICATION, ERROR_SERVICE_NOTIFICATION);
cmp2(STATUS_WAS_LOCKED, ERROR_WAS_LOCKED);
cmp2(STATUS_LOG_HARD_ERROR, ERROR_LOG_HARD_ERROR);
cmp2(STATUS_ALREADY_WIN32, ERROR_ALREADY_WIN32);
cmp2(STATUS_IMAGE_MACHINE_TYPE_MISMATCH_EXE, ERROR_IMAGE_MACHINE_TYPE_MISMATCH_EXE);
cmp2(STATUS_NO_YIELD_PERFORMED, ERROR_NO_YIELD_PERFORMED);
cmp2(STATUS_TIMER_RESUME_IGNORED, ERROR_TIMER_RESUME_IGNORED);
cmp(STATUS_BAD_INHERITANCE_ACL, ERROR_BAD_INHERITANCE_ACL); cmp(STATUS_BAD_INHERITANCE_ACL, ERROR_BAD_INHERITANCE_ACL);
cmp(STATUS_INVALID_GROUP_ATTRIBUTES, ERROR_INVALID_GROUP_ATTRIBUTES); cmp(STATUS_INVALID_GROUP_ATTRIBUTES, ERROR_INVALID_GROUP_ATTRIBUTES);
cmp(STATUS_BAD_IMPERSONATION_LEVEL, ERROR_BAD_IMPERSONATION_LEVEL); cmp(STATUS_BAD_IMPERSONATION_LEVEL, ERROR_BAD_IMPERSONATION_LEVEL);
...@@ -514,6 +534,7 @@ static void run_error_tests(void) ...@@ -514,6 +534,7 @@ static void run_error_tests(void)
cmp(STATUS_TOO_MANY_SIDS, ERROR_TOO_MANY_SIDS); cmp(STATUS_TOO_MANY_SIDS, ERROR_TOO_MANY_SIDS);
cmp(STATUS_LM_CROSS_ENCRYPTION_REQUIRED, ERROR_LM_CROSS_ENCRYPTION_REQUIRED); cmp(STATUS_LM_CROSS_ENCRYPTION_REQUIRED, ERROR_LM_CROSS_ENCRYPTION_REQUIRED);
cmp(STATUS_MESSAGE_NOT_FOUND, ERROR_MR_MID_NOT_FOUND); cmp(STATUS_MESSAGE_NOT_FOUND, ERROR_MR_MID_NOT_FOUND);
cmp2(STATUS_CONTROL_C_EXIT, ERROR_CONTROL_C_EXIT);
cmp(STATUS_LOCAL_DISCONNECT, ERROR_NETNAME_DELETED); cmp(STATUS_LOCAL_DISCONNECT, ERROR_NETNAME_DELETED);
cmp(STATUS_REMOTE_DISCONNECT, ERROR_NETNAME_DELETED); cmp(STATUS_REMOTE_DISCONNECT, ERROR_NETNAME_DELETED);
cmp(STATUS_REMOTE_RESOURCES, ERROR_REM_NOT_LIST); cmp(STATUS_REMOTE_RESOURCES, ERROR_REM_NOT_LIST);
...@@ -521,6 +542,14 @@ static void run_error_tests(void) ...@@ -521,6 +542,14 @@ static void run_error_tests(void)
cmp(STATUS_LINK_TIMEOUT, ERROR_UNEXP_NET_ERR); cmp(STATUS_LINK_TIMEOUT, ERROR_UNEXP_NET_ERR);
cmp(STATUS_INVALID_CONNECTION, ERROR_UNEXP_NET_ERR); cmp(STATUS_INVALID_CONNECTION, ERROR_UNEXP_NET_ERR);
cmp(STATUS_INVALID_ADDRESS, ERROR_UNEXP_NET_ERR); cmp(STATUS_INVALID_ADDRESS, ERROR_UNEXP_NET_ERR);
cmp2(STATUS_MISSING_SYSTEMFILE, ERROR_MISSING_SYSTEMFILE);
cmp2(STATUS_PAGEFILE_CREATE_FAILED, ERROR_PAGEFILE_CREATE_FAILED);
cmp2(STATUS_UNHANDLED_EXCEPTION, ERROR_UNHANDLED_EXCEPTION);
cmp2(STATUS_APP_INIT_FAILURE, ERROR_APP_INIT_FAILURE);
cmp2(STATUS_NO_PAGEFILE, ERROR_NO_PAGEFILE);
cmp2(STATUS_ILLEGAL_FLOAT_CONTEXT, ERROR_ILLEGAL_FLOAT_CONTEXT);
cmp2(STATUS_NO_EVENT_PAIR, ERROR_NO_EVENT_PAIR);
cmp2(STATUS_DOMAIN_CTRLR_CONFIG_ERROR, ERROR_DOMAIN_CTRLR_CONFIG_ERROR);
cmp(STATUS_IO_DEVICE_ERROR, ERROR_IO_DEVICE); cmp(STATUS_IO_DEVICE_ERROR, ERROR_IO_DEVICE);
cmp(STATUS_DEVICE_PROTOCOL_ERROR, ERROR_IO_DEVICE); cmp(STATUS_DEVICE_PROTOCOL_ERROR, ERROR_IO_DEVICE);
cmp(STATUS_DRIVER_INTERNAL_ERROR, ERROR_IO_DEVICE); cmp(STATUS_DRIVER_INTERNAL_ERROR, ERROR_IO_DEVICE);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment