Problem with access to shared memory(W2K) / ORIGINALLY (win32) speedfan api control

Claudio Grondi claudio.grondi at freenet.de
Wed Apr 6 15:41:30 EDT 2005


Background information:
---------------------------------
in order to monitor mainboard sensory data
as fan speeds, temperatures, applications
like SpeedFan http://www.almico.com/speedfan.php
or MBM http://mbm.livewiredev.com/
can be used.
Both of the mentioned apps expose data got
from the hardware in a shared memory area.

The goal to achieve:
---------------------------
is to supervise the motherboard sensory
data from within a Python script

The approach:
-------------------
access to the shared memory area
exposed by motherboard hardware
querying apps from Python script.

The problem:
-----------------
the below listed script code returns
always same values, what
leads to the conclusion, that something
is going wrong.

Can anyone help?

Thanks in advance

Claudio

The code
-------------
  I use is provided also here:
 http://www.codecomments.com/Python/message430495.html
 http://mail.python.org/pipermail/python-list/2005-March/271853.html
(the mmap part of it doesn't work at all)

from ctypes import *

class Buffer(Structure):
  # just to see if any useful data can be acquired
  _fields_ = [
    ("Data0", c_longlong)
   ,("Data1", c_longlong)
   ,("Data2", c_longlong)
   ,("Data3", c_longlong)
   ,("Data4", c_longlong)
   ,("Data5", c_longlong)
   ,("Data6", c_longlong)
   ,("Data7", c_longlong)
   ,("Data8", c_longlong)
   ,("Data9", c_longlong)
   ,("DataA", c_longlong)
   ,("DataB", c_longlong)
   ,("DataC", c_longlong)
   ,("DataD", c_longlong)
   ,("DataE", c_longlong)
   ,("DataF", c_longlong)
  ]

szName = c_char_p("SFSharedMemory_ALM")  # SpeedFan
szName = c_char_p("$M$B$M$5$S$D$")    # MBM
# szName = c_char_p("blabla")  # not existing shared memory

FILE_MAP_ALL_ACCESS  = 0xF001F
FALSE = 0

hMapObject = windll.kernel32.OpenFileMappingA(
   FILE_MAP_ALL_ACCESS
  ,FALSE
  ,szName
)
if (hMapObject == 0):
  print "Could not open file mapping object"
  raise WinError()

pBuf = windll.kernel32.MapViewOfFile(
     hMapObject
    ,FILE_MAP_ALL_ACCESS
    ,0
    ,0
    ,0
)

  if (pBuf == 0):
    print "Could not map view of file"
    raise WinError()
  else:
    print repr(pBuf)
    print repr(hMapObject)

    pBuf_str = cast(pBuf, c_char_p)
    print repr(pBuf_str.value)
    print repr(pBuf_str)

    pBuf_buf = cast(pBuf, Buffer)
    print
    print
    print repr(pBuf_buf)
    print
    print repr(pBuf_buf.Data0)
    print repr(pBuf_buf.Data1)
    print repr(pBuf_buf.Data2)
    print repr(pBuf_buf.Data3)
    print repr(pBuf_buf.Data4)
    print repr(pBuf_buf.Data5)
    print repr(pBuf_buf.Data6)
    print repr(pBuf_buf.Data7)
    print repr(pBuf_buf.Data8)
    print repr(pBuf_buf.Data9)
    print repr(pBuf_buf.DataA)
    print repr(pBuf_buf.DataB)
    print repr(pBuf_buf.DataC)
    print repr(pBuf_buf.DataD)
    print repr(pBuf_buf.DataE)
    print repr(pBuf_buf.DataF)
  #:if/else (pBuf == 0)

windll.kernel32.UnmapViewOfFile(pBuf)
windll.kernel32.CloseHandle(hMapObject)

The output
--------------
is always the same:

13107200
80
''
c_char_p('')


<__main__.Buffer object at 0x007E3570>

13107200L
0L
0L
0L
0L
0L
0L
0L
0L
0L
0L
0L
0L
0L
0L
0L






More information about the Python-list mailing list