[NTDLL_WINETEST] Partial sync with Wine Staging 1.9.14. CORE-11368 holds some remaini...
authorAmine Khaldi <amine.khaldi@reactos.org>
Tue, 12 Jul 2016 20:40:20 +0000 (20:40 +0000)
committerAmine Khaldi <amine.khaldi@reactos.org>
Tue, 12 Jul 2016 20:40:20 +0000 (20:40 +0000)
svn path=/trunk/; revision=71909

rostests/winetests/ntdll/CMakeLists.txt
rostests/winetests/ntdll/error.c
rostests/winetests/ntdll/file.c
rostests/winetests/ntdll/pipe.c
rostests/winetests/ntdll/reg.c
rostests/winetests/ntdll/rtl.c
rostests/winetests/ntdll/rtlstr.c

index 75bd7f8..f69ce52 100644 (file)
@@ -28,7 +28,7 @@ list(APPEND SOURCE
 
 add_executable(ntdll_winetest ${SOURCE})
 set_module_type(ntdll_winetest win32cui)
-add_importlibs(ntdll_winetest user32 msvcrt kernel32 ntdll)
+add_importlibs(ntdll_winetest user32 ole32 advapi32 msvcrt kernel32 ntdll)
 add_cd_file(TARGET ntdll_winetest DESTINATION reactos/bin FOR all)
 
 if(NOT MSVC)
index 47227fa..8a7732b 100755 (executable)
@@ -125,8 +125,10 @@ static void run_error_tests(void)
     cmp(STATUS_DATATYPE_MISALIGNMENT,            ERROR_NOACCESS);
     cmp(STATUS_ACCESS_VIOLATION,                 ERROR_NOACCESS);
     cmp2(STATUS_DATATYPE_MISALIGNMENT_ERROR,     ERROR_NOACCESS);
+    cmp2(STATUS_MULTIPLE_FAULT_VIOLATION,        ERROR_MULTIPLE_FAULT_VIOLATION);
     cmp(STATUS_CTL_FILE_NOT_SUPPORTED,           ERROR_NOT_SUPPORTED);
     cmp(STATUS_PORT_ALREADY_SET,                 ERROR_INVALID_PARAMETER);
+    cmp2(STATUS_PORT_NOT_SET,                    ERROR_PORT_NOT_SET);
     cmp(STATUS_SECTION_NOT_IMAGE,                ERROR_INVALID_PARAMETER);
     cmp(STATUS_BAD_WORKING_SET_LIMIT,            ERROR_INVALID_PARAMETER);
     cmp(STATUS_WORKING_SET_LIMIT_RANGE,          ERROR_INVALID_PARAMETER);
@@ -140,6 +142,7 @@ static void run_error_tests(void)
     cmp(STATUS_INVALID_CID,                      ERROR_INVALID_PARAMETER);
     cmp(STATUS_STACK_OVERFLOW,                   ERROR_STACK_OVERFLOW);
     cmp(STATUS_BAD_INITIAL_STACK,                ERROR_STACK_OVERFLOW);
+    cmp4(STATUS_STACK_OVERFLOW_READ,             ERROR_STACK_OVERFLOW_READ, ERROR_STACK_OVERFLOW);
     cmp(STATUS_INVALID_VOLUME_LABEL,             ERROR_LABEL_TOO_LONG);
     cmp(STATUS_SECTION_NOT_EXTENDED,             ERROR_OUTOFMEMORY);
     cmp(STATUS_NOT_MAPPED_DATA,                  ERROR_INVALID_ADDRESS);
@@ -148,29 +151,46 @@ static void run_error_tests(void)
     cmp(STATUS_INVALID_INFO_CLASS,               ERROR_INVALID_PARAMETER);
     cmp(STATUS_SUSPEND_COUNT_EXCEEDED,           ERROR_SIGNAL_REFUSED);
     cmp(STATUS_NOTIFY_ENUM_DIR,                  ERROR_NOTIFY_ENUM_DIR);
+    cmp2(STATUS_BAD_CURRENT_DIRECTORY,           ERROR_BAD_CURRENT_DIRECTORY);
     cmp(STATUS_REGISTRY_RECOVERED,               ERROR_REGISTRY_RECOVERED);
+    cmp2(STATUS_REGISTRY_HIVE_RECOVERED,         ERROR_REGISTRY_HIVE_RECOVERED);
     cmp(STATUS_REGISTRY_IO_FAILED,               ERROR_REGISTRY_IO_FAILED);
     cmp(STATUS_NOT_REGISTRY_FILE,                ERROR_NOT_REGISTRY_FILE);
+    cmp2(STATUS_CANNOT_LOAD_REGISTRY_FILE,       ERROR_CANNOT_LOAD_REGISTRY_FILE);
+    cmp2(STATUS_SYSTEM_HIVE_TOO_LARGE,           ERROR_SYSTEM_HIVE_TOO_LARGE);
     cmp(STATUS_KEY_DELETED,                      ERROR_KEY_DELETED);
     cmp(STATUS_NO_LOG_SPACE,                     ERROR_NO_LOG_SPACE);
     cmp(STATUS_KEY_HAS_CHILDREN,                 ERROR_KEY_HAS_CHILDREN);
     cmp(STATUS_CHILD_MUST_BE_VOLATILE,           ERROR_CHILD_MUST_BE_VOLATILE);
     cmp(STATUS_REGISTRY_CORRUPT,                 ERROR_BADDB);
+    cmp2(STATUS_REGISTRY_QUOTA_LIMIT,            ERROR_REGISTRY_QUOTA_LIMIT);
     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);
+    cmp2(STATUS_DLL_INIT_FAILED_LOGOFF,          ERROR_DLL_INIT_FAILED_LOGOFF);
     cmp2(STATUS_INVALID_IMPORT_OF_NON_DLL,       ERROR_INVALID_IMPORT_OF_NON_DLL);
     cmp(STATUS_ORDINAL_NOT_FOUND,                ERROR_INVALID_ORDINAL);
     cmp(STATUS_DRIVER_ORDINAL_NOT_FOUND,         ERROR_INVALID_ORDINAL);
     cmp2(STATUS_DRIVER_UNABLE_TO_LOAD,           ERROR_BAD_DRIVER);
     cmp(STATUS_ENTRYPOINT_NOT_FOUND,             ERROR_PROC_NOT_FOUND);
     cmp(STATUS_DRIVER_ENTRYPOINT_NOT_FOUND,      ERROR_PROC_NOT_FOUND);
+    cmp2(STATUS_BAD_DLL_ENTRYPOINT,              ERROR_BAD_DLL_ENTRYPOINT);
+    cmp2(STATUS_BAD_SERVICE_ENTRYPOINT,          ERROR_BAD_SERVICE_ENTRYPOINT);
+    cmp2(STATUS_FAILED_DRIVER_ENTRY,             ERROR_FAILED_DRIVER_ENTRY);
+    cmp2(STATUS_DLL_MIGHT_BE_INSECURE,           ERROR_DLL_MIGHT_BE_INSECURE);
+    cmp2(STATUS_DLL_MIGHT_BE_INCOMPATIBLE,       ERROR_DLL_MIGHT_BE_INCOMPATIBLE);
+    cmp2(STATUS_ILLEGAL_DLL_RELOCATION,          ERROR_ILLEGAL_DLL_RELOCATION);
+    cmp2(STATUS_NOT_SAFE_MODE_DRIVER,            ERROR_NOT_SAFE_MODE_DRIVER);
+    cmp2(STATUS_DRIVER_DATABASE_ERROR,           ERROR_DRIVER_DATABASE_ERROR);
     cmp(STATUS_PENDING,                          ERROR_IO_PENDING);
     cmp(STATUS_MORE_ENTRIES,                     ERROR_MORE_DATA);
     cmp(STATUS_INTEGER_OVERFLOW,                 ERROR_ARITHMETIC_OVERFLOW);
     cmp(STATUS_BUFFER_OVERFLOW,                  ERROR_MORE_DATA);
+    cmp2(STATUS_MARSHALL_OVERFLOW,               ERROR_MARSHALL_OVERFLOW);
     cmp(STATUS_NO_MORE_FILES,                    ERROR_NO_MORE_FILES);
+    cmp2(STATUS_REDIRECTOR_HAS_OPEN_HANDLES,     ERROR_REDIRECTOR_HAS_OPEN_HANDLES);
+    cmp2(STATUS_SERVER_HAS_OPEN_HANDLES,         ERROR_SERVER_HAS_OPEN_HANDLES);
     cmp2(STATUS_HANDLES_CLOSED,                  ERROR_HANDLES_CLOSED);
     cmp(STATUS_NO_INHERITANCE,                   ERROR_NO_INHERITANCE);
     cmp(STATUS_NO_MORE_EAS,                      ERROR_NO_MORE_ITEMS);
@@ -183,8 +203,19 @@ static void run_error_tests(void)
     cmp(STATUS_ILLEGAL_FUNCTION,                 ERROR_INVALID_FUNCTION);
     cmp(STATUS_IN_PAGE_ERROR,                    ERROR_SWAPERROR);
     cmp(STATUS_PAGEFILE_QUOTA,                   ERROR_PAGEFILE_QUOTA);
+    cmp2(STATUS_PAGEFILE_QUOTA_EXCEEDED,         ERROR_PAGEFILE_QUOTA_EXCEEDED);
+    cmp2(STATUS_PAGE_FAULT_TRANSITION,           ERROR_PAGE_FAULT_TRANSITION);
+    cmp2(STATUS_PAGE_FAULT_DEMAND_ZERO,          ERROR_PAGE_FAULT_DEMAND_ZERO);
+    cmp2(STATUS_PAGE_FAULT_COPY_ON_WRITE,        ERROR_PAGE_FAULT_COPY_ON_WRITE);
+    cmp2(STATUS_PAGE_FAULT_GUARD_PAGE,           ERROR_PAGE_FAULT_GUARD_PAGE);
+    cmp2(STATUS_PAGE_FAULT_PAGING_FILE,          ERROR_PAGE_FAULT_PAGING_FILE);
+    cmp2(STATUS_CACHE_PAGE_LOCKED,               ERROR_CACHE_PAGE_LOCKED);
+    cmp2(STATUS_PAGEFILE_CREATE_FAILED,          ERROR_PAGEFILE_CREATE_FAILED);
+    cmp2(STATUS_NO_PAGEFILE,                     ERROR_NO_PAGEFILE);
     cmp(STATUS_COMMITMENT_LIMIT,                 ERROR_COMMITMENT_LIMIT);
+    cmp2(STATUS_COMMITMENT_MINIMUM,              ERROR_COMMITMENT_MINIMUM);
     cmp(STATUS_SECTION_TOO_BIG,                  ERROR_NOT_ENOUGH_MEMORY);
+    cmp2(STATUS_SEGMENT_NOTIFICATION,            ERROR_SEGMENT_NOTIFICATION);
     cmp(RPC_NT_SS_IN_NULL_CONTEXT,               ERROR_INVALID_HANDLE);
     cmp(RPC_NT_INVALID_BINDING,                  ERROR_INVALID_HANDLE);
     cmp(STATUS_INVALID_HANDLE,                   ERROR_INVALID_HANDLE);
@@ -195,6 +226,7 @@ static void run_error_tests(void)
     cmp(STATUS_NOT_COMMITTED,                    ERROR_INVALID_ADDRESS);
     cmp(STATUS_PARTIAL_COPY,                     ERROR_PARTIAL_COPY);
     cmp3(STATUS_LPC_REPLY_LOST,                  ERROR_CONNECTION_ABORTED, ERROR_INTERNAL_ERROR);
+    cmp2(STATUS_INVALID_VARIANT,                 ERROR_INVALID_VARIANT);
     cmp(STATUS_INVALID_PARAMETER,                ERROR_INVALID_PARAMETER);
     cmp(STATUS_INVALID_PARAMETER_1,              ERROR_INVALID_PARAMETER);
     cmp(STATUS_INVALID_PARAMETER_2,              ERROR_INVALID_PARAMETER);
@@ -219,19 +251,26 @@ static void run_error_tests(void)
     cmp(STATUS_NO_SUCH_FILE,                     ERROR_FILE_NOT_FOUND);
     cmp(STATUS_INVALID_DEVICE_REQUEST,           ERROR_INVALID_FUNCTION);
     cmp2(STATUS_VOLUME_NOT_UPGRADED,             ERROR_INVALID_FUNCTION);
+    cmp2(STATUS_CONVERT_TO_LARGE,                ERROR_CONVERT_TO_LARGE);
     cmp(STATUS_END_OF_FILE,                      ERROR_HANDLE_EOF);
     cmp(STATUS_FILE_FORCED_CLOSED,               ERROR_HANDLE_EOF);
     cmp(STATUS_WRONG_VOLUME,                     ERROR_WRONG_DISK);
     cmp(STATUS_NO_MEDIA,                         ERROR_NO_MEDIA_IN_DRIVE);
     cmp(STATUS_NO_MEDIA_IN_DEVICE,               ERROR_NOT_READY);
     cmp2(STATUS_VOLUME_DISMOUNTED,               ERROR_NOT_READY);
