Win32 API P-Invoke 使磁盘联机、脱机并设置唯一 ID

Posted

技术标签:

【中文标题】Win32 API P-Invoke 使磁盘联机、脱机并设置唯一 ID【英文标题】:Win32 API P-Invoke to bring a disk online, offline, and set unique ID 【发布时间】:2011-02-23 18:10:30 【问题描述】:

我目前正在使用 Diskpart 来完成这些功能,但我希望能够使用 P-Invoke 而不必在我的 C# 应用程序中使用外部进程。

Diskpart 脚本示例如下:

//Online a disk
Select disk 7
disk online

// Reset GPT Identifier
select disk 7
UNIQUEID DISK ID=baf784e7-6bbd-4cfb-aaac-e86c96e166ee

我尝试搜索 pinvoke.net,但只能找到处理卷而不是磁盘的函数。关于如何使用 Pinvoke 完成这些 diskpart 命令的任何想法?

【问题讨论】:

你找到解决办法了吗? 【参考方案1】:

我不确定 Dispart 到底做了什么,但我建议查看可能具有这种功能的 WMI。当您需要在 Windows 中执行一些不太常见的操作时,它通常是一个不错的选择。

Storage WMI Classes 可能有一些有用的东西:http://msdn.microsoft.com/en-us/library/ff567016%28VS.85%29.aspx

编辑:删除了关于卷的建议,因为我错过了你对此不感兴趣。

【讨论】:

我确实找到了 win32_diskdrive,但它没有任何有用的方法来完成我想要完成的工作。【参考方案2】:

DeviceIOControl API 怎么样?

如果没有,我会考虑使用 WMI。特别是,请查看 WMI WIN32_DiskDrive 或 WIN32_LogicalDisk 类。

【讨论】:

看起来 CreateFile 和 DeviceOControl 可能是我需要开始的地方。任何例子都会很棒。我不是 Win32 程序员 :) 我可以写点东西,但需要一些时间。您可以在pinvoke.net/default.aspx/kernel32.deviceiocontrol 上使用 API 的示例。这篇文章也可能有用:blogs.msdn.com/b/jeffrey_wall/archive/2004/09/13/229137.aspx

以上是关于Win32 API P-Invoke 使磁盘联机、脱机并设置唯一 ID的主要内容,如果未能解决你的问题,请参考以下文章

(该硬盘处于脱机.因为他与另一个联机磁盘发生签名冲突)怎么解决呢?

Win32Api -- 使应用Always on top的几种方法

win2012 挂载硬盘即增加新硬盘方法

win2008R2磁盘处于脱机状态

win7 exe 已停止工作 windows可以联机检查

[Win32] 直接读写磁盘扇区(磁盘绝对读写)