mirror of
https://github.com/reactos/reactos.git
synced 2024-12-29 02:25:17 +00:00
- use inlined probing macros for basic types
- minor optimizations by comparing the processor mode against KernelMode (==0) instead of UserMode (==1) svn path=/trunk/; revision=17467
This commit is contained in:
parent
84f88f6480
commit
5e348c00c1
31 changed files with 85 additions and 174 deletions
|
@ -1145,9 +1145,7 @@ NtOpenKey(OUT PHANDLE KeyHandle,
|
||||||
{
|
{
|
||||||
_SEH_TRY
|
_SEH_TRY
|
||||||
{
|
{
|
||||||
ProbeForWrite(KeyHandle,
|
ProbeForWriteHandle(KeyHandle);
|
||||||
sizeof(HANDLE),
|
|
||||||
sizeof(ULONG));
|
|
||||||
}
|
}
|
||||||
_SEH_HANDLE
|
_SEH_HANDLE
|
||||||
{
|
{
|
||||||
|
|
|
@ -242,7 +242,7 @@ NtPulseEvent(IN HANDLE EventHandle,
|
||||||
EventHandle, PreviousState);
|
EventHandle, PreviousState);
|
||||||
|
|
||||||
/* Check buffer validity */
|
/* Check buffer validity */
|
||||||
if(PreviousState && PreviousMode == UserMode) {
|
if(PreviousState && PreviousMode != KernelMode) {
|
||||||
|
|
||||||
_SEH_TRY {
|
_SEH_TRY {
|
||||||
|
|
||||||
|
@ -376,7 +376,7 @@ NtResetEvent(IN HANDLE EventHandle,
|
||||||
EventHandle, PreviousState);
|
EventHandle, PreviousState);
|
||||||
|
|
||||||
/* Check buffer validity */
|
/* Check buffer validity */
|
||||||
if(PreviousState && PreviousMode == UserMode) {
|
if(PreviousState && PreviousMode != KernelMode) {
|
||||||
|
|
||||||
_SEH_TRY {
|
_SEH_TRY {
|
||||||
|
|
||||||
|
@ -441,7 +441,7 @@ NtSetEvent(IN HANDLE EventHandle,
|
||||||
EventHandle, PreviousState);
|
EventHandle, PreviousState);
|
||||||
|
|
||||||
/* Check buffer validity */
|
/* Check buffer validity */
|
||||||
if(PreviousState != NULL && PreviousMode == UserMode) {
|
if(PreviousState != NULL && PreviousMode != KernelMode) {
|
||||||
|
|
||||||
_SEH_TRY {
|
_SEH_TRY {
|
||||||
|
|
||||||
|
|
|
@ -1541,7 +1541,7 @@ NtQuerySystemInformation (IN SYSTEM_INFORMATION_CLASS SystemInformationClass,
|
||||||
|
|
||||||
_SEH_TRY
|
_SEH_TRY
|
||||||
{
|
{
|
||||||
if (PreviousMode == UserMode)
|
if (PreviousMode != KernelMode)
|
||||||
{
|
{
|
||||||
/* SystemKernelDebuggerInformation needs only BOOLEAN alignment */
|
/* SystemKernelDebuggerInformation needs only BOOLEAN alignment */
|
||||||
ProbeForWrite(SystemInformation, Length, 1);
|
ProbeForWrite(SystemInformation, Length, 1);
|
||||||
|
|
|
@ -261,7 +261,7 @@ typedef struct _INFORMATION_CLASS_INFO
|
||||||
|
|
||||||
#define ProbeQueryInfoBuffer(Buffer, BufferLen, Alignment, RetLen, PrevMode, StatusVar) \
|
#define ProbeQueryInfoBuffer(Buffer, BufferLen, Alignment, RetLen, PrevMode, StatusVar) \
|
||||||
do { \
|
do { \
|
||||||
if(PrevMode == UserMode) \
|
if(PrevMode != KernelMode) \
|
||||||
{ \
|
{ \
|
||||||
_SEH_TRY \
|
_SEH_TRY \
|
||||||
{ \
|
{ \
|
||||||
|
@ -291,7 +291,7 @@ typedef struct _INFORMATION_CLASS_INFO
|
||||||
|
|
||||||
#define ProbeSetInfoBuffer(Buffer, BufferLen, Alignment, PrevMode, StatusVar) \
|
#define ProbeSetInfoBuffer(Buffer, BufferLen, Alignment, PrevMode, StatusVar) \
|
||||||
do { \
|
do { \
|
||||||
if(PrevMode == UserMode) \
|
if(PrevMode != KernelMode) \
|
||||||
{ \
|
{ \
|
||||||
_SEH_TRY \
|
_SEH_TRY \
|
||||||
{ \
|
{ \
|
||||||
|
|
|
@ -781,18 +781,13 @@ IoCreateFile(OUT PHANDLE FileHandle,
|
||||||
{
|
{
|
||||||
_SEH_TRY
|
_SEH_TRY
|
||||||
{
|
{
|
||||||
ProbeForWrite(FileHandle,
|
ProbeForWriteHandle(FileHandle);
|
||||||
sizeof(HANDLE),
|
|
||||||
sizeof(ULONG));
|
|
||||||
ProbeForWrite(IoStatusBlock,
|
ProbeForWrite(IoStatusBlock,
|
||||||
sizeof(IO_STATUS_BLOCK),
|
sizeof(IO_STATUS_BLOCK),
|
||||||
sizeof(ULONG));
|
sizeof(ULONG));
|
||||||
if(AllocationSize != NULL)
|
if(AllocationSize != NULL)
|
||||||
{
|
{
|
||||||
ProbeForRead(AllocationSize,
|
SafeAllocationSize = ProbeForReadLargeInteger(AllocationSize);
|
||||||
sizeof(LARGE_INTEGER),
|
|
||||||
sizeof(ULONG));
|
|
||||||
SafeAllocationSize = *AllocationSize;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
SafeAllocationSize.QuadPart = 0;
|
SafeAllocationSize.QuadPart = 0;
|
||||||
|
@ -1395,7 +1390,7 @@ NtCancelIoFile(IN HANDLE FileHandle,
|
||||||
LARGE_INTEGER Interval;
|
LARGE_INTEGER Interval;
|
||||||
|
|
||||||
if ((ULONG_PTR)IoStatusBlock >= (ULONG_PTR)MmUserProbeAddress &&
|
if ((ULONG_PTR)IoStatusBlock >= (ULONG_PTR)MmUserProbeAddress &&
|
||||||
KeGetPreviousMode() == UserMode)
|
KeGetPreviousMode() != KernelMode)
|
||||||
return STATUS_ACCESS_VIOLATION;
|
return STATUS_ACCESS_VIOLATION;
|
||||||
|
|
||||||
Status = ObReferenceObjectByHandle(FileHandle, 0, IoFileObjectType,
|
Status = ObReferenceObjectByHandle(FileHandle, 0, IoFileObjectType,
|
||||||
|
|
|
@ -237,9 +237,7 @@ NtCreateIoCompletion(OUT PHANDLE IoCompletionHandle,
|
||||||
|
|
||||||
_SEH_TRY {
|
_SEH_TRY {
|
||||||
|
|
||||||
ProbeForWrite(IoCompletionHandle,
|
ProbeForWriteHandle(IoCompletionHandle);
|
||||||
sizeof(HANDLE),
|
|
||||||
sizeof(ULONG));
|
|
||||||
} _SEH_HANDLE {
|
} _SEH_HANDLE {
|
||||||
|
|
||||||
Status = _SEH_GetExceptionCode();
|
Status = _SEH_GetExceptionCode();
|
||||||
|
@ -309,9 +307,7 @@ NtOpenIoCompletion(OUT PHANDLE IoCompletionHandle,
|
||||||
|
|
||||||
_SEH_TRY {
|
_SEH_TRY {
|
||||||
|
|
||||||
ProbeForWrite(IoCompletionHandle,
|
ProbeForWriteHandle(IoCompletionHandle);
|
||||||
sizeof(HANDLE),
|
|
||||||
sizeof(ULONG));
|
|
||||||
} _SEH_HANDLE {
|
} _SEH_HANDLE {
|
||||||
|
|
||||||
Status = _SEH_GetExceptionCode();
|
Status = _SEH_GetExceptionCode();
|
||||||
|
@ -432,21 +428,14 @@ NtRemoveIoCompletion(IN HANDLE IoCompletionHandle,
|
||||||
|
|
||||||
_SEH_TRY {
|
_SEH_TRY {
|
||||||
|
|
||||||
ProbeForWrite(CompletionKey,
|
ProbeForWritePointer(CompletionKey);
|
||||||
sizeof(PVOID),
|
ProbeForWritePointer(CompletionContext);
|
||||||
sizeof(ULONG));
|
|
||||||
ProbeForWrite(CompletionContext,
|
|
||||||
sizeof(PVOID),
|
|
||||||
sizeof(ULONG));
|
|
||||||
ProbeForWrite(IoStatusBlock,
|
ProbeForWrite(IoStatusBlock,
|
||||||
sizeof(IO_STATUS_BLOCK),
|
sizeof(IO_STATUS_BLOCK),
|
||||||
sizeof(ULONG));
|
sizeof(ULONG));
|
||||||
if (Timeout != NULL) {
|
if (Timeout != NULL) {
|
||||||
|
|
||||||
ProbeForRead(Timeout,
|
SafeTimeout = ProbeForReadLargeInteger(Timeout);
|
||||||
sizeof(LARGE_INTEGER),
|
|
||||||
sizeof(ULONG));
|
|
||||||
SafeTimeout = *Timeout;
|
|
||||||
Timeout = &SafeTimeout;
|
Timeout = &SafeTimeout;
|
||||||
}
|
}
|
||||||
} _SEH_HANDLE {
|
} _SEH_HANDLE {
|
||||||
|
|
|
@ -173,7 +173,7 @@ NtGetPlugPlayEvent(IN ULONG Reserved1,
|
||||||
DPRINT("NtGetPlugPlayEvent() called\n");
|
DPRINT("NtGetPlugPlayEvent() called\n");
|
||||||
|
|
||||||
/* Function can only be called from user-mode */
|
/* Function can only be called from user-mode */
|
||||||
if (KeGetPreviousMode() != UserMode)
|
if (KeGetPreviousMode() == KernelMode)
|
||||||
{
|
{
|
||||||
DPRINT1("NtGetPlugPlayEvent cannot be called from kernel mode!\n");
|
DPRINT1("NtGetPlugPlayEvent cannot be called from kernel mode!\n");
|
||||||
return STATUS_ACCESS_DENIED;
|
return STATUS_ACCESS_DENIED;
|
||||||
|
@ -636,7 +636,7 @@ NtPlugPlayControl(IN PLUGPLAY_CONTROL_CLASS PlugPlayControlClass,
|
||||||
PlugPlayControlClass, Buffer, BufferLength);
|
PlugPlayControlClass, Buffer, BufferLength);
|
||||||
|
|
||||||
/* Function can only be called from user-mode */
|
/* Function can only be called from user-mode */
|
||||||
if (KeGetPreviousMode() != UserMode)
|
if (KeGetPreviousMode() == KernelMode)
|
||||||
{
|
{
|
||||||
DPRINT1("NtGetPlugPlayEvent cannot be called from kernel mode!\n");
|
DPRINT1("NtGetPlugPlayEvent cannot be called from kernel mode!\n");
|
||||||
return STATUS_ACCESS_DENIED;
|
return STATUS_ACCESS_DENIED;
|
||||||
|
|
|
@ -1206,7 +1206,7 @@ KdbEnterDebuggerException(
|
||||||
ul = min(ExpNr, RTL_NUMBER_OF(KdbEnterConditions) - 1);
|
ul = min(ExpNr, RTL_NUMBER_OF(KdbEnterConditions) - 1);
|
||||||
EnterCondition = KdbEnterConditions[ul][FirstChance ? 0 : 1];
|
EnterCondition = KdbEnterConditions[ul][FirstChance ? 0 : 1];
|
||||||
if (EnterCondition == KdbDoNotEnter ||
|
if (EnterCondition == KdbDoNotEnter ||
|
||||||
(EnterCondition == KdbEnterFromUmode && PreviousMode != UserMode) ||
|
(EnterCondition == KdbEnterFromUmode && PreviousMode == KernelMode) ||
|
||||||
(EnterCondition == KdbEnterFromKmode && PreviousMode != KernelMode))
|
(EnterCondition == KdbEnterFromKmode && PreviousMode != KernelMode))
|
||||||
{
|
{
|
||||||
EnterConditionMet = FALSE;
|
EnterConditionMet = FALSE;
|
||||||
|
|
|
@ -360,7 +360,7 @@ KiInsertQueueApc(PKAPC Apc,
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if ((Thread->State == Waiting) &&
|
} else if ((Thread->State == Waiting) &&
|
||||||
(Thread->WaitMode == UserMode) &&
|
(Thread->WaitMode != KernelMode) &&
|
||||||
(Thread->Alertable)) {
|
(Thread->Alertable)) {
|
||||||
|
|
||||||
DPRINT("Waking up Thread for User-Mode APC Delivery \n");
|
DPRINT("Waking up Thread for User-Mode APC Delivery \n");
|
||||||
|
@ -703,7 +703,7 @@ KiDeliverApc(KPROCESSOR_MODE DeliveryMode,
|
||||||
|
|
||||||
/* Now we do the User APCs */
|
/* Now we do the User APCs */
|
||||||
if ((!IsListEmpty(&Thread->ApcState.ApcListHead[UserMode])) &&
|
if ((!IsListEmpty(&Thread->ApcState.ApcListHead[UserMode])) &&
|
||||||
(DeliveryMode == UserMode) && (Thread->ApcState.UserApcPending == TRUE)) {
|
(DeliveryMode != KernelMode) && (Thread->ApcState.UserApcPending == TRUE)) {
|
||||||
|
|
||||||
/* It's not pending anymore */
|
/* It's not pending anymore */
|
||||||
Thread->ApcState.UserApcPending = FALSE;
|
Thread->ApcState.UserApcPending = FALSE;
|
||||||
|
|
|
@ -63,7 +63,7 @@ KiDispatchException(PEXCEPTION_RECORD ExceptionRecord,
|
||||||
TContext.ContextFlags = CONTEXT_FULL;
|
TContext.ContextFlags = CONTEXT_FULL;
|
||||||
|
|
||||||
/* Check the mode */
|
/* Check the mode */
|
||||||
if (PreviousMode == UserMode)
|
if (PreviousMode != KernelMode)
|
||||||
{
|
{
|
||||||
/* Add Debugger Registers if this is User Mode */
|
/* Add Debugger Registers if this is User Mode */
|
||||||
TContext.ContextFlags = TContext.ContextFlags | CONTEXT_DEBUGGER;
|
TContext.ContextFlags = TContext.ContextFlags | CONTEXT_DEBUGGER;
|
||||||
|
@ -91,7 +91,7 @@ KiDispatchException(PEXCEPTION_RECORD ExceptionRecord,
|
||||||
if (Action != kdDoNotHandleException)
|
if (Action != kdDoNotHandleException)
|
||||||
{
|
{
|
||||||
/* See what kind of Exception this is */
|
/* See what kind of Exception this is */
|
||||||
if (PreviousMode == UserMode)
|
if (PreviousMode != KernelMode)
|
||||||
{
|
{
|
||||||
/* User mode exception, search the frames if we have to */
|
/* User mode exception, search the frames if we have to */
|
||||||
if (SearchFrames)
|
if (SearchFrames)
|
||||||
|
|
|
@ -498,7 +498,7 @@ KiHandleFpuFault(PKTRAP_FRAME Tf, ULONG ExceptionNr)
|
||||||
|
|
||||||
PreviousMode = ((Tf->Cs & 0xffff) == USER_CS) ? (UserMode) : (KernelMode);
|
PreviousMode = ((Tf->Cs & 0xffff) == USER_CS) ? (UserMode) : (KernelMode);
|
||||||
DPRINT("Math/Xmm fault happened! (PreviousMode = %s)\n",
|
DPRINT("Math/Xmm fault happened! (PreviousMode = %s)\n",
|
||||||
(PreviousMode == UserMode) ? ("UserMode") : ("KernelMode"));
|
(PreviousMode != KernelMode) ? ("UserMode") : ("KernelMode"));
|
||||||
|
|
||||||
ASSERT(NpxThread == CurrentThread); /* FIXME: Is not always true I think */
|
ASSERT(NpxThread == CurrentThread); /* FIXME: Is not always true I think */
|
||||||
|
|
||||||
|
|
|
@ -1435,7 +1435,7 @@ KeTestAlertThread(IN KPROCESSOR_MODE AlertMode)
|
||||||
|
|
||||||
Thread->Alerted[AlertMode] = FALSE;
|
Thread->Alerted[AlertMode] = FALSE;
|
||||||
|
|
||||||
} else if ((AlertMode == UserMode) && (!IsListEmpty(&Thread->ApcState.ApcListHead[UserMode]))) {
|
} else if ((AlertMode != KernelMode) && (!IsListEmpty(&Thread->ApcState.ApcListHead[UserMode]))) {
|
||||||
|
|
||||||
/* If the mode is User and the Queue isn't empty, set Pending */
|
/* If the mode is User and the Queue isn't empty, set Pending */
|
||||||
Thread->ApcState.UserApcPending = TRUE;
|
Thread->ApcState.UserApcPending = TRUE;
|
||||||
|
@ -1480,9 +1480,7 @@ NtAlertResumeThread(IN HANDLE ThreadHandle,
|
||||||
|
|
||||||
_SEH_TRY {
|
_SEH_TRY {
|
||||||
|
|
||||||
ProbeForWrite(SuspendCount,
|
ProbeForWriteUlong(SuspendCount);
|
||||||
sizeof(HANDLE),
|
|
||||||
sizeof(ULONG));
|
|
||||||
|
|
||||||
} _SEH_HANDLE {
|
} _SEH_HANDLE {
|
||||||
|
|
||||||
|
@ -1578,26 +1576,30 @@ NtDelayExecution(IN BOOLEAN Alertable,
|
||||||
/* Check if parameters are valid */
|
/* Check if parameters are valid */
|
||||||
if(PreviousMode != KernelMode) {
|
if(PreviousMode != KernelMode) {
|
||||||
|
|
||||||
|
Status = STATUS_SUCCESS;
|
||||||
|
|
||||||
_SEH_TRY {
|
_SEH_TRY {
|
||||||
|
|
||||||
ProbeForRead(DelayInterval,
|
|
||||||
sizeof(LARGE_INTEGER),
|
|
||||||
sizeof(ULONG));
|
|
||||||
|
|
||||||
/* make a copy on the kernel stack and let DelayInterval point to it so
|
/* make a copy on the kernel stack and let DelayInterval point to it so
|
||||||
we don't need to wrap KeDelayExecutionThread in SEH! */
|
we don't need to wrap KeDelayExecutionThread in SEH! */
|
||||||
SafeInterval = *DelayInterval;
|
SafeInterval = ProbeForReadLargeInteger(DelayInterval);
|
||||||
|
DelayInterval = &SafeInterval;
|
||||||
|
|
||||||
} _SEH_HANDLE {
|
} _SEH_HANDLE {
|
||||||
|
|
||||||
Status = _SEH_GetExceptionCode();
|
Status = _SEH_GetExceptionCode();
|
||||||
} _SEH_END;
|
} _SEH_END;
|
||||||
|
|
||||||
|
if (!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
return Status;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Call the Kernel Function */
|
/* Call the Kernel Function */
|
||||||
Status = KeDelayExecutionThread(PreviousMode,
|
Status = KeDelayExecutionThread(PreviousMode,
|
||||||
Alertable,
|
Alertable,
|
||||||
&SafeInterval);
|
DelayInterval);
|
||||||
|
|
||||||
/* Return Status */
|
/* Return Status */
|
||||||
return Status;
|
return Status;
|
||||||
|
|
|
@ -223,7 +223,7 @@ KeRemoveQueue(IN PKQUEUE Queue,
|
||||||
Thread->WaitBlockList = &Thread->WaitBlock[0];
|
Thread->WaitBlockList = &Thread->WaitBlock[0];
|
||||||
|
|
||||||
/* Fail if there's an APC Pending */
|
/* Fail if there's an APC Pending */
|
||||||
if (WaitMode == UserMode && Thread->ApcState.UserApcPending) {
|
if (WaitMode != KernelMode && Thread->ApcState.UserApcPending) {
|
||||||
|
|
||||||
/* Return the status and increase the pending threads */
|
/* Return the status and increase the pending threads */
|
||||||
ListEntry = (PLIST_ENTRY)STATUS_USER_APC;
|
ListEntry = (PLIST_ENTRY)STATUS_USER_APC;
|
||||||
|
|
|
@ -47,7 +47,7 @@ KiCheckAlertability(BOOLEAN Alertable,
|
||||||
|
|
||||||
/* If there are User APCs Pending, then we can't really be alertable */
|
/* If there are User APCs Pending, then we can't really be alertable */
|
||||||
} else if ((!IsListEmpty(&CurrentThread->ApcState.ApcListHead[UserMode])) &&
|
} else if ((!IsListEmpty(&CurrentThread->ApcState.ApcListHead[UserMode])) &&
|
||||||
(WaitMode == UserMode)) {
|
(WaitMode != KernelMode)) {
|
||||||
|
|
||||||
DPRINT("APCs are Pending\n");
|
DPRINT("APCs are Pending\n");
|
||||||
CurrentThread->ApcState.UserApcPending = TRUE;
|
CurrentThread->ApcState.UserApcPending = TRUE;
|
||||||
|
@ -55,7 +55,7 @@ KiCheckAlertability(BOOLEAN Alertable,
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If there are User APCs Pending and we are waiting in usermode, then we must notify the caller */
|
/* If there are User APCs Pending and we are waiting in usermode, then we must notify the caller */
|
||||||
} else if ((CurrentThread->ApcState.UserApcPending) && (WaitMode == UserMode)) {
|
} else if ((CurrentThread->ApcState.UserApcPending) && (WaitMode != KernelMode)) {
|
||||||
DPRINT("APCs are Pending\n");
|
DPRINT("APCs are Pending\n");
|
||||||
*Status = STATUS_USER_APC;
|
*Status = STATUS_USER_APC;
|
||||||
}
|
}
|
||||||
|
|
|
@ -265,14 +265,10 @@ NtConnectPort (PHANDLE UnsafeConnectedPortHandle,
|
||||||
{
|
{
|
||||||
_SEH_TRY
|
_SEH_TRY
|
||||||
{
|
{
|
||||||
ProbeForWrite(UnsafeConnectedPortHandle,
|
ProbeForWriteHandle(UnsafeConnectedPortHandle);
|
||||||
sizeof(HANDLE),
|
|
||||||
sizeof(ULONG));
|
|
||||||
if (UnsafeMaximumMessageSize != NULL)
|
if (UnsafeMaximumMessageSize != NULL)
|
||||||
{
|
{
|
||||||
ProbeForWrite(UnsafeMaximumMessageSize,
|
ProbeForWriteUlong(UnsafeMaximumMessageSize);
|
||||||
sizeof(ULONG),
|
|
||||||
sizeof(ULONG));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_SEH_HANDLE
|
_SEH_HANDLE
|
||||||
|
@ -341,10 +337,7 @@ NtConnectPort (PHANDLE UnsafeConnectedPortHandle,
|
||||||
{
|
{
|
||||||
_SEH_TRY
|
_SEH_TRY
|
||||||
{
|
{
|
||||||
ProbeForRead(UnsafeConnectDataLength,
|
ConnectDataLength = ProbeForReadUlong(UnsafeConnectDataLength);
|
||||||
sizeof(ULONG),
|
|
||||||
1);
|
|
||||||
ConnectDataLength = *UnsafeConnectDataLength;
|
|
||||||
}
|
}
|
||||||
_SEH_HANDLE
|
_SEH_HANDLE
|
||||||
{
|
{
|
||||||
|
@ -374,9 +367,7 @@ NtConnectPort (PHANDLE UnsafeConnectedPortHandle,
|
||||||
{
|
{
|
||||||
_SEH_TRY
|
_SEH_TRY
|
||||||
{
|
{
|
||||||
ProbeForWrite(UnsafeConnectData,
|
ProbeForWriteUlong(UnsafeConnectData);
|
||||||
ConnectDataLength,
|
|
||||||
1);
|
|
||||||
RtlCopyMemory(ConnectData,
|
RtlCopyMemory(ConnectData,
|
||||||
UnsafeConnectData,
|
UnsafeConnectData,
|
||||||
ConnectDataLength);
|
ConnectDataLength);
|
||||||
|
|
|
@ -778,7 +778,7 @@ MmMapLockedPagesSpecifyCache ( IN PMDL Mdl,
|
||||||
/* Calculate the number of pages required. */
|
/* Calculate the number of pages required. */
|
||||||
PageCount = PAGE_ROUND_UP(Mdl->ByteCount + Mdl->ByteOffset) / PAGE_SIZE;
|
PageCount = PAGE_ROUND_UP(Mdl->ByteCount + Mdl->ByteOffset) / PAGE_SIZE;
|
||||||
|
|
||||||
if (AccessMode == UserMode)
|
if (AccessMode != KernelMode)
|
||||||
{
|
{
|
||||||
MEMORY_AREA *Result;
|
MEMORY_AREA *Result;
|
||||||
LARGE_INTEGER BoundaryAddressMultiple;
|
LARGE_INTEGER BoundaryAddressMultiple;
|
||||||
|
@ -885,7 +885,7 @@ MmMapLockedPagesSpecifyCache ( IN PMDL Mdl,
|
||||||
{
|
{
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
if (AccessMode == UserMode)
|
if (AccessMode != KernelMode)
|
||||||
{
|
{
|
||||||
/* Throw exception */
|
/* Throw exception */
|
||||||
ExRaiseStatus(STATUS_ACCESS_VIOLATION);
|
ExRaiseStatus(STATUS_ACCESS_VIOLATION);
|
||||||
|
|
|
@ -801,18 +801,12 @@ NtCreatePagingFile(IN PUNICODE_STRING FileName,
|
||||||
{
|
{
|
||||||
return(Status);
|
return(Status);
|
||||||
}
|
}
|
||||||
if (PreviousMode == UserMode)
|
if (PreviousMode != KernelMode)
|
||||||
{
|
{
|
||||||
_SEH_TRY
|
_SEH_TRY
|
||||||
{
|
{
|
||||||
ProbeForRead(InitialSize,
|
SafeInitialSize = ProbeForReadLargeInteger(InitialSize);
|
||||||
sizeof(LARGE_INTEGER),
|
SafeMaximumSize = ProbeForReadLargeInteger(MaximumSize);
|
||||||
sizeof(ULONG));
|
|
||||||
SafeInitialSize = *InitialSize;
|
|
||||||
ProbeForRead(MaximumSize,
|
|
||||||
sizeof(LARGE_INTEGER),
|
|
||||||
sizeof(ULONG));
|
|
||||||
SafeMaximumSize = *MaximumSize;
|
|
||||||
}
|
}
|
||||||
_SEH_HANDLE
|
_SEH_HANDLE
|
||||||
{
|
{
|
||||||
|
|
|
@ -3317,11 +3317,8 @@ NtCreateSection (OUT PHANDLE SectionHandle,
|
||||||
{
|
{
|
||||||
_SEH_TRY
|
_SEH_TRY
|
||||||
{
|
{
|
||||||
ProbeForRead(MaximumSize,
|
|
||||||
sizeof(LARGE_INTEGER),
|
|
||||||
sizeof(ULONG));
|
|
||||||
/* make a copy on the stack */
|
/* make a copy on the stack */
|
||||||
SafeMaximumSize = *MaximumSize;
|
SafeMaximumSize = ProbeForReadLargeInteger(MaximumSize);
|
||||||
MaximumSize = &SafeMaximumSize;
|
MaximumSize = &SafeMaximumSize;
|
||||||
}
|
}
|
||||||
_SEH_HANDLE
|
_SEH_HANDLE
|
||||||
|
@ -3401,9 +3398,7 @@ NtOpenSection(PHANDLE SectionHandle,
|
||||||
{
|
{
|
||||||
_SEH_TRY
|
_SEH_TRY
|
||||||
{
|
{
|
||||||
ProbeForWrite(SectionHandle,
|
ProbeForWriteHandle(SectionHandle);
|
||||||
sizeof(HANDLE),
|
|
||||||
sizeof(ULONG));
|
|
||||||
}
|
}
|
||||||
_SEH_HANDLE
|
_SEH_HANDLE
|
||||||
{
|
{
|
||||||
|
@ -3573,21 +3568,15 @@ NtMapViewOfSection(IN HANDLE SectionHandle,
|
||||||
{
|
{
|
||||||
if(BaseAddress != NULL)
|
if(BaseAddress != NULL)
|
||||||
{
|
{
|
||||||
ProbeForWrite(BaseAddress,
|
ProbeForWritePointer(BaseAddress);
|
||||||
sizeof(PVOID),
|
|
||||||
sizeof(ULONG));
|
|
||||||
SafeBaseAddress = *BaseAddress;
|
SafeBaseAddress = *BaseAddress;
|
||||||
}
|
}
|
||||||
if(SectionOffset != NULL)
|
if(SectionOffset != NULL)
|
||||||
{
|
{
|
||||||
ProbeForWrite(SectionOffset,
|
ProbeForWriteLargeInteger(SectionOffset);
|
||||||
sizeof(LARGE_INTEGER),
|
|
||||||
sizeof(ULONG));
|
|
||||||
SafeSectionOffset = *SectionOffset;
|
SafeSectionOffset = *SectionOffset;
|
||||||
}
|
}
|
||||||
ProbeForWrite(ViewSize,
|
ProbeForWriteUlong(ViewSize);
|
||||||
sizeof(ULONG),
|
|
||||||
sizeof(ULONG));
|
|
||||||
SafeViewSize = *ViewSize;
|
SafeViewSize = *ViewSize;
|
||||||
}
|
}
|
||||||
_SEH_HANDLE
|
_SEH_HANDLE
|
||||||
|
@ -4133,11 +4122,8 @@ NtExtendSection(IN HANDLE SectionHandle,
|
||||||
{
|
{
|
||||||
_SEH_TRY
|
_SEH_TRY
|
||||||
{
|
{
|
||||||
ProbeForRead(NewMaximumSize,
|
|
||||||
sizeof(LARGE_INTEGER),
|
|
||||||
sizeof(ULONG));
|
|
||||||
/* make a copy on the stack */
|
/* make a copy on the stack */
|
||||||
SafeNewMaximumSize = *NewMaximumSize;
|
SafeNewMaximumSize = ProbeForReadLargeInteger(NewMaximumSize);
|
||||||
NewMaximumSize = &SafeNewMaximumSize;
|
NewMaximumSize = &SafeNewMaximumSize;
|
||||||
}
|
}
|
||||||
_SEH_HANDLE
|
_SEH_HANDLE
|
||||||
|
|
|
@ -303,9 +303,7 @@ NtQueryVirtualMemory (IN HANDLE ProcessHandle,
|
||||||
{
|
{
|
||||||
_SEH_TRY
|
_SEH_TRY
|
||||||
{
|
{
|
||||||
ProbeForWrite(UnsafeResultLength,
|
ProbeForWriteUlong(UnsafeResultLength);
|
||||||
sizeof(ULONG),
|
|
||||||
sizeof(ULONG));
|
|
||||||
}
|
}
|
||||||
_SEH_HANDLE
|
_SEH_HANDLE
|
||||||
{
|
{
|
||||||
|
@ -458,15 +456,9 @@ NtProtectVirtualMemory(IN HANDLE ProcessHandle,
|
||||||
{
|
{
|
||||||
_SEH_TRY
|
_SEH_TRY
|
||||||
{
|
{
|
||||||
ProbeForWrite(UnsafeBaseAddress,
|
ProbeForWritePointer(UnsafeBaseAddress);
|
||||||
sizeof(PVOID),
|
ProbeForWriteUlong(UnsafeNumberOfBytesToProtect);
|
||||||
sizeof(ULONG));
|
ProbeForWriteUlong(UnsafeOldAccessProtection);
|
||||||
ProbeForWrite(UnsafeBaseAddress,
|
|
||||||
sizeof(ULONG),
|
|
||||||
sizeof(ULONG));
|
|
||||||
ProbeForWrite(UnsafeOldAccessProtection,
|
|
||||||
sizeof(ULONG),
|
|
||||||
sizeof(ULONG));
|
|
||||||
|
|
||||||
BaseAddress = *UnsafeBaseAddress;
|
BaseAddress = *UnsafeBaseAddress;
|
||||||
NumberOfBytesToProtect = *UnsafeNumberOfBytesToProtect;
|
NumberOfBytesToProtect = *UnsafeNumberOfBytesToProtect;
|
||||||
|
@ -573,9 +565,7 @@ NtReadVirtualMemory(IN HANDLE ProcessHandle,
|
||||||
1);
|
1);
|
||||||
if(NumberOfBytesRead != NULL)
|
if(NumberOfBytesRead != NULL)
|
||||||
{
|
{
|
||||||
ProbeForWrite(NumberOfBytesRead,
|
ProbeForWriteUlong(NumberOfBytesRead);
|
||||||
sizeof(ULONG),
|
|
||||||
sizeof(ULONG));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_SEH_HANDLE
|
_SEH_HANDLE
|
||||||
|
@ -776,9 +766,7 @@ NtWriteVirtualMemory(IN HANDLE ProcessHandle,
|
||||||
{
|
{
|
||||||
_SEH_TRY
|
_SEH_TRY
|
||||||
{
|
{
|
||||||
ProbeForWrite(NumberOfBytesWritten,
|
ProbeForWriteUlong(NumberOfBytesWritten);
|
||||||
sizeof(ULONG),
|
|
||||||
sizeof(ULONG));
|
|
||||||
}
|
}
|
||||||
_SEH_HANDLE
|
_SEH_HANDLE
|
||||||
{
|
{
|
||||||
|
|
|
@ -58,9 +58,7 @@ NtOpenDirectoryObject (OUT PHANDLE DirectoryHandle,
|
||||||
{
|
{
|
||||||
_SEH_TRY
|
_SEH_TRY
|
||||||
{
|
{
|
||||||
ProbeForWrite(DirectoryHandle,
|
ProbeForWriteHandle(DirectoryHandle);
|
||||||
sizeof(HANDLE),
|
|
||||||
sizeof(ULONG));
|
|
||||||
}
|
}
|
||||||
_SEH_HANDLE
|
_SEH_HANDLE
|
||||||
{
|
{
|
||||||
|
@ -186,18 +184,14 @@ NtQueryDirectoryObject (IN HANDLE DirectoryHandle,
|
||||||
ProbeForWrite(Buffer,
|
ProbeForWrite(Buffer,
|
||||||
BufferLength,
|
BufferLength,
|
||||||
sizeof(WCHAR));
|
sizeof(WCHAR));
|
||||||
ProbeForWrite(Context,
|
ProbeForWriteUlong(Context);
|
||||||
sizeof(ULONG),
|
|
||||||
sizeof(ULONG));
|
|
||||||
if(!RestartScan)
|
if(!RestartScan)
|
||||||
{
|
{
|
||||||
SkipEntries = *Context;
|
SkipEntries = *Context;
|
||||||
}
|
}
|
||||||
if(ReturnLength != NULL)
|
if(ReturnLength != NULL)
|
||||||
{
|
{
|
||||||
ProbeForWrite(ReturnLength,
|
ProbeForWriteUlong(ReturnLength);
|
||||||
sizeof(ULONG),
|
|
||||||
sizeof(ULONG));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_SEH_HANDLE
|
_SEH_HANDLE
|
||||||
|
@ -449,9 +443,7 @@ NtCreateDirectoryObject (OUT PHANDLE DirectoryHandle,
|
||||||
{
|
{
|
||||||
_SEH_TRY
|
_SEH_TRY
|
||||||
{
|
{
|
||||||
ProbeForWrite(DirectoryHandle,
|
ProbeForWriteHandle(DirectoryHandle);
|
||||||
sizeof(HANDLE),
|
|
||||||
sizeof(ULONG));
|
|
||||||
}
|
}
|
||||||
_SEH_HANDLE
|
_SEH_HANDLE
|
||||||
{
|
{
|
||||||
|
|
|
@ -388,9 +388,7 @@ NtDuplicateObject (IN HANDLE SourceProcessHandle,
|
||||||
{
|
{
|
||||||
_SEH_TRY
|
_SEH_TRY
|
||||||
{
|
{
|
||||||
ProbeForWrite(TargetHandle,
|
ProbeForWriteHandle(TargetHandle);
|
||||||
sizeof(HANDLE),
|
|
||||||
sizeof(ULONG));
|
|
||||||
}
|
}
|
||||||
_SEH_HANDLE
|
_SEH_HANDLE
|
||||||
{
|
{
|
||||||
|
|
|
@ -186,9 +186,7 @@ NtCreateSymbolicLinkObject(OUT PHANDLE LinkHandle,
|
||||||
{
|
{
|
||||||
_SEH_TRY
|
_SEH_TRY
|
||||||
{
|
{
|
||||||
ProbeForWrite(LinkHandle,
|
ProbeForWriteHandle(LinkHandle);
|
||||||
sizeof(HANDLE),
|
|
||||||
sizeof(ULONG));
|
|
||||||
}
|
}
|
||||||
_SEH_HANDLE
|
_SEH_HANDLE
|
||||||
{
|
{
|
||||||
|
@ -303,9 +301,7 @@ NtOpenSymbolicLinkObject(OUT PHANDLE LinkHandle,
|
||||||
{
|
{
|
||||||
_SEH_TRY
|
_SEH_TRY
|
||||||
{
|
{
|
||||||
ProbeForWrite(LinkHandle,
|
ProbeForWriteHandle(LinkHandle);
|
||||||
sizeof(HANDLE),
|
|
||||||
sizeof(ULONG));
|
|
||||||
}
|
}
|
||||||
_SEH_HANDLE
|
_SEH_HANDLE
|
||||||
{
|
{
|
||||||
|
@ -388,9 +384,7 @@ NtQuerySymbolicLinkObject(IN HANDLE LinkHandle,
|
||||||
|
|
||||||
if(ResultLength != NULL)
|
if(ResultLength != NULL)
|
||||||
{
|
{
|
||||||
ProbeForWrite(ResultLength,
|
ProbeForWriteUlong(ResultLength);
|
||||||
sizeof(ULONG),
|
|
||||||
sizeof(ULONG));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_SEH_HANDLE
|
_SEH_HANDLE
|
||||||
|
|
|
@ -75,12 +75,8 @@ NtWaitForMultipleObjects(IN ULONG ObjectCount,
|
||||||
|
|
||||||
if(TimeOut)
|
if(TimeOut)
|
||||||
{
|
{
|
||||||
ProbeForRead(TimeOut,
|
|
||||||
sizeof(LARGE_INTEGER),
|
|
||||||
sizeof(ULONG));
|
|
||||||
|
|
||||||
/* Make a local copy of the timeout on the stack */
|
/* Make a local copy of the timeout on the stack */
|
||||||
SafeTimeOut = *TimeOut;
|
SafeTimeOut = ProbeForReadLargeInteger(TimeOut);
|
||||||
TimeOut = &SafeTimeOut;
|
TimeOut = &SafeTimeOut;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -273,11 +269,8 @@ NtWaitForSingleObject(IN HANDLE ObjectHandle,
|
||||||
{
|
{
|
||||||
_SEH_TRY
|
_SEH_TRY
|
||||||
{
|
{
|
||||||
ProbeForRead(TimeOut,
|
|
||||||
sizeof(LARGE_INTEGER),
|
|
||||||
sizeof(ULONG));
|
|
||||||
/* Make a copy on the stack */
|
/* Make a copy on the stack */
|
||||||
SafeTimeOut = *TimeOut;
|
SafeTimeOut = ProbeForReadLargeInteger(TimeOut);
|
||||||
TimeOut = &SafeTimeOut;
|
TimeOut = &SafeTimeOut;
|
||||||
}
|
}
|
||||||
_SEH_HANDLE
|
_SEH_HANDLE
|
||||||
|
@ -354,11 +347,8 @@ NtSignalAndWaitForSingleObject(IN HANDLE ObjectHandleToSignal,
|
||||||
{
|
{
|
||||||
_SEH_TRY
|
_SEH_TRY
|
||||||
{
|
{
|
||||||
ProbeForRead(TimeOut,
|
|
||||||
sizeof(LARGE_INTEGER),
|
|
||||||
sizeof(ULONG));
|
|
||||||
/* Make a copy on the stack */
|
/* Make a copy on the stack */
|
||||||
SafeTimeOut = *TimeOut;
|
SafeTimeOut = ProbeForReadLargeInteger(TimeOut);
|
||||||
TimeOut = &SafeTimeOut;
|
TimeOut = &SafeTimeOut;
|
||||||
}
|
}
|
||||||
_SEH_HANDLE
|
_SEH_HANDLE
|
||||||
|
|
|
@ -212,7 +212,7 @@ NtCreateJobObject (
|
||||||
CurrentProcess = PsGetCurrentProcess();
|
CurrentProcess = PsGetCurrentProcess();
|
||||||
|
|
||||||
/* check for valid buffers */
|
/* check for valid buffers */
|
||||||
if(PreviousMode == UserMode)
|
if(PreviousMode != KernelMode)
|
||||||
{
|
{
|
||||||
_SEH_TRY
|
_SEH_TRY
|
||||||
{
|
{
|
||||||
|
@ -382,7 +382,7 @@ NtOpenJobObject (
|
||||||
PreviousMode = ExGetPreviousMode();
|
PreviousMode = ExGetPreviousMode();
|
||||||
|
|
||||||
/* check for valid buffers */
|
/* check for valid buffers */
|
||||||
if(PreviousMode == UserMode)
|
if(PreviousMode != KernelMode)
|
||||||
{
|
{
|
||||||
_SEH_TRY
|
_SEH_TRY
|
||||||
{
|
{
|
||||||
|
|
|
@ -75,7 +75,7 @@ NtOpenProcessTokenEx(IN HANDLE ProcessHandle,
|
||||||
|
|
||||||
PreviousMode = ExGetPreviousMode();
|
PreviousMode = ExGetPreviousMode();
|
||||||
|
|
||||||
if(PreviousMode == UserMode)
|
if(PreviousMode != KernelMode)
|
||||||
{
|
{
|
||||||
_SEH_TRY
|
_SEH_TRY
|
||||||
{
|
{
|
||||||
|
|
|
@ -45,7 +45,7 @@ NtResumeThread(IN HANDLE ThreadHandle,
|
||||||
ThreadHandle, SuspendCount);
|
ThreadHandle, SuspendCount);
|
||||||
|
|
||||||
/* Check buffer validity */
|
/* Check buffer validity */
|
||||||
if(SuspendCount && PreviousMode == UserMode) {
|
if(SuspendCount && PreviousMode != KernelMode) {
|
||||||
|
|
||||||
_SEH_TRY {
|
_SEH_TRY {
|
||||||
|
|
||||||
|
|
|
@ -32,7 +32,7 @@ RtlCaptureUnicodeString(OUT PUNICODE_STRING Dest,
|
||||||
* Copy the source string structure to kernel space.
|
* Copy the source string structure to kernel space.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if(CurrentMode == UserMode)
|
if(CurrentMode != KernelMode)
|
||||||
{
|
{
|
||||||
RtlZeroMemory(&Src, sizeof(Src));
|
RtlZeroMemory(&Src, sizeof(Src));
|
||||||
|
|
||||||
|
|
|
@ -354,7 +354,7 @@ SepReleaseAcl(IN PACL CapturedAcl,
|
||||||
PAGED_CODE();
|
PAGED_CODE();
|
||||||
|
|
||||||
if(CapturedAcl != NULL &&
|
if(CapturedAcl != NULL &&
|
||||||
(AccessMode == UserMode ||
|
(AccessMode != KernelMode ||
|
||||||
(AccessMode == KernelMode && CaptureIfKernel)))
|
(AccessMode == KernelMode && CaptureIfKernel)))
|
||||||
{
|
{
|
||||||
ExFreePool(CapturedAcl);
|
ExFreePool(CapturedAcl);
|
||||||
|
|
|
@ -338,7 +338,7 @@ SepReleaseSecurityQualityOfService(IN PSECURITY_QUALITY_OF_SERVICE CapturedSecur
|
||||||
PAGED_CODE();
|
PAGED_CODE();
|
||||||
|
|
||||||
if(CapturedSecurityQualityOfService != NULL &&
|
if(CapturedSecurityQualityOfService != NULL &&
|
||||||
(AccessMode == UserMode ||
|
(AccessMode != KernelMode ||
|
||||||
(AccessMode == KernelMode && CaptureIfKernel)))
|
(AccessMode == KernelMode && CaptureIfKernel)))
|
||||||
{
|
{
|
||||||
ExFreePool(CapturedSecurityQualityOfService);
|
ExFreePool(CapturedSecurityQualityOfService);
|
||||||
|
@ -819,7 +819,7 @@ SeReleaseSecurityDescriptor(
|
||||||
and CaptureIfKernelMode that you previously passed to
|
and CaptureIfKernelMode that you previously passed to
|
||||||
SeCaptureSecurityDescriptor() in order to avoid memory leaks! */
|
SeCaptureSecurityDescriptor() in order to avoid memory leaks! */
|
||||||
if(CapturedSecurityDescriptor != NULL &&
|
if(CapturedSecurityDescriptor != NULL &&
|
||||||
(CurrentMode == UserMode ||
|
(CurrentMode != KernelMode ||
|
||||||
(CurrentMode == KernelMode && CaptureIfKernelMode)))
|
(CurrentMode == KernelMode && CaptureIfKernelMode)))
|
||||||
{
|
{
|
||||||
/* only delete the descriptor when SeCaptureSecurityDescriptor() allocated one! */
|
/* only delete the descriptor when SeCaptureSecurityDescriptor() allocated one! */
|
||||||
|
|
|
@ -316,7 +316,7 @@ SepReleaseSid(IN PSID CapturedSid,
|
||||||
PAGED_CODE();
|
PAGED_CODE();
|
||||||
|
|
||||||
if(CapturedSid != NULL &&
|
if(CapturedSid != NULL &&
|
||||||
(AccessMode == UserMode ||
|
(AccessMode != KernelMode ||
|
||||||
(AccessMode == KernelMode && CaptureIfKernel)))
|
(AccessMode == KernelMode && CaptureIfKernel)))
|
||||||
{
|
{
|
||||||
ExFreePool(CapturedSid);
|
ExFreePool(CapturedSid);
|
||||||
|
|
|
@ -1440,9 +1440,7 @@ NtDuplicateToken(IN HANDLE ExistingTokenHandle,
|
||||||
{
|
{
|
||||||
_SEH_TRY
|
_SEH_TRY
|
||||||
{
|
{
|
||||||
ProbeForWrite(NewTokenHandle,
|
ProbeForWriteHandle(NewTokenHandle);
|
||||||
sizeof(HANDLE),
|
|
||||||
sizeof(ULONG));
|
|
||||||
}
|
}
|
||||||
_SEH_HANDLE
|
_SEH_HANDLE
|
||||||
{
|
{
|
||||||
|
@ -2053,6 +2051,7 @@ NtCreateToken(OUT PHANDLE TokenHandle,
|
||||||
ULONG uLength;
|
ULONG uLength;
|
||||||
ULONG i;
|
ULONG i;
|
||||||
ULONG nTokenPrivileges = 0;
|
ULONG nTokenPrivileges = 0;
|
||||||
|
LARGE_INTEGER LocalExpirationTime = {};
|
||||||
KPROCESSOR_MODE PreviousMode;
|
KPROCESSOR_MODE PreviousMode;
|
||||||
NTSTATUS Status = STATUS_SUCCESS;
|
NTSTATUS Status = STATUS_SUCCESS;
|
||||||
|
|
||||||
|
@ -2064,15 +2063,11 @@ NtCreateToken(OUT PHANDLE TokenHandle,
|
||||||
{
|
{
|
||||||
_SEH_TRY
|
_SEH_TRY
|
||||||
{
|
{
|
||||||
ProbeForWrite(TokenHandle,
|
ProbeForWriteHandle(TokenHandle);
|
||||||
sizeof(HANDLE),
|
|
||||||
sizeof(ULONG));
|
|
||||||
ProbeForRead(AuthenticationId,
|
ProbeForRead(AuthenticationId,
|
||||||
sizeof(LUID),
|
sizeof(LUID),
|
||||||
sizeof(ULONG));
|
sizeof(ULONG));
|
||||||
ProbeForRead(ExpirationTime,
|
LocalExpirationTime = ProbeForReadLargeInteger(ExpirationTime);
|
||||||
sizeof(LARGE_INTEGER),
|
|
||||||
sizeof(ULONG));
|
|
||||||
ProbeForRead(TokenUser,
|
ProbeForRead(TokenUser,
|
||||||
sizeof(TOKEN_USER),
|
sizeof(TOKEN_USER),
|
||||||
sizeof(ULONG));
|
sizeof(ULONG));
|
||||||
|
@ -2110,6 +2105,7 @@ NtCreateToken(OUT PHANDLE TokenHandle,
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
nTokenPrivileges = TokenPrivileges->PrivilegeCount;
|
nTokenPrivileges = TokenPrivileges->PrivilegeCount;
|
||||||
|
LocalExpirationTime = *ExpirationTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
Status = ZwAllocateLocallyUniqueId(&TokenId);
|
Status = ZwAllocateLocallyUniqueId(&TokenId);
|
||||||
|
@ -2383,9 +2379,7 @@ NtOpenThreadTokenEx(IN HANDLE ThreadHandle,
|
||||||
{
|
{
|
||||||
_SEH_TRY
|
_SEH_TRY
|
||||||
{
|
{
|
||||||
ProbeForWrite(TokenHandle,
|
ProbeForWriteHandle(TokenHandle);
|
||||||
sizeof(HANDLE),
|
|
||||||
sizeof(ULONG));
|
|
||||||
}
|
}
|
||||||
_SEH_HANDLE
|
_SEH_HANDLE
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue