2012-12-26 51 views
3

我是Pinvoke的新手。当我可以访问目录时,我想要找到root用户的mft。 我想用DeviceIoControl如下面的代码:搜索文件到Ntfs

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

documentation列出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 
+0

感谢您的重播。 –

+0

我可以给你的号码,但我认为它更有助于解释如何为自己得到它。然后你可以找出你可能需要的任何其他FSCTL代码值。 –