我期待直接写入原始 Windows 块设备。
我可以使用dd for windows成功地做到这一点:
> dd.exe if=myData.dat of=\\.\PhysicalDrive1
但是我无法使用 NodeJS 这样做。我以下列方式使用节点块设备:
var device = new BlockDevice({
path: '\\\\.\\PhysicalDrive1',
mode: 'w+',
size: 512
});
device.write(0, myBuffer, callback);
device.write
正确返回写入的字节数,但实际上并没有向设备写入任何内容。
请注意,确切的代码在 Mac OS X 中成功运行(当然替换\\\\.\\PhysicalDrive1
为/dev/diskN
):它写入我的数据,我可以在 Windows 8 中毫无问题地查看它。
我究竟做错了什么?
我也试过:
- 不转义反斜杠 (
\\.\PhysicalDrive1
) 但会导致EINV
错误。 - 使用逻辑名称:
\\\\.\\E:
. mountvol X: /D
在尝试读/写之前卸载卷。
我可以正确确认要写入的设备的 ID:
wmic diskdrive list brief
我也试过设置mode
为rs+
. 读取操作似乎有效,但保存的数据包含以下与故障相关的数据:
�X�MSDOS5.0�
�?����:�)?�xNO NAME FAT32 3ɎѼ�{��ٽ|�V@�N�V@�A��U�r��U�u
��t�F�-�V@�s�����f��@f������Af��f��f�F�~u9�~*w3f�Ff��
����,���}��|���t<�t ������}��}��ߘ��f`�~� fjfPSfh�B�V@���fXfXfXfX�3f;F�r��*f3�f�Nf����f��f���v�֊V@����
̸�fa�t���f@Iu��BOOTMGR
Disk error�
Press any key to restart
��U�%
编辑:一个 github 问题线程描述了我尝试过的更多事情:https ://github.com/jhermsmeier/node-blockdevice/issues/1 。
编辑:提到的所有方法都以管理员权限进行了测试。
编辑:我正在使用device.close(callback)
,但为了简单起见,在示例中省略了。