Как получить доступ к физическому диску с помощью SafeFileHandle и FileStream в С #?

Я использую C# для доступа к физическому диску.

Я хочу получить доступ к физическому диску с помощью SafeFileHandle и CreateFile.

kvp.value - это значение словаря "\\.\PHYSICALDRIVE0".

Проблемной частью является часть FileStream. Попытка скомпилировать, как описано выше, приводит к ошибке с сообщением "Неверный дескриптор".

Выполнение с правами администратора разрешит эту часть, но покажет, что у вас нет разрешения на запись в выбранный файл в будущем на логическом диске.

Я слышал, что нам нужно удалить права администратора для этой проблемы, и в настоящее время мы собираем ее без прав администратора, и есть проблема с дескриптором.

handle, переменная для первого SafeFileHandle, приближается к PHYSICALDRIVE, а disk_log, переменная для второго SafeFileHandle, приближается к LOGICALDIRVE.

Я надеюсь изменить шестнадцатеричное значение одного файла, открыв логический диск.

SafeFileHandle handle = CreateFile(kvp.Value, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, IntPtr.Zero, 3, FILE_FLAG_NO_BUFFERING, IntPtr.Zero);
                        if (!physical_drive_list.Equals(kvp.Value))
                        {
                            FileStream disk = new FileStream(handle, FileAccess.ReadWrite);
                            try
                            {
                                foreach (var kvp_log in logical_list)
                                {
                                    if (kvp_log.Value.Equals(input[0]))
                                    {
                                        string logical_drive_list = "";
                                        SafeFileHandle log_hand = CreateFile(kvp_log.Key, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, IntPtr.Zero, 3, FILE_FLAG_NO_BUFFERING, IntPtr.Zero);
                                        if (!logical_drive_list.Equals(kvp_log.Key))
                                        {
                                            logical_drive_list = kvp_log.Key;
                                            FileStream disk_log = new FileStream(log_hand, FileAccess.ReadWrite);
                                            try
                                            {
                                                disk_log.Read(classes.vbr, 0, 512);
                                                UInt32 Sector_Per_Cluster_Value = classes.vbr[13];
                                                UInt32 MFT_VALUE = 0;

0 ответов

Другие вопросы по тегам