首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从Python调用FSCTL_CREATE_OR_GET_OBJECT_ID

从Python调用FSCTL_CREATE_OR_GET_OBJECT_ID
EN

Stack Overflow用户
提问于 2014-02-16 14:33:56
回答 2查看 799关注 0票数 2

我试图在Python备份程序中使用NTFS对象ID。我在我的头上,但设法创建了一个函数返回..。某物。

代码语言:javascript
运行
复制
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

调用此函数的一些示例输出是一个str样例,“↑·∟ákπ◄êδ%dΘπ╧hMêc▌this╧J/╧y╠┘π↑·∟π◄êδ%dΘπ╧”。对于我的程序来说,这是很好的,只要我备份的每个文件都是一致的。但我做了什么可怕的错事吗?理想情况下,我希望尽可能正确地实现这一点。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-17 17:33:23

在我问题的输出str上使用binascii.hexify()会产生:binascii.hexify这与以下结果相同:

代码语言:javascript
运行
复制
C:\Windows\system32>fsutil.exe objectid query "myfile.txt"
Object ID :        18fa1c836b95e31188eb002564e9e3cf
BirthVolume ID :   684d8863dd92cf4aa82fcf79ccd993e3
BirthObjectId ID : 18fa1c836b95e31188eb002564e9e3cf
Domain ID :        00000000000000000000000000000000

因此,我可以从fsutil.exe独立验证我的Python函数正在产生正确的输出。

我仍然不知道Windows函数的使用是否是绝对正确的,如果不正确的话,我希望得到任何纠正。

票数 2
EN

Stack Overflow用户

发布于 2014-02-16 15:20:56

是。这是100%有效的。

您将返回三个OBJECT_ID

对象ID: 3FB73FE2-6BF2-3F3F-EA3F-2025643F3F3F

出生体积ID: 684 DEA63-A6C6-2D4A-BF2F-2D79A62BF470

出生物体ID: 3FB73FE2-6BF2-3F3F-EA3F-2025643F3F3F

这个输出和预期的一样。:)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21812523

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档