mirror of
https://github.com/reactos/reactos.git
synced 2024-09-28 05:26:58 +00:00
[RTL]: Document, define, implement, and export RtlSetThreadIsCritical.
svn path=/trunk/; revision=55310
This commit is contained in:
parent
64cab88494
commit
4e3bf71826
|
@ -895,7 +895,7 @@
|
|||
@ stdcall RtlSetSecurityObject(long ptr ptr ptr ptr)
|
||||
//@ stdcall RtlSetSecurityObjectEx
|
||||
//@ stdcall RtlSetThreadErrorMode
|
||||
//@ stdcall RtlSetThreadIsCritical
|
||||
@ stdcall RtlSetThreadIsCritical(long ptr long)
|
||||
//@ stdcall RtlSetThreadPoolStartFunc
|
||||
@ stdcall RtlSetTimeZoneInformation(ptr)
|
||||
//@ stdcall RtlSetTimer
|
||||
|
|
|
@ -895,7 +895,7 @@
|
|||
@ stdcall RtlSetSecurityObject(long ptr ptr ptr ptr)
|
||||
;@ stdcall RtlSetSecurityObjectEx
|
||||
;@ stdcall RtlSetThreadErrorMode
|
||||
;@ stdcall RtlSetThreadIsCritical
|
||||
@ stdcall RtlSetThreadIsCritical(long ptr long)
|
||||
;@ stdcall RtlSetThreadPoolStartFunc
|
||||
@ stdcall RtlSetTimeZoneInformation(ptr)
|
||||
;@ stdcall RtlSetTimer
|
||||
|
|
|
@ -2406,6 +2406,15 @@ RtlSetProcessIsCritical(
|
|||
IN BOOLEAN NeedBreaks
|
||||
);
|
||||
|
||||
NTSYSAPI
|
||||
NTSTATUS
|
||||
NTAPI
|
||||
RtlSetThreadIsCritical(
|
||||
IN BOOLEAN NewValue,
|
||||
OUT PBOOLEAN OldValue OPTIONAL,
|
||||
IN BOOLEAN NeedBreaks
|
||||
);
|
||||
|
||||
NTSYSAPI
|
||||
ULONG
|
||||
NTAPI
|
||||
|
|
|
@ -53,6 +53,7 @@ typedef struct _SM_EXEC_PGM_MSG
|
|||
RTL_USER_PROCESS_INFORMATION ProcessInformation;
|
||||
BOOLEAN DebugFlag;
|
||||
} SM_EXEC_PGM_MSG, *PM_EXEC_PGM_MSG;
|
||||
C_ASSERT(sizeof(SM_EXEC_PGM_MSG) == 0x48);
|
||||
|
||||
typedef struct _SM_LOAD_DEFERED_SUBSYSTEM_MSG
|
||||
{
|
||||
|
|
|
@ -362,16 +362,19 @@ RtlSetProcessIsCritical(IN BOOLEAN NewValue,
|
|||
OUT PBOOLEAN OldValue OPTIONAL,
|
||||
IN BOOLEAN NeedBreaks)
|
||||
{
|
||||
ULONG BreakOnTermination = FALSE;
|
||||
ULONG BreakOnTermination;
|
||||
|
||||
if (OldValue)
|
||||
*OldValue = FALSE;
|
||||
/* Initialize to FALSE */
|
||||
if (OldValue) *OldValue = FALSE;
|
||||
|
||||
/* Fail, if the critical breaks flag is required but is not set */
|
||||
if (NeedBreaks == TRUE &&
|
||||
if ((NeedBreaks) &&
|
||||
!(NtCurrentPeb()->NtGlobalFlag & FLG_ENABLE_SYSTEM_CRIT_BREAKS))
|
||||
{
|
||||
return STATUS_UNSUCCESSFUL;
|
||||
}
|
||||
|
||||
/* Check if the caller wants the old value */
|
||||
if (OldValue)
|
||||
{
|
||||
/* Query and return the old break on termination flag for the process */
|
||||
|
|
|
@ -150,6 +150,48 @@ RtlpFreeUserStack(IN HANDLE Process,
|
|||
|
||||
/* FUNCTIONS ***************************************************************/
|
||||
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
NTSTATUS
|
||||
NTAPI
|
||||
RtlSetThreadIsCritical(IN BOOLEAN NewValue,
|
||||
OUT PBOOLEAN OldValue OPTIONAL,
|
||||
IN BOOLEAN NeedBreaks)
|
||||
{
|
||||
ULONG BreakOnTermination;
|
||||
|
||||
/* Initialize to FALSE */
|
||||
if (OldValue) *OldValue = FALSE;
|
||||
|
||||
/* Fail, if the critical breaks flag is required but is not set */
|
||||
if ((NeedBreaks) &&
|
||||
!(NtCurrentPeb()->NtGlobalFlag & FLG_ENABLE_SYSTEM_CRIT_BREAKS))
|
||||
{
|
||||
return STATUS_UNSUCCESSFUL;
|
||||
}
|
||||
|
||||
/* Check if the caller wants the old value */
|
||||
if (OldValue)
|
||||
{
|
||||
/* Query and return the old break on termination flag for the process */
|
||||
ZwQueryInformationThread(NtCurrentThread(),
|
||||
ThreadBreakOnTermination,
|
||||
&BreakOnTermination,
|
||||
sizeof(ULONG),
|
||||
NULL);
|
||||
*OldValue = (BOOLEAN)BreakOnTermination;
|
||||
}
|
||||
|
||||
/* Set the break on termination flag for the process */
|
||||
BreakOnTermination = NewValue;
|
||||
return ZwSetInformationThread(NtCurrentThread(),
|
||||
ThreadBreakOnTermination,
|
||||
&BreakOnTermination,
|
||||
sizeof(ULONG));
|
||||
}
|
||||
|
||||
/*
|
||||
@implemented
|
||||
*/
|
||||
|
|
Loading…
Reference in a new issue