在Windows上读取引导扇区

时间:2016-12-31 20:58:08

标签: python windows mbr

我在python上创建了一个小程序,它以低级别读取引导扇区,因此它不会破坏设备。我昨天在Linux中成功运行了这个程序,我想在Windows中做同样的事情。但是唯一的问题是,我没有能够读取例如:\Device\Harddisk0\Partition1,启动分区或\Device\Harddisk0\DR0,原始磁盘0.每次我尝试它都告诉我:{{1 }}

我做错了什么?

2 个答案:

答案 0 :(得分:2)

正确的做法是:

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

答案 1 :(得分:0)

所有依赖于你使用的NT或WIN32 api。 export class LoadSuccessAction implements Action { type = ActionTypes.LOAD_SUCCESS; constructor(public payload: any[]) { } } ZwOpenFile

CreateFileW是NT名称格式,必须仅在\Device\Harddisk0\Partition1ZwOpenFile中使用。

要在ZwCreateFile中使用此名称,您必须在CreateFileW

前加上前缀

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

\\?\globalroot

您也可以将下一个符号链接与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上的分区(1,2,..)  (0,1,..)
  • \\?\Harddisk<X>Partition<Y>适用于HardDisk(0,1,..)

所有人都依赖于 - 你是如何得到这条道路的?或者你只是硬编码?