Ja stimmt - deshalb ja auch >>brutal<<
Mir fällt leider keine Funktion ein, mit der man die Protektion eines Bereiches im Speicher auslesen kann ..
Ich hab mal den Try-Except Block weggetan und es mit VirtualProect - auch keine gute Lösung - gelöst
Delphi-Quellcode:
function CntArrDimensions( const Arr: Pointer ): String;
var
Protection: Cardinal;
begin
VirtualProtect( pCardinal( Cardinal(Arr^) - 4 ), 4, PAGE_READWRITE, Protection );
VirtualProtect( pCardinal( Cardinal(Arr^) - 4 ), 4, Protection, Protection );
if Protection = 0 then
Exit;
Result := '0..' + IntToStr( pCardinal( Cardinal(Arr^) - 4 )^ - 1 ) + ' ' + CntArrDimensions( Pointer( Cardinal(Arr^) ) );
end;
Edit:
@Daniel - Kuhle Signatur