- Make use of _SEH2_YIELD in Ex, Io, Ob, Ps and Se.
authorStefan Ginsberg <stefanginsberg@gmail.com>
Wed, 26 Aug 2009 17:31:02 +0000 (17:31 +0000)
committerStefan Ginsberg <stefanginsberg@gmail.com>
Wed, 26 Aug 2009 17:31:02 +0000 (17:31 +0000)
- Don't call ExSystemExceptionFilter() if we know the caller is user mode.
- Get rid of a couple of dependencies on the NTSTATUS being initialized with STATUS_SUCCESS -- indicate success where properly instead.

svn path=/trunk/; revision=42942

35 files changed:
reactos/ntoskrnl/ex/atom.c
reactos/ntoskrnl/ex/event.c
reactos/ntoskrnl/ex/evtpair.c
reactos/ntoskrnl/ex/harderr.c
reactos/ntoskrnl/ex/mutant.c
reactos/ntoskrnl/ex/profile.c
reactos/ntoskrnl/ex/sem.c
reactos/ntoskrnl/ex/sysinfo.c
reactos/ntoskrnl/ex/time.c
reactos/ntoskrnl/ex/timer.c
reactos/ntoskrnl/ex/uuid.c
reactos/ntoskrnl/io/iomgr/file.c
reactos/ntoskrnl/io/iomgr/iocomp.c
reactos/ntoskrnl/io/iomgr/iofunc.c
reactos/ntoskrnl/io/iomgr/irp.c
reactos/ntoskrnl/io/pnpmgr/plugplay.c
reactos/ntoskrnl/ob/obdir.c
reactos/ntoskrnl/ob/obhandle.c
reactos/ntoskrnl/ob/oblife.c
reactos/ntoskrnl/ob/oblink.c
reactos/ntoskrnl/ob/obsecure.c
reactos/ntoskrnl/ob/obwait.c
reactos/ntoskrnl/ps/debug.c
reactos/ntoskrnl/ps/job.c
reactos/ntoskrnl/ps/process.c
reactos/ntoskrnl/ps/query.c
reactos/ntoskrnl/ps/security.c
reactos/ntoskrnl/ps/state.c
reactos/ntoskrnl/ps/thread.c
reactos/ntoskrnl/ps/win32.c
reactos/ntoskrnl/se/acl.c
reactos/ntoskrnl/se/priv.c
reactos/ntoskrnl/se/sd.c
reactos/ntoskrnl/se/sid.c
reactos/ntoskrnl/se/token.c

index 36ca10f..e2b6d78 100644 (file)
@@ -90,7 +90,7 @@ NtAddAtom(IN PWSTR AtomName,
           OUT PRTL_ATOM Atom)
 {
     PRTL_ATOM_TABLE AtomTable = ExpGetGlobalAtomTable();
           OUT PRTL_ATOM Atom)
 {
     PRTL_ATOM_TABLE AtomTable = ExpGetGlobalAtomTable();
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
     LPWSTR CapturedName;
     ULONG CapturedSize;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
     LPWSTR CapturedName;
     ULONG CapturedSize;
@@ -145,32 +145,30 @@ NtAddAtom(IN PWSTR AtomName,
                 if (Atom) ProbeForWriteUshort(Atom);
             }
         }
                 if (Atom) ProbeForWriteUshort(Atom);
             }
         }
-        _SEH2_EXCEPT(ExSystemExceptionFilter())
+        _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         {
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
     }
 
         }
         _SEH2_END;
     }
 
-    /* Make sure probe worked */
-    if (NT_SUCCESS(Status))
+    /* Call the runtime function */
+    Status = RtlAddAtomToAtomTable(AtomTable, CapturedName, &SafeAtom);
+    if (NT_SUCCESS(Status) && (Atom))
     {
     {
-        /* Call the runtime function */
-        Status = RtlAddAtomToAtomTable(AtomTable, CapturedName, &SafeAtom);
-        if (NT_SUCCESS(Status) && (Atom))
+        /* Success and caller wants the atom back.. .enter SEH */
+        _SEH2_TRY
         {
         {
-            /* Success and caller wants the atom back.. .enter SEH */
-            _SEH2_TRY
-            {
-                /* Return the atom */
-                *Atom = SafeAtom;
-            }
-            _SEH2_EXCEPT(ExSystemExceptionFilter())
-            {
-                Status = _SEH2_GetExceptionCode();
-            }
-            _SEH2_END;
+            /* Return the atom */
+            *Atom = SafeAtom;
         }
         }
+        _SEH2_EXCEPT(ExSystemExceptionFilter())
+        {
+            /* Get the exception code */
+            Status = _SEH2_GetExceptionCode();
+        }
+        _SEH2_END;
     }
 
     /* If we captured anything, free it */
     }
 
     /* If we captured anything, free it */
@@ -242,7 +240,7 @@ NtFindAtom(IN PWSTR AtomName,
            OUT PRTL_ATOM Atom)
 {
     PRTL_ATOM_TABLE AtomTable = ExpGetGlobalAtomTable();
            OUT PRTL_ATOM Atom)
 {
     PRTL_ATOM_TABLE AtomTable = ExpGetGlobalAtomTable();
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
     LPWSTR CapturedName = NULL;
     ULONG CapturedSize;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
     LPWSTR CapturedName = NULL;
     ULONG CapturedSize;
@@ -297,32 +295,29 @@ NtFindAtom(IN PWSTR AtomName,
                 if (Atom) ProbeForWriteUshort(Atom);
             }
         }
                 if (Atom) ProbeForWriteUshort(Atom);
             }
         }
-        _SEH2_EXCEPT(ExSystemExceptionFilter())
+        _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         {
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
     }
 
         }
         _SEH2_END;
     }
 
-    /* Make sure probe worked */
-    if (NT_SUCCESS(Status))
+    /* Call the runtime function */
+    Status = RtlLookupAtomInAtomTable(AtomTable, CapturedName, &SafeAtom);
+    if (NT_SUCCESS(Status) && (Atom))
     {
     {
-        /* Call the runtime function */
-        Status = RtlLookupAtomInAtomTable(AtomTable, CapturedName, &SafeAtom);
-        if (NT_SUCCESS(Status) && (Atom))
+        /* Success and caller wants the atom back.. .enter SEH */
+        _SEH2_TRY
         {
         {
-            /* Success and caller wants the atom back.. .enter SEH */
-            _SEH2_TRY
-            {
-                /* Return the atom */
-                *Atom = SafeAtom;
-            }
-            _SEH2_EXCEPT(ExSystemExceptionFilter())
-            {
-                Status = _SEH2_GetExceptionCode();
-            }
-            _SEH2_END;
+            /* Return the atom */
+            *Atom = SafeAtom;
         }
         }
+        _SEH2_EXCEPT(ExSystemExceptionFilter())
+        {
+            Status = _SEH2_GetExceptionCode();
+        }
+        _SEH2_END;
     }
 
     /* If we captured anything, free it */
     }
 
     /* If we captured anything, free it */
index 80fb388..a0102e7 100644 (file)
@@ -101,13 +101,13 @@ NtCreateEvent(OUT PHANDLE EventHandle,
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
     PKEVENT Event;
     HANDLE hEvent;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
     PKEVENT Event;
     HANDLE hEvent;
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     PAGED_CODE();
     DPRINT("NtCreateEvent(0x%p, 0x%x, 0x%p)\n",
             EventHandle, DesiredAccess, ObjectAttributes);
 
     /* Check if we were called from user-mode */
     PAGED_CODE();
     DPRINT("NtCreateEvent(0x%p, 0x%x, 0x%p)\n",
             EventHandle, DesiredAccess, ObjectAttributes);
 
     /* Check if we were called from user-mode */
-    if(PreviousMode != KernelMode)
+    if (PreviousMode != KernelMode)
     {
         /* Enter SEH Block */
         _SEH2_TRY
     {
         /* Enter SEH Block */
         _SEH2_TRY
@@ -115,14 +115,12 @@ NtCreateEvent(OUT PHANDLE EventHandle,
             /* Check handle pointer */
             ProbeForWriteHandle(EventHandle);
         }
             /* Check handle pointer */
             ProbeForWriteHandle(EventHandle);
         }
-        _SEH2_EXCEPT(ExSystemExceptionFilter())
+        _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         {
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-
-        /* Bail out if pointer was invalid */
-        if(!NT_SUCCESS(Status)) return Status;
     }
 
     /* Create the Object */
     }
 
     /* Create the Object */
@@ -163,6 +161,7 @@ NtCreateEvent(OUT PHANDLE EventHandle,
             }
             _SEH2_EXCEPT(ExSystemExceptionFilter())
             {
             }
             _SEH2_EXCEPT(ExSystemExceptionFilter())
             {
+                /* Get the exception code */
                 Status = _SEH2_GetExceptionCode();
             }
             _SEH2_END;
                 Status = _SEH2_GetExceptionCode();
             }
             _SEH2_END;