+    cmp2(STATUS_VOLUME_MOUNTED,                  ERROR_VOLUME_MOUNTED);
+    cmp2(STATUS_MOUNT_POINT_NOT_RESOLVED,        ERROR_MOUNT_POINT_NOT_RESOLVED);
     cmp(STATUS_NONEXISTENT_SECTOR,               ERROR_SECTOR_NOT_FOUND);
     cmp(STATUS_WORKING_SET_QUOTA,                ERROR_WORKING_SET_QUOTA);
     cmp(STATUS_NO_MEMORY,                        ERROR_NOT_ENOUGH_MEMORY);
     cmp(STATUS_CONFLICTING_ADDRESSES,            ERROR_INVALID_ADDRESS);
     cmp(STATUS_INVALID_SYSTEM_SERVICE,           ERROR_INVALID_FUNCTION);
+    cmp2(STATUS_THREAD_WAS_SUSPENDED,            ERROR_THREAD_WAS_SUSPENDED);
+    cmp2(STATUS_TOO_MANY_THREADS,                ERROR_TOO_MANY_THREADS);
+    cmp2(STATUS_THREAD_NOT_IN_PROCESS,           ERROR_THREAD_NOT_IN_PROCESS);
     cmp(STATUS_THREAD_IS_TERMINATING,            ERROR_ACCESS_DENIED);
     cmp(STATUS_PROCESS_IS_TERMINATING,           ERROR_ACCESS_DENIED);
+    cmp2(STATUS_SYSTEM_PROCESS_TERMINATED,       ERROR_SYSTEM_PROCESS_TERMINATED);
     cmp(STATUS_INVALID_LOCK_SEQUENCE,            ERROR_ACCESS_DENIED);
     cmp(STATUS_INVALID_VIEW_SIZE,                ERROR_ACCESS_DENIED);
     cmp(STATUS_ALREADY_COMMITTED,                ERROR_ACCESS_DENIED);
@@ -273,12 +312,16 @@ static void run_error_tests(void)
     cmp(STATUS_BUFFER_TOO_SMALL,                 ERROR_INSUFFICIENT_BUFFER);
     cmp(STATUS_UNABLE_TO_DECOMMIT_VM,            ERROR_INVALID_ADDRESS);
     cmp(STATUS_DISK_CORRUPT_ERROR,               ERROR_DISK_CORRUPT);
+    cmp2(STATUS_FT_READ_RECOVERY_FROM_BACKUP,    ERROR_FT_READ_RECOVERY_FROM_BACKUP);
+    cmp2(STATUS_FT_WRITE_RECOVERY,               ERROR_FT_WRITE_RECOVERY);
     cmp(STATUS_FT_MISSING_MEMBER,                ERROR_IO_DEVICE);
     cmp(STATUS_FT_ORPHANING,                     ERROR_IO_DEVICE);
+    cmp2(STATUS_BACKUP_CONTROLLER,               ERROR_BACKUP_CONTROLLER);
     cmp(STATUS_VARIABLE_NOT_FOUND,               ERROR_ENVVAR_NOT_FOUND);
     cmp(STATUS_OBJECT_NAME_INVALID,              ERROR_INVALID_NAME);
     cmp(STATUS_OBJECT_NAME_NOT_FOUND,            ERROR_FILE_NOT_FOUND);
     cmp(STATUS_OBJECT_NAME_COLLISION,            ERROR_ALREADY_EXISTS);
+    cmp2(STATUS_OBJECT_NAME_EXISTS,              ERROR_OBJECT_NAME_EXISTS);
     cmp(STATUS_OBJECT_PATH_INVALID,              ERROR_BAD_PATHNAME);
     cmp(STATUS_OBJECT_PATH_NOT_FOUND,            ERROR_PATH_NOT_FOUND);
     cmp(STATUS_DFS_EXIT_PATH_FOUND,              ERROR_PATH_NOT_FOUND);
@@ -288,14 +331,19 @@ static void run_error_tests(void)
     cmp(STATUS_DATA_OVERRUN,                     ERROR_IO_DEVICE);
     cmp(STATUS_DATA_LATE_ERROR,                  ERROR_IO_DEVICE);
     cmp(STATUS_DATA_ERROR,                       ERROR_CRC);
+    cmp2(STATUS_DATA_NOT_ACCEPTED,               ERROR_DATA_NOT_ACCEPTED);
+    cmp2(STATUS_LOST_WRITEBEHIND_DATA,           ERROR_LOST_WRITEBEHIND_DATA);
     cmp(STATUS_CRC_ERROR,                        ERROR_CRC);
     cmp(STATUS_SHARING_VIOLATION,                ERROR_SHARING_VIOLATION);
     cmp(STATUS_QUOTA_EXCEEDED,                   ERROR_NOT_ENOUGH_QUOTA);
+    cmp2(STATUS_FS_DRIVER_REQUIRED,              ERROR_FS_DRIVER_REQUIRED);
     cmp(STATUS_MUTANT_NOT_OWNED,                 ERROR_NOT_OWNER);
+    cmp2(STATUS_MUTANT_LIMIT_EXCEEDED,           ERROR_MUTANT_LIMIT_EXCEEDED);
     cmp(STATUS_SEMAPHORE_LIMIT_EXCEEDED,         ERROR_TOO_MANY_POSTS);
     cmp(STATUS_DISK_FULL,                        ERROR_DISK_FULL);
     cmp(STATUS_LOCK_NOT_GRANTED,                 ERROR_LOCK_VIOLATION);
     cmp(STATUS_FILE_LOCK_CONFLICT,               ERROR_LOCK_VIOLATION);
+    cmp2(STATUS_NOT_TINY_STREAM,                 ERROR_NOT_TINY_STREAM);
     cmp(STATUS_NOT_A_DIRECTORY,                  ERROR_DIRECTORY);
     cmp2(STATUS_CANNOT_MAKE,                     ERROR_CANNOT_MAKE);
     cmp(STATUS_UNKNOWN_REVISION,                 ERROR_UNKNOWN_REVISION);
@@ -322,6 +370,9 @@ static void run_error_tests(void)
     cmp(STATUS_PASSWORD_RESTRICTION,             ERROR_PASSWORD_RESTRICTION);
     cmp(STATUS_PASSWORD_EXPIRED,                 ERROR_PASSWORD_EXPIRED);
     cmp(STATUS_PASSWORD_MUST_CHANGE,             ERROR_PASSWORD_MUST_CHANGE);
+    cmp2(STATUS_PWD_TOO_SHORT,                   ERROR_PWD_TOO_SHORT);
+    cmp2(STATUS_PWD_TOO_RECENT,                  ERROR_PWD_TOO_RECENT);
+    cmp2(STATUS_PWD_HISTORY_CONFLICT,            ERROR_PWD_HISTORY_CONFLICT);
     cmp(STATUS_ACCOUNT_DISABLED,                 ERROR_ACCOUNT_DISABLED);
     cmp(STATUS_ACCOUNT_LOCKED_OUT,               ERROR_ACCOUNT_LOCKED_OUT);
     cmp(STATUS_NONE_MAPPED,                      ERROR_NONE_MAPPED);
@@ -332,6 +383,7 @@ static void run_error_tests(void)
     cmp(STATUS_INVALID_SID,                      ERROR_INVALID_SID);
     cmp(STATUS_INVALID_SECURITY_DESCR,           ERROR_INVALID_SECURITY_DESCR);
     cmp(STATUS_PROCEDURE_NOT_FOUND,              ERROR_PROC_NOT_FOUND);
+    cmp2(STATUS_VDM_HARD_ERROR,                  ERROR_VDM_HARD_ERROR);
     cmp2(STATUS_INVALID_LDT_SIZE,                ERROR_INVALID_LDT_SIZE);
     cmp2(STATUS_INVALID_LDT_OFFSET,              ERROR_INVALID_LDT_OFFSET);
     cmp2(STATUS_INVALID_LDT_DESCRIPTOR,          ERROR_INVALID_LDT_DESCRIPTOR);
@@ -349,11 +401,14 @@ static void run_error_tests(void)
     cmp2(STATUS_INVALID_IMAGE_WIN_64,            ERROR_BAD_EXE_FORMAT);
     cmp(STATUS_NO_TOKEN,                         ERROR_NO_TOKEN);
     cmp(STATUS_RANGE_NOT_LOCKED,                 ERROR_NOT_LOCKED);
+    cmp2(STATUS_RANGE_LIST_CONFLICT,             ERROR_RANGE_LIST_CONFLICT);
+    cmp2(STATUS_RANGE_NOT_FOUND,                 ERROR_RANGE_NOT_FOUND);
     cmp(STATUS_SERVER_DISABLED,                  ERROR_SERVER_DISABLED);
     cmp(STATUS_SERVER_NOT_DISABLED,              ERROR_SERVER_NOT_DISABLED);
     cmp(STATUS_INVALID_ID_AUTHORITY,             ERROR_INVALID_ID_AUTHORITY);
     cmp(STATUS_ALLOTTED_SPACE_EXCEEDED,          ERROR_ALLOTTED_SPACE_EXCEEDED);
     cmp(STATUS_TOO_MANY_PAGING_FILES,            ERROR_NOT_ENOUGH_MEMORY);
+    cmp2(STATUS_RESOURCE_REQUIREMENTS_CHANGED,   ERROR_RESOURCE_REQUIREMENTS_CHANGED);
     cmp(STATUS_INSUFFICIENT_RESOURCES,           ERROR_NO_SYSTEM_RESOURCES);
     cmp(STATUS_INSUFF_SERVER_RESOURCES,          ERROR_NOT_ENOUGH_SERVER_MEMORY);
     cmp(STATUS_FILE_INVALID,                     ERROR_FILE_INVALID);
@@ -365,12 +420,17 @@ static void run_error_tests(void)
     cmp(STATUS_DEVICE_NOT_READY,                 ERROR_NOT_READY);
     cmp3(STATUS_DEVICE_NOT_CONNECTED,            ERROR_DEVICE_NOT_CONNECTED, ERROR_NOT_READY);
     cmp(STATUS_DEVICE_POWER_FAILURE,             ERROR_NOT_READY);
+    cmp2(STATUS_INSUFFICIENT_POWER,              ERROR_INSUFFICIENT_POWER);
+    cmp2(STATUS_DRIVER_FAILED_SLEEP,             ERROR_DRIVER_FAILED_SLEEP);
     cmp2(STATUS_NOT_FOUND,                       ERROR_NOT_FOUND);
     cmp2(STATUS_NO_MATCH,                        ERROR_NO_MATCH);
+    cmp2(STATUS_NO_MORE_MATCHES,                 ERROR_NO_MORE_MATCHES);
     cmp2(STATUS_PROPSET_NOT_FOUND,               ERROR_SET_NOT_FOUND);
+    cmp2(STATUS_FOUND_OUT_OF_SCOPE,              ERROR_FOUND_OUT_OF_SCOPE);
     cmp(STATUS_DEVICE_BUSY,                      ERROR_BUSY);
     cmp(STATUS_FREE_VM_NOT_AT_BASE,              ERROR_INVALID_ADDRESS);
     cmp(STATUS_MEMORY_NOT_ALLOCATED,             ERROR_INVALID_ADDRESS);
+    cmp2(STATUS_ALLOCATE_BUCKET,                 ERROR_ALLOCATE_BUCKET);
     cmp(STATUS_NOT_SAME_DEVICE,                  ERROR_NOT_SAME_DEVICE);
     cmp(STATUS_NOT_SUPPORTED,                    ERROR_NOT_SUPPORTED);
     cmp(STATUS_REMOTE_NOT_LISTENING,             ERROR_REM_NOT_LIST);
@@ -381,6 +441,7 @@ static void run_error_tests(void)
     cmp(STATUS_DEVICE_DOES_NOT_EXIST,            ERROR_DEV_NOT_EXIST);
     cmp(STATUS_TOO_MANY_COMMANDS,                ERROR_TOO_MANY_CMDS);
     cmp(STATUS_ADAPTER_HARDWARE_ERROR,           ERROR_ADAP_HDW_ERR);
+    cmp2(STATUS_BIOS_FAILED_TO_CONNECT_INTERRUPT,ERROR_BIOS_FAILED_TO_CONNECT_INTERRUPT);
     cmp(STATUS_REDIRECTOR_NOT_STARTED,           ERROR_PATH_NOT_FOUND);
     cmp(STATUS_INVALID_EA_NAME,                  ERROR_INVALID_EA_NAME);
     cmp(STATUS_EA_LIST_INCONSISTENT,             ERROR_EA_LIST_INCONSISTENT);
@@ -391,6 +452,8 @@ static void run_error_tests(void)
     cmp(STATUS_EA_CORRUPT_ERROR,                 ERROR_FILE_CORRUPT);
     cmp(STATUS_NONEXISTENT_EA_ENTRY,             ERROR_FILE_CORRUPT);
     cmp(STATUS_NO_EAS_ON_FILE,                   ERROR_FILE_CORRUPT);
