[ros-diffs] [amunger] 28570: NtQueryInformationProcess: Return STATUS_INFO_LENGTH_MISMATCH where appropriate, and return the needed length in any case. "ntdll_winetest info" now has 5 failures.

amunger at svn.reactos.org amunger at svn.reactos.org
Sun Aug 26 09:51:52 CEST 2007


Author: amunger
Date: Sun Aug 26 11:51:51 2007
New Revision: 28570

URL: http://svn.reactos.org/svn/reactos?rev=28570&view=rev
Log:
NtQueryInformationProcess:
Return STATUS_INFO_LENGTH_MISMATCH where appropriate, and return the needed length in any case.
"ntdll_winetest info" now has 5 failures.

Modified:
    trunk/reactos/ntoskrnl/ps/query.c

Modified: trunk/reactos/ntoskrnl/ps/query.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/ps/query.c?rev=28570&r1=28569&r2=28570&view=diff
==============================================================================
--- trunk/reactos/ntoskrnl/ps/query.c (original)
+++ trunk/reactos/ntoskrnl/ps/query.c Sun Aug 26 11:51:51 2007
@@ -117,6 +117,14 @@
         /* Basic process information */
         case ProcessBasicInformation:
 
+            /* Set return length */
+            Length = sizeof(PROCESS_BASIC_INFORMATION);
+
+			if ( ProcessInformationLength != Length )
+			{
+				Status = STATUS_INFO_LENGTH_MISMATCH;
+				break;
+			}
             /* Protect writes with SEH */
             _SEH_TRY
             {
@@ -130,8 +138,6 @@
                     (ULONG)Process->InheritedFromUniqueProcessId;
                 ProcessBasicInfo->BasePriority = Process->Pcb.BasePriority;
 
-                /* Set return length */
-                Length = sizeof(PROCESS_BASIC_INFORMATION);
             }
             _SEH_HANDLE
             {
@@ -144,11 +150,28 @@
         /* Quote limits and I/O Counters: not implemented */
         case ProcessQuotaLimits:
         case ProcessIoCounters:
+
+			Length = sizeof(IO_COUNTERS);
+			if ( ProcessInformationLength != Length )
+			{
+				Status = STATUS_INFO_LENGTH_MISMATCH;
+				break;
+			}
+
             Status = STATUS_NOT_IMPLEMENTED;
             break;
 
         /* Timing */
         case ProcessTimes:
+
+            /* Set the return length */
+            Length = sizeof(KERNEL_USER_TIMES);
+
+			if ( ProcessInformationLength != Length )
+			{
+				Status = STATUS_INFO_LENGTH_MISMATCH;
+				break;
+			}
 
             /* Protect writes with SEH */
             _SEH_TRY
@@ -160,9 +183,6 @@
                 ProcessTime->KernelTime.QuadPart = Process->Pcb.KernelTime *
                                                    100000LL;
                 ProcessTime->ExitTime = Process->ExitTime;
-
-                /* Set the return length */
-                Length = sizeof(KERNEL_USER_TIMES);
             }
             _SEH_HANDLE
             {
@@ -202,6 +222,15 @@
 
         case ProcessHandleCount:
 
+            /* Set the return length*/
+            Length = sizeof(ULONG);
+
+			if ( ProcessInformationLength != Length )
+			{
+				Status = STATUS_INFO_LENGTH_MISMATCH;
+				break;
+			}
+
             /* Count the number of handles this process has */
             HandleCount = ObpGetHandleCountByHandleTable(Process->ObjectTable);
 
@@ -210,9 +239,6 @@
             {
                 /* Return the count of handles */
                 *(PULONG)ProcessInformation = HandleCount;
-
-                /* Set the return length*/
-                Length = sizeof(ULONG);
             }
             _SEH_HANDLE
             {
@@ -249,6 +275,15 @@
 
         /* Virtual Memory Statistics */
         case ProcessVmCounters:
+
+            /* Set the return length */
+            Length = sizeof(VM_COUNTERS);
+
+			if ( ProcessInformationLength != Length )
+			{
+				Status = STATUS_INFO_LENGTH_MISMATCH;
+				break;
+			}
 
             /* Enter SEH for write safety */
             _SEH_TRY
@@ -266,8 +301,6 @@
                 VmCounters->PagefileUsage = Process->QuotaUsage[2];
                 VmCounters->PeakPagefileUsage = Process->QuotaPeak[2];
 
-                /* Set the return length */
-                Length = sizeof(VM_COUNTERS);
             }
             _SEH_HANDLE
             {




More information about the Ros-diffs mailing list