[PATCH] ntdll: Stub ThreadEnableAlignmentFaultFixup info class.
Rémi Bernon
rbernon at codeweavers.com
Thu Nov 19 02:51:02 CST 2020
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=46216
Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
---
These games DRMs are just calling this function with an invalid length.
It seems harmless as it doesn't prevent them from running, but we can
stub it a bit more.
dlls/ntdll/tests/info.c | 32 ++++++++++++++++++++++++++++++++
dlls/ntdll/unix/thread.c | 11 +++++++++--
2 files changed, 41 insertions(+), 2 deletions(-)
diff --git a/dlls/ntdll/tests/info.c b/dlls/ntdll/tests/info.c
index 70ea7d5146b..afc6149277d 100644
--- a/dlls/ntdll/tests/info.c
+++ b/dlls/ntdll/tests/info.c
@@ -2505,6 +2505,36 @@ static void test_NtGetCurrentProcessorNumber(void)
ok(status == STATUS_SUCCESS, "got 0x%x (expected STATUS_SUCCESS)\n", status);
}
+static void test_ThreadEnableAlignmentFaultFixup(void)
+{
+ NTSTATUS status;
+ HANDLE thread, stop_event;
+ 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 );
+
+ 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 +2804,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 a161c5d1c90..6c056497ab7 100644
--- a/dlls/ntdll/unix/thread.c
+++ b/dlls/ntdll/unix/thread.c
@@ -1093,10 +1093,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:
@@ -1272,11 +1274,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.29.2
More information about the wine-devel
mailing list