Implemented kernel32.GetIoProcessCounters and stubbed ntdll.NtQueryProcessInformation(ProcessIoCounters)

Eric Pouech pouech-eric at wanadoo.fr
Thu Sep 18 15:04:51 CDT 2003


A+
-- 
Eric Pouech
-------------- next part --------------
Name:          iocnt
ChangeLog:     Implemented kernel32.GetIoProcessCounters and stubbed ntdll.NtQueryProcessInformation(ProcessIoCounters)
License:       X11
GenDate:       2003/09/18 20:03:23 UTC
ModifiedFiles: dlls/kernel/kernel32.spec dlls/kernel/process.c dlls/ntdll/Makefile.in dlls/ntdll/nt.c include/winnt.h
AddedFiles:    dlls/ntdll/process.c
===================================================================
RCS file: /home/cvs/cvsroot/wine/wine/dlls/kernel/kernel32.spec,v
retrieving revision 1.107
diff -u -u -r1.107 kernel32.spec
--- dlls/kernel/kernel32.spec	15 Sep 2003 22:07:50 -0000	1.107
+++ dlls/kernel/kernel32.spec	16 Sep 2003 19:24:43 -0000
@@ -452,7 +452,7 @@
 @ stdcall GetProcessFlags(long)
 @ stdcall GetProcessHeap()
 @ stdcall GetProcessHeaps(long ptr)
-@ stub GetProcessIoCounters
+@ stdcall GetProcessIoCounters(long ptr)
 @ stdcall GetProcessShutdownParameters(ptr ptr)
 @ stdcall GetProcessTimes(long ptr ptr ptr ptr)
 @ stdcall GetProcessVersion(long)
Index: dlls/kernel/process.c
===================================================================
RCS file: /home/cvs/cvsroot/wine/wine/dlls/kernel/process.c,v
retrieving revision 1.5
diff -u -u -r1.5 process.c
--- dlls/kernel/process.c	17 Sep 2003 05:31:33 -0000	1.5
+++ dlls/kernel/process.c	18 Sep 2003 19:45:30 -0000
@@ -2018,6 +2028,20 @@
     return !status;
 }
 