@@ -184,13 +183,13 @@ NtOpenEvent(OUT PHANDLE EventHandle,
 {
     HANDLE hEvent;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
 {
     HANDLE hEvent;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     PAGED_CODE();
     DPRINT("NtOpenEvent(0x%p, 0x%x, 0x%p)\n",
             EventHandle, DesiredAccess, ObjectAttributes);
 
     /* Check if we were called from user-mode */
     PAGED_CODE();
     DPRINT("NtOpenEvent(0x%p, 0x%x, 0x%p)\n",
             EventHandle, DesiredAccess, ObjectAttributes);
 
     /* Check if we were called from user-mode */
-    if(PreviousMode != KernelMode)
+    if (PreviousMode != KernelMode)
     {
         /* Enter SEH Block */
         _SEH2_TRY
     {
         /* Enter SEH Block */
         _SEH2_TRY
@@ -198,14 +197,12 @@ NtOpenEvent(OUT PHANDLE EventHandle,
             /* Check handle pointer */
             ProbeForWriteHandle(EventHandle);
         }
             /* Check handle pointer */
             ProbeForWriteHandle(EventHandle);
         }
-        _SEH2_EXCEPT(ExSystemExceptionFilter())
+        _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         {
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-
-        /* Bail out if pointer was invalid */
-        if(!NT_SUCCESS(Status)) return Status;
     }
 
     /* Open the Object */
     }
 
     /* Open the Object */
@@ -218,7 +215,7 @@ NtOpenEvent(OUT PHANDLE EventHandle,
                                 &hEvent);
 
     /* Check for success */
                                 &hEvent);
 
     /* Check for success */
-    if(NT_SUCCESS(Status))
+    if (NT_SUCCESS(Status))
     {
         /* Enter SEH for return */
         _SEH2_TRY
     {
         /* Enter SEH for return */
         _SEH2_TRY
@@ -228,6 +225,7 @@ NtOpenEvent(OUT PHANDLE EventHandle,
         }
         _SEH2_EXCEPT(ExSystemExceptionFilter())
         {
         }
         _SEH2_EXCEPT(ExSystemExceptionFilter())
         {
+            /* Get the exception code */
             Status = _SEH2_GetExceptionCode();
         }
         _SEH2_END;
             Status = _SEH2_GetExceptionCode();
         }
         _SEH2_END;
@@ -247,7 +245,7 @@ NtPulseEvent(IN HANDLE EventHandle,
 {
     PKEVENT Event;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
 {
     PKEVENT Event;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     PAGED_CODE();
     DPRINT("NtPulseEvent(EventHandle 0%x PreviousState 0%x)\n",
             EventHandle, PreviousState);
     PAGED_CODE();
     DPRINT("NtPulseEvent(EventHandle 0%x PreviousState 0%x)\n",
             EventHandle, PreviousState);
@@ -261,14 +259,12 @@ NtPulseEvent(IN HANDLE EventHandle,
             /* Make sure the state pointer is valid */
             ProbeForWriteLong(PreviousState);
         }
             /* Make sure the state pointer is valid */
             ProbeForWriteLong(PreviousState);
         }
-        _SEH2_EXCEPT(ExSystemExceptionFilter())
+        _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         {
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-
-        /* Bail out if pointer was invalid */
-        if(!NT_SUCCESS(Status)) return Status;
     }
 
     /* Open the Object */
     }
 
     /* Open the Object */
@@ -297,6 +293,7 @@ NtPulseEvent(IN HANDLE EventHandle,
             }
             _SEH2_EXCEPT(ExSystemExceptionFilter())
             {
             }
             _SEH2_EXCEPT(ExSystemExceptionFilter())
             {
+                /* Get the exception code */
                 Status = _SEH2_GetExceptionCode();
             }
             _SEH2_END;
                 Status = _SEH2_GetExceptionCode();
             }
             _SEH2_END;
@@ -320,7 +317,7 @@ NtQueryEvent(IN HANDLE EventHandle,
 {
     PKEVENT Event;
     KPROCESSOR_MODE PreviousMode  = ExGetPreviousMode();
 {
     PKEVENT Event;
     KPROCESSOR_MODE PreviousMode  = ExGetPreviousMode();
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     PEVENT_BASIC_INFORMATION BasicInfo =
         (PEVENT_BASIC_INFORMATION)EventInformation;
     PAGED_CODE();
     PEVENT_BASIC_INFORMATION BasicInfo =
         (PEVENT_BASIC_INFORMATION)EventInformation;
     PAGED_CODE();
@@ -365,6 +362,7 @@ NtQueryEvent(IN HANDLE EventHandle,
         }
         _SEH2_EXCEPT(ExSystemExceptionFilter())
         {
         }
         _SEH2_EXCEPT(ExSystemExceptionFilter())
         {
+            /* Get the exception code */
             Status = _SEH2_GetExceptionCode();
         }
         _SEH2_END;
             Status = _SEH2_GetExceptionCode();
         }
         _SEH2_END;
@@ -387,13 +385,13 @@ NtResetEvent(IN HANDLE EventHandle,
 {
     PKEVENT Event;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
 {
     PKEVENT Event;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     PAGED_CODE();
     DPRINT("NtResetEvent(EventHandle 0%x PreviousState 0%x)\n",
             EventHandle, PreviousState);
 
     /* Check if we were called from user-mode */
     PAGED_CODE();
     DPRINT("NtResetEvent(EventHandle 0%x PreviousState 0%x)\n",
             EventHandle, PreviousState);
 
     /* Check if we were called from user-mode */
-    if((PreviousState) && (PreviousMode != KernelMode))
+    if ((PreviousState) && (PreviousMode != KernelMode))
     {
         /* Entry SEH Block */
         _SEH2_TRY
     {
         /* Entry SEH Block */
         _SEH2_TRY
@@ -401,14 +399,12 @@ NtResetEvent(IN HANDLE EventHandle,
             /* Make sure the state pointer is valid */
             ProbeForWriteLong(PreviousState);
         }
             /* Make sure the state pointer is valid */
             ProbeForWriteLong(PreviousState);
         }
-        _SEH2_EXCEPT(ExSystemExceptionFilter())
+        _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         {
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-
-        /* Bail out if pointer was invalid */
-        if(!NT_SUCCESS(Status)) return Status;
     }
 
     /* Open the Object */
     }
 
     /* Open the Object */
@@ -437,6 +433,7 @@ NtResetEvent(IN HANDLE EventHandle,
             }
             _SEH2_EXCEPT(ExSystemExceptionFilter())
             {
             }
             _SEH2_EXCEPT(ExSystemExceptionFilter())
             {
+                /* Get the exception code */
                 Status = _SEH2_GetExceptionCode();
             }
             _SEH2_END;
                 Status = _SEH2_GetExceptionCode();
             }
             _SEH2_END;
@@ -457,7 +454,7 @@ NtSetEvent(IN HANDLE EventHandle,
 {
     PKEVENT Event;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
 {
     PKEVENT Event;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     PAGED_CODE();
     DPRINT("NtSetEvent(EventHandle 0%x PreviousState 0%x)\n",
            EventHandle, PreviousState);
     PAGED_CODE();
     DPRINT("NtSetEvent(EventHandle 0%x PreviousState 0%x)\n",
            EventHandle, PreviousState);
@@ -471,14 +468,12 @@ NtSetEvent(IN HANDLE EventHandle,
             /* Make sure the state pointer is valid */
             ProbeForWriteLong(PreviousState);
         }
             /* Make sure the state pointer is valid */
             ProbeForWriteLong(PreviousState);
         }
-        _SEH2_EXCEPT(ExSystemExceptionFilter())
+        _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         {
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-
-        /* Bail out if pointer was invalid */
-        if(!NT_SUCCESS(Status)) return Status;
     }
 
     /* Open the Object */
     }
 
     /* Open the Object */
index 48b63ec..d8595d8 100644 (file)
@@ -61,12 +61,12 @@ NtCreateEventPair(OUT PHANDLE EventPairHandle,
     PKEVENT_PAIR EventPair;
     HANDLE hEventPair;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
     PKEVENT_PAIR EventPair;
     HANDLE hEventPair;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     PAGED_CODE();
     DPRINT("NtCreateEventPair: 0x%p\n", EventPairHandle);
 
     /* Check if we were called from user-mode */
     PAGED_CODE();
     DPRINT("NtCreateEventPair: 0x%p\n", EventPairHandle);
 
     /* Check if we were called from user-mode */
-    if(PreviousMode != KernelMode)
+    if (PreviousMode != KernelMode)
     {
         /* Enter SEH Block */
         _SEH2_TRY
     {
         /* Enter SEH Block */
         _SEH2_TRY
@@ -74,14 +74,12 @@ NtCreateEventPair(OUT PHANDLE EventPairHandle,
             /* Check handle pointer */
             ProbeForWriteHandle(EventPairHandle);
         }
             /* Check handle pointer */
             ProbeForWriteHandle(EventPairHandle);
         }
-        _SEH2_EXCEPT(ExSystemExceptionFilter())
+        _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         {
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-
-        /* Bail out if pointer was invalid */
-        if(!NT_SUCCESS(Status)) return Status;
     }
 
     /* Create the Object */
     }
 
     /* Create the Object */
@@ -97,7 +95,7 @@ NtCreateEventPair(OUT PHANDLE EventPairHandle,
                             (PVOID*)&EventPair);
 
     /* Check for Success */
                             (PVOID*)&EventPair);
 
     /* Check for Success */
-    if(NT_SUCCESS(Status))
+    if (NT_SUCCESS(Status))
     {
         /* Initalize the Event */
         DPRINT("Initializing EventPair\n");
     {
         /* Initalize the Event */
         DPRINT("Initializing EventPair\n");
@@ -111,15 +109,18 @@ NtCreateEventPair(OUT PHANDLE EventPairHandle,
                                  NULL,
                                  &hEventPair);
 
                                  NULL,
                                  &hEventPair);
 
-        /* Check for success and return handle */
-        if(NT_SUCCESS(Status))
+        /* Check for success */
+        if (NT_SUCCESS(Status))
         {
         {
+            /* Enter SEH */
             _SEH2_TRY
             {
             _SEH2_TRY
             {
+                /* Return the handle */
                 *EventPairHandle = hEventPair;
             }
             _SEH2_EXCEPT(ExSystemExceptionFilter())
             {
                 *EventPairHandle = hEventPair;
             }
             _SEH2_EXCEPT(ExSystemExceptionFilter())
             {
+                /* Get the exception code */
                 Status = _SEH2_GetExceptionCode();
             }
             _SEH2_END;
                 Status = _SEH2_GetExceptionCode();
             }
             _SEH2_END;
@@ -138,11 +139,11 @@ NtOpenEventPair(OUT PHANDLE EventPairHandle,
 {
     HANDLE hEventPair;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
 {
     HANDLE hEventPair;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     PAGED_CODE();
 
     /* Check if we were called from user-mode */
     PAGED_CODE();
 
     /* Check if we were called from user-mode */
-    if(PreviousMode != KernelMode)
+    if (PreviousMode != KernelMode)
     {
         /* Enter SEH Block */
         _SEH2_TRY
     {
         /* Enter SEH Block */
         _SEH2_TRY
@@ -150,14 +151,12 @@ NtOpenEventPair(OUT PHANDLE EventPairHandle,
             /* Check handle pointer */
             ProbeForWriteHandle(EventPairHandle);
         }
             /* Check handle pointer */
             ProbeForWriteHandle(EventPairHandle);
         }
-        _SEH2_EXCEPT(ExSystemExceptionFilter())
+        _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         {
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-
-        /* Bail out if pointer was invalid */
-        if(!NT_SUCCESS(Status)) return Status;
     }
 
     /* Open the Object */
     }
 
     /* Open the Object */
@@ -169,15 +168,18 @@ NtOpenEventPair(OUT PHANDLE EventPairHandle,
                                 NULL,
                                 &hEventPair);
 
                                 NULL,
                                 &hEventPair);
 
-    /* Check for success and return handle */
-    if(NT_SUCCESS(Status))
+    /* Check for success */
+    if (NT_SUCCESS(Status))
     {
     {
+        /* Enter SEH */
         _SEH2_TRY
         {
         _SEH2_TRY
         {
+            /* Return the handle */
             *EventPairHandle = hEventPair;
         }
         _SEH2_EXCEPT(ExSystemExceptionFilter())
         {
             *EventPairHandle = hEventPair;
         }
         _SEH2_EXCEPT(ExSystemExceptionFilter())
         {
+            /* Get the exception code */
             Status = _SEH2_GetExceptionCode();
         }
         _SEH2_END;
             Status = _SEH2_GetExceptionCode();
         }
         _SEH2_END;
index 8062519..cdf3804 100644 (file)
@@ -620,17 +620,16 @@ NtRaiseHardError(IN NTSTATUS ErrorStatus,
                 }
             }
         }
                 }
             }
         }
-        _SEH2_EXCEPT(ExSystemExceptionFilter())
+        _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
             /* Free captured buffer */
             if (SafeParams) ExFreePool(SafeParams);
         {
             /* Free captured buffer */
             if (SafeParams) ExFreePool(SafeParams);
-            Status = _SEH2_GetExceptionCode();
+
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
 
         }
         _SEH2_END;
 
-        /* If we failed to capture/probe, bail out */
-        if (!NT_SUCCESS(Status)) return Status;
-
         /* Call the system function directly, because we probed */
         ExpRaiseHardError(ErrorStatus,
                           NumberOfParameters,
         /* Call the system function directly, because we probed */
         ExpRaiseHardError(ErrorStatus,
                           NumberOfParameters,
@@ -668,8 +667,9 @@ NtRaiseHardError(IN NTSTATUS ErrorStatus,
             /* Return the response */
             *Response = SafeResponse;
         }
             /* Return the response */
             *Response = SafeResponse;
         }
-        _SEH2_EXCEPT(ExSystemExceptionFilter())
+        _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         {
+            /* Get the exception code */
             Status = _SEH2_GetExceptionCode();
         }
         _SEH2_END;
             Status = _SEH2_GetExceptionCode();
         }
         _SEH2_END;
index 040fc22..abd36a8 100644 (file)
@@ -84,13 +84,13 @@ NtCreateMutant(OUT PHANDLE MutantHandle,
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
     HANDLE hMutant;
     PKMUTANT Mutant;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
     HANDLE hMutant;
     PKMUTANT Mutant;
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     PAGED_CODE();
     DPRINT("NtCreateMutant(0x%p, 0x%x, 0x%p)\n",
             MutantHandle, DesiredAccess, ObjectAttributes);
 
     /* Check if we were called from user-mode */
     PAGED_CODE();
     DPRINT("NtCreateMutant(0x%p, 0x%x, 0x%p)\n",
             MutantHandle, DesiredAccess, ObjectAttributes);
 
     /* Check if we were called from user-mode */
-    if(PreviousMode != KernelMode)
+    if (PreviousMode != KernelMode)
     {
         /* Enter SEH Block */
         _SEH2_TRY
     {
         /* Enter SEH Block */
         _SEH2_TRY
@@ -98,14 +98,12 @@ NtCreateMutant(OUT PHANDLE MutantHandle,
             /* Check handle pointer */
             ProbeForWriteHandle(MutantHandle);
         }
             /* Check handle pointer */
             ProbeForWriteHandle(MutantHandle);
         }
-        _SEH2_EXCEPT(ExSystemExceptionFilter())
+        _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         {
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-
-        /* Bail out if pointer was invalid */
-        if(!NT_SUCCESS(Status)) return Status;
     }
 
     /* Create the Mutant Object*/
     }
 
     /* Create the Mutant Object*/
@@ -135,7 +133,7 @@ NtCreateMutant(OUT PHANDLE MutantHandle,
                                 &hMutant);
 
         /* Check for success */
                                 &hMutant);
 
         /* Check for success */
-        if(NT_SUCCESS(Status))
+        if (NT_SUCCESS(Status))
         {
             /* Enter SEH for return */
             _SEH2_TRY
         {
             /* Enter SEH for return */
             _SEH2_TRY
@@ -145,6 +143,7 @@ NtCreateMutant(OUT PHANDLE MutantHandle,
             }
             _SEH2_EXCEPT(ExSystemExceptionFilter())
             {
             }
             _SEH2_EXCEPT(ExSystemExceptionFilter())
             {
+                /* Get the exception code */
                 Status = _SEH2_GetExceptionCode();
             }
             _SEH2_END;
                 Status = _SEH2_GetExceptionCode();
             }
             _SEH2_END;
@@ -166,13 +165,13 @@ NtOpenMutant(OUT PHANDLE MutantHandle,
 {
     HANDLE hMutant;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
 {
     HANDLE hMutant;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     PAGED_CODE();
     DPRINT("NtOpenMutant(0x%p, 0x%x, 0x%p)\n",
             MutantHandle, DesiredAccess, ObjectAttributes);
 
     /* Check if we were called from user-mode */
     PAGED_CODE();
     DPRINT("NtOpenMutant(0x%p, 0x%x, 0x%p)\n",
             MutantHandle, DesiredAccess, ObjectAttributes);
 
     /* Check if we were called from user-mode */
-    if(PreviousMode != KernelMode)
+    if (PreviousMode != KernelMode)
     {
         /* Enter SEH Block */
         _SEH2_TRY
     {
         /* Enter SEH Block */
         _SEH2_TRY
@@ -180,14 +179,12 @@ NtOpenMutant(OUT PHANDLE MutantHandle,
             /* Check handle pointer */
             ProbeForWriteHandle(MutantHandle);
         }
             /* Check handle pointer */
             ProbeForWriteHandle(MutantHandle);
         }
-        _SEH2_EXCEPT(ExSystemExceptionFilter())
+        _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         {
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-
-        /* Bail out if pointer was invalid */
-        if(!NT_SUCCESS(Status)) return Status;
     }
 
     /* Open the Object */
     }
 
     /* Open the Object */
@@ -232,7 +229,7 @@ NtQueryMutant(IN HANDLE MutantHandle,
 {
     PKMUTANT Mutant;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
 {
     PKMUTANT Mutant;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     PMUTANT_BASIC_INFORMATION BasicInfo =
         (PMUTANT_BASIC_INFORMATION)MutantInformation;
     PAGED_CODE();
     PMUTANT_BASIC_INFORMATION BasicInfo =
         (PMUTANT_BASIC_INFORMATION)MutantInformation;
     PAGED_CODE();
@@ -260,7 +257,7 @@ NtQueryMutant(IN HANDLE MutantHandle,
                                        (PVOID*)&Mutant,
                                        NULL);
     /* Check for Status */
                                        (PVOID*)&Mutant,
                                        NULL);
     /* Check for Status */
-    if(NT_SUCCESS(Status))
+    if (NT_SUCCESS(Status))
     {
         /* Enter SEH Block for return */
          _SEH2_TRY
     {
         /* Enter SEH Block for return */
          _SEH2_TRY
@@ -273,7 +270,7 @@ NtQueryMutant(IN HANDLE MutantHandle,
             BasicInfo->AbandonedState = Mutant->Abandoned;
 
             /* Return the Result Length if requested */
             BasicInfo->AbandonedState = Mutant->Abandoned;
 
             /* Return the Result Length if requested */
-           if(ResultLength) *ResultLength = sizeof(MUTANT_BASIC_INFORMATION);
+           if (ResultLength) *ResultLength = sizeof(MUTANT_BASIC_INFORMATION);
         }
         _SEH2_EXCEPT(ExSystemExceptionFilter())
         {
         }
         _SEH2_EXCEPT(ExSystemExceptionFilter())
         {
@@ -299,14 +296,14 @@ NtReleaseMutant(IN HANDLE MutantHandle,
 {
     PKMUTANT Mutant;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
 {
     PKMUTANT Mutant;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     PAGED_CODE();
     DPRINT("NtReleaseMutant(MutantHandle 0x%p PreviousCount 0x%p)\n",
             MutantHandle,
             PreviousCount);
 
      /* Check if we were called from user-mode */
     PAGED_CODE();
     DPRINT("NtReleaseMutant(MutantHandle 0x%p PreviousCount 0x%p)\n",
             MutantHandle,
             PreviousCount);
 
      /* Check if we were called from user-mode */
-    if((PreviousCount) && (PreviousMode != KernelMode))
+    if ((PreviousCount) && (PreviousMode != KernelMode))
     {
         /* Entry SEH Block */
         _SEH2_TRY
     {
         /* Entry SEH Block */
         _SEH2_TRY
@@ -314,14 +311,12 @@ NtReleaseMutant(IN HANDLE MutantHandle,
             /* Make sure the state pointer is valid */
             ProbeForWriteLong(PreviousCount);
         }
             /* Make sure the state pointer is valid */
             ProbeForWriteLong(PreviousCount);
         }
-        _SEH2_EXCEPT(ExSystemExceptionFilter())
+        _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         {
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-
-        /* Bail out if pointer was invalid */
-        if(!NT_SUCCESS(Status)) return Status;
     }
 
     /* Open the Object */
     }
 
     /* Open the Object */
@@ -333,7 +328,7 @@ NtReleaseMutant(IN HANDLE MutantHandle,
                                        NULL);
 
     /* Check for Success and release if such */
                                        NULL);
 
     /* Check for Success and release if such */
-    if(NT_SUCCESS(Status))
+    if (NT_SUCCESS(Status))
     {
         /*
          * Release the mutant. doing so might raise an exception which we're
     {
         /*
          * Release the mutant. doing so might raise an exception which we're
@@ -348,10 +343,11 @@ NtReleaseMutant(IN HANDLE MutantHandle,
                                         FALSE);
 
             /* Return the previous count if requested */
                                         FALSE);
 
             /* Return the previous count if requested */
-            if(PreviousCount) *PreviousCount = Prev;
+            if (PreviousCount) *PreviousCount = Prev;
         }
         _SEH2_EXCEPT(ExSystemExceptionFilter())
         {
         }
         _SEH2_EXCEPT(ExSystemExceptionFilter())
         {
+            /* Get the exception code */
             Status = _SEH2_GetExceptionCode();
         }
         _SEH2_END;
             Status = _SEH2_GetExceptionCode();
         }
         _SEH2_END;
index 3348018..f5c1a2d 100644 (file)
@@ -102,7 +102,7 @@ NtCreateProfile(OUT PHANDLE ProfileHandle,
     PEPROCESS pProcess;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
     OBJECT_ATTRIBUTES ObjectAttributes;
     PEPROCESS pProcess;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
     OBJECT_ATTRIBUTES ObjectAttributes;
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     ULONG Log2 = 0;
     PVOID Segment = NULL;
     PAGED_CODE();
     ULONG Log2 = 0;
     PVOID Segment = NULL;
     PAGED_CODE();
@@ -164,14 +164,12 @@ NtCreateProfile(OUT PHANDLE ProfileHandle,
                           BufferSize,
                           sizeof(ULONG));
         }
                           BufferSize,
                           sizeof(ULONG));
         }
-        _SEH2_EXCEPT(ExSystemExceptionFilter())
+        _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         {
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-
-        /* Bail out if we failed */
-        if(!NT_SUCCESS(Status)) return Status;
     }
 
     /* Check if a process was specified */
     }
 
     /* Check if a process was specified */
@@ -281,7 +279,7 @@ NtQueryPerformanceCounter(OUT PLARGE_INTEGER PerformanceCounter,
     NTSTATUS Status = STATUS_SUCCESS;
 
     /* Check if we were called from user-mode */
     NTSTATUS Status = STATUS_SUCCESS;
 
     /* Check if we were called from user-mode */
-    if(PreviousMode != KernelMode)
+    if (PreviousMode != KernelMode)
     {
         /* Entry SEH Block */
         _SEH2_TRY
     {
         /* Entry SEH Block */
         _SEH2_TRY
@@ -293,14 +291,12 @@ NtQueryPerformanceCounter(OUT PLARGE_INTEGER PerformanceCounter,
                 ProbeForWriteLargeInteger(PerformanceFrequency);
             }
         }
                 ProbeForWriteLargeInteger(PerformanceFrequency);
             }
         }
-        _SEH2_EXCEPT(ExSystemExceptionFilter())
+        _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         {
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-
-        /* If the pointers are invalid, bail out */
-        if(!NT_SUCCESS(Status)) return Status;
     }
 
     /* Enter a new SEH Block */
     }
 
     /* Enter a new SEH Block */
@@ -310,10 +306,11 @@ NtQueryPerformanceCounter(OUT PLARGE_INTEGER PerformanceCounter,
         *PerformanceCounter = KeQueryPerformanceCounter(&PerfFrequency);
 
         /* Return Frequency if requested */
         *PerformanceCounter = KeQueryPerformanceCounter(&PerfFrequency);
 
         /* Return Frequency if requested */
-        if(PerformanceFrequency) *PerformanceFrequency = PerfFrequency;
+        if (PerformanceFrequency) *PerformanceFrequency = PerfFrequency;
     }
     _SEH2_EXCEPT(ExSystemExceptionFilter())
     {
     }
     _SEH2_EXCEPT(ExSystemExceptionFilter())
     {
+        /* Get the exception code */
         Status = _SEH2_GetExceptionCode();
     }
     _SEH2_END;
         Status = _SEH2_GetExceptionCode();
     }
     _SEH2_END;
@@ -380,21 +377,14 @@ NtStartProfile(IN HANDLE ProfileHandle)
         MmProbeAndLockPages(Profile->Mdl, PreviousMode, IoWriteAccess);
     }
     _SEH2_EXCEPT(ExSystemExceptionFilter())
         MmProbeAndLockPages(Profile->Mdl, PreviousMode, IoWriteAccess);
     }
     _SEH2_EXCEPT(ExSystemExceptionFilter())
-    {
-        /* Get the exception code */
-        Status = _SEH2_GetExceptionCode();
-    }
-    _SEH2_END;
-
-    /* Fail if we raised an exception */
-    if (!NT_SUCCESS(Status))
     {
         /* Release our lock, free the buffer, dereference and return */
         KeReleaseMutex(&ExpProfileMutex, FALSE);
         ObDereferenceObject(Profile);
         ExFreePool(ProfileObject);
     {
         /* Release our lock, free the buffer, dereference and return */
         KeReleaseMutex(&ExpProfileMutex, FALSE);
         ObDereferenceObject(Profile);
         ExFreePool(ProfileObject);
-        return Status;
+        _SEH2_YIELD(return _SEH2_GetExceptionCode());
     }
     }
+    _SEH2_END;
 
     /* Map the pages */
     TempLockedBufferAddress = MmMapLockedPages(Profile->Mdl, KernelMode);
 
     /* Map the pages */
     TempLockedBufferAddress = MmMapLockedPages(Profile->Mdl, KernelMode);
@@ -482,7 +472,7 @@ NtQueryIntervalProfile(IN KPROFILE_SOURCE ProfileSource,
     PAGED_CODE();
 
     /* Check if we were called from user-mode */
     PAGED_CODE();
 
     /* Check if we were called from user-mode */
-    if(PreviousMode != KernelMode)
+    if (PreviousMode != KernelMode)
     {
         /* Enter SEH Block */
         _SEH2_TRY
     {
         /* Enter SEH Block */
         _SEH2_TRY
@@ -490,14 +480,12 @@ NtQueryIntervalProfile(IN KPROFILE_SOURCE ProfileSource,
             /* Validate interval */
             ProbeForWriteUlong(Interval);
         }
             /* Validate interval */
             ProbeForWriteUlong(Interval);
         }
-        _SEH2_EXCEPT(ExSystemExceptionFilter())
+        _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         {
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-
-        /* If pointer was invalid, bail out */
-        if(!NT_SUCCESS(Status)) return Status;
     }
 
     /* Query the Interval */
     }
 
     /* Query the Interval */
@@ -511,12 +499,13 @@ NtQueryIntervalProfile(IN KPROFILE_SOURCE ProfileSource,
     }
     _SEH2_EXCEPT(ExSystemExceptionFilter())
     {
     }
     _SEH2_EXCEPT(ExSystemExceptionFilter())
     {
+        /* Get the exception code */
         Status = _SEH2_GetExceptionCode();
     }
     _SEH2_END;
 
     /* Return Success */
         Status = _SEH2_GetExceptionCode();
     }
     _SEH2_END;
 
     /* Return Success */
-    return STATUS_SUCCESS;
+    return Status;
 }
 
 NTSTATUS
 }
 
 NTSTATUS
index 12d38ff..9b43ce5 100644 (file)
@@ -72,11 +72,11 @@ NtCreateSemaphore(OUT PHANDLE SemaphoreHandle,
     PKSEMAPHORE Semaphore;
     HANDLE hSemaphore;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
     PKSEMAPHORE Semaphore;
     HANDLE hSemaphore;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     PAGED_CODE();
 
     /* Check if we were called from user-mode */
     PAGED_CODE();
 
     /* Check if we were called from user-mode */
-    if(PreviousMode != KernelMode)
+    if (PreviousMode != KernelMode)
     {
         /* Enter SEH Block */
         _SEH2_TRY
     {
         /* Enter SEH Block */
         _SEH2_TRY
@@ -84,14 +84,12 @@ NtCreateSemaphore(OUT PHANDLE SemaphoreHandle,
             /* Check handle pointer */
             ProbeForWriteHandle(SemaphoreHandle);
         }
             /* Check handle pointer */
             ProbeForWriteHandle(SemaphoreHandle);
         }
-        _SEH2_EXCEPT(ExSystemExceptionFilter())
+        _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         {
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-
-        /* Bail out if pointer was invalid */
-        if(!NT_SUCCESS(Status)) return Status;
     }
 
     /* Make sure the counts make sense */
     }
 
     /* Make sure the counts make sense */
@@ -131,7 +129,7 @@ NtCreateSemaphore(OUT PHANDLE SemaphoreHandle,
                                 &hSemaphore);
 
         /* Check for success */
                                 &hSemaphore);
 
         /* Check for success */
-        if(NT_SUCCESS(Status))
+        if (NT_SUCCESS(Status))
         {
             /* Enter SEH Block for return */
             _SEH2_TRY
         {
             /* Enter SEH Block for return */
             _SEH2_TRY
@@ -141,6 +139,7 @@ NtCreateSemaphore(OUT PHANDLE SemaphoreHandle,
             }
             _SEH2_EXCEPT(ExSystemExceptionFilter())
             {
             }
             _SEH2_EXCEPT(ExSystemExceptionFilter())
             {
+                /* Get the exception code */
                 Status = _SEH2_GetExceptionCode();
             }
             _SEH2_END;
                 Status = _SEH2_GetExceptionCode();
             }
             _SEH2_END;
@@ -162,11 +161,11 @@ NtOpenSemaphore(OUT PHANDLE SemaphoreHandle,
 {
     HANDLE hSemaphore;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
 {
     HANDLE hSemaphore;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     PAGED_CODE();
 
     /* Check if we were called from user-mode */
     PAGED_CODE();
 
     /* Check if we were called from user-mode */
-    if(PreviousMode != KernelMode)
+    if (PreviousMode != KernelMode)
     {
         /* Enter SEH Block */
         _SEH2_TRY
     {
         /* Enter SEH Block */
         _SEH2_TRY
@@ -174,14 +173,12 @@ NtOpenSemaphore(OUT PHANDLE SemaphoreHandle,
             /* Check handle pointer */
             ProbeForWriteHandle(SemaphoreHandle);
         }
             /* Check handle pointer */
             ProbeForWriteHandle(SemaphoreHandle);
         }
-        _SEH2_EXCEPT(ExSystemExceptionFilter())
+        _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         {
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-
-        /* Bail out if pointer was invalid */
-        if(!NT_SUCCESS(Status)) return Status;
     }
 
     /* Open the Object */
     }
 
     /* Open the Object */
@@ -194,7 +191,7 @@ NtOpenSemaphore(OUT PHANDLE SemaphoreHandle,
                                 &hSemaphore);
 
     /* Check for success */
                                 &hSemaphore);
 
     /* Check for success */
-    if(NT_SUCCESS(Status))
+    if (NT_SUCCESS(Status))
     {
         /* Enter SEH Block for return */
         _SEH2_TRY
     {
         /* Enter SEH Block for return */
         _SEH2_TRY
@@ -204,6 +201,7 @@ NtOpenSemaphore(OUT PHANDLE SemaphoreHandle,
         }
         _SEH2_EXCEPT(ExSystemExceptionFilter())
         {
         }
         _SEH2_EXCEPT(ExSystemExceptionFilter())
         {
+            /* Get the exception code */
             Status = _SEH2_GetExceptionCode();
         }
         _SEH2_END;
             Status = _SEH2_GetExceptionCode();
         }
         _SEH2_END;
@@ -222,11 +220,11 @@ NtQuerySemaphore(IN HANDLE SemaphoreHandle,
                  IN SEMAPHORE_INFORMATION_CLASS SemaphoreInformationClass,
                  OUT PVOID SemaphoreInformation,
                  IN ULONG SemaphoreInformationLength,
                  IN SEMAPHORE_INFORMATION_CLASS SemaphoreInformationClass,
                  OUT PVOID SemaphoreInformation,
                  IN ULONG SemaphoreInformationLength,
-                 OUT PULONG ReturnLength  OPTIONAL)
+                 OUT PULONG ReturnLength OPTIONAL)
 {
     PKSEMAPHORE Semaphore;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
 {
     PKSEMAPHORE Semaphore;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     PAGED_CODE();
 
     /* Check buffers and class validity */
     PAGED_CODE();
 
     /* Check buffers and class validity */
@@ -238,7 +236,7 @@ NtQuerySemaphore(IN HANDLE SemaphoreHandle,
                                          SemaphoreInformationLength,
                                          ReturnLength,
                                          PreviousMode);
                                          SemaphoreInformationLength,
                                          ReturnLength,
                                          PreviousMode);
-    if(!NT_SUCCESS(Status))
+    if (!NT_SUCCESS(Status))
     {
         /* Invalid buffers */
         DPRINT("NtQuerySemaphore() failed, Status: 0x%x\n", Status);
     {
         /* Invalid buffers */
         DPRINT("NtQuerySemaphore() failed, Status: 0x%x\n", Status);
@@ -254,7 +252,7 @@ NtQuerySemaphore(IN HANDLE SemaphoreHandle,
                                        NULL);
 
     /* Check for success */
                                        NULL);
 
     /* Check for success */
-    if(NT_SUCCESS(Status))
+    if (NT_SUCCESS(Status))
     {
         /* Entry SEH Block */
         _SEH2_TRY
     {
         /* Entry SEH Block */
         _SEH2_TRY
@@ -267,10 +265,11 @@ NtQuerySemaphore(IN HANDLE SemaphoreHandle,
             BasicInfo->MaximumCount = Semaphore->Limit;
 
             /* Return the length */
             BasicInfo->MaximumCount = Semaphore->Limit;
 
             /* Return the length */
-            if(ReturnLength) *ReturnLength = sizeof(*BasicInfo);
+            if (ReturnLength) *ReturnLength = sizeof(*BasicInfo);
         }
         _SEH2_EXCEPT(ExSystemExceptionFilter())
         {
         }
         _SEH2_EXCEPT(ExSystemExceptionFilter())
         {
+            /* Get the exception code */
             Status = _SEH2_GetExceptionCode();
         }
         _SEH2_END;
             Status = _SEH2_GetExceptionCode();
         }
         _SEH2_END;
@@ -294,11 +293,11 @@ NtReleaseSemaphore(IN HANDLE SemaphoreHandle,
 {
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
     PKSEMAPHORE Semaphore;
 {
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
     PKSEMAPHORE Semaphore;
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     PAGED_CODE();
 
     /* Check if we were called from user-mode */
     PAGED_CODE();
 
     /* Check if we were called from user-mode */
-    if((PreviousCount) && (PreviousMode != KernelMode))
+    if ((PreviousCount) && (PreviousMode != KernelMode))
     {
         /* Entry SEH Block */
         _SEH2_TRY
     {
         /* Entry SEH Block */
         _SEH2_TRY
@@ -306,14 +305,12 @@ NtReleaseSemaphore(IN HANDLE SemaphoreHandle,
             /* Make sure the state pointer is valid */
             ProbeForWriteLong(PreviousCount);
          }
             /* Make sure the state pointer is valid */
             ProbeForWriteLong(PreviousCount);
          }
-        _SEH2_EXCEPT(ExSystemExceptionFilter())
+        _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         {
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-
-        /* Bail out if pointer was invalid */
-        if(!NT_SUCCESS(Status)) return Status;
     }
 
     /* Make sure count makes sense */
     }
 
     /* Make sure count makes sense */
@@ -344,14 +341,16 @@ NtReleaseSemaphore(IN HANDLE SemaphoreHandle,
                                                 FALSE);
 
             /* Return the old count if requested */
                                                 FALSE);
 
             /* Return the old count if requested */
-            if(PreviousCount) *PreviousCount = PrevCount;
+            if (PreviousCount) *PreviousCount = PrevCount;
         }
         _SEH2_EXCEPT(ExSystemExceptionFilter())
         {
         }
         _SEH2_EXCEPT(ExSystemExceptionFilter())
         {
+            /* Get the exception code */
             Status = _SEH2_GetExceptionCode();
         }
         _SEH2_END;
 
             Status = _SEH2_GetExceptionCode();
         }
         _SEH2_END;
 
+        /* Dereference the Semaphore */
         ObDereferenceObject(Semaphore);
     }
 
         ObDereferenceObject(Semaphore);
     }
 
index bab1089..7afe3a0 100644 (file)
@@ -228,8 +228,7 @@ NtQuerySystemEnvironmentValue(IN PUNICODE_STRING VariableName,
     ANSI_STRING AValue;
     UNICODE_STRING WValue;
     KPROCESSOR_MODE PreviousMode;
     ANSI_STRING AValue;
     UNICODE_STRING WValue;
     KPROCESSOR_MODE PreviousMode;
-    NTSTATUS Status = STATUS_SUCCESS;
-
+    NTSTATUS Status;
     PAGED_CODE();
 
     PreviousMode = ExGetPreviousMode();
     PAGED_CODE();
 
     PreviousMode = ExGetPreviousMode();
@@ -248,13 +247,12 @@ NtQuerySystemEnvironmentValue(IN PUNICODE_STRING VariableName,
 
             if (ReturnLength != NULL) ProbeForWriteUlong(ReturnLength);
         }
 
             if (ReturnLength != NULL) ProbeForWriteUlong(ReturnLength);
         }
-        _SEH2_EXCEPT(ExSystemExceptionFilter())
+        _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         {
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-
-        if (!NT_SUCCESS(Status)) return Status;
     }
 
     /*
     }
 
     /*
index a7ff570..cab336f 100644 (file)
@@ -190,7 +190,7 @@ NtSetSystemTime(IN PLARGE_INTEGER SystemTime,
     PAGED_CODE();
 
     /* Check if we were called from user-mode */
     PAGED_CODE();
 
     /* Check if we were called from user-mode */
-    if(PreviousMode != KernelMode)
+    if (PreviousMode != KernelMode)
     {
         _SEH2_TRY
         {
     {
         _SEH2_TRY
         {
@@ -198,14 +198,12 @@ NtSetSystemTime(IN PLARGE_INTEGER SystemTime,
             NewSystemTime = ProbeForReadLargeInteger(SystemTime);
             if(PreviousTime) ProbeForWriteLargeInteger(PreviousTime);
         }
             NewSystemTime = ProbeForReadLargeInteger(SystemTime);
             if(PreviousTime) ProbeForWriteLargeInteger(PreviousTime);
         }
-        _SEH2_EXCEPT(ExSystemExceptionFilter())
+        _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         {
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-
-        /* If the pointers were invalid, bail out */
-        if(!NT_SUCCESS(Status)) return Status;
     }
     else
     {
     }
     else
     {
@@ -214,7 +212,7 @@ NtSetSystemTime(IN PLARGE_INTEGER SystemTime,
     }
 
     /* Make sure we have permission to change the time */
     }
 
     /* Make sure we have permission to change the time */
-    if(!SeSinglePrivilegeCheck(SeSystemtimePrivilege, PreviousMode))
+    if (!SeSinglePrivilegeCheck(SeSystemtimePrivilege, PreviousMode))
     {
         DPRINT1("NtSetSystemTime: Caller requires the "
                 "SeSystemtimePrivilege privilege!\n");
     {
         DPRINT1("NtSetSystemTime: Caller requires the "
                 "SeSystemtimePrivilege privilege!\n");
@@ -230,7 +228,7 @@ NtSetSystemTime(IN PLARGE_INTEGER SystemTime,
     KeSetSystemTime(&NewSystemTime, &OldSystemTime, FALSE, NULL);
 
     /* Check if caller wanted previous time */
     KeSetSystemTime(&NewSystemTime, &OldSystemTime, FALSE, NULL);
 
     /* Check if caller wanted previous time */
-    if(PreviousTime)
+    if (PreviousTime)
     {
         /* Enter SEH Block for return */
         _SEH2_TRY
     {
         /* Enter SEH Block for return */
         _SEH2_TRY
@@ -240,6 +238,7 @@ NtSetSystemTime(IN PLARGE_INTEGER SystemTime,
         }
         _SEH2_EXCEPT(ExSystemExceptionFilter())
         {
         }
         _SEH2_EXCEPT(ExSystemExceptionFilter())
         {
+            /* Get the exception code */
             Status = _SEH2_GetExceptionCode();
         }
         _SEH2_END;
             Status = _SEH2_GetExceptionCode();
         }
         _SEH2_END;
@@ -264,7 +263,7 @@ NtQuerySystemTime(OUT PLARGE_INTEGER SystemTime)
     PAGED_CODE();
 
     /* Check if we were called from user-mode */
     PAGED_CODE();
 
     /* Check if we were called from user-mode */
-    if(PreviousMode != KernelMode)
+    if (PreviousMode != KernelMode)
     {
         _SEH2_TRY
         {
     {
         _SEH2_TRY
         {
@@ -278,9 +277,10 @@ NtQuerySystemTime(OUT PLARGE_INTEGER SystemTime)
              */
             KeQuerySystemTime(SystemTime);
         }
              */
             KeQuerySystemTime(SystemTime);
         }
-        _SEH2_EXCEPT(ExSystemExceptionFilter())
+        _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         {
-        Status = _SEH2_GetExceptionCode();
+            /* Get the exception code */
+            Status = _SEH2_GetExceptionCode();
         }
         _SEH2_END;
     }
         }
         _SEH2_END;
     }
index 65a43b0..5ad5e4a 100644 (file)
@@ -254,22 +254,23 @@ NtCancelTimer(IN HANDLE TimerHandle,
     KIRQL OldIrql;
     PETHREAD TimerThread;
     ULONG DerefsToDo = 1;
     KIRQL OldIrql;
     PETHREAD TimerThread;
     ULONG DerefsToDo = 1;
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     PAGED_CODE();
 
     PAGED_CODE();
 
-    /* Check Parameter Validity */
+    /* Check if we need to probe */
     if ((CurrentState) && (PreviousMode != KernelMode))
     {
         _SEH2_TRY
         {
     if ((CurrentState) && (PreviousMode != KernelMode))
     {
         _SEH2_TRY
         {
+            /* Make sure the pointer is valid */
             ProbeForWriteBoolean(CurrentState);
         }
             ProbeForWriteBoolean(CurrentState);
         }
-        _SEH2_EXCEPT(ExSystemExceptionFilter())
+        _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         {
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-        if(!NT_SUCCESS(Status)) return Status;
     }
 
     /* Get the Timer Object */
     }
 
     /* Get the Timer Object */
@@ -341,11 +342,12 @@ NtCancelTimer(IN HANDLE TimerHandle,
         /* Dereference the Object */
         ObDereferenceObjectEx(Timer, DerefsToDo);
 
         /* Dereference the Object */
         ObDereferenceObjectEx(Timer, DerefsToDo);
 
-        /* Make sure it's safe to write to the handle */
+        /* Check if caller wants the state */
         if (CurrentState)
         {
             _SEH2_TRY
             {
         if (CurrentState)
         {
             _SEH2_TRY
             {
+                /* Return the Timer State */
                 *CurrentState = State;
             }
             _SEH2_EXCEPT(ExSystemExceptionFilter())
                 *CurrentState = State;
             }
             _SEH2_EXCEPT(ExSystemExceptionFilter())
@@ -370,7 +372,7 @@ NtCreateTimer(OUT PHANDLE TimerHandle,
     PETIMER Timer;
     HANDLE hTimer;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
     PETIMER Timer;
     HANDLE hTimer;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     PAGED_CODE();
 
     /* Check for correct timer type */
     PAGED_CODE();
 
     /* Check for correct timer type */
@@ -381,19 +383,20 @@ NtCreateTimer(OUT PHANDLE TimerHandle,
         return STATUS_INVALID_PARAMETER_4;
     }
 
         return STATUS_INVALID_PARAMETER_4;
     }
 
-    /* Check Parameter Validity */
+    /* Check if we need to probe */
     if (PreviousMode != KernelMode)
     {
         _SEH2_TRY
         {
     if (PreviousMode != KernelMode)
     {
         _SEH2_TRY
         {
+            /* Make sure the pointer is valid */
             ProbeForWriteHandle(TimerHandle);
         }
             ProbeForWriteHandle(TimerHandle);
         }
-        _SEH2_EXCEPT(ExSystemExceptionFilter())
+        _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         {
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-        if(!NT_SUCCESS(Status)) return Status;
     }
 
     /* Create the Object */
     }
 
     /* Create the Object */
@@ -431,9 +434,10 @@ NtCreateTimer(OUT PHANDLE TimerHandle,
         /* Check for success */
         if (NT_SUCCESS(Status))
         {
         /* Check for success */
         if (NT_SUCCESS(Status))
         {
-            /* Make sure it's safe to write to the handle */
+            /* Enter SEH */
             _SEH2_TRY
             {
             _SEH2_TRY
             {
+                /* Return the Timer Handle */
                 *TimerHandle = hTimer;
             }
             _SEH2_EXCEPT(ExSystemExceptionFilter())
                 *TimerHandle = hTimer;
             }
             _SEH2_EXCEPT(ExSystemExceptionFilter())
@@ -456,7 +460,7 @@ NtOpenTimer(OUT PHANDLE TimerHandle,
 {
     HANDLE hTimer;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
 {
     HANDLE hTimer;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     PAGED_CODE();
 
     /* Check Parameter Validity */
     PAGED_CODE();
 
     /* Check Parameter Validity */
@@ -464,14 +468,15 @@ NtOpenTimer(OUT PHANDLE TimerHandle,
     {
         _SEH2_TRY
         {
     {
         _SEH2_TRY
         {
+            /* Make sure the pointer is valid */
             ProbeForWriteHandle(TimerHandle);
         }
         _SEH2_EXCEPT(ExSystemExceptionFilter())
         {
             ProbeForWriteHandle(TimerHandle);
         }
         _SEH2_EXCEPT(ExSystemExceptionFilter())
         {
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-        if(!NT_SUCCESS(Status)) return Status;
     }
 
     /* Open the Timer */
     }
 
     /* Open the Timer */
@@ -484,9 +489,10 @@ NtOpenTimer(OUT PHANDLE TimerHandle,
                                 &hTimer);
     if (NT_SUCCESS(Status))
     {
                                 &hTimer);
     if (NT_SUCCESS(Status))
     {
-        /* Make sure it's safe to write to the handle */
+        /* Enter SEH */
         _SEH2_TRY
         {
         _SEH2_TRY
         {
+            /* Return the Timer Handle */
             *TimerHandle = hTimer;
         }
         _SEH2_EXCEPT(ExSystemExceptionFilter())
             *TimerHandle = hTimer;
         }
         _SEH2_EXCEPT(ExSystemExceptionFilter())
@@ -523,7 +529,7 @@ NtQueryTimer(IN HANDLE TimerHandle,
                                          TimerInformationLength,
                                          ReturnLength,
                                          PreviousMode);
                                          TimerInformationLength,
                                          ReturnLength,
                                          PreviousMode);
-    if(!NT_SUCCESS(Status)) return Status;
+    if (!NT_SUCCESS(Status)) return Status;
 
     /* Get the Timer Object */
     Status = ObReferenceObjectByHandle(TimerHandle,
 
     /* Get the Timer Object */
     Status = ObReferenceObjectByHandle(TimerHandle,
@@ -532,7 +538,7 @@ NtQueryTimer(IN HANDLE TimerHandle,
                                        PreviousMode,
                                        (PVOID*)&Timer,
                                        NULL);
                                        PreviousMode,
                                        (PVOID*)&Timer,
                                        NULL);
-    if(NT_SUCCESS(Status))
+    if (NT_SUCCESS(Status))
     {
         /* Return the Basic Information */
         _SEH2_TRY
     {
         /* Return the Basic Information */
         _SEH2_TRY
@@ -550,6 +556,7 @@ NtQueryTimer(IN HANDLE TimerHandle,
         }
         _SEH2_EXCEPT(ExSystemExceptionFilter())
         {
         }
         _SEH2_EXCEPT(ExSystemExceptionFilter())
         {
+            /* Get the exception code */
             Status = _SEH2_GetExceptionCode();
         }
         _SEH2_END;
             Status = _SEH2_GetExceptionCode();
         }
         _SEH2_END;
@@ -586,20 +593,23 @@ NtSetTimer(IN HANDLE TimerHandle,
     /* Check for a valid Period */
     if (Period < 0) return STATUS_INVALID_PARAMETER_6;
 
     /* Check for a valid Period */
     if (Period < 0) return STATUS_INVALID_PARAMETER_6;
 
-    /* Check Parameter Validity */
+    /* Check if we need to probe */
     if (PreviousMode != KernelMode)
     {
         _SEH2_TRY
         {
     if (PreviousMode != KernelMode)
     {
         _SEH2_TRY
         {
+            /* Probe and capture the due time */
             TimerDueTime = ProbeForReadLargeInteger(DueTime);
             TimerDueTime = ProbeForReadLargeInteger(DueTime);
+
+            /* Probe the state pointer if one was passed */
             if (PreviousState) ProbeForWriteBoolean(PreviousState);
         }
             if (PreviousState) ProbeForWriteBoolean(PreviousState);
         }
-        _SEH2_EXCEPT(ExSystemExceptionFilter())
+        _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         {
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-        if(!NT_SUCCESS(Status)) return Status;
     }
     else
     {
     }
     else
     {
@@ -715,15 +725,18 @@ NtSetTimer(IN HANDLE TimerHandle,
         /* Dereference if it was previously enabled */
         if (DerefsToDo) ObDereferenceObjectEx(Timer, DerefsToDo);
 
         /* Dereference if it was previously enabled */
         if (DerefsToDo) ObDereferenceObjectEx(Timer, DerefsToDo);
 
-        /* Make sure it's safe to write to the handle */
+        /* Check if we need to return the State */
         if (PreviousState)
         {
         if (PreviousState)
         {
+            /* Enter SEH */
             _SEH2_TRY
             {
             _SEH2_TRY
             {
+                /* Return the Timer State */
                 *PreviousState = State;
             }
             _SEH2_EXCEPT(ExSystemExceptionFilter())
             {
                 *PreviousState = State;
             }
             _SEH2_EXCEPT(ExSystemExceptionFilter())
             {
+
             }
             _SEH2_END;
         }
             }
             _SEH2_END;
         }
index ef860be..2a6343f 100644 (file)
@@ -259,7 +259,7 @@ NtAllocateLocallyUniqueId(OUT LUID *LocallyUniqueId)
 {
     LUID NewLuid;
     KPROCESSOR_MODE PreviousMode;
 {
     LUID NewLuid;
     KPROCESSOR_MODE PreviousMode;
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
 
     PAGED_CODE();
 
 
     PAGED_CODE();
 
@@ -275,14 +275,9 @@ NtAllocateLocallyUniqueId(OUT LUID *LocallyUniqueId)
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
-            Status = _SEH2_GetExceptionCode();
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-
-        if(!NT_SUCCESS(Status))
-        {
-            return Status;
-        }
     }
 
     Status = ExpAllocateLocallyUniqueId(&NewLuid);
     }
 
     Status = ExpAllocateLocallyUniqueId(&NewLuid);
index e9220f0..d007ace 100644 (file)
@@ -1271,6 +1271,7 @@ IopSecurityFile(IN PVOID ObjectBody,
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
+            /* Get the exception code */
             Status = _SEH2_GetExceptionCode();
         }
         _SEH2_END;
             Status = _SEH2_GetExceptionCode();
         }
         _SEH2_END;
@@ -1506,7 +1507,7 @@ IopQueryAttributesFile(IN POBJECT_ATTRIBUTES ObjectAttributes,
                        IN ULONG FileInformationSize,
                        OUT PVOID FileInformation)
 {
                        IN ULONG FileInformationSize,
                        OUT PVOID FileInformation)
 {
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     KPROCESSOR_MODE AccessMode = ExGetPreviousMode();
     DUMMY_FILE_OBJECT DummyFileObject;
     FILE_NETWORK_OPEN_INFORMATION NetworkOpenInfo;
     KPROCESSOR_MODE AccessMode = ExGetPreviousMode();
     DUMMY_FILE_OBJECT DummyFileObject;
     FILE_NETWORK_OPEN_INFORMATION NetworkOpenInfo;
@@ -1527,13 +1528,10 @@ IopQueryAttributesFile(IN POBJECT_ATTRIBUTES ObjectAttributes,
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
-            /* Get the exception code */
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-
-        /* Fail on exception */
-        if (!NT_SUCCESS(Status))return Status;
     }
 
     /* Check if this is a basic or full request */
     }
 
     /* Check if this is a basic or full request */
@@ -1658,7 +1656,7 @@ IoCreateFile(OUT PHANDLE FileHandle,
     HANDLE LocalHandle = 0;
     LARGE_INTEGER SafeAllocationSize;
     PVOID SystemEaBuffer = NULL;
     HANDLE LocalHandle = 0;
     LARGE_INTEGER SafeAllocationSize;
     PVOID SystemEaBuffer = NULL;
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     OPEN_PACKET OpenPacket;
     ULONG EaErrorOffset;
 
     OPEN_PACKET OpenPacket;
     ULONG EaErrorOffset;
 
@@ -1705,8 +1703,7 @@ IoCreateFile(OUT PHANDLE FileHandle,
                                                        TAG_EA);
                 if(!SystemEaBuffer)
                 {
                                                        TAG_EA);
                 if(!SystemEaBuffer)
                 {
-                    Status = STATUS_INSUFFICIENT_RESOURCES;
-                    _SEH2_LEAVE;
+                    _SEH2_YIELD(return STATUS_INSUFFICIENT_RESOURCES);
                 }
 
                 RtlCopyMemory(SystemEaBuffer, EaBuffer, EaLength);
                 }
 
                 RtlCopyMemory(SystemEaBuffer, EaBuffer, EaLength);
@@ -1719,23 +1716,22 @@ IoCreateFile(OUT PHANDLE FileHandle,
                 {
                     DPRINT1("FIXME: IoCheckEaBufferValidity() failed with "
                         "Status: %lx\n",Status);
                 {
                     DPRINT1("FIXME: IoCheckEaBufferValidity() failed with "
                         "Status: %lx\n",Status);
+
+                    /* Free EA Buffer and return the error */
+                    ExFreePoolWithTag(SystemEaBuffer, TAG_EA);
+                    _SEH2_YIELD(return Status);
                 }
             }
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
                 }
             }
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
-        {
-            Status = _SEH2_GetExceptionCode();
-        }
-        _SEH2_END;
-
-        if(!NT_SUCCESS(Status))
         {
             /* Free SystemEaBuffer if needed */
             if (SystemEaBuffer) ExFreePoolWithTag(SystemEaBuffer, TAG_EA);
 
         {
             /* Free SystemEaBuffer if needed */
             if (SystemEaBuffer) ExFreePoolWithTag(SystemEaBuffer, TAG_EA);
 
-            /* Return failure status */
-            return Status;
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         }
+        _SEH2_END;
     }
     else
     {
     }
     else
     {
@@ -2538,7 +2534,6 @@ NtCreateMailslotFile(OUT PHANDLE FileHandle,
                      IN PLARGE_INTEGER TimeOut)
 {
     MAILSLOT_CREATE_PARAMETERS Buffer;
                      IN PLARGE_INTEGER TimeOut)
 {
     MAILSLOT_CREATE_PARAMETERS Buffer;
-    NTSTATUS Status = STATUS_SUCCESS;
     PAGED_CODE();
 
     /* Check for Timeout */
     PAGED_CODE();
 
     /* Check for Timeout */
@@ -2555,13 +2550,10 @@ NtCreateMailslotFile(OUT PHANDLE FileHandle,
             }
             _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
             {
             }
             _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
             {
-                /* Get exception code */
-                Status = _SEH2_GetExceptionCode();
+                /* Return the exception code */
+                _SEH2_YIELD(return _SEH2_GetExceptionCode());
             }
             _SEH2_END;
             }
             _SEH2_END;
-
-            /* Return the exception */
-            if (!NT_SUCCESS(Status)) return Status;
         }
         else
         {
         }
         else
         {
@@ -2617,7 +2609,6 @@ NtCreateNamedPipeFile(OUT PHANDLE FileHandle,
                       IN PLARGE_INTEGER DefaultTimeout)
 {
     NAMED_PIPE_CREATE_PARAMETERS Buffer;
                       IN PLARGE_INTEGER DefaultTimeout)
 {
     NAMED_PIPE_CREATE_PARAMETERS Buffer;
-    NTSTATUS Status = STATUS_SUCCESS;
     PAGED_CODE();
 
     /* Check for Timeout */
     PAGED_CODE();
 
     /* Check for Timeout */
@@ -2635,13 +2626,10 @@ NtCreateNamedPipeFile(OUT PHANDLE FileHandle,
             }
             _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
             {
             }
             _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
             {
-                /* Get exception code */
-                Status = _SEH2_GetExceptionCode();
+                /* Return the exception code */
+                _SEH2_YIELD(return _SEH2_GetExceptionCode());
             }
             _SEH2_END;
             }
             _SEH2_END;
-
-            /* Return the exception */
-            if (!NT_SUCCESS(Status)) return Status;
         }
         else
         {
         }
         else
         {
@@ -2776,7 +2764,7 @@ NtCancelIoFile(IN HANDLE FileHandle,
     BOOLEAN OurIrpsInList = FALSE;
     LARGE_INTEGER Interval;
     KPROCESSOR_MODE PreviousMode = KeGetPreviousMode();
     BOOLEAN OurIrpsInList = FALSE;
     LARGE_INTEGER Interval;
     KPROCESSOR_MODE PreviousMode = KeGetPreviousMode();
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     PLIST_ENTRY ListHead, NextEntry;
     PAGED_CODE();
     IOTRACE(IO_API_DEBUG, "FileHandle: %p\n", FileHandle);
     PLIST_ENTRY ListHead, NextEntry;
     PAGED_CODE();
     IOTRACE(IO_API_DEBUG, "FileHandle: %p\n", FileHandle);
@@ -2792,13 +2780,10 @@ NtCancelIoFile(IN HANDLE FileHandle,
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
-            /* Get the exception code */
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-
-        /* Return exception code on failure */
-        if (!NT_SUCCESS(Status)) return Status;
     }
 
     /* Reference the file object */
     }
 
     /* Reference the file object */
index b187b14..c3da63b 100644 (file)
@@ -258,7 +258,7 @@ NtCreateIoCompletion(OUT PHANDLE IoCompletionHandle,
     PKQUEUE Queue;
     HANDLE hIoCompletionHandle;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
     PKQUEUE Queue;
     HANDLE hIoCompletionHandle;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     PAGED_CODE();
 
     /* Check if this was a user-mode call */
     PAGED_CODE();
 
     /* Check if this was a user-mode call */
@@ -272,13 +272,10 @@ NtCreateIoCompletion(OUT PHANDLE IoCompletionHandle,
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
-            /* Get the exception code */
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-
-        /* Fail on exception */
-        if (!NT_SUCCESS(Status)) return Status;
     }
 
     /* Create the Object */
     }
 
     /* Create the Object */
@@ -332,7 +329,7 @@ NtOpenIoCompletion(OUT PHANDLE IoCompletionHandle,
 {
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
     HANDLE hIoCompletionHandle;
 {
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
     HANDLE hIoCompletionHandle;
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     PAGED_CODE();
 
     /* Check if this was a user-mode call */
     PAGED_CODE();
 
     /* Check if this was a user-mode call */
@@ -346,13 +343,10 @@ NtOpenIoCompletion(OUT PHANDLE IoCompletionHandle,
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
-            /* Get the exception code */
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-
-        /* Fail on exception */
-        if (!NT_SUCCESS(Status)) return Status;
     }
 
     /* Open the Object */
     }
 
     /* Open the Object */
@@ -393,7 +387,7 @@ NtQueryIoCompletion(IN  HANDLE IoCompletionHandle,
 {
     PKQUEUE Queue;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
 {
     PKQUEUE Queue;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     PAGED_CODE();
 
     /* Check buffers and parameters */
     PAGED_CODE();
 
     /* Check buffers and parameters */
@@ -457,7 +451,7 @@ NtRemoveIoCompletion(IN HANDLE IoCompletionHandle,
     PIOP_MINI_COMPLETION_PACKET Packet;
     PLIST_ENTRY ListEntry;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
     PIOP_MINI_COMPLETION_PACKET Packet;
     PLIST_ENTRY ListEntry;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     PIRP Irp;
     PVOID Apc, Key;
     IO_STATUS_BLOCK IoStatus;
     PIRP Irp;
     PVOID Apc, Key;
     IO_STATUS_BLOCK IoStatus;
@@ -484,13 +478,10 @@ NtRemoveIoCompletion(IN HANDLE IoCompletionHandle,
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
-            /* Get the exception code */
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-
-        /* Fail on exception */
-        if (!NT_SUCCESS(Status)) return Status;
     }
 
     /* Open the Object */
     }
 
     /* Open the Object */
index 517dbb9..08b600f 100644 (file)
@@ -196,7 +196,7 @@ IopDeviceFsIoControl(IN HANDLE DeviceHandle,
                      IN ULONG OutputBufferLength OPTIONAL,
                      IN BOOLEAN IsDevIoCtl)
 {
                      IN ULONG OutputBufferLength OPTIONAL,
                      IN BOOLEAN IsDevIoCtl)
 {
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     PFILE_OBJECT FileObject;
     PDEVICE_OBJECT DeviceObject;
     PIRP Irp;
     PFILE_OBJECT FileObject;
     PDEVICE_OBJECT DeviceObject;
     PIRP Irp;
@@ -258,11 +258,10 @@ IopDeviceFsIoControl(IN HANDLE DeviceHandle,
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
-            /* Get the exception code */
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-        if (!NT_SUCCESS(Status)) return Status;
     }
 
     /* Don't check for access rights right now, KernelMode can do anything */
     }
 
     /* Don't check for access rights right now, KernelMode can do anything */
@@ -427,12 +426,11 @@ IopDeviceFsIoControl(IN HANDLE DeviceHandle,
             }
             _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
             {
             }
             _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
             {
-                /* Cleanup after exception */
+                /* Cleanup after exception and return */
                 IopCleanupAfterException(FileObject, Irp, EventObject, NULL);
                 IopCleanupAfterException(FileObject, Irp, EventObject, NULL);
-                Status = _SEH2_GetExceptionCode();
+                _SEH2_YIELD(return _SEH2_GetExceptionCode());
             }
             _SEH2_END;
             }
             _SEH2_END;
-            if (!NT_SUCCESS(Status)) return Status;
             break;
 
         /* Direct I/O */
             break;
 
         /* Direct I/O */
@@ -484,12 +482,11 @@ IopDeviceFsIoControl(IN HANDLE DeviceHandle,
             }
             _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
             {
             }
             _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
             {
-                /* Cleanup after exception */
+                /* Cleanup after exception and return */
                 IopCleanupAfterException(FileObject, Irp, EventObject, NULL);
                 IopCleanupAfterException(FileObject, Irp, EventObject, NULL);
-                Status = _SEH2_GetExceptionCode();
+                _SEH2_YIELD(return _SEH2_GetExceptionCode());
             }
             _SEH2_END;
             }
             _SEH2_END;
-            if (!NT_SUCCESS(Status)) return Status;
             break;
 
         case METHOD_NEITHER:
             break;
 
         case METHOD_NEITHER:
@@ -958,7 +955,7 @@ NtFlushBuffersFile(IN HANDLE FileHandle,
     PFILE_OBJECT FileObject;
     PIRP Irp;
     PIO_STACK_LOCATION StackPtr;
     PFILE_OBJECT FileObject;
     PIRP Irp;
     PIO_STACK_LOCATION StackPtr;
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     PDEVICE_OBJECT DeviceObject;
     PKEVENT Event = NULL;
     BOOLEAN LocalEvent = FALSE;
     PDEVICE_OBJECT DeviceObject;
     PKEVENT Event = NULL;
     BOOLEAN LocalEvent = FALSE;
@@ -978,13 +975,10 @@ NtFlushBuffersFile(IN HANDLE FileHandle,
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
-            /* Get the exception code */
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-
-        /* Return exception code, if any */
-        if (!NT_SUCCESS(Status)) return Status;
     }
 
     /* Get the File Object */
     }
 
     /* Get the File Object */
@@ -1095,7 +1089,7 @@ NtNotifyChangeDirectoryFile(IN HANDLE FileHandle,
     PFILE_OBJECT FileObject;
     PIO_STACK_LOCATION IoStack;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
     PFILE_OBJECT FileObject;
     PIO_STACK_LOCATION IoStack;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     BOOLEAN LockedForSync = FALSE;
     PAGED_CODE();
     IOTRACE(IO_API_DEBUG, "FileHandle: %p\n", FileHandle);
     BOOLEAN LockedForSync = FALSE;
     PAGED_CODE();
     IOTRACE(IO_API_DEBUG, "FileHandle: %p\n", FileHandle);
@@ -1114,14 +1108,11 @@ NtNotifyChangeDirectoryFile(IN HANDLE FileHandle,
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
-            /* Get the exception code */
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
 
         }
         _SEH2_END;
 
-        /* Check if probing failed */
-        if (!NT_SUCCESS(Status)) return Status;
-
         /* Check if CompletionFilter is valid */
         if (!CompletionFilter || (CompletionFilter & ~FILE_NOTIFY_VALID_MASK))
         {
         /* Check if CompletionFilter is valid */
         if (!CompletionFilter || (CompletionFilter & ~FILE_NOTIFY_VALID_MASK))
         {
@@ -1229,7 +1220,7 @@ NtLockFile(IN HANDLE FileHandle,
     BOOLEAN LockedForSync = FALSE;
     KPROCESSOR_MODE PreviousMode = KeGetPreviousMode();
     LARGE_INTEGER CapturedByteOffset, CapturedLength;
     BOOLEAN LockedForSync = FALSE;
     KPROCESSOR_MODE PreviousMode = KeGetPreviousMode();
     LARGE_INTEGER CapturedByteOffset, CapturedLength;
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     OBJECT_HANDLE_INFORMATION HandleInformation;
     PAGED_CODE();
     CapturedByteOffset.QuadPart = 0;
     OBJECT_HANDLE_INFORMATION HandleInformation;
     PAGED_CODE();
     CapturedByteOffset.QuadPart = 0;
@@ -1267,19 +1258,12 @@ NtLockFile(IN HANDLE FileHandle,
             CapturedLength = ProbeForReadLargeInteger(Length);
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
             CapturedLength = ProbeForReadLargeInteger(Length);
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
-        {
-            /* Get the exception code */
-            Status = _SEH2_GetExceptionCode();
-        }
-        _SEH2_END;
-
-        /* Check if probing failed */
-        if (!NT_SUCCESS(Status))
         {
             /* Dereference the object and return exception code */
             ObDereferenceObject(FileObject);
         {
             /* Dereference the object and return exception code */
             ObDereferenceObject(FileObject);
-            return Status;
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         }
+        _SEH2_END;
     }
     else
     {
     }
     else
     {
@@ -1351,15 +1335,14 @@ NtLockFile(IN HANDLE FileHandle,
     }
     _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
     {
     }
     _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
     {
-        /* Allocating failed, clean up */
+        /* Allocating failed, clean up and return the exception code */
         IopCleanupAfterException(FileObject, Irp, Event, NULL);
         if (LocalLength) ExFreePool(LocalLength);
 
         IopCleanupAfterException(FileObject, Irp, Event, NULL);
         if (LocalLength) ExFreePool(LocalLength);
 
-        /* Get status */
-        Status = _SEH2_GetExceptionCode();
+        /* Return the exception code */
+        _SEH2_YIELD(return _SEH2_GetExceptionCode());
     }
     _SEH2_END;
     }
     _SEH2_END;
-    if (!NT_SUCCESS(Status)) return Status;
 
     /* Set Parameters */
     StackPtr->Parameters.LockControl.ByteOffset = CapturedByteOffset;
 
     /* Set Parameters */
     StackPtr->Parameters.LockControl.ByteOffset = CapturedByteOffset;
@@ -1401,7 +1384,7 @@ NtQueryDirectoryFile(IN HANDLE FileHandle,
     PFILE_OBJECT FileObject;
     PIO_STACK_LOCATION StackPtr;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
     PFILE_OBJECT FileObject;
     PIO_STACK_LOCATION StackPtr;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     BOOLEAN LockedForSynch = FALSE;
     PKEVENT Event = NULL;
     PVOID AuxBuffer = NULL;
     BOOLEAN LockedForSynch = FALSE;
     PKEVENT Event = NULL;
     PVOID AuxBuffer = NULL;
@@ -1456,14 +1439,11 @@ NtQueryDirectoryFile(IN HANDLE FileHandle,
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
-            /* Get exception code and free the buffer */
+            /* Free buffer and return the exception code */
             if (AuxBuffer) ExFreePool(AuxBuffer);
             if (AuxBuffer) ExFreePool(AuxBuffer);
-            Status = _SEH2_GetExceptionCode();
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-
-        /* Return status on failure */
-        if (!NT_SUCCESS(Status)) return Status;
     }
 
     /* Get File Object */
     }
 
     /* Get File Object */
@@ -1547,15 +1527,14 @@ NtQueryDirectoryFile(IN HANDLE FileHandle,
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
-            /* Allocating failed, clean up */
+            /* Allocating failed, clean up and return the exception code */
             IopCleanupAfterException(FileObject, Irp, Event, NULL);
             if (AuxBuffer) ExFreePool(AuxBuffer);
 
             IopCleanupAfterException(FileObject, Irp, Event, NULL);
             if (AuxBuffer) ExFreePool(AuxBuffer);
 
-            /* Get status */
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-        if (!NT_SUCCESS(Status)) return Status;
 
         /* Set the buffer and flags */
         Irp->UserBuffer = FileInformation;
 
         /* Set the buffer and flags */
         Irp->UserBuffer = FileInformation;
@@ -1573,10 +1552,9 @@ NtQueryDirectoryFile(IN HANDLE FileHandle,
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
-            /* Allocating failed, clean up */
+            /* Allocating failed, clean up and return the exception code */
             IopCleanupAfterException(FileObject, Irp, Event, NULL);
             IopCleanupAfterException(FileObject, Irp, Event, NULL);
-            Status = _SEH2_GetExceptionCode();
-            _SEH2_YIELD(return Status);
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
     }
         }
         _SEH2_END;
     }
@@ -1647,7 +1625,7 @@ NtQueryInformationFile(IN HANDLE FileHandle,
 {
     OBJECT_HANDLE_INFORMATION HandleInformation;
     PFILE_OBJECT FileObject;
 {
     OBJECT_HANDLE_INFORMATION HandleInformation;
     PFILE_OBJECT FileObject;
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     PIRP Irp;
     PDEVICE_OBJECT DeviceObject;
     PIO_STACK_LOCATION StackPtr;
     PIRP Irp;
     PDEVICE_OBJECT DeviceObject;
     PIO_STACK_LOCATION StackPtr;
@@ -1689,11 +1667,10 @@ NtQueryInformationFile(IN HANDLE FileHandle,
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
-            /* Get the exception code */
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-        if (!NT_SUCCESS(Status)) return Status;
     }
     else
     {
     }
     else
     {
@@ -1811,12 +1788,11 @@ NtQueryInformationFile(IN HANDLE FileHandle,
     }
     _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
     {
     }
     _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
     {
-        /* Allocating failed, clean up */
+        /* Allocating failed, clean up and return the exception code */
         IopCleanupAfterException(FileObject, Irp, NULL, Event);
         IopCleanupAfterException(FileObject, Irp, NULL, Event);
-        Status = _SEH2_GetExceptionCode();
+        _SEH2_YIELD(return _SEH2_GetExceptionCode());
     }
     _SEH2_END;
     }
     _SEH2_END;
-    if (!NT_SUCCESS(Status)) return Status;
 
     /* Set the flags */
     Irp->Flags |= (IRP_BUFFERED_IO |
 
     /* Set the flags */
     Irp->Flags |= (IRP_BUFFERED_IO |
@@ -1957,7 +1933,7 @@ NtReadFile(IN HANDLE FileHandle,
            IN PLARGE_INTEGER ByteOffset OPTIONAL,
            IN PULONG Key OPTIONAL)
 {
            IN PLARGE_INTEGER ByteOffset OPTIONAL,
            IN PULONG Key OPTIONAL)
 {
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     PFILE_OBJECT FileObject;
     PIRP Irp;
     PDEVICE_OBJECT DeviceObject;
     PFILE_OBJECT FileObject;
     PIRP Irp;
     PDEVICE_OBJECT DeviceObject;
@@ -1973,7 +1949,7 @@ NtReadFile(IN HANDLE FileHandle,
     IOTRACE(IO_API_DEBUG, "FileHandle: %p\n", FileHandle);
 
     /* Validate User-Mode Buffers */
     IOTRACE(IO_API_DEBUG, "FileHandle: %p\n", FileHandle);
 
     /* Validate User-Mode Buffers */
-    if(PreviousMode != KernelMode)
+    if (PreviousMode != KernelMode)
     {
         _SEH2_TRY
         {
     {
         _SEH2_TRY
         {
@@ -1995,13 +1971,10 @@ NtReadFile(IN HANDLE FileHandle,
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
-            /* Get the exception code */
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-
-        /* Check for probe failure */
-        if (!NT_SUCCESS(Status)) return Status;
     }
     else
     {
     }
     else
     {
@@ -2116,12 +2089,11 @@ NtReadFile(IN HANDLE FileHandle,
             }
             _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
             {
             }
             _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
             {
-                /* Allocating failed, clean up */
+                /* Allocating failed, clean up and return the exception code */
                 IopCleanupAfterException(FileObject, Irp, EventObject, NULL);
                 IopCleanupAfterException(FileObject, Irp, EventObject, NULL);
-                Status = _SEH2_GetExceptionCode();
+                _SEH2_YIELD(return _SEH2_GetExceptionCode());
             }
             _SEH2_END;
             }
             _SEH2_END;
-            if (!NT_SUCCESS(Status)) return Status;
 
             /* Set the buffer and flags */
             Irp->UserBuffer = Buffer;
 
             /* Set the buffer and flags */
             Irp->UserBuffer = Buffer;
@@ -2148,10 +2120,9 @@ NtReadFile(IN HANDLE FileHandle,
             }
             _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
             {
             }
             _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
             {
-                /* Allocating failed, clean up */
+                /* Allocating failed, clean up and return the exception code */
                 IopCleanupAfterException(FileObject, Irp, EventObject, NULL);
                 IopCleanupAfterException(FileObject, Irp, EventObject, NULL);
-                Status = _SEH2_GetExceptionCode();
-                _SEH2_YIELD(return Status);
+                _SEH2_YIELD(return _SEH2_GetExceptionCode());
             }
             _SEH2_END;
 
             }
             _SEH2_END;
 
@@ -2229,7 +2200,7 @@ NtSetInformationFile(IN HANDLE FileHandle,
                      IN FILE_INFORMATION_CLASS FileInformationClass)
 {
     PFILE_OBJECT FileObject;
                      IN FILE_INFORMATION_CLASS FileInformationClass)
 {
     PFILE_OBJECT FileObject;
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     PIRP Irp;
     PDEVICE_OBJECT DeviceObject;
     PIO_STACK_LOCATION StackPtr;
     PIRP Irp;
     PDEVICE_OBJECT DeviceObject;
     PIO_STACK_LOCATION StackPtr;
@@ -2278,13 +2249,10 @@ NtSetInformationFile(IN HANDLE FileHandle,
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
-            /* Get the exception code */
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-
-        /* Check if probing failed */
-        if (!NT_SUCCESS(Status)) return Status;
     }
     else
     {
     }
     else
     {
@@ -2417,12 +2385,11 @@ NtSetInformationFile(IN HANDLE FileHandle,
     }
     _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
     {
     }
     _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
     {
-        /* Allocating failed, clean up */
+        /* Allocating failed, clean up and return the exception code */
         IopCleanupAfterException(FileObject, Irp, NULL, Event);
         IopCleanupAfterException(FileObject, Irp, NULL, Event);
-        Status = _SEH2_GetExceptionCode();
+        _SEH2_YIELD(return _SEH2_GetExceptionCode());
     }
     _SEH2_END;
     }
     _SEH2_END;
-    if (!NT_SUCCESS(Status)) return Status;
 
     /* Set the flags */
     Irp->Flags |= (IRP_BUFFERED_IO |
 
     /* Set the flags */
     Irp->Flags |= (IRP_BUFFERED_IO |
@@ -2626,7 +2593,7 @@ NtUnlockFile(IN HANDLE FileHandle,
     BOOLEAN LocalEvent = FALSE;
     KPROCESSOR_MODE PreviousMode = KeGetPreviousMode();
     LARGE_INTEGER CapturedByteOffset, CapturedLength;
     BOOLEAN LocalEvent = FALSE;
     KPROCESSOR_MODE PreviousMode = KeGetPreviousMode();
     LARGE_INTEGER CapturedByteOffset, CapturedLength;
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     OBJECT_HANDLE_INFORMATION HandleInformation;
     IO_STATUS_BLOCK KernelIosb;
     PAGED_CODE();
     OBJECT_HANDLE_INFORMATION HandleInformation;
     IO_STATUS_BLOCK KernelIosb;
     PAGED_CODE();
@@ -2665,19 +2632,12 @@ NtUnlockFile(IN HANDLE FileHandle,
             CapturedLength = ProbeForReadLargeInteger(Length);
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
             CapturedLength = ProbeForReadLargeInteger(Length);
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
-        {
-            /* Get the exception code */
-            Status = _SEH2_GetExceptionCode();
-        }
-        _SEH2_END;
-
-        /* Check if probing failed */
-        if (!NT_SUCCESS(Status))
         {
             /* Dereference the object and return exception code */
             ObDereferenceObject(FileObject);
         {
             /* Dereference the object and return exception code */
             ObDereferenceObject(FileObject);
-            return Status;
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         }
+        _SEH2_END;
     }
     else
     {
     }
     else
     {
@@ -2747,15 +2707,14 @@ NtUnlockFile(IN HANDLE FileHandle,
     }
     _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
     {
     }
     _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
     {
-        /* Allocating failed, clean up */
+        /* Allocating failed, clean up and return the exception code */
         IopCleanupAfterException(FileObject, Irp, NULL, Event);
         if (LocalLength) ExFreePool(LocalLength);
 
         IopCleanupAfterException(FileObject, Irp, NULL, Event);
         if (LocalLength) ExFreePool(LocalLength);
 
-        /* Get exception status */
-        Status = _SEH2_GetExceptionCode();
+        /* Return the exception code */
+        _SEH2_YIELD(return _SEH2_GetExceptionCode());
     }
     _SEH2_END;
     }
     _SEH2_END;
-    if (!NT_SUCCESS(Status)) return Status;
 
     /* Set Parameters */
     StackPtr->Parameters.LockControl.ByteOffset = CapturedByteOffset;
 
     /* Set Parameters */
     StackPtr->Parameters.LockControl.ByteOffset = CapturedByteOffset;
@@ -2801,7 +2760,7 @@ NtWriteFile(IN HANDLE FileHandle,
             IN PLARGE_INTEGER ByteOffset OPTIONAL,
             IN PULONG Key OPTIONAL)
 {
             IN PLARGE_INTEGER ByteOffset OPTIONAL,
             IN PULONG Key OPTIONAL)
 {
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     PFILE_OBJECT FileObject;
     PIRP Irp;
     PDEVICE_OBJECT DeviceObject;
     PFILE_OBJECT FileObject;
     PIRP Irp;
     PDEVICE_OBJECT DeviceObject;
@@ -2827,7 +2786,7 @@ NtWriteFile(IN HANDLE FileHandle,
     if (!NT_SUCCESS(Status)) return Status;
 
     /* Validate User-Mode Buffers */
     if (!NT_SUCCESS(Status)) return Status;
 
     /* Validate User-Mode Buffers */
-    if(PreviousMode != KernelMode)
+    if (PreviousMode != KernelMode)
     {
         _SEH2_TRY
         {
     {
         _SEH2_TRY
         {
@@ -2864,13 +2823,10 @@ NtWriteFile(IN HANDLE FileHandle,
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
-            /* Get the exception code */
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-
-        /* Check for probe failure */
-        if (!NT_SUCCESS(Status)) return Status;
     }
     else
     {
     }
     else
     {
@@ -2990,10 +2946,9 @@ NtWriteFile(IN HANDLE FileHandle,
             }
             _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
             {
             }
             _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
             {
-                /* Allocating failed, clean up */
+                /* Allocating failed, clean up and return the exception code */
                 IopCleanupAfterException(FileObject, Irp, EventObject, NULL);
                 IopCleanupAfterException(FileObject, Irp, EventObject, NULL);
-                Status = _SEH2_GetExceptionCode();
-                _SEH2_YIELD(return Status);
+                _SEH2_YIELD(return _SEH2_GetExceptionCode());
             }
             _SEH2_END;
 
             }
             _SEH2_END;
 
@@ -3019,10 +2974,9 @@ NtWriteFile(IN HANDLE FileHandle,
             }
             _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
             {
             }
             _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
             {
-                /* Allocating failed, clean up */
+                /* Allocating failed, clean up and return the exception code */
                 IopCleanupAfterException(FileObject, Irp, EventObject, NULL);
                 IopCleanupAfterException(FileObject, Irp, EventObject, NULL);
-                Status = _SEH2_GetExceptionCode();
-                _SEH2_YIELD(return Status);
+                _SEH2_YIELD(return _SEH2_GetExceptionCode());
             }
             _SEH2_END;
         }
             }
             _SEH2_END;
         }
@@ -3088,7 +3042,7 @@ NtQueryVolumeInformationFile(IN HANDLE FileHandle,
     PKEVENT Event = NULL;
     BOOLEAN LocalEvent = FALSE;
     KPROCESSOR_MODE PreviousMode = KeGetPreviousMode();
     PKEVENT Event = NULL;
     BOOLEAN LocalEvent = FALSE;
     KPROCESSOR_MODE PreviousMode = KeGetPreviousMode();
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     IO_STATUS_BLOCK KernelIosb;
     PAGED_CODE();
     IOTRACE(IO_API_DEBUG, "FileHandle: %p\n", FileHandle);
     IO_STATUS_BLOCK KernelIosb;
     PAGED_CODE();
     IOTRACE(IO_API_DEBUG, "FileHandle: %p\n", FileHandle);
@@ -3122,11 +3076,10 @@ NtQueryVolumeInformationFile(IN HANDLE FileHandle,
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
-            /* Get the exception code */
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-        if (!NT_SUCCESS(Status)) return Status;
     }
 
     /* Get File Object */
     }
 
     /* Get File Object */
@@ -3191,12 +3144,11 @@ NtQueryVolumeInformationFile(IN HANDLE FileHandle,
     }
     _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
     {
     }
     _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
     {
-        /* Allocating failed, clean up */
+        /* Allocating failed, clean up and return the exception code */
         IopCleanupAfterException(FileObject, Irp, NULL, Event);
         IopCleanupAfterException(FileObject, Irp, NULL, Event);
-        Status = _SEH2_GetExceptionCode();
+        _SEH2_YIELD(return _SEH2_GetExceptionCode());
     }
     _SEH2_END;
     }
     _SEH2_END;
-    if (!NT_SUCCESS(Status)) return Status;
 
     /* Set the flags for this buffered + deferred I/O */
     Irp->Flags |= (IRP_BUFFERED_IO |
 
     /* Set the flags for this buffered + deferred I/O */
     Irp->Flags |= (IRP_BUFFERED_IO |
@@ -3251,7 +3203,7 @@ NtSetVolumeInformationFile(IN HANDLE FileHandle,
     PKEVENT Event = NULL;
     BOOLEAN LocalEvent = FALSE;
     KPROCESSOR_MODE PreviousMode = KeGetPreviousMode();
     PKEVENT Event = NULL;
     BOOLEAN LocalEvent = FALSE;
     KPROCESSOR_MODE PreviousMode = KeGetPreviousMode();
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     IO_STATUS_BLOCK KernelIosb;
     PAGED_CODE();
     IOTRACE(IO_API_DEBUG, "FileHandle: %p\n", FileHandle);
     IO_STATUS_BLOCK KernelIosb;
     PAGED_CODE();
     IOTRACE(IO_API_DEBUG, "FileHandle: %p\n", FileHandle);
@@ -3285,11 +3237,10 @@ NtSetVolumeInformationFile(IN HANDLE FileHandle,
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
-            /* Get the exception code */
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-        if (!NT_SUCCESS(Status)) return Status;
     }
 
     /* Get File Object */
     }
 
     /* Get File Object */
@@ -3357,12 +3308,11 @@ NtSetVolumeInformationFile(IN HANDLE FileHandle,
     }
     _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
     {
     }
     _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
     {
-        /* Allocating failed, clean up */
+        /* Allocating failed, clean up and return the exception code */
         IopCleanupAfterException(FileObject, Irp, NULL, Event);
         IopCleanupAfterException(FileObject, Irp, NULL, Event);
-        Status = _SEH2_GetExceptionCode();
+        _SEH2_YIELD(return _SEH2_GetExceptionCode());
     }
     _SEH2_END;
     }
     _SEH2_END;
-    if (!NT_SUCCESS(Status)) return Status;
 
     /* Set the flags for this buffered + deferred I/O */
     Irp->Flags |= (IRP_BUFFERED_IO | IRP_DEALLOCATE_BUFFER);
 
     /* Set the flags for this buffered + deferred I/O */
     Irp->Flags |= (IRP_BUFFERED_IO | IRP_DEALLOCATE_BUFFER);
index e73d502..1e81e20 100644 (file)
@@ -712,12 +712,11 @@ IoBuildAsynchronousFsdRequest(IN ULONG MajorFunction,
                                /* Free the IRP and its MDL */
                                IoFreeMdl(Irp->MdlAddress);
                                IoFreeIrp(Irp);
                                /* Free the IRP and its MDL */
                                IoFreeMdl(Irp->MdlAddress);
                                IoFreeIrp(Irp);
-                               Irp = NULL;
+
+                /* Fail */
+                               _SEH2_YIELD(return NULL);
                        }
                        _SEH2_END;
                        }
                        _SEH2_END;
-               
-            /* This is how we know if we failed during the probe */
-            if (!Irp) return NULL;
         }
         else
         {
         }
         else
         {
@@ -908,12 +907,11 @@ IoBuildDeviceIoControlRequest(IN ULONG IoControlCode,
                     /* Free the input buffer and IRP */
                     if (InputBuffer) ExFreePool(Irp->AssociatedIrp.SystemBuffer);
                     IoFreeIrp(Irp);
                     /* Free the input buffer and IRP */
                     if (InputBuffer) ExFreePool(Irp->AssociatedIrp.SystemBuffer);
                     IoFreeIrp(Irp);
-                    Irp = NULL;
+
+                    /* Fail */
+                    _SEH2_YIELD(return NULL);
                 }
                 _SEH2_END;
                 }
                 _SEH2_END;
-
-                /* This is how we know if probing failed */
-                if (!Irp) return NULL;
             }
             break;
 
             }
             break;
 
index 948da46..44f537f 100644 (file)
@@ -197,14 +197,11 @@ IopCaptureUnicodeString(PUNICODE_STRING DstName, PUNICODE_STRING SrcName)
     }
     _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
     {
     }
     _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
     {
+        if (Name.Buffer) ExFreePool(Name.Buffer);
         Status = _SEH2_GetExceptionCode();
     }
     _SEH2_END;
     
         Status = _SEH2_GetExceptionCode();
     }
     _SEH2_END;
     
-    if (!NT_SUCCESS(Status) && Name.Buffer)
-    {   
-       ExFreePool(Name.Buffer);
-    }
     return Status;
 }
 
     return Status;
 }
 
@@ -212,7 +209,7 @@ static NTSTATUS
 IopGetDeviceProperty(PPLUGPLAY_CONTROL_PROPERTY_DATA PropertyData)
 {
     PDEVICE_OBJECT DeviceObject = NULL;
 IopGetDeviceProperty(PPLUGPLAY_CONTROL_PROPERTY_DATA PropertyData)
 {
     PDEVICE_OBJECT DeviceObject = NULL;
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     UNICODE_STRING DeviceInstance;
     ULONG BufferSize;
     ULONG Property = 0;
     UNICODE_STRING DeviceInstance;
     ULONG BufferSize;
     ULONG Property = 0;
@@ -237,16 +234,11 @@ IopGetDeviceProperty(PPLUGPLAY_CONTROL_PROPERTY_DATA PropertyData)
     }
     _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
     {
     }
     _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
     {
-        Status = _SEH2_GetExceptionCode();
+        ExFreePool(DeviceInstance.Buffer);
+        _SEH2_YIELD(return _SEH2_GetExceptionCode());
     }
     _SEH2_END;
     
     }
     _SEH2_END;
     
-    if (!NT_SUCCESS(Status))
-    {
-       ExFreePool(DeviceInstance.Buffer);
-       return Status;
-    }
-
     /* Get the device object */
     DeviceObject = IopGetDeviceObjectFromDeviceInstance(&DeviceInstance);
     ExFreePool(DeviceInstance.Buffer);
     /* Get the device object */
     DeviceObject = IopGetDeviceObjectFromDeviceInstance(&DeviceInstance);
     ExFreePool(DeviceInstance.Buffer);
@@ -318,16 +310,11 @@ IopGetRelatedDevice(PPLUGPLAY_CONTROL_RELATED_DEVICE_DATA RelatedDeviceData)
                      sizeof(WCHAR));
     }
     _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
                      sizeof(WCHAR));
     }
     _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
-    {
-        Status = _SEH2_GetExceptionCode();
-    }
-    _SEH2_END;
-
-    if (!NT_SUCCESS(Status))
     {
         ExFreePool(TargetDeviceInstance.Buffer);
     {
         ExFreePool(TargetDeviceInstance.Buffer);
-       return Status;
+        _SEH2_YIELD(return _SEH2_GetExceptionCode());
     }
     }
+    _SEH2_END;
 
     RtlInitUnicodeString(&RootDeviceName,
                          L"HTREE\\ROOT\\0");
 
     RtlInitUnicodeString(&RootDeviceName,
                          L"HTREE\\ROOT\\0");
@@ -426,7 +413,7 @@ IopDeviceStatus(PPLUGPLAY_CONTROL_STATUS_DATA StatusData)
     ULONG DeviceStatus = 0;
     ULONG DeviceProblem = 0;
     UNICODE_STRING DeviceInstance;
     ULONG DeviceStatus = 0;
     ULONG DeviceProblem = 0;
     UNICODE_STRING DeviceInstance;
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
 
     DPRINT("IopDeviceStatus() called\n");
 
 
     DPRINT("IopDeviceStatus() called\n");
 
@@ -446,17 +433,11 @@ IopDeviceStatus(PPLUGPLAY_CONTROL_STATUS_DATA StatusData)
     }
     _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
     {
     }
     _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
     {
-        Status = _SEH2_GetExceptionCode();
+        if (DeviceInstance.Buffer) ExFreePool(DeviceInstance.Buffer);
+        _SEH2_YIELD(return _SEH2_GetExceptionCode());
     }
     _SEH2_END;
 
     }
     _SEH2_END;
 
-    if (!NT_SUCCESS(Status))
-    {
-        if (DeviceInstance.Buffer)
-            ExFreePool(DeviceInstance.Buffer);
-        return Status;
-    }
-
     /* Get the device object */
     DeviceObject = IopGetDeviceObjectFromDeviceInstance(&DeviceInstance);
     ExFreePool(DeviceInstance.Buffer);
     /* Get the device object */
     DeviceObject = IopGetDeviceObjectFromDeviceInstance(&DeviceInstance);
     ExFreePool(DeviceInstance.Buffer);
@@ -766,8 +747,6 @@ NtPlugPlayControl(IN PLUGPLAY_CONTROL_CLASS PlugPlayControlClass,
                   IN OUT PVOID Buffer,
                   IN ULONG BufferLength)
 {
                   IN OUT PVOID Buffer,
                   IN ULONG BufferLength)
 {
-    NTSTATUS Status = STATUS_SUCCESS;
-
     DPRINT("NtPlugPlayControl(%lu %p %lu) called\n",
            PlugPlayControlClass, Buffer, BufferLength);
 
     DPRINT("NtPlugPlayControl(%lu %p %lu) called\n",
            PlugPlayControlClass, Buffer, BufferLength);
 
@@ -795,15 +774,10 @@ NtPlugPlayControl(IN PLUGPLAY_CONTROL_CLASS PlugPlayControlClass,
     }
     _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
     {
     }
     _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
     {
-        Status = _SEH2_GetExceptionCode();
+        _SEH2_YIELD(return _SEH2_GetExceptionCode());
     }
     _SEH2_END;
 
     }
     _SEH2_END;
 
-    if (!NT_SUCCESS(Status))
-    {
-        return Status;
-    }
-
     switch (PlugPlayControlClass)
     {
         case PlugPlayControlUserResponse:
     switch (PlugPlayControlClass)
     {
         case PlugPlayControlUserResponse:
index 4cd1b45..cf48553 100644 (file)
@@ -362,7 +362,7 @@ NtOpenDirectoryObject(OUT PHANDLE DirectoryHandle,
 {
     HANDLE Directory;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
 {
     HANDLE Directory;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     PAGED_CODE();
 
     /* Check if we need to do any probing */
     PAGED_CODE();
 
     /* Check if we need to do any probing */
@@ -375,11 +375,10 @@ NtOpenDirectoryObject(OUT PHANDLE DirectoryHandle,
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
-            /* Get the error code */
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-        if(!NT_SUCCESS(Status)) return Status;
     }
 
     /* Open the directory object */
     }
 
     /* Open the directory object */
@@ -465,7 +464,7 @@ NtQueryDirectoryObject(IN HANDLE DirectoryHandle,
     POBJECT_DIRECTORY Directory;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
     ULONG SkipEntries = 0;
     POBJECT_DIRECTORY Directory;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
     ULONG SkipEntries = 0;
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     PVOID LocalBuffer;
     POBJECT_DIRECTORY_INFORMATION DirectoryInfo;
     ULONG Length, TotalLength;
     PVOID LocalBuffer;
     POBJECT_DIRECTORY_INFORMATION DirectoryInfo;
     ULONG Length, TotalLength;
@@ -499,11 +498,10 @@ NtQueryDirectoryObject(IN HANDLE DirectoryHandle,
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
-            /* Get the exception code */
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-        if(!NT_SUCCESS(Status)) return Status;
     }
     else if (!RestartScan)
     {
     }
     else if (!RestartScan)
     {
@@ -692,6 +690,7 @@ Quickie:
     }
     _SEH2_EXCEPT(ExSystemExceptionFilter())
     {
     }
     _SEH2_EXCEPT(ExSystemExceptionFilter())
     {
+        /* Get the exception code */
         Status = _SEH2_GetExceptionCode();
     }
     _SEH2_END;
         Status = _SEH2_GetExceptionCode();
     }
     _SEH2_END;
@@ -736,11 +735,11 @@ NtCreateDirectoryObject(OUT PHANDLE DirectoryHandle,
     POBJECT_DIRECTORY Directory;
     HANDLE NewHandle;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
     POBJECT_DIRECTORY Directory;
     HANDLE NewHandle;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     PAGED_CODE();
 
     /* Check if we need to do any probing */
     PAGED_CODE();
 
     /* Check if we need to do any probing */
-    if(PreviousMode != KernelMode)
+    if (PreviousMode != KernelMode)
     {
         _SEH2_TRY
         {
     {
         _SEH2_TRY
         {
@@ -749,11 +748,10 @@ NtCreateDirectoryObject(OUT PHANDLE DirectoryHandle,
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
-            /* Get the error code */
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-        if(!NT_SUCCESS(Status)) return Status;
     }
 
     /* Create the object */
     }
 
     /* Create the object */
index 6cd101e..0a741fc 100644 (file)
@@ -3221,7 +3221,7 @@ NtDuplicateObject(IN HANDLE SourceProcessHandle,
     PEPROCESS SourceProcess, TargetProcess, Target;
     HANDLE hTarget;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
     PEPROCESS SourceProcess, TargetProcess, Target;
     HANDLE hTarget;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     OBTRACE(OB_HANDLE_DEBUG,
             "%s - Duplicating handle: %lx for %lx into %lx.\n",
             __FUNCTION__,
     OBTRACE(OB_HANDLE_DEBUG,
             "%s - Duplicating handle: %lx for %lx into %lx.\n",
             __FUNCTION__,
@@ -3241,11 +3241,10 @@ NtDuplicateObject(IN HANDLE SourceProcessHandle,
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
-            /* Get the exception status */
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-        if (!NT_SUCCESS(Status)) return Status;
     }
 
     /* Now reference the input handle */
     }
 
     /* Now reference the input handle */
index 9baa7b1..181b73e 100644 (file)
@@ -466,8 +466,7 @@ ObpCaptureObjectCreateInformation(IN POBJECT_ATTRIBUTES ObjectAttributes,
                 (ObjectAttributes->Attributes & ~OBJ_VALID_ATTRIBUTES))
             {
                 /* Invalid combination, fail */
                 (ObjectAttributes->Attributes & ~OBJ_VALID_ATTRIBUTES))
             {
                 /* Invalid combination, fail */
-                Status = STATUS_INVALID_PARAMETER;
-                _SEH2_LEAVE;
+                _SEH2_YIELD(return STATUS_INVALID_PARAMETER);
             }
 
             /* Set some Create Info */
             }
 
             /* Set some Create Info */
@@ -487,11 +486,11 @@ ObpCaptureObjectCreateInformation(IN POBJECT_ATTRIBUTES ObjectAttributes,
                                                      TRUE,
                                                      &ObjectCreateInfo->
                                                      SecurityDescriptor);
                                                      TRUE,
                                                      &ObjectCreateInfo->
                                                      SecurityDescriptor);
-                if(!NT_SUCCESS(Status))
+                if (!NT_SUCCESS(Status))
                 {
                     /* Capture failed, quit */
                     ObjectCreateInfo->SecurityDescriptor = NULL;
                 {
                     /* Capture failed, quit */
                     ObjectCreateInfo->SecurityDescriptor = NULL;
-                    _SEH2_LEAVE;
+                    _SEH2_YIELD(return Status);
                 }
 
                 /* Save the probe mode and security descriptor size */
                 }
 
                 /* Save the probe mode and security descriptor size */
@@ -525,38 +524,36 @@ ObpCaptureObjectCreateInformation(IN POBJECT_ATTRIBUTES ObjectAttributes,
     }
     _SEH2_EXCEPT(ExSystemExceptionFilter())
     {
     }
     _SEH2_EXCEPT(ExSystemExceptionFilter())
     {
-        /* Get the exception */
-        Status = _SEH2_GetExceptionCode();
+        /* Cleanup and return the exception code */
+        ObpReleaseObjectCreateInformation(ObjectCreateInfo);
+        _SEH2_YIELD(return _SEH2_GetExceptionCode());
     }
     _SEH2_END;
 
     }
     _SEH2_END;
 
-    if (NT_SUCCESS(Status))
+    /* Now check if the Object Attributes had an Object Name */
+    if (LocalObjectName)
     {
     {
-        /* Now check if the Object Attributes had an Object Name */
-        if (LocalObjectName)
-        {
-            Status = ObpCaptureObjectName(ObjectName,
-                                          LocalObjectName,
-                                          AccessMode,
-                                          AllocateFromLookaside);
-        }
-        else
-        {
-            /* Clear the string */
-            RtlInitEmptyUnicodeString(ObjectName, NULL, 0);
+        Status = ObpCaptureObjectName(ObjectName,
+                                      LocalObjectName,
+                                      AccessMode,
+                                      AllocateFromLookaside);
+    }
+    else
+    {
+        /* Clear the string */
+        RtlInitEmptyUnicodeString(ObjectName, NULL, 0);
 
 
-            /* He can't have specified a Root Directory */
-            if (ObjectCreateInfo->RootDirectory)
-            {
-                Status = STATUS_OBJECT_NAME_INVALID;
-            }
+        /* He can't have specified a Root Directory */
+        if (ObjectCreateInfo->RootDirectory)
+        {
+            Status = STATUS_OBJECT_NAME_INVALID;
         }
     }
 
     /* Cleanup if we failed */
     if (!NT_SUCCESS(Status))
     {
         }
     }
 
     /* Cleanup if we failed */
     if (!NT_SUCCESS(Status))
     {
-       ObpReleaseObjectCreateInformation(ObjectCreateInfo);
+        ObpReleaseObjectCreateInformation(ObjectCreateInfo);
     }
 
     /* Return status to caller */
     }
 
     /* Return status to caller */
@@ -1411,7 +1408,7 @@ NtQueryObject(IN HANDLE ObjectHandle,
     POBJECT_BASIC_INFORMATION BasicInfo;
     ULONG InfoLength;
     PVOID Object = NULL;
     POBJECT_BASIC_INFORMATION BasicInfo;
     ULONG InfoLength;
     PVOID Object = NULL;
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
     PAGED_CODE();
 
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
     PAGED_CODE();
 
@@ -1429,13 +1426,10 @@ NtQueryObject(IN HANDLE ObjectHandle,
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
-            /* Get the exception code */
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-
-        /* Fail if we raised an exception */
-        if (!NT_SUCCESS(Status)) return Status;
     }
 
     /*
     }
 
     /*
@@ -1632,7 +1626,7 @@ NtSetInformationObject(IN HANDLE ObjectHandle,
                        IN PVOID ObjectInformation,
                        IN ULONG Length)
 {
                        IN PVOID ObjectInformation,
                        IN ULONG Length)
 {
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     OBP_SET_HANDLE_ATTRIBUTES_CONTEXT Context;
     PVOID ObjectTable;
     KAPC_STATE ApcState;
     OBP_SET_HANDLE_ATTRIBUTES_CONTEXT Context;
     PVOID ObjectTable;
     KAPC_STATE ApcState;
@@ -1653,13 +1647,16 @@ NtSetInformationObject(IN HANDLE ObjectHandle,
         return STATUS_INFO_LENGTH_MISMATCH;
     }
 
         return STATUS_INFO_LENGTH_MISMATCH;
     }
 
-    /* Save the previous mode and actual information */
+    /* Save the previous mode */
     Context.PreviousMode = ExGetPreviousMode();
 
     Context.PreviousMode = ExGetPreviousMode();
 
+    /* Check if we were called from user mode */
     if (Context.PreviousMode != KernelMode)
     {
     if (Context.PreviousMode != KernelMode)
     {
+        /* Enter SEH */
         _SEH2_TRY
         {
         _SEH2_TRY
         {
+            /* Probe and capture the attribute buffer */
             ProbeForRead(ObjectInformation,
                          sizeof(OBJECT_HANDLE_ATTRIBUTE_INFORMATION),
                          sizeof(BOOLEAN));
             ProbeForRead(ObjectInformation,
                          sizeof(OBJECT_HANDLE_ATTRIBUTE_INFORMATION),
                          sizeof(BOOLEAN));
@@ -1668,15 +1665,17 @@ NtSetInformationObject(IN HANDLE ObjectHandle,
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-
-        if (!NT_SUCCESS(Status)) return Status;
     }
     else
     }
     else
+    {
+        /* Just copy the buffer directly */
         Context.Information = *(POBJECT_HANDLE_ATTRIBUTE_INFORMATION)
                                 ObjectInformation;
         Context.Information = *(POBJECT_HANDLE_ATTRIBUTE_INFORMATION)
                                 ObjectInformation;
+    }
 
     /* Check if this is a kernel handle */
     if (ObIsKernelHandle(ObjectHandle, Context.PreviousMode))
 
     /* Check if this is a kernel handle */
     if (ObIsKernelHandle(ObjectHandle, Context.PreviousMode))
@@ -1708,6 +1707,11 @@ NtSetInformationObject(IN HANDLE ObjectHandle,
         /* Some failure */
         Status = STATUS_ACCESS_DENIED;
     }
         /* Some failure */
         Status = STATUS_ACCESS_DENIED;
     }
+    else
+    {
+        /* We are done */
+        Status = STATUS_SUCCESS;
+    }
 
     /* De-attach if we were attached, and return status */
     if (AttachedToProcess) KeUnstackDetachProcess(&ApcState);
 
     /* De-attach if we were attached, and return status */
     if (AttachedToProcess) KeUnstackDetachProcess(&ApcState);
index 8705ec4..c3b0c01 100644 (file)
@@ -238,11 +238,11 @@ NtCreateSymbolicLinkObject(OUT PHANDLE LinkHandle,
     POBJECT_SYMBOLIC_LINK SymbolicLink;
     UNICODE_STRING CapturedLinkTarget;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
     POBJECT_SYMBOLIC_LINK SymbolicLink;
     UNICODE_STRING CapturedLinkTarget;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     PAGED_CODE();
 
     /* Check if we need to probe parameters */
     PAGED_CODE();
 
     /* Check if we need to probe parameters */
-    if(PreviousMode != KernelMode)
+    if (PreviousMode != KernelMode)
     {
         _SEH2_TRY
         {
     {
         _SEH2_TRY
         {
@@ -257,13 +257,10 @@ NtCreateSymbolicLinkObject(OUT PHANDLE LinkHandle,
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
-            /* Exception, get the error code */
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-
-        /* Probing failed, return the error code */
-        if(!NT_SUCCESS(Status)) return Status;
     }
     else
     {
     }
     else
     {
@@ -380,11 +377,11 @@ NtOpenSymbolicLinkObject(OUT PHANDLE LinkHandle,
 {
     HANDLE hLink;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
 {
     HANDLE hLink;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     PAGED_CODE();
 
     /* Check if we need to probe parameters */
     PAGED_CODE();
 
     /* Check if we need to probe parameters */
-    if(PreviousMode != KernelMode)
+    if (PreviousMode != KernelMode)
     {
         _SEH2_TRY
         {
     {
         _SEH2_TRY
         {
@@ -393,13 +390,10 @@ NtOpenSymbolicLinkObject(OUT PHANDLE LinkHandle,
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
-            /* Exception, get the error code */
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-
-        /* Probing failed, return the error code */
-        if(!NT_SUCCESS(Status)) return Status;
     }
 
     /* Open the object */
     }
 
     /* Open the object */
@@ -458,11 +452,11 @@ NtQuerySymbolicLinkObject(IN HANDLE LinkHandle,
     UNICODE_STRING SafeLinkTarget = { 0, 0, NULL };
     POBJECT_SYMBOLIC_LINK SymlinkObject;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
     UNICODE_STRING SafeLinkTarget = { 0, 0, NULL };
     POBJECT_SYMBOLIC_LINK SymlinkObject;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     ULONG LengthUsed;
     PAGED_CODE();
 
     ULONG LengthUsed;
     PAGED_CODE();
 
-    if(PreviousMode != KernelMode)
+    if (PreviousMode != KernelMode)
     {
         _SEH2_TRY
         {
     {
         _SEH2_TRY
         {
@@ -476,17 +470,14 @@ NtQuerySymbolicLinkObject(IN HANDLE LinkHandle,
                           sizeof(WCHAR));
 
             /* Probe the return length */
                           sizeof(WCHAR));
 
             /* Probe the return length */
-            if(ResultLength) ProbeForWriteUlong(ResultLength);
+            if (ResultLength) ProbeForWriteUlong(ResultLength);
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
-            /* Probe failure: get exception code */
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-
-        /* Probe failed, return status */
-        if(!NT_SUCCESS(Status)) return Status;
     }
     else
     {
     }
     else
     {
index 3c90e1a..2571fc6 100644 (file)
@@ -804,7 +804,7 @@ NtQuerySecurityObject(IN HANDLE Handle,
     POBJECT_HEADER Header;
     POBJECT_TYPE Type;
     ACCESS_MASK DesiredAccess;
     POBJECT_HEADER Header;
     POBJECT_TYPE Type;
     ACCESS_MASK DesiredAccess;
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     PAGED_CODE();
 
     /* Check if we came from user mode */
     PAGED_CODE();
 
     /* Check if we came from user mode */
@@ -819,13 +819,10 @@ NtQuerySecurityObject(IN HANDLE Handle,
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
-            /* Get the exception code */
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-
-        /* Fail if we got an access violation */
-        if (!NT_SUCCESS(Status)) return Status;
     }
 
     /* Get the required access rights for the operation */
     }
 
     /* Get the required access rights for the operation */
index 295e2e4..cf68a5f 100644 (file)
@@ -62,7 +62,7 @@ NtWaitForMultipleObjects(IN ULONG ObjectCount,
     PHANDLE_TABLE HandleTable;
     ACCESS_MASK GrantedAccess;
     PVOID DefaultObject;
     PHANDLE_TABLE HandleTable;
     ACCESS_MASK GrantedAccess;
     PVOID DefaultObject;
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     PAGED_CODE();
 
     /* Enter a critical region since we'll play with handles */
     PAGED_CODE();
 
     /* Enter a critical region since we'll play with handles */
@@ -89,7 +89,7 @@ NtWaitForMultipleObjects(IN ULONG ObjectCount,
     _SEH2_TRY
     {
         /* Check if the call came from user mode */
     _SEH2_TRY
     {
         /* Check if the call came from user mode */
-        if(PreviousMode != KernelMode)
+        if (PreviousMode != KernelMode)
         {
             /* Check if we have a timeout */
             if (TimeOut)
         {
             /* Check if we have a timeout */
             if (TimeOut)
@@ -116,14 +116,11 @@ NtWaitForMultipleObjects(IN ULONG ObjectCount,
     }
     _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
     {
     }
     _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
     {
-        /* Get exception code */
-        Status = _SEH2_GetExceptionCode();
+        /* Return the exception code */
+        _SEH2_YIELD(return _SEH2_GetExceptionCode());
     }
     _SEH2_END;
 
     }
     _SEH2_END;
 
-    /* Fail if we raised an exception */
-    if (!NT_SUCCESS(Status)) goto Quickie;
-
     /* Check if we can use the internal Wait Array */
     if (ObjectCount > THREAD_WAIT_OBJECTS)
     {
     /* Check if we can use the internal Wait Array */
     if (ObjectCount > THREAD_WAIT_OBJECTS)
     {
@@ -359,7 +356,7 @@ NtWaitForSingleObject(IN HANDLE ObjectHandle,
     PVOID Object, WaitableObject;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
     LARGE_INTEGER SafeTimeOut;
     PVOID Object, WaitableObject;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
     LARGE_INTEGER SafeTimeOut;
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
 
     /* Check if we came with a timeout from user mode */
     if ((TimeOut) && (PreviousMode != KernelMode))
 
     /* Check if we came with a timeout from user mode */
     if ((TimeOut) && (PreviousMode != KernelMode))
@@ -373,11 +370,10 @@ NtWaitForSingleObject(IN HANDLE ObjectHandle,
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
-            /* Get the exception code */
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-        if (!NT_SUCCESS(Status)) return Status;
     }
 
     /* Get the Object */
     }
 
     /* Get the Object */
@@ -460,7 +456,7 @@ NtSignalAndWaitForSingleObject(IN HANDLE ObjectHandleToSignal,
     PVOID SignalObj, WaitObj, WaitableObject;
     LARGE_INTEGER SafeTimeOut;
     OBJECT_HANDLE_INFORMATION HandleInfo;
     PVOID SignalObj, WaitObj, WaitableObject;
     LARGE_INTEGER SafeTimeOut;
     OBJECT_HANDLE_INFORMATION HandleInfo;
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
 
     /* Check if we came with a timeout from user mode */
     if ((TimeOut) && (PreviousMode != KernelMode))
 
     /* Check if we came with a timeout from user mode */
     if ((TimeOut) && (PreviousMode != KernelMode))
@@ -474,11 +470,10 @@ NtSignalAndWaitForSingleObject(IN HANDLE ObjectHandleToSignal,
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
-            /* Get the exception code */
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-        if (!NT_SUCCESS(Status)) return Status;
     }
 
     /* Start by getting the signal object*/
     }
 
     /* Start by getting the signal object*/
index baaf45c..e075652 100644 (file)
@@ -103,7 +103,7 @@ PsGetContextThread(IN PETHREAD Thread,
 {
     GET_SET_CTX_CONTEXT GetSetContext;
     ULONG Size = 0, Flags = 0;
 {
     GET_SET_CTX_CONTEXT GetSetContext;
     ULONG Size = 0, Flags = 0;
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
 
     /* Enter SEH */
     _SEH2_TRY
 
     /* Enter SEH */
     _SEH2_TRY
@@ -133,14 +133,11 @@ PsGetContextThread(IN PETHREAD Thread,
     }
     _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
     {
     }
     _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
     {
-        /* Get exception code */
-        Status = _SEH2_GetExceptionCode();
+        /* Return the exception code */
+        _SEH2_YIELD(return _SEH2_GetExceptionCode());
     }
     _SEH2_END;
 
     }
     _SEH2_END;
 
-    /* Check if we got success */
-    if (!NT_SUCCESS(Status)) return Status;
-
     /* Initialize the wait event */
     KeInitializeEvent(&GetSetContext.Event, NotificationEvent, FALSE);
 
     /* Initialize the wait event */
     KeInitializeEvent(&GetSetContext.Event, NotificationEvent, FALSE);
 
@@ -167,6 +164,9 @@ PsGetContextThread(IN PETHREAD Thread,
 
         /* Leave the guarded region */
         KeLeaveGuardedRegion();
 
         /* Leave the guarded region */
         KeLeaveGuardedRegion();
+
+        /* We are done */
+        Status = STATUS_SUCCESS;
     }
     else
     {
     }
     else
     {
@@ -204,6 +204,7 @@ PsGetContextThread(IN PETHREAD Thread,
     }
     _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
     {
     }
     _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
     {
+        /* Get the exception code */
         Status = _SEH2_GetExceptionCode();
     }
     _SEH2_END;
         Status = _SEH2_GetExceptionCode();
     }
     _SEH2_END;
@@ -223,7 +224,7 @@ PsSetContextThread(IN PETHREAD Thread,
 {
     GET_SET_CTX_CONTEXT GetSetContext;
     ULONG Size = 0, Flags = 0;
 {
     GET_SET_CTX_CONTEXT GetSetContext;
     ULONG Size = 0, Flags = 0;
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
 
     /* Enter SEH */
     _SEH2_TRY
 
     /* Enter SEH */
     _SEH2_TRY
@@ -256,14 +257,11 @@ PsSetContextThread(IN PETHREAD Thread,
     }
     _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
     {
     }
     _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
     {
-        /* Get exception code */
-        Status = _SEH2_GetExceptionCode();
+        /* Return the exception code */
+        _SEH2_YIELD(return _SEH2_GetExceptionCode());
     }
     _SEH2_END;
 
     }
     _SEH2_END;
 
-    /* Check if we got success */
-    if (!NT_SUCCESS(Status)) return Status;
-
     /* Initialize the wait event */
     KeInitializeEvent(&GetSetContext.Event, NotificationEvent, FALSE);
 
     /* Initialize the wait event */
     KeInitializeEvent(&GetSetContext.Event, NotificationEvent, FALSE);
 
@@ -290,6 +288,9 @@ PsSetContextThread(IN PETHREAD Thread,
 
         /* Leave the guarded region */
         KeLeaveGuardedRegion();
 
         /* Leave the guarded region */
         KeLeaveGuardedRegion();
+
+        /* We are done */
+        Status = STATUS_SUCCESS;
     }
     else
     {
     }
     else
     {
index 08a7c76..52f4f27 100644 (file)
@@ -226,7 +226,7 @@ NtCreateJobObject (
     PEJOB Job;
     KPROCESSOR_MODE PreviousMode;
     PEPROCESS CurrentProcess;
     PEJOB Job;
     KPROCESSOR_MODE PreviousMode;
     PEPROCESS CurrentProcess;
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
 
     PAGED_CODE();
 
 
     PAGED_CODE();
 
@@ -234,7 +234,7 @@ NtCreateJobObject (
     CurrentProcess = PsGetCurrentProcess();
 
     /* check for valid buffers */
     CurrentProcess = PsGetCurrentProcess();
 
     /* check for valid buffers */
-    if(PreviousMode != KernelMode)
+    if (PreviousMode != KernelMode)
     {
         _SEH2_TRY
         {
     {
         _SEH2_TRY
         {
@@ -242,14 +242,9 @@ NtCreateJobObject (
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
-            Status = _SEH2_GetExceptionCode();
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-
-        if(!NT_SUCCESS(Status))
-        {
-            return Status;
-        }
     }
 
     Status = ObCreateObject(PreviousMode,
     }
 
     Status = ObCreateObject(PreviousMode,
@@ -397,14 +392,14 @@ NtOpenJobObject (
 {
     KPROCESSOR_MODE PreviousMode;
     HANDLE hJob;
 {
     KPROCESSOR_MODE PreviousMode;
     HANDLE hJob;
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
 
     PAGED_CODE();
 
     PreviousMode = ExGetPreviousMode();
 
     /* check for valid buffers */
 
     PAGED_CODE();
 
     PreviousMode = ExGetPreviousMode();
 
     /* check for valid buffers */
-    if(PreviousMode != KernelMode)
+    if (PreviousMode != KernelMode)
     {
         _SEH2_TRY
         {
     {
         _SEH2_TRY
         {
@@ -412,37 +407,29 @@ NtOpenJobObject (
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
-            Status = _SEH2_GetExceptionCode();
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-
-        if(!NT_SUCCESS(Status))
-        {
-            return Status;
-        }
     }
 
     }
 
+    Status = ObOpenObjectByName(ObjectAttributes,
+        PsJobType,
+        PreviousMode,
+        NULL,
+        DesiredAccess,
+        NULL,
+        &hJob);
     if(NT_SUCCESS(Status))
     {
     if(NT_SUCCESS(Status))
     {
-        Status = ObOpenObjectByName(ObjectAttributes,
-            PsJobType,
-            PreviousMode,
-            NULL,
-            DesiredAccess,
-            NULL,
-            &hJob);
-        if(NT_SUCCESS(Status))
+        _SEH2_TRY
         {
         {
-            _SEH2_TRY
-            {
-                *JobHandle = hJob;
-            }
-            _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
-            {
-                Status = _SEH2_GetExceptionCode();
-            }
-            _SEH2_END;
+            *JobHandle = hJob;
         }
         }
+        _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
+        {
+            Status = _SEH2_GetExceptionCode();
+        }
+        _SEH2_END;
     }
 
     return Status;
     }
 
     return Status;
index bb27453..745389b 100644 (file)
@@ -1247,14 +1247,14 @@ NtCreateProcessEx(OUT PHANDLE ProcessHandle,
                   IN HANDLE ExceptionPort OPTIONAL,
                   IN BOOLEAN InJob)
 {
                   IN HANDLE ExceptionPort OPTIONAL,
                   IN BOOLEAN InJob)
 {
-    KPROCESSOR_MODE PreviousMode  = ExGetPreviousMode();
-    NTSTATUS Status = STATUS_SUCCESS;
+    KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
+    NTSTATUS Status;
     PAGED_CODE();
     PSTRACE(PS_PROCESS_DEBUG,
             "ParentProcess: %p Flags: %lx\n", ParentProcess, Flags);
 
     /* Check if we came from user mode */
     PAGED_CODE();
     PSTRACE(PS_PROCESS_DEBUG,
             "ParentProcess: %p Flags: %lx\n", ParentProcess, Flags);
 
     /* Check if we came from user mode */
-    if(PreviousMode != KernelMode)
+    if (PreviousMode != KernelMode)
     {
         _SEH2_TRY
         {
     {
         _SEH2_TRY
         {
@@ -1263,11 +1263,10 @@ NtCreateProcessEx(OUT PHANDLE ProcessHandle,
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
-            /* Get exception code */
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-        if (!NT_SUCCESS(Status)) return Status;
     }
 
     /* Make sure there's a parent process */
     }
 
     /* Make sure there's a parent process */
@@ -1346,7 +1345,7 @@ NtOpenProcess(OUT PHANDLE ProcessHandle,
     BOOLEAN HasObjectName = FALSE;
     PETHREAD Thread = NULL;
     PEPROCESS Process = NULL;
     BOOLEAN HasObjectName = FALSE;
     PETHREAD Thread = NULL;
     PEPROCESS Process = NULL;
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     ACCESS_STATE AccessState;
     AUX_ACCESS_DATA AuxData;
     PAGED_CODE();
     ACCESS_STATE AccessState;
     AUX_ACCESS_DATA AuxData;
     PAGED_CODE();
@@ -1383,11 +1382,10 @@ NtOpenProcess(OUT PHANDLE ProcessHandle,
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
-            /* Get the exception code */
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-        if (!NT_SUCCESS(Status)) return Status;
     }
     else
     {
     }
     else
     {
index a94cc46..6a340df 100644 (file)
@@ -63,7 +63,7 @@ NtQueryInformationProcess(IN HANDLE ProcessHandle,
 {
     PEPROCESS Process;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
 {
     PEPROCESS Process;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     ULONG Length = 0;
     PPROCESS_BASIC_INFORMATION ProcessBasicInfo =
         (PPROCESS_BASIC_INFORMATION)ProcessInformation;
     ULONG Length = 0;
     PPROCESS_BASIC_INFORMATION ProcessBasicInfo =
         (PPROCESS_BASIC_INFORMATION)ProcessInformation;
@@ -86,18 +86,20 @@ NtQueryInformationProcess(IN HANDLE ProcessHandle,
         /* Prepare to probe parameters */
         _SEH2_TRY
         {
         /* Prepare to probe parameters */
         _SEH2_TRY
         {
+            /* Probe the buffer */
             ProbeForWrite(ProcessInformation,
                           ProcessInformationLength,
                           sizeof(ULONG));
             ProbeForWrite(ProcessInformation,
                           ProcessInformationLength,
                           sizeof(ULONG));
+
+            /* Probe the return length if required */
             if (ReturnLength) ProbeForWriteUlong(ReturnLength);
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
             if (ReturnLength) ProbeForWriteUlong(ReturnLength);
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
-            /* Get the error code */
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-        if(!NT_SUCCESS(Status)) return Status;
     }
 
     if((ProcessInformationClass == ProcessCookie) &&
     }
 
     if((ProcessInformationClass == ProcessCookie) &&
@@ -761,6 +763,9 @@ NtQueryInformationProcess(IN HANDLE ProcessHandle,
                 Length = sizeof(ULONG);
             }
 
                 Length = sizeof(ULONG);
             }
 
+            /* Indicate success */
+            Status = STATUS_SUCCESS;
+
             /* Enter SEH to protect write */
             _SEH2_TRY
             {
             /* Enter SEH to protect write */
             _SEH2_TRY
             {
@@ -882,11 +887,10 @@ NtSetInformationProcess(IN HANDLE ProcessHandle,
             }
             _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
             {
             }
             _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
             {
-                /* Get the exception code */
-                Status = _SEH2_GetExceptionCode();
+                /* Return the exception code */
+                _SEH2_YIELD(return _SEH2_GetExceptionCode());
             }
             _SEH2_END;
             }
             _SEH2_END;
-            if (!NT_SUCCESS(Status)) break;
 
             /* Get the LPC Port */
             Status = ObReferenceObjectByHandle(PortHandle,
 
             /* Get the LPC Port */
             Status = ObReferenceObjectByHandle(PortHandle,
@@ -927,11 +931,10 @@ NtSetInformationProcess(IN HANDLE ProcessHandle,
             }
             _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
             {
             }
             _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
             {
-                /* Get the exception code */
-                Status = _SEH2_GetExceptionCode();
+                /* Return the exception code */
+                _SEH2_YIELD(return _SEH2_GetExceptionCode());
             }
             _SEH2_END;
             }
             _SEH2_END;
-            if (!NT_SUCCESS(Status)) break;
 
             /* Assign the actual token */
             Status = PspSetPrimaryToken(Process, TokenHandle, NULL);
 
             /* Assign the actual token */
             Status = PspSetPrimaryToken(Process, TokenHandle, NULL);
@@ -980,11 +983,10 @@ NtSetInformationProcess(IN HANDLE ProcessHandle,
             }
             _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
             {
             }
             _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
             {
-                /* Get the exception code */
-                Status = _SEH2_GetExceptionCode();
+                /* Return the exception code */
+                _SEH2_YIELD(return _SEH2_GetExceptionCode());
             }
             _SEH2_END;
             }
             _SEH2_END;
-            if (!NT_SUCCESS(Status)) break;
 
             /* Setting the session id requires the SeTcbPrivilege */
             if (!SeSinglePrivilegeCheck(SeTcbPrivilege, PreviousMode))
 
             /* Setting the session id requires the SeTcbPrivilege */
             if (!SeSinglePrivilegeCheck(SeTcbPrivilege, PreviousMode))
@@ -1048,11 +1050,10 @@ NtSetInformationProcess(IN HANDLE ProcessHandle,
             }
             _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
             {
             }
             _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
             {
-                /* Get the exception code */
-                Status = _SEH2_GetExceptionCode();
+                /* Return the exception code */
+                _SEH2_YIELD(return _SEH2_GetExceptionCode());
             }
             _SEH2_END;
             }
             _SEH2_END;
-            if (!NT_SUCCESS(Status)) break;
 
             /* Check for invalid PriorityClass value */
             if (PriorityClass.PriorityClass > PROCESS_PRIORITY_CLASS_ABOVE_NORMAL)
 
             /* Check for invalid PriorityClass value */
             if (PriorityClass.PriorityClass > PROCESS_PRIORITY_CLASS_ABOVE_NORMAL)
@@ -1250,11 +1251,10 @@ NtSetInformationThread(IN HANDLE ThreadHandle,
             }
             _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
             {
             }
             _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
             {
-                /* Get the exception code */
-                Status = _SEH2_GetExceptionCode();
+                /* Return the exception code */
+                _SEH2_YIELD(return _SEH2_GetExceptionCode());
             }
             _SEH2_END;
             }
             _SEH2_END;
-            if (!NT_SUCCESS(Status)) break;
 
             /* Validate it */
             if ((Priority > HIGH_PRIORITY) ||
 
             /* Validate it */
             if ((Priority > HIGH_PRIORITY) ||
@@ -1286,11 +1286,10 @@ NtSetInformationThread(IN HANDLE ThreadHandle,
             }
             _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
             {
             }
             _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
             {
-                /* Get the exception code */
-                Status = _SEH2_GetExceptionCode();
+                /* Return the exception code */
+                _SEH2_YIELD(return _SEH2_GetExceptionCode());
             }
             _SEH2_END;
             }
             _SEH2_END;
-            if (!NT_SUCCESS(Status)) break;
 
             /* Validate it */
             if ((Priority > THREAD_BASE_PRIORITY_MAX) ||
 
             /* Validate it */
             if ((Priority > THREAD_BASE_PRIORITY_MAX) ||
@@ -1332,11 +1331,10 @@ NtSetInformationThread(IN HANDLE ThreadHandle,
             }
             _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
             {
             }
             _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
             {
-                /* Get the exception code */
-                Status = _SEH2_GetExceptionCode();
+                /* Return the exception code */
+                _SEH2_YIELD(return _SEH2_GetExceptionCode());
             }
             _SEH2_END;
             }
             _SEH2_END;
-            if (!NT_SUCCESS(Status)) break;
 
             /* Validate it */
             if (!Affinity)
 
             /* Validate it */
             if (!Affinity)
@@ -1400,11 +1398,10 @@ NtSetInformationThread(IN HANDLE ThreadHandle,
             }
             _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
             {
             }
             _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
             {
-                /* Get the exception code */
-                Status = _SEH2_GetExceptionCode();
+                /* Return the exception code */
+                _SEH2_YIELD(return _SEH2_GetExceptionCode());
             }
             _SEH2_END;
             }
             _SEH2_END;
-            if (!NT_SUCCESS(Status)) break;
 
             /* Assign the actual token */
             Status = PsAssignImpersonationToken(Thread, TokenHandle);
 
             /* Assign the actual token */
             Status = PsAssignImpersonationToken(Thread, TokenHandle);
@@ -1427,11 +1424,10 @@ NtSetInformationThread(IN HANDLE ThreadHandle,
             }
             _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
             {
             }
             _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
             {
-                /* Get the exception code */
-                Status = _SEH2_GetExceptionCode();
+                /* Return the exception code */
+                _SEH2_YIELD(return _SEH2_GetExceptionCode());
             }
             _SEH2_END;
             }
             _SEH2_END;
-            if (!NT_SUCCESS(Status)) break;
 
             /* Set the address */
             Thread->Win32StartAddress = Address;
 
             /* Set the address */
             Thread->Win32StartAddress = Address;
@@ -1454,11 +1450,10 @@ NtSetInformationThread(IN HANDLE ThreadHandle,
             }
             _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
             {
             }
             _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
             {
-                /* Get the exception code */
-                Status = _SEH2_GetExceptionCode();
+                /* Return the exception code */
+                _SEH2_YIELD(return _SEH2_GetExceptionCode());
             }
             _SEH2_END;
             }
             _SEH2_END;
-            if (!NT_SUCCESS(Status)) break;
 
             /* Validate it */
             if (IdealProcessor > MAXIMUM_PROCESSORS)
 
             /* Validate it */
             if (IdealProcessor > MAXIMUM_PROCESSORS)
@@ -1502,11 +1497,10 @@ NtSetInformationThread(IN HANDLE ThreadHandle,
             }
             _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
             {
             }
             _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
             {
-                /* Get the exception code */
-                Status = _SEH2_GetExceptionCode();
+                /* Return the exception code */
+                _SEH2_YIELD(return _SEH2_GetExceptionCode());
             }
             _SEH2_END;
             }
             _SEH2_END;
-            if (!NT_SUCCESS(Status)) break;
 
             /* Call the kernel */
             KeSetDisableBoostThread(&Thread->Tcb, (BOOLEAN)DisableBoost);
 
             /* Call the kernel */
             KeSetDisableBoostThread(&Thread->Tcb, (BOOLEAN)DisableBoost);
@@ -1529,11 +1523,10 @@ NtSetInformationThread(IN HANDLE ThreadHandle,
             }
             _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
             {
             }
             _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
             {
-                /* Get the exception code */
-                Status = _SEH2_GetExceptionCode();
+                /* Return the exception code */
+                _SEH2_YIELD(return _SEH2_GetExceptionCode());
             }
             _SEH2_END;
             }
             _SEH2_END;
-            if (!NT_SUCCESS(Status)) break;
 
             /* This is only valid for the current thread */
             if (Thread != PsGetCurrentThread())
 
             /* This is only valid for the current thread */
             if (Thread != PsGetCurrentThread())
@@ -1614,7 +1607,7 @@ NtQueryInformationThread(IN HANDLE ThreadHandle,
 {
     PETHREAD Thread;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
 {
     PETHREAD Thread;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     ULONG Access;
     ULONG Length = 0;
     PTHREAD_BASIC_INFORMATION ThreadBasicInfo =
     ULONG Access;
     ULONG Length = 0;
     PTHREAD_BASIC_INFORMATION ThreadBasicInfo =
@@ -1623,26 +1616,26 @@ NtQueryInformationThread(IN HANDLE ThreadHandle,
     KIRQL OldIrql;
     PAGED_CODE();
 
     KIRQL OldIrql;
     PAGED_CODE();
 
+    /* Check if we were called from user mode */
     if (PreviousMode != KernelMode)
     {
     if (PreviousMode != KernelMode)
     {
+        /* Enter SEH */
         _SEH2_TRY
         {
         _SEH2_TRY
         {
+            /* Probe the buffer */
             ProbeForWrite(ThreadInformation,
                           ThreadInformationLength,
                           sizeof(ULONG));
 
             ProbeForWrite(ThreadInformation,
                           ThreadInformationLength,
                           sizeof(ULONG));
 
-            if (ReturnLength)
-            {
-                ProbeForWriteUlong(ReturnLength);
-            }
+            /* Probe the return length if required */
+            if (ReturnLength) ProbeForWriteUlong(ReturnLength);
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-
-        if (!NT_SUCCESS(Status)) return Status;
     }
 
     /* Check what class this is */
     }
 
     /* Check what class this is */
index 21cc7f4..c842f04 100644 (file)
@@ -349,7 +349,7 @@ NtOpenProcessTokenEx(IN HANDLE ProcessHandle,
     PACCESS_TOKEN Token;
     HANDLE hToken;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
     PACCESS_TOKEN Token;
     HANDLE hToken;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     PAGED_CODE();
     PSTRACE(PS_SECURITY_DEBUG,
             "Process: %p DesiredAccess: %lx\n", ProcessHandle, DesiredAccess);
     PAGED_CODE();
     PSTRACE(PS_SECURITY_DEBUG,
             "Process: %p DesiredAccess: %lx\n", ProcessHandle, DesiredAccess);
@@ -365,13 +365,10 @@ NtOpenProcessTokenEx(IN HANDLE ProcessHandle,
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
-            /* Get the exception code */
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-
-        /* Fail on exception */
-        if (!NT_SUCCESS(Status)) return Status;
     }
 
     /* Open the process token */
     }
 
     /* Open the process token */
@@ -938,7 +935,7 @@ NtImpersonateThread(IN HANDLE ThreadHandle,
     PETHREAD Thread;
     PETHREAD ThreadToImpersonate;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
     PETHREAD Thread;
     PETHREAD ThreadToImpersonate;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     PAGED_CODE();
     PSTRACE(PS_SECURITY_DEBUG,
             "Threads: %p %p\n", ThreadHandle, ThreadToImpersonateHandle);
     PAGED_CODE();
     PSTRACE(PS_SECURITY_DEBUG,
             "Threads: %p %p\n", ThreadHandle, ThreadToImpersonateHandle);
@@ -960,13 +957,10 @@ NtImpersonateThread(IN HANDLE ThreadHandle,
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
-            /* Get exception status */
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-
-        /* Fail on exception */
-        if (!NT_SUCCESS(Status)) return Status;
     }
 
     /* Reference the thread */
     }
 
     /* Reference the thread */
index 6db7472..e64f227 100644 (file)
@@ -48,7 +48,7 @@ NTAPI
 PsSuspendThread(IN PETHREAD Thread,
                 OUT PULONG PreviousCount OPTIONAL)
 {
 PsSuspendThread(IN PETHREAD Thread,
                 OUT PULONG PreviousCount OPTIONAL)
 {
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     ULONG OldCount = 0;
     PAGED_CODE();
 
     ULONG OldCount = 0;
     PAGED_CODE();
 
@@ -60,6 +60,9 @@ PsSuspendThread(IN PETHREAD Thread,
         {
             /* Do the suspend */
             OldCount = KeSuspendThread(&Thread->Tcb);
         {
             /* Do the suspend */
             OldCount = KeSuspendThread(&Thread->Tcb);
+
+            /* We are done */
+            Status = STATUS_SUCCESS;
         }
         else
         {
         }
         else
         {
@@ -89,6 +92,9 @@ PsSuspendThread(IN PETHREAD Thread,
 
                 /* Release rundown protection */
                 ExReleaseRundownProtection(&Thread->RundownProtect);
 
                 /* Release rundown protection */
                 ExReleaseRundownProtection(&Thread->RundownProtect);
+
+                /* We are done */
+                Status = STATUS_SUCCESS;
             }
             else
             {
             }
             else
             {
@@ -99,6 +105,7 @@ PsSuspendThread(IN PETHREAD Thread,
     }
     _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
     {
     }
     _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
     {
+        /* Get the exception code */
         Status = _SEH2_GetExceptionCode();
 
         /* Don't fail if we merely couldn't write the handle back */
         Status = _SEH2_GetExceptionCode();
 
         /* Don't fail if we merely couldn't write the handle back */
@@ -216,7 +223,7 @@ NtAlertResumeThread(IN HANDLE ThreadHandle,
 {
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
     PETHREAD Thread;
 {
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
     PETHREAD Thread;
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     ULONG PreviousState;
 
     /* Check if we came from user mode with a suspend count */
     ULONG PreviousState;
 
     /* Check if we came from user mode with a suspend count */
@@ -230,11 +237,10 @@ NtAlertResumeThread(IN HANDLE ThreadHandle,
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
-            /* Get the exception code */
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-        if (!NT_SUCCESS(Status)) return Status;
     }
 
     /* Reference the Object */
     }
 
     /* Reference the Object */
@@ -282,7 +288,7 @@ NtResumeThread(IN HANDLE ThreadHandle,
     PETHREAD Thread;
     ULONG Prev;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
     PETHREAD Thread;
     ULONG Prev;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     PAGED_CODE();
 
     /* Check if caller gave a suspend count from user mode */
     PAGED_CODE();
 
     /* Check if caller gave a suspend count from user mode */
@@ -296,11 +302,10 @@ NtResumeThread(IN HANDLE ThreadHandle,
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
-            /* Get the exception code */
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-        if(!NT_SUCCESS(Status)) return Status;
     }
 
     /* Get the Thread Object */
     }
 
     /* Get the Thread Object */
@@ -345,7 +350,7 @@ NtSuspendThread(IN HANDLE ThreadHandle,
     PETHREAD Thread;
     ULONG Prev;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
     PETHREAD Thread;
     ULONG Prev;
     KPROCESSOR_MODE PreviousMode = ExGetPreviousMode();
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     PAGED_CODE();
 
     /* Check if caller gave a suspend count from user mode */
     PAGED_CODE();
 
     /* Check if caller gave a suspend count from user mode */
@@ -359,11 +364,10 @@ NtSuspendThread(IN HANDLE ThreadHandle,
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
-            /* Get the exception code */
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-        if(!NT_SUCCESS(Status)) return Status;
     }
 
     /* Get the Thread Object */
     }
 
     /* Get the Thread Object */
index f9fcffd..4ded1d6 100644 (file)
@@ -475,9 +475,6 @@ PspCreateThread(OUT PHANDLE ThreadHandle,
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
-            /* Get the exception code */
-            Status = _SEH2_GetExceptionCode();
-
             /* Thread insertion failed, thread is dead */
             PspSetCrossThreadFlag(Thread, CT_DEAD_THREAD_BIT);
 
             /* Thread insertion failed, thread is dead */
             PspSetCrossThreadFlag(Thread, CT_DEAD_THREAD_BIT);
 
@@ -492,9 +489,11 @@ PspCreateThread(OUT PHANDLE ThreadHandle,
 
             /* Close its handle, killing it */
             ObCloseHandle(ThreadHandle, PreviousMode);
 
             /* Close its handle, killing it */
             ObCloseHandle(ThreadHandle, PreviousMode);
+
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-        if (!NT_SUCCESS(Status)) return Status;
     }
     else
     {
     }
     else
     {
@@ -879,7 +878,6 @@ NtCreateThread(OUT PHANDLE ThreadHandle,
                IN BOOLEAN CreateSuspended)
 {
     INITIAL_TEB SafeInitialTeb;
                IN BOOLEAN CreateSuspended)
 {
     INITIAL_TEB SafeInitialTeb;
-    NTSTATUS Status = STATUS_SUCCESS;
     PAGED_CODE();
     PSTRACE(PS_THREAD_DEBUG,
             "ProcessHandle: %p Context: %p\n", ProcessHandle, ThreadContext);
     PAGED_CODE();
     PSTRACE(PS_THREAD_DEBUG,
             "ProcessHandle: %p Context: %p\n", ProcessHandle, ThreadContext);
@@ -897,7 +895,7 @@ NtCreateThread(OUT PHANDLE ThreadHandle,
             ProbeForWriteHandle(ThreadHandle);
 
             /* Check if the caller wants a client id */
             ProbeForWriteHandle(ThreadHandle);
 
             /* Check if the caller wants a client id */
-            if(ClientId)
+            if (ClientId)
             {
                 /* Make sure we can write to it */
                 ProbeForWrite(ClientId, sizeof(CLIENT_ID), sizeof(ULONG));
             {
                 /* Make sure we can write to it */
                 ProbeForWrite(ClientId, sizeof(CLIENT_ID), sizeof(ULONG));
@@ -912,10 +910,10 @@ NtCreateThread(OUT PHANDLE ThreadHandle,
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-        if (!NT_SUCCESS(Status)) return Status;
     }
     else
     {
     }
     else
     {
@@ -951,7 +949,7 @@ NtOpenThread(OUT PHANDLE ThreadHandle,
     CLIENT_ID SafeClientId;
     ULONG Attributes = 0;
     HANDLE hThread = NULL;
     CLIENT_ID SafeClientId;
     ULONG Attributes = 0;
     HANDLE hThread = NULL;
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     PETHREAD Thread;
     BOOLEAN HasObjectName = FALSE;
     ACCESS_STATE AccessState;
     PETHREAD Thread;
     BOOLEAN HasObjectName = FALSE;
     ACCESS_STATE AccessState;
@@ -990,11 +988,10 @@ NtOpenThread(OUT PHANDLE ThreadHandle,
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
-            /* Get the exception code */
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-        if (!NT_SUCCESS(Status)) return Status;
     }
     else
     {
     }
     else
     {
index 08d8440..3a5c2c5 100644 (file)
@@ -131,7 +131,7 @@ NtW32Call(IN ULONG RoutineIndex,
 {
     PVOID RetResult;
     ULONG RetResultLength;
 {
     PVOID RetResult;
     ULONG RetResultLength;
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     ASSERT(KeGetPreviousMode() != KernelMode);
 
     /* Enter SEH for probing */
     ASSERT(KeGetPreviousMode() != KernelMode);
 
     /* Enter SEH for probing */
@@ -143,36 +143,32 @@ NtW32Call(IN ULONG RoutineIndex,
     }
     _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
     {
     }
     _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
     {
-        /* Get exception code */
-        Status = _SEH2_GetExceptionCode();
+        /* Return the exception code */
+        _SEH2_YIELD(return _SEH2_GetExceptionCode());
     }
     _SEH2_END;
 
     }
     _SEH2_END;
 
-    /* Make sure we got success */
+    /* Call kernel function */
+    Status = KeUserModeCallback(RoutineIndex,
+                                Argument,
+                                ArgumentLength,
+                                &RetResult,
+                                &RetResultLength);
     if (NT_SUCCESS(Status))
     {
     if (NT_SUCCESS(Status))
     {
-        /* Call kernel function */
-        Status = KeUserModeCallback(RoutineIndex,
-                                    Argument,
-                                    ArgumentLength,
-                                    &RetResult,
-                                    &RetResultLength);
-        if (NT_SUCCESS(Status))
+        /* Enter SEH for write back */
+        _SEH2_TRY
+        {
+            /* Return results to user mode */
+            *Result = RetResult;
+            *ResultLength = RetResultLength;
+        }
+        _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         {
-            /* Enter SEH for write back */
-            _SEH2_TRY
-            {
-                /* Return results to user mode */
-                *Result = RetResult;
-                *ResultLength = RetResultLength;
-            }
-            _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
-            {
-                /* Get the exception code */
-                Status = _SEH2_GetExceptionCode();
-            }
-            _SEH2_END;
+            /* Get the exception code */
+            Status = _SEH2_GetExceptionCode();
         }
         }
+        _SEH2_END;
     }
 
     /* Return the result */
     }
 
     /* Return the result */
index bc4b178..5280ef4 100644 (file)
@@ -278,7 +278,7 @@ SepCaptureAcl(IN PACL InputAcl,
     
     PAGED_CODE();
     
     
     PAGED_CODE();
     
-    if(AccessMode != KernelMode)
+    if (AccessMode != KernelMode)
     {
         _SEH2_TRY
         {
     {
         _SEH2_TRY
         {
@@ -292,35 +292,34 @@ SepCaptureAcl(IN PACL InputAcl,
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         
         }
         _SEH2_END;
         
-        if(NT_SUCCESS(Status))
+        NewAcl = ExAllocatePool(PoolType,
+                                AclSize);
+        if(NewAcl != NULL)
         {
         {
-            NewAcl = ExAllocatePool(PoolType,
-                                    AclSize);
-            if(NewAcl != NULL)
+            _SEH2_TRY
             {
             {
-                _SEH2_TRY
-                {
-                    RtlCopyMemory(NewAcl,
-                                  InputAcl,
-                                  AclSize);
-                    
-                    *CapturedAcl = NewAcl;
-                }
-                _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
-                {
-                    ExFreePool(NewAcl);
-                    Status = _SEH2_GetExceptionCode();
-                }
-                _SEH2_END;
+                RtlCopyMemory(NewAcl,
+                              InputAcl,
+                              AclSize);
+
+                *CapturedAcl = NewAcl;
             }
             }
-            else
+            _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
             {
             {
-                Status = STATUS_INSUFFICIENT_RESOURCES;
+                /* Free the ACL and return the exception code */
+                ExFreePool(NewAcl);
+                _SEH2_YIELD(return _SEH2_GetExceptionCode());
             }
             }
+            _SEH2_END;
+        }
+        else
+        {
+            Status = STATUS_INSUFFICIENT_RESOURCES;
         }
     }
     else if(!CaptureIfKernel)
         }
     }
     else if(!CaptureIfKernel)
index 852a2d0..ff1efa9 100644 (file)
@@ -215,14 +215,10 @@ SeCaptureLuidAndAttributesArray (PLUID_AND_ATTRIBUTES Src,
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-        
-        if (!NT_SUCCESS(Status))
-        {
-            return Status;
-        }
     }
     
     /* allocate enough memory or check if the provided buffer is
     }
     
     /* allocate enough memory or check if the provided buffer is
@@ -391,7 +387,7 @@ NtPrivilegeCheck (IN HANDLE ClientToken,
     ULONG Length;
     BOOLEAN CheckResult;
     KPROCESSOR_MODE PreviousMode;
     ULONG Length;
     BOOLEAN CheckResult;
     KPROCESSOR_MODE PreviousMode;
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     
     PAGED_CODE();
     
     
     PAGED_CODE();
     
@@ -415,8 +411,7 @@ NtPrivilegeCheck (IN HANDLE ClientToken,
                              Privilege[PrivilegeCount]) /
                 sizeof(RequiredPrivileges->Privilege[0]) != PrivilegeCount)
             {
                              Privilege[PrivilegeCount]) /
                 sizeof(RequiredPrivileges->Privilege[0]) != PrivilegeCount)
             {
-                Status = STATUS_INVALID_PARAMETER;
-                _SEH2_LEAVE;
+                _SEH2_YIELD(return STATUS_INVALID_PARAMETER);
             }
             
             /* probe all of the array */
             }
             
             /* probe all of the array */
@@ -429,14 +424,10 @@ NtPrivilegeCheck (IN HANDLE ClientToken,
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-        
-        if (!NT_SUCCESS(Status))
-        {
-            return Status;
-        }
     }
     else
     {
     }
     else
     {
index 5aa6aed..fded835 100644 (file)
@@ -397,7 +397,7 @@ SeCaptureSecurityDescriptor(IN PSECURITY_DESCRIPTOR _OriginalSecurityDescriptor,
     ULONG OwnerSize = 0, GroupSize = 0;
     ULONG SaclSize = 0, DaclSize = 0;
     ULONG DescriptorSize = 0;
     ULONG OwnerSize = 0, GroupSize = 0;
     ULONG SaclSize = 0, DaclSize = 0;
     ULONG DescriptorSize = 0;
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     
     if(OriginalSecurityDescriptor != NULL)
     {
     
     if(OriginalSecurityDescriptor != NULL)
     {
@@ -417,8 +417,7 @@ SeCaptureSecurityDescriptor(IN PSECURITY_DESCRIPTOR _OriginalSecurityDescriptor,
                 
                 if(OriginalSecurityDescriptor->Revision != SECURITY_DESCRIPTOR_REVISION1)
                 {
                 
                 if(OriginalSecurityDescriptor->Revision != SECURITY_DESCRIPTOR_REVISION1)
                 {
-                    Status = STATUS_UNKNOWN_REVISION;
-                    _SEH2_LEAVE;
+                    _SEH2_YIELD(return STATUS_UNKNOWN_REVISION);
                 }
                 
                 /* make a copy on the stack */
                 }
                 
                 /* make a copy on the stack */
@@ -452,14 +451,10 @@ SeCaptureSecurityDescriptor(IN PSECURITY_DESCRIPTOR _OriginalSecurityDescriptor,
             }
             _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
             {
             }
             _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
             {
-                Status = _SEH2_GetExceptionCode();
+                /* Return the exception code */
+                _SEH2_YIELD(return _SEH2_GetExceptionCode());
             }
             _SEH2_END;
             }
             _SEH2_END;
-            
-            if(!NT_SUCCESS(Status))
-            {
-                return Status;
-            }
         }
         else if(!CaptureIfKernel)
         {
         }
         else if(!CaptureIfKernel)
         {
@@ -547,14 +542,10 @@ sizeof(ULONG));                                         \
 }                                                                      \
 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)                                                            \
 {                                                                      \
 }                                                                      \
 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)                                                            \
 {                                                                      \
-Status = _SEH2_GetExceptionCode();                                    \
+_SEH2_YIELD(return _SEH2_GetExceptionCode());                          \
 }                                                                      \
 _SEH2_END;                                                              \
 \
 }                                                                      \
 _SEH2_END;                                                              \
 \
-if(!NT_SUCCESS(Status))                                                \
-{                                                                      \
-return Status;                                                       \
-}                                                                      \
 }                                                                        \
 else                                                                     \
 {                                                                        \
 }                                                                        \
 else                                                                     \
 {                                                                        \
@@ -591,14 +582,10 @@ sizeof(ULONG));                                         \
 }                                                                      \
 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)                                                            \
 {                                                                      \
 }                                                                      \
 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)                                                            \
 {                                                                      \
-Status = _SEH2_GetExceptionCode();                                    \
+_SEH2_YIELD(return _SEH2_GetExceptionCode());                          \
 }                                                                      \
 _SEH2_END;                                                              \
 \
 }                                                                      \
 _SEH2_END;                                                              \
 \
-if(!NT_SUCCESS(Status))                                                \
-{                                                                      \
-return Status;                                                       \
-}                                                                      \
 }                                                                        \
 else                                                                     \
 {                                                                        \
 }                                                                        \
 else                                                                     \
 {                                                                        \
@@ -685,23 +672,18 @@ Offset += ROUND_UP(Type##Size, sizeof(ULONG));                       \
 #undef CopyACL
             }
             _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
 #undef CopyACL
             }
             _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
-            {
-                Status = _SEH2_GetExceptionCode();
-            }
-            _SEH2_END;
-            
-            if(NT_SUCCESS(Status))
-            {
-                /* we're finally done! copy the pointer to the captured descriptor to
-                 to the caller */
-                *CapturedSecurityDescriptor = NewDescriptor;
-                return STATUS_SUCCESS;
-            }
-            else
             {
                 /* we failed to copy the data to the new descriptor */
                 ExFreePool(NewDescriptor);
             {
                 /* we failed to copy the data to the new descriptor */
                 ExFreePool(NewDescriptor);
+                _SEH2_YIELD(return _SEH2_GetExceptionCode());
             }
             }
+            _SEH2_END;
+            
+            /* we're finally done! copy the pointer to the captured descriptor to
+             to the caller */
+            *CapturedSecurityDescriptor = NewDescriptor;
+            return STATUS_SUCCESS;
+
         }
         else
         {
         }
         else
         {
index 6b30037..be28301 100644 (file)
@@ -232,11 +232,11 @@ SepCaptureSid(IN PSID InputSid,
 {
     ULONG SidSize = 0;
     PISID NewSid, Sid = (PISID)InputSid;
 {
     ULONG SidSize = 0;
     PISID NewSid, Sid = (PISID)InputSid;
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     
     PAGED_CODE();
     
     
     PAGED_CODE();
     
-    if(AccessMode != KernelMode)
+    if (AccessMode != KernelMode)
     {
         _SEH2_TRY
         {
     {
         _SEH2_TRY
         {
@@ -251,36 +251,35 @@ SepCaptureSid(IN PSID InputSid,
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         
         }
         _SEH2_END;
         
-        if(NT_SUCCESS(Status))
+        /* allocate a SID and copy it */
+        NewSid = ExAllocatePool(PoolType,
+                                SidSize);
+        if(NewSid != NULL)
         {
         {
-            /* allocate a SID and copy it */
-            NewSid = ExAllocatePool(PoolType,
-                                    SidSize);
-            if(NewSid != NULL)
+            _SEH2_TRY
             {
             {
-                _SEH2_TRY
-                {
-                    RtlCopyMemory(NewSid,
-                                  Sid,
-                                  SidSize);
-                    
-                    *CapturedSid = NewSid;
-                }
-                _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
-                {
-                    ExFreePool(NewSid);
-                    Status = _SEH2_GetExceptionCode();
-                }
-                _SEH2_END;
+                RtlCopyMemory(NewSid,
+                              Sid,
+                              SidSize);
+
+                *CapturedSid = NewSid;
             }
             }
-            else
+            _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
             {
             {
-                Status = STATUS_INSUFFICIENT_RESOURCES;
+                /* Free the SID and return the exception code */
+                ExFreePool(NewSid);
+                _SEH2_YIELD(return _SEH2_GetExceptionCode());
             }
             }
+            _SEH2_END;
+        }
+        else
+        {
+            Status = STATUS_INSUFFICIENT_RESOURCES;
         }
     }
     else if(!CaptureIfKernel)
         }
     }
     else if(!CaptureIfKernel)
index 86bfc44..63b93a9 100644 (file)
@@ -1413,7 +1413,7 @@ NtSetInformationToken(IN HANDLE TokenHandle,
     PTOKEN Token;
     KPROCESSOR_MODE PreviousMode;
     ULONG NeededAccess = TOKEN_ADJUST_DEFAULT;
     PTOKEN Token;
     KPROCESSOR_MODE PreviousMode;
     ULONG NeededAccess = TOKEN_ADJUST_DEFAULT;
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     
     PAGED_CODE();
     
     
     PAGED_CODE();
     
@@ -1453,7 +1453,7 @@ NtSetInformationToken(IN HANDLE TokenHandle,
                 if(TokenInformationLength >= sizeof(TOKEN_OWNER))
                 {
                     PTOKEN_OWNER to = (PTOKEN_OWNER)TokenInformation;
                 if(TokenInformationLength >= sizeof(TOKEN_OWNER))
                 {
                     PTOKEN_OWNER to = (PTOKEN_OWNER)TokenInformation;
-                    PSID InputSid = NULL;
+                    PSID InputSid = NULL, CapturedSid;
                     
                     _SEH2_TRY
                     {
                     
                     _SEH2_TRY
                     {
@@ -1461,28 +1461,23 @@ NtSetInformationToken(IN HANDLE TokenHandle,
                     }
                     _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
                     {
                     }
                     _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
                     {
-                        Status = _SEH2_GetExceptionCode();
+                        _SEH2_YIELD(return _SEH2_GetExceptionCode());
                     }
                     _SEH2_END;
                     
                     }
                     _SEH2_END;
                     
+                    Status = SepCaptureSid(InputSid,
+                                           PreviousMode,
+                                           PagedPool,
+                                           FALSE,
+                                           &CapturedSid);
                     if(NT_SUCCESS(Status))
                     {
                     if(NT_SUCCESS(Status))
                     {
-                        PSID CapturedSid;
-                        
-                        Status = SepCaptureSid(InputSid,
-                                               PreviousMode,
-                                               PagedPool,
-                                               FALSE,
-                                               &CapturedSid);
-                        if(NT_SUCCESS(Status))
-                        {
-                            RtlCopySid(RtlLengthSid(CapturedSid),
-                                       Token->UserAndGroups[Token->DefaultOwnerIndex].Sid,
-                                       CapturedSid);
-                            SepReleaseSid(CapturedSid,
-                                          PreviousMode,
-                                          FALSE);
-                        }
+                        RtlCopySid(RtlLengthSid(CapturedSid),
+                                   Token->UserAndGroups[Token->DefaultOwnerIndex].Sid,
+                                   CapturedSid);
+                        SepReleaseSid(CapturedSid,
+                                      PreviousMode,
+                                      FALSE);
                     }
                 }
                 else
                     }
                 }
                 else
@@ -1497,7 +1492,7 @@ NtSetInformationToken(IN HANDLE TokenHandle,
                 if(TokenInformationLength >= sizeof(TOKEN_PRIMARY_GROUP))
                 {
                     PTOKEN_PRIMARY_GROUP tpg = (PTOKEN_PRIMARY_GROUP)TokenInformation;
                 if(TokenInformationLength >= sizeof(TOKEN_PRIMARY_GROUP))
                 {
                     PTOKEN_PRIMARY_GROUP tpg = (PTOKEN_PRIMARY_GROUP)TokenInformation;
-                    PSID InputSid = NULL;
+                    PSID InputSid = NULL, CapturedSid;
                     
                     _SEH2_TRY
                     {
                     
                     _SEH2_TRY
                     {
@@ -1505,28 +1500,23 @@ NtSetInformationToken(IN HANDLE TokenHandle,
                     }
                     _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
                     {
                     }
                     _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
                     {
-                        Status = _SEH2_GetExceptionCode();
+                        _SEH2_YIELD(return _SEH2_GetExceptionCode());
                     }
                     _SEH2_END;
                     
                     }
                     _SEH2_END;
                     
+                    Status = SepCaptureSid(InputSid,
+                                           PreviousMode,
+                                           PagedPool,
+                                           FALSE,
+                                           &CapturedSid);
                     if(NT_SUCCESS(Status))
                     {
                     if(NT_SUCCESS(Status))
                     {
-                        PSID CapturedSid;
-                        
-                        Status = SepCaptureSid(InputSid,
-                                               PreviousMode,
-                                               PagedPool,
-                                               FALSE,
-                                               &CapturedSid);
-                        if(NT_SUCCESS(Status))
-                        {
-                            RtlCopySid(RtlLengthSid(CapturedSid),
-                                       Token->PrimaryGroup,
-                                       CapturedSid);
-                            SepReleaseSid(CapturedSid,
-                                          PreviousMode,
-                                          FALSE);
-                        }
+                        RtlCopySid(RtlLengthSid(CapturedSid),
+                                   Token->PrimaryGroup,
+                                   CapturedSid);
+                        SepReleaseSid(CapturedSid,
+                                      PreviousMode,
+                                      FALSE);
                     }
                 }
                 else
                     }
                 }
                 else
@@ -1549,42 +1539,39 @@ NtSetInformationToken(IN HANDLE TokenHandle,
                     }
                     _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
                     {
                     }
                     _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
                     {
-                        Status = _SEH2_GetExceptionCode();
+                        _SEH2_YIELD(return _SEH2_GetExceptionCode());
                     }
                     _SEH2_END;
                     }
                     _SEH2_END;
-                    
-                    if(NT_SUCCESS(Status))
+
+                    if(InputAcl != NULL)
                     {
                     {
-                        if(InputAcl != NULL)
-                        {
-                            PACL CapturedAcl;
-                            
-                            /* capture and copy the dacl */
-                            Status = SepCaptureAcl(InputAcl,
-                                                   PreviousMode,
-                                                   PagedPool,
-                                                   TRUE,
-                                                   &CapturedAcl);
-                            if(NT_SUCCESS(Status))
-                            {
-                                /* free the previous dacl if present */
-                                if(Token->DefaultDacl != NULL)
-                                {
-                                    ExFreePool(Token->DefaultDacl);
-                                }
-                                
-                                /* set the new dacl */
-                                Token->DefaultDacl = CapturedAcl;
-                            }
-                        }
-                        else
+                        PACL CapturedAcl;
+
+                        /* capture and copy the dacl */
+                        Status = SepCaptureAcl(InputAcl,
+                                               PreviousMode,
+                                               PagedPool,
+                                               TRUE,
+                                               &CapturedAcl);
+                        if(NT_SUCCESS(Status))
                         {
                         {
-                            /* clear and free the default dacl if present */
+                            /* free the previous dacl if present */
                             if(Token->DefaultDacl != NULL)
                             {
                                 ExFreePool(Token->DefaultDacl);
                             if(Token->DefaultDacl != NULL)
                             {
                                 ExFreePool(Token->DefaultDacl);
-                                Token->DefaultDacl = NULL;
                             }
                             }
+
+                            /* set the new dacl */
+                            Token->DefaultDacl = CapturedAcl;
+                        }
+                    }
+                    else
+                    {
+                        /* clear and free the default dacl if present */
+                        if(Token->DefaultDacl != NULL)
+                        {
+                            ExFreePool(Token->DefaultDacl);
+                            Token->DefaultDacl = NULL;
                         }
                     }
                 }
                         }
                     }
                 }
@@ -1606,21 +1593,18 @@ NtSetInformationToken(IN HANDLE TokenHandle,
                 }
                 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
                 {
                 }
                 _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
                 {
-                    Status = _SEH2_GetExceptionCode();
+                    _SEH2_YIELD(return _SEH2_GetExceptionCode());
                 }
                 _SEH2_END;
                 
                 }
                 _SEH2_END;
                 
-                if(NT_SUCCESS(Status))
+                if(!SeSinglePrivilegeCheck(SeTcbPrivilege,
+                                           PreviousMode))
                 {
                 {
-                    if(!SeSinglePrivilegeCheck(SeTcbPrivilege,
-                                               PreviousMode))
-                    {
-                        Status = STATUS_PRIVILEGE_NOT_HELD;
-                        break;
-                    }
-                    
-                    Token->SessionId = SessionId;
+                    Status = STATUS_PRIVILEGE_NOT_HELD;
+                    break;
                 }
                 }
+
+                Token->SessionId = SessionId;
                 break;
             }
                 
                 break;
             }
                 
@@ -1660,13 +1644,13 @@ NtDuplicateToken(IN HANDLE ExistingTokenHandle,
     PTOKEN NewToken;
     PSECURITY_QUALITY_OF_SERVICE CapturedSecurityQualityOfService;
     BOOLEAN QoSPresent;
     PTOKEN NewToken;
     PSECURITY_QUALITY_OF_SERVICE CapturedSecurityQualityOfService;
     BOOLEAN QoSPresent;
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     
     PAGED_CODE();
     
     PreviousMode = KeGetPreviousMode();
     
     
     PAGED_CODE();
     
     PreviousMode = KeGetPreviousMode();
     
-    if(PreviousMode != KernelMode)
+    if (PreviousMode != KernelMode)
     {
         _SEH2_TRY
         {
     {
         _SEH2_TRY
         {
@@ -1674,14 +1658,10 @@ NtDuplicateToken(IN HANDLE ExistingTokenHandle,
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-        
-        if(!NT_SUCCESS(Status))
-        {
-            return Status;
-        }
     }
     
     Status = SepCaptureSecurityQualityOfService(ObjectAttributes,
     }
     
     Status = SepCaptureSecurityQualityOfService(ObjectAttributes,
@@ -1964,7 +1944,7 @@ NtCreateToken(OUT PHANDLE TokenHandle,
     KPROCESSOR_MODE PreviousMode;
     ULONG nTokenPrivileges = 0;
     LARGE_INTEGER LocalExpirationTime = {{0, 0}};
     KPROCESSOR_MODE PreviousMode;
     ULONG nTokenPrivileges = 0;
     LARGE_INTEGER LocalExpirationTime = {{0, 0}};
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     
     PAGED_CODE();
     
     
     PAGED_CODE();
     
@@ -2004,14 +1984,10 @@ NtCreateToken(OUT PHANDLE TokenHandle,
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-        
-        if(!NT_SUCCESS(Status))
-        {
-            return Status;
-        }
     }
     else
     {
     }
     else
     {
@@ -2198,13 +2174,13 @@ NtOpenThreadTokenEx(IN HANDLE ThreadHandle,
     SECURITY_DESCRIPTOR SecurityDescriptor;
     PACL Dacl = NULL;
     KPROCESSOR_MODE PreviousMode;
     SECURITY_DESCRIPTOR SecurityDescriptor;
     PACL Dacl = NULL;
     KPROCESSOR_MODE PreviousMode;
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     
     PAGED_CODE();
     
     PreviousMode = ExGetPreviousMode();
     
     
     PAGED_CODE();
     
     PreviousMode = ExGetPreviousMode();
     
-    if(PreviousMode != KernelMode)
+    if (PreviousMode != KernelMode)
     {
         _SEH2_TRY
         {
     {
         _SEH2_TRY
         {
@@ -2212,14 +2188,10 @@ NtOpenThreadTokenEx(IN HANDLE ThreadHandle,
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-        
-        if(!NT_SUCCESS(Status))
-        {
-            return Status;
-        }
     }
     
     /*
     }
     
     /*
@@ -2373,7 +2345,7 @@ NtCompareTokens(IN HANDLE FirstTokenHandle,
     KPROCESSOR_MODE PreviousMode;
     PTOKEN FirstToken, SecondToken;
     BOOLEAN IsEqual;
     KPROCESSOR_MODE PreviousMode;
     PTOKEN FirstToken, SecondToken;
     BOOLEAN IsEqual;
-    NTSTATUS Status = STATUS_SUCCESS;
+    NTSTATUS Status;
     
     PAGED_CODE();
     
     
     PAGED_CODE();
     
@@ -2387,12 +2359,10 @@ NtCompareTokens(IN HANDLE FirstTokenHandle,
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
         }
         _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
         {
-            Status = _SEH2_GetExceptionCode();
+            /* Return the exception code */
+            _SEH2_YIELD(return _SEH2_GetExceptionCode());
         }
         _SEH2_END;
         }
         _SEH2_END;
-        
-        if (!NT_SUCCESS(Status))
-            return Status;
     }
     
     Status = ObReferenceObjectByHandle(FirstTokenHandle,
     }
     
     Status = ObReferenceObjectByHandle(FirstTokenHandle,