gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 19:47:33 25 4
gpt4 key购买 nike

我尝试将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 example ,但什么也没有:(

错误从“if(buff[3] == 'N')”开始,我不知道ReadFile失败还是“if”?

中间用于驱动器..“C:\”或“C:”,如“\.\C:”或“\.\C:\”

最佳答案

如果要检查文件系统类型,请检查 this relevant question建议使用 GetVolumeInformation()。

关于c++ - 我无法读取 mft 并将 VB.net 转换为 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21421303/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com