kernel32: Add SetThreadErrorMode and GetThreadErrorMode.
This commit is contained in:
parent
e8a32ec2b8
commit
805f7d79db
|
@ -643,6 +643,7 @@
|
|||
@ stdcall GetTempPathA(long ptr)
|
||||
@ stdcall GetTempPathW(long ptr)
|
||||
@ stdcall GetThreadContext(long ptr)
|
||||
@ stdcall GetThreadErrorMode()
|
||||
@ stdcall GetThreadId(ptr)
|
||||
# @ stub GetThreadIOPendingFlag
|
||||
@ stdcall GetThreadLocale()
|
||||
|
@ -1056,6 +1057,7 @@
|
|||
@ stdcall SetTermsrvAppInstallMode(long)
|
||||
@ stdcall SetThreadAffinityMask(long long)
|
||||
@ stdcall SetThreadContext(long ptr)
|
||||
@ stdcall SetThreadErrorMode(long ptr)
|
||||
@ stdcall SetThreadExecutionState(long)
|
||||
@ stdcall SetThreadIdealProcessor(long long)
|
||||
@ stdcall SetThreadLocale(long)
|
||||
|
|
|
@ -1221,7 +1221,7 @@ static void test_ThreadErrorMode(void)
|
|||
|
||||
if (!pSetThreadErrorMode || !pGetThreadErrorMode)
|
||||
{
|
||||
skip("SetThreadErrorMode and/or GetThreadErrorMode unavailable (added in Windows 7)\n");
|
||||
win_skip("SetThreadErrorMode and/or GetThreadErrorMode unavailable (added in Windows 7)\n");
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -651,3 +651,64 @@ DWORD WINAPI GetCurrentThreadId(void)
|
|||
}
|
||||
|
||||
#endif /* __i386__ */
|
||||
|
||||
/*************************************************************************
|
||||
* rtlmode_to_win32mode
|
||||
*/
|
||||
static DWORD rtlmode_to_win32mode( DWORD rtlmode )
|
||||
{
|
||||
DWORD win32mode = 0;
|
||||
|
||||
if (rtlmode & 0x10)
|
||||
win32mode |= SEM_FAILCRITICALERRORS;
|
||||
if (rtlmode & 0x20)
|
||||
win32mode |= SEM_NOGPFAULTERRORBOX;
|
||||
if (rtlmode & 0x40)
|
||||
win32mode |= SEM_NOOPENFILEERRORBOX;
|
||||
|
||||
return win32mode;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* SetThreadErrorMode (KERNEL32.@)
|
||||
*/
|
||||
BOOL WINAPI SetThreadErrorMode( DWORD mode, LPDWORD oldmode )
|
||||
{
|
||||
NTSTATUS status;
|
||||
DWORD tmp = 0;
|
||||
|
||||
if (mode & ~(SEM_FAILCRITICALERRORS |
|
||||
SEM_NOGPFAULTERRORBOX |
|
||||
SEM_NOOPENFILEERRORBOX))
|
||||
{
|
||||
SetLastError( ERROR_INVALID_PARAMETER );
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (mode & SEM_FAILCRITICALERRORS)
|
||||
tmp |= 0x10;
|
||||
if (mode & SEM_NOGPFAULTERRORBOX)
|
||||
tmp |= 0x20;
|
||||
if (mode & SEM_NOOPENFILEERRORBOX)
|
||||
tmp |= 0x40;
|
||||
|
||||
status = RtlSetThreadErrorMode( tmp, oldmode );
|
||||
if (status)
|
||||
{
|
||||
SetLastError( RtlNtStatusToDosError(status) );
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if (oldmode)
|
||||
*oldmode = rtlmode_to_win32mode(*oldmode);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* GetThreadErrorMode (KERNEL32.@)
|
||||
*/
|
||||
DWORD WINAPI GetThreadErrorMode( void )
|
||||
{
|
||||
return rtlmode_to_win32mode( RtlGetThreadErrorMode() );
|
||||
}
|
||||
|
|
|
@ -1762,6 +1762,7 @@ WINBASEAPI DWORD WINAPI GetTickCount(void);
|
|||
WINBASEAPI ULONGLONG WINAPI GetTickCount64(void);
|
||||
WINBASEAPI DWORD WINAPI GetTimeZoneInformation(LPTIME_ZONE_INFORMATION);
|
||||
WINBASEAPI BOOL WINAPI GetThreadContext(HANDLE,CONTEXT *);
|
||||
WINBASEAPI DWORD WINAPI GetThreadErrorMode(void);
|
||||
WINBASEAPI INT WINAPI GetThreadPriority(HANDLE);
|
||||
WINBASEAPI BOOL WINAPI GetThreadPriorityBoost(HANDLE,PBOOL);
|
||||
WINBASEAPI BOOL WINAPI GetThreadSelectorEntry(HANDLE,DWORD,LPLDT_ENTRY);
|
||||
|
@ -2096,6 +2097,7 @@ WINBASEAPI DWORD WINAPI SetTapeParameters(HANDLE,DWORD,LPVOID);
|
|||
WINBASEAPI DWORD WINAPI SetTapePosition(HANDLE,DWORD,DWORD,DWORD,DWORD,BOOL);
|
||||
WINBASEAPI DWORD_PTR WINAPI SetThreadAffinityMask(HANDLE,DWORD_PTR);
|
||||
WINBASEAPI BOOL WINAPI SetThreadContext(HANDLE,const CONTEXT *);
|
||||
WINBASEAPI BOOL WINAPI SetThreadErrorMode(DWORD,LPDWORD);
|
||||
WINBASEAPI DWORD WINAPI SetThreadExecutionState(EXECUTION_STATE);
|
||||
WINBASEAPI DWORD WINAPI SetThreadIdealProcessor(HANDLE,DWORD);
|
||||
WINBASEAPI BOOL WINAPI SetThreadPriority(HANDLE,INT);
|
||||
|
|
Loading…
Reference in New Issue