2017-03-22 17 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

もちろん無効なパラメータです。より少ないパラメータが必要です。 'STARTING_VCN_INPUT_BUFFER'はどこですか? 'RETRIEVAL_POINTERS_BUFFER'はどこですか? – RbMm

+0

これらのパラメータの値はどのようにして取得できますか? –

答えて

0

MSDNサイトthisをご覧ください。

あなたの数は間違っています。入力バッファと出力バッファが必要です。入力は開始VCN(> = 0)で、ハンドルは代替ストリーム、ファイル、ボリュームまたはディレクトリハンドルにする必要があります。入力バッファは、 `DeviceIoControl`を絶対に間違って呼び出したので、タイプが

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

は実際に 'StartingVcn> = 0'('> 0'ではなく)です。ファイルは* volume *ハンドルにすることはできません。代替ストリーム、ファイル、またはディレクトリのみ – RbMm

+0

正しいVCN> = 0です。ハンドルはボリュームハンドルにすることができます。ドキュメント「このパラメータはオプションでNTFSボリュームのハンドルにすることができます」を参照してください。 – bkausbk

関連する問題