CComVariant::ReadFromStream() gibt einen Fehler (Zugriff verweigert) für Datenstrom > 1 MB zurück.

Dieser Artikel hilft Ihnen bei der Behebung des Problems, dass ein Fehler auftritt (Zugriff verweigert), wenn Ihre Anwendung CComVariant::ReadFromStream() Daten aus einem Datenstrom liest.

Originalversion des Produkts:   Visual C++
Ursprüngliche KB-Nummer:   2831480

Problembeschreibung

Sie haben eine Anwendung entwickelt, die CComVariant::ReadFromStream() Daten aus einem Datenstrom liest und eine Fehlermeldung (Zugriff verweigert) für die Datenstromgröße > 1 MB zurückgibt.

Ursache

Wenn wir atlcomcli.h überprüfen, stellen wir fest, dass die Größe hier festgelegt wurde:

#ifndef _ATL_STREAM_MAX_SIZE
#define _ATL_STREAM_MAX_SIZE0x100000
#endif

und wenn die Größe des Datenstroms die MAX-Länge erhöht, sollte der Fehler "Zugriff verweigert" ausgelöst werden.

else if (cbStrLen > _ATL_STREAM_MAX_SIZE)
{
    ATLTRACE(atlTraceCOM, 0, _T('String exceeded the maximum allowed size see _ATL_STREAM_MAX_SIZE.'));
    hr = E_ACCESSDENIED;
}

Lösung

Wenn Sie ein gültiges Szenario haben, in dem Sie Daten als Batch-Stirred-Tankreaktor (Batch Stirred Tank Reactor, BSTR) streamen, der größer als die vordefinierte Größe ist, können Sie sie ändern. Wenn Sie jedoch nicht vertrauenswürdigen Code verwenden, sollte diese Problemumgehung nicht angewendet werden.

Ein Ansatz wäre das Überschreiben CCOmVariant::ReadFromStream()von . Eine andere Möglichkeit besteht darin, sich selbst zu ändern _ATL_STREAM_MAX_SIZE .

Weitere Informationen

Wir lesen aus einem Datenstrom, und der Datenstrom kann aus einer nicht vertrauenswürdigen Quelle stammen. Der MAX-Wert dient zum Abfangen von Problemen mit Datenströmen, die bearbeitet wurden, um den Code zu testen, um eine große Anzahl von Arbeitsspeicher zuzuordnen, der DOS-Angriffe verursacht.