2017-03-22 110 views
0

我想獲得磁盤上的文件的物理位置。 這是當前的代碼:錯誤87當使用DeviceIoControl(FSCTL_GET_RETRIEVAL_POINTERS)

import win32file 
import winioctlcon 

handle = win32file.CreateFile(raw_input("File: "), win32file.GENERIC_READ, win32file.FILE_SHARE_READ | win32file.FILE_SHARE_WRITE, None, win32file.OPEN_EXISTING, win32file.FILE_ATTRIBUTE_NORMAL | win32file.FILE_FLAG_OVERLAPPED,None) 
loc = win32file.DeviceIoControl(handle, winioctlcon.FSCTL_GET_RETRIEVAL_POINTERS,"",8192,None) 

當我嘗試運行代碼,我得到這個錯誤:

pywintypes.error: (87, 'DeviceIoControl', '\xfe\xfe\xe4\xf4\xf8\xee\xe8\xf8 \xf9 
\xe2\xe5\xe9.') 

此錯誤是「無效的參數」。我使用了哪些參數錯誤?

+0

當然無效的參數,因爲你調用'DeviceIoControl'絕對不正確。參數少於必須的參數。 'STARTING_VCN_INPUT_BUFFER'在哪裏? 「RETRIEVAL_POINTERS_BUFFER」在哪裏? – RbMm

+0

如何獲得這些參數的值? –

回答

0

請看看this MSDN網站。

您的參數計數不正確。您需要一個輸入緩衝區和一個輸出緩衝區。輸入是VCN的開始(> = 0),句柄需要是備用流,文件,卷或目錄句柄。輸入緩衝區的類型爲

typedef struct { 
    LARGE_INTEGER StartingVcn; 
} STARTING_VCN_INPUT_BUFFER, *PSTARTING_VCN_INPUT_BUFFER; 
+0

確實'StartingVcn> = 0'(而不是'> 0'),文件不能是* volume *句柄。只有備用的流,文件或目錄 – RbMm

+0

您是正確的VCN> = 0。句柄可以是卷句柄請參閱文檔「此參數可以選擇性地作爲NTFS卷的句柄。」 – bkausbk

相關問題