¿Cómo establecer la prioridad del proceso usando pywin32 y WMI?

from win32com.client import GetObject

for proc in GetObject("WinMgmts:{impersonationLevel=impersonate,(IncreaseBasePriority,Debug)}").InstancesOf("Win32_Process"):
  if proc.CommandLine == "<my-command-line>":
    proc.SetPriority(4) # fails

He intentado pasar una clase de prioridad (0x40), así como una prioridad real (4), pero ambas fallan con el siguiente mensaje:

  File "test.py", line 5, in <module>
    proc.SetPriority(0x40)
  File "C:\Progs\Python26\lib\site-packages\win32com\client\dynamic.py", line 505, in __getattr__
    ret = self._oleobj_.Invoke(retEntry.dispid,0,invoke_type,1)
pywintypes.com_error: (-2147352567, 'Exception occurred.', (0, u'SWbemObjectEx', u'Invalid parameter ', None, 0, -2147217400), None)

Puedo ver que no le gustan algunos parámetros, pero ¿por qué no?

No estoy interesado en una solución que no sea WMI usandoSetPriorityClass. Me he dado laSeDebugPrivilege como sigue

import win32security, ntsecuritycon, win32con, win32api
privs = ((win32security.LookupPrivilegeValue('',ntsecuritycon.SE_DEBUG_NAME), win32con.SE_PRIVILEGE_ENABLED),)
hToken = win32security.OpenProcessToken(win32api.GetCurrentProcess(), win32security.TOKEN_ALL_ACCESS)
win32security.AdjustTokenPrivileges(hToken, False, privs)
win32api.CloseHandle(hToken)

Respuestas a la pregunta(1)

Su respuesta a la pregunta