imapi2 xp/sp2/3+vista cd/dvd/brennerinfo (FEATURE + PROFILE)

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
bingo
Beiträge: 118
Registriert: 16.09.2004 18:33
Wohnort: thüringen
Kontaktdaten:

imapi2 xp/sp2/3+vista cd/dvd/brennerinfo (FEATURE + PROFILE)

Beitrag von bingo »

es gibt hier schon einige abhandlungen zur nutzung des imapi2-interfaces unter xp (sp2/sp3) und/oder vista ...

habe mal vorhandene codes etwas vereinfacht ...

Code: Alles auswählen

Interface IDiscMaster2 Extends IDispatch
  get__NewEnum(a)
  get_Item(a,b)
  get_Count(a)
  get_IsSupportedEnvironment(a)
EndInterface

Interface IDiscRecorder2 Extends IDispatch
  EjectMedia()
  CloseTray()
  AcquireExclusiveAccess(a,b)
  ReleaseExclusiveAccess()
  DisableMcn()
  EnableMcn()
  InitializeDiscRecorder(a)
  get_ActiveDiscRecorder(a)
  get_VendorId(a)
  get_ProductId(a)
  get_ProductRevision(a)
  get_VolumeName(a)
  get_VolumePathNames(a)
  get_DeviceCanLoadMedia(a)
  get_LegacyDeviceNumber(a)
  get_SupportedFeaturePages(a)
  get_CurrentFeaturePages(a)
  get_SupportedProfiles(a)
  get_CurrentProfiles(a)
  get_SupportedModePages(a)
  get_ExclusiveAccessOwner(a)
EndInterface

#IMAPI_PROFILE_TYPE_INVALID                      = 0
#IMAPI_PROFILE_TYPE_NON_REMOVABLE_DISK           = 1
#IMAPI_PROFILE_TYPE_REMOVABLE_DISK               = 2
#IMAPI_PROFILE_TYPE_MO_ERASABLE                  = 3
#IMAPI_PROFILE_TYPE_MO_WRITE_ONCE                = 4
#IMAPI_PROFILE_TYPE_AS_MO                        = 5
#IMAPI_PROFILE_TYPE_CDROM                        = 8
#IMAPI_PROFILE_TYPE_CD_RECORDABLE                = 9
#IMAPI_PROFILE_TYPE_CD_REWRITABLE                = $a
#IMAPI_PROFILE_TYPE_DVDROM                       = $10
#IMAPI_PROFILE_TYPE_DVD_DASH_RECORDABLE          = $11
#IMAPI_PROFILE_TYPE_DVD_RAM                      = $12
#IMAPI_PROFILE_TYPE_DVD_DASH_REWRITABLE          = $13
#IMAPI_PROFILE_TYPE_DVD_DASH_RW_SEQUENTIAL       = $14
#IMAPI_PROFILE_TYPE_DVD_DASH_R_DUAL_SEQUENTIAL   = $15
#IMAPI_PROFILE_TYPE_DVD_DASH_R_DUAL_LAYER_JUMP   = $16
#IMAPI_PROFILE_TYPE_DVD_PLUS_RW                  = $1a
#IMAPI_PROFILE_TYPE_DVD_PLUS_R                   = $1b
#IMAPI_PROFILE_TYPE_DVD_PLUS_RW_DUAL             = $2a
#IMAPI_PROFILE_TYPE_DVD_PLUS_R_DUAL              = $2b
#IMAPI_PROFILE_TYPE_BD_ROM                       = $40
#IMAPI_PROFILE_TYPE_BD_R_SEQUENTIAL              = $41
#IMAPI_PROFILE_TYPE_BD_R_RANDOM_RECORDING        = $42
#IMAPI_PROFILE_TYPE_BD_REWRITABLE                = $43
#IMAPI_PROFILE_TYPE_HD_DVD_ROM                   = $50
#IMAPI_PROFILE_TYPE_HD_DVD_RECORDABLE            = $51
#IMAPI_PROFILE_TYPE_HD_DVD_RAM                   = $52
#IMAPI_PROFILE_TYPE_DDCDROM                      = $20
#IMAPI_PROFILE_TYPE_DDCD_RECORDABLE              = $21
#IMAPI_PROFILE_TYPE_DDCD_REWRITABLE              = $0022
#IMAPI_PROFILE_TYPE_NON_STANDARD                 = $ffff 

