Я не могу прочитать MFT и конвертировать VB.net в C

Я пытаюсь преобразовать исходный код VB.NET в C. Его цель — показать мне, является ли мой жесткий диск NTFS.

Предположительно, читает MFT и может сравнивать третий байт, если 78 — десятичное (N) и 84 (T) и т. Д. … возвращает 0 для «true», но я не могу этого сделать; мой код не работает

Как я могу это исправить?

VB.net:

Public Function IsNFTSDrive(ByVal strDrive As String) As Boolean
Dim Hnd As Integer, nRead As Integer
Dim ret As UInt32
Dim Buffer(1024) As Byte
Hnd = CreateFile("\\.\" & Mid(strDrive, 1, 2), GENERIC_READ Or GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, _
Nothing, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL Or FILE_FLAG_OVERLAPPED, IntPtr.Zero)
If (Hnd <> INVALID_HANDLE_VALUE) Then
ret = ReadFile(Hnd, Buffer, 1024, nRead, New System.Threading.NativeOverlapped)
Else
Return False
End If
If ret = 0 Then
ret = WaitForSingleObject(Hnd, INFINITE)
Select Case ret
Case WAIT_OBJECT_0
Case WAIT_TIMEOUT
End Select
Else
Return False
End If
CloseHandle(Hnd)
Return Buffer(3) = 78 And Buffer(4) = 84 And Buffer(5) = 70 And Buffer(6) = 83
End Function

C:

#include <Windows.h>
#include <winioctl.h>
#include <stdio.h>
#include <stdlib.h>#define zwpath L"\\\\.\\PhysicalDrive0"
int main(int argc, char *argv[]){

HANDLE hDevice;
OVERLAPPED overlapped;
BYTE buff[1024];
DWORD numerobyte = 0;
UINT32 ret;
ZeroMemory(&overlapped, sizeof(OVERLAPPED));

hDevice = CreateFileW(zwpath, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING,  FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL);

if(hDevice != INVALID_HANDLE_VALUE){

ret = ReadFile(hDevice, buff, 1024, &numerobyte, &overlapped);

}else
{
return NULL;
}

if(ret == 0){

ret = WaitForSingleObject(hDevice,INFINITE );

switch (ret)
{
case WAIT_OBJECT_0:break;
case WAIT_TIMEOUT:break;
default:
break;
}
}
else
{
return NULL;
}

CloseHandle(hDevice);

if(buff[3] == 'N'){

printf("N");
}

getchar();
}

РЕДАКТИРОВАТЬ

Я изменяю код но ничего

Я пытался с «\. \ C:», как Пример MSDN, но ничего 🙁

и ошибка начинается в «if (buff [3] == ‘N’)», я не знаю, если ReadFile не работает или это «если»?

Середина для Диска .. «C: \» или «C:» как «\. \ C:» или «\. \ C: \»

-1

Решение

Если вы хотите проверить тип файловой системы, проверьте этот актуальный вопрос это предлагает использовать GetVolumeInformation ().

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]