Если в Windows включено автоматическое отключение дисков при неактивности, то как программно проверить, спит диск или включен, естественно, не разбудив его при этом?
Вот таким способом удалось проверить 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);
Ограничения:
Можно подумать в сторону командной строки, что то вроде
Никак. За остановку диска при отсутствии обращений к нему отвечает прошивка диска. Винда может остановить диск только когда за компом никто не работает.
Пытаюсь сделать, чтобы при заполнении формы и нажатии кнопки, форма записывалась в базу, и в случае успеха на экран выводилось всплывающее...
есть WSDL схема для SOAP в OTRS, к сожалению автоматом (подключением ссылок), не получается, потому как шарп считает файл не корректнымдля нормальной...