+    cmp2(STATUS_REPARSE,                         ERROR_REPARSE);
+    cmp2(STATUS_REPARSE_OBJECT,                  ERROR_REPARSE_OBJECT);
     cmp2(STATUS_NOT_A_REPARSE_POINT,             ERROR_NOT_A_REPARSE_POINT);
     cmp4(STATUS_IO_REPARSE_TAG_INVALID,          ERROR_REPARSE_TAG_INVALID, ERROR_INVALID_PARAMETER);
     cmp4(STATUS_IO_REPARSE_TAG_MISMATCH,         ERROR_REPARSE_TAG_MISMATCH, ERROR_INVALID_PARAMETER);
@@ -406,6 +469,7 @@ static void run_error_tests(void)
     cmp2(STATUS_JOURNAL_DELETE_IN_PROGRESS,      ERROR_JOURNAL_DELETE_IN_PROGRESS);
     cmp2(STATUS_JOURNAL_NOT_ACTIVE,              ERROR_JOURNAL_NOT_ACTIVE);
     cmp2(STATUS_JOURNAL_ENTRY_DELETED,           ERROR_JOURNAL_ENTRY_DELETED);
+    cmp2(STATUS_PRIMARY_TRANSPORT_CONNECT_FAILED,ERROR_PRIMARY_TRANSPORT_CONNECT_FAILED);
     cmp(STATUS_INVALID_NETWORK_RESPONSE,         ERROR_BAD_NET_RESP);
     cmp(STATUS_USER_SESSION_DELETED,             ERROR_UNEXP_NET_ERR);
     cmp(STATUS_UNEXPECTED_NETWORK_ERROR,         ERROR_UNEXP_NET_ERR);
@@ -423,6 +487,7 @@ static void run_error_tests(void)
     cmp(STATUS_TOO_MANY_NODES,                   ERROR_TOO_MANY_NAMES);
     cmp(STATUS_TOO_MANY_SESSIONS,                ERROR_TOO_MANY_SESS);
     cmp(STATUS_SHARING_PAUSED,                   ERROR_SHARING_PAUSED);
+    cmp2(STATUS_CANT_ENABLE_DENY_ONLY,           ERROR_CANT_ENABLE_DENY_ONLY);
     cmp(STATUS_REQUEST_NOT_ACCEPTED,             ERROR_REQ_NOT_ACCEP);
     cmp(STATUS_REDIRECTOR_PAUSED,                ERROR_REDIR_PAUSED);
     cmp(STATUS_NET_WRITE_FAULT,                  ERROR_NET_WRITE_FAULT);
@@ -452,6 +517,7 @@ static void run_error_tests(void)
     cmp(STATUS_END_OF_MEDIA,                     ERROR_END_OF_MEDIA);
     cmp(STATUS_EOM_OVERFLOW,                     ERROR_EOM_OVERFLOW);
     cmp(STATUS_BEGINNING_OF_MEDIA,               ERROR_BEGINNING_OF_MEDIA);
+    cmp2(STATUS_MEDIA_CHECK,                     ERROR_MEDIA_CHECK);
     cmp(STATUS_MEDIA_CHANGED,                    ERROR_MEDIA_CHANGED);
     cmp(STATUS_BUS_RESET,                        ERROR_BUS_RESET);
     cmp(STATUS_FILEMARK_DETECTED,                ERROR_FILEMARK_DETECTED);
@@ -462,12 +528,32 @@ static void run_error_tests(void)
     cmp(STATUS_DEVICE_NOT_PARTITIONED,           ERROR_DEVICE_NOT_PARTITIONED);
     cmp(STATUS_UNABLE_TO_LOCK_MEDIA,             ERROR_UNABLE_TO_LOCK_MEDIA);
     cmp(STATUS_UNABLE_TO_UNLOAD_MEDIA,           ERROR_UNABLE_TO_UNLOAD_MEDIA);
+    cmp2(STATUS_ILLEGAL_CHARACTER,               ERROR_ILLEGAL_CHARACTER);
     cmp(STATUS_UNMAPPABLE_CHARACTER,             ERROR_NO_UNICODE_TRANSLATION);
+    cmp2(STATUS_UNDEFINED_CHARACTER,             ERROR_UNDEFINED_CHARACTER);
+    cmp2(STATUS_TRANSLATION_COMPLETE,            ERROR_TRANSLATION_COMPLETE);
     cmp(STATUS_NOT_ALL_ASSIGNED,                 ERROR_NOT_ALL_ASSIGNED);
     cmp(STATUS_SOME_NOT_MAPPED,                  ERROR_SOME_NOT_MAPPED);
     cmp(STATUS_NO_QUOTAS_FOR_ACCOUNT,            ERROR_NO_QUOTAS_FOR_ACCOUNT);
+    cmp2(STATUS_QUOTA_LIST_INCONSISTENT,         ERROR_QUOTA_LIST_INCONSISTENT);
     cmp(STATUS_LOCAL_USER_SESSION_KEY,           ERROR_LOCAL_USER_SESSION_KEY);
     cmp(STATUS_NULL_LM_PASSWORD,                 ERROR_NULL_LM_PASSWORD);
+    cmp2(STATUS_SYNCHRONIZATION_REQUIRED,        ERROR_SYNCHRONIZATION_REQUIRED);
+    cmp2(STATUS_WAKE_SYSTEM_DEBUGGER,            ERROR_WAKE_SYSTEM_DEBUGGER);
+    cmp2(DBG_EXCEPTION_HANDLED,                  ERROR_DBG_EXCEPTION_HANDLED);
+    cmp2(DBG_CONTINUE,                           ERROR_DBG_CONTINUE);
+    cmp2(DBG_TERMINATE_THREAD,                   ERROR_DBG_TERMINATE_THREAD);
+    cmp2(DBG_TERMINATE_PROCESS,                  ERROR_DBG_TERMINATE_PROCESS);
+    cmp2(DBG_CONTROL_C,                          ERROR_DBG_CONTROL_C);
+    cmp2(DBG_PRINTEXCEPTION_C,                   ERROR_DBG_PRINTEXCEPTION_C);
+    cmp2(DBG_RIPEXCEPTION,                       ERROR_DBG_RIPEXCEPTION);
+    cmp2(DBG_CONTROL_BREAK,                      ERROR_DBG_CONTROL_BREAK);
+    cmp2(DBG_COMMAND_EXCEPTION,                  ERROR_DBG_COMMAND_EXCEPTION);
+    cmp2(DBG_EXCEPTION_NOT_HANDLED,              ERROR_DBG_EXCEPTION_NOT_HANDLED);
+    cmp2(STATUS_DEBUG_ATTACH_FAILED,             ERROR_DEBUG_ATTACH_FAILED);
+    cmp2(STATUS_VALIDATE_CONTINUE,               ERROR_VALIDATE_CONTINUE);
+    cmp2(STATUS_EXTRANEOUS_INFORMATION,          ERROR_EXTRANEOUS_INFORMATION);
+    cmp2(STATUS_GUID_SUBSTITUTION_MADE,          ERROR_GUID_SUBSTITUTION_MADE);
     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);
@@ -485,9 +571,30 @@ static void run_error_tests(void)
     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);
+    cmp2(STATUS_TIMER_RESOLUTION_NOT_SET,        ERROR_TIMER_RESOLUTION_NOT_SET);
+    cmp2(STATUS_ARBITRATION_UNHANDLED,           ERROR_ARBITRATION_UNHANDLED);
+    cmp2(STATUS_CARDBUS_NOT_SUPPORTED,           ERROR_CARDBUS_NOT_SUPPORTED);
+    cmp2(STATUS_MP_PROCESSOR_MISMATCH,           ERROR_MP_PROCESSOR_MISMATCH);
+    cmp2(STATUS_HIBERNATED,                      ERROR_HIBERNATED);
+    cmp2(STATUS_RESUME_HIBERNATION,              ERROR_RESUME_HIBERNATION);
+    cmp2(STATUS_FIRMWARE_UPDATED,                ERROR_FIRMWARE_UPDATED);
+    cmp2(STATUS_WAKE_SYSTEM,                     ERROR_WAKE_SYSTEM);
+    cmp2(STATUS_WAIT_1,                          ERROR_WAIT_1);
+    cmp2(STATUS_WAIT_2,                          ERROR_WAIT_2);
+    cmp2(STATUS_WAIT_3,                          ERROR_WAIT_3);
+    cmp2(STATUS_WAIT_63,                         ERROR_WAIT_63);
+    cmp2(STATUS_ABANDONED_WAIT_0,                ERROR_WAIT_NO_CHILDREN);
+    cmp2(STATUS_ABANDONED_WAIT_63,               ERROR_ABANDONED_WAIT_63);
+    cmp2(STATUS_USER_APC,                        ERROR_USER_APC);
+    cmp2(STATUS_KERNEL_APC,                      ERROR_KERNEL_APC);
+    cmp2(STATUS_ALERTED,                         ERROR_ALERTED);
+    cmp2(STATUS_NOTIFY_CLEANUP,                  ERROR_NOTIFY_CLEANUP);
+    cmp2(STATUS_NO_CALLBACK_ACTIVE,              ERROR_NO_CALLBACK_ACTIVE);
+    cmp4(STATUS_NOINTERFACE,                     ERROR_NOINTERFACE, E_NOINTERFACE);
     cmp(STATUS_BAD_INHERITANCE_ACL,              ERROR_BAD_INHERITANCE_ACL);
     cmp(STATUS_INVALID_GROUP_ATTRIBUTES,         ERROR_INVALID_GROUP_ATTRIBUTES);
     cmp(STATUS_BAD_IMPERSONATION_LEVEL,          ERROR_BAD_IMPERSONATION_LEVEL);
+    cmp2(STATUS_ELEVATION_REQUIRED,              ERROR_ELEVATION_REQUIRED);
     cmp(STATUS_CANT_OPEN_ANONYMOUS,              ERROR_CANT_OPEN_ANONYMOUS);
     cmp(STATUS_BAD_VALIDATION_CLASS,             ERROR_BAD_VALIDATION_CLASS);
     cmp(STATUS_BAD_TOKEN_TYPE,                   ERROR_BAD_TOKEN_TYPE);
@@ -502,6 +609,7 @@ static void run_error_tests(void)
     cmp(STATUS_DOMAIN_LIMIT_EXCEEDED,            ERROR_DOMAIN_LIMIT_EXCEEDED);
     cmp2(STATUS_OPLOCK_NOT_GRANTED,              ERROR_OPLOCK_NOT_GRANTED);
     cmp2(STATUS_INVALID_OPLOCK_PROTOCOL,         ERROR_INVALID_OPLOCK_PROTOCOL);
+    cmp2(STATUS_OPLOCK_BREAK_IN_PROGRESS,        ERROR_OPLOCK_BREAK_IN_PROGRESS);
     cmp(STATUS_INTERNAL_DB_CORRUPTION,           ERROR_INTERNAL_DB_CORRUPTION);
     cmp(STATUS_INTERNAL_ERROR,                   ERROR_INTERNAL_ERROR);
     cmp(STATUS_GENERIC_NOT_MAPPED,               ERROR_GENERIC_NOT_MAPPED);
@@ -512,7 +620,12 @@ static void run_error_tests(void)
     cmp(STATUS_BAD_LOGON_SESSION_STATE,          ERROR_BAD_LOGON_SESSION_STATE);
     cmp(STATUS_LOGON_SESSION_COLLISION,          ERROR_LOGON_SESSION_COLLISION);
     cmp(STATUS_INVALID_LOGON_TYPE,               ERROR_INVALID_LOGON_TYPE);
+    cmp2(STATUS_LOGON_SERVER_CONFLICT,           ERROR_LOGON_SERVER_CONFLICT);
+    cmp2(STATUS_SERVER_SID_MISMATCH,             ERROR_SERVER_SID_MISMATCH);
+    cmp2(STATUS_RXACT_STATE_CREATED,             ERROR_RXACT_STATE_CREATED);
     cmp(STATUS_RXACT_INVALID_STATE,              ERROR_RXACT_INVALID_STATE);
+    cmp2(STATUS_RXACT_COMMITTED,                 ERROR_RXACT_COMMITTED);
+    cmp2(STATUS_RXACT_COMMIT_NECESSARY,          ERROR_RXACT_COMMIT_NECESSARY);
     cmp(STATUS_RXACT_COMMIT_FAILURE,             ERROR_RXACT_COMMIT_FAILURE);
     cmp(STATUS_SPECIAL_ACCOUNT,                  ERROR_SPECIAL_ACCOUNT);
     cmp(STATUS_SPECIAL_USER,                     ERROR_SPECIAL_USER);
@@ -532,6 +645,8 @@ static void run_error_tests(void)
     cmp(STATUS_NO_SUCH_MEMBER,                   ERROR_NO_SUCH_MEMBER);
     cmp(STATUS_INVALID_MEMBER,                   ERROR_INVALID_MEMBER);
     cmp(STATUS_TOO_MANY_SIDS,                    ERROR_TOO_MANY_SIDS);
+    cmp2(STATUS_ALL_SIDS_FILTERED,               ERROR_ALL_SIDS_FILTERED);
+    cmp2(STATUS_INSUFFICIENT_LOGON_INFO,         ERROR_INSUFFICIENT_LOGON_INFO);
     cmp(STATUS_LM_CROSS_ENCRYPTION_REQUIRED,     ERROR_LM_CROSS_ENCRYPTION_REQUIRED);
     cmp(STATUS_MESSAGE_NOT_FOUND,                ERROR_MR_MID_NOT_FOUND);
     cmp2(STATUS_CONTROL_C_EXIT,                  ERROR_CONTROL_C_EXIT);
