mirror of
https://github.com/reactos/reactos.git
synced 2025-06-01 15:38:37 +00:00
PSAPI initial commit
svn path=/trunk/; revision=3120
This commit is contained in:
parent
77a2974988
commit
1a9ed68d15
11 changed files with 752 additions and 119 deletions
108
reactos/lib/psapi/enum/module.c
Normal file
108
reactos/lib/psapi/enum/module.c
Normal file
|
@ -0,0 +1,108 @@
|
|||
/* $Id: module.c,v 1.1 2002/06/18 22:12:51 hyperion Exp $
|
||||
*/
|
||||
/*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS system libraries
|
||||
* FILE: reactos/lib/psapi/enum/module.c
|
||||
* PURPOSE: Enumerate system modules
|
||||
* PROGRAMMER: KJK::Hyperion <noog@libero.it>
|
||||
* UPDATE HISTORY:
|
||||
* 10/06/2002: Created
|
||||
*/
|
||||
|
||||
#include <ddk/ntddk.h>
|
||||
#include <internal/psapi.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
NTSTATUS
|
||||
STDCALL
|
||||
PsaEnumerateSystemModules
|
||||
(
|
||||
OUT PVOID * Modules,
|
||||
IN ULONG ModulesLength,
|
||||
OUT ULONG * ReturnLength OPTIONAL
|
||||
)
|
||||
{
|
||||
NTSTATUS nErrCode = STATUS_SUCCESS;
|
||||
ULONG nSize = sizeof(ULONG);
|
||||
PULONG pnModuleCount = NULL;
|
||||
PSYSTEM_MODULE_ENTRY psmeCurModule;
|
||||
ULONG nBufSize;
|
||||
|
||||
/* ignore buffer size if buffer is null */
|
||||
if(Modules == NULL)
|
||||
ModulesLength = 0;
|
||||
/* ignore buffer if buffer size is zero */
|
||||
else if(ModulesLength == 0)
|
||||
Modules = NULL;
|
||||
|
||||
do
|
||||
{
|
||||
void * pTmp;
|
||||
|
||||
/* resize and/or move the buffer */
|
||||
pTmp = realloc(pnModuleCount, nSize);
|
||||
|
||||
if(pTmp == NULL)
|
||||
{
|
||||
/* failure */
|
||||
nErrCode = STATUS_NO_MEMORY;
|
||||
goto end;
|
||||
}
|
||||
|
||||
pnModuleCount = pTmp;
|
||||
|
||||
/* query the information */
|
||||
nErrCode = NtQuerySystemInformation
|
||||
(
|
||||
SystemModuleInformation,
|
||||
pnModuleCount,
|
||||
nSize,
|
||||
NULL
|
||||
);
|
||||
|
||||
/* while this is less efficient than doubling the buffer size, it should be
|
||||
executed only once in most cases */
|
||||
nSize += sizeof(SYSTEM_MODULE_ENTRY) * (*pnModuleCount);
|
||||
}
|
||||
/* repeat until the buffer is big enough */
|
||||
while(nErrCode == STATUS_INFO_LENGTH_MISMATCH);
|
||||
|
||||
/* the array of modules starts right after an ULONG storing their count */
|
||||
psmeCurModule = (PSYSTEM_MODULE_ENTRY)(pnModuleCount + 1);
|
||||
|
||||
/* element count */
|
||||
nBufSize = ModulesLength / sizeof(*Modules);
|
||||
|
||||
/* not enough elements in the buffer */
|
||||
if((*pnModuleCount) > nBufSize)
|
||||
nErrCode = STATUS_INFO_LENGTH_MISMATCH;
|
||||
/* too many elements in the buffer */
|
||||
else
|
||||
nBufSize = *pnModuleCount;
|
||||
|
||||
/* return the needed buffer size */
|
||||
if(ReturnLength)
|
||||
(*ReturnLength) = (*pnModuleCount) * sizeof(*Modules);
|
||||
|
||||
/* repeat until the buffer is empty or all modules have been returned */
|
||||
while(nBufSize > 0)
|
||||
{
|
||||
/* return current module base */
|
||||
(*Modules) = psmeCurModule->BaseAddress;
|
||||
|
||||
/* next buffer element */
|
||||
Modules ++;
|
||||
nBufSize --;
|
||||
|
||||
/* next module */
|
||||
psmeCurModule ++;
|
||||
}
|
||||
|
||||
end:
|
||||
free(pnModuleCount);
|
||||
return (nErrCode);
|
||||
}
|
||||
|
||||
/* EOF */
|
||||
|
138
reactos/lib/psapi/enum/process.c
Normal file
138
reactos/lib/psapi/enum/process.c
Normal file
|
@ -0,0 +1,138 @@
|
|||
/* $Id: process.c,v 1.1 2002/06/18 22:12:51 hyperion Exp $
|
||||
*/
|
||||
/*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS system libraries
|
||||
* FILE: reactos/lib/psapi/enum/process.c
|
||||
* PURPOSE: Enumerate process ids
|
||||
* PROGRAMMER: KJK::Hyperion <noog@libero.it>
|
||||
* UPDATE HISTORY:
|
||||
* 10/06/2002: Created
|
||||
*/
|
||||
|
||||
#include <ddk/ntddk.h>
|
||||
#include <internal/psapi.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
NTSTATUS
|
||||
STDCALL
|
||||
PsaEnumerateProcessIds
|
||||
(
|
||||
OUT ULONG * ProcessIds,
|
||||
IN ULONG ProcessIdsLength,
|
||||
OUT ULONG * ReturnLength OPTIONAL
|
||||
)
|
||||
{
|
||||
NTSTATUS nErrCode = STATUS_SUCCESS;
|
||||
ULONG nSize = 32768;
|
||||
SYSTEM_PROCESS_INFORMATION * pInfoBuffer = NULL;
|
||||
SYSTEM_PROCESS_INFORMATION * pInfoHead = NULL;
|
||||
ULONG nBufSize;
|
||||
ULONG nRetLen = 0;
|
||||
|
||||
/* ignore buffer size if buffer is null */
|
||||
if(ProcessIds == NULL)
|
||||
ProcessIdsLength = 0;
|
||||
/* ignore buffer if buffer size is zero */
|
||||
else if(ProcessIdsLength == 0)
|
||||
ProcessIds = NULL;
|
||||
|
||||
do
|
||||
{
|
||||
void * pTmp;
|
||||
|
||||
/* resize and/or move the buffer */
|
||||
pTmp = realloc(pInfoBuffer, nSize);
|
||||
|
||||
if(pTmp == NULL)
|
||||
{
|
||||
/* failure */
|
||||
nErrCode = STATUS_NO_MEMORY;
|
||||
goto end;
|
||||
}
|
||||
|
||||
pInfoBuffer = pTmp;
|
||||
|
||||
/* query the information */
|
||||
nErrCode = NtQuerySystemInformation
|
||||
(
|
||||
SystemProcessesAndThreadsInformation,
|
||||
pInfoBuffer,
|
||||
nSize,
|
||||
NULL
|
||||
);
|
||||
|
||||
/* double the buffer size */
|
||||
nSize += nSize;
|
||||
}
|
||||
/* repeat until the buffer is big enough */
|
||||
while(nErrCode == STATUS_INFO_LENGTH_MISMATCH);
|
||||
|
||||
/* failure */
|
||||
if(!NT_SUCCESS(nErrCode))
|
||||
goto end;
|
||||
|
||||
/* size of ProcessIds in elements */
|
||||
nBufSize = ProcessIdsLength / sizeof(*ProcessIds);
|
||||
/* list head */
|
||||
pInfoHead = pInfoBuffer;
|
||||
|
||||
/* repeat until the buffer is empty */
|
||||
while(nBufSize > 0)
|
||||
{
|
||||
/* return the current process id */
|
||||
(*ProcessIds) = pInfoHead->ProcessId;
|
||||
|
||||
/* move to the next buffer entry */
|
||||
ProcessIds ++;
|
||||
nBufSize --;
|
||||
nRetLen ++;
|
||||
|
||||
/* end of process list */
|
||||
if(pInfoHead->RelativeOffset == 0)
|
||||
break;
|
||||
|
||||
/* move to the next process */
|
||||
pInfoHead =
|
||||
(SYSTEM_PROCESS_INFORMATION*)
|
||||
((ULONG)pInfoHead + pInfoHead->RelativeOffset);
|
||||
}
|
||||
|
||||
if(pInfoHead->RelativeOffset == 0)
|
||||
/* all process ids were returned */
|
||||
nErrCode = STATUS_SUCCESS;
|
||||
else
|
||||
{
|
||||
/* insufficient buffer */
|
||||
nErrCode = STATUS_INFO_LENGTH_MISMATCH;
|
||||
|
||||
/* caller doesn't need buffer size */
|
||||
if(ReturnLength == NULL)
|
||||
goto end;
|
||||
|
||||
/* repeat while there are still processes */
|
||||
while(pInfoHead->RelativeOffset != 0)
|
||||
{
|
||||
pInfoHead =
|
||||
(SYSTEM_PROCESS_INFORMATION*)
|
||||
((ULONG)pInfoHead + pInfoHead->RelativeOffset);
|
||||
|
||||
nRetLen++;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* used buffer size */
|
||||
if(ReturnLength)
|
||||
(*ReturnLength) = nRetLen * sizeof(DWORD);
|
||||
|
||||
end:
|
||||
/* free the buffer */
|
||||
free(pInfoBuffer);
|
||||
|
||||
/* return the last status */
|
||||
return (nErrCode);
|
||||
}
|
||||
|
||||
/* EOF */
|
||||
|
61
reactos/lib/psapi/include/internal/psapi.h
Normal file
61
reactos/lib/psapi/include/internal/psapi.h
Normal file
|
@ -0,0 +1,61 @@
|
|||
/* $Id: psapi.h,v 1.1 2002/06/18 22:15:57 hyperion Exp $
|
||||
*/
|
||||
/*
|
||||
* internal/psapi.h
|
||||
*
|
||||
* Process Status Helper API
|
||||
*
|
||||
* This file is part of the ReactOS Operating System.
|
||||
*
|
||||
* Contributors:
|
||||
* Created by KJK::Hyperion <noog@libero.it>
|
||||
*
|
||||
* THIS SOFTWARE IS NOT COPYRIGHTED
|
||||
*
|
||||
* This source code is offered for use in the public domain. You may
|
||||
* use, modify or distribute it freely.
|
||||
*
|
||||
* This code is distributed in the hope that it will be useful but
|
||||
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
|
||||
* DISCLAMED. This includes but is not limited to warranties of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __INTERNAL_PSAPI_H_INCLUDED__
|
||||
#define __INTERNAL_PSAPI_H_INCLUDED__
|
||||
|
||||
/* INCLUDES */
|
||||
#include <ddk/ntddk.h>
|
||||
|
||||
/* OBJECTS */
|
||||
|
||||
/* TYPES */
|
||||
|
||||
/* CONSTANTS */
|
||||
|
||||
/* PROTOTYPES */
|
||||
NTSTATUS
|
||||
STDCALL
|
||||
PsaEnumerateProcessIds
|
||||
(
|
||||
OUT ULONG * ProcessIds,
|
||||
IN ULONG ProcessIdsLength,
|
||||
OUT ULONG * ReturnLength OPTIONAL
|
||||
);
|
||||
|
||||
NTSTATUS
|
||||
STDCALL
|
||||
PsaEnumerateSystemModules
|
||||
(
|
||||
OUT PVOID * Modules,
|
||||
IN ULONG ModulesLength,
|
||||
OUT ULONG * ReturnLength OPTIONAL
|
||||
);
|
||||
|
||||
/* MACROS */
|
||||
|
||||
#endif /* __INTERNAL_PSAPI_H_INCLUDED__ */
|
||||
|
||||
/* EOF */
|
||||
|
|
@ -1,24 +1,28 @@
|
|||
# $Id: makefile,v 1.1 2001/11/28 23:35:16 ea Exp $
|
||||
# $Id: makefile,v 1.2 2002/06/18 22:15:57 hyperion Exp $
|
||||
|
||||
PATH_TO_TOP = ../..
|
||||
|
||||
TARGET_TYPE = dynlink
|
||||
|
||||
TARGET_PATH = misc
|
||||
|
||||
TARGET_NAME = psapi
|
||||
|
||||
TARGET_SDKLIBS = ntdll.a kernel32.a
|
||||
|
||||
TARGET_CFLAGS = -I./include -Wall
|
||||
|
||||
TARGET_LFLAGS = -nostdlib
|
||||
|
||||
TARGET_BASE = 0x68F70000
|
||||
|
||||
TARGET_OBJECTS = \
|
||||
misc/dllmain.o \
|
||||
misc/malloc.o \
|
||||
misc/stubs.o \
|
||||
$(TARGET_NAME).coff
|
||||
misc/win32.o \
|
||||
enum/module.o \
|
||||
enum/process.o
|
||||
|
||||
include $(PATH_TO_TOP)/rules.mak
|
||||
|
||||
include $(TOOLS_PATH)/helper.mk
|
||||
|
||||
TARGET_CLEAN = *.o *.coff misc/*.o
|
||||
|
||||
# EOF
|
||||
|
|
|
@ -1,24 +1,16 @@
|
|||
/* $Id: dllmain.c,v 1.1 2001/11/28 23:35:16 ea Exp $
|
||||
/* $Id: dllmain.c,v 1.2 2002/06/18 22:15:58 hyperion Exp $
|
||||
*
|
||||
* ReactOS PSAPI.DLL
|
||||
*/
|
||||
#include <windows.h>
|
||||
BOOLEAN __stdcall DllMain(
|
||||
PVOID hinstDll,
|
||||
ULONG dwReason,
|
||||
PVOID reserved)
|
||||
|
||||
BOOLEAN STDCALL DllMain
|
||||
(
|
||||
PVOID hinstDll,
|
||||
ULONG dwReason,
|
||||
PVOID reserved
|
||||
)
|
||||
{
|
||||
switch (dwReason)
|
||||
{
|
||||
case DLL_PROCESS_ATTACH:
|
||||
break;
|
||||
case DLL_THREAD_ATTACH:
|
||||
break;
|
||||
case DLL_THREAD_DETACH:
|
||||
break;
|
||||
case DLL_PROCESS_DETACH:
|
||||
break;
|
||||
}
|
||||
return (TRUE);
|
||||
return (TRUE);
|
||||
}
|
||||
/* EOF */
|
||||
|
|
62
reactos/lib/psapi/misc/malloc.c
Normal file
62
reactos/lib/psapi/misc/malloc.c
Normal file
|
@ -0,0 +1,62 @@
|
|||
/*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS system libraries
|
||||
* FILE: reactos/lib/psapi/misc/malloc.c
|
||||
* PURPOSE: Memory allocator for PSAPI
|
||||
* PROGRAMMER: KJK::Hyperion <noog@libero.it>
|
||||
* UPDATE HISTORY:
|
||||
* 10/06/2002: Created
|
||||
*/
|
||||
|
||||
#include <ddk/ntddk.h>
|
||||
#include <napi/teb.h>
|
||||
#include <ntos/heap.h>
|
||||
|
||||
PVOID STDCALL MemAlloc
|
||||
(
|
||||
IN HANDLE Heap,
|
||||
IN PVOID Ptr,
|
||||
IN ULONG Size
|
||||
)
|
||||
{
|
||||
PVOID pBuf = NULL;
|
||||
|
||||
if(Size == 0 && Ptr == NULL)
|
||||
return (NULL);
|
||||
|
||||
if(Heap == NULL)
|
||||
Heap = NtCurrentPeb()->ProcessHeap;
|
||||
|
||||
if(Size > 0)
|
||||
{
|
||||
if(Ptr == NULL)
|
||||
/* malloc */
|
||||
pBuf = RtlAllocateHeap(Heap, 0, Size);
|
||||
else
|
||||
/* realloc */
|
||||
pBuf = RtlReAllocateHeap(Heap, 0, Ptr, Size);
|
||||
}
|
||||
else
|
||||
/* free */
|
||||
RtlFreeHeap(Heap, 0, Ptr);
|
||||
|
||||
return pBuf;
|
||||
}
|
||||
|
||||
void *malloc(size_t size)
|
||||
{
|
||||
return MemAlloc(NULL, NULL, size);
|
||||
}
|
||||
|
||||
void *realloc(void *ptr, size_t size)
|
||||
{
|
||||
return MemAlloc(NULL, ptr, size);
|
||||
}
|
||||
|
||||
void free(void *ptr)
|
||||
{
|
||||
MemAlloc(NULL, ptr, 0);
|
||||
}
|
||||
|
||||
/* EOF */
|
||||
|
|
@ -1,145 +1,191 @@
|
|||
/* $Id: stubs.c,v 1.1 2001/11/28 23:35:16 ea Exp $ */
|
||||
/* $Id: stubs.c,v 1.2 2002/06/18 22:15:58 hyperion Exp $ */
|
||||
#include <windows.h>
|
||||
#include <psapi.h>
|
||||
|
||||
BOOL STDCALL
|
||||
EmptyWorkingSet(HANDLE hProcess)
|
||||
#if 0
|
||||
BOOL STDCALL EnumPageFiles(
|
||||
PENUM_PAGE_CALLBACKW pCallbackRoutine,
|
||||
LPVOID lpContext
|
||||
)
|
||||
{
|
||||
return FALSE;
|
||||
SetLastError(ERROR_INVALID_FUNCTION);
|
||||
return FALSE;
|
||||
}
|
||||
#endif
|
||||
BOOL STDCALL EnumProcessModules(
|
||||
HANDLE hProcess, // handle to process
|
||||
HMODULE *lphModule, // array of module handles
|
||||
DWORD cb, // size of array
|
||||
LPDWORD lpcbNeeded // number of bytes required
|
||||
)
|
||||
{
|
||||
SetLastError(ERROR_INVALID_FUNCTION);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
BOOL STDCALL
|
||||
EnumDeviceDrivers(
|
||||
LPVOID *lpImageBase,
|
||||
DWORD cb,
|
||||
LPDWORD lpcbNeeded)
|
||||
DWORD STDCALL GetDeviceDriverBaseNameA(
|
||||
LPVOID ImageBase, // driver load address
|
||||
LPSTR lpBaseName, // driver base name buffer
|
||||
DWORD nSize // size of buffer
|
||||
)
|
||||
{
|
||||
return FALSE;
|
||||
SetLastError(ERROR_INVALID_FUNCTION);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
BOOL STDCALL
|
||||
EnumPageFiles(
|
||||
PENUM_PAGE_CALLBACKW pCallbackRoutine,
|
||||
LPVOID lpContext)
|
||||
DWORD STDCALL GetDeviceDriverBaseNameW(
|
||||
LPVOID ImageBase, // driver load address
|
||||
LPWSTR lpBaseName, // driver base name buffer
|
||||
DWORD nSize // size of buffer
|
||||
)
|
||||
{
|
||||
return FALSE;
|
||||
SetLastError(ERROR_INVALID_FUNCTION);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
BOOL STDCALL EnumProcesses(
|
||||
DWORD *lpidProcess,
|
||||
DWORD cb,
|
||||
DWORD *cbNeeded)
|
||||
DWORD STDCALL GetDeviceDriverFileNameA(
|
||||
LPVOID ImageBase, // driver load address
|
||||
LPSTR lpFilename, // path buffer
|
||||
DWORD nSize // size of buffer
|
||||
)
|
||||
{
|
||||
return FALSE;
|
||||
SetLastError(ERROR_INVALID_FUNCTION);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
BOOL STDCALL
|
||||
EnumProcessModules(
|
||||
HANDLE hProcess,
|
||||
HMODULE *lphModule,
|
||||
DWORD cb,
|
||||
LPDWORD lpcbNeeded)
|
||||
DWORD STDCALL GetDeviceDriverFileNameW(
|
||||
LPVOID ImageBase, // driver load address
|
||||
LPWSTR lpFilename, // path buffer
|
||||
DWORD nSize // size of buffer
|
||||
)
|
||||
{
|
||||
return FALSE;
|
||||
SetLastError(ERROR_INVALID_FUNCTION);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
DWORD STDCALL
|
||||
GetDeviceDriverBaseName(
|
||||
LPVOID ImageBase,
|
||||
LPTSTR lpBaseName,
|
||||
DWORD nSize)
|
||||
DWORD STDCALL GetMappedFileNameA(
|
||||
HANDLE hProcess, // handle to process
|
||||
LPVOID lpv, // address to verify
|
||||
LPSTR lpFilename, // file name buffer
|
||||
DWORD nSize // size of buffer
|
||||
)
|
||||
{
|
||||
return 0;
|
||||
SetLastError(ERROR_INVALID_FUNCTION);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
DWORD STDCALL GetDeviceDriverFileName(
|
||||
LPVOID ImageBase,
|
||||
LPTSTR lpFilename,
|
||||
DWORD nSize)
|
||||
DWORD STDCALL GetMappedFileNameW(
|
||||
HANDLE hProcess, // handle to process
|
||||
LPVOID lpv, // address to verify
|
||||
LPWSTR lpFilename, // file name buffer
|
||||
DWORD nSize // size of buffer
|
||||
)
|
||||
{
|
||||
return 0;
|
||||
SetLastError(ERROR_INVALID_FUNCTION);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
DWORD STDCALL
|
||||
GetMappedFileName(
|
||||
HANDLE hProcess,
|
||||
LPVOID lpv,
|
||||
LPTSTR lpFilename,
|
||||
DWORD nSize)
|
||||
DWORD STDCALL GetModuleBaseNameA(
|
||||
HANDLE hProcess, // handle to process
|
||||
HMODULE hModule, // handle to module
|
||||
LPSTR lpBaseName, // base name buffer
|
||||
DWORD nSize // maximum characters to retrieve
|
||||
)
|
||||
{
|
||||
return 0;
|
||||
SetLastError(ERROR_INVALID_FUNCTION);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
DWORD STDCALL
|
||||
GetModuleBaseName(
|
||||
HANDLE hProcess,
|
||||
HMODULE hModule,
|
||||
LPTSTR lpBaseName,
|
||||
DWORD nSize)
|
||||
DWORD STDCALL GetModuleBaseNameW(
|
||||
HANDLE hProcess, // handle to process
|
||||
HMODULE hModule, // handle to module
|
||||
LPWSTR lpBaseName, // base name buffer
|
||||
DWORD nSize // maximum characters to retrieve
|
||||
)
|
||||
{
|
||||
return 0;
|
||||
SetLastError(ERROR_INVALID_FUNCTION);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
DWORD STDCALL
|
||||
GetModuleFileNameEx(
|
||||
HANDLE hProcess,
|
||||
HMODULE hModule,
|
||||
LPTSTR lpFilename,
|
||||
DWORD nSize)
|
||||
DWORD STDCALL GetModuleFileNameExA(
|
||||
HANDLE hProcess, // handle to process
|
||||
HMODULE hModule, // handle to module
|
||||
LPSTR lpFilename, // path buffer
|
||||
DWORD nSize // maximum characters to retrieve
|
||||
)
|
||||
{
|
||||
return 0;
|
||||
SetLastError(ERROR_INVALID_FUNCTION);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
BOOL STDCALL
|
||||
GetModuleInformation(
|
||||
HANDLE hProcess,
|
||||
HMODULE hModule,
|
||||
LPMODULEINFO lpmodinfo,
|
||||
DWORD cb)
|
||||
DWORD STDCALL GetModuleFileNameExW(
|
||||
HANDLE hProcess, // handle to process
|
||||
HMODULE hModule, // handle to module
|
||||
LPWSTR lpFilename, // path buffer
|
||||
DWORD nSize // maximum characters to retrieve
|
||||
)
|
||||
{
|
||||
return FALSE;
|
||||
SetLastError(ERROR_INVALID_FUNCTION);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
BOOL STDCALL
|
||||
GetPerformanceInfo(
|
||||
BOOL STDCALL GetModuleInformation(
|
||||
HANDLE hProcess, // handle to process
|
||||
HMODULE hModule, // handle to module
|
||||
LPMODULEINFO lpmodinfo, // information buffer
|
||||
DWORD cb // size of buffer
|
||||
)
|
||||
{
|
||||
SetLastError(ERROR_INVALID_FUNCTION);
|
||||
return FALSE;
|
||||
}
|
||||
#if 0
|
||||
BOOL STDCALL GetPerformanceInfo(
|
||||
PPERFORMANCE_INFORMATION pPerformanceInformation,
|
||||
DWORD cb)
|
||||
DWORD cb
|
||||
|
||||
)
|
||||
{
|
||||
return FALSE;
|
||||
SetLastError(ERROR_INVALID_FUNCTION);
|
||||
return FALSE;
|
||||
}
|
||||
#endif
|
||||
BOOL STDCALL GetProcessMemoryInfo(
|
||||
HANDLE Process, // handle to process
|
||||
PPROCESS_MEMORY_COUNTERS ppsmemCounters, // buffer
|
||||
DWORD cb // size of buffer
|
||||
)
|
||||
{
|
||||
SetLastError(ERROR_INVALID_FUNCTION);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
BOOL STDCALL
|
||||
GetProcessMemoryInfo(
|
||||
HANDLE Process,
|
||||
PPROCESS_MEMORY_COUNTERS ppsmemCounters,
|
||||
DWORD cb)
|
||||
BOOL STDCALL GetWsChanges(
|
||||
HANDLE hProcess, // handle to process
|
||||
PPSAPI_WS_WATCH_INFORMATION lpWatchInfo, // buffer
|
||||
DWORD cb // size of buffer
|
||||
)
|
||||
{
|
||||
return FALSE;
|
||||
SetLastError(ERROR_INVALID_FUNCTION);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
BOOL STDCALL
|
||||
GetWsChanges(
|
||||
HANDLE hProcess,
|
||||
PPSAPI_WS_WATCH_INFORMATION lpWatchInfo,
|
||||
DWORD cb)
|
||||
BOOL STDCALL InitializeProcessForWsWatch(
|
||||
HANDLE hProcess // handle to process
|
||||
)
|
||||
{
|
||||
return FALSE;
|
||||
SetLastError(ERROR_INVALID_FUNCTION);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
BOOL STDCALL
|
||||
InitializeProcessForWsWatch(
|
||||
HANDLE hProcess)
|
||||
BOOL STDCALL QueryWorkingSet(
|
||||
HANDLE hProcess, // handle to process
|
||||
PVOID pv, // information buffer
|
||||
DWORD cb // size of buffer
|
||||
)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
BOOL STDCALL
|
||||
QueryWorkingSet(
|
||||
HANDLE hProcess,
|
||||
PVOID pv,
|
||||
DWORD cb)
|
||||
{
|
||||
return FALSE;
|
||||
SetLastError(ERROR_INVALID_FUNCTION);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* EOF */
|
||||
|
|
136
reactos/lib/psapi/misc/win32.c
Normal file
136
reactos/lib/psapi/misc/win32.c
Normal file
|
@ -0,0 +1,136 @@
|
|||
/* $Id: win32.c,v 1.1 2002/06/18 22:14:07 hyperion Exp $
|
||||
*/
|
||||
/*
|
||||
* COPYRIGHT: See COPYING in the top level directory
|
||||
* PROJECT: ReactOS system libraries
|
||||
* FILE: reactos/lib/psapi/misc/win32.c
|
||||
* PURPOSE: Win32 stubs for PSAPI
|
||||
* PROGRAMMER: KJK::Hyperion <noog@libero.it>
|
||||
* UPDATE HISTORY:
|
||||
* 10/06/2002: Created
|
||||
*/
|
||||
|
||||
#include <windows.h>
|
||||
#include <internal/psapi.h>
|
||||
#include <psapi.h>
|
||||
|
||||
BOOL STDCALL EmptyWorkingSet(HANDLE hProcess)
|
||||
{
|
||||
NTSTATUS nErrCode;
|
||||
QUOTA_LIMITS qlProcessQuota;
|
||||
|
||||
/* query the working set */
|
||||
nErrCode = NtQueryInformationProcess
|
||||
(
|
||||
hProcess,
|
||||
ProcessQuotaLimits,
|
||||
&qlProcessQuota,
|
||||
sizeof(qlProcessQuota),
|
||||
NULL
|
||||
);
|
||||
|
||||
/* failure */
|
||||
if(!NT_SUCCESS(nErrCode))
|
||||
goto fail;
|
||||
|
||||
/* empty the working set */
|
||||
qlProcessQuota.MinimumWorkingSetSize = -1;
|
||||
qlProcessQuota.MaximumWorkingSetSize = -1;
|
||||
|
||||
/* set the working set */
|
||||
nErrCode = NtSetInformationProcess
|
||||
(
|
||||
hProcess,
|
||||
ProcessQuotaLimits,
|
||||
&qlProcessQuota,
|
||||
sizeof(qlProcessQuota)
|
||||
);
|
||||
|
||||
/* success */
|
||||
if(NT_SUCCESS(nErrCode))
|
||||
return (TRUE);
|
||||
|
||||
fail:
|
||||
/* failure */
|
||||
SetLastError(RtlNtStatusToDosError(nErrCode));
|
||||
return (FALSE);
|
||||
}
|
||||
|
||||
BOOL STDCALL EnumDeviceDrivers
|
||||
(
|
||||
LPVOID *lpImageBase,
|
||||
DWORD cb,
|
||||
LPDWORD lpcbNeeded
|
||||
)
|
||||
{
|
||||
NTSTATUS nErrCode;
|
||||
|
||||
/* do nothing if the buffer is empty */
|
||||
if(cb < sizeof(DWORD) || lpImageBase == NULL)
|
||||
{
|
||||
*lpcbNeeded = 0;
|
||||
return (TRUE);
|
||||
}
|
||||
|
||||
/* enumerate the system modules */
|
||||
nErrCode = PsaEnumerateSystemModules(lpImageBase, cb, lpcbNeeded);
|
||||
|
||||
/* success */
|
||||
if(NT_SUCCESS(nErrCode))
|
||||
return (TRUE);
|
||||
|
||||
/* failure or partial success */
|
||||
if(nErrCode == STATUS_INFO_LENGTH_MISMATCH)
|
||||
{
|
||||
/* insufficient buffer: ignore this error */
|
||||
*lpcbNeeded = cb;
|
||||
return (TRUE);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* failure */
|
||||
SetLastError(RtlNtStatusToDosError(nErrCode));
|
||||
return (FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
BOOL STDCALL EnumProcesses
|
||||
(
|
||||
DWORD *lpidProcess,
|
||||
DWORD cb,
|
||||
LPDWORD lpcbNeeded
|
||||
)
|
||||
{
|
||||
NTSTATUS nErrCode;
|
||||
|
||||
/* do nothing if the buffer is empty */
|
||||
if(cb < sizeof(DWORD) || lpidProcess == NULL)
|
||||
{
|
||||
*lpcbNeeded = 0;
|
||||
return (TRUE);
|
||||
}
|
||||
|
||||
/* enumerate the process ids */
|
||||
nErrCode = PsaEnumerateProcessIds(lpidProcess, cb, lpcbNeeded);
|
||||
|
||||
/* success */
|
||||
if(NT_SUCCESS(nErrCode))
|
||||
return (TRUE);
|
||||
|
||||
/* failure or partial success */
|
||||
if(nErrCode == STATUS_INFO_LENGTH_MISMATCH)
|
||||
{
|
||||
/* insufficient buffer: ignore this error */
|
||||
*lpcbNeeded = cb;
|
||||
return (TRUE);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* failure */
|
||||
SetLastError(RtlNtStatusToDosError(nErrCode));
|
||||
return (FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
/* EOF */
|
||||
|
24
reactos/lib/psapi/psapi.def
Normal file
24
reactos/lib/psapi/psapi.def
Normal file
|
@ -0,0 +1,24 @@
|
|||
; $Id: psapi.def,v 1.1 2002/06/18 22:11:55 hyperion Exp $
|
||||
;
|
||||
|
||||
LIBRARY PSAPI.DLL
|
||||
EXPORTS
|
||||
EmptyWorkingSet@4
|
||||
EnumDeviceDrivers@12
|
||||
EnumProcessModules@16
|
||||
EnumProcesses@12
|
||||
GetDeviceDriverBaseNameA@12
|
||||
GetDeviceDriverBaseNameW@12
|
||||
GetDeviceDriverFileNameA@12
|
||||
GetDeviceDriverFileNameW@12
|
||||
GetMappedFileNameA@16
|
||||
GetMappedFileNameW@16
|
||||
GetModuleBaseNameA@16
|
||||
GetModuleBaseNameW@16
|
||||
GetModuleFileNameExA@16
|
||||
GetModuleFileNameExW@16
|
||||
GetModuleInformation@16
|
||||
GetProcessMemoryInfo@12
|
||||
GetWsChanges@12
|
||||
InitializeProcessForWsWatch@4
|
||||
QueryWorkingSet@12
|
24
reactos/lib/psapi/psapi.edf
Normal file
24
reactos/lib/psapi/psapi.edf
Normal file
|
@ -0,0 +1,24 @@
|
|||
; $Id: psapi.edf,v 1.1 2002/06/18 22:16:53 hyperion Exp $
|
||||
;
|
||||
|
||||
LIBRARY PSAPI.DLL
|
||||
EXPORTS
|
||||
EmptyWorkingSet=EmptyWorkingSet@4
|
||||
EnumDeviceDrivers=EnumDeviceDrivers@12
|
||||
EnumProcessModules=EnumProcessModules@16
|
||||
EnumProcesses=EnumProcesses@12
|
||||
GetDeviceDriverBaseNameA=GetDeviceDriverBaseNameA@12
|
||||
GetDeviceDriverBaseNameW=GetDeviceDriverBaseNameW@12
|
||||
GetDeviceDriverFileNameA=GetDeviceDriverFileNameA@12
|
||||
GetDeviceDriverFileNameW=GetDeviceDriverFileNameW@12
|
||||
GetMappedFileNameA=GetMappedFileNameA@16
|
||||
GetMappedFileNameW=GetMappedFileNameW@16
|
||||
GetModuleBaseNameA=GetModuleBaseNameA@16
|
||||
GetModuleBaseNameW=GetModuleBaseNameW@16
|
||||
GetModuleFileNameExA=GetModuleFileNameExA@16
|
||||
GetModuleFileNameExW=GetModuleFileNameExW@16
|
||||
GetModuleInformation=GetModuleInformation@16
|
||||
GetProcessMemoryInfo=GetProcessMemoryInfo@12
|
||||
GetWsChanges=GetWsChanges@12
|
||||
InitializeProcessForWsWatch=InitializeProcessForWsWatch@4
|
||||
QueryWorkingSet=QueryWorkingSet@12
|
38
reactos/lib/psapi/psapi.rc
Normal file
38
reactos/lib/psapi/psapi.rc
Normal file
|
@ -0,0 +1,38 @@
|
|||
#include <defines.h>
|
||||
#include <reactos/resource.h>
|
||||
|
||||
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
||||
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION RES_UINT_FV_MAJOR,RES_UINT_FV_MINOR,RES_UINT_FV_REVISION,RES_UINT_FV_BUILD
|
||||
PRODUCTVERSION RES_UINT_PV_MAJOR,RES_UINT_PV_MINOR,RES_UINT_PV_REVISION,RES_UINT_PV_BUILD
|
||||
FILEFLAGSMASK 0x3fL
|
||||
#ifdef _DEBUG
|
||||
FILEFLAGS 0x1L
|
||||
#else
|
||||
FILEFLAGS 0x0L
|
||||
#endif
|
||||
FILEOS 0x40004L
|
||||
FILETYPE 0x2L
|
||||
FILESUBTYPE 0x0L
|
||||
BEGIN
|
||||
BLOCK "StringFileInfo"
|
||||
BEGIN
|
||||
BLOCK "040904b0"
|
||||
BEGIN
|
||||
VALUE "CompanyName", RES_STR_COMPANY_NAME
|
||||
VALUE "FileDescription", "Process Status Helper\0"
|
||||
VALUE "FileVersion", RES_STR_FILE_VERSION
|
||||
VALUE "InternalName", "psapi\0"
|
||||
VALUE "LegalCopyright", RES_STR_LEGAL_COPYRIGHT
|
||||
VALUE "OriginalFilename", "psapi.dll\0"
|
||||
VALUE "ProductName", RES_STR_PRODUCT_NAME
|
||||
VALUE "ProductVersion", RES_STR_PRODUCT_VERSION
|
||||
END
|
||||
END
|
||||
BLOCK "VarFileInfo"
|
||||
BEGIN
|
||||
VALUE "Translation", 0x409, 1200
|
||||
END
|
||||
END
|
||||
|
Loading…
Reference in a new issue