[python-win32] wmi query error

Nick Moszer nick.moszer at packetdigital.com
Tue Oct 20 23:53:50 CEST 2009


Hello,

I'm occasionally receiving the following error when doing a set of queries:


Traceback (most recent call last):
  File "psg5220_demo.py", line 236, in find_hdd_drives
    partitions = services.query(query)
  File "...path..\wmi.py", line 889, in query
    return [ _wmi_object (obj, instance_of, fields) for obj in
self._raw_query(w
ql) ]
  File "C:\Python26\lib\site-packages\win32com\client\util.py", line 84,
in next

    return _get_good_object_(self._iter_.next(), resultCLSID =
self.resultCLSID)

pywintypes.com_error: (-2147217406, 'OLE error 0x80041002', None, None)



The code being run is as follows:

    try:
        #Setup the WMI handle.
        services = wmi.WMI('.',
            moniker="winmgmts:{impersonationLevel=impersonate,(security)}",
            find_classes=True)

        # loop over physical disks and get serial numbers
        for disk in services.Win32_PhysicalMedia():
            serials[disk.Tag] = disk.SerialNumber
            serials_reversed[disk.Tag] = disk.SerialNumber

        # get the physical <-> drive letter mapping
        for disk in services.Win32_DiskDrive():
            query = "ASSOCIATORS OF {Win32_DiskDrive.DeviceID=\"%s\"} " \
                    % disk.DeviceID #re.sub(r"\\", r"\\\\", disk.DeviceID)
            query += "WHERE AssocClass = Win32_DiskDriveToDiskPartition "

            partitions = services.query(query)
            for part in partitions:
                query = "ASSOCIATORS OF
{Win32_DiskPartition.DeviceID='%s'} " \
                    % part.DeviceID
                query += "WHERE AssocClass = Win32_LogicalDiskToPartition"

                logical_drives = services.query(query)
                for logical_drive in logical_drives:
                    drive_letter = re.sub(":", "", logical_drive.DeviceID)
                    drive_letters[drive_letter] = disk.DeviceID


This is on Windows XP and Vista both.  It sometimes happens once then
not again for 50 tries.  Sometimes it happens 5 times in a row.  It
appears that an "OLE Error 0x80041002" is an "object not found error".
So the query is running and line 86 in util.py is trying to get the next
result from the query and is bombing out?  For some reason it things
there are more results then there actually are?  This code is a direct
port from working Perl code.  Anyone have any ideas?






More information about the python-win32 mailing list