@@ -542,12 +657,20 @@ static void run_error_tests(void)
     cmp(STATUS_LINK_TIMEOUT,                     ERROR_UNEXP_NET_ERR);
     cmp(STATUS_INVALID_CONNECTION,               ERROR_UNEXP_NET_ERR);
     cmp(STATUS_INVALID_ADDRESS,                  ERROR_UNEXP_NET_ERR);
+    cmp2(STATUS_IP_ADDRESS_CONFLICT1,            ERROR_IP_ADDRESS_CONFLICT1);
+    cmp2(STATUS_IP_ADDRESS_CONFLICT2,            ERROR_IP_ADDRESS_CONFLICT2);
     cmp2(STATUS_MISSING_SYSTEMFILE,              ERROR_MISSING_SYSTEMFILE);
-    cmp2(STATUS_PAGEFILE_CREATE_FAILED,          ERROR_PAGEFILE_CREATE_FAILED);
+    cmp2(STATUS_CORRUPT_SYSTEM_FILE,             ERROR_CORRUPT_SYSTEM_FILE);
+    cmp2(STATUS_SYSTEM_IMAGE_BAD_SIGNATURE,      ERROR_SYSTEM_IMAGE_BAD_SIGNATURE);
+    cmp2(STATUS_CRASH_DUMP,                      ERROR_CRASH_DUMP);
+    cmp2(STATUS_LONGJUMP,                        ERROR_LONGJUMP);
+    cmp2(STATUS_UNWIND_CONSOLIDATE,              ERROR_UNWIND_CONSOLIDATE);
     cmp2(STATUS_UNHANDLED_EXCEPTION,             ERROR_UNHANDLED_EXCEPTION);
+    cmp2(STATUS_MCA_OCCURED,                     ERROR_MCA_OCCURED);
     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_FLOAT_MULTIPLE_FAULTS,           ERROR_FLOAT_MULTIPLE_FAULTS);
+    cmp2(STATUS_FLOAT_MULTIPLE_TRAPS,            ERROR_FLOAT_MULTIPLE_TRAPS);
     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);
@@ -555,6 +678,8 @@ static void run_error_tests(void)
     cmp(STATUS_DRIVER_INTERNAL_ERROR,            ERROR_IO_DEVICE);
     cmp(STATUS_INVALID_DEVICE_STATE,             ERROR_BAD_COMMAND);
     cmp(STATUS_DEVICE_CONFIGURATION_ERROR,       ERROR_INVALID_PARAMETER);
+    cmp2(STATUS_DEVICE_ENUMERATION_ERROR,        ERROR_DEVICE_ENUMERATION_ERROR);
+    cmp2(STATUS_INVALID_DEVICE_OBJECT_PARAMETER, ERROR_INVALID_DEVICE_OBJECT_PARAMETER);
     cmp2(STATUS_SOURCE_ELEMENT_EMPTY,            ERROR_SOURCE_ELEMENT_EMPTY);
     cmp2(STATUS_DESTINATION_ELEMENT_FULL,        ERROR_DESTINATION_ELEMENT_FULL);
     cmp2(STATUS_ILLEGAL_ELEMENT_ADDRESS,         ERROR_ILLEGAL_ELEMENT_ADDRESS);
@@ -575,7 +700,10 @@ static void run_error_tests(void)
     cmp2(STATUS_NOT_EXPORT_FORMAT,               ERROR_NOT_EXPORT_FORMAT);
     cmp2(STATUS_FILE_ENCRYPTED,                  ERROR_FILE_ENCRYPTED);
     cmp2(STATUS_EFS_ALG_BLOB_TOO_BIG,            ERROR_EFS_ALG_BLOB_TOO_BIG);
+    cmp2(STATUS_BUFFER_ALL_ZEROS,                ERROR_BUFFER_ALL_ZEROS);
     cmp(STATUS_INVALID_USER_BUFFER,              ERROR_INVALID_USER_BUFFER);
+    cmp2(STATUS_BAD_COMPRESSION_BUFFER,          ERROR_BAD_COMPRESSION_BUFFER);
+    cmp2(STATUS_UNSUPPORTED_COMPRESSION,         ERROR_UNSUPPORTED_COMPRESSION);
     cmp(STATUS_SERIAL_NO_DEVICE_INITED,          ERROR_SERIAL_NO_DEVICE);
     cmp(STATUS_SHARED_IRQ_BUSY,                  ERROR_IRQ_BUSY);
     cmp(STATUS_SERIAL_MORE_WRITES,               ERROR_MORE_WRITES);
@@ -584,6 +712,7 @@ static void run_error_tests(void)
     cmp(STATUS_FLOPPY_WRONG_CYLINDER,            ERROR_FLOPPY_WRONG_CYLINDER);
     cmp(STATUS_FLOPPY_UNKNOWN_ERROR,             ERROR_FLOPPY_UNKNOWN_ERROR);
     cmp(STATUS_FLOPPY_BAD_REGISTERS,             ERROR_FLOPPY_BAD_REGISTERS);
+    cmp2(STATUS_FLOPPY_VOLUME,                   ERROR_FLOPPY_VOLUME);
     cmp(STATUS_DISK_RECALIBRATE_FAILED,          ERROR_DISK_RECALIBRATE_FAILED);
     cmp(STATUS_DISK_OPERATION_FAILED,            ERROR_DISK_OPERATION_FAILED);
     cmp(STATUS_DISK_RESET_FAILED,                ERROR_DISK_RESET_FAILED);
@@ -609,8 +738,14 @@ static void run_error_tests(void)
     cmp(STATUS_TRANSACTION_INVALID_TYPE,         ERROR_UNEXP_NET_ERR);
     cmp(STATUS_NOT_SERVER_SESSION,               ERROR_NOT_SUPPORTED);
     cmp(STATUS_NOT_CLIENT_SESSION,               ERROR_NOT_SUPPORTED);
+    cmp2(STATUS_CLIENT_SERVER_PARAMETERS_INVALID,ERROR_CLIENT_SERVER_PARAMETERS_INVALID);
     cmp(STATUS_USER_MAPPED_FILE,                 ERROR_USER_MAPPED_FILE);
+    cmp2(STATUS_INVALID_HW_PROFILE,              ERROR_INVALID_HW_PROFILE);
     cmp(STATUS_PLUGPLAY_NO_DEVICE,               ERROR_SERVICE_DISABLED);
+    cmp2(STATUS_PLUGPLAY_QUERY_VETOED,           ERROR_PLUGPLAY_QUERY_VETOED);
+    cmp2(STATUS_INVALID_PLUGPLAY_DEVICE_PATH,    ERROR_INVALID_PLUGPLAY_DEVICE_PATH);
+    cmp2(STATUS_PNP_RESTART_ENUMERATION,         ERROR_PNP_RESTART_ENUMERATION);
+    cmp2(STATUS_PNP_REBOOT_REQUIRED,             ERROR_PNP_REBOOT_REQUIRED);
     cmp2(STATUS_WMI_GUID_NOT_FOUND,              ERROR_WMI_GUID_NOT_FOUND);
     cmp2(STATUS_WMI_INSTANCE_NOT_FOUND,          ERROR_WMI_INSTANCE_NOT_FOUND);
     cmp2(STATUS_WMI_ITEMID_NOT_FOUND,            ERROR_WMI_ITEMID_NOT_FOUND);
@@ -815,6 +950,7 @@ static void run_error_tests(void)
     cmp2(CRYPT_E_REVOCATION_OFFLINE,             ERROR_MUTUAL_AUTH_FAILED);
     cmp2(STATUS_SHUTDOWN_IN_PROGRESS,            ERROR_SHUTDOWN_IN_PROGRESS);
     cmp2(STATUS_SERVER_SHUTDOWN_IN_PROGRESS,     ERROR_SERVER_SHUTDOWN_IN_PROGRESS);
+    cmp2(STATUS_SYSTEM_SHUTDOWN,                 ERROR_SYSTEM_SHUTDOWN);
     cmp4(STATUS_DS_MEMBERSHIP_EVALUATED_LOCALLY, ERROR_DS_MEMBERSHIP_EVALUATED_LOCALLY, 1922);
     cmp4(STATUS_DS_NO_ATTRIBUTE_OR_VALUE,        ERROR_DS_NO_ATTRIBUTE_OR_VALUE, 1923);
     cmp4(STATUS_DS_INVALID_ATTRIBUTE_SYNTAX,     ERROR_DS_INVALID_ATTRIBUTE_SYNTAX, 1924);
@@ -857,6 +993,7 @@ static void run_error_tests(void)
     cmp2(STATUS_SAM_NEED_BOOTKEY_FLOPPY,         ERROR_DS_SAM_NEED_BOOTKEY_FLOPPY);
     cmp2(STATUS_DS_INIT_FAILURE_CONSOLE,         ERROR_DS_INIT_FAILURE_CONSOLE);
     cmp2(STATUS_DS_SAM_INIT_FAILURE_CONSOLE,     ERROR_DS_SAM_INIT_FAILURE_CONSOLE);
+    cmp2(STATUS_DS_VERSION_CHECK_FAILURE,        ERROR_DS_VERSION_CHECK_FAILURE);
     cmp2(STATUS_UNFINISHED_CONTEXT_DELETED,      SEC_E_UNFINISHED_CONTEXT_DELETED);
     cmp2(STATUS_NO_TGT_REPLY,                    SEC_E_NO_TGT_REPLY);
     cmp2(STATUS_NO_IP_ADDRESSES,                 SEC_E_NO_IP_ADDRESSES);
@@ -881,6 +1018,7 @@ static void run_error_tests(void)
     cmp2(STATUS_NOT_SUPPORTED_ON_SBS,            ERROR_NOT_SUPPORTED_ON_SBS);
     cmp2(STATUS_DRIVER_BLOCKED_CRITICAL,         ERROR_DRIVER_BLOCKED);
     cmp2(STATUS_DRIVER_BLOCKED,                  ERROR_DRIVER_BLOCKED);
+    cmp2(STATUS_DRIVER_CANCEL_TIMEOUT,           ERROR_DRIVER_CANCEL_TIMEOUT);
     cmp2(STATUS_PRENT4_MACHINE_ACCOUNT,          ERROR_DS_MACHINE_ACCOUNT_CREATED_PRENT4);
     cmp2(STATUS_DS_AG_CANT_HAVE_UNIVERSAL_MEMBER,ERROR_DS_AG_CANT_HAVE_UNIVERSAL_MEMBER);
     cmp2(STATUS_DS_SHUTTING_DOWN,                ERROR_DS_SHUTTING_DOWN);
@@ -926,6 +1064,7 @@ static void run_error_tests(void)
     cmp2(STATUS_CTX_SHADOW_ENDED_BY_MODE_CHANGE, ERROR_CTX_SHADOW_ENDED_BY_MODE_CHANGE);
     cmp2(STATUS_CTX_SHADOW_NOT_RUNNING,          ERROR_CTX_SHADOW_NOT_RUNNING);
     cmp2(STATUS_LICENSE_VIOLATION,               ERROR_CTX_LICENSE_NOT_AVAILABLE);
+    cmp2(STATUS_EVALUATION_EXPIRATION,           ERROR_EVALUATION_EXPIRATION);
     cmp2(STATUS_NETWORK_SESSION_EXPIRED,         ERROR_NO_USER_SESSION_KEY);
     cmp2(STATUS_FILES_OPEN,                      ERROR_OPEN_FILES);
     cmp2(STATUS_SXS_SECTION_NOT_FOUND,           ERROR_SXS_SECTION_NOT_FOUND);
@@ -968,6 +1107,7 @@ static void run_error_tests(void)
     cmp2(STATUS_SXS_FILE_HASH_MISSING,           ERROR_SXS_FILE_HASH_MISSING);
     cmp2(STATUS_REDIRECTOR_STARTED,              ERROR_SERVICE_ALREADY_RUNNING);
     cmp2(STATUS_AUDITING_DISABLED,               ERROR_AUDITING_DISABLED);
+    cmp2(STATUS_AUDIT_FAILED,                    ERROR_AUDIT_FAILED);
     cmp2(STATUS_CLUSTER_NODE_ALREADY_UP,         ERROR_CLUSTER_NODE_ALREADY_UP);
     cmp2(STATUS_CLUSTER_NODE_ALREADY_DOWN,       ERROR_CLUSTER_NODE_ALREADY_DOWN);
     cmp2(STATUS_CLUSTER_NETWORK_ALREADY_ONLINE,  ERROR_CLUSTER_NETWORK_ALREADY_ONLINE);
index 706984a..0387398 100644 (file)
@@ -704,7 +704,7 @@ static void read_file_test(void)
     apc_count = 0;
     U(iosb).Status = 0xdeadbabe;
     iosb.Information = 0xdeadbeef;
