ntdll: Add RtlSetThreadErrorMode and RtlGetThreadErrorMode.
Peter Rosin
peda at lysator.liu.se
Tue Feb 2 06:50:16 CST 2010
---
dlls/ntdll/ntdll.spec | 2 ++
dlls/ntdll/rtl.c | 24 ++++++++++++++++++++++++
dlls/ntdll/tests/rtl.c | 2 +-
include/winternl.h | 2 ++
4 files changed, 29 insertions(+), 1 deletions(-)
diff --git a/dlls/ntdll/ntdll.spec b/dlls/ntdll/ntdll.spec
index 67a9d13..c7c81e8 100644
--- a/dlls/ntdll/ntdll.spec
+++ b/dlls/ntdll/ntdll.spec
@@ -643,6 +643,7 @@
@ stdcall RtlGetSaclSecurityDescriptor(ptr ptr ptr ptr)
# @ stub RtlGetSecurityDescriptorRMControl
# @ stub RtlGetSetBootStatusData
+@ stdcall RtlGetThreadErrorMode()
# @ stub RtlGetUnloadEventTrace
@ stub RtlGetUserInfoHeap
@ stdcall RtlGetVersion(ptr)
@@ -842,6 +843,7 @@
# @ stub RtlSetSecurityDescriptorRMControl
@ stub RtlSetSecurityObject
# @ stub RtlSetSecurityObjectEx
+@ stdcall RtlSetThreadErrorMode(long ptr)
# @ stub RtlSetThreadIsCritical
# @ stub RtlSetThreadPoolStartFunc
@ stdcall RtlSetTimeZoneInformation(ptr)
diff --git a/dlls/ntdll/rtl.c b/dlls/ntdll/rtl.c
index ad4bc10..7a9d6ca 100644
--- a/dlls/ntdll/rtl.c
+++ b/dlls/ntdll/rtl.c
@@ -1165,3 +1165,27 @@ NTSTATUS WINAPI RtlDecompressBuffer(USHORT CompressionFormat, PUCHAR Uncompresse
return STATUS_NOT_IMPLEMENTED;
}
+
+/***********************************************************************
+ * RtlSetThreadErrorMode [NTDLL.@]
+ */
+NTSTATUS WINAPI RtlSetThreadErrorMode( DWORD mode, LPDWORD oldmode )
+{
+ if (mode & ~0x70)
+ return STATUS_INVALID_PARAMETER_1;
+
+ if (oldmode)
+ *oldmode = NtCurrentTeb()->HardErrorDisabled;
+
+ NtCurrentTeb()->HardErrorDisabled = mode & 0x70;
+
+ return STATUS_SUCCESS;
+}
+
+/***********************************************************************
+ * RtlGetThreadErrorMode [NTDLL.@]
+ */
+DWORD WINAPI RtlGetThreadErrorMode( void )
+{
+ return NtCurrentTeb()->HardErrorDisabled;
+}
diff --git a/dlls/ntdll/tests/rtl.c b/dlls/ntdll/tests/rtl.c
index 61ceb72..6e76a3c 100644
--- a/dlls/ntdll/tests/rtl.c
+++ b/dlls/ntdll/tests/rtl.c
@@ -1039,7 +1039,7 @@ static void test_RtlThreadErrorMode(void)
if (!pRtlGetThreadErrorMode || !pRtlSetThreadErrorMode)
{
- skip("RtlGetThreadErrorMode and/or RtlSetThreadErrorMode not available\n");
+ win_skip("RtlGetThreadErrorMode and/or RtlSetThreadErrorMode not available\n");
return;
}
diff --git a/include/winternl.h b/include/winternl.h
index 08172b0..2f88cad 100644
--- a/include/winternl.h
+++ b/include/winternl.h
@@ -2273,6 +2273,7 @@ NTSYSAPI ULONG WINAPI RtlGetNtGlobalFlags(void);
NTSYSAPI BOOLEAN WINAPI RtlGetNtProductType(LPDWORD);
NTSYSAPI NTSTATUS WINAPI RtlGetOwnerSecurityDescriptor(PSECURITY_DESCRIPTOR,PSID *,PBOOLEAN);
NTSYSAPI ULONG WINAPI RtlGetProcessHeaps(ULONG,HANDLE*);
+NTSYSAPI DWORD WINAPI RtlGetThreadErrorMode(void);
NTSYSAPI NTSTATUS WINAPI RtlGetSaclSecurityDescriptor(PSECURITY_DESCRIPTOR,PBOOLEAN,PACL *,PBOOLEAN);
NTSYSAPI NTSTATUS WINAPI RtlGetVersion(RTL_OSVERSIONINFOEXW*);
NTSYSAPI NTSTATUS WINAPI RtlGUIDFromString(PUNICODE_STRING,GUID*);
@@ -2364,6 +2365,7 @@ NTSYSAPI NTSTATUS WINAPI RtlSetIoCompletionCallback(HANDLE,PRTL_OVERLAPPED_COMP
NTSYSAPI void WINAPI RtlSetLastWin32Error(DWORD);
NTSYSAPI void WINAPI RtlSetLastWin32ErrorAndNtStatusFromNtStatus(NTSTATUS);
NTSYSAPI NTSTATUS WINAPI RtlSetSaclSecurityDescriptor(PSECURITY_DESCRIPTOR,BOOLEAN,PACL,BOOLEAN);
+NTSYSAPI NTSTATUS WINAPI RtlSetThreadErrorMode(DWORD,LPDWORD);
NTSYSAPI NTSTATUS WINAPI RtlSetTimeZoneInformation(const RTL_TIME_ZONE_INFORMATION*);
NTSYSAPI SIZE_T WINAPI RtlSizeHeap(HANDLE,ULONG,const void*);
NTSYSAPI NTSTATUS WINAPI RtlStringFromGUID(REFGUID,PUNICODE_STRING);
--
1.6.5
--------------040908090401060906070008--
More information about the wine-patches
mailing list