KPROCESSOR_MODE PreviousMode,
PTOKEN* NewAccessToken)
{
- NTSTATUS Status;
ULONG uLength;
ULONG i;
-
PVOID EndMem;
-
PTOKEN AccessToken;
+ NTSTATUS Status;
+
+ if(PreviousMode != KernelMode)
+ {
+ Status = STATUS_SUCCESS;
+ _SEH_TRY
+ {
+ ProbeForWrite(NewAccessToken,
+ sizeof(TOKEN),
+ sizeof(ULONG));
+ }
+ _SEH_HANDLE
+ {
+ Status = _SEH_GetExceptionCode();
+ }
+ _SEH_END;
+
+ if(!NT_SUCCESS(Status))
+ {
+ return Status;
+ }
+ }
Status = ObCreateObject(PreviousMode,
SepTokenObjectType,
if ( NT_SUCCESS(Status) )
{
- *NewAccessToken = AccessToken;
- return(STATUS_SUCCESS);
+ _SEH_TRY
+ {
+ *NewAccessToken = AccessToken;
+ Status = STATUS_SUCCESS;
+ }
+ _SEH_HANDLE
+ {
+ Status = _SEH_GetExceptionCode();
+ }
+ _SEH_END;
+ return Status;
}
ObDereferenceObject(AccessToken);
TokenImpersonation,
Level,
PreviousMode,
- (PTOKEN*)&NewToken);
+ (PTOKEN*)NewToken);
return(Status);
}