-    ok( !is_signaled( read ), "read handle is not signaled\n" );
+    ok( !is_signaled( read ), "read handle is signaled\n" );
     status = pNtReadFile( read, 0, apc, &apc_count, &iosb, buffer, 1, NULL, NULL );
     ok( status == STATUS_PENDING, "wrong status %x\n", status );
     ok( !is_signaled( read ), "read handle is signaled\n" );
@@ -717,7 +717,7 @@ static void read_file_test(void)
     Sleep(1);  /* FIXME: needed for wine to run the i/o apc  */
     ok( U(iosb).Status == 0, "wrong status %x\n", U(iosb).Status );
     ok( iosb.Information == 1, "wrong info %lu\n", iosb.Information );
-    ok( is_signaled( read ), "read handle is signaled\n" );
+    ok( is_signaled( read ), "read handle is not signaled\n" );
     ok( !apc_count, "apc was called\n" );
     apc_count = 0;
     SleepEx( 1, FALSE ); /* non-alertable sleep */
@@ -758,7 +758,7 @@ static void read_file_test(void)
     ok(ret && written == 1, "WriteFile error %d\n", GetLastError());
     /* partial read is good enough */
     Sleep(1);  /* FIXME: needed for wine to run the i/o apc  */
-    ok( is_signaled( event ), "event is signaled\n" );
+    ok( is_signaled( event ), "event is not signaled\n" );
     ok( U(iosb).Status == 0, "wrong status %x\n", U(iosb).Status );
     ok( iosb.Information == 1, "wrong info %lu\n", iosb.Information );
     ok( !apc_count, "apc was called\n" );
@@ -789,7 +789,7 @@ static void read_file_test(void)
     ok( status == STATUS_INVALID_HANDLE, "wrong status %x\n", status );
     ok( U(iosb).Status == 0xdeadbabe, "wrong status %x\n", U(iosb).Status );
     ok( iosb.Information == 0xdeadbeef, "wrong info %lu\n", iosb.Information );
-    ok( is_signaled( event ), "event is signaled\n" );  /* not reset on invalid handle */
+    ok( is_signaled( event ), "event is not signaled\n" );  /* not reset on invalid handle */
     ok( !apc_count, "apc was called\n" );
     SleepEx( 1, TRUE ); /* alertable sleep */
     ok( !apc_count, "apc was called\n" );
@@ -809,7 +809,7 @@ static void read_file_test(void)
     Sleep(1);  /* FIXME: needed for wine to run the i/o apc  */
     ok( U(iosb).Status == STATUS_PIPE_BROKEN, "wrong status %x\n", U(iosb).Status );
     ok( iosb.Information == 0, "wrong info %lu\n", iosb.Information );
-    ok( is_signaled( event ), "event is signaled\n" );
+    ok( is_signaled( event ), "event is not signaled\n" );
     ok( !apc_count, "apc was called\n" );
     SleepEx( 1, TRUE ); /* alertable sleep */
     ok( apc_count == 1, "apc was not called\n" );
@@ -834,7 +834,7 @@ static void read_file_test(void)
     Sleep(1);  /* FIXME: needed for wine to run the i/o apc  */
     ok( U(iosb).Status == STATUS_CANCELLED, "wrong status %x\n", U(iosb).Status );
     ok( iosb.Information == 0, "wrong info %lu\n", iosb.Information );
-    ok( is_signaled( event ), "event is signaled\n" );
+    ok( is_signaled( event ), "event is not signaled\n" );
     ok( !apc_count, "apc was called\n" );
     SleepEx( 1, TRUE ); /* alertable sleep */
     ok( apc_count == 1, "apc was not called\n" );
@@ -860,7 +860,7 @@ static void read_file_test(void)
     Sleep(1);  /* FIXME: needed for wine to run the i/o apc  */
     ok( U(iosb).Status == STATUS_CANCELLED, "wrong status %x\n", U(iosb).Status );
     ok( iosb.Information == 0, "wrong info %lu\n", iosb.Information );
-    ok( is_signaled( event ), "event is signaled\n" );
+    ok( is_signaled( event ), "event is not signaled\n" );
     ok( !apc_count, "apc was called\n" );
     SleepEx( 1, TRUE ); /* alertable sleep */
     ok( apc_count == 1, "apc was not called\n" );
@@ -886,7 +886,7 @@ static void read_file_test(void)
         Sleep(1);  /* FIXME: needed for wine to run the i/o apc  */
         ok( U(iosb).Status == STATUS_CANCELLED, "wrong status %x\n", U(iosb).Status );
         ok( iosb.Information == 0, "wrong info %lu\n", iosb.Information );
-        ok( is_signaled( event ), "event is signaled\n" );
+        ok( is_signaled( event ), "event is not signaled\n" );
         ok( !apc_count, "apc was called\n" );
         SleepEx( 1, TRUE ); /* alertable sleep */
         ok( apc_count == 1, "apc was not called\n" );
@@ -912,7 +912,7 @@ static void read_file_test(void)
         Sleep(1);  /* FIXME: needed for wine to run the i/o apc  */
         ok( U(iosb).Status == STATUS_CANCELLED, "wrong status %x\n", U(iosb).Status );
         ok( iosb.Information == 0, "wrong info %lu\n", iosb.Information );
-        ok( is_signaled( event ), "event is signaled\n" );
+        ok( is_signaled( event ), "event is not signaled\n" );
         ok( !apc_count, "apc was called\n" );
         SleepEx( 1, TRUE ); /* alertable sleep */
         ok( apc_count == 2, "apc was not called\n" );
@@ -933,7 +933,7 @@ static void read_file_test(void)
     if (status == STATUS_PENDING) WaitForSingleObject( event, 1000 );
     ok( U(iosb).Status == STATUS_SUCCESS, "wrong status %x\n", U(iosb).Status );
     ok( iosb.Information == strlen(text), "wrong info %lu\n", iosb.Information );
-    ok( is_signaled( event ), "event is signaled\n" );
+    ok( is_signaled( event ), "event is not signaled\n" );
     ok( !apc_count, "apc was called\n" );
     SleepEx( 1, TRUE ); /* alertable sleep */
     ok( apc_count == 1, "apc was not called\n" );
@@ -950,7 +950,7 @@ static void read_file_test(void)
     if (status == STATUS_PENDING) WaitForSingleObject( event, 1000 );
     ok( U(iosb).Status == STATUS_SUCCESS, "wrong status %x\n", U(iosb).Status );
     ok( iosb.Information == strlen(text), "wrong info %lu\n", iosb.Information );
-    ok( is_signaled( event ), "event is signaled\n" );
+    ok( is_signaled( event ), "event is not signaled\n" );
     ok( !apc_count, "apc was called\n" );
     SleepEx( 1, TRUE ); /* alertable sleep */
     ok( apc_count == 1, "apc was not called\n" );
@@ -967,7 +967,7 @@ static void read_file_test(void)
         WaitForSingleObject( event, 1000 );
         ok( U(iosb).Status == STATUS_END_OF_FILE, "wrong status %x\n", U(iosb).Status );
         ok( iosb.Information == 0, "wrong info %lu\n", iosb.Information );
-        ok( is_signaled( event ), "event is signaled\n" );
+        ok( is_signaled( event ), "event is not signaled\n" );
         ok( !apc_count, "apc was called\n" );
         SleepEx( 1, TRUE ); /* alertable sleep */
         ok( apc_count == 1, "apc was not called\n" );
@@ -988,7 +988,7 @@ static void read_file_test(void)
     if (status == STATUS_PENDING) WaitForSingleObject( event, 1000 );
     ok( U(iosb).Status == STATUS_SUCCESS, "wrong status %x\n", U(iosb).Status );
     ok( iosb.Information == strlen(text), "wrong info %lu\n", iosb.Information );
-    ok( is_signaled( event ), "event is signaled\n" );
+    ok( is_signaled( event ), "event is not signaled\n" );
     ok( !apc_count, "apc was called\n" );
     SleepEx( 1, TRUE ); /* alertable sleep */
     ok( apc_count == 1, "apc was not called\n" );
@@ -1002,7 +1002,7 @@ static void read_file_test(void)
     ok( status == STATUS_SUCCESS, "wrong status %x\n", status );
     ok( U(iosb).Status == STATUS_SUCCESS, "wrong status %x\n", U(iosb).Status );
     ok( iosb.Information == strlen(text), "wrong info %lu\n", iosb.Information );
-    ok( is_signaled( event ), "event is signaled\n" );
+    ok( is_signaled( event ), "event is not signaled\n" );
     ok( !apc_count, "apc was called\n" );
     SleepEx( 1, TRUE ); /* alertable sleep */
     todo_wine ok( !apc_count, "apc was called\n" );
@@ -1165,39 +1165,6 @@ static void nt_mailslot_test(void)
 
     if  ( rc == STATUS_SUCCESS ) pNtClose(hslot);
 
-    /*
-     * Test that the length field is checked properly
-     */
-    attr.Length = 0;
-    rc = pNtCreateMailslotFile(&hslot, DesiredAccess,
-         &attr, &IoStatusBlock, CreateOptions, MailslotQuota, MaxMessageSize,
-         &TimeOut);
-    todo_wine ok( rc == STATUS_INVALID_PARAMETER, "rc = %x not c000000d STATUS_INVALID_PARAMETER\n", rc);
-
-    if  (rc == STATUS_SUCCESS) pNtClose(hslot);
-
-    attr.Length = sizeof(OBJECT_ATTRIBUTES)+1;
-    rc = pNtCreateMailslotFile(&hslot, DesiredAccess,
-         &attr, &IoStatusBlock, CreateOptions, MailslotQuota, MaxMessageSize,
-         &TimeOut);
-    todo_wine ok( rc == STATUS_INVALID_PARAMETER, "rc = %x not c000000d STATUS_INVALID_PARAMETER\n", rc);
-
-    if  (rc == STATUS_SUCCESS) pNtClose(hslot);
-
-    /*
-     * Test handling of a NULL unicode string in ObjectName
-     */
-    InitializeObjectAttributes(&attr, &str, OBJ_CASE_INSENSITIVE, 0, NULL);
-    attr.ObjectName = NULL;
-    rc = pNtCreateMailslotFile(&hslot, DesiredAccess,
-         &attr, &IoStatusBlock, CreateOptions, MailslotQuota, MaxMessageSize,
-         &TimeOut);
-    ok( rc == STATUS_OBJECT_PATH_SYNTAX_BAD ||
-        rc == STATUS_INVALID_PARAMETER,
-        "rc = %x not STATUS_OBJECT_PATH_SYNTAX_BAD or STATUS_INVALID_PARAMETER\n", rc);
-
-    if  (rc == STATUS_SUCCESS) pNtClose(hslot);
-
     /*
      * Test a valid call
      */
@@ -4553,8 +4520,7 @@ static void test_junction_points(void)
     dwret = NtQueryInformationFile(hJunction, &iosb, &new_attrib, sizeof(new_attrib), FileBasicInformation);
     ok(dwret == STATUS_SUCCESS, "Failed to get junction point folder's attributes (0x%x).\n", dwret);
     ok(old_attrib.LastAccessTime.QuadPart == new_attrib.LastAccessTime.QuadPart,
-       "Junction point folder's access time does not match (0x%llx != 0x%llx).\n",
-       new_attrib.LastAccessTime.QuadPart, old_attrib.LastAccessTime.QuadPart);
+       "Junction point folder's access time does not match.\n");
     CloseHandle(hJunction);
 
     /* Check deleting a junction point as if it were a directory */
index d1bd3d1..9e4fd2f 100644 (file)
@@ -126,7 +126,7 @@ static NTSTATUS create_pipe(PHANDLE handle, ULONG sharing, ULONG options)
     attr.SecurityDescriptor       = NULL;
     attr.SecurityQualityOfService = NULL;
 
-    timeout.QuadPart = -100000000000ll;
+    timeout.QuadPart = -100000000;
 
     res = pNtCreateNamedPipeFile(handle, FILE_READ_ATTRIBUTES | SYNCHRONIZE, &attr, &iosb, sharing,  2 /*FILE_CREATE*/,
                                  options, 1, 0, 0, 0xFFFFFFFF, 500, 500, &timeout);
@@ -152,7 +152,7 @@ static void test_create_invalid(void)
     attr.SecurityDescriptor       = NULL;
     attr.SecurityQualityOfService = NULL;
 
