Code: Select all
; put the file path here
File := "D:\Matias Juarez\Descargas\Varios archivos\Discovery Channel Gold Rush Alaska - S08E03 Busted And Bushfixed.ts"
VarSetCapacity(GUID, 16)
DllCall("Ole32.dll\CLSIDFromString", "Str", "{0000013A-0000-0000-C000-000000000046}", "UPtr", &GUID)
IPropertySetStorage := 0
DllCall("Ole32.dll\StgOpenStorageEx", "UPtr", &File, "UInt", 0x10, "Int", 4, "UInt", 0, "UPtr", 0, "UPtr", 0, "UPtr", &GUID, "UPtrP", IPropertySetStorage, "UInt")
IEnumSTATPROPSETSTG := 0
DllCall(NumGet(NumGet(IPropertySetStorage+0)+6*A_PtrSize), "UPtr", IPropertySetStorage, "UPtrP", IEnumSTATPROPSETSTG, "UInt")
Buffer := 0
VarSetCapacity(STATPROPSETSTG, 64)
Fetched := 0
While !DllCall(NumGet(NumGet(IEnumSTATPROPSETSTG+0)+3*A_PtrSize), "UPtr", IEnumSTATPROPSETSTG, "UInt", 1, "UPtr", &STATPROPSETSTG, "UIntP", Fetched, "UInt") ;enum
{
; Predefined Property Set Format Identifiers : https://msdn.microsoft.com/en-us/library/windows/desktop/aa380060(v=vs.85).aspx
; FMTID_SummaryInformation = {F29F85E0-4FF9-1068-AB91-08002B27B3D9}
; FMTID_DocSummaryInformation = {D5CDD502-2E9C-101B-9397-08002B2CF9AE}
; FMTID_UserDefinedProperties = {D5CDD505-2E9C-101B-9397-08002B2CF9AE}
DllCall("Ole32.dll\StringFromCLSID", "UPtr", &STATPROPSETSTG, "UPtrP", Buffer)
Str := StrGet(Buffer, "UTF-16"), DllCall("Ole32.dll\CoTaskMemFree", "UPtr", Buffer) ; stream name
IPropertyStorage := 0
DllCall(NumGet(NumGet(IPropertySetStorage+0)+4*A_PtrSize), "UPtr", IPropertySetStorage, "UPtr", &STATPROPSETSTG, "UInt", 0x10, "UPtrP", IPropertyStorage, "UInt")
IEnumSTATPROPSTG := 0
; IPropertyStorage::Enum method
; https://msdn.microsoft.com/en-us/library/windows/desktop/aa379973(v=vs.85).aspx
DllCall(NumGet(NumGet(IPropertyStorage+0)+11*A_PtrSize), "UPtr", IPropertyStorage, "UPtrP", IEnumSTATPROPSTG, "UInt")
List := ""
VarSetCapacity(STATPROPSTG, A_PtrSize + 4 + 4)
While !DllCall(NumGet(NumGet(IEnumSTATPROPSTG+0)+3*A_PtrSize), "UPtr", IEnumSTATPROPSTG, "UInt", 1, "UPtr", &STATPROPSTG, "UIntP", Fetched, "UInt") ;enum
{
propid := NumGet(&STATPROPSTG + A_PtrSize, "UInt")
VarSetCapacity(PROPSPEC, 2*A_PtrSize)
NumPut(1, &PROPSPEC, "UInt")
NumPut(propid, &PROPSPEC+A_PtrSize, "UInt")
VarSetCapacity(PROPVARIANT, A_PtrSize == 4 ? 16 : 24)
; IPropertyStorage::ReadMultiple method
; https://msdn.microsoft.com/en-us/library/windows/desktop/aa379975(v=vs.85).aspx
DllCall(NumGet(NumGet(IPropertyStorage+0)+3*A_PtrSize), "UPtr", IPropertyStorage, "UInt", 1, "UPtr", &PROPSPEC, "UPtr", &PROPVARIANT, "UInt")
If (NumGet(&PROPVARIANT+0, "UShort") == 31) ; VT_LPWSTR
List .= StrGet(NumGet(&PROPVARIANT + 8, "UPtr"), "UTF-16") . "`n--------------------`n"
Else
List .= "PROPVARIANT.vt=" . NumGet(&PROPVARIANT+0, "UShort") . "`n--------------------`n"
DllCall("Ole32.dll\PropVariantClear", "UPtr", &PROPVARIANT)
}
MsgBox % Str . "`n`n" . List
}
;ObjRelease * ...
I will be reviewing it better, what I am seeing at the moment, is that there is a Stream that seems not to recover (3 of 4; I see one with size 0 in ADS Manager).