#IMAPI_FEATURE_PAGE_TYPE_PROFILE_LIST                     = 0
#IMAPI_FEATURE_PAGE_TYPE_CORE                             = $1
#IMAPI_FEATURE_PAGE_TYPE_MORPHING                         = $2
#IMAPI_FEATURE_PAGE_TYPE_REMOVABLE_MEDIUM                 = $3
#IMAPI_FEATURE_PAGE_TYPE_WRITE_PROTECT                    = $4
#IMAPI_FEATURE_PAGE_TYPE_RANDOMLY_READABLE                = $10
#IMAPI_FEATURE_PAGE_TYPE_CD_MULTIREAD                     = $1d
#IMAPI_FEATURE_PAGE_TYPE_CD_READ                          = $1e
#IMAPI_FEATURE_PAGE_TYPE_DVD_READ                         = $1f
#IMAPI_FEATURE_PAGE_TYPE_RANDOMLY_WRITABLE                = $20
#IMAPI_FEATURE_PAGE_TYPE_INCREMENTAL_STREAMING_WRITABLE   = $21
#IMAPI_FEATURE_PAGE_TYPE_SECTOR_ERASABLE                  = $22
#IMAPI_FEATURE_PAGE_TYPE_FORMATTABLE                      = $23
#IMAPI_FEATURE_PAGE_TYPE_HARDWARE_DEFECT_MANAGEMENT       = $24
#IMAPI_FEATURE_PAGE_TYPE_WRITE_ONCE                       = $25
#IMAPI_FEATURE_PAGE_TYPE_RESTRICTED_OVERWRITE             = $26
#IMAPI_FEATURE_PAGE_TYPE_CDRW_CAV_WRITE                   = $27
#IMAPI_FEATURE_PAGE_TYPE_MRW                              = $28
#IMAPI_FEATURE_PAGE_TYPE_ENHANCED_DEFECT_REPORTING        = $29
#IMAPI_FEATURE_PAGE_TYPE_DVD_PLUS_RW                      = $2a
#IMAPI_FEATURE_PAGE_TYPE_DVD_PLUS_R                       = $2b
#IMAPI_FEATURE_PAGE_TYPE_RIGID_RESTRICTED_OVERWRITE       = $2c
#IMAPI_FEATURE_PAGE_TYPE_CD_TRACK_AT_ONCE                 = $2d
#IMAPI_FEATURE_PAGE_TYPE_CD_MASTERING                     = $2e
#IMAPI_FEATURE_PAGE_TYPE_DVD_DASH_WRITE                   = $2f
#IMAPI_FEATURE_PAGE_TYPE_LAYER_JUMP_RECORDING             = $33
#IMAPI_FEATURE_PAGE_TYPE_CD_RW_MEDIA_WRITE_SUPPORT        = $37
#IMAPI_FEATURE_PAGE_TYPE_BD_PSEUDO_OVERWRITE              = $38
#IMAPI_FEATURE_PAGE_TYPE_DVD_PLUS_R_DUAL_LAYER            = $3b
#IMAPI_FEATURE_PAGE_TYPE_BD_READ                          = $40
#IMAPI_FEATURE_PAGE_TYPE_BD_WRITE                         = $41
#IMAPI_FEATURE_PAGE_TYPE_HD_DVD_READ                      = $50
#IMAPI_FEATURE_PAGE_TYPE_HD_DVD_WRITE                     = $51
#IMAPI_FEATURE_PAGE_TYPE_POWER_MANAGEMENT                 = $100
#IMAPI_FEATURE_PAGE_TYPE_SMART                            = $101
#IMAPI_FEATURE_PAGE_TYPE_EMBEDDED_CHANGER                 = $102
#IMAPI_FEATURE_PAGE_TYPE_CD_ANALOG_PLAY                   = $103
#IMAPI_FEATURE_PAGE_TYPE_MICROCODE_UPDATE                 = $104
#IMAPI_FEATURE_PAGE_TYPE_TIMEOUT                          = $105
#IMAPI_FEATURE_PAGE_TYPE_DVD_CSS                          = $106
#IMAPI_FEATURE_PAGE_TYPE_REAL_TIME_STREAMING              = $107
#IMAPI_FEATURE_PAGE_TYPE_LOGICAL_UNIT_SERIAL_NUMBER       = $108
#IMAPI_FEATURE_PAGE_TYPE_MEDIA_SERIAL_NUMBER              = $109
#IMAPI_FEATURE_PAGE_TYPE_DISC_CONTROL_BLOCKS              = $10a
#IMAPI_FEATURE_PAGE_TYPE_DVD_CPRM                         = $10b
#IMAPI_FEATURE_PAGE_TYPE_FIRMWARE_INFORMATION             = $10c
#IMAPI_FEATURE_PAGE_TYPE_AACS                             = $10d
#IMAPI_FEATURE_PAGE_TYPE_VCPS                             = $110 

