Просмотр метаданных файла Windows в Python - PullRequest
0 голосов
/ 13 октября 2009

Я пишу сценарий для отправки по электронной почте владельцу файла после завершения отдельного процесса. Я пробовал:

import os
FileInfo = os.stat("test.txt")
print (FileInfo.st_uid)

Результатом этого является идентификационный номер владельца. Что мне нужно, это имя пользователя Windows.

Ответы [ 2 ]

3 голосов
/ 13 октября 2009

Как только я прекратил поиск метаданных файла и начал искать защиту файла, я нашел именно то, что искал.

import tempfile
import win32api
import win32con
import win32security

f = tempfile.NamedTemporaryFile ()
FILENAME = f.name
try:
  sd = win32security.GetFileSecurity (FILENAME,win32security.OWNER_SECURITY_INFORMATION)
  owner_sid = sd.GetSecurityDescriptorOwner ()
  name, domain, type = win32security.LookupAccountSid (None, owner_sid)

  print "I am", win32api.GetUserNameEx (win32con.NameSamCompatible)
  print "File owned by %s\\%s" % (domain, name)
finally:
  f.close ()

беспощадно грохнул из http://timgolden.me.uk/python-on-windows/programming-areas/security/ownership.html

2 голосов
/ 13 октября 2009

Я думаю, что единственный шанс, что у вас есть, - это использовать pywin32 и спросить у себя.

В основном вы смотрите на msdn, как это сделать в c ++ и используете соответствующие функции pywin32.

from win32security import GetSecurityInfo, LookupAccountSid
from win32security import OWNER_SECURITY_INFORMATION, SE_FILE_OBJECT

from win32file import CreateFile
from win32file import GENERIC_READ, FILE_SHARE_READ, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL

fh = CreateFile( __file__, GENERIC_READ, FILE_SHARE_READ, None, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, None )
info = GetSecurityInfo( fh, SE_FILE_OBJECT, OWNER_SECURITY_INFORMATION )

name, domain, type_id = LookupAccountSid( None, info.GetSecurityDescriptorOwner() )
print name, domain, type_id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...