| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- # Windows PSAPI function wrappers.
- # http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/psapi_functions.asp
- #
- # The contents of this file are subject to the Python Software Foundation
- # License Version 2.3 (the License). You may not copy or use this file, in
- # either source code or executable form, except in compliance with the License.
- # You may obtain a copy of the License at http://www.python.org/license.
- #
- # Software distributed under the License is distributed on an AS IS basis,
- # WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
- # for the specific language governing rights and limitations under the
- # License.
- #
- # by Greg Hazel
- import ctypes
- DWORD = ctypes.c_ulong
- SIZE_T = ctypes.c_ulong
- psapi = ctypes.windll.psapi
- Kernel32 = ctypes.windll.Kernel32
- class PROCESS_MEMORY_COUNTERS(ctypes.Structure):
- _fields_ = [("cb", DWORD),
- ("PageFaultCount", DWORD),
- ("PeakWorkingSetSize", SIZE_T),
- ("WorkingSetSize", SIZE_T),
- ("QuotaPeakPagedPoolUsage", SIZE_T),
- ("QuotaPagedPoolUsage", SIZE_T),
- ("QuotaPeakNonPagedPoolUsage", SIZE_T),
- ("QuotaNonPagedPoolUsage", SIZE_T),
- ("PagefileUsage", SIZE_T),
- ("PeakPagefileUsage", SIZE_T),
- ]
- class PROCESS_MEMORY_COUNTERS_EX(ctypes.Structure):
- _fields_ = [("cb", DWORD),
- ("PageFaultCount", DWORD),
- ("PeakWorkingSetSize", SIZE_T),
- ("WorkingSetSize", SIZE_T),
- ("QuotaPeakPagedPoolUsage", SIZE_T),
- ("QuotaPagedPoolUsage", SIZE_T),
- ("QuotaPeakNonPagedPoolUsage", SIZE_T),
- ("QuotaNonPagedPoolUsage", SIZE_T),
- ("PagefileUsage", SIZE_T),
- ("PeakPagefileUsage", SIZE_T),
- ("PrivateUsage", SIZE_T),
- ]
- def GetCurrentProcess():
- return Kernel32.GetCurrentProcess()
- def GetProcessMemoryInfo(handle):
- psmemCounters = PROCESS_MEMORY_COUNTERS_EX()
- cb = DWORD(ctypes.sizeof(psmemCounters))
- b = psapi.GetProcessMemoryInfo(handle, ctypes.byref(psmemCounters), cb)
- if not b:
- psmemCounters = PROCESS_MEMORY_COUNTERS()
- cb = DWORD(ctypes.sizeof(psmemCounters))
- b = psapi.GetProcessMemoryInfo(handle, ctypes.byref(psmemCounters), cb)
- if not b:
- raise ctypes.WinError()
- d = {}
- for k, t in psmemCounters._fields_:
- d[k] = getattr(psmemCounters, k)
- return d
|