Files
mirror-processhacker/2.x/trunk/ProcessHacker/process.c
T
wj32 3c72f1c75c process item is working
git-svn-id: svn://svn.code.sf.net/p/processhacker/code@2339 21ef857c-d57f-4fe0-8362-d861dc6d29cd
2009-11-05 07:31:14 +00:00

93 lines
1.8 KiB
C

#define PROCESS_PRIVATE
#include <ph.h>
VOID PhpProcessItemDeleteProcedure(
__in PVOID Object,
__in ULONG Flags
);
PPH_OBJECT_TYPE PhProcessItemType;
BOOLEAN PhInitializeProcessItem()
{
return NT_SUCCESS(PhCreateObjectType(
&PhProcessItemType,
0,
PhpProcessItemDeleteProcedure
));
}
PPH_PROCESS_ITEM PhCreateProcessItem(
__in HANDLE ProcessId
)
{
PPH_PROCESS_ITEM processItem;
if (!NT_SUCCESS(PhCreateObject(
&processItem,
sizeof(PH_PROCESS_ITEM),
0,
PhProcessItemType,
0
)))
return NULL;
memset(processItem, 0, sizeof(PH_PROCESS_ITEM));
processItem->ProcessId = ProcessId;
return processItem;
}
VOID PhpProcessItemDeleteProcedure(
__in PVOID Object,
__in ULONG Flags
)
{
PPH_PROCESS_ITEM processItem = (PPH_PROCESS_ITEM)Object;
if (processItem->ProcessName)
PhDereferenceObject(processItem->ProcessName);
}
NTSTATUS PhEnumProcesses(
__out PPVOID Processes
)
{
NTSTATUS status;
PVOID buffer;
ULONG bufferSize = 2048;
buffer = PhAllocate(bufferSize);
while (TRUE)
{
if (!buffer)
return STATUS_INSUFFICIENT_RESOURCES;
status = NtQuerySystemInformation(
SystemProcessInformation,
buffer,
bufferSize,
&bufferSize
);
if (NT_SUCCESS(status))
break;
if (status == STATUS_BUFFER_TOO_SMALL || status == STATUS_INFO_LENGTH_MISMATCH)
{
PhFree(buffer);
buffer = PhAllocate(bufferSize);
}
else
{
PhFree(buffer);
return status;
}
}
*Processes = buffer;
return STATUS_SUCCESS;
}