summaryrefslogtreecommitdiff
path: root/psutil/arch/windows/mem.c
diff options
context:
space:
mode:
Diffstat (limited to 'psutil/arch/windows/mem.c')
-rw-r--r--psutil/arch/windows/mem.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/psutil/arch/windows/mem.c b/psutil/arch/windows/mem.c
new file mode 100644
index 00000000..8b678254
--- /dev/null
+++ b/psutil/arch/windows/mem.c
@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2009, Jay Loden, Giampaolo Rodola'. All rights reserved.
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include <Python.h>
+#include <windows.h>
+#include <Psapi.h>
+
+#include "../../_psutil_common.h"
+
+
+PyObject *
+psutil_virtual_mem(PyObject *self, PyObject *args) {
+ unsigned long long totalPhys, availPhys, totalSys, availSys, pageSize;
+ PERFORMANCE_INFORMATION perfInfo;
+
+ if (! GetPerformanceInfo(&perfInfo, sizeof(PERFORMANCE_INFORMATION))) {
+ PyErr_SetFromWindowsErr(0);
+ return NULL;
+ }
+ // values are size_t, widen (if needed) to long long
+ pageSize = perfInfo.PageSize;
+ totalPhys = perfInfo.PhysicalTotal * pageSize;
+ availPhys = perfInfo.PhysicalAvailable * pageSize;
+ totalSys = perfInfo.CommitLimit * pageSize;
+ availSys = totalSys - perfInfo.CommitTotal * pageSize;
+ return Py_BuildValue(
+ "(LLLL)",
+ totalPhys,
+ availPhys,
+ totalSys,
+ availSys);
+}