Qwertiy Asked:2020-03-20 07:05:41 +0000 UTC2020-03-20 07:05:41 +0000 UTC 2020-03-20 07:05:41 +0000 UTC 如何检查驱动器是否处于睡眠状态? 772 如果 Windows 在不活动时自动关闭磁盘,那么如何以编程方式检查磁盘是否处于睡眠状态或已打开,当然,不唤醒它? c# 3 个回答 Voted Best Answer rdorn 2020-09-17T05:32:23Z2020-09-17T05:32:23Z 通过这种方式,我们设法检查了磁盘的 PowerState,而不是同时唤醒它。我家的系统很安静,我可以清楚地听到驱动器的启动和停止。更重要的证据:与从文件获取句柄的选项相比,在重复启动期间状态不会改变。 诚然,美中不足的是,需要管理员权限,并且您需要知道系统中正在检查的物理磁盘的序列号。 99% 的代码示例都使用 PInvoke,我的只是链接到工作版本。 void Main() { String status = String.Empty; bool fOn = false; var driveX = 1; var hFile = CreateFileW($@"\\.\PHYSICALDRIVE{driveX}", FileAccess.Read, FileShare.Read, IntPtr.Zero, FileMode.Open, FileAttributes.Offline, IntPtr.Zero); bool result = GetDevicePowerState(hFile, out fOn); if (result) { if (fOn) { status = "Disk is powered up and spinning"; } else { status = "Disk is sleeping"; } } else { status = "Cannot get Disk Status"; } Console.WriteLine(status); } //https://www.pinvoke.net/default.aspx/kernel32.CreateFile [DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)] static extern IntPtr CreateFileW( [MarshalAs(UnmanagedType.LPWStr)] string filename, [MarshalAs(UnmanagedType.U4)] FileAccess access, [MarshalAs(UnmanagedType.U4)] FileShare share, IntPtr securityAttributes, [MarshalAs(UnmanagedType.U4)] FileMode creationDisposition, [MarshalAs(UnmanagedType.U4)] FileAttributes flagsAndAttributes, IntPtr templateFile); //https://www.pinvoke.net/default.aspx/kernel32.GetDevicePowerState [DllImport("kernel32.dll")] static extern bool GetDevicePowerState(IntPtr hDevice, out bool pfOn); 限制: 系统盘仅在整个系统休眠时才休眠(至少在 Windows 上)。 如果系统中的物理磁盘是唯一的,则该检查没有意义,如果整个系统没有处于睡眠状态,它将处于活动状态(见上文)。 我不确定 SSD 和其他可移动媒体,没有什么可检查的,系统存在于唯一的 SDD 上并且它从不休眠。 Влад Усынин 2020-05-08T20:09:49Z2020-05-08T20:09:49Z 您可能会按照命令行的方向思考,例如 Вадим Корженко 2020-03-25T23:25:32Z2020-03-25T23:25:32Z 没门。磁盘固件负责在没有调用磁盘的情况下停止磁盘。只有在没有人在计算机上工作时,Windows 才能停止磁盘。
通过这种方式,我们设法检查了磁盘的 PowerState,而不是同时唤醒它。我家的系统很安静,我可以清楚地听到驱动器的启动和停止。更重要的证据:与从文件获取句柄的选项相比,在重复启动期间状态不会改变。
诚然,美中不足的是,需要管理员权限,并且您需要知道系统中正在检查的物理磁盘的序列号。
99% 的代码示例都使用 PInvoke,我的只是链接到工作版本。
限制:
您可能会按照命令行的方向思考,例如
没门。磁盘固件负责在没有调用磁盘的情况下停止磁盘。只有在没有人在计算机上工作时,Windows 才能停止磁盘。