Procedure.s Uni2Ansi(unicode.l) 
ProcedureReturn PeekS(UnicodeToMultiByte_(unicode,#CP_ACP)) 
EndProcedure

pp.variant
pp\vt = #VT_BSTR

CoInitialize_(0) 
If CoCreateInstance_(?CLSID_MsftDiscMaster2,0,1,?IID_IDiscMaster2,@object1.IDiscMaster2) = 0 
If CoCreateInstance_(?CLSID_MsftDiscRecorder2,0,1,?IID_IDiscRecorder2,@object2.IDiscRecorder2) = 0 

object1\get_Item(0,@pp\bstrval) ; first drive only
Debug uni2ansi(pp\bstrval)

object2\InitializeDiscRecorder(pp\bstrval) ;init drive

;object2\EjectMedia() ;eject
object2\get_VendorId(@pp\bstrval)
Debug uni2ansi(pp\bstrval) ;vendor

object2\get_SupportedProfiles(@arraypoint.l)

;Debug "size..."
;Debug SafeArrayGetElemsize_(arraypoint) ; always 16

SafeArrayGetUBound_(arraypoint,1,@bound.l)
SafeArrayAccessData_(arraypoint,@adata.l)
adata = adata + 8 ;value pointer
Debug "IMAPI_FEATURE_PAGE..."
For i=0 To bound
Debug Hex(PeekW(adata + (i*16)))
;compare with #IMAPI_FEATURE_PAGE... const !
;use case ...
Next
SafeArrayUnaccessData_(arraypoint)
SafeArrayDestroy_(arraypoint)

object2\get_SupportedFeaturePages(@arraypoint)

;Debug "size..."
;Debug SafeArrayGetElemsize_(arraypoint) ; always 16

SafeArrayGetUBound_(arraypoint,1,@bound)
SafeArrayAccessData_(arraypoint,@adata)
adata = adata + 8 ;value pointer
Debug "IMAPI_PROFILE_TYPE..."
For i=0 To bound
Debug Hex(PeekW(adata + (i*16)))
;compare with #IMAPI_PROFILE_TYPE... const !
;use case ...
Next
SafeArrayUnaccessData_(arraypoint)
SafeArrayDestroy_(arraypoint)

object2\release()
object1\release()

EndIf
EndIf

CoUninitialize_()

End

DataSection
  CLSID_MsftDiscMaster2:
    Data.l $2735412E
    Data.w $7F64,$5B0F
    Data.b $8F,$0,$5D,$77,$AF,$BE,$26,$1E
  CLSID_MsftDiscRecorder2:
    Data.l $2735412D
    Data.w $7F64,$5B0F
    Data.b $8F,$0,$5D,$77,$AF,$BE,$26,$1E
  IID_IDiscMaster2:
    Data.l $27354130
    Data.w $7F64,$5B0F
    Data.b $8F,$0,$5D,$77,$AF,$BE,$26,$1E
  IID_IDiscRecorder2:
    Data.l $27354133
    Data.w $7F64,$5B0F
    Data.b $8F,$0,$5D,$77,$AF,$BE,$26,$1E
EndDataSection
der unterschied liegt in der nutzung der SafeArray...APIs ! man erspart sich damit einiges an variant & co und kann direkt auf die werte zugreifen .
http://msdn.microsoft.com/en-us/library ... 85%29.aspx :allright:
1:0>1
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Bekomme keinerlei Ausgabe?
WinXP SP3, PB 4.20 b5
SATA Multinorm-Brenner von LG

Woran könnte das liegen? oder was fehlt mir?
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
bingo
Beiträge: 118
Registriert: 16.09.2004 18:33
Wohnort: thüringen
Kontaktdaten:

Beitrag von bingo »

dieser kb muss installiert sein bei xp !

http://www.microsoft.com/downloads/deta ... laylang=en

so wie ich das überblicke , wird der auch nicht bei sp3 installiert (siehe imapi2.dll im ...system32)
1:0>1
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

bingo hat geschrieben:dieser kb muss installiert sein bei xp !

http://www.microsoft.com/downloads/deta ... laylang=en

so wie ich das überblicke , wird der auch nicht bei sp3 installiert (siehe imapi2.dll im ...system32)
---------------------------
KB932716 Setup-Fehler
---------------------------
Die Service Pack-Version dieses Systems ist neuer als das Update,
das Sie installieren möchten.

Das Update muss nicht installiert werden.
---------------------------
OK
---------------------------
Die DLL ist nicht da und das Paket will er nicht installieren :(
Keine Ahnung was das wieder soll?
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
bingo
Beiträge: 118
Registriert: 16.09.2004 18:33
Wohnort: thüringen
Kontaktdaten:

Beitrag von bingo »

ok , dann gibts wohl für dich keine lösung ... :mrgreen:

klar ... die updates sind an servicepacks gekoppelt . da bei mir das KB schon vor sp3 installiert war , funktioniert das auch . unter vista sowieso ...

sieht wohl so aus , dass man derzeit keine imapi 2 unterstützung installieren kann , wenn sp3 installiert ist . soll sich aber ändern ... 8)

http://forums.microsoft.com/MSDN/ShowPo ... 1&pageid=0
1:0>1
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

bingo hat geschrieben:ok , dann gibts wohl für dich keine lösung ... :mrgreen:
Böses Windows schon wieder :(
:lol:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
bingo
Beiträge: 118
Registriert: 16.09.2004 18:33
Wohnort: thüringen
Kontaktdaten:

Beitrag von bingo »

1:0>1
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Danke, hab aber gerade Vista an, werde es aber die nächsten Tage nochmal
unter XP checken.

PS: Die Uni2Ansi ist überflüssig, mach einfach:

Code: Alles auswählen

Debug PeekS(pp\bstrval, -1, #PB_Unicode)
statt:

Code: Alles auswählen

Debug uni2ansi(pp\bstrval)
Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten