C# 将文件搜索到Ntfs

C# 将文件搜索到Ntfs,c#,pinvoke,C#,Pinvoke,我是Pinvoke的新手。我想得到mft后,我找到根时,我可以访问目录。 我想使用DeviceIoControl,例如下面的代码: BOOL DeviceIoControl( (HANDLE) hDevice, // handle to device FSCTL_GET_NTFS_VOLUME_DATA, // dwIoControlCode NULL, // lpInBuffer 0,

我是Pinvoke的新手。我想得到mft后,我找到根时,我可以访问目录。 我想使用
DeviceIoControl
,例如下面的代码:

BOOL DeviceIoControl(
   (HANDLE) hDevice,           // handle to device
   FSCTL_GET_NTFS_VOLUME_DATA, // dwIoControlCode
   NULL,                       // lpInBuffer
   0,                          // nInBufferSize
   (LPVOID) lpOutBuffer,       // output buffer
   (DWORD) nOutBufferSize,     // size of output buffer
   (LPDWORD) lpBytesReturned,  // number of bytes returned
   (LPOVERLAPPED) lpOverlapped // OVERLAPPED structure
   );
我不知道
FSCTL\u GET\u NTFS\u VOLUME\u DATA
的值是多少,它将
WinIoCtl.h
列为相关的头。当我们查看宏声明时,我们会看到:

#define FSCTL_GET_NTFS_VOLUME_DATA \
    CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 25, METHOD_BUFFERED, FILE_ANY_ACCESS)
这给我们留下了一点工作要做。执行此操作的惰性方法是编写程序以发出值:

#include <Windows.h>
#include <iostream>
#include <iomanip>

int main()
{
    DWORD code = FSCTL_GET_NTFS_VOLUME_DATA;
    std::cout << "0x" << std::hex << std::setfill('0') << std::setw(8) << code;
    return 0;
}
#包括
#包括
#包括
int main()
{
DWORD代码=FSCTL\u GET\u NTFS\u VOLUME\u数据;

std::我可以给你这个号码,但我认为解释一下如何自己掌握它会更有帮助。然后你可以找到你可能需要的任何其他FSCTL代码值。 0x00090064