-    timeout.QuadPart = -100000000000ll;
+    timeout.QuadPart = -100000000;
 
 /* create a pipe with FILE_OVERWRITE */
     res = pNtCreateNamedPipeFile(&handle, FILE_READ_ATTRIBUTES | SYNCHRONIZE, &attr, &iosb, FILE_SHARE_READ, 4 /*FILE_OVERWRITE*/,
@@ -277,10 +277,9 @@ static void test_overlapped(void)
     ok(!res, "NtCreateNamedPipeFile returned %x\n", res);
 
     memset(&iosb, 0x55, sizeof(iosb));
-
-/* try with event and apc */
     res = listen_pipe(hPipe, hEvent, &iosb, TRUE);
     ok(res == STATUS_PENDING, "NtFsControlFile returned %x\n", res);
+    ok(U(iosb).Status == 0x55555555, "iosb.Status got changed to %x\n", U(iosb).Status);
 
     hClient = CreateFileW(testpipe, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
     ok(hClient != INVALID_HANDLE_VALUE, "can't open pipe, GetLastError: %x\n", GetLastError());
@@ -294,9 +293,28 @@ static void test_overlapped(void)
 
     ok(ioapc_called, "IOAPC didn't run\n");
 
-    CloseHandle(hEvent);
     CloseHandle(hPipe);
     CloseHandle(hClient);
+
+    res = create_pipe(&hPipe, FILE_SHARE_READ | FILE_SHARE_WRITE, 0 /* OVERLAPPED */);
+    ok(!res, "NtCreateNamedPipeFile returned %x\n", res);
+
+    hClient = CreateFileW(testpipe, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
+    ok(hClient != INVALID_HANDLE_VALUE || broken(GetLastError() == ERROR_PIPE_BUSY) /* > Win 8 */,
+       "can't open pipe, GetLastError: %x\n", GetLastError());
+
+    if (hClient != INVALID_HANDLE_VALUE)
+    {
+        memset(&iosb, 0x55, sizeof(iosb));
+        res = listen_pipe(hPipe, hEvent, &iosb, TRUE);
+        ok(res == STATUS_PIPE_CONNECTED, "NtFsControlFile returned %x\n", res);
+        ok(U(iosb).Status == 0x55555555, "iosb.Status got changed to %x\n", U(iosb).Status);
+
+        CloseHandle(hClient);
+    }
+
+    CloseHandle(hPipe);
+    CloseHandle(hEvent);
 }
 
 static BOOL userapc_called;
@@ -374,7 +392,7 @@ static void test_alertable(void)
     todo_wine ok(res == STATUS_CANCELLED, "NtFsControlFile returned %x\n", res);
 
     ok(userapc_called, "user apc didn't run\n");
-    todo_wine ok(U(iosb).Status == 0x55555555, "iosb.Status got changed to %x\n", U(iosb).Status);
+    ok(U(iosb).Status == 0x55555555, "iosb.Status got changed to %x\n", U(iosb).Status);
     ok(WaitForSingleObjectEx(hEvent, 0, TRUE) == WAIT_TIMEOUT, "hEvent signaled\n");
     ok(!ioapc_called, "IOAPC ran\n");
 
@@ -521,7 +539,7 @@ static void test_filepipeinfo(void)
     attr.SecurityDescriptor       = NULL;
     attr.SecurityQualityOfService = NULL;
 
-    timeout.QuadPart = -100000000000ll;
+    timeout.QuadPart = -100000000;
 
     /* test with INVALID_HANDLE_VALUE */
     res = pNtQueryInformationFile(INVALID_HANDLE_VALUE, &iosb, &fpi, sizeof(fpi), (FILE_INFORMATION_CLASS)23);
@@ -541,7 +559,8 @@ static void test_filepipeinfo(void)
     check_pipe_handle_state(hServer, 0, 1);
 
     hClient = CreateFileW(testpipe, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
-    ok(hClient != INVALID_HANDLE_VALUE, "can't open pipe, GetLastError: %x\n", GetLastError());
+    ok(hClient != INVALID_HANDLE_VALUE || broken(GetLastError() == ERROR_PIPE_BUSY) /* > Win 8 */,
+       "can't open pipe, GetLastError: %x\n", GetLastError());
 
     check_pipe_handle_state(hServer, 0, 1);
     check_pipe_handle_state(hClient, 0, 0);
@@ -617,7 +636,8 @@ static void test_filepipeinfo(void)
     check_pipe_handle_state(hServer, 1, 0);
 
     hClient = CreateFileW(testpipe, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, 0, 0);
-    ok(hClient != INVALID_HANDLE_VALUE, "can't open pipe, GetLastError: %x\n", GetLastError());
+    ok(hClient != INVALID_HANDLE_VALUE || broken(GetLastError() == ERROR_PIPE_BUSY) /* > Win 8 */,
+       "can't open pipe, GetLastError: %x\n", GetLastError());
 
     check_pipe_handle_state(hServer, 1, 0);
     check_pipe_handle_state(hClient, 0, 0);
index 8984e24..0a8359a 100755 (executable)
@@ -340,6 +340,7 @@ static void test_NtOpenKey(void)
     NTSTATUS status;
     OBJECT_ATTRIBUTES attr;
     ACCESS_MASK am = KEY_READ;
+    UNICODE_STRING str;
 
     /* All NULL */
     status = pNtOpenKey(NULL, 0, NULL);
@@ -361,6 +362,86 @@ static void test_NtOpenKey(void)
     status = pNtOpenKey(&key, am, &attr);
     ok(status == STATUS_INVALID_PARAMETER, "Expected STATUS_INVALID_PARAMETER, got: 0x%08x\n", status);
 
+    /* Zero accessmask */
+    attr.Length = sizeof(attr);
+    status = pNtOpenKey(&key, 0, &attr);
+todo_wine
+    ok(status == STATUS_ACCESS_DENIED, "Expected STATUS_ACCESS_DENIED, got: 0x%08x\n", status);
+    if (status == STATUS_SUCCESS) NtClose(key);
+
+    /* Calling without parent key requres full registry path. */
+    pRtlCreateUnicodeStringFromAsciiz( &str, "Machine" );
+    InitializeObjectAttributes(&attr, &str, 0, 0, 0);
+    status = pNtOpenKey(&key, KEY_READ, &attr);
+    todo_wine ok(status == STATUS_OBJECT_PATH_SYNTAX_BAD, "NtOpenKey Failed: 0x%08x\n", status);
+    pRtlFreeUnicodeString( &str );
+
+    /* Open is case sensitive unless OBJ_CASE_INSENSITIVE is specified. */
+    pRtlCreateUnicodeStringFromAsciiz( &str, "\\Registry\\Machine" );
+    status = pNtOpenKey(&key, KEY_READ, &attr);
+    todo_wine ok(status == STATUS_OBJECT_PATH_NOT_FOUND, "NtOpenKey Failed: 0x%08x\n", status);
+
+    attr.Attributes = OBJ_CASE_INSENSITIVE;
+    status = pNtOpenKey(&key, KEY_READ, &attr);
+    ok(status == STATUS_SUCCESS, "NtOpenKey Failed: 0x%08x\n", status);
+    pNtClose(key);
+    pRtlFreeUnicodeString( &str );
+
+    pRtlCreateUnicodeStringFromAsciiz( &str, "" );
+    status = pNtOpenKey(&key, KEY_READ, &attr);
+    todo_wine
+    ok( status == STATUS_OBJECT_PATH_SYNTAX_BAD, "NtOpenKey failed: 0x%08x\n", status );
+    pRtlFreeUnicodeString( &str );
+
+    pRtlCreateUnicodeStringFromAsciiz( &str, "\\" );
+    status = pNtOpenKey(&key, KEY_READ, &attr);
+    todo_wine
+    ok( status == STATUS_OBJECT_TYPE_MISMATCH, "NtOpenKey failed: 0x%08x\n", status );
+    pRtlFreeUnicodeString( &str );
+
+    pRtlCreateUnicodeStringFromAsciiz( &str, "\\Registry" );
+    status = pNtOpenKey(&key, KEY_READ, &attr);
+    todo_wine
+    ok( status == STATUS_SUCCESS, "NtOpenKey failed: 0x%08x\n", status );
+    pNtClose( key );
+    pRtlFreeUnicodeString( &str );
+
+    pRtlCreateUnicodeStringFromAsciiz( &str, "\\Registry\\" );
+    status = pNtOpenKey(&key, KEY_READ, &attr);
+    ok( status == STATUS_SUCCESS, "NtOpenKey failed: 0x%08x\n", status );
+    pNtClose( key );
+    pRtlFreeUnicodeString( &str );
+
+    pRtlCreateUnicodeStringFromAsciiz( &str, "\\Foobar" );
+    status = pNtOpenKey(&key, KEY_READ, &attr);
+    todo_wine
+    ok( status == STATUS_OBJECT_NAME_NOT_FOUND, "NtOpenKey failed: 0x%08x\n", status );
+    pRtlFreeUnicodeString( &str );
+
+    pRtlCreateUnicodeStringFromAsciiz( &str, "\\Foobar\\Machine" );
+    status = pNtOpenKey(&key, KEY_READ, &attr);
+    todo_wine
+    ok( status == STATUS_OBJECT_PATH_NOT_FOUND, "NtOpenKey failed: 0x%08x\n", status );
+    pRtlFreeUnicodeString( &str );
+
+    pRtlCreateUnicodeStringFromAsciiz( &str, "\\Machine\\Software\\Classes" );
+    status = pNtOpenKey(&key, KEY_READ, &attr);
+    todo_wine
+    ok( status == STATUS_OBJECT_PATH_NOT_FOUND, "NtOpenKey failed: 0x%08x\n", status );
+    pRtlFreeUnicodeString( &str );
+
+    pRtlCreateUnicodeStringFromAsciiz( &str, "Machine\\Software\\Classes" );
+    status = pNtOpenKey(&key, KEY_READ, &attr);
+    todo_wine
+    ok( status == STATUS_OBJECT_PATH_SYNTAX_BAD, "NtOpenKey failed: 0x%08x\n", status );
+    pRtlFreeUnicodeString( &str );
+
+    pRtlCreateUnicodeStringFromAsciiz( &str, "\\Device\\Null" );
+    status = pNtOpenKey(&key, KEY_READ, &attr);
+    todo_wine
+    ok( status == STATUS_OBJECT_TYPE_MISMATCH, "NtOpenKey failed: 0x%08x\n", status );
+    pRtlFreeUnicodeString( &str );
+
     if (!pNtOpenKeyEx)
     {
         win_skip("NtOpenKeyEx not available\n");
@@ -455,6 +536,95 @@ static void test_NtCreateKey(void)
     pNtDeleteKey( subkey );
     pNtClose( subkey );
 
+    attr.RootDirectory = 0;
+    attr.Attributes = OBJ_CASE_INSENSITIVE;
+
+    pRtlCreateUnicodeStringFromAsciiz( &str, "" );
+    status = pNtCreateKey( &subkey, am, &attr, 0, 0, 0, 0 );
+    todo_wine
+    ok( status == STATUS_OBJECT_PATH_SYNTAX_BAD, "NtCreateKey failed: 0x%08x\n", status );
+    pRtlFreeUnicodeString( &str );
+
+    pRtlCreateUnicodeStringFromAsciiz( &str, "\\" );
+    status = pNtCreateKey( &subkey, am, &attr, 0, 0, 0, 0 );
+    todo_wine
+    ok( status == STATUS_OBJECT_TYPE_MISMATCH, "NtCreateKey failed: 0x%08x\n", status );
+    pRtlFreeUnicodeString( &str );
+
+    pRtlCreateUnicodeStringFromAsciiz( &str, "\\Registry" );
+    status = pNtCreateKey( &subkey, am, &attr, 0, 0, 0, 0 );
+    todo_wine
+    ok( status == STATUS_SUCCESS || status == STATUS_ACCESS_DENIED,
+        "NtCreateKey failed: 0x%08x\n", status );
+    if (!status) pNtClose( subkey );
+    pRtlFreeUnicodeString( &str );
+
+    pRtlCreateUnicodeStringFromAsciiz( &str, "\\Registry\\" );
+    status = pNtCreateKey( &subkey, am, &attr, 0, 0, 0, 0 );
+    ok( status == STATUS_SUCCESS || status == STATUS_ACCESS_DENIED,
+        "NtCreateKey failed: 0x%08x\n", status );
+    if (!status) pNtClose( subkey );
+    pRtlFreeUnicodeString( &str );
+
+    pRtlCreateUnicodeStringFromAsciiz( &str, "\\Foobar" );
+    status = pNtCreateKey( &subkey, am, &attr, 0, 0, 0, 0 );
+    todo_wine
+    ok( status == STATUS_OBJECT_NAME_NOT_FOUND, "NtCreateKey failed: 0x%08x\n", status );
+    pRtlFreeUnicodeString( &str );
+
+    pRtlCreateUnicodeStringFromAsciiz( &str, "\\Foobar\\Machine" );
+    status = pNtCreateKey( &subkey, am, &attr, 0, 0, 0, 0 );
+    todo_wine
+    ok( status == STATUS_OBJECT_PATH_NOT_FOUND, "NtCreateKey failed: 0x%08x\n", status );
+    pRtlFreeUnicodeString( &str );
+
+    pRtlCreateUnicodeStringFromAsciiz( &str, "\\Machine\\Software\\Classes" );
+    status = pNtCreateKey( &subkey, am, &attr, 0, 0, 0, 0 );
+    todo_wine
+    ok( status == STATUS_OBJECT_PATH_NOT_FOUND, "NtCreateKey failed: 0x%08x\n", status );
+    pRtlFreeUnicodeString( &str );
+
+    pRtlCreateUnicodeStringFromAsciiz( &str, "Machine\\Software\\Classes" );
+    status = pNtCreateKey( &subkey, am, &attr, 0, 0, 0, 0 );
+    todo_wine
+    ok( status == STATUS_OBJECT_PATH_SYNTAX_BAD, "NtCreateKey failed: 0x%08x\n", status );
+    pRtlFreeUnicodeString( &str );
+
+    pRtlCreateUnicodeStringFromAsciiz( &str, "\\Device\\Null" );
+    status = pNtCreateKey( &subkey, am, &attr, 0, 0, 0, 0 );
+    todo_wine
+    ok( status == STATUS_OBJECT_TYPE_MISMATCH, "NtCreateKey failed: 0x%08x\n", status );
+    pRtlFreeUnicodeString( &str );
+
+    pRtlCreateUnicodeStringFromAsciiz( &str, "\\Registry\\Machine\\Software\\Classes" );
+    status = pNtCreateKey( &subkey, am, &attr, 0, 0, 0, 0 );
+    ok( status == STATUS_SUCCESS || status == STATUS_ACCESS_DENIED,
+        "NtCreateKey failed: 0x%08x\n", status );
+    if (!status) pNtClose( subkey );
+    pRtlFreeUnicodeString( &str );
+
+    /* the REGISTRY part is case-sensitive unless OBJ_CASE_INSENSITIVE is specified */
+    attr.Attributes = 0;
+    pRtlCreateUnicodeStringFromAsciiz( &str, "\\Registry\\Machine\\Software\\Classes" );
+    status = pNtCreateKey( &subkey, am, &attr, 0, 0, 0, 0 );
+    todo_wine
+    ok( status == STATUS_OBJECT_PATH_NOT_FOUND, "NtCreateKey failed: 0x%08x\n", status );
+    pRtlFreeUnicodeString( &str );
+
+    pRtlCreateUnicodeStringFromAsciiz( &str, "\\REGISTRY\\Machine\\Software\\Classes" );
+    status = pNtCreateKey( &subkey, am, &attr, 0, 0, 0, 0 );
+    ok( status == STATUS_SUCCESS || status == STATUS_ACCESS_DENIED,
+        "NtCreateKey failed: 0x%08x\n", status );
+    if (!status) pNtClose( subkey );
+    pRtlFreeUnicodeString( &str );
+
+    pRtlCreateUnicodeStringFromAsciiz( &str, "\\REGISTRY\\MACHINE\\SOFTWARE\\CLASSES" );
+    status = pNtCreateKey( &subkey, am, &attr, 0, 0, 0, 0 );
+    ok( status == STATUS_SUCCESS || status == STATUS_ACCESS_DENIED,
+        "NtCreateKey failed: 0x%08x\n", status );
+    if (!status) pNtClose( subkey );
+    pRtlFreeUnicodeString( &str );
+
     pNtClose(key);
 }
 
@@ -639,7 +809,7 @@ static void test_NtQueryValueKey(void)
     ok(status == STATUS_SUCCESS, "NtSetValueKey Failed: 0x%08x\n", status);
 
     status = pNtQueryValueKey(key, &ValName, KeyValuePartialInformation, &pi, sizeof(pi), &len);
-    ok(status == STATUS_SUCCESS, "NtQueryValueKey should have returned STATUS_BUFFER_TOO_SMALL instead of 0x%08x\n", status);
+    ok(status == STATUS_SUCCESS, "NtQueryValueKey should have returned STATUS_SUCCESS instead of 0x%08x\n", status);
     ok(pi.Type == 0xff00ff00, "Type=%x\n", pi.Type);
     ok(pi.DataLength == 0, "DataLength=%u\n", pi.DataLength);
     pRtlFreeUnicodeString(&ValName);
@@ -1524,6 +1694,7 @@ static void test_NtQueryKey(void)
     pRtlCreateUnicodeStringFromAsciiz(&str, "test_subkey");
     status = pNtCreateKey(&subkey, GENERIC_ALL, &attr, 0, 0, 0, 0);
     ok(status == STATUS_SUCCESS, "NtCreateKey failed: 0x%08x\n", status);
+    pRtlFreeUnicodeString(&str);
 
     status = pNtQueryKey(subkey, KeyCachedInformation, &cached_info, sizeof(cached_info), &len);
     ok(status == STATUS_SUCCESS, "NtQueryKey Failed: 0x%08x\n", status);
@@ -1544,11 +1715,13 @@ static void test_NtQueryKey(void)
     pRtlCreateUnicodeStringFromAsciiz(&str, "test_subkey2");
     status = pNtCreateKey(&subkey2, GENERIC_ALL, &attr, 0, 0, 0, 0);
     ok(status == STATUS_SUCCESS, "NtCreateKey failed: 0x%08x\n", status);
+    pRtlFreeUnicodeString(&str);
 
     pRtlCreateUnicodeStringFromAsciiz(&str, "val");
     dw = 64;
     status = pNtSetValueKey( subkey, &str, 0, REG_DWORD, &dw, sizeof(dw) );
     ok( status == STATUS_SUCCESS, "NtSetValueKey failed: 0x%08x\n", status );
+    pRtlFreeUnicodeString(&str);
 
     if (!winetest_interactive)
         skip("ROSTESTS-198: Causes an assert in Cm.\n");
@@ -1614,6 +1787,7 @@ static void test_notify(void)
     pRtlCreateUnicodeStringFromAsciiz(&str, "test_subkey");
     status = pNtCreateKey(&subkey, GENERIC_ALL, &attr, 0, 0, 0, 0);
     ok(status == STATUS_SUCCESS, "NtCreateKey failed: 0x%08x\n", status);
+    pRtlFreeUnicodeString(&str);
 
     status = pNtWaitForSingleObject(events[0], FALSE, &timeout);
     ok(status == STATUS_SUCCESS, "NtWaitForSingleObject returned %x\n", status);
@@ -1665,6 +1839,7 @@ static void test_notify(void)
         pRtlCreateUnicodeStringFromAsciiz(&str, "test_subkey");
         status = pNtCreateKey(&subkey, GENERIC_ALL, &attr, 0, 0, 0, 0);
         ok(status == STATUS_SUCCESS, "NtCreateKey failed: 0x%08x\n", status);
+        pRtlFreeUnicodeString(&str);
 
         status = pNtWaitForSingleObject(events[0], FALSE, &timeout);
         ok(status == STATUS_SUCCESS, "NtWaitForSingleObject returned %x\n", status);
index fe37915..2679aff 100755 (executable)
@@ -26,6 +26,9 @@
 #include "ntdll_test.h"
 #include "inaddr.h"
 #include "in6addr.h"
+#include "initguid.h"
+#define COBJMACROS
+#include "shobjidl.h"
 
 #ifndef __WINE_WINTERNL_H
 
@@ -63,9 +66,6 @@ static inline USHORT __my_ushort_swap(USHORT s)
 
 /* Function ptrs for ntdll calls */
 static HMODULE hntdll = 0;
-static PVOID     (WINAPI *pWinSqmStartSession)(PVOID unknown1, DWORD unknown2, DWORD unknown3);
-static BOOL      (WINAPI *pWinSqmIsOptedIn)(void);
-static NTSTATUS  (WINAPI *pWinSqmEndSession)(PVOID unknown1);
 static SIZE_T    (WINAPI  *pRtlCompareMemory)(LPCVOID,LPCVOID,SIZE_T);
 static SIZE_T    (WINAPI  *pRtlCompareMemoryUlong)(PULONG, SIZE_T, ULONG);
 static NTSTATUS  (WINAPI  *pRtlDeleteTimer)(HANDLE, HANDLE, HANDLE);
@@ -110,6 +110,8 @@ static NTSTATUS  (WINAPI *pRtlDecompressFragment)(USHORT, PUCHAR, ULONG, const U
 static NTSTATUS  (WINAPI *pRtlCompressBuffer)(USHORT, const UCHAR*, ULONG, PUCHAR, ULONG, ULONG, PULONG, PVOID);
 static BOOL      (WINAPI *pRtlIsCriticalSectionLocked)(CRITICAL_SECTION *);
 static BOOL      (WINAPI *pRtlIsCriticalSectionLockedByThread)(CRITICAL_SECTION *);
+static NTSTATUS  (WINAPI *pRtlInitializeCriticalSectionEx)(CRITICAL_SECTION *, ULONG, ULONG);
+static NTSTATUS  (WINAPI *pRtlQueryPackageIdentity)(HANDLE, WCHAR*, SIZE_T*, WCHAR*, SIZE_T*, BOOLEAN*);
 
 static HMODULE hkernel32 = 0;
 static BOOL      (WINAPI *pIsWow64Process)(HANDLE, PBOOL);
@@ -127,9 +129,6 @@ static void InitFunctionPtrs(void)
     hntdll = LoadLibraryA("ntdll.dll");
     ok(hntdll != 0, "LoadLibrary failed\n");
     if (hntdll) {
-        pWinSqmStartSession = (void *)GetProcAddress(hntdll, "WinSqmStartSession");
-        pWinSqmIsOptedIn = (void *)GetProcAddress(hntdll, "WinSqmIsOptedIn");
-        pWinSqmEndSession = (void *)GetProcAddress(hntdll, "WinSqmEndSession");
        pRtlCompareMemory = (void *)GetProcAddress(hntdll, "RtlCompareMemory");
        pRtlCompareMemoryUlong = (void *)GetProcAddress(hntdll, "RtlCompareMemoryUlong");
         pRtlDeleteTimer = (void *)GetProcAddress(hntdll, "RtlDeleteTimer");
@@ -174,6 +173,8 @@ static void InitFunctionPtrs(void)
         pRtlCompressBuffer = (void *)GetProcAddress(hntdll, "RtlCompressBuffer");
         pRtlIsCriticalSectionLocked = (void *)GetProcAddress(hntdll, "RtlIsCriticalSectionLocked");
         pRtlIsCriticalSectionLockedByThread = (void *)GetProcAddress(hntdll, "RtlIsCriticalSectionLockedByThread");
+        pRtlInitializeCriticalSectionEx = (void *)GetProcAddress(hntdll, "RtlInitializeCriticalSectionEx");
+        pRtlQueryPackageIdentity = (void *)GetProcAddress(hntdll, "RtlQueryPackageIdentity");
     }
     hkernel32 = LoadLibraryA("kernel32.dll");
     ok(hkernel32 != 0, "LoadLibrary failed\n");
@@ -184,48 +185,6 @@ static void InitFunctionPtrs(void)
     ok(strlen(src) == 15, "Source must be 16 bytes long!\n");
 }
 
-#ifdef __i386__
-const char stdcall3_thunk[] =
-    "\x56"              /* push %esi */
-    "\x89\xE6"          /* mov %esp, %esi */
-    "\xFF\x74\x24\x14"  /* pushl 20(%esp) */
-    "\xFF\x74\x24\x14"  /* pushl 20(%esp) */
-    "\xFF\x74\x24\x14"  /* pushl 20(%esp) */
-    "\xFF\x54\x24\x14"  /* calll 20(%esp) */
-    "\x89\xF0"          /* mov %esi, %eax */
-    "\x29\xE0"          /* sub %esp, %eax */
-    "\x89\xF4"          /* mov %esi, %esp */
-    "\x5E"              /* pop %esi */
-    "\xC2\x10\x00"      /* ret $16 */
-;
-
-static INT (WINAPI *call_stdcall_func3)(PVOID func, PVOID arg0, DWORD arg1, DWORD arg2) = NULL;
-
-static void test_WinSqm(void)
-{
-    INT args;
-
-    if (!pWinSqmStartSession)
-    {
-        win_skip("WinSqmStartSession() is not available\n");
-        return;
-    }
-
-    call_stdcall_func3 = (void*) VirtualAlloc( NULL, sizeof(stdcall3_thunk) - 1, MEM_COMMIT,
-                                               PAGE_EXECUTE_READWRITE );
-    memcpy( call_stdcall_func3, stdcall3_thunk, sizeof(stdcall3_thunk) - 1 );
-
-    args = 3 - call_stdcall_func3( pWinSqmStartSession, NULL, 0, 0 ) / 4;
-    ok(args == 3, "WinSqmStartSession expected to take %d arguments instead of 3\n", args);
-    args = 3 - call_stdcall_func3( pWinSqmIsOptedIn, NULL, 0, 0 ) / 4;
-    ok(args == 0, "WinSqmIsOptedIn expected to take %d arguments instead of 0\n", args);
-    args = 3 - call_stdcall_func3( pWinSqmEndSession, NULL, 0, 0 ) / 4;
-    ok(args == 1, "WinSqmEndSession expected to take %d arguments instead of 1\n", args);
-
-    VirtualFree( call_stdcall_func3, 0, MEM_RELEASE );
-}
-#endif
-
 #define COMP(str1,str2,cmplen,len) size = pRtlCompareMemory(str1, str2, cmplen); \
   ok(size == len, "Expected %ld, got %ld\n", size, (SIZE_T)len)
 
@@ -2010,7 +1969,7 @@ static void test_RtlIpv6AddressToStringEx(void)
 
         ok(res == STATUS_SUCCESS, "[validate] res = 0x%08x, expected STATUS_SUCCESS\n", res);
         ok(len == (strlen(tests[i].address) + 1) && !strcmp(buffer, tests[i].address),
-           "got len %d with '%s' (expected %d with '%s')\n", len, buffer, strlen(tests[i].address), tests[i].address);
+           "got len %d with '%s' (expected %d with '%s')\n", len, buffer, (int)strlen(tests[i].address), tests[i].address);
     }
 }
 
