⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mbaspi.pas

📁 刻录机源码
💻 PAS
📖 第 1 页 / 共 2 页
字号:
    AB_Reserved: LongInt;
  end;

type
  TDiscInformation = record
    DataLen: Word;
    DiscStatus: Byte;
    FirstTrack: Byte;
    Sessions: Byte;
    FirstTrackOfLastSession: Byte;
    LastTrackOfLastSession: Byte;
    InformationValidity: Byte;
    DiscType: Byte;
    Resvd: array [0..2] of Byte;
    DiscIdentification: array [0..3] of Byte;
    Resvd2: array [12..50] of Byte;
  end;
type
  TTrackInformationBlock = packed record
   DataLength: Word;
   TrackNumber,
   SessionNumber,
   Reserved1,
   TrackMode,
   DataMode,
   Reserved2: Byte;
   TrackStartAddress,
   NextWritableAddress,
   FreeBlocks,
   FixedPacketSize,
   TrackSize,
   LastRecordedAddress: LongWord;
   TrackNumber2,
   SessionNumber2,
   Res3, Res4, Res5, Res6, Res7, Res8: Byte;
end;
type
  TTOCPMATIP0100 = packed record
    DataLength: Word;
    FirstSession, LastSession: Byte;
    Field0: Byte;
    Field1: Byte;
    Field2: Byte;
    Reserved: Byte;
    StMin: Byte;
    StSec: Byte;
    StFrame: Byte;
    Reseved2: Byte;
    EdMin: Byte;
    EdSec: Byte;
    EdFrame: Byte;
    Others: array[0..10] of byte;
  end;
  TModePage05 = packed record
    PageCode,
    PageLen: byte;
    WriteType : Byte;
    TrackMode : Byte;
    DBType : Byte;
    LinkSize: Byte;
    Res6: Byte;
    Host_App_Code: Byte;
    SessionFormat: Byte;
    Res9: Byte;
    PacketSize: LongWord;
    PauseLen: Word;
    MediaCatNumber: array[1..16] of char;
    ISRC: array[1..14] of char;
    sub_header: array[1..4] of char;
    vendor_uniq: array[1..4] of char;
  end;
  TTEST = packed record
    Res1: Byte;
    Res2: Byte;
    Speed: WORD;
  end;
  TModePage2A = packed record   // CD Capabilities
    PageCode: Byte;	      //0
    PageLen: Byte;	      //1
    DiscReadCaps: Byte;   //2
    DiscWriteCaps: Byte;  //3
    AudioPlay: Byte;	    //4
    CDDASupported: Byte;  //5
    Lock: Byte;	          //6
    SepChanVol: Byte;	    //7
    MaxReadSpeed: Word;	  //8-9
    NumVolLevels: Word;   //10-11
    BufferSize:Word;	    //12-13
    CurReadSpeed: Word;	  //14-15
    Reserved16: Byte;     //16
    BCKF: Byte;	          //17
    MaxWriteSpeed: Word;  //18-19
    CurWriteSpeed: Word;  //20-21
    CMRS: WORD;           //22-23
    RES24: BYTE; RES25: BYTE; RES26: BYTE;  //24-26
    RCS: BYTE;            //27
    CWSS: WORD;           //28-29
    WW: Word;             //30-31
    WriteSpeeds:array [0..120] of Ttest;
  end;
  TInquiryData = packed record
    PeripheralData: Byte;
    RMB: Byte;
    Version: Byte;
    Byte3: Byte;
    AdditionalLen: Byte;
    Byte5: Byte;
    Byte6: Byte;
    Byte7: Byte;
    VendorID: array[8..15] of char;
    ProductID: array[16..31] of char;
    ProductRev: array[32..35] of char;
    VendorSpecific: array[36..55] of char;
    Byte56: Byte;
    Reseverd: Byte;
    v1, v2, v3, v4: Word;
    OtherVData: array [0..62] of byte;
    DeviceType: ShortInt;  //PeripheralData
    Qulifier: Byte;
  end;
type
  TTOCData0000 = packed record
    DataLength : Word;
    FirstTrackNumber: Byte;
    LastTrackNumber: Byte;
    Res1, Res2: Byte;
    TrackNumber: Byte;
    Res3: Byte;      
    TrackStartAddress: Cardinal;
    OtherData: array[0..101] of byte;
  end;
  TTOCData0001 = packed record
    DataLength : Word;
    FirstTrackNumber: Byte;
    LastTrackNumber: Byte;
  end;
  PSCSI_ADDRESS = ^SCSI_ADDRESS;
  SCSI_ADDRESS = packed record
    Length: Cardinal;
    PortNumber,
    PathId,
    TargetId,
    Lun: Byte;
  end;

  
