搜索NTFS文件

3

我是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_GET_NTFS_VOLUME_DATA的价值是什么。

1个回答

1

文档列出了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;
}

这将输出我们所需的值:

0x00090064

我本可以直接给你这个数字,但我认为更有帮助的是解释如何自己获取它。这样你就可以找到任何其他你可能需要的FSCTL代码值。 - David Heffernan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接