+/******************************************************************
+ *		GetProcessIoCounters (KERNEL32.@)
+ *
+ *
+ */
+BOOL WINAPI GetProcessIoCounters(HANDLE hProcess, PIO_COUNTERS ioc)
+{
+    NTSTATUS    status;
+
+    status = NtQueryInformationProcess(hProcess, ProcessIoCounters, 
+                                       ioc, sizeof(*ioc), NULL);
+    if (status) SetLastError( RtlNtStatusToDosError(status) );
+    return !status;
+}
 
 /***********************************************************************
  * ProcessIdToSessionId   (KERNEL32.@)
Index: dlls/ntdll/Makefile.in
===================================================================
RCS file: /home/cvs/cvsroot/wine/wine/dlls/ntdll/Makefile.in,v
retrieving revision 1.80
diff -u -u -r1.80 Makefile.in
--- dlls/ntdll/Makefile.in	18 Sep 2003 04:39:13 -0000	1.80
+++ dlls/ntdll/Makefile.in	18 Sep 2003 19:31:31 -0000
@@ -54,6 +55,7 @@
 	nt.c \
 	om.c \
 	path.c \
+	process.c \
 	reg.c \
 	resource.c \
 	rtl.c \
Index: dlls/ntdll/nt.c
===================================================================
RCS file: /home/cvs/cvsroot/wine/wine/dlls/ntdll/nt.c,v
retrieving revision 1.57
diff -u -u -r1.57 nt.c
--- dlls/ntdll/nt.c	16 Sep 2003 01:07:22 -0000	1.57
+++ dlls/ntdll/nt.c	18 Sep 2003 19:30:51 -0000
@@ -73,98 +73,6 @@
 } LPCMESSAGE, *PLPCMESSAGE;
 
 /*
- *	Process object
- */
-
-/******************************************************************************
- *  NtTerminateProcess			[NTDLL.@]
- *
- *  Native applications must kill themselves when done
- */
-NTSTATUS WINAPI NtTerminateProcess( HANDLE handle, LONG exit_code )
-{
-    NTSTATUS ret;
-    BOOL self;
-    SERVER_START_REQ( terminate_process )
-    {
-        req->handle    = handle;
-        req->exit_code = exit_code;
-        ret = wine_server_call( req );
-        self = !ret && reply->self;
-    }
-    SERVER_END_REQ;
-    if (self) exit( exit_code );
-    return ret;
-}
-
-/******************************************************************************
-*  NtQueryInformationProcess		[NTDLL.@]
-*  ZwQueryInformationProcess		[NTDLL.@]
-*
-*/
-NTSTATUS WINAPI NtQueryInformationProcess(
-	IN HANDLE ProcessHandle,
-	IN PROCESSINFOCLASS ProcessInformationClass,
-	OUT PVOID ProcessInformation,
-	IN ULONG ProcessInformationLength,
-	OUT PULONG ReturnLength)
-{
-	NTSTATUS ret = STATUS_SUCCESS;
-	ULONG len = 0;
-
-	switch (ProcessInformationClass) {
-	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)
-		{
-			memset(ProcessInformation,0,ProcessInformationLength);
-			len = 4;
-		}
-		else
-			ret = STATUS_INFO_LENGTH_MISMATCH;
-		break;
-	case ProcessWow64Information:
-		if (ProcessInformationLength == 4)
-		{
-			memset(ProcessInformation,0,ProcessInformationLength);
-			len = 4;
-		}
-		else
-			ret = STATUS_INFO_LENGTH_MISMATCH;
-		break;
-	default:
-		FIXME("(%p,0x%08x,%p,0x%08lx,%p),stub!\n",
-			ProcessHandle,ProcessInformationClass,
-			ProcessInformation,ProcessInformationLength,
-			ReturnLength
-		);
-                ret = STATUS_NOT_IMPLEMENTED;
-		break;
-	}
-
-	if (ReturnLength)
-		*ReturnLength = len;
-
-	return ret;
-}
-
-/******************************************************************************
- * NtSetInformationProcess [NTDLL.@]
- * ZwSetInformationProcess [NTDLL.@]
- */
-NTSTATUS WINAPI NtSetInformationProcess(
-	IN HANDLE ProcessHandle,
-	IN PROCESSINFOCLASS ProcessInformationClass,
-	IN PVOID ProcessInformation,
-	IN ULONG ProcessInformationLength)
-{
-	FIXME("(%p,0x%08x,%p,0x%08lx) stub\n",
-	ProcessHandle,ProcessInformationClass,ProcessInformation,ProcessInformationLength);
-	return 0;
-}
-
-/*
  *	Token
  */
 
Index: include/winnt.h
===================================================================
RCS file: /home/cvs/cvsroot/wine/wine/include/winnt.h,v
retrieving revision 1.169
diff -u -u -r1.169 winnt.h
--- include/winnt.h	16 Sep 2003 20:26:28 -0000	1.169
+++ include/winnt.h	17 Sep 2003 20:51:21 -0000
@@ -3600,4 +3600,13 @@
 
 typedef VOID (NTAPI * WAITORTIMERCALLBACKFUNC) (PVOID, BOOLEAN );
 
+typedef struct _IO_COUNTERS {
+    ULONGLONG   ReadOperationCount;
+    ULONGLONG   WriteOperationCount;
+    ULONGLONG   OtherOperationCount;
+    ULONGLONG   ReadTransferCount;
+    ULONGLONG   WriteTransferCount;
+    ULONGLONG   OtherTransferCount;
+} IO_COUNTERS;
+typedef IO_COUNTERS *PIO_COUNTERS;
 #endif  /* __WINE_WINNT_H */