type
  TDisc = record
    Capacity: Integer;
    DiscStatus,
    LastSession
    : Byte;
    BackgroundFormat: Byte;
    Eraseable: Boolean;
  end;
var
  ASPILayerName: String;
  TryInternalASPIFirst: Boolean;
  SendASPI32Command: function(LPSRB: Pointer):DWORD; cdecl;
  GetASPI32SupportInfo: function: DWORD; cdecl;
  ASPIDLLLoaded: Boolean  = False;

function _InitializeASPI(InternalFirst: Boolean; AspiPath: String): Boolean;
function _ReInitializeASPI: Boolean;
function _DeInitializeASPI: Boolean;

implementation
var
  ASPIDLLHandle: DWORD = 0;

{******************************************************************************}
{                              _InitializeASPI                                 }
{******************************************************************************}
function _InitializeASPI(InternalFirst: Boolean; AspiPath: String): Boolean;
var
  ErrorMode: DWORD;
begin
  ErrorMode := SetErrorMode(SEM_FAILCRITICALERRORS);
  if InternalFirst and (SPTIInit <> 0) then
  begin
    @GetASPI32SupportInfo := @__GetASPI32SupportInfo;
    @SendASPI32Command := @__SendASPI32Command;
    ASPIDLLLoaded := True;
    ASPILayerName := 'BMASPI32';
  end;
  if not ASPIDLLLoaded then
  begin
    ASPIDLLHandle := 0;
    try
      if (AspiPath <> '')
        then ASPIDLLHandle := LoadLibrary(pchar(AspiPath));
      if (ASPIDLLHandle = 0)
        then ASPIDLLHandle := LoadLibrary('.\WNASPI32.DLL');
      if ASPIDLLHandle = 0 then
        ASPIDLLHandle := LoadLibrary('WNASPI32.DLL');
    except
      ASPIDLLHandle := 0;
    end;
    if ASPIDLLHandle > 31 then
    begin
      ASPILayerName := 'WNASPI32.DLL';
      ASPIDLLLoaded := True;
      @GetASPI32SupportInfo := GetProcAddress(ASPIDLLHandle,'GetASPI32SupportInfo');
      @SendASPI32Command := GetProcAddress(ASPIDLLHandle,'SendASPI32Command');
      Assert(@GetASPI32SupportInfo <> nil);
      Assert(@SendASPI32Command <> nil);
    end
    else
    begin
      (*
      ASPIDLLHandle := LoadLibrary('ASAPI.DLL');
      if ASPIDLLHandle > 31 then
      begin
        ASPILayerName := 'ASAPI.DLL';
        ASPIDLLLoaded := True;
        @GetASPI32SupportInfo := GetProcAddress(ASPIDLLHandle,'GetASAPI32SupportInfo');
        Assert(@GetASPI32SupportInfo <> nil);
        @SendASPI32Command := GetProcAddress(ASPIDLLHandle,'SendASAPI32Command');
        Assert(@SendASPI32Command <> nil);
      end;  *)
    end;
    if (not ASPIDLLLoaded) and (SPTIInit <> 0) then
    begin
      @GetASPI32SupportInfo := @__GetASPI32SupportInfo;
      @SendASPI32Command := @__SendASPI32Command;
      ASPIDLLLoaded := True;
      ASPILayerName := 'BMASPI32';
    end;
  end;
  if ASPIDLLLoaded then
    GetASPI32SupportInfo;
  result := ASPIDLLLoaded;
  TryInternalASPIFirst := InternalFirst;
  SetErrorMode(ErrorMode);
end;

function _ReInitializeASPI: Boolean;
begin
  if ASPILayerName = 'BMASPI32' then
  begin
    ASPIDLLLoaded := False;
    SPTIDeInit;
  end
  else
  begin
    _DeInitializeASPI;
  end;
  _InitializeASPI(TryInternalASPIFirst, '');
  result := True;

end;

function _DeInitializeASPI: Boolean;
begin
  result := true;
  if ASPIDLLLoaded and (ASPIDLLHandle <> 0) then
  begin
    ASPIDLLLoaded := False;
    Result := FreeLibrary(ASPIDLLHandle);
    ASPIDLLHandle := 0;
  end;
end;

initialization
  ASPIDLLLoaded := False;

finalization
  if ASPIDLLLoaded and (ASPIDLLHandle <> 0) then
    FreeLibrary(ASPIDLLHandle);
end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -