From ad24187de837f985cc9a11237ac560ace6b57aa4 Mon Sep 17 00:00:00 2001 From: =?utf8?q?R=C3=A9mi=20Bernon?= Date: Thu, 19 Nov 2020 10:18:54 +0100 Subject: [PATCH] ntdll: Stub ThreadEnableAlignmentFaultFixup info class. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=46216 Signed-off-by: RĂ©mi Bernon Signed-off-by: Alexandre Julliard --- dlls/ntdll/tests/info.c | 33 +++++++++++++++++++++++++++++++++ dlls/ntdll/unix/thread.c | 11 +++++++++-- 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/dlls/ntdll/tests/info.c b/dlls/ntdll/tests/info.c index 70ea7d5146b..5db7a800cbe 100644 --- a/dlls/ntdll/tests/info.c +++ b/dlls/ntdll/tests/info.c @@ -2505,6 +2505,37 @@ static void test_NtGetCurrentProcessorNumber(void) ok(status == STATUS_SUCCESS, "got 0x%x (expected STATUS_SUCCESS)\n", status); } +static void test_ThreadEnableAlignmentFaultFixup(void) +{ + NTSTATUS status; + ULONG dummy; + + dummy = 0; + status = NtQueryInformationThread( GetCurrentThread(), ThreadEnableAlignmentFaultFixup, &dummy, sizeof(ULONG), NULL ); + ok( status == STATUS_INVALID_INFO_CLASS || broken(STATUS_NOT_IMPLEMENTED), "Expected STATUS_INVALID_INFO_CLASS, got %08x\n", status ); + status = NtQueryInformationThread( GetCurrentThread(), ThreadEnableAlignmentFaultFixup, &dummy, 1, NULL ); + ok( status == STATUS_INVALID_INFO_CLASS || broken(STATUS_NOT_IMPLEMENTED), "Expected STATUS_INVALID_INFO_CLASS, got %08x\n", status ); + + dummy = 1; + status = pNtSetInformationThread( GetCurrentThread(), ThreadEnableAlignmentFaultFixup, &dummy, sizeof(ULONG) ); + ok( status == STATUS_INFO_LENGTH_MISMATCH, "Expected STATUS_INFO_LENGTH_MISMATCH, got %08x\n", status ); + status = pNtSetInformationThread( (HANDLE)0xdeadbeef, ThreadEnableAlignmentFaultFixup, NULL, 0 ); + ok( status == STATUS_INFO_LENGTH_MISMATCH, "Expected STATUS_INFO_LENGTH_MISMATCH, got %08x\n", status ); + status = pNtSetInformationThread( (HANDLE)0xdeadbeef, ThreadEnableAlignmentFaultFixup, NULL, 1 ); + ok( status == STATUS_ACCESS_VIOLATION, "Expected STATUS_ACCESS_VIOLATION, got %08x\n", status ); + status = pNtSetInformationThread( (HANDLE)0xdeadbeef, ThreadEnableAlignmentFaultFixup, &dummy, 1 ); + todo_wine ok( status == STATUS_INVALID_HANDLE, "Expected STATUS_INVALID_HANDLE, got %08x\n", status ); + status = pNtSetInformationThread( GetCurrentProcess(), ThreadEnableAlignmentFaultFixup, &dummy, 1 ); + todo_wine ok( status == STATUS_OBJECT_TYPE_MISMATCH, "Expected STATUS_OBJECT_TYPE_MISMATCH, got %08x\n", status ); + dummy = 1; + status = pNtSetInformationThread( GetCurrentThread(), ThreadEnableAlignmentFaultFixup, &dummy, 1 ); + ok( status == STATUS_SUCCESS, "Expected STATUS_SUCCESS, got %08x\n", status ); + + dummy = 0; + status = pNtSetInformationThread( GetCurrentProcess(), ThreadEnableAlignmentFaultFixup, &dummy, 8 ); + ok( status == STATUS_INFO_LENGTH_MISMATCH, "Expected STATUS_INFO_LENGTH_MISMATCH, got %08x\n", status ); +} + static DWORD WINAPI start_address_thread(void *arg) { PRTL_THREAD_START_ROUTINE entry; @@ -2774,4 +2805,6 @@ START_TEST(info) test_readvirtualmemory(); test_queryvirtualmemory(); test_NtGetCurrentProcessorNumber(); + + test_ThreadEnableAlignmentFaultFixup(); } diff --git a/dlls/ntdll/unix/thread.c b/dlls/ntdll/unix/thread.c index 8c91f49690b..9808fc610e3 100644 --- a/dlls/ntdll/unix/thread.c +++ b/dlls/ntdll/unix/thread.c @@ -1137,10 +1137,12 @@ NTSTATUS WINAPI NtQueryInformationThread( HANDLE handle, THREADINFOCLASS class, if (ret_len) *ret_len = sizeof(BOOLEAN); return STATUS_SUCCESS; + case ThreadEnableAlignmentFaultFixup: + return STATUS_INVALID_INFO_CLASS; + case ThreadPriority: case ThreadBasePriority: case ThreadImpersonationToken: - case ThreadEnableAlignmentFaultFixup: case ThreadEventPair_Reusable: case ThreadZeroTlsCell: case ThreadPerformanceCount: @@ -1316,11 +1318,16 @@ NTSTATUS WINAPI NtSetInformationThread( HANDLE handle, THREADINFOCLASS class, #endif } + case ThreadEnableAlignmentFaultFixup: + if (length != sizeof(BOOLEAN)) return STATUS_INFO_LENGTH_MISMATCH; + if (!data) return STATUS_ACCESS_VIOLATION; + FIXME( "ThreadEnableAlignmentFaultFixup stub!\n" ); + return STATUS_SUCCESS; + case ThreadBasicInformation: case ThreadTimes: case ThreadPriority: case ThreadDescriptorTableEntry: - case ThreadEnableAlignmentFaultFixup: case ThreadEventPair_Reusable: case ThreadPerformanceCount: case ThreadAmILastThread: -- 2.11.4.GIT