Delphiで、論理ディスクドライブデバイス「C:\」から直接CDを生のストリームとして読み取ることができるかどうかを知りたいです。
すでに有効なファイルハンドルがあれば、TFileStreamを使用できるといいのですが。
私の見解THandleStream
よりも使用するのが最も簡単です。TFileStream
このような:
procedure ReadFirstSector;
var
Handle: THandle;
Stream: THandleStream;
Buffer: array [1..512] of Byte;
b: Byte;
begin
Handle := CreateFile('\\.\C:', GENERIC_READ,
FILE_SHARE_READ or FILE_SHARE_WRITE, nil,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
if Handle=INVALID_HANDLE_VALUE then
RaiseLastOSError;
try
Stream := THandleStream.Create(Handle);
try
Stream.ReadBuffer(Buffer, SizeOf(Buffer));
for b in Buffer do
Writeln(AnsiChar(b));
finally
Stream.Free;
end;
finally
CloseHandle(Handle);
end;
end;
rawディスクアクセスを使用する場合は、正確に複数のセクターを読み取る必要があることに注意してください。テストしたディスクのセクターのサイズは512バイトです。CDディスクセクターは非常に異なるサイズになる可能性があると思います。