Implemented kernel32.GetIoProcessCounters and stubbed
ntdll.NtQueryProcessInformation(ProcessIoCounters).
This commit is contained in:
parent
4df100cda6
commit
c3e6c095e1
|
@ -452,7 +452,7 @@
|
||||||
@ stdcall GetProcessFlags(long)
|
@ stdcall GetProcessFlags(long)
|
||||||
@ stdcall GetProcessHeap()
|
@ stdcall GetProcessHeap()
|
||||||
@ stdcall GetProcessHeaps(long ptr)
|
@ stdcall GetProcessHeaps(long ptr)
|
||||||
@ stub GetProcessIoCounters
|
@ stdcall GetProcessIoCounters(long ptr)
|
||||||
@ stdcall GetProcessShutdownParameters(ptr ptr)
|
@ stdcall GetProcessShutdownParameters(ptr ptr)
|
||||||
@ stdcall GetProcessTimes(long ptr ptr ptr ptr)
|
@ stdcall GetProcessTimes(long ptr ptr ptr ptr)
|
||||||
@ stdcall GetProcessVersion(long)
|
@ stdcall GetProcessVersion(long)
|
||||||
|
|
|
@ -2024,6 +2024,20 @@ BOOL WINAPI WriteProcessMemory( HANDLE process, LPVOID addr, LPCVOID buffer, SIZ
|
||||||
return !status;
|
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.@)
|
* ProcessIdToSessionId (KERNEL32.@)
|
||||||
|
|
|
@ -51,6 +51,7 @@ C_SRCS = \
|
||||||
nt.c \
|
nt.c \
|
||||||
om.c \
|
om.c \
|
||||||
path.c \
|
path.c \
|
||||||
|
process.c \
|
||||||
reg.c \
|
reg.c \
|
||||||
resource.c \
|
resource.c \
|
||||||
rtl.c \
|
rtl.c \
|
||||||
|
|
|
@ -72,98 +72,6 @@ typedef struct LpcMessage
|
||||||
BYTE MessageData[MAX_MESSAGE_DATA];
|
BYTE MessageData[MAX_MESSAGE_DATA];
|
||||||
} LPCMESSAGE, *PLPCMESSAGE;
|
} 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
|
* Token
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -0,0 +1,135 @@
|
||||||
|
/*
|
||||||
|
* 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;
|
||||||
|
}
|
|
@ -3600,4 +3600,14 @@ typedef struct _RTL_CRITICAL_SECTION {
|
||||||
|
|
||||||
typedef VOID (NTAPI * WAITORTIMERCALLBACKFUNC) (PVOID, BOOLEAN );
|
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 */
|
#endif /* __WINE_WINNT_H */
|
||||||
|
|
Loading…
Reference in New Issue