Go to the documentation of this file.00001
00002 #ifndef GAUDIKERNEL_PROCESS_H
00003 #define GAUDIKERNEL_PROCESS_H
00004
00005
00006 #include "GaudiKernel/Kernel.h"
00007 #include "GaudiKernel/SystemBase.h"
00008
00009 namespace System {
00010
00011 class ProcessDescriptor;
00013 ProcessDescriptor* getProcess();
00014
00018 typedef struct _PEB *PPEB;
00019 struct PROCESS_BASIC_INFORMATION {
00020 long ExitStatus;
00021 PPEB PebBaseAddress;
00022 unsigned long AffinityMask;
00023 long BasePriority;
00024 unsigned long UniqueProcessId;
00025 unsigned long InheritedFromUniqueProcessId;
00026 };
00027
00033 struct QUOTA_LIMITS {
00034 unsigned long PagedPoolLimit;
00035 unsigned long NonPagedPoolLimit;
00036 unsigned long MinimumWorkingSetSize;
00037 unsigned long MaximumWorkingSetSize;
00038 unsigned long PagefileLimit;
00039 longlong TimeLimit;
00040 };
00041
00045 struct IO_COUNTERS {
00046 unsigned long ReadOperationCount;
00047 unsigned long WriteOperationCount;
00048 unsigned long OtherOperationCount;
00049
00050
00051
00052 longlong ReadTransferCount;
00053 longlong WriteTransferCount;
00054 longlong OtherTransferCount;
00055 };
00056
00060 struct VM_COUNTERS {
00061 unsigned long PeakVirtualSize;
00062 unsigned long VirtualSize;
00063 unsigned long PageFaultCount;
00064 unsigned long PeakWorkingSetSize;
00065 unsigned long WorkingSetSize;
00066 unsigned long QuotaPeakPagedPoolUsage;
00067 unsigned long QuotaPagedPoolUsage;
00068 unsigned long QuotaPeakNonPagedPoolUsage;
00069 unsigned long QuotaNonPagedPoolUsage;
00070 unsigned long PagefileUsage;
00071 unsigned long PeakPagefileUsage;
00072 };
00073
00074
00078 struct POOLED_USAGE_AND_LIMITS {
00079 unsigned long PeakPagedPoolUsage;
00080 unsigned long PagedPoolUsage;
00081 unsigned long PagedPoolLimit;
00082 unsigned long PeakNonPagedPoolUsage;
00083 unsigned long NonPagedPoolUsage;
00084 unsigned long NonPagedPoolLimit;
00085 unsigned long PeakPagefileUsage;
00086 unsigned long PagefileUsage;
00087 unsigned long PagefileLimit;
00088 };
00089
00094 struct KERNEL_USER_TIMES {
00095 longlong CreateTime;
00096 longlong ExitTime;
00097 longlong KernelTime;
00098 longlong UserTime;
00099
00100 };
00101
00110 class ProcessDescriptor {
00111 class ProcessHandle {
00112 void* m_handle;
00113 bool m_needRelease;
00114 public:
00115 ProcessHandle(long pid);
00116 virtual ~ProcessHandle();
00117 long item() {
00118 return m_needRelease ? 1 : 0;
00119 }
00120 void* handle() {
00121 return m_handle;
00122 }
00123 };
00124 long m_PRIORITYBOOST[2];
00125 IO_COUNTERS m_IO_COUNTERS[2];
00126 VM_COUNTERS m_VM_COUNTERS[2];
00127 KERNEL_USER_TIMES m_KERNEL_USER_TIMES[2];
00128 POOLED_USAGE_AND_LIMITS m_POOLED_USAGE_AND_LIMITS[2];
00129 QUOTA_LIMITS m_QUOTA_LIMITS[2];
00130 PROCESS_BASIC_INFORMATION m_PROCESS_BASIC_INFORMATION[2];
00131 public:
00132 ProcessDescriptor();
00133 virtual ~ProcessDescriptor();
00134 long query(long pid, InfoType info, PROCESS_BASIC_INFORMATION* buffer);
00135 long query(long pid, InfoType info, POOLED_USAGE_AND_LIMITS* buffer);
00136 long query(long pid, InfoType info, KERNEL_USER_TIMES* buffer);
00137 long query(long pid, InfoType info, QUOTA_LIMITS* buffer);
00138 long query(long pid, InfoType info, VM_COUNTERS* buffer);
00139 long query(long pid, InfoType info, IO_COUNTERS* buffer);
00140 long query(long pid, InfoType info, long* buffer);
00141 };
00142 }
00143 #endif //GAUDIKERNEL_PROCESS_H