我无法读取 mft 并将 VB.net 转换为 C

I can't read mft and convert VB.net to C

本文关键字:net 转换 VB 并将 读取 mft      更新时间:2023-10-16

我尝试将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是否失败,或者是" if"?

中间是用于驱动器。" c:"或" c:"喜欢" 。。 c:"或" 。。

如果要检查文件系统类型检查此相关问题,该问题建议使用getVolumeInformation()。