Прямой доступ к диску в windows (C#)

Я хочу иметь возможность читать и записывать данные непосредственно на диск (т. е. на уровне кластера), но я не нашел подходящего инструмента для этого под Windows.

Я пытался выяснить, как написать свой собственный на C#, но документация, которую я нашел, разрежена и касается только API c++.

каков наилучший способ чтения / записи непосредственно на / с диска в C#? (или кто-нибудь может порекомендовать мне инструмент, который позволяет мне читать / писать напрямую из поездки?)

3 ответов


pinvoke.net имеет коллекцию оболочек управляемого кода для практически всех Win32 API, включая те, которые могут разговаривать со службой диспетчера дисков и выполнять низкоуровневое ядро/IO.


честно говоря, вам, вероятно, нужно посмотреть на Вызов Неуправляемого Кода Если вы хотите написать этот код на C#. Он позволяет взаимодействовать с неуправляемыми API-интерфейсами платформы, которые вы упомянули, это основная часть информации, которую вы нашли до сих пор :-)


этот вопрос возникает при поиске терминов, связанных с блоком записи устройств в .NET, поэтому я хотел бы украсить оригинальные ответы некоторыми прямыми ссылками.

во-первых, вы будете использовать PInvoke для CreateFile для получения дескриптора файла.

PInvoke методы используются для импорта CreateFile в среду .NET. У MSDN есть пример под их обсуждением SafeFileHandle. Если вы хотите создать тип c# для параметров и кодов возврата CreateFile, есть несколько примеров на PInvoke

однако вам нужно решить, хотите ли вы писать на физическое устройство или том на нем. Тома соответствуют разделам на устройстве. Е. Г. "\.\PhysicalDrive0 "- это физическое устройство, тогда как"\.\C: "это объем.

для получения подробной информации о доступных устройствах Win32 используйте версию QueryDosDevice фон на этих устройствах Win32, их преобразование имен и отношение к объектам O/S может можно найти в "Windows Internals" Марка Русиновича.