ntdll: Return the expected length in NtQueryInformationProcess.
This commit is contained in:
parent
2be006e497
commit
5e30947d0b
|
@ -181,7 +181,11 @@ NTSTATUS WINAPI NtQueryInformationProcess(
|
||||||
if (ProcessInformationLength > sizeof(PROCESS_BASIC_INFORMATION))
|
if (ProcessInformationLength > sizeof(PROCESS_BASIC_INFORMATION))
|
||||||
ret = STATUS_INFO_LENGTH_MISMATCH;
|
ret = STATUS_INFO_LENGTH_MISMATCH;
|
||||||
}
|
}
|
||||||
else ret = STATUS_INFO_LENGTH_MISMATCH;
|
else
|
||||||
|
{
|
||||||
|
len = sizeof(PROCESS_BASIC_INFORMATION);
|
||||||
|
ret = STATUS_INFO_LENGTH_MISMATCH;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ProcessIoCounters:
|
case ProcessIoCounters:
|
||||||
|
@ -207,7 +211,11 @@ NTSTATUS WINAPI NtQueryInformationProcess(
|
||||||
if (ProcessInformationLength > sizeof(IO_COUNTERS))
|
if (ProcessInformationLength > sizeof(IO_COUNTERS))
|
||||||
ret = STATUS_INFO_LENGTH_MISMATCH;
|
ret = STATUS_INFO_LENGTH_MISMATCH;
|
||||||
}
|
}
|
||||||
else ret = STATUS_INFO_LENGTH_MISMATCH;
|
else
|
||||||
|
{
|
||||||
|
len = sizeof(IO_COUNTERS);
|
||||||
|
ret = STATUS_INFO_LENGTH_MISMATCH;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ProcessVmCounters:
|
case ProcessVmCounters:
|
||||||
|
@ -236,7 +244,11 @@ NTSTATUS WINAPI NtQueryInformationProcess(
|
||||||
ProcessInformationLength != sizeof(VM_COUNTERS))
|
ProcessInformationLength != sizeof(VM_COUNTERS))
|
||||||
ret = STATUS_INFO_LENGTH_MISMATCH;
|
ret = STATUS_INFO_LENGTH_MISMATCH;
|
||||||
}
|
}
|
||||||
else ret = STATUS_INFO_LENGTH_MISMATCH;
|
else
|
||||||
|
{
|
||||||
|
len = sizeof(pvmi);
|
||||||
|
ret = STATUS_INFO_LENGTH_MISMATCH;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ProcessTimes:
|
case ProcessTimes:
|
||||||
|
@ -266,25 +278,27 @@ NTSTATUS WINAPI NtQueryInformationProcess(
|
||||||
SERVER_END_REQ;
|
SERVER_END_REQ;
|
||||||
|
|
||||||
memcpy(ProcessInformation, &pti, sizeof(KERNEL_USER_TIMES));
|
memcpy(ProcessInformation, &pti, sizeof(KERNEL_USER_TIMES));
|
||||||
|
|
||||||
len = sizeof(KERNEL_USER_TIMES);
|
len = sizeof(KERNEL_USER_TIMES);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ProcessInformationLength > sizeof(KERNEL_USER_TIMES))
|
if (ProcessInformationLength > sizeof(KERNEL_USER_TIMES))
|
||||||
ret = STATUS_INFO_LENGTH_MISMATCH;
|
ret = STATUS_INFO_LENGTH_MISMATCH;
|
||||||
}
|
}
|
||||||
else ret = STATUS_INFO_LENGTH_MISMATCH;
|
else
|
||||||
|
{
|
||||||
|
len = sizeof(KERNEL_USER_TIMES);
|
||||||
|
ret = STATUS_INFO_LENGTH_MISMATCH;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ProcessDebugPort:
|
case ProcessDebugPort:
|
||||||
/* "These are not the debuggers you are looking for." *
|
/* "These are not the debuggers you are looking for." *
|
||||||
* set it to 0 aka "no debugger" to satisfy copy protections */
|
* set it to 0 aka "no debugger" to satisfy copy protections */
|
||||||
if (ProcessInformationLength == 4)
|
|
||||||
{
|
|
||||||
memset(ProcessInformation, 0, ProcessInformationLength);
|
|
||||||
len = 4;
|
len = 4;
|
||||||
}
|
if (ProcessInformationLength == len)
|
||||||
else ret = STATUS_INFO_LENGTH_MISMATCH;
|
memset(ProcessInformation, 0, ProcessInformationLength);
|
||||||
|
else
|
||||||
|
ret = STATUS_INFO_LENGTH_MISMATCH;
|
||||||
break;
|
break;
|
||||||
case ProcessHandleCount:
|
case ProcessHandleCount:
|
||||||
if (ProcessInformationLength >= 4)
|
if (ProcessInformationLength >= 4)
|
||||||
|
@ -296,18 +310,21 @@ NTSTATUS WINAPI NtQueryInformationProcess(
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
memset(ProcessInformation, 0, 4);
|
memset(ProcessInformation, 0, 4);
|
||||||
|
|
||||||
|
|
||||||
len = 4;
|
len = 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ProcessInformationLength > 4)
|
if (ProcessInformationLength > 4)
|
||||||
ret = STATUS_INFO_LENGTH_MISMATCH;
|
ret = STATUS_INFO_LENGTH_MISMATCH;
|
||||||
}
|
}
|
||||||
else ret = STATUS_INFO_LENGTH_MISMATCH;
|
else
|
||||||
|
{
|
||||||
|
len = 4;
|
||||||
|
ret = STATUS_INFO_LENGTH_MISMATCH;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case ProcessWow64Information:
|
case ProcessWow64Information:
|
||||||
if (ProcessInformationLength == sizeof(DWORD))
|
len = sizeof(DWORD);
|
||||||
|
if (ProcessInformationLength == len)
|
||||||
{
|
{
|
||||||
DWORD val = 0;
|
DWORD val = 0;
|
||||||
|
|
||||||
|
@ -322,7 +339,6 @@ NTSTATUS WINAPI NtQueryInformationProcess(
|
||||||
SERVER_END_REQ;
|
SERVER_END_REQ;
|
||||||
}
|
}
|
||||||
*(DWORD *)ProcessInformation = val;
|
*(DWORD *)ProcessInformation = val;
|
||||||
len = sizeof(DWORD);
|
|
||||||
}
|
}
|
||||||
else ret = STATUS_INFO_LENGTH_MISMATCH;
|
else ret = STATUS_INFO_LENGTH_MISMATCH;
|
||||||
break;
|
break;
|
||||||
|
@ -350,12 +366,11 @@ NTSTATUS WINAPI NtQueryInformationProcess(
|
||||||
SERVER_END_REQ;
|
SERVER_END_REQ;
|
||||||
break;
|
break;
|
||||||
case ProcessExecuteFlags:
|
case ProcessExecuteFlags:
|
||||||
if (ProcessInformationLength == sizeof(ULONG))
|
|
||||||
{
|
|
||||||
*(ULONG *)ProcessInformation = execute_flags;
|
|
||||||
len = sizeof(ULONG);
|
len = sizeof(ULONG);
|
||||||
}
|
if (ProcessInformationLength == len)
|
||||||
else ret = STATUS_INFO_LENGTH_MISMATCH;
|
*(ULONG *)ProcessInformation = execute_flags;
|
||||||
|
else
|
||||||
|
ret = STATUS_INFO_LENGTH_MISMATCH;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
FIXME("(%p,info_class=%d,%p,0x%08x,%p) Unknown information class\n",
|
FIXME("(%p,info_class=%d,%p,0x%08x,%p) Unknown information class\n",
|
||||||
|
|
Loading…
Reference in New Issue