正在读取Windows上的引导扇区

2024-09-29 23:17:04 发布

您现在位置:Python中文网/ 问答频道 /正文

我在python上创建了一个小程序,它可以在较低的级别读取引导扇区,这样就不会损坏设备窗户。但是唯一的问题是我无法读取例如:\Device\Harddisk0\Partition1,启动分区或{},原始磁盘0。每次我尝试它都会告诉我:No such a file or a directory

我做错什么了?在


Tags: orno程序device级别directory磁盘file
2条回答

所有这些都取决于您使用的NT或WIN32 api。ZwOpenFile还是{}?在

\Device\Harddisk0\Partition1是NT名称格式,只能在ZwOpenFile或{}中使用。在

要在CreateFileW中使用此名称,必须在其前面加上\\?\globalroot

所以代码示例-(在单个函数中同时使用NT和win32调用)

void xxx()
{
    HANDLE hFile;
    IO_STATUS_BLOCK iosb;
    UNICODE_STRING ObjectName;
    OBJECT_ATTRIBUTES oa = { sizeof(oa), 0, &ObjectName, OBJ_CASE_INSENSITIVE };
    RtlInitUnicodeString(&ObjectName, L"\\Device\\Harddisk0\\Partition1");

    UCHAR buf[0x200];
    if (0 <= ZwOpenFile(&hFile, FILE_GENERIC_READ, &oa, &iosb, FILE_SHARE_VALID_FLAGS, FILE_SYNCHRONOUS_IO_NONALERT))
    {
        LARGE_INTEGER ByteOffset = {};
        ZwReadFile(hFile, 0, 0, 0, &iosb, buf, sizeof(buf), &ByteOffset, 0);
        ZwClose(hFile);
    }

    hFile = CreateFile(L"\\\\?\\globalroot\\Device\\Harddisk0\\Partition1", FILE_GENERIC_READ, FILE_SHARE_VALID_FLAGS,
        0, OPEN_EXISTING, 0, 0);

    if (hFile != INVALID_HANDLE_VALUE)
    {
        OVERLAPPED ov = {};
        ULONG n;
        ReadFile(hFile, buf, sizeof(buf), &n, &ov);
        CloseHandle(hFile);
    }
}

您还可以使用下一个符号与CreateFileW

  • \\?\Harddisk<X>Partition<Y>-用于硬盘上的分区(1,2,…) (0,1,…)
  • \\?\PhysicalDrive<X>用于硬盘(0,1,…)

一切都取决于你是怎么走上这条路的?或者你只是硬编码?在

正确的方法是:

import os
disk_fd = os.open( r"\\.\PhysicalDrive0", os.O_RDONLY | os.O_BINARY)
data = os.read(disk_fd, 512)
os.close(disk_fd)

感谢@eryksun

相关问题 更多 >

    热门问题