3

我是 Pinvoke 的新手。当我可以访问目录时,我想在找到 root 后获得 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.

4

1 回答 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
于 2012-12-26T11:03:49.947 回答