diff --git a/dlls/ntdll/nt.c b/dlls/ntdll/nt.c index 00f6b4b7ebf..efcba6cae8b 100644 --- a/dlls/ntdll/nt.c +++ b/dlls/ntdll/nt.c @@ -696,28 +696,24 @@ NTSTATUS WINAPI NtQuerySystemInformation( wlen = wine_server_reply_size(reply) + sizeof(WCHAR); if (Length >= len + sizeof(*spi)) { + /* ftCreationTime, ftUserTime, ftCreateTime; + * vmCounters, ioCounters + */ + memset(spi, 0, sizeof(*spi)); + spi->dwOffset = sizeof(*spi); spi->dwThreadCount = reply->threads; - memset(&spi->ftCreationTime, 0, sizeof(spi->ftCreationTime)); + /* spi->pszProcessName will be set later on */ + spi->dwBasePriority = reply->priority; spi->dwProcessID = (DWORD)reply->pid; spi->dwParentProcessID = (DWORD)reply->ppid; spi->dwHandleCount = reply->handles; - spi->dwVirtualBytesPeak = 0; /* FIXME */ - spi->dwVirtualBytes = 0; /* FIXME */ - spi->dwPageFaults = 0; /* FIXME */ - spi->dwWorkingSetPeak = 0; /* FIXME */ - spi->dwWorkingSet = 0; /* FIXME */ - spi->dwUnknown5 = 0; /* FIXME */ - spi->dwPagedPool = 0; /* FIXME */ - spi->dwUnknown6 = 0; /* FIXME */ - spi->dwNonPagedPool = 0; /* FIXME */ - spi->dwPageFileBytesPeak = 0; /* FIXME */ - spi->dwPrivateBytes = 0; /* FIXME */ - spi->dwPageFileBytes = 0; /* FIXME */ + /* spi->ti will be set later on */ + len += sizeof(*spi) - sizeof(spi->ti); } else ret = STATUS_INFO_LENGTH_MISMATCH; diff --git a/include/winternl.h b/include/winternl.h index 0c420bc1285..93f93641fe1 100644 --- a/include/winternl.h +++ b/include/winternl.h @@ -1059,13 +1059,30 @@ typedef struct _SYSTEM_KERNEL_DEBUGGER_INFORMATION { } SYSTEM_KERNEL_DEBUGGER_INFORMATION, *PSYSTEM_KERNEL_DEBUGGER_INFORMATION; /* System Information Class 0x05 */ + +typedef struct _VM_COUNTERS_ { + SIZE_T PeakVirtualSize; + SIZE_T VirtualSize; + ULONG PageFaultCount; + SIZE_T PeakWorkingSetSize; + SIZE_T WorkingSetSize; + SIZE_T QuotaPeakPagedPoolUsage; + SIZE_T QuotaPagedPoolUsage; + SIZE_T QuotaPeakNonPagedPoolUsage; + SIZE_T QuotaNonPagedPoolUsage; + SIZE_T PagefileUsage; + SIZE_T PeakPagefileUsage; +} VM_COUNTERS, *PVM_COUNTERS; + typedef struct _SYSTEM_PROCESS_INFORMATION { #ifdef __WINESRC__ DWORD dwOffset; DWORD dwThreadCount; DWORD dwUnknown1[6]; FILETIME ftCreationTime; - DWORD dwUnknown2[5]; + FILETIME ftUserTime; + FILETIME ftKernelTime; + DWORD dwUnknown2; WCHAR *pszProcessName; DWORD dwBasePriority; DWORD dwProcessID; @@ -1073,19 +1090,8 @@ typedef struct _SYSTEM_PROCESS_INFORMATION { DWORD dwHandleCount; DWORD dwUnknown3; DWORD dwUnknown4; - DWORD dwVirtualBytesPeak; - DWORD dwVirtualBytes; - DWORD dwPageFaults; - DWORD dwWorkingSetPeak; - DWORD dwWorkingSet; - DWORD dwUnknown5; - DWORD dwPagedPool; - DWORD dwUnknown6; - DWORD dwNonPagedPool; - DWORD dwPageFileBytesPeak; - DWORD dwPrivateBytes; - DWORD dwPageFileBytes; - DWORD dwUnknown7[4]; + VM_COUNTERS vmCounters; + IO_COUNTERS ioCounters; SYSTEM_THREAD_INFORMATION ti[1]; #else ULONG NextEntryOffset; @@ -1130,20 +1136,6 @@ typedef struct _WINSTATIONINFORMATIONW { BYTE Reserved3[1140]; } WINSTATIONINFORMATIONW, *PWINSTATIONINFORMATIONW; -typedef struct _VM_COUNTERS_ { - SIZE_T PeakVirtualSize; - SIZE_T VirtualSize; - ULONG PageFaultCount; - SIZE_T PeakWorkingSetSize; - SIZE_T WorkingSetSize; - SIZE_T QuotaPeakPagedPoolUsage; - SIZE_T QuotaPagedPoolUsage; - SIZE_T QuotaPeakNonPagedPoolUsage; - SIZE_T QuotaNonPagedPoolUsage; - SIZE_T PagefileUsage; - SIZE_T PeakPagefileUsage; -} VM_COUNTERS, *PVM_COUNTERS; - typedef BOOLEAN (WINAPI * PWINSTATIONQUERYINFORMATIONW)(HANDLE,ULONG,WINSTATIONINFOCLASS,PVOID,ULONG,PULONG); typedef struct _LDR_RESOURCE_INFO