@@ -3165,16 +3124,114 @@ static void test_RtlIsCriticalSectionLocked(void)
     DeleteCriticalSection(&info.crit);
 }
 
+static void test_RtlInitializeCriticalSectionEx(void)
+{
+    static const CRITICAL_SECTION_DEBUG *no_debug = (void *)~(ULONG_PTR)0;
+    CRITICAL_SECTION cs;
+
+    if (!pRtlInitializeCriticalSectionEx)
+    {
+        win_skip("RtlInitializeCriticalSectionEx is not available\n");
+        return;
+    }
+
+    memset(&cs, 0x11, sizeof(cs));
+    pRtlInitializeCriticalSectionEx(&cs, 0, 0);
+    ok((cs.DebugInfo != NULL && cs.DebugInfo != no_debug) || broken(cs.DebugInfo == no_debug) /* >= Win 8 */,
+       "expected DebugInfo != NULL and DebugInfo != ~0, got %p\n", cs.DebugInfo);
+    ok(cs.LockCount == -1, "expected LockCount == -1, got %d\n", cs.LockCount);
+    ok(cs.RecursionCount == 0, "expected RecursionCount == 0, got %d\n", cs.RecursionCount);
+    ok(cs.LockSemaphore == NULL, "expected LockSemaphore == NULL, got %p\n", cs.LockSemaphore);
+    ok(cs.SpinCount == 0 || broken(cs.SpinCount != 0) /* >= Win 8 */,
+       "expected SpinCount == 0, got %ld\n", cs.SpinCount);
+    RtlDeleteCriticalSection((PRTL_CRITICAL_SECTION)&cs);
+
+    memset(&cs, 0x11, sizeof(cs));
+    pRtlInitializeCriticalSectionEx(&cs, 0, RTL_CRITICAL_SECTION_FLAG_NO_DEBUG_INFO);
+    todo_wine
+    ok(cs.DebugInfo == no_debug, "expected DebugInfo == ~0, got %p\n", cs.DebugInfo);
+    ok(cs.LockCount == -1, "expected LockCount == -1, got %d\n", cs.LockCount);
+    ok(cs.RecursionCount == 0, "expected RecursionCount == 0, got %d\n", cs.RecursionCount);
+    ok(cs.LockSemaphore == NULL, "expected LockSemaphore == NULL, got %p\n", cs.LockSemaphore);
+    ok(cs.SpinCount == 0 || broken(cs.SpinCount != 0) /* >= Win 8 */,
+       "expected SpinCount == 0, got %ld\n", cs.SpinCount);
+    RtlDeleteCriticalSection((PRTL_CRITICAL_SECTION)&cs);
+}
+
+static void test_RtlQueryPackageIdentity(void)
+{
+    const WCHAR programW[] = {'M','i','c','r','o','s','o','f','t','.','W','i','n','d','o','w','s','.',
+                              'P','h','o','t','o','s','_','8','w','e','k','y','b','3','d','8','b','b','w','e','!','A','p','p',0};
+    const WCHAR fullnameW[] = {'M','i','c','r','o','s','o','f','t','.','W','i','n','d','o','w','s','.',
+                               'P','h','o','t','o','s', 0};
+    const WCHAR appidW[] = {'A','p','p',0};
+    IApplicationActivationManager *manager;
+    WCHAR buf1[MAX_PATH], buf2[MAX_PATH];
+    HANDLE process, token;
+    SIZE_T size1, size2;
+    NTSTATUS status;
+    DWORD processid;
+    HRESULT hr;
+    BOOL ret;
+
+    if (!pRtlQueryPackageIdentity)
+    {
+        win_skip("RtlQueryPackageIdentity not available\n");
+        return;
+    }
+
+    size1 = size2 = MAX_PATH * sizeof(WCHAR);
+    status = pRtlQueryPackageIdentity((HANDLE)~(ULONG_PTR)3, buf1, &size1, buf2, &size2, NULL);
+    ok(status == STATUS_NOT_FOUND, "expected STATUS_NOT_FOUND, got %08x\n", status);
+
+    CoInitializeEx(0, COINIT_APARTMENTTHREADED);
+    hr = CoCreateInstance(&CLSID_ApplicationActivationManager, NULL, CLSCTX_LOCAL_SERVER,
+                          &IID_IApplicationActivationManager, (void **)&manager);
+    if (FAILED(hr))
+    {
+        todo_wine win_skip("Failed to create ApplicationActivationManager (%x)\n", hr);
+        goto done;
+    }
+
+    hr = IApplicationActivationManager_ActivateApplication(manager, programW, NULL,
+                                                           AO_NOERRORUI, &processid);
+    if (FAILED(hr))
+    {
+        todo_wine win_skip("Failed to start program (%x)\n", hr);
+        IApplicationActivationManager_Release(manager);
+        goto done;
+    }
+
+    process = OpenProcess(PROCESS_QUERY_LIMITED_INFORMATION | PROCESS_TERMINATE, FALSE, processid);
+    ok(process != NULL, "OpenProcess failed with %u\n", GetLastError());
+    ret = OpenProcessToken(process, TOKEN_QUERY, &token);
+    ok(ret, "OpenProcessToken failed with error %u\n", GetLastError());
+
+    size1 = size2 = MAX_PATH * sizeof(WCHAR);
+    status = pRtlQueryPackageIdentity(token, buf1, &size1, buf2, &size2, NULL);
+    ok(status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %08x\n", status);
+
+    ok(!memcmp(buf1, fullnameW, sizeof(fullnameW) - sizeof(WCHAR)),
+       "Expected buf1 to begin with %s, got %s\n", wine_dbgstr_w(fullnameW), wine_dbgstr_w(buf1));
+    ok(size1 >= sizeof(WCHAR) && !(size1 % sizeof(WCHAR)), "Unexpected size1 = %lu\n", size1);
+    ok(buf1[size1 / sizeof(WCHAR) - 1] == 0, "Expected buf1[%lu] == 0\n", size1 / sizeof(WCHAR) - 1);
+
+    ok(!lstrcmpW(buf2, appidW), "Expected buf2 to be %s, got %s\n", wine_dbgstr_w(appidW), wine_dbgstr_w(buf2));
+    ok(size2 >= sizeof(WCHAR) && !(size2 % sizeof(WCHAR)), "Unexpected size2 = %lu\n", size2);
+    ok(buf2[size2 / sizeof(WCHAR) - 1] == 0, "Expected buf2[%lu] == 0\n", size2 / sizeof(WCHAR) - 1);
+
+    CloseHandle(token);
+    TerminateProcess(process, 0);
+    CloseHandle(process);
+
+done:
+    CoUninitialize();
+}
+
 START_TEST(rtl)
 {
     InitFunctionPtrs();
 
-#ifdef __i386__
-    test_WinSqm();
-#else
-    skip("stdcall-style parameter checks are not supported on this platform.\n");
-#endif
-
     test_RtlCompareMemory();
     test_RtlCompareMemoryUlong();
     test_RtlMoveMemory();
@@ -3206,4 +3263,6 @@ START_TEST(rtl)
     test_RtlGetCompressionWorkSpaceSize();
     test_RtlDecompressBuffer();
     test_RtlIsCriticalSectionLocked();
+    test_RtlInitializeCriticalSectionEx();
+    test_RtlQueryPackageIdentity();
 }
index dc27c3e..7f889df 100755 (executable)
@@ -41,6 +41,8 @@ static NTSTATUS (WINAPI *pRtlAppendStringToString)(STRING *, const STRING *);
 static NTSTATUS (WINAPI *pRtlAppendUnicodeStringToString)(UNICODE_STRING *, const UNICODE_STRING *);
 static NTSTATUS (WINAPI *pRtlAppendUnicodeToString)(UNICODE_STRING *, LPCWSTR);
 static NTSTATUS (WINAPI *pRtlCharToInteger)(PCSZ, ULONG, int *);
+static LONG     (WINAPI *pRtlCompareUnicodeString)(const UNICODE_STRING*, const UNICODE_STRING*, BOOLEAN);
+static LONG     (WINAPI *pRtlCompareUnicodeStrings)(const WCHAR *,SIZE_T,const WCHAR *,SIZE_T,BOOLEAN);
 static VOID     (WINAPI *pRtlCopyString)(STRING *, const STRING *);
 static BOOLEAN  (WINAPI *pRtlCreateUnicodeString)(PUNICODE_STRING, LPCWSTR);
 static BOOLEAN  (WINAPI *pRtlCreateUnicodeStringFromAsciiz)(PUNICODE_STRING, LPCSTR);
@@ -75,7 +77,6 @@ static NTSTATUS (WINAPI *pRtlUTF8ToUnicodeN)(WCHAR *, ULONG, ULONG *, const CHAR
 /*static VOID (WINAPI *pRtlCopyUnicodeString)(UNICODE_STRING *, const UNICODE_STRING *);*/
 /*static VOID (WINAPI *pRtlEraseUnicodeString)(UNICODE_STRING *);*/
 /*static LONG (WINAPI *pRtlCompareString)(const STRING *,const STRING *,BOOLEAN);*/
-/*static LONG (WINAPI *pRtlCompareUnicodeString)(const UNICODE_STRING *,const UNICODE_STRING *,BOOLEAN);*/
 /*static BOOLEAN (WINAPI *pRtlEqualString)(const STRING *,const STRING *,BOOLEAN);*/
 /*static BOOLEAN (WINAPI *pRtlPrefixString)(const STRING *, const STRING *, BOOLEAN);*/
 /*static BOOLEAN (WINAPI *pRtlPrefixUnicodeString)(const UNICODE_STRING *, const UNICODE_STRING *, BOOLEAN);*/
@@ -112,6 +113,8 @@ static void InitFunctionPtrs(void)
        pRtlAppendUnicodeStringToString = (void *)GetProcAddress(hntdll, "RtlAppendUnicodeStringToString");
        pRtlAppendUnicodeToString = (void *)GetProcAddress(hntdll, "RtlAppendUnicodeToString");
        pRtlCharToInteger = (void *)GetProcAddress(hntdll, "RtlCharToInteger");
+       pRtlCompareUnicodeString = (void *)GetProcAddress(hntdll, "RtlCompareUnicodeString");
+       pRtlCompareUnicodeStrings = (void *)GetProcAddress(hntdll, "RtlCompareUnicodeStrings");
        pRtlCopyString = (void *)GetProcAddress(hntdll, "RtlCopyString");
        pRtlCreateUnicodeString = (void *)GetProcAddress(hntdll, "RtlCreateUnicodeString");
        pRtlCreateUnicodeStringFromAsciiz = (void *)GetProcAddress(hntdll, "RtlCreateUnicodeStringFromAsciiz");
@@ -1856,6 +1859,36 @@ static void test_RtlIsTextUnicode(void)
     HeapFree(GetProcessHeap(), 0, be_unicode_no_controls);
 }
 
+static void test_RtlCompareUnicodeString(void)
+{
+    WCHAR ch1, ch2;
+    UNICODE_STRING str1, str2;
+
+    str1.Buffer = &ch1;
+    str1.Length = str1.MaximumLength = sizeof(WCHAR);
+    str2.Buffer = &ch2;
+    str2.Length = str2.MaximumLength = sizeof(WCHAR);
+    for (ch1 = 0; ch1 < 512; ch1++)
+    {
+        for (ch2 = 0; ch2 < 1024; ch2++)
+        {
+            LONG res = pRtlCompareUnicodeString( &str1, &str2, FALSE );
+            ok( res == (ch1 - ch2), "wrong result %d %04x %04x\n", res, ch1, ch2 );
+            res = pRtlCompareUnicodeString( &str1, &str2, TRUE );
+            ok( res == (pRtlUpcaseUnicodeChar(ch1) - pRtlUpcaseUnicodeChar(ch2)),
+                "wrong result %d %04x %04x\n", res, ch1, ch2 );
+            if (pRtlCompareUnicodeStrings)
+            {
+                res = pRtlCompareUnicodeStrings( &ch1, 1, &ch2, 1, FALSE );
+                ok( res == (ch1 - ch2), "wrong result %d %04x %04x\n", res, ch1, ch2 );
+                res = pRtlCompareUnicodeStrings( &ch1, 1, &ch2, 1, TRUE );
+                ok( res == (pRtlUpcaseUnicodeChar(ch1) - pRtlUpcaseUnicodeChar(ch2)),
+                    "wrong result %d %04x %04x\n", res, ch1, ch2 );
+            }
+        }
+    }
+}
+
 static const WCHAR szGuid[] = { '{','0','1','0','2','0','3','0','4','-',
   '0','5','0','6','-'  ,'0','7','0','8','-','0','9','0','A','-',
   '0','B','0','C','0','D','0','E','0','F','0','A','}','\0' };
@@ -2522,6 +2555,7 @@ START_TEST(rtlstr)
     test_RtlGUIDFromString();
     test_RtlStringFromGUID();
     test_RtlIsTextUnicode();
+    test_RtlCompareUnicodeString();
     if(0)
     {
        test_RtlUpcaseUnicodeChar();