2017-03-22 2 views
0

Ich versuche, den physischen Speicherort einer Datei auf der Festplatte zu erhalten. Dies ist der aktuelle Code:Fehler 87 Bei Verwendung von 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) 

Wenn ich versuche, den Code auszuführen, ich diesen Fehler:

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

Dieser Fehler ist "Ungültige Parameter". Welche Parameter habe ich falsch verwendet?

+0

natürlich ungültiger Parameter, weil Sie 'DeviceIoControl' absolut falsch aufrufen. weniger Parameter als muss sein. Wo ist 'STARTING_VCN_INPUT_BUFFER'? Wo ist 'RETRIEVAL_POINTERS_BUFFER'? – RbMm

+0

Wie bekomme ich die Werte dieser Parameter? –

Antwort

0

Bitte sehen Sie sich die this MSDN-Site an.

Die Anzahl der Parameter ist falsch. Sie benötigen einen Eingangspuffer und einen Ausgangspuffer. Eingabe ist die Start-VCN (> = 0), Handle muss ein alternativer Stream, eine Datei, ein Volume oder ein Verzeichnis-Handle sein. Der Eingangspuffer ist vom Typ

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

wirklich 'StartingVcn> = 0' (nicht'> 0') und Datei kann nicht sein * Volume * behandeln. nur alternativer Stream, Datei oder Verzeichnis – RbMm

+0

Sie sind korrekt VCN> = 0. Handle kann ein Volume-Handle sein siehe Dokumentation "Dieser Parameter kann optional ein Handle für ein NTFS-Volume sein." – bkausbk

Verwandte Themen