Hi folks...
I just sent the following patch to wine-patches. I thought it would be a good
idea to let you folks beat it up before someone actually commit's it to CVS...
The patch adds several struct definations to include/ntddk.h to assist getting
the NtQuerySystemInformation routine working. It also adds several enumerations
for the System Information Class.
By far, these are not complete, and I can only hope that they are accurate.
One thing you may notice is that HANDLEINFO and THREADINFO have been defined. I
believe there is already a less complete defination of the THREADINFO struct
(called THREAD_INFO) in the code already. This has been left untouched so that
this patch minimizes the potential side effects.
These are untested in that I have not tried to recompile with these changes in
place. My only concern: do FILETIME and LARGE_INTEGER data types exist?
Google is your friend - use it wisely!
--
Ron Gage - Owner, Linux Network Services - Saginaw, Michigan - 989-274-8088
Your one-stop source for Reliable, Secure and Affordable Networking Solutions
--- ntddk.h~ Wed Dec 19 14:16:29 2001
+++ ntddk.h Thu Feb 14 07:32:31 2002
@@ -147,6 +147,21 @@
MaxThreadInfoClass
} THREADINFOCLASS;
+typedef struct {
+/* This is used by NtQuerySystemInformation */
+
FILETIME ftCreationTime;
+
DWORD dwUnknown1;
+
DWORD dwStartAddress;
+
DWORD dwOwningPID;
+
DWORD dwThreadID;
+
DWORD dwCurrentPriority;
+
DWORD dwBasePriority;
+
DWORD dwContextSwitches;
+
DWORD dwThreadState;
+
DWORD dwWaitReason;
+
DWORD dwUnknown2[5];
+} THREADINFO, *PTHREADINFO;
+
/* file information */
typedef enum _FILE_INFORMATION_CLASS {
@@ -220,12 +235,124 @@
/* system information */
typedef enum SYSTEM_INFORMATION_CLASS
-{
Unknown1 = 1,
-
Unknown2,
-
Unknown3,
+{
SystemBasicInformation = 0,
+
Unknown1,
+
SystemPerformanceInformation,
+
SystemTimeInformation,
Unknown4,
-
SystemPerformanceInformation
+
SystemProcessInformation,
+
Unknown6,
+
Unknown7,
+
Unknown8,
+
Unknown9,
+
Unknown10,
+
SystemDriverInformation,
+
Unknown12,
+
Unknown13,
+
Unknown14,
+
Unknown15,
+
SystemHandleList,
+
Unknown17,
+
Unknown18,
+
Unknown19,
+
Unknown20,
+
SystemCacheInformation
+
} SYSTEM_INFORMATION_CLASS, *PSYSTEM_INFORMATION_CLASS;
+
+typedef struct {
+/* System Information Class 0x00 */
+
DWORD dwUnknown1;
+
ULONG uKeMaximumIncrement;
+
ULONG uPageSize;
+
ULONG uMmNumberOfPhysicalPages;
+
ULONG uMmLowestPhysicalPage;
+
ULONG uMmHighestPhysicalPage;
+
ULONG uAllocationGranularity;
+
PVOID pLowestUserAddress;
+
PVOID pMmHighestUserAddress;
+
ULONG uKeActiveProcessors;
+
BYTE bKeNumberProcessors;
+
BYTE bUnknown2;
+
WORD wUnknown3;
+} SYSTEM_BASIC_INFORMATION;
+
+typedef struct {
+/* System Information Class 0x02 */
+
LARGE_INTEGER liIdleTime;
+
DWORD dwSpare[76];
+} SYSTEM_PERFORMANCE_INFORMATION;
+
+typedef struct {
+/* System Information Class 0x03 */
+
LARGE_INTEGER liKeBootTime;
+
LARGE_INTEGER liKeSystemTime;
+
LARGE_INTEGER liExpTimeZoneBias;
+
ULONG uCurrentTimeZoneId;
+
DWORD dwReserved;
+} SYSTEM_TIME_INFORMATION;
+
+typedef struct {
+/* System Information Class 0x05 */
+
DWORD dwOffset;
+
DWORD dwThreadCount;
+
DWORD dwUnknown1[6];
+
FILETIME ftCreationTime;
+
DWORD dwUnknown2[5];
+
WCHAR* pszProcessName;
+
DWORD dwBasePriority;
+
DWORD dwProcessID;
+
DWORD dwParentProcessID;
+
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];
+
THREADINFO ti[0];
+} SYSTEM_PROCESS_INFORMATION;
+
+typedef struct {
+/* System Information Class 0x0b */
+
PVOID pvAddress;
+
DWORD dwUnknown1;
+
DWORD dwUnknown2;
+
DWORD dwEntryIndex
+
DWORD dwUnknown3;
+
char szName[MAX_PATH + 1];
+} SYSTEM_DRIVER_INFORMATION;
+
+typedef struct {
+/* System Information Class 0x10 */
+
USHORT dwPID;
+
USHORT dwCreatorBackTraceIndex;
+
BYTE bObjectType;
+
BYTE bHandleAttributes;
+
USHORT usHandleOffset;
+
DWORD dwKeObject;
+
ULONG ulGrantedAccess;
+} HANDLEINFO, *PHANDLEINFO;
+
+
+typedef struct {
+/* System Information Class 0x15 */
+
ULONG CurrentSize;
+
ULONG PeakSize;
+
ULONG PageFaultCount;
+
ULONG MinimumWorkingSet;
+
ULONG MaximumWorkingSet;
+
ULONG unused[4];
+} SYSTEM_CACHE_INFORMATION;
/* reading coffee grounds... */
typedef struct _THREAD_INFO
-------------------------------------------------
This mail sent through IMP:
http://horde.org/imp/