現在、Cでバイナリデータのストリームとして物理ハードディスクにアクセスしようとしています。イメージ(.img)をマウントし、OS(Win 7)から読み取ることができます。
私のCプログラムは、物理ドライブを読み取り専用バイナリモードで開こうとし、ドライブからデータを読み取ろうとします。
ただし、どこも検索せずにストリームからデータを読み取るだけで、すべてがうまくいき、ドライブに格納されているデータが返されます。ストリームのオフセット0にいるので、MBRを読み取ることができます。ディスク上。
fseek
ただし、原点(ゼロ)からオフセットしようとすると、 fseek
-1を返し、それができなかったことを示します。
これは、物理ディスクへのアクセスに関するアクセス許可/リング3 /ユーザーレベルの問題である可能性があると推測しています。これを行うには、カーネルレベルのアクセスを取得するためにドライバーを作成する必要があります。なぜできるのか、混乱しています。最初のセクターからいくつかのデータをうまく読み取りますが、他のオフセットを探すことはできません。以下に書いたCプログラムの一部を含めました。
FILE *disk = fopen("\\\\.\\PhysicalDrive1, "rb+");
if (disk == NULL) {
**error handle
}
else { //Opened the drive sucessfully
fread(buffer, 1, 100, disk);
printf("Reading the first byte from buffer, it's:%d\n", buffer[0]);
//This works fine and I can read any byte within the initial buffer
int test = fseek(disk, 100, SEEK_SET);
printf("The value of fseek is:%d\n", test);
//This always returns -1, indicating the seek failed
fclose(disk);
}