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