Esempio n. 1
0
            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);
                }
            }
Esempio n. 2
0
 private static extern int SendIORequest(int fd, IOCTL command, ref ReadSubChannelRequest request);