2012-12-26 86 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代碼值。 –