--- /dev/null	1970-01-01 01:00:00.000000000 +0100
+++ dlls/ntdll/process.c	2003-09-18 22:00:29.000000000 +0200
@@ -0,0 +1,136 @@
+/*
+ * NT basis DLL
+ *
+ * This file contains the Nt* API functions of NTDLL.DLL.
+ * In the original ntdll.dll they all seem to just call int 0x2e (down to the NTOSKRNL)
+ *
+ * Copyright 1996-1998 Marcus Meissner
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include "wine/debug.h"
+
+#include "windef.h"
+#include "winbase.h"
+#include "winreg.h"
+#include "winternl.h"
+#include "ntdll_misc.h"
+#include "wine/server.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(ntdll);
+
+/*
+ *	Process object
+ */
+
+/******************************************************************************
+ *  NtTerminateProcess			[NTDLL.@]
+ *
+ *  Native applications must kill themselves when done
+ */
+NTSTATUS WINAPI NtTerminateProcess( HANDLE handle, LONG exit_code )
+{
+    NTSTATUS ret;
+    BOOL self;
+    SERVER_START_REQ( terminate_process )
+    {
+        req->handle    = handle;
+        req->exit_code = exit_code;
+        ret = wine_server_call( req );
+        self = !ret && reply->self;
+    }
+    SERVER_END_REQ;
+    if (self) exit( exit_code );
+    return ret;
+}
+
+/******************************************************************************
+*  NtQueryInformationProcess		[NTDLL.@]
+*  ZwQueryInformationProcess		[NTDLL.@]
+*
+*/
+NTSTATUS WINAPI NtQueryInformationProcess(
+	IN HANDLE ProcessHandle,
+	IN PROCESSINFOCLASS ProcessInformationClass,
+	OUT PVOID ProcessInformation,
+	IN ULONG ProcessInformationLength,
+	OUT PULONG ReturnLength)
+{
+    NTSTATUS ret = STATUS_SUCCESS;
+    ULONG len = 0;
+
+    switch (ProcessInformationClass) 
+    {
+    case ProcessIoCounters:
+        if (ProcessInformationLength == sizeof(IO_COUNTERS))
+        {
+            memset(ProcessInformation, 0, ProcessInformationLength);
+            len = sizeof(IO_COUNTERS);
+        }
+        else 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)
+        {
+            memset(ProcessInformation, 0 ,ProcessInformationLength);
+            len = 4;
+        }
+        else ret = STATUS_INFO_LENGTH_MISMATCH;
+        break;
+    case ProcessWow64Information:
+        if (ProcessInformationLength == 4)
+        {
+            memset(ProcessInformation, 0, ProcessInformationLength);
+            len = 4;
+        }
+        else ret = STATUS_INFO_LENGTH_MISMATCH;
+        break;
+    default:
+        FIXME("(%p,0x%08x,%p,0x%08lx,%p),stub!\n",
+              ProcessHandle,ProcessInformationClass,
+              ProcessInformation,ProcessInformationLength,
+              ReturnLength);
+        ret = STATUS_NOT_IMPLEMENTED;
+        break;
+    }
+
+    if (ReturnLength) *ReturnLength = len;
+    
+    return ret;
+}
+
+/******************************************************************************
+ * NtSetInformationProcess [NTDLL.@]
+ * ZwSetInformationProcess [NTDLL.@]
+ */
+NTSTATUS WINAPI NtSetInformationProcess(
+	IN HANDLE ProcessHandle,
+	IN PROCESSINFOCLASS ProcessInformationClass,
+	IN PVOID ProcessInformation,
+	IN ULONG ProcessInformationLength)
+{
+    FIXME("(%p,0x%08x,%p,0x%08lx) stub\n",
+          ProcessHandle,ProcessInformationClass,ProcessInformation,ProcessInformationLength);
+    return 0;
+}
+


More information about the wine-patches mailing list