Каковы возвращаемые значения функции GetTokenInformation() и как ее использовать

#python #security #winapi

Вопрос:

Я попробовал этот код:

 import win32security import win32api token = win32security.OpenProcessToken(win32api.GetCurrentProcess(), win32security.TOKEN_QUERY_SOURCE | win32security.TOKEN_QUERY)  for i in range(0x30):  try:  n = win32security.LookupPrivilegeName(None, i)  privs = win32security.GetTokenInformation(token, i)   except Exception as e:  pass  else:  print(privs)  print(i, n)  while True:  pass  

Я попытался получить информацию о каждой привилегии(мне в основном нужны флаги), но я не могу понять возвращаемые значения функции GetTokenInformation() , она возвращает разные типы, и мне не удается извлечь из нее какую-либо информацию, я искал в MSDN, но все равно не понял.

Комментарии:

1. Это задокументировано на MSDN. Похоже, вы недостаточно внимательно прочитали эту документацию, учитывая код в вопросе.

Ответ №1:

Прочитав больше в MSDN, я узнал, что функция GetTokenInformation получает параметр с именем TOKEN_INFORMATION_CLASS, который указывает, что функция вернет, поэтому для того, чтобы узнать о привилегиях и об их флагах, я использовал следующий код:

 import win32security import win32api token = win32security.OpenProcessToken(win32api.GetCurrentProcess(), win32security.TOKEN_QUERY_SOURCE | win32security.TOKEN_QUERY) privs = win32security.GetTokenInformation(token, win32security.TokenPrivileges) for i in range(len(privs)):  # name of privilege  name = win32security.LookupPrivilegeName(None, privs[i][0])  flag = privs[i][1]   # check the flag value  if flag == 0:  flag = 'Disabled'  elif flag == 3:  flag = 'Enabled'   print(name, flag)  while True:  pass