private static int ReadSubChannel <T>(UnixFileDescriptor fd, CDDataFormat format, byte track, out T data) where T : struct { var req = new ReadSubChannelRequest { address_format = CDAddressFormat.CD_LBA_FORMAT, data_format = format, track = track, data_len = Util.SizeOfStructure <T>(), }; req.data = Marshal.AllocHGlobal(new IntPtr(req.data_len)); try { var rc = NativeApi.SendIORequest(fd.Value, IOCTL.CDIOCREADSUBCHANNEL, ref req); if (rc == 0) { data = Util.MarshalPointerToStructure <T>(req.data); } else { data = default(T); } return(rc); } finally { Marshal.FreeHGlobal(req.data); } }
private static extern int SendIORequest(int fd, IOCTL command, ref ReadSubChannelRequest request);