C#, Visual Studio Express 2013, Windows 8.1
Die Funktion readsector(..) ruft die Function Read(...) auf.
Beträgt die Länge von "byte[] buffer" 512 bekomme ich beim Aufruf
von Read(..) eine Exception, wenn ich einen Sektor größer 0 lesen
will. Bei einer Länge von 1024 kommt die Exception an dem Sektor 513.
Je länger "buffer" ist, desto höhere Sektoren können gelesen werden.
Was hat die Länge von "buffer" mit der Sektornummer in "sector" zu tun?
Die Exception tritt auch auf, wenn in Read(...) die Zeilen von "long a"
bis zur abschließenden Klammer des IFs auskommentiert werden. D. h. das
Problem hat wahrscheinlich etwas mit dem Aufruf von Read(...) zu tun.
Eine Recherche - Stack Flow, Microsoft - hat keine Erkenntnisse
gebracht.
Wo liegt der Fehler bzw. was ist zu tun um ihn einzugrenzen?
1 | Offset and length were out of bounds for the array or count is greater than
|
2 | the number of elements from index to the end of the source collection.
|
1 | public void readsector(byte[] buffer, int sector, int amount)
|
2 | {
|
3 | var reader = new BinaryReader(new DeviceStream(@"\\.\PHYSICALDRIVE6"));
|
4 |
|
5 | try
|
6 | {
|
7 | reader.Read(buffer, sector, amount);
|
8 | }
|
9 | catch (Exception e)
|
10 | {
|
11 | Console.WriteLine(e.Message);
|
12 | }
|
13 | reader.Close();
|
14 | }
|
1 | public override int Read(byte[] buffer, int sector, int amount)
|
2 | {
|
3 | int BytesRead = 0;
|
4 |
|
5 | long a;
|
6 | SetFilePointerEx(handleValue, sector * 512, out a, 0);
|
7 |
|
8 | if (!ReadFile(handleValue.DangerousGetHandle(), buffer, amount, ref BytesRead, IntPtr.Zero))
|
9 | {
|
10 | Marshal.ThrowExceptionForHR(Marshal.GetHRForLastWin32Error());
|
11 | }
|
12 |
|
13 | return BytesRead;
|
14 | }
|