Я пытаюсь получить идентификаторы объектов NTFS для использования в программе резервного копирования Python. Я перехожу через голову, но мне удалось создать функцию, которая возвращает ... что-то.Вызов FSCTL_CREATE_OR_GET_OBJECT_ID из Python
import sys
import win32file
import winioctlcon
def object_id(filename):
"""
NTFS OBJECT_ID
"""
fhandle = win32file.CreateFileW(
# FileName
filename,
# DesiredAccess
win32file.GENERIC_READ,
# ShareMode
win32file.FILE_SHARE_READ | win32file.FILE_SHARE_WRITE,
# SecurityAttributes
None,
# CreationDisposition
win32file.OPEN_EXISTING,
# FlagsAndAttributes
0
)
obj_id = win32file.DeviceIoControl(
# Device : PyHANDLE
# Handle to a file, device, or volume
fhandle,
# IoControlCode : int
# IOControl Code to use, from winioctlcon
winioctlcon.FSCTL_CREATE_OR_GET_OBJECT_ID,
# InBuffer : str/buffer
# The input data for the operation, can be None for some operations.
None,
# OutBuffer : int/buffer
# Size of the buffer to allocate for output, or a writeable buffer as
# returned by win32file::AllocateReadBuffer.
64,
# Overlapped=None : PyOVERLAPPED An overlapped object for async
# operations. Device handle must have been opened with
# FILE_FLAG_OVERLAPPED.
None
)
fhandle.Close()
return obj_id
Некоторые образцы с выходом вызова этой функции является ул как, «↑ · ∟âkòπ◄êδ% dΘπ╧hMêc▌Æ╧J¿/╧y╠┘ôπ ↑ · ∟âkòπ◄êδ% dΘπ╧ ». Это было бы хорошо для целей моей программы, если это согласовано для каждого файла, который я поддерживаю. Но я делаю что-то ужасное здесь? В идеале я хотел бы реализовать это как можно лучше.
Как вы перевели из (сумасшедшего) значения str, которое я дал выше этим трем алфавитумерам ?! –
Просто из вашей строки, как hex. – user2120666
Можете ли вы показать функцию Python, которая преобразует мою строку в ваши шестнадцатеричные строки? Я пытаюсь воспроизвести ваш результат всю ночь! –