Alexandre Julliard : ntdll: Return the expected length in NtQueryInformationProcess.

Alexandre Julliard julliard at winehq.org
Fri Aug 28 10:17:35 CDT 2009


Module: wine
Branch: master
Commit: 5e30947d0b87e5c1e40ad62f54b408380a5dd9ab
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=5e30947d0b87e5c1e40ad62f54b408380a5dd9ab

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Thu Aug 27 19:46:28 2009 +0200

ntdll: Return the expected length in NtQueryInformationProcess.

---

 dlls/ntdll/process.c |   59 +++++++++++++++++++++++++++++++------------------
 1 files changed, 37 insertions(+), 22 deletions(-)

diff --git a/dlls/ntdll/process.c b/dlls/ntdll/process.c
index 6a2c66d..2f86e2d 100644
--- a/dlls/ntdll/process.c
+++ b/dlls/ntdll/process.c
@@ -181,7 +181,11 @@ NTSTATUS WINAPI NtQueryInformationProcess(
                 if (ProcessInformationLength > sizeof(PROCESS_BASIC_INFORMATION))
                     ret = STATUS_INFO_LENGTH_MISMATCH;
             }
-            else ret = STATUS_INFO_LENGTH_MISMATCH;
+            else
+            {
+                len = sizeof(PROCESS_BASIC_INFORMATION);
+                ret = STATUS_INFO_LENGTH_MISMATCH;
+            }
         }
         break;
     case ProcessIoCounters:
@@ -207,7 +211,11 @@ NTSTATUS WINAPI NtQueryInformationProcess(
                 if (ProcessInformationLength > sizeof(IO_COUNTERS))
                     ret = STATUS_INFO_LENGTH_MISMATCH;
             }
-            else ret = STATUS_INFO_LENGTH_MISMATCH;
+            else
+            {
+                len = sizeof(IO_COUNTERS);
+                ret = STATUS_INFO_LENGTH_MISMATCH;
+            }
         }
         break;
     case ProcessVmCounters:
@@ -236,7 +244,11 @@ NTSTATUS WINAPI NtQueryInformationProcess(
                     ProcessInformationLength != sizeof(VM_COUNTERS))
                     ret = STATUS_INFO_LENGTH_MISMATCH;
             }
-            else ret = STATUS_INFO_LENGTH_MISMATCH;
+            else
+            {
+                len = sizeof(pvmi);
+                ret = STATUS_INFO_LENGTH_MISMATCH;
+            }
         }
         break;
     case ProcessTimes:
@@ -266,25 +278,27 @@ NTSTATUS WINAPI NtQueryInformationProcess(
                     SERVER_END_REQ;
 
                     memcpy(ProcessInformation, &pti, sizeof(KERNEL_USER_TIMES));
-
                     len = sizeof(KERNEL_USER_TIMES);
                 }
 
                 if (ProcessInformationLength > sizeof(KERNEL_USER_TIMES))
                     ret = STATUS_INFO_LENGTH_MISMATCH;
             }
-            else ret = STATUS_INFO_LENGTH_MISMATCH;
+            else
+            {
+                len = sizeof(KERNEL_USER_TIMES);
+                ret = STATUS_INFO_LENGTH_MISMATCH;
+            }
         }
         break;
     case ProcessDebugPort:
         /* "These are not the debuggers you are looking for." *
          * set it to 0 aka "no debugger" to satisfy copy protections */
-        if (ProcessInformationLength == 4)
-        {
+        len = 4;
+        if (ProcessInformationLength == len)
             memset(ProcessInformation, 0, ProcessInformationLength);
-            len = 4;
-        }
-        else ret = STATUS_INFO_LENGTH_MISMATCH;
+        else
+            ret = STATUS_INFO_LENGTH_MISMATCH;
         break;
     case ProcessHandleCount:
         if (ProcessInformationLength >= 4)
@@ -296,18 +310,21 @@ NTSTATUS WINAPI NtQueryInformationProcess(
             else
             {
                 memset(ProcessInformation, 0, 4);
-
-
                 len = 4;
             }
 
             if (ProcessInformationLength > 4)
                 ret = STATUS_INFO_LENGTH_MISMATCH;
-         }
-         else ret = STATUS_INFO_LENGTH_MISMATCH;
-         break;
+        }
+        else
+        {
+            len = 4;
+            ret = STATUS_INFO_LENGTH_MISMATCH;
+        }
+        break;
     case ProcessWow64Information:
-        if (ProcessInformationLength == sizeof(DWORD))
+        len = sizeof(DWORD);
+        if (ProcessInformationLength == len)
         {
             DWORD val = 0;
 
@@ -322,7 +339,6 @@ NTSTATUS WINAPI NtQueryInformationProcess(
                 SERVER_END_REQ;
             }
             *(DWORD *)ProcessInformation = val;
-            len = sizeof(DWORD);
         }
         else ret = STATUS_INFO_LENGTH_MISMATCH;
         break;
@@ -350,12 +366,11 @@ NTSTATUS WINAPI NtQueryInformationProcess(
         SERVER_END_REQ;
         break;
     case ProcessExecuteFlags:
-        if (ProcessInformationLength == sizeof(ULONG))
-        {
+        len = sizeof(ULONG);
+        if (ProcessInformationLength == len)
             *(ULONG *)ProcessInformation = execute_flags;
-            len = sizeof(ULONG);
-        }
-        else ret = STATUS_INFO_LENGTH_MISMATCH;
+        else
+            ret = STATUS_INFO_LENGTH_MISMATCH;
         break;
     default:
         FIXME("(%p,info_class=%d,%p,0x%08x,%p) Unknown information class\n",




More information about the wine-cvs mailing list