/* INCLUDES ****************************************************************/
-#include <ddk/ntddk.h>
-#include <ntdll/rtl.h>
-#include <windows.h>
-#include <kernel32/proc.h>
-#include <kernel32/thread.h>
-#include <kernel32/error.h>
-#include <wchar.h>
-#include <string.h>
-#include <napi/i386/segment.h>
-#include <napi/teb.h>
-#include <ntdll/csr.h>
-#include <ntdll/ldr.h>
+#include <k32.h>
#define NDEBUG
WaitForInputIdleType lpfnGlobalRegisterWaitForInputIdle;
-LPSTARTUPINFO lpLocalStartupInfo = NULL;
+LPSTARTUPINFOA lpLocalStartupInfo = NULL;
VOID STDCALL
-RegisterWaitForInputIdle (WaitForInputIdleType lpfnRegisterWaitForInputIdle);
+RegisterWaitForInputIdle(WaitForInputIdleType lpfnRegisterWaitForInputIdle);
+WINBOOL STDCALL
+InternalGetProcessId (HANDLE hProcess, LPDWORD lpProcessId);
-/* FUNCTIONS ****************************************************************/
-WINBOOL STDCALL
-GetProcessId (HANDLE hProcess, LPDWORD lpProcessId);
+/* FUNCTIONS ****************************************************************/
-WINBOOL STDCALL
-GetProcessAffinityMask(HANDLE hProcess,
- LPDWORD lpProcessAffinityMask,
- LPDWORD lpSystemAffinityMask)
+/*
+ * @implemented
+ */
+BOOL STDCALL
+GetProcessAffinityMask (HANDLE hProcess,
+ LPDWORD lpProcessAffinityMask,
+ LPDWORD lpSystemAffinityMask)
{
- if ((NULL == lpProcessAffinityMask)
- || (NULL == lpSystemAffinityMask))
+ PROCESS_BASIC_INFORMATION ProcessInfo;
+ ULONG BytesWritten;
+ NTSTATUS Status;
+
+ Status = NtQueryInformationProcess (hProcess,
+ ProcessBasicInformation,
+ (PVOID)&ProcessInfo,
+ sizeof(PROCESS_BASIC_INFORMATION),
+ &BytesWritten);
+ if (!NT_SUCCESS(Status))
{
- SetLastError(ERROR_BAD_ARGUMENTS);
- return(FALSE);
+ SetLastError (Status);
+ return FALSE;
}
- /* FIXME: check hProcess is actually a process */
- /* FIXME: query the kernel process object */
- *lpProcessAffinityMask = 0x00000001;
+ *lpProcessAffinityMask = (DWORD)ProcessInfo.AffinityMask;
+
+ /* FIXME */
*lpSystemAffinityMask = 0x00000001;
- return(TRUE);
+ return TRUE;
}
+/*
+ * @implemented
+ */
+BOOL STDCALL
+SetProcessAffinityMask (HANDLE hProcess,
+ DWORD dwProcessAffinityMask)
+{
+ NTSTATUS Status;
+
+ Status = NtSetInformationProcess (hProcess,
+ ProcessAffinityMask,
+ (PVOID)&dwProcessAffinityMask,
+ sizeof(DWORD));
+ if (!NT_SUCCESS(Status))
+ {
+ SetLastError (Status);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+
+/*
+ * @implemented
+ */
WINBOOL STDCALL
-GetProcessShutdownParameters(LPDWORD lpdwLevel,
- LPDWORD lpdwFlags)
+GetProcessShutdownParameters (LPDWORD lpdwLevel,
+ LPDWORD lpdwFlags)
{
CSRSS_API_REQUEST CsrRequest;
CSRSS_API_REPLY CsrReply;
}
+/*
+ * @implemented
+ */
WINBOOL STDCALL
-SetProcessShutdownParameters(DWORD dwLevel,
- DWORD dwFlags)
+SetProcessShutdownParameters (DWORD dwLevel,
+ DWORD dwFlags)
{
CSRSS_API_REQUEST CsrRequest;
CSRSS_API_REPLY CsrReply;
}
+/*
+ * @implemented
+ */
WINBOOL STDCALL
-GetProcessWorkingSetSize(HANDLE hProcess,
- LPDWORD lpMinimumWorkingSetSize,
- LPDWORD lpMaximumWorkingSetSize)
+GetProcessWorkingSetSize (HANDLE hProcess,
+ LPDWORD lpMinimumWorkingSetSize,
+ LPDWORD lpMaximumWorkingSetSize)
{
- SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
- return(FALSE);
+ QUOTA_LIMITS QuotaLimits;
+ NTSTATUS Status;
+
+ Status = NtQueryInformationProcess(hProcess,
+ ProcessQuotaLimits,
+ &QuotaLimits,
+ sizeof(QUOTA_LIMITS),
+ NULL);
+ if (!NT_SUCCESS(Status))
+ {
+ SetLastErrorByStatus(Status);
+ return(FALSE);
+ }
+
+ *lpMinimumWorkingSetSize = (DWORD)QuotaLimits.MinimumWorkingSetSize;
+ *lpMaximumWorkingSetSize = (DWORD)QuotaLimits.MaximumWorkingSetSize;
+
+ return(TRUE);
}
+/*
+ * @unimplemented
+ */
WINBOOL STDCALL
SetProcessWorkingSetSize(HANDLE hProcess,
DWORD dwMinimumWorkingSetSize,
}
+/*
+ * @implemented
+ */
WINBOOL STDCALL
GetProcessTimes(HANDLE hProcess,
LPFILETIME lpCreationTime,
return(FALSE);
}
- lpCreationTime->dwLowDateTime = Kut.CreateTime.u.LowPart;
+ lpCreationTime->dwLowDateTime = Kut.CreateTime.u.LowPart;
lpCreationTime->dwHighDateTime = Kut.CreateTime.u.HighPart;
lpExitTime->dwLowDateTime = Kut.ExitTime.u.LowPart;
}
+/*
+ * @implemented
+ */
HANDLE STDCALL
GetCurrentProcess(VOID)
{
}
+/*
+ * @implemented
+ */
HANDLE STDCALL
GetCurrentThread(VOID)
{
}
+/*
+ * @implemented
+ */
DWORD STDCALL
GetCurrentProcessId(VOID)
{
}
+/*
+ * @implemented
+ */
WINBOOL STDCALL
GetExitCodeProcess(HANDLE hProcess,
LPDWORD lpExitCode)
}
+/*
+ * @implemented
+ */
WINBOOL STDCALL
-GetProcessId(HANDLE hProcess,
+InternalGetProcessId(HANDLE hProcess,
LPDWORD lpProcessId)
{
- NTSTATUS errCode;
- PROCESS_BASIC_INFORMATION ProcessBasic;
- ULONG BytesWritten;
-
- errCode = NtQueryInformationProcess(hProcess,
- ProcessBasicInformation,
- &ProcessBasic,
- sizeof(PROCESS_BASIC_INFORMATION),
- &BytesWritten);
- if (!NT_SUCCESS(errCode))
- {
- SetLastErrorByStatus (errCode);
- return FALSE;
- }
- memcpy( lpProcessId ,&ProcessBasic.UniqueProcessId,sizeof(DWORD));
- return TRUE;
+ PROCESS_BASIC_INFORMATION ProcessBasic;
+ ULONG BytesWritten;
+ NTSTATUS Status;
+
+ Status = NtQueryInformationProcess(hProcess,
+ ProcessBasicInformation,
+ &ProcessBasic,
+ sizeof(PROCESS_BASIC_INFORMATION),
+ &BytesWritten);
+ if (!NT_SUCCESS(Status))
+ {
+ SetLastErrorByStatus(Status);
+ return(FALSE);
+ }
+
+ memcpy(lpProcessId, &ProcessBasic.UniqueProcessId, sizeof(DWORD));
+
+ return(TRUE);
}
+/*
+ * @implemented
+ */
HANDLE STDCALL
OpenProcess(DWORD dwDesiredAccess,
WINBOOL bInheritHandle,
}
+/*
+ * @implemented
+ */
UINT STDCALL
WinExec(LPCSTR lpCmdLine,
UINT uCmdShow)
}
+/*
+ * @implemented
+ */
VOID STDCALL
RegisterWaitForInputIdle (
WaitForInputIdleType lpfnRegisterWaitForInputIdle
}
+/*
+ * @unimplemented
+ */
DWORD STDCALL
WaitForInputIdle (
HANDLE hProcess,
}
+/*
+ * @implemented
+ */
VOID STDCALL
Sleep(DWORD dwMilliseconds)
{
}
+/*
+ * @implemented
+ */
DWORD STDCALL
SleepEx(DWORD dwMilliseconds,
BOOL bAlertable)
}
+/*
+ * @implemented
+ */
VOID STDCALL
GetStartupInfoW(LPSTARTUPINFOW lpStartupInfo)
{
}
+/*
+ * @implemented
+ */
VOID STDCALL
GetStartupInfoA(LPSTARTUPINFOA lpStartupInfo)
{
}
+/*
+ * @implemented
+ */
BOOL STDCALL
FlushInstructionCache (HANDLE hProcess,
LPCVOID lpBaseAddress,
}
+/*
+ * @implemented
+ */
VOID STDCALL
ExitProcess(UINT uExitCode)
{
NtTerminateProcess (NtCurrentProcess (),
uExitCode);
+
+ /* should never get here */
+ assert(0);
+ while(1);
}
+/*
+ * @implemented
+ */
WINBOOL STDCALL
TerminateProcess (HANDLE hProcess,
UINT uExitCode)
}
+/*
+ * @unimplemented
+ */
VOID STDCALL
FatalAppExitA (UINT uAction,
LPCSTR lpMessageText)
}
+/*
+ * @unimplemented
+ */
VOID STDCALL
FatalAppExitW(UINT uAction,
LPCWSTR lpMessageText)
}
+/*
+ * @implemented
+ */
VOID STDCALL
FatalExit (int ExitCode)
{
}
+/*
+ * @implemented
+ */
DWORD STDCALL
GetPriorityClass (HANDLE hProcess)
{
}
-
+/*
+ * @implemented
+ */
WINBOOL STDCALL
SetPriorityClass (HANDLE hProcess,
DWORD dwPriorityClass)
}
+/*
+ * @implemented
+ */
DWORD STDCALL
-GetProcessVersion (DWORD ProcessId)
+GetProcessVersion (DWORD ProcessId)
{
DWORD Version = 0;
PIMAGE_NT_HEADERS NtHeader = NULL;
PVOID BaseAddress = NULL;
/* Caller's */
- if (0 == ProcessId)
+ if (0 == ProcessId || GetCurrentProcessId() == ProcessId)
{
BaseAddress = (PVOID) NtCurrentPeb()->ImageBaseAddress;
NtHeader = RtlImageNtHeader (BaseAddress);
return (Version);
}
-